--- gnatsweb.pl.orig Fri Apr 11 13:59:07 2003 +++ gnatswebcss.pl Sun Apr 13 15:21:19 2003 @@ -31,11 +31,9 @@ use vars qw($site_gnats_host $site_gnats $site_gnatsweb_server_auth $site_no_gnats_passwords $no_create_without_access $site_mail_domain $site_post_max $description_in_view $help_page_path $site_banner_text -$site_banner_background $site_banner_foreground -$site_button_foreground $site_button_background $site_stylesheet +$site_stylesheet $include_audit_trail $popup_menu_becomes_obnoxious -$scrolling_menu_default_size $site_background -$site_required_field_color $use_temp_db_prefs_cookie +$scrolling_menu_default_size $use_temp_db_prefs_cookie $global_cookie_expires $global_cookie_path $textwidth $site_allow_remote_debug $attachment_delimiter %mark_urls $gnats_info_top %site_pr_submission_address $VERSION); @@ -149,10 +147,6 @@ $help_page_path = './gnatsweb.html'; # Name you want in the page banner and banner colors. $site_banner_text = 'GNU Gnatsweb'; -$site_banner_background = '#000000'; -$site_banner_foreground = '#ffffff'; -$site_button_background = '#000000'; -$site_button_foreground = '#ffffff'; # Uncomment the following line and insert stylesheet URL in order to # link all generated pages to an external stylesheet. Both absolute @@ -173,14 +167,6 @@ $popup_menu_becomes_obnoxious = 20; # default size for scrolling lists. overridden for some fields $scrolling_menu_default_size = 3; -# Page background color -- not used unless defined. -#$site_background = '#c0c0c0'; -$site_background = undef; - -# Color to use for marking the names of required fields on the Create -# PR page. -$site_required_field_color = '#ff0000'; - # control the mark_urls routine, which "htmlifies" PRs for view_pr. # it adds a lot of usability, but can be slow for huge (100K+) fields. # urls = make links clickable @@ -522,17 +508,29 @@ sub print_stacktrace { sub multiselect_menu { my $size = @{$_[1]} < 4 ? @{$_[1]} : 4; + my $style = $_[3]; + $style = '' if not defined $style; + return $q->scrolling_list(-name=>$_[0], -values=>$_[1], -size=>$size, - -multiple=>'true', -default=>$_[2]); + -multiple=>'true', -default=>$_[2], + -class=>$style); } sub popup_or_scrolling_menu { my $size=$_[3]; + my $style=$_[4]; + if (!(defined $size)) { $size = $scrolling_menu_default_size; - } + } + + if (!(defined $style)) + { + $style = ''; + } + # a hack to make responsible field easier to deal with when # there are many names in the responsible file @@ -559,14 +557,16 @@ sub popup_or_scrolling_menu -size=>$size, -values=>$_[1], -labels=>$labels, - -default=>$_[2]); + -default=>$_[2], + -class=>$style); } else { return $q->popup_menu (-name=>$_[0], -values=>$_[1], -labels=>$labels, - -default=>$_[2]); + -default=>$_[2], + -class=>$style); } } @@ -919,13 +919,14 @@ sub print_attachments return unless can_do_mime(); - print "File Attachments:\n"; + print "File Attachments:\n"; # Add file upload button for adding new attachment. if ($mode eq 'sendpr' || $mode eq 'edit') { print "Add a file attachment:
", $q->filefield(-name=>'attached_file', - -size=>50); + -size=>50, + -class=>'attachments_add'); # that's all we need to do if this is the sendpr page return if $mode eq 'sendpr'; } @@ -1041,12 +1042,13 @@ sub sendpr $q->reset(-name=>'reset')), $q->hidden(-name=>'return_url'), "
\n", - ""; + "
"; my $def_email = $global_prefs{'email'} || ''; - print "\n\n\n\n\n\n"; + -size=>$textwidth, + -class=>'createpr_input'), "\n\n"; # keep count of field number, so that javascript hooks can # have a way to access fields with dashes in their names # they'll need to use PrForm.elements[fieldNumber].value @@ -1073,12 +1075,12 @@ sub sendpr # at the top of a given field. my $intro = cb("sendpr_intro_$_", $field_number) || ''; - print "\n\n"; } elsif (fieldinfo ($_, 'fieldtype') eq 'multienum') { my $defaultsref = parse_multienum($default, $_); - print multiselect_menu($_, $values, $defaultsref), + print multiselect_menu($_, $values, $defaultsref, 'createpr_input'), "\n\n"; } elsif (fieldinfo($_, 'fieldtype') eq "multitext") @@ -1103,7 +1105,8 @@ sub sendpr print $q->textarea(-name=>$_, -cols=>$textwidth, -rows=>$rows, - -default=>$default), + -default=>$default, + -class=>'createpr_input'), "\n\n"; # Create file upload button after Description. if (/Description/) @@ -1115,7 +1118,8 @@ sub sendpr { print $q->textfield(-name=>$_, -size=>$textwidth, - -default=>$default), + -default=>$default, + -class=>'createpr_input'), "\n\n"; } print "\n"; @@ -1541,11 +1545,12 @@ sub edit $q->hidden(-name=>'return_url'), "
\n"; - print "
Reporter's email:", + print "
Reporter's email:", $q->textfield(-name=>'email', -default=>$def_email, - -size=>$textwidth), "
"; + print "
"; fieldinfo ($_, 'flags') & $SENDREQUIRED ? - print "$_" : print "$_"; - print "
\n", + print "$_" : print "$_"; + print "
\n", fieldinfo($_, 'desc'), - "
\n", $intro, "\n"; + "\n", $intro, "\n"; if (fieldinfo($_, 'fieldtype') eq "enum") { @@ -1088,13 +1090,13 @@ sub sendpr push(@$values, "unknown") if (!grep /^unknown$/, @$values); $default = "unknown"; } - print popup_or_scrolling_menu($_, $values, $default), + print popup_or_scrolling_menu($_, $values, $default, undef, 'createpr_input'), "
\n"; - print "\n\n
Reporter's email:", + print "\n"; + print "\n\n\n\n"; # keep count of field number, so that javascript hooks can @@ -1570,9 +1575,9 @@ sub edit # The "intro" provides a way for the site callback to print something # at the top of a given field. my $intro = cb("edit_intro_$_", $field_number) || ''; - print "\n\n"; } elsif (fieldinfo ($_, 'fieldtype') eq 'multienum') { my $defaultsref = parse_multienum($fields{$_}, $_); - print multiselect_menu($_, $values, $defaultsref), + print multiselect_menu($_, $values, $defaultsref, 'editpr_input'), "\n\n"; } elsif (fieldinfo ($_, 'fieldtype') eq 'multitext') @@ -1600,7 +1605,8 @@ sub edit print $q->textarea(-name=>$_, -cols=>$textwidth, -rows=>$rows, - -default=>$fields{$_}), + -default=>$fields{$_}, + -class=>'editpr_input'), "\n\n"; # Print attachments after Description. print_attachments(\%fields, 'edit') if /Description/; @@ -1609,18 +1615,20 @@ sub edit { print $q->textfield(-name=>$_, -size=>$textwidth, - -default=>$fields{$_}), + -default=>$fields{$_}, + -class=>'editpr_input'), "\n\n"; } if (fieldinfo ($_, 'flags') & $REASONCHANGE) { - print "\n\n\n\n"; } print "\n"; @@ -1868,45 +1876,49 @@ sub query_page { if (fieldinfo($_, 'fieldtype') =~ /enum/) { - print "\n\n\n\n"; } } print - "\n\n\n\n\n\n", - "\n\n\n\n\n\n", - "\n\n\n\n\n\n"; - print "\n\n\n\n\n\n"; - print "\n\n\n\n\n\n", "
Reporter's email:", $q->textfield(-name=>'Reply-To', -default=>$fields{'Reply-To'}, - -size=>$textwidth), + -size=>$textwidth, + -class=>'editpr_input'), "
$_:
\n", + print "
$_:
\n", fieldinfo($_, 'desc'), - "
\n", $intro, "\n"; + "\n", $intro, "\n"; if (fieldinfo ($_, 'fieldtype') eq 'enum') { @@ -1583,13 +1588,13 @@ sub edit push(@$values, 'unknown') if (!grep /^unknown$/, @$values); $default = 'unknown'; } - print popup_or_scrolling_menu($_, $values, $default), + print popup_or_scrolling_menu($_, $values, $default, undef, 'editpr_input'), "
Reason Changed:", + print "
Reason Changed:", $q->textarea(-name=>"$_-Changed-Why", -default=>'', -override=>1, -cols=>$textwidth, -rows=>2, - -wrap=>'hard'), + -wrap=>'hard', + -class=>'editpr_input'), "
$_:"; + print "
$_:

"; my $value_list=fieldinfo($_, 'values'); my @values=('any', @$value_list); if (fieldinfo($_, 'fieldtype') eq 'enum') { - print popup_or_scrolling_menu ($_, \@values, $values[0]); + print popup_or_scrolling_menu ($_, \@values, $values[0], + undef, 'query_input'); } elsif (fieldinfo($_, 'fieldtype') eq 'multienum') { my $size = @values < 4 ? @values : 4; print $q->scrolling_list(-name=>$_, -values=>\@values, -size=>$size, - -multiple=>'true', -defaults=>$values[0]); + -multiple=>'true', -defaults=>$values[0], + -class=>'query_input'); } if ($_ eq $STATE_FIELD) { print "
", $q->checkbox_group(-name=>'ignoreclosed', -values=>['Ignore Closed'], - -defaults=>['Ignore Closed']); + -defaults=>['Ignore Closed'], + -class=>'query_input'); } elsif ($_ eq $SUBMITTER_ID_FIELD) { print "
", $q->checkbox_group(-name=>'originatedbyme', -values=>['Originated by You'], - -defaults=>[]); + -defaults=>[], + -class=>'query_input'); } print "
$SYNOPSIS_FIELD Search:", - $q->textfield(-name=>$SYNOPSIS_FIELD,-size=>25), + "
$SYNOPSIS_FIELD Search:", + $q->textfield(-name=>$SYNOPSIS_FIELD,-size=>25,-class=>"query_input"), "
Multi-line Text Search:", - $q->textfield(-name=>'multitext',-size=>25), + "
Multi-line Text Search:", + $q->textfield(-name=>'multitext',-size=>25,-class=>'query_input'), "
Column Display:"; + "
Column Display:"; my @allcolumns; foreach (@fieldnames) { @@ -1927,24 +1939,28 @@ sub query_page -values=>\@allcolumns, -defaults=>\@columns, -multiple=>1, - -size=>5), + -size=>5, + -class=>'query_input'), "
Sort By:", + print "
Sort By:", $q->scrolling_list(-name=>'sortby', -values=>\@fieldnames, -multiple=>0, - -size=>1), + -size=>1, + -class=>'query_input'), "
", $q->checkbox_group(-name=>'reversesort', -values=>['Reverse Order'], - -defaults=>[]), + -defaults=>[], + -class=>'query_input'), "
Display:", + print "
Display:", $q->checkbox_group(-name=>'displaydate', -values=>['Current Date'], - -defaults=>['Current Date']), + -defaults=>['Current Date'], + -class=>'query_input'), "
\n", "
\n", @@ -1966,8 +1982,6 @@ sub advanced_query_page hidden_db(); my $width = 30; - my $heading_bg = '#9fbdf9'; - my $cell_bg = '#d0d0d0'; print $q->span($q->submit('cmd', 'submit query'), " or ", @@ -1977,26 +1991,26 @@ sub advanced_query_page ### Text and multitext queries - print "\n", + print "
\n", "\n", - "\n", + "\n", "\n", "\n", "\n"; - print "\n\n\n\n\n\n", - "\n\n\n\n\n\n", "
Search All Text
Search these text fieldsusing regular expression
Single-line text fields:", - $q->textfield(-name=>'text', -size=>$width), + print "
Single-line text fields:", + $q->textfield(-name=>'text', -size=>$width, -class=>'query_input'), "
Multi-line text fields:", - $q->textfield(-name=>'multitext', -size=>$width), + "
Multi-line text fields:", + $q->textfield(-name=>'multitext', -size=>$width, -class=>'query_input'), "
\n"; print "
 
\n"; ### Date queries - print "\n", + print "
\n", "\n", - "\n", + "\n", "\n", "\n", "\n"; @@ -2005,11 +2019,11 @@ sub advanced_query_page { if (fieldinfo ($_, 'fieldtype') eq 'date') { - print "\n\n\n\n\n\n"; - print "\n\n\n\n\n\n"; } } @@ -2021,9 +2035,9 @@ sub advanced_query_page ### Field queries - print "
Search By Date
Date SearchExample: 1999-04-01 05:00 GMT
$_ after:", - $q->textfield(-name=>$_."_after", -size=>$width), + print "
$_ after:", + $q->textfield(-name=>$_."_after", -size=>$width, -class=>'query_input'), "
$_ before:", - $q->textfield(-name=>$_."_before", -size=>$width), + print "
$_ before:", + $q->textfield(-name=>$_."_before", -size=>$width, -class=>'query_input'), "
\n", + print "
\n", "\n", - "\n", + "\n", "\n", "\n", "\n", @@ -2033,12 +2047,13 @@ sub advanced_query_page print "\n"; # 1st column is field name - print "\n"; + print "\n"; # 2nd column is regexp search field - print "\n"; # 3rd column is blank or scrolling multi-select list - print "
Search Individual Fields
Search this fieldusing regular expression, orusing multi-selection
$_:$_:", + print "", $q->textfield(-name=>$_, - -size=>$width); + -size=>$width, + -class=>'query_input'); print "\n"; # XXX ??? !!! FIXME # This should be fixed by allowing a 'not' in front of the fields, so @@ -2048,12 +2063,13 @@ sub advanced_query_page print "
", $q->checkbox_group(-name=>'ignoreclosed', -values=>['Ignore Closed'], - -defaults=>['Ignore Closed']), + -defaults=>['Ignore Closed'], + -class=>'query_input'), } print "
"; + print ""; if (fieldinfo($_, 'fieldtype') =~ 'enum') { my $ary_ref = fieldinfo($_, 'values'); @@ -2062,7 +2078,8 @@ sub advanced_query_page print $q->scrolling_list(-name=>$_, -values=>$ary_ref, -multiple=>1, - -size=>$size); + -size=>$size, + -class=>'query_input'); } else { @@ -2073,9 +2090,9 @@ sub advanced_query_page print "
\n"; print "
 
\n"; - print "\n", + print "
\n", "\n", - "\n\n\n\n\n\n"; - print "\n\n\n\n\n\n"; - print "\n\n\n\n\n\n", "\n\n
Display
Display these columns:"; + "
Display these columns:"; my @allcolumns; foreach (@fieldnames) { @@ -2096,23 +2113,27 @@ sub advanced_query_page -values=>\@allcolumns, -defaults=>\@columns, -multiple=>1, - -size=>5), + -size=>5, + -class=>'query_input'), "
Sort By:", + print "
Sort By:", $q->scrolling_list(-name=>'sortby', -values=>\@fieldnames, -multiple=>0, - -size=>1), + -size=>1, + -class=>'query_input'), "
", $q->checkbox_group(-name=>'reversesort', -values=>['Reverse Order'], - -defaults=>[]), + -defaults=>[], + -class=>'query_input'), "
Display:", + print "
Display:", $q->checkbox_group(-name=>'displaydate', -values=>['Current Date'], - -defaults=>['Current Date']), + -defaults=>['Current Date'], + -class=>'query_input'), "
\n"; print "
 
\n"; @@ -2390,7 +2411,7 @@ sub display_query_results print $q->start_form(), hidden_debug(), $q->hidden(name=>'cmd', -value=>'view', -override=>1), - "\n"; + "
\n"; # By default sort by PR number. my($sortby) = $q->param('sortby') || $fieldnames[0]; @@ -2417,7 +2438,7 @@ sub display_query_results $query_string =~ s/(\w|-)+=;//g; my $href = $script_name . '?' . $query_string; - print "\n\n"; + print "\n\n"; } # finished the header row print "\n"; @@ -2450,7 +2471,7 @@ sub display_query_results print "\n"; my $id = shift @{$_}; - print ""; + print ""; $whichfield++; } # Pad the remaining, empty columns with  's @@ -2649,28 +2670,30 @@ sub print_stored_queries } if (%stored_queries) { - print "
$_$_
$id"; + print "$id"; if (can_edit()) { print " edit"; @@ -2479,7 +2500,7 @@ sub display_query_results $fieldcontents = mark_urls($fieldcontents); } - print "$fieldcontents$fieldcontents
", - "", + print "\n
", + "", + "
", $q->start_form(), - hidden_debug(), - "", + hidden_debug(), hidden_db(), $q->submit('cmd', 'submit stored query'), - " ", + " ", $q->popup_menu(-name=>'queryname', - -values=>[ sort(keys %stored_queries) ]), + -values=>[ sort(keys %stored_queries) ], + -class=>'storedqueries_submit'), $q->end_form(), + "", $q->start_form(), - hidden_debug(), - "", + hidden_debug(), $q->hidden('return_url', $q->self_url()), hidden_db(), $q->submit('cmd', 'delete stored query'), - " ", + " ", $q->popup_menu(-name=>'queryname', - -values=>[ sort(keys %stored_queries) ]), + -values=>[ sort(keys %stored_queries) ], + -class=>'storedqueries_delete'), $q->end_form(), - "
"; + "
"; } } @@ -2871,8 +2894,10 @@ sub one_line_form my($label, @form_body) = @_; my $valign = 'baseline'; return $q->Tr({-valign=>$valign}, - $q->td($q->b($label)), - $q->td($q->start_form(-method=>'get'), hidden_debug(), + $q->td({-class=>'mainpage_field'}, + "$label"), + $q->td({-class=>'mainpage_input'}, + $q->start_form(-method=>'get'), hidden_debug(), hidden_db(), @form_body, $q->end_form())); } @@ -2905,7 +2930,7 @@ sub main_page page_start_html($page); page_heading($page, 'Main Page'); - print ''; + print '
'; my $top_buttons_html = cb('main_page_top_buttons') || ''; print $top_buttons_html; @@ -2922,13 +2947,15 @@ sub main_page $q->hidden(-name=>'cmd', -value=>'edit', -override=>1), $q->submit('cmd', 'edit'), '#', - $q->textfield(-size=>6, -name=>'pr')) + $q->textfield(-size=>6, -name=>'pr', + -class=>'mainpage_input')) if can_edit(); print one_line_form('View Problem Report:', $q->hidden(-name=>'cmd', -value=>$viewcmd, -override=>1), $q->submit('cmd', 'view'), '#', - $q->textfield(-size=>6, -name=>'pr')); + $q->textfield(-size=>6, -name=>'pr', + -class=>'mainpage_input')); print one_line_form('Query Problem Reports:', $q->submit('cmd', 'query'), ' ', $q->submit('cmd', 'advanced query')); @@ -2936,10 +2963,11 @@ sub main_page { print one_line_form('Change Database:', $q->scrolling_list(-name=>'new_db', - -values=>$global_list_of_dbs, - -default=>$global_prefs{'database'}, - -multiple=>0, - -size=>1), + -values=>$global_list_of_dbs, + -default=>$global_prefs{'database'}, + -multiple=>0, + -size=>1, + -class=>'mainpage_input'), $q->submit('cmd', 'change database') ); } else @@ -3036,10 +3064,8 @@ sub page_start_html return; } - # Call start_html, with -bgcolor if we need to override that. + # Call start_html my @args = (-title=>"$title - $site_banner_text"); - push(@args, -bgcolor=>$site_background) - if defined($site_background); push(@args, -style=>{-src=>$site_stylesheet}) if defined($site_stylesheet); push(@args, @extra_head_args); @@ -3047,29 +3073,6 @@ sub page_start_html # Add the page banner. The $site_banner_text is linked back to the # main page. - # - # Note that the banner uses inline style, rather than a GIF; this - # makes installation easier by eliminating the need to install GIFs - # into a separate directory. At least for Apache, you can't serve - # GIFs out of your CGI directory. - # - my $bannerstyle = <\n
); - $row .= qq(\n\n\n); $row2 = qq(\n\n); @@ -3144,7 +3147,7 @@ sub page_heading print $html; return; } - print $q->h1({-style=>'font-weight: normal'}, $heading); + print $q->h1({-class=>'pagetitle'}, $heading); } # page_footer - @@ -3895,12 +3898,13 @@ sub login_page client_init(); my(@dbs) = client_cmd("dbls"); - print $q->start_form(), hidden_debug(), "
); - $row .= qq($global_prefs{'database'}  ) + $row = qq(
); + $row .= qq(\n\n\n\n\n
); + $row .= qq($global_prefs{'database'}  ) if $global_prefs{'database'}; - $row .= qq(User: $db_prefs{'user'}  ) + $row .= qq(User: $db_prefs{'user'}  ) if $db_prefs{'user'}; - $row .= qq(Access: $access_level) + $row .= qq(Access: $access_level) if $access_level; - $row .= qq(\n - $site_banner_text + $row .= qq(\n + $site_banner_text
); - $row2 .= qq(); + $row2 .= qq(
); $row2 .= qq(\n); - $row2 .= qq(); - $row2 .= qq() + $row2 .= qq(); + $row2 .= qq() if can_create(); - $row2 .= qq(); - $row2 .= qq(); - $row2 .= qq() + $row2 .= qq(); + $row2 .= qq(); + $row2 .= qq() unless ($site_gnatsweb_server_auth); - $row2 .= qq(); + $row2 .= qq(); $row2 .= qq(\n); $row2 .= qq(\n
"; + print $q->start_form(), hidden_debug(), "
"; unless($site_gnatsweb_server_auth) { - print "\n\n"; if ($site_no_gnats_passwords) { # we're not using gnats passwords, so the password input @@ -3908,17 +3912,19 @@ sub login_page # just so other parts of the program don't get confused print qq**; } else { - print "\n\n\n\n\n\n"; } } - print "\n\n\n\n\n\n", "
User Name:", + print "
User Name:", $q->textfield(-name=>'user', -size=>20, - -default=>$db_prefs{'user'}), + -default=>$db_prefs{'user'}, + -class=>'login_input'), "
Password:", + print "
Password:", $q->password_field(-name=>'password', -value=>$db_prefs{'password'}, - -size=>20), + -size=>20, + -class=>'login_input'), "
Database:", + print "
Database:", $q->popup_menu(-name=>'database', -values=>\@dbs, - -default=>$global_prefs{'database'}), + -default=>$global_prefs{'database'}, + -class=>'login_input'), "
\n"; if (defined($return_url))