Fix hover help for matrix

This commit is contained in:
Graham Knop 2007-10-04 19:23:08 +00:00
parent 183242a6ce
commit 3f5ca61c12
11 changed files with 318 additions and 61 deletions

View file

@ -6,6 +6,7 @@
- fix: Can't add assets when not using preload.perl.
- fix: graphing doesn't work with GraphicsMagick
- fix: Calendar generated iCal for last 30 days instead of next 30 days
- fix: hover help doesn't appear for matrix fields
7.4.8
- fix: Syndicated Content doesn't display all items with multiple feeds in interleaved mode

View file

@ -0,0 +1,80 @@
#matrixtmpl000000000002
<h2>Comparison</h2>
<table cellpadding="0" cellspacing="0" border="0" style="font-size: 11px; font-family: helvetica, arial, sans-serif;">
<tr>
<td valign="top"><tmpl_var compare.form></td>
<td style="width:10px;">&nbsp;</td>
<td style="width:3px;background-color:silver;">&nbsp;</td>
<td style="width:10px;">&nbsp;</td>
<td valign="top">
<tmpl_if isTooMany>
You tried to compare too many listings. Please choose <tmpl_var maxCompares> or less at a time.
</tmpl_if>
<tmpl_if isTooFew>
You must choose at least two products to compare. Less than two isn't much of a comparison.
</tmpl_if>
<tmpl_unless isTooFew><tmpl_unless isTooMany>
<table style="font-size: 11px; font-family: helvetica, arial, sans-serif;" cellpadding="2" cellspacing="2" border="0">
<tr>
<td style="border-bottom:solid gray 1px;font-weight:bold;font-size:13px;">Product</td>
<tmpl_loop product_loop>
<td style="border-bottom:solid gray 1px;"><a href="<tmpl_var url>"><tmpl_var name> <tmpl_var version></a></td>
</tmpl_loop>
</tr>
<tr>
<td class="lastUpdated">Last Updated</td>
<tmpl_loop lastupdated_loop>
<td class="lastUpdated" style="text-align:center;"><tmpl_var lastupdated></td>
</tmpl_loop>
</tr>
<tmpl_loop category_loop>
<tr><td class="category"><b><tmpl_var category></b></td>
<tmpl_loop product_loop>
<td align="center"><tmpl_var name></td>
</tmpl_loop>
</tr>
<tmpl_loop row_loop>
<tr
<tmpl_if __ODD__>
class="odd"
<tmpl_else>
class="even"
</tmpl_if>
>
<tmpl_loop column_loop>
<td class="<tmpl_var class>">
<tmpl_var value>
<tmpl_if description>
<div class="wg-hoverhelp"><tmpl_var description></div>
</tmpl_if>
</td>
</tmpl_loop>
</tr>
</tmpl_loop>
</tmpl_loop>
</table>
</tmpl_unless></tmpl_unless>
</td></tr></table>
~~~
<style type="text/css">
.lastUpdated {
background-color:#F0F0F0;
}
.category {
font-size:13px;
}
</style>

View file

@ -0,0 +1,103 @@
#matrixtmpl000000000003
<h2><tmpl_var productName></h2>
<table class="content" border="0" cellspacing="5">
<tr><td valign="top">
<table class="content">
<tr><td><b>Web Site</b></td><td><a onclick="window.open('<tmpl_var productUrl.click>')" href="#"><tmpl_var productUrl></a></td></tr>
<tr><td><b>Version Number</b></td><td><tmpl_var versionNumber></td></tr>
<tr><td><b>Manufacturer</b></td><td><a onclick="window.open('<tmpl_var manufacturerUrl.click>')" href="#"><tmpl_var manufacturerName></a></td></tr>
<tr><td><b>Last Updated</b></td><td><tmpl_var lastUpdated.date></td></tr>
<tr><td><b>Clicks</b></td><td><tmpl_var clicks></td></tr>
<tr><td><b>Views</b></td><td><tmpl_var views></td></tr>
<tr><td><b>Compares</b></td><td><tmpl_var compares></td></tr>
<tr><td><b>Screenshot</b></td><td><a href="<tmpl_var screenshot>"><img src="<tmpl_var thumbnail>" alt="Screenshot"`></a></td></tr>
</table>
</td>
<td valign="top" style="background-color:silver;">&nbsp;</td>
<td valign="top">
<tmpl_if description>
<b>Description</b><br />
<tmpl_var description><br /><br />
</tmpl_if>
<b>Contact Maintainer</b><br />
<tmpl_if email.wasSent>
<div style="color: green;">Message sent.<br /></div>
</tmpl_if>
<tmpl_var email.form>
</td>
<td valign="top" style="background-color:silver;">&nbsp;</td>
<td valign="top">
<tmpl_var ratings>
</td>
</tr>
</table>
<p />
<table width="100%" class="content">
<tr>
<td valign="top" style="width:50%">
<span class="category">Features</span>
<table class="content" width="180">
<tmpl_loop features_loop>
<tr<tmpl_if __ODD__> class="odd"<tmpl_else> class="even"</tmpl_if>>
<td><tmpl_var label><div class="wg-hoverhelp"><tmpl_var description></div></td>
<td><tmpl_var value></td>
</tr>
</tmpl_loop>
<tr>
<td>&#160;</td>
<td>&#160;</td>
</tr>
</table>
<p />
</td>
<td valign="top" style="width:50%;">
<span class="category">Benefits</span>
<table class="content" width="180">
<tmpl_loop benefits_loop>
<tr<tmpl_if __ODD__> class="odd"<tmpl_else> class="even"</tmpl_if>>
<td><tmpl_var label><div class="wg-hoverhelp"><tmpl_var description></div></td>
<td class="<tmpl_var class>"><tmpl_var value></td>
</tr>
</tmpl_loop>
<tr>
<td>&#160;</td>
<td>&#160;</td>
</tr>
</table>
</td>
</tr>
</table>
<p />
<tmpl_var discussion>
<tmpl_if user.canEdit>
<br /> <hr /><a href="<tmpl_var edit.url>">Edit this listing.</a> <br />
</tmpl_if>
<tmpl_if user.canApprove>
<tmpl_if isPending>
<a href="<tmpl_var approve.url>">Approve this listing.</a><br />
</tmpl_if>
<a href="<tmpl_var delete.url>">Delete this listing.</a><br />
</tmpl_if>
~~~
<style type="text/css">
.ratingForm {
font-size: 9px;
}
.statBox {
width:100%;
}
</style>

View file

@ -0,0 +1,102 @@
#matrixtmpl000000000005
<h2>Search The Matrix</h2>
<tmpl_if isTooFew>
<p class="fontSettings">Your search returned no results. Try specifying a few less criteria.</p>
</tmpl_if>
<tmpl_if isTooMany>
<p class="fontSettings">
Your search returned too many results. Either select up to <tmpl_var maxCompares> products from the list below, or specify more critera.
</p>
</tmpl_if>
<table width="100%" class="matrixSearch" border="0">
<tr>
<td valign="top">
<tmpl_var compare.form>
</td>
<td valign="top">
<tmpl_var form.header>
<tmpl_var form.submit>
<table width="100%" class="content">
<tr>
<td valign="top" style="width:50%;">
<span class="category">Features</span>
<table class="content" width="180">
<tmpl_if features>
<tmpl_loop features_loop>
<tr<tmpl_if __ODD__> class="odd"<tmpl_else> class="even"</tmpl_if>>
<td><tmpl_var label><div class="wg-tooltip"><tmpl_var description></div></td>
<td><tmpl_var form></td>
</tr>
</tmpl_loop>
<tmpl_else>
<tr><td>&#160;</td></tr>
</tmpl_if>
</table>
</td>
<td valign="top" style="width:50%;">
<span class="category">Benefits</span>
<table class="content">
<tmpl_if features>
<tmpl_loop benefits_loop>
<tr<tmpl_if __ODD__> class="odd"<tmpl_else> class="even"</tmpl_if>>
<td><tmpl_var label><div class="wg-hoverhelp"><tmpl_var description></div></td>
<td><tmpl_var form></td>
</tr>
</tmpl_loop>
<tmpl_else>
<tr><td>&#160;</td></tr>
</tmpl_if>
</table>
</td>
</tr>
</table>
<tmpl_var form.submit>
</div>
<tmpl_var form.footer>
</td></tr></table>
~~~
<style type="text/css">
h2 {
font-family:arial;
}
.fontSettings {
font-size:9pt;
font-family:arial;
}
.matrixSearch td {
font-size:9pt;
font-family:arial;
}
.matrixSearch .leftColumn {
width:48%;
}
.matrixSearch .grayBox {
background-color:#DADADA;
padding:3px;
-moz-box-sizing:border-box;
border-bottom:solid gray 2px;
}
.matrixSearch .stats .columnOne{
width:30%;
}
.matrixSearch .stats .columnTwo{
width:20%;
}
.matrixSearch .stats .columnThree{
width:50%;
}
.hrStyle {
border-bottom:solid black 1px;
height:1px;
width:100%;
}
</style>

View file

@ -326,10 +326,6 @@ sub www_compare {
if ($first) {
$desc = $row[1];
shift(@row);
$desc =~ s/\n//g;
$desc =~ s/\r//g;
$desc =~ s/'/\\\'/g;
$desc =~ s/"/\&quot;/g;
$first = 0;
}
my $class = lc($value);
@ -972,10 +968,6 @@ sub www_search {
my $sth = $self->session->db->read("select name, fieldType, label, description from Matrix_field where category = ".$self->session->db->quote($category)." order by label");
my @loop;
while (my $data = $sth->hashRef) {
$data->{description} =~ s/\n//g;
$data->{description} =~ s/\r//g;
$data->{description} =~ s/'/\\\'/g;
$data->{description} =~ s/"/\&quot;/g;
if ($data->{fieldType} ne "goodBad") {
$data->{form} = WebGUI::Form::text($self->session,{
name=>$data->{name},
@ -1217,11 +1209,7 @@ sub www_viewDetail {
my $sth = $self->session->db->read("select a.value, b.name, b.label, b.description, category from Matrix_listingData a left join
Matrix_field b on a.fieldId=b.fieldId and b.assetId=? where listingId=? order by b.label",[$self->getId, $listingId]);
while (my $data = $sth->hashRef) {
$data->{description} =~ s/\n//g;
$data->{description} =~ s/\r//g;
$data->{description} =~ s/'/\\\'/g;
$data->{description} =~ s/"/\&quot;/g;
$data->{class} = lc($data->{value});
$data->{class} = lc($data->{value});
$data->{class} =~ s/\s/_/g;
$data->{class} =~ s/\W//g;
my $cat = $self->session->url->urlize($data->{category})."_loop";

View file

@ -1055,14 +1055,14 @@ sub www_editProject {
my $hpdLabel = $i18n->get('hours per day label');
my $hpdHoverHelp = $i18n->get('hours per day hoverhelp');
$hpdHoverHelp =~ s/'/\\'/g;
my $hpdValue = $form->get("hoursPerDay") || $project->{hoursPerDay} || "8.0";
my $hpdStyle = ($dunitValue eq "days"?"display:none":"");
my $html = qq|
<tr id="hoursper" style="$hpdStyle">
<td class="formDescription" onmouseover="return escape('$hpdHoverHelp')" valign="top" style="width: 180px;">
<label for="hoursPerDay_formId">$hpdLabel</label>
<td class="formDescription" valign="top" style="width: 180px;">
<div class="wg-hoverhelp">$hpdHoverHelp</div>
<label for="hoursPerDay_formId">$hpdLabel</label>
</td>
<td valign="top" class="tableData" style="width: *;">
<input id="hoursPerDay_formId" type="text" name="hoursPerDay" value="$hpdValue" size="11" maxlength="14" />

View file

@ -257,9 +257,9 @@ sub displayFormWithWrapper {
my $self = shift;
if ($self->passUiLevelCheck) {
my ($fieldClass, $rowClass, $labelClass, $hoverHelp, $subtext) = $self->prepareWrapper;
my $hoverCode = $self->getHoverCode($hoverHelp, $self->get('id') . '_wrapper');
$hoverHelp &&= '<div class="wg-hoverhelp">' . $hoverHelp . '</div>';
return '<tr'.$rowClass.'>
<td'.$labelClass.' valign="top" style="width: 25%;">'.$self->get("label") . $hoverCode . '</td>
<td'.$labelClass.' valign="top" style="width: 25%;">'.$self->get("label") . $hoverHelp . '</td>
<td valign="top"'.$fieldClass.' style="width: 75%;">'.$self->displayForm().$subtext."</td>
</tr>\n";
} else {
@ -542,8 +542,9 @@ sub prepareWrapper {
$labelClass = qq| class="$labelClass" | if($self->get("labelClass"));
my $fieldClass = $self->get("fieldClass");
$fieldClass = qq| class="$fieldClass" | if($self->get("fieldClass"));
my $hoverHelp = $self->get("hoverHelp");
my $subtext = $self->get("subtext");
my $hoverHelp = $self->get("hoverHelp") || '';
$hoverHelp =~ s/^\s+//;
my $subtext = $self->get("subtext");
$subtext = qq| <span class="formSubtext">$subtext</span>| if ($subtext);
return ($fieldClass, $rowClass, $labelClass, $hoverHelp, $subtext);
}
@ -625,9 +626,9 @@ sub toHtmlWithWrapper {
if ($self->passUiLevelCheck) {
my $rawField = $self->toHtml(); # has to be called before prepareWrapper for some controls, namely captcha.
my ($fieldClass, $rowClass, $labelClass, $hoverHelp, $subtext) = $self->prepareWrapper;
my $hoverCode = $self->getHoverCode($hoverHelp, $self->get('id') . '_description');
$hoverHelp &&= '<div class="wg-hoverhelp">' . $hoverHelp . '</div>';
return '<tr'.$rowClass.' id="'.$self->get("id").'_row">
<td'.$labelClass.' id="' . $self->get('id') . '_description" valign="top" style="width: 180px;"><label for="'.$self->get("id").'">'.$self->get("label").'</label>' . $hoverCode . '</td>
<td'.$labelClass.' valign="top" style="width: 180px;"><label for="'.$self->get("id").'">'.$self->get("label").'</label>' . $hoverHelp . '</td>
<td valign="top"'.$fieldClass.'>'.$rawField . $subtext . "</td>
</tr>\n";
} else {
@ -637,42 +638,6 @@ sub toHtmlWithWrapper {
#-------------------------------------------------------------------
=head2 getHoverCode ( hoverHelp, attachId )
Generated the code to add hover help to html elements.
=head3 hoverHelp
The text in include in the hover help.
=head3 attachId
The id of the HTML element to attach the hover help to.
=cut
sub getHoverCode {
my $self = shift;
my $style = $self->session->style;
my $url = $self->session->url;
my $hoverHelp = shift;
my $attachId = shift;
$hoverHelp =~ s/^\s+//;
return ''
unless $hoverHelp;
my $hover = '<div class="wg-hoverhelp">' . $hoverHelp . '</div>';
$style->setLink($url->extras('/yui/build/container/assets/container.css'),{ type=>'text/css', rel=>"stylesheet" });
$style->setLink($url->extras('/hoverhelp.css'),{ type=>'text/css', rel=>"stylesheet" });
$style->setScript($url->extras('/yui/build/yahoo/yahoo-min.js'),{ type=>'text/javascript' });
$style->setScript($url->extras('/yui/build/dom/dom-min.js'),{ type=>'text/javascript' });
$style->setScript($url->extras('/yui/build/event/event-min.js'),{ type=>'text/javascript' });
$style->setScript($url->extras('/yui/build/container/container-min.js'),{ type=>'text/javascript' });
$style->setScript($url->extras('/hoverhelp.js'),{ type=>'text/javascript' });
return $hover;
}
#-------------------------------------------------------------------
=head2 passUiLevelCheck ( )
Renders the form field to HTML as a table row complete with labels, subtext, hoverhelp, etc.

View file

@ -215,6 +215,15 @@ Returns the HTML for this form object.
sub print {
my $self = shift;
my $style = $self->session->style;
my $url = $self->session->url;
$style->setLink($url->extras('/yui/build/container/assets/container.css'),{ type=>'text/css', rel=>"stylesheet" });
$style->setLink($url->extras('/hoverhelp.css'),{ type=>'text/css', rel=>"stylesheet" });
$style->setScript($url->extras('/yui/build/yahoo/yahoo-min.js'),{ type=>'text/javascript' });
$style->setScript($url->extras('/yui/build/dom/dom-min.js'),{ type=>'text/javascript' });
$style->setScript($url->extras('/yui/build/event/event-min.js'),{ type=>'text/javascript' });
$style->setScript($url->extras('/yui/build/container/container-min.js'),{ type=>'text/javascript' });
$style->setScript($url->extras('/hoverhelp.js'),{ type=>'text/javascript' });
return $self->{_header}.$self->{_data}.$self->{_footer};
}

View file

@ -226,8 +226,17 @@ Returns an HTML string with all the necessary components to draw the tab form.
sub print {
my $self = shift;
$self->session->style->setScript($self->session->url->extras('tabs/tabs.js'),{type=>"text/javascript"});
$self->session->style->setLink($self->{_css},{rel=>"stylesheet", rev=>"stylesheet",type=>"text/css"});
my $style = $self->session->style;
my $url = $self->session->url;
$style->setScript($url->extras('tabs/tabs.js'),{type=>"text/javascript"});
$style->setLink($self->{_css},{rel=>"stylesheet", rev=>"stylesheet",type=>"text/css"});
$style->setLink($url->extras('/yui/build/container/assets/container.css'),{ type=>'text/css', rel=>"stylesheet" });
$style->setLink($url->extras('/hoverhelp.css'),{ type=>'text/css', rel=>"stylesheet" });
$style->setScript($url->extras('/yui/build/yahoo/yahoo-min.js'),{ type=>'text/javascript' });
$style->setScript($url->extras('/yui/build/dom/dom-min.js'),{ type=>'text/javascript' });
$style->setScript($url->extras('/yui/build/event/event-min.js'),{ type=>'text/javascript' });
$style->setScript($url->extras('/yui/build/container/container-min.js'),{ type=>'text/javascript' });
$style->setScript($url->extras('/hoverhelp.js'),{ type=>'text/javascript' });
my $output = $self->{_form};
$output .= $self->{_hidden};
my $i = 1;

View file

@ -9,6 +9,7 @@
font-weight: normal;
padding: 3px;
z-index: 1000;
width: 300px;
}
.wg-hoverhelp.yui-tt {

View file

@ -4,7 +4,6 @@ YAHOO.util.Event.onDOMReady(function () {
for (i = 0; i < tips.length; i++) {
var myTip = new YAHOO.widget.Tooltip(tips[i], {
autodismissdelay: 1000000,
width: '300px',
context: tips[i].parentNode
});
}