--- loncom/interface/loncommon.pm 2010/03/29 13:40:03 1.963
+++ loncom/interface/loncommon.pm 2010/08/24 09:11:37 1.979
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# a pile of common routines
#
-# $Id: loncommon.pm,v 1.963 2010/03/29 13:40:03 raeburn Exp $
+# $Id: loncommon.pm,v 1.979 2010/08/24 09:11:37 wenzelju Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -900,7 +900,7 @@ sub select_language {
$langchoices{$code} = &plainlanguagedescription($id);
}
}
- return &select_form($selected,$name,%langchoices);
+ return &select_form($selected,$name,\%langchoices);
}
=pod
@@ -1072,7 +1072,7 @@ END
=pod
-=item * &help_open_topic($topic,$text,$stayOnPage,$width,$height)
+=item * &help_open_topic($topic,$text,$stayOnPage,$width,$height,$imgid)
Returns a string corresponding to an HTML link to the given help
$topic, where $topic corresponds to the name of a .tex file in
@@ -1090,12 +1090,16 @@ a new window using Javascript. (Default
$width and $height are optional numerical parameters that will
override the width and height of the popped up window, which may
-be useful for certain help topics with big pictures included.
+be useful for certain help topics with big pictures included.
+
+$imgid is the id of the img tag used for the help icon. This may be
+used in a javascript call to switch the image src. See
+lonhtmlcommon::htmlareaselectactive() for an example.
=cut
sub help_open_topic {
- my ($topic, $text, $stayOnPage, $width, $height) = @_;
+ my ($topic, $text, $stayOnPage, $width, $height, $imgid) = @_;
$text = "" if (not defined $text);
$stayOnPage = 0 if (not defined $stayOnPage);
$width = 350 if (not defined $width);
@@ -1124,10 +1128,13 @@ sub help_open_topic {
# (Always) Add the graphic
my $title = &mt('Online Help');
my $helpicon=&lonhttpdurl("/adm/help/help.png");
+ if ($imgid ne '') {
+ $imgid = ' id="'.$imgid.'"';
+ }
$template.=' '
.' ';
if ($text ne "") {
$template.='';
@@ -1786,7 +1793,7 @@ sub domain_select {
return &multiple_select_form($name,$value,4,\%domains);
} else {
$domains{'select_form_order'} = [sort {lc($a) cmp lc($b) } (keys(%domains))];
- return &select_form($name,$value,%domains);
+ return &select_form($name,$value,\%domains);
}
}
@@ -1848,29 +1855,36 @@ sub multiple_select_form {
=pod
-=item * &select_form($defdom,$name,%hash)
+=item * &select_form($defdom,$name,$hashref,$onchange)
Returns a string containing a form to
-allow a user to select options from a hash option_name => displayed text.
+allow a user to select options from a ref to a hash containing:
+option_name => displayed text. An optional $onchange can include
+a javascript onchange item, e.g., onchange="this.form.submit();"
+
See lonrights.pm for an example invocation and use.
=cut
#-------------------------------------------
sub select_form {
- my ($def,$name,%hash) = @_;
- my $selectform = "\n";
+ my ($def,$name,$hashref,$onchange) = @_;
+ return unless (ref($hashref) eq 'HASH');
+ if ($onchange) {
+ $onchange = ' onchange="'.$onchange.'"';
+ }
+ my $selectform = "\n";
my @keys;
- if (exists($hash{'select_form_order'})) {
- @keys=@{$hash{'select_form_order'}};
+ if (exists($hashref->{'select_form_order'})) {
+ @keys=@{$hashref->{'select_form_order'}};
} else {
- @keys=sort(keys(%hash));
+ @keys=sort(keys(%{$hashref}));
}
foreach my $key (@keys) {
$selectform.=
'&').'" '.
($key eq $def ? 'selected="selected" ' : '').
- ">".$hash{$key}." \n";
+ ">".$hashref->{$key}."\n";
}
$selectform.=" ";
return $selectform;
@@ -1888,9 +1902,9 @@ sub display_filter {
&mt('Filter [_1]',
&select_form($env{'form.displayfilter'},
'displayfilter',
- ('currentfolder' => 'Current folder/page',
+ {'currentfolder' => 'Current folder/page',
'containing' => 'Containing phrase',
- 'none' => 'None'))).
+ 'none' => 'None'})).
' ';
}
@@ -3232,8 +3246,7 @@ sub filemimetype {
sub filecategoryselect {
my ($name,$value)=@_;
return &select_form($value,$name,
- '' => &mt('Any category'),
- map { $_,$_ } sort(keys(%category_extensions)));
+ {'' => &mt('Any category'), map { $_,$_ } sort(keys(%category_extensions))});
}
=pod
@@ -3398,7 +3411,7 @@ sub get_previous_attempt {
}
$prevattempts=&start_data_table().&start_data_table_header_row();
$prevattempts.=''.&mt('History').' ';
- my %typeparts;
+ my (%typeparts,%lasthidden);
my $showsurv=&Apache::lonnet::allowed('vas',$env{'request.course.id'});
foreach my $key (sort(keys(%lasthash))) {
my ($ign,@parts) = split(/\./,$key);
@@ -3409,6 +3422,9 @@ sub get_previous_attempt {
unless ($showsurv) {
my $id = join(',',@parts);
$typeparts{$ign.'.'.$id} = $lasthash{$key};
+ if (($lasthash{$key} eq 'anonsurvey') || ($lasthash{$key} eq 'anonsurveycred')) {
+ $lasthidden{$ign.'.'.$id} = 1;
+ }
}
delete($lasthash{$key});
} else {
@@ -3423,7 +3439,6 @@ sub get_previous_attempt {
}
}
$prevattempts.=&end_data_table_header_row();
- my %lasthidden;
if ($getattempt eq '') {
for ($version=1;$version<=$returnhash{'version'};$version++) {
my @hidden;
@@ -3431,11 +3446,6 @@ sub get_previous_attempt {
foreach my $id (keys(%typeparts)) {
if (($returnhash{$version.':'.$id.'.type'} eq 'anonsurvey') || ($returnhash{$version.':'.$id.'.type'} eq 'anonsurveycred')) {
push(@hidden,$id);
- $lasthidden{$id} = 1;
- } elsif ($lasthidden{$id}) {
- if (exists($returnhash{$version.':'.$id.'.award'})) {
- delete($lasthidden{$id});
- }
}
}
}
@@ -4598,8 +4608,6 @@ sub bodytag {
}
if (!$realm) { $realm=' '; }
-# Set messages
- my $messages=&domainlogo($domain);
my $extra_body_attr = &make_attr_string($forcereg,\%design);
@@ -4793,10 +4801,6 @@ sub standard_css {
my $vlink = &designparm($function.'.vlink', $domain);
my $link = &designparm($function.'.link', $domain);
- my $loginbg = &designparm('login.sidebg',$domain);
- my $bgcol = &designparm('login.bgcol',$domain);
- my $textcol = &designparm('login.textcol',$domain);
-
my $sans = 'Verdana,Arial,Helvetica,sans-serif';
my $mono = 'monospace';
my $data_table_head = $sidebg;
@@ -5059,6 +5063,7 @@ td.LC_table_cell_checkbox {
background: #F8F8F8; /* $sidebg; */
border: 1px solid $sidebg;
margin: 0 0 10px 0;
+ padding: 3px;
}
.LC_fontsize_medium {
@@ -5425,6 +5430,14 @@ span.LC_parm_symb {
color: #AAAAAA;
}
+ul.LC_parm_parmlist li {
+ display: inline-block;
+ padding: 0.3em 0.8em;
+ vertical-align: top;
+ width: 150px;
+ border-top:1px solid $lg_border_color;
+}
+
td.LC_parm_overview_level_menu,
td.LC_parm_overview_map_menu,
td.LC_parm_overview_parm_selectors,
@@ -5585,16 +5598,6 @@ table.LC_group_priv td {
padding: 0;
}
-table.LC_notify_front_page {
- background: white;
- border: 1px solid black;
- padding: 8px;
-}
-
-table.LC_notify_front_page td {
- padding: 8px;
-}
-
.LC_navbuttons {
margin: 2ex 0ex 2ex 0ex;
}
@@ -6028,7 +6031,7 @@ fieldset > legend {
#LC_nav_bar {
float: left;
- margin: 0;
+ margin: 0 0 2px 0;
}
#LC_realm {
@@ -6073,6 +6076,30 @@ ol.LC_primary_menu a.LC_new_message {
color: darkred;
}
+ol.LC_docs_parameters {
+ margin-left: 0;
+ padding: 0;
+ list-style: none;
+}
+
+ol.LC_docs_parameters li {
+ margin: 0;
+ padding-right: 20px;
+ display: inline;
+}
+
+ol.LC_docs_parameters li:before {
+ content: "\\002022 \\0020";
+}
+
+li.LC_docs_parameters_title {
+ font-weight: bold;
+}
+
+ol.LC_docs_parameters li.LC_docs_parameters_title:before {
+ content: "";
+}
+
ul#LC_secondary_menu {
clear: both;
color: $fontmenu;
@@ -6247,6 +6274,14 @@ ul.LC_CourseBreadcrumbs li a {
font-size:90%;
}
+ol#LC_MenuBreadcrumbs h1 {
+ display: inline;
+ font-size: 90%;
+ line-height: 2.5em;
+ margin: 0;
+ padding: 0;
+}
+
ol#LC_PathBreadcrumbs li a {
text-decoration:none;
font-size:100%;
@@ -6343,52 +6378,6 @@ div.LC_columnSection>* {
overflow:hidden;
}
-.LC_loginpage_container {
- text-align:left;
- margin : 0 auto;
- width:90%;
- padding: 10px;
- height: auto;
- background-color:#FFFFFF;
- border:1px solid #CCCCCC;
-}
-
-
-.LC_loginpage_loginContainer {
- float:left;
- width: 182px;
- padding: 2px;
- border:1px solid #CCCCCC;
- background-color:$loginbg;
-}
-
-.LC_loginpage_loginContainer h2 {
- margin-top: 0;
- display:block;
- background:$bgcol;
- color:$textcol;
- padding-left:5px;
-}
-
-.LC_loginpage_loginInfo {
- float:left;
- width:182px;
- border:1px solid #CCCCCC;
- padding:2px;
-}
-
-.LC_loginpage_space {
- clear: both;
- margin-bottom: 20px;
- border-bottom: 1px solid #CCCCCC;
-}
-
-.LC_loginpage_floatLeft {
- float: left;
- width: 200px;
- margin: 0;
-}
-
table em {
font-weight: bold;
font-style: normal;
@@ -6514,6 +6503,10 @@ ul.LC_funclist li {
padding: 0px 4px
}
+.LC_hidden {
+ display: none;
+}
+
END
}
@@ -6627,10 +6620,6 @@ Inputs: none
sub xml_begin {
my $output='';
- if ($env{'internal.start_page'}==1) {
- &Apache::lonhtmlcommon::init_htmlareafields();
- }
-
if ($env{'browser.mathml'}) {
$output=''
#.''."\n"
@@ -6702,6 +6691,14 @@ $args - additional optional args support
sub start_page {
my ($title,$head_extra,$args) = @_;
#&Apache::lonnet::logthis("start_page ".join(':',caller(0)));
+#SD
+#I don't see why we copy certain elements of %$args to %head_args
+#head args is passed to headtag() and this routine only reads those
+#keys that are needed. There doesn't happen any writes or any processing
+#of other keys.
+#proposal: just pass $args to headtag instead of \%head_args and delete
+#marked lines
+#<- MARK
my %head_args;
foreach my $arg ('redirect','force_register','domain','function',
'bgcolor','frameset','no_nav_bar','only_body',
@@ -6710,13 +6707,16 @@ sub start_page {
$head_args{$arg} = $args->{$arg};
}
}
+#MARK ->
$env{'internal.start_page'}++;
my $result;
+
if (! exists($args->{'skip_phases'}{'head'}) ) {
- $result.=
- &xml_begin().
- &headtag($title,$head_extra,\%head_args);
+ $result .=
+ &xml_begin() . &headtag($title,$head_extra,\%head_args);
+#replace prev line by
+# &xml_begin() . &headtag($title, $head_extra, $args);
}
if (! exists($args->{'skip_phases'}{'body'}) ) {
@@ -6746,15 +6746,10 @@ sub start_page {
# $result .= &build_functionlist();
#}
- # Don't add anything more if only_body wanted
- return $result if $args->{'only_body'};
+ # Don't add anything more if only_body wanted or in const space
+ return $result if $args->{'only_body'}
+ || $env{'request.state'} eq 'construct';
- #Breadcrumbs for Construction Space provided by &bodytag.
- if (
- $env{'request.state'} eq 'construct') {
- return $result;
- }
-
#Breadcrumbs
if (exists($args->{'bread_crumbs'}) or exists($args->{'bread_crumbs_component'})) {
&Apache::lonhtmlcommon::clear_breadcrumbs();
@@ -6888,18 +6883,20 @@ sub simple_error_page {
}
sub start_data_table_row {
- my ($add_class) = @_;
+ my ($add_class, $id) = @_;
$row_count[0]++;
my $css_class = ($row_count[0] % 2)?'LC_odd_row':'LC_even_row';
$css_class = (join(' ',$css_class,$add_class)) unless ($add_class eq '');
- return ''."\n";;
+ $id = (' id="'.$id.'"') unless ($id eq '');
+ return ' '."\n";
}
sub continue_data_table_row {
- my ($add_class) = @_;
+ my ($add_class, $id) = @_;
my $css_class = ($row_count[0] % 2)?'LC_odd_row':'LC_even_row';
- $css_class = (join(' ',$css_class,$add_class)) unless ($add_class eq '');;
- return ' '."\n";;
+ $css_class = (join(' ',$css_class,$add_class)) unless ($add_class eq '');
+ $id = (' id="'.$id.'"') unless ($id eq '');
+ return ' '."\n";
}
sub end_data_table_row {
@@ -8101,6 +8098,10 @@ sub get_institutional_codes {
return;
}
+sub get_standard_codeitems {
+ return ('Year','Semester','Department','Number','Section');
+}
+
=pod
=head1 Slot Helpers