--- loncom/interface/lonhtmlcommon.pm 2021/12/31 20:56:46 1.358.2.19.2.1 +++ loncom/interface/lonhtmlcommon.pm 2016/10/16 21:20:51 1.374 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # a pile of common html routines # -# $Id: lonhtmlcommon.pm,v 1.358.2.19.2.1 2021/12/31 20:56:46 raeburn Exp $ +# $Id: lonhtmlcommon.pm,v 1.374 2016/10/16 21:20:51 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -92,7 +92,7 @@ sub raw_href_to_link { sub entity_encode { my ($text)=@_; - return &HTML::Entities::encode($text, '\'<>&"'); + return &HTML::Entities::encode($text, '<>&"'); } sub direct_parm_link { @@ -407,7 +407,7 @@ sub textbox { ############################################## ############################################## sub checkbox { - my ($name,$checked,$value,$special) = @_; + my ($name,$checked,$value) = @_; my $Str = ''; + $Str .= ' />'; return $Str; } @@ -451,10 +451,12 @@ sub radio { &date_setter returns html and javascript for a compact date-setting form. To retrieve values from it, use &get_date_from_form. -Inputs - =over 4 +=item Inputs + +=over + =item $dname The name to prepend to the form elements. @@ -515,10 +517,12 @@ If true, text boxes for seconds are omit =back -Bugs +=item Bugs The method used to restrict user input will fail in the year 2400. +=back + =cut ############################################## @@ -685,11 +689,13 @@ ENDJS $monthselector,$dayselector,$yearselector, $hourselector). $tzone; + } elsif ($no_ss) { $result .= &mt('[_1] [_2] [_3] [_4] [_5]m', $monthselector,$dayselector,$yearselector, $hourselector,$minuteselector). $tzone; + } else { $result .= &mt('[_1] [_2] [_3] [_4] [_5]m [_6]s ', $monthselector,$dayselector,$yearselector, @@ -741,7 +747,9 @@ sub build_url { get_date_from_form retrieves the date specified in an &date_setter form. -Inputs: +=over + +=item Inputs: =over 4 @@ -755,6 +763,8 @@ The unix time to use as the default in c =back +=back + Returns: Unix time represented in the form. =cut @@ -848,14 +858,13 @@ parameter setting wizard. ############################################## sub pjump_javascript_definition { my $Str = <&"'); &Apache::loncommon::inhibit_menu_check(\$href_path); if ($form) { @@ -1269,9 +1295,9 @@ sub htmlareaheaders { ENDEDITOR } $s.=(< - - + + + @@ -1680,7 +1706,8 @@ sub show_return_link { if ($env{'request.noversionuri'}=~m{^/priv/} || $env{'request.uri'}=~m{^/priv/}) { return 1; } return if ($env{'request.noversionuri'} eq '/adm/supplemental'); - + return if (($env{'course.'.$env{'request.course.id'}.'.type'} eq 'Placement') && + (!$env{'request.role.adv'})); if (($env{'request.noversionuri'} =~ m{^/adm/(viewclasslist|navmaps)($|\?)}) || ($env{'request.noversionuri'} =~ m{^/adm/.*/aboutme($|\?)})) { @@ -1694,7 +1721,7 @@ sub show_return_link { (($env{'request.noversionuri'}=~/^\/adm\//) && ($env{'request.noversionuri'}!~/^\/adm\/wrapper\//) && ($env{'request.noversionuri'}!~ - m{^/adm/.*/(smppg|bulletinboard|ext\.tool)($|\?)}) + m{^/adm/.*/(smppg|bulletinboard|exttools?)($|\?)}) )); } @@ -1768,19 +1795,54 @@ A link to help for the component will be All inputs can be undef without problems. -Inputs: $component (the text on the right side of the breadcrumbs trail), - $component_help (the help item filename (without .tex extension). - $menulink (boolean, controls whether to include a link to /adm/menu) - $helplink (if 'nohelp' don't include the orange help link) - $css_class (optional name for the class to apply to the table for CSS) - $no_mt (optional flag, 1 if &mt() is _not_ to be applied to $component - when including the text on the right. - $CourseBreadcrumbs (optional flag, 1 if &breadcrumbs called from &docs_breadcrumbs, - because breadcrumbs are being) - $topic_help (optional help item to be displayed on right side of the breadcrumbs - row, using loncommon::help_open_topic() to generate the link. - $topic_help_text (text to include in the link in the optional help item - on the right side of the breadcrumbs row. +=over + +=item Inputs: + +=over + +=item $component + +the text on the right side of the breadcrumbs trail + +=item $component_help + +the help item filename (without .tex extension). + +=item $menulink + +boolean, controls whether to include a link to /adm/menu + +=item $helplink + +if 'nohelp' don't include the orange help link + +=item $css_class + +optional name for the class to apply to the table for CSS + +=item $no_mt + +optional flag, 1 if &mt() is _not_ to be applied to $component when including the text on the right + +=item $CourseBreadcrumbs + +optional flag, 1 if &breadcrumbs called from &docs_breadcrumbs, because breadcrumbs are being +used to display hierarchy for current folder shown in the Course Editor. + +=item $topic_help + +optional help item to be displayed on right side of the breadcrumbs row, using +loncommon::help_open_topic() to generate the link. + +=item $topic_help_text + +text to include in the link in the optional help item ($topic_help) on the right +side of the breadcrumbs row. + +=back + +=back Returns a string containing breadcrumbs for the current page. @@ -1809,7 +1871,7 @@ returns: nothing sub breadcrumbs { my ($component,$component_help,$menulink,$helplink,$css_class,$no_mt, - $CourseBreadcrumbs,$topic_help,$topic_help_text) = @_; + $CourseBreadcrumbs,$topic_help,$topic_help_text,$crstype) = @_; # $css_class ||= 'LC_breadcrumbs'; @@ -1824,15 +1886,10 @@ returns: nothing # # The first one should be the course or a menu link if (!defined($menulink)) { $menulink=1; } - if ($menulink) { - if ($env{'request.course.id'}) { - my ($menucoll,$deeplinkmenu,$menuref) = &Apache::loncommon::menucoll_in_effect(); - if (($menucoll) && (ref($menuref) eq 'HASH')) { - if ($menuref->{'main'} eq 'n') { - undef($menulink); - } - } - } + if ((($crstype eq 'Placement') || (($env{'request.course.id'}) && + ($env{'course.'.$env{'request.course.id'}.'.type'} eq 'Placement'))) && + (!$env{'request.role.adv'})) { + undef($menulink); } if ($menulink) { my $description = 'Menu'; @@ -1844,7 +1901,7 @@ returns: nothing $env{'course.'.$env{'request.course.id'}.'.description'}; $no_mt_descr = 1; if ($env{'request.noversionuri'} =~ - m{^/?public/($match_domain)/($match_courseid)/syllabus$}) { + m{^/public/($match_domain)/($match_courseid)/syllabus$}) { unless (($env{'course.'.$env{'request.course.id'}.'.domain'} eq $1) && ($env{'course.'.$env{'request.course.id'}.'.num'} eq $2)) { $description = 'Menu'; @@ -1997,7 +2054,9 @@ Adds $html to $category of the breadcrum $html is usually a link to a page that invokes a function on the currently displayed data (e.g. print when viewing a problem) -Currently there are 3 possible values for $category: +=over + +=item Currently there are 3 possible values for $category: =over @@ -2011,7 +2070,9 @@ remaining items in right of breadcrumbs advanced tools shown in a separate box below breadcrumbs line =back - + +=back + returns: nothing =cut @@ -2060,8 +2121,17 @@ returns: a hash containing the current b Creates html for breadcrumb tools (categories navigation and tools) and inserts \$breadcrumbs at the correct position. -input: \$breadcrumbs - a reference to the string containing prepared -breadcrumbs. +=over + +=item input: + +=over + +=item \$breadcrumbs - a reference to the string containing prepared breadcrumbs. + +=back + +=back returns: nothing @@ -2087,8 +2157,17 @@ returns: nothing Creates html for advanced tools (category advtools) and inserts \$breadcrumbs at the correct position. -input: \$breadcrumbs - a reference to the string containing prepared -breadcrumbs (after render_tools call). +=over + +=item input: + +=over + +=item \$breadcrumbs - a reference to the string containing prepared breadcrumbs (after render_tools call). + +=back + +=back returns: nothing @@ -2121,11 +2200,11 @@ sub docs_breadcrumbs { my $foldername=shift(@folders); if ($folderpath) {$folderpath.='&';} $folderpath.=$folder.'&'.$foldername; - my $url = $env{'request.use_absolute'}; + my $url; if ($allowed) { - $url .= '/adm/coursedocs?folderpath='; + $url = '/adm/coursedocs?folderpath='; } else { - $url .= '/adm/supplemental?folderpath='; + $url = '/adm/supplemental?folderpath='; } $url .= &escape($folderpath); my $name=&unescape($foldername); @@ -2550,9 +2629,9 @@ sub course_custom_roles { sub resource_info_box { - my ($symb,$onlyfolderflag,$stuvcurrent,$stuvdisp,$divforres)=@_; + my ($symb,$onlyfolderflag,$stuvcurrent,$stuvdisp)=@_; my $return=''; - if (($stuvcurrent ne '') || ($divforres)) { + if ($stuvcurrent ne '') { $return = '
'; } if ($symb) { @@ -2581,7 +2660,7 @@ sub resource_info_box { } else { $return='

'.&mt('No context provided.').'

'; } - if (($stuvcurrent ne '') || ($divforres)) { + if ($stuvcurrent ne '') { $return .= '
'; } return $return; @@ -3312,18 +3391,12 @@ PARAMSONE if (itemid != null) { itemh = itemid.offsetHeight; } - var primaryheight = 0; - if (document.getElementById('LC_nav_bar') != null) { - primaryheight = document.getElementById('LC_nav_bar').offsetHeight; - } - var secondaryheight = 0; + var primaryheight = document.getElementById('LC_nav_bar').offsetHeight; + var secondaryheight; if (document.getElementById('LC_secondary_menu') != null) { secondaryheight = document.getElementById('LC_secondary_menu').offsetHeight; } - var crumbsheight = 0; - if (document.getElementById('LC_breadcrumbs') != null) { - crumbsheight = document.getElementById('LC_breadcrumbs').offsetHeight; - } + var crumbsheight = document.getElementById('LC_breadcrumbs').offsetHeight; var dccidheight = 0; if (document.getElementById('dccid') != null) { dccidheight = document.getElementById('dccid').offsetHeight; @@ -3403,17 +3476,7 @@ function go(url) { if (url!='' && url!= null) { currentURL = null; currentSymb= null; - var lcHostname = setLCHost(); - if (lcHostname!='' && lcHostname!= null) { - var RegExp = /^https?\:/; - if (RegExp.test(url)) { - window.location.href=url; - } else { - window.location.href=lcHostname+url; - } - } else { - window.location.href=url; - } + window.location.href=url; } } @@ -3432,8 +3495,8 @@ ENDUTILITY sub jump_to_editres { my ($cfile,$home,$switchserver,$forceedit,$forcereg,$symb,$folderpath, - $title,$hostname,$idx,$suppurl,$todocs,$suppanchor) = @_; - my ($jscall,$anchor,$usehttp,$usehttps,$is_ext); + $title,$idx,$suppurl,$todocs) = @_; + my $jscall; if ($switchserver) { if ($home) { $cfile = '/adm/switchserver?otherserver='.$home.'&role='. @@ -3453,44 +3516,7 @@ sub jump_to_editres { } } else { unless ($cfile =~ m{^/priv/}) { - if ($cfile =~ m{^(/adm/wrapper/ext/([^#]+))(?:|#([^#]+))$}) { - $cfile = $1; - my $extlink = $2; - $anchor = $3; - $is_ext = 1; - if (($extlink !~ /^https:/) && ($ENV{'SERVER_PORT'} == 443)) { - unless ((&Apache::lonnet::uses_sts()) || (&Apache::lonnet::waf_allssl($hostname))) { - $usehttp = 1; - } - } elsif ($env{'request.use_absolute'}) { - if ($env{'request.use_absolute'} =~ m{^https://}) { - $usehttps = 1; - } - } - } elsif ($cfile =~ m{^/?public/($match_domain)/($match_courseid)/syllabus}) { - if ($ENV{'SERVER_PORT'} == 443) { - my ($cdom,$cnum) = ($1,$2); - if (($env{'request.course.id'}) && - ($env{'course.'.$env{'request.course.id'}.'.num'} eq $cnum) && - ($env{'course.'.$env{'request.course.id'}.'.domain'} eq $cdom)) { - if ($env{'course.'.$env{'request.course.id'}.'.externalsyllabus'} =~ m{^http://}) { - unless ((&Apache::lonnet::uses_sts()) || (&Apache::lonnet::waf_allssl($hostname))) { - $usehttp = 1; - } - } - } - } elsif ($env{'request.use_absolute'}) { - if ($env{'request.use_absolute'} =~ m{^https://}) { - $usehttps = 1; - } - } - } if ($symb) { - if ($anchor ne '') { - if ($symb =~ m{^([^#]+)\Q#$anchor\E$}) { - $symb = $1.&escape(&escape('#')).$anchor; - } - } $cfile .= (($cfile=~/\?/)?'&':'?')."symb=$symb"; } elsif ($folderpath) { $cfile .= (($cfile=~/\?/)?'&':'?'). @@ -3509,30 +3535,13 @@ sub jump_to_editres { } if ($forceedit) { $cfile .= (($cfile=~/\?/)?'&':'?').'forceedit=1'; - if ($usehttps) { - $cfile = $env{'request.use_absolute'}.(($cfile =~ /^\//)? '':'/').$cfile; - } - } elsif ($usehttp) { - if ($hostname ne '') { - $cfile = 'http://'.$hostname.(($cfile =~ /^\//)? '':'/').$cfile; - } - $cfile .= (($cfile=~/\?/)?'&':'?').'usehttp=1'; - } elsif ($usehttps) { - $cfile = $env{'request.use_absolute'}.(($cfile =~ /^\//)? '':'/').$cfile; } if ($forcereg) { $cfile .= (($cfile=~/\?/)?'&':'?').'register=1'; } if ($todocs) { - $cfile .= (($cfile=~/\?/)?'&':'?').'todocs=1'; + $cfile .= (($cfile=~/\?/)?'&':'?').'todocs=1'; } - if ($suppanchor ne '') { - $cfile .= (($cfile=~/\?/)?'&':'?').'anchor='. - &HTML::Entities::encode($suppanchor,'"<>&'); - } - } - if ($anchor ne '') { - $cfile .= '#'.$anchor; } $jscall = "go('".&Apache::loncommon::escape_single($cfile)."')"; } @@ -3545,18 +3554,15 @@ sub jump_to_editres { # javascript_valid_email # # Generates javascript to validate an e-mail address. -# Returns a javascript function which accepts a form field as argument, and +# Returns a javascript function which accetps a form field as argumnent, and # returns false if field.value does not satisfy two regular expression matches # for a valid e-mail address. Backwards compatible with old browsers without # support for javascript RegExp (just checks for @ in field.value in this case). sub javascript_valid_email { my $scripttag .= <<'END'; -function validmail(field,suffix) { +function validmail(field) { var str = field.value; - if (suffix != '' && suffix != undefined) { - str += suffix; - } if (window.RegExp) { var reg1str = "(@.*@)|(\\.\\.)|(@\\.)|(\\.@)|(^\\.)"; var reg2str = "^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,3}|[0-9]{1,3})(\\]?)$"; //" @@ -3666,7 +3672,9 @@ sub scripttag { Constructs a XHTML list from \@array. -input: +=over + +=item input: =over @@ -3680,7 +3688,9 @@ Attributes for