Diff for /loncom/interface/lonhtmlcommon.pm between versions 1.358.2.19.2.3 and 1.360

version 1.358.2.19.2.3, 2022/07/08 16:04:35 version 1.360, 2015/04/01 16:14:46
Line 78  sub java_not_enabled { Line 78  sub java_not_enabled {
 sub coursepreflink {  sub coursepreflink {
    my ($text,$category)=@_;     my ($text,$category)=@_;
    if (&Apache::lonnet::allowed('opa',$env{'request.course.id'})) {     if (&Apache::lonnet::allowed('opa',$env{'request.course.id'})) {
       my $target =' target="_top"';        return '<a target="_top" href="'.&HTML::Entities::encode("/adm/courseprefs?phase=display&actions=$category",'<>&"').'"><span class="LC_setting">'.$text.'</span></a>';
       if (($env{'request.deeplink.login'}) && ($env{'request.deeplink.target'} eq '_self')) {  
           $target = '';  
       }  
       return '<a'.$target.' href="'.&HTML::Entities::encode("/adm/courseprefs?phase=display&actions=$category",'<>&"').'"><span class="LC_setting">'.$text.'</span></a>';  
    } else {     } else {
       return '';        return '';
    }     }
Line 96  sub raw_href_to_link { Line 92  sub raw_href_to_link {
   
 sub entity_encode {  sub entity_encode {
     my ($text)=@_;      my ($text)=@_;
     return &HTML::Entities::encode($text, '\'<>&"');      return &HTML::Entities::encode($text, '<>&"');
 }  }
   
 sub direct_parm_link {  sub direct_parm_link {
Line 105  sub direct_parm_link { Line 101  sub direct_parm_link {
     $filter=&entity_encode($filter);      $filter=&entity_encode($filter);
     $part=&entity_encode($part);      $part=&entity_encode($part);
     if (($symb) && (&Apache::lonnet::allowed('opa')) && ($target ne 'tex')) {      if (($symb) && (&Apache::lonnet::allowed('opa')) && ($target ne 'tex')) {
         my $target=' target="_top"';         return "<a target='_top' href='/adm/parmset?symb=$symb&amp;filter=$filter&amp;part=$part'><span class='LC_setting'>$linktext</span></a>";
         if (($env{'request.deeplink.login'}) && ($env{'request.deeplink.target'} eq '_self')) {  
             $target = '';  
         }  
        return "<a".$target." href='/adm/parmset?symb=$symb&amp;filter=$filter&amp;part=$part'><span class='LC_setting'>$linktext</span></a>";  
     } else {      } else {
        return $linktext;         return $linktext;
     }      }
Line 415  sub textbox { Line 407  sub textbox {
 ##############################################  ##############################################
 ##############################################  ##############################################
 sub checkbox {  sub checkbox {
     my ($name,$checked,$value,$special) = @_;      my ($name,$checked,$value) = @_;
     my $Str = '<input type="checkbox" name="'.$name.'" ';      my $Str = '<input type="checkbox" name="'.$name.'" ';
     if (defined($value)) {      if (defined($value)) {
         $Str .= 'value="'.$value.'"';          $Str .= 'value="'.$value.'"';
Line 423  sub checkbox { Line 415  sub checkbox {
     if ($checked) {      if ($checked) {
         $Str .= ' checked="checked"';          $Str .= ' checked="checked"';
     }      }
     $Str .= $special.' />';      $Str .= ' />';
     return $Str;      return $Str;
 }  }
   
Line 490  the date/time fields are left empty. Line 482  the date/time fields are left empty.
 =item $state  =item $state
   
 Specifies the initial state of the form elements.  Either 'disabled' or empty.  Specifies the initial state of the form elements.  Either 'disabled' or empty.
 Defaults to empty, which indicates the form elements are not disabled.  Defaults to empty, which indiciates the form elements are not disabled. 
   
 =item $no_hh_mm_ss  
   
 If true, text boxes for hours, minutes and seconds are omitted.  
   
 =item $defhour  
   
 Default value for hours (a default of 0 is used otherwise).  
   
 =item $defmin  
   
 Default value for minutes (a default of 0 is used otherwise).  
   
 =item defsec  
   
 Default value for seconds (a default of 0 is used otherwise).  
   
 =item $nolink  
   
 If true, a "Select calendar" link (to pop-up a calendar) is not displayed  
 to the right of the items.  
   
 =item $no_mm_ss  
   
 If true, text boxes for minutes and seconds are omitted.  
   
 =item $no_ss  
   
 If true, text boxes for seconds are omitted.  
   
 =back  =back
   
Line 533  The method used to restrict user input w Line 496  The method used to restrict user input w
 ##############################################  ##############################################
 sub date_setter {  sub date_setter {
     my ($formname,$dname,$currentvalue,$special,$includeempty,$state,      my ($formname,$dname,$currentvalue,$special,$includeempty,$state,
         $no_hh_mm_ss,$defhour,$defmin,$defsec,$nolink,$no_mm_ss,$no_ss) = @_;          $no_hh_mm_ss,$defhour,$defmin,$defsec,$nolink) = @_;
     my $now = time;      my $now = time;
   
     my $tzname;      my $tzname;
Line 542  sub date_setter { Line 505  sub date_setter {
   
     if (! defined($state) || $state ne 'disabled') {      if (! defined($state) || $state ne 'disabled') {
         $state = '';          $state = '';
     } else {  
         $state = 'disabled="disabled"';  
     }      }
     if (! defined($no_hh_mm_ss)) {      if (! defined($no_hh_mm_ss)) {
         $no_hh_mm_ss = 0;          $no_hh_mm_ss = 0;
Line 679  ENDJS Line 640  ENDJS
     my $minuteselector = qq{<input type="text" name="$dname\_minute" $special $state value="$min" size="3" />};      my $minuteselector = qq{<input type="text" name="$dname\_minute" $special $state value="$min" size="3" />};
     my $secondselector= qq{<input type="text" name="$dname\_second" $special $state value="$sec" size="3" />};      my $secondselector= qq{<input type="text" name="$dname\_second" $special $state value="$sec" size="3" />};
     my $cal_link;      my $cal_link;
     unless (($nolink) || ($state eq 'disabled')) {      if (!$nolink) {
         $cal_link = qq{<a href="javascript:$dname\_opencalendar()">};          $cal_link = qq{<a href="javascript:$dname\_opencalendar()">};
     }      }
     #      #
Line 688  ENDJS Line 649  ENDJS
         $result .= &mt('[_1] [_2] [_3] ',          $result .= &mt('[_1] [_2] [_3] ',
                        $monthselector,$dayselector,$yearselector).                         $monthselector,$dayselector,$yearselector).
                    $tzone;                     $tzone;
     } elsif ($no_mm_ss) {          if (!$nolink) {
         $result .= &mt('[_1] [_2] [_3] [_4]',              $result .= &mt('[_1]Select Date[_2]',$cal_link,'</a>');
                       $monthselector,$dayselector,$yearselector,          }
                       $hourselector).  
                    $tzone;  
     } elsif ($no_ss) {  
         $result .= &mt('[_1] [_2] [_3] [_4] [_5]m',  
                       $monthselector,$dayselector,$yearselector,  
                       $hourselector,$minuteselector).  
                    $tzone;  
     } else {      } else {
         $result .= &mt('[_1] [_2] [_3] [_4] [_5]m [_6]s ',          $result .= &mt('[_1] [_2] [_3] [_4] [_5]m [_6]s ',
                       $monthselector,$dayselector,$yearselector,                        $monthselector,$dayselector,$yearselector,
                       $hourselector,$minuteselector,$secondselector).                        $hourselector,$minuteselector,$secondselector).
                    $tzone;                     $tzone;
     }          if (!$nolink) {
     unless (($nolink) || ($state eq 'disabled')) {              $result .= &mt('[_1]Select Date[_2]',$cal_link,'</a>');
         $result .= &mt('[_1]Select Date[_2]',$cal_link,'</a>');          }
     }      }
     $result .= "</span>\n<!-- end $dname date setting form -->\n";      $result .= "</span>\n<!-- end $dname date setting form -->\n";
     return $result;      return $result;
Line 856  parameter setting wizard. Line 810  parameter setting wizard.
 ##############################################  ##############################################
 sub pjump_javascript_definition {  sub pjump_javascript_definition {
     my $Str = <<END;      my $Str = <<END;
     function pjump(type,dis,value,marker,ret,call,hour,min,sec,extra) {      function pjump(type,dis,value,marker,ret,call,hour,min,sec) {
         openMyModal("/adm/rat/parameter.html?type="+escape(type)          openMyModal("/adm/rat/parameter.html?type="+escape(type)
                  +"&value="+escape(value)+"&marker="+escape(marker)                   +"&value="+escape(value)+"&marker="+escape(marker)
                  +"&return="+escape(ret)                   +"&return="+escape(ret)
                  +"&call="+escape(call)+"&name="+escape(dis)                   +"&call="+escape(call)+"&name="+escape(dis)
                  +"&defhour="+escape(hour)+"&defmin="+escape(min)                   +"&defhour="+escape(hour)+"&defmin="+escape(min)
                  +"&defsec="+escape(sec)+"&extra="+escape(extra)                   +"&defsec="+escape(sec)+"&modal=1",350,350,'no');
                  +"&modal=1",350,350,'no');  
     }      }
 END  END
     return $Str;      return $Str;
Line 1018  Inputs Line 971  Inputs
   
 =item $number_to_do The total number of items being processed.  =item $number_to_do The total number of items being processed.
   
 =item $preamble Optional HTML to display before the progress bar.  
   
 =back  =back
   
 Returns a hash containing the progress state data structure.  Returns a hash containing the progress state data structure.
 If $number_to_do is zero or null, an indeterminate progress bar will  
 be used.  
   
 =item &Update_PrgWin()  =item &Update_PrgWin()
   
Line 1094  Returns: none Line 1044  Returns: none
   
 # Create progress  # Create progress
 sub Create_PrgWin {  sub Create_PrgWin {
     my ($r,$number_to_do,$preamble)=@_;      my ($r,$number_to_do)=@_;
     my %prog_state;      my %prog_state;
     $prog_state{'done'}=0;      $prog_state{'done'}=0;
     $prog_state{'firststart'}=&Time::HiRes::time();      $prog_state{'firststart'}=&Time::HiRes::time();
     $prog_state{'laststart'}=&Time::HiRes::time();      $prog_state{'laststart'}=&Time::HiRes::time();
     $prog_state{'max'}=$number_to_do;      $prog_state{'max'}=$number_to_do;
     &Apache::loncommon::LCprogressbar($r,$prog_state{'max'},$preamble);       &Apache::loncommon::LCprogressbar($r); 
     return %prog_state;      return %prog_state;
 }  }
   
 # update progress  # update progress
 sub Update_PrgWin {  sub Update_PrgWin {
     my ($r,$prog_state,$displayString)=@_;      my ($r,$prog_state,$displayString)=@_;
     &Apache::loncommon::LCprogressbarUpdate($r,undef,$displayString,$$prog_state{'max'});      &Apache::loncommon::LCprogressbarUpdate($r,undef,$displayString);
     $$prog_state{'laststart'}=&Time::HiRes::time();      $$prog_state{'laststart'}=&Time::HiRes::time();
 }  }
   
Line 1157  sub Increment_PrgWin { Line 1107  sub Increment_PrgWin {
     if ($$prog_state{'max'}) {      if ($$prog_state{'max'}) {
        $percent=int(100.*$current/$$prog_state{'max'});         $percent=int(100.*$current/$$prog_state{'max'});
     }      }
     &Apache::loncommon::LCprogressbarUpdate($r,$percent,$timeinfo,$$prog_state{'max'});      &Apache::loncommon::LCprogressbarUpdate($r,$percent,$timeinfo);
     $$prog_state{'laststart'}=&Time::HiRes::time();      $$prog_state{'laststart'}=&Time::HiRes::time();
 }  }
   
Line 1172  sub Close_PrgWin { Line 1122  sub Close_PrgWin {
 # ------------------------------------------------------- Puts directory header  # ------------------------------------------------------- Puts directory header
   
 sub crumbs {  sub crumbs {
     my ($uri,$target,$prefix,$form,$skiplast,$onclick)=@_;      my ($uri,$target,$prefix,$form,$skiplast)=@_;
 # You cannot crumbnify uploaded or adm resources  # You cannot crumbnify uploaded or adm resources
     if ($uri=~/^\/*(uploaded|adm)\//) { return &mt('(Internal Course/Community Content)'); }      if ($uri=~/^\/*(uploaded|adm)\//) { return &mt('(Internal Course/Group Content)'); }
     if ($target) {      if ($target) {
         $target = ' target="'.          $target = ' target="'.
                   &Apache::loncommon::escape_single($target).'"';                    &Apache::loncommon::escape_single($target).'"';
Line 1194  sub crumbs { Line 1144  sub crumbs {
             } else {              } else {
                 $path.='/';                   $path.='/'; 
             }              }
             if ($path eq '/res/') {  
                 unless (&Apache::lonnet::allowed('bre',$path)) {  
                     $output.="$dir/";  
                     next;  
                 }  
             }  
             my $href_path = &HTML::Entities::encode($path,'<>&"');              my $href_path = &HTML::Entities::encode($path,'<>&"');
             &Apache::loncommon::inhibit_menu_check(\$href_path);              &Apache::loncommon::inhibit_menu_check(\$href_path);
             if ($form) {              if ($form) {
                 my $href = 'javascript:'.$form.".action='".$href_path."';".$form.'.submit();';                  my $href = 'javascript:'.$form.".action='".$href_path."';".$form.'.submit();';
                 $output.=qq{<a href="$href"$onclick$target>$dir</a>/};                  $output.=qq{<a href="$href"$target>$dir</a>/};
             } else {              } else {
                 $output.=qq{<a href="$href_path"$onclick$target>$dir</a>/};                  $output.=qq{<a href="$href_path"$target>$dir</a>/};
             }              }
         }          }
     } else {      } else {
Line 1277  sub htmlareaheaders { Line 1221  sub htmlareaheaders {
 ENDEDITOR  ENDEDITOR
  }   }
     $s.=(<<ENDJQUERY);      $s.=(<<ENDJQUERY);
 <script type="text/javascript" src="/adm/jQuery/js/jquery-3.2.1.min.js"></script>  <script type="text/javascript" src="/adm/jQuery/js/jquery-1.6.2.min.js"></script>
 <script type="text/javascript" src="/adm/jQuery/js/jquery-ui-1.12.1.custom.min.js"></script>  <script type="text/javascript" src="/adm/jQuery/js/jquery-ui-1.8.16.custom.min.js"></script>
 <link rel="stylesheet" type="text/css" href="/adm/jQuery/css/smoothness/jquery-ui-1.12.1.custom.min.css" />  <link rel="stylesheet" type="text/css" href="/adm/jQuery/css/smoothness/jquery-ui-1.8.16.custom.css" />
 <script type="text/javascript" src="/adm/jpicker/js/jpicker-1.1.6.min.js" >  <script type="text/javascript" src="/adm/jpicker/js/jpicker-1.1.6.min.js" >
 </script>  </script>
 <link rel="stylesheet" type="text/css" href="/adm/jpicker/css/jPicker-1.1.6.min.css" />  <link rel="stylesheet" type="text/css" href="/adm/jpicker/css/jPicker-1.1.6.min.css" />
Line 1702  sub show_return_link { Line 1646  sub show_return_link {
             (($env{'request.noversionuri'}=~/^\/adm\//) &&              (($env{'request.noversionuri'}=~/^\/adm\//) &&
              ($env{'request.noversionuri'}!~/^\/adm\/wrapper\//) &&               ($env{'request.noversionuri'}!~/^\/adm\/wrapper\//) &&
              ($env{'request.noversionuri'}!~               ($env{'request.noversionuri'}!~
               m{^/adm/.*/(smppg|bulletinboard|ext\.tool)($|\?)})                m{^/adm/.*/(smppg|bulletinboard)($|\?)})
            ));             ));
 }  }
   
Line 1777  A link to help for the component will be Line 1721  A link to help for the component will be
 All inputs can be undef without problems.  All inputs can be undef without problems.
   
 Inputs: $component (the text on the right side of the breadcrumbs trail),  Inputs: $component (the text on the right side of the breadcrumbs trail),
         $component_help (the help item filename (without .tex extension).          $component_help
         $menulink (boolean, controls whether to include a link to /adm/menu)          $menulink (boolean, controls whether to include a link to /adm/menu)
         $helplink (if 'nohelp' don't include the orange help link)          $helplink (if 'nohelp' don't include the orange help link)
         $css_class (optional name for the class to apply to the table for CSS)          $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          $no_mt (optional flag, 1 if &mt() is _not_ to be applied to $component
            when including the text on the right.             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.  
         $links_target optionally includes the target (_top, _parent or _self)  
   
 Returns a string containing breadcrumbs for the current page.  Returns a string containing breadcrumbs for the current page.
   
 =item &clear_breadcrumbs()  =item &clear_breadcrumbs()
Line 1818  returns: nothing Line 1754  returns: nothing
           
     sub breadcrumbs {      sub breadcrumbs {
         my ($component,$component_help,$menulink,$helplink,$css_class,$no_mt,           my ($component,$component_help,$menulink,$helplink,$css_class,$no_mt, 
             $CourseBreadcrumbs,$topic_help,$topic_help_text,$links_target) = @_;              $CourseBreadcrumbs) = @_;
         #          #
         $css_class ||= 'LC_breadcrumbs';          $css_class ||= 'LC_breadcrumbs';
   
Line 1834  returns: nothing Line 1770  returns: nothing
         # The first one should be the course or a menu link          # The first one should be the course or a menu link
         if (!defined($menulink)) { $menulink=1; }          if (!defined($menulink)) { $menulink=1; }
         if ($menulink) {          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 ($menulink) {  
             my $description = 'Menu';              my $description = 'Menu';
             my $no_mt_descr = 0;              my $no_mt_descr = 0;
             if ((exists($env{'request.course.id'})) &&               if ((exists($env{'request.course.id'})) && 
Line 1853  returns: nothing Line 1779  returns: nothing
                     $env{'course.'.$env{'request.course.id'}.'.description'};                      $env{'course.'.$env{'request.course.id'}.'.description'};
                 $no_mt_descr = 1;                  $no_mt_descr = 1;
                 if ($env{'request.noversionuri'} =~                   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) &&                      unless (($env{'course.'.$env{'request.course.id'}.'.domain'} eq $1) &&
                             ($env{'course.'.$env{'request.course.id'}.'.num'} eq $2)) {                              ($env{'course.'.$env{'request.course.id'}.'.num'} eq $2)) {
                         $description = 'Menu';                          $description = 'Menu';
Line 1861  returns: nothing Line 1787  returns: nothing
                     }                      }
                 }                  }
             }              }
             my $target = '_top';  
             if ($links_target) {  
                 $target = $links_target;  
             } elsif (($env{'request.deeplink.login'}) && ($env{'request.deeplink.target'} eq '_self')) {  
                 $target = '';  
             }  
             $menulink =  {  href   =>'/adm/menu',              $menulink =  {  href   =>'/adm/menu',
                             title  =>'Go to main menu',                              title  =>'Go to main menu',
                             target =>$target,                              target =>'_top',
                             text   =>$description,                              text   =>$description,
                             no_mt  =>$no_mt_descr, };                              no_mt  =>$no_mt_descr, };
             if($last) {              if($last) {
Line 1887  returns: nothing Line 1807  returns: nothing
                             title => &mt('Back to most recent content resource'),                              title => &mt('Back to most recent content resource'),
                             class => 'LC_menubuttons_link',                              class => 'LC_menubuttons_link',
                           };                            };
             if ($links_target) {              if ($env{'request.noversionuri'} eq '/adm/searchcat') {
                 $hashref->{'target'} = $links_target;                  $hashref->{'target'} = '_top'; 
             }              }
             $links=&htmltag( 'a','<img src="/res/adm/pages/tolastloc.png" alt="'.$alttext.'" class="LC_icon" />',              $links=&htmltag( 'a','<img src="/res/adm/pages/tolastloc.png" alt="'.$alttext.'" class="LC_icon" />',
                              $hashref);                               $hashref);
Line 1939  returns: nothing Line 1859  returns: nothing
         if ($faq ne '' || $component_help ne '' || $bug ne '') {          if ($faq ne '' || $component_help ne '' || $bug ne '') {
             $icons .= &Apache::loncommon::help_open_menu($component,              $icons .= &Apache::loncommon::help_open_menu($component,
                                                          $component_help,                                                           $component_help,
                                                          $faq,$bug,'','','','',                                                           $faq,$bug);
                                                          $links_target);  
         }  
         if ($topic_help && $topic_help_text) {  
            $icons .= ' '.&Apache::loncommon::help_open_topic($topic_help,&mt($topic_help_text),'',  
                                                              undef,600,'',$links_target);  
         }          }
         #          #
   
Line 1958  returns: nothing Line 1873  returns: nothing
         }          }
   
   
         if (($component) || ($topic_help && $topic_help_text)) {          if ($component) {
             $links = &htmltag('span',               $links = &htmltag('span', 
                              ( $no_mt ? $component : mt($component) ).                               ( $no_mt ? $component : mt($component) ).
                              ( $icons ? $icons : '' ),                               ( $icons ? $icons : '' ),
Line 2061  returns: nothing Line 1976  returns: nothing
         undef(%tools);          undef(%tools);
     }      }
   
 =item &current_breadcrumb_tools()  
   
 returns: a hash containing the current breadcrumb tools.  
   
 =cut  
   
     sub current_breadcrumb_tools {  
         return %tools;  
     }  
   
 =item &render_tools(\$breadcrumbs)  =item &render_tools(\$breadcrumbs)
   
 Creates html for breadcrumb tools (categories navigation and tools) and inserts   Creates html for breadcrumb tools (categories navigation and tools) and inserts 
Line 2122  returns: nothing Line 2027  returns: nothing
 } # End of scope for @Crumbs  } # End of scope for @Crumbs
   
 sub docs_breadcrumbs {  sub docs_breadcrumbs {
     my ($allowed,$crstype,$contenteditor,$title,$precleared,$checklinkprot)=@_;      my ($allowed,$crstype,$contenteditor,$title,$precleared)=@_;
     my ($folderpath,@folders,$supplementalflag);      my ($folderpath,@folders,$supplementalflag);
     @folders = split('&',$env{'form.folderpath'});      @folders = split('&',$env{'form.folderpath'});
     if ($env{'form.folderpath'} =~ /^supplemental/) {      if ($env{'form.folderpath'} =~ /^supplemental/) {
Line 2137  sub docs_breadcrumbs { Line 2042  sub docs_breadcrumbs {
         my $foldername=shift(@folders);          my $foldername=shift(@folders);
         if ($folderpath) {$folderpath.='&';}          if ($folderpath) {$folderpath.='&';}
         $folderpath.=$folder.'&'.$foldername;          $folderpath.=$folder.'&'.$foldername;
         my $url = $env{'request.use_absolute'};          my $url;
         if ($allowed) {          if ($allowed) {
             $url .= '/adm/coursedocs?folderpath=';              $url = '/adm/coursedocs?folderpath=';
         } else {          } else {
             $url .= '/adm/supplemental?folderpath=';              $url = '/adm/supplemental?folderpath=';
         }          }
         $url .= &escape($folderpath);          $url .= &escape($folderpath);
         my $name=&unescape($foldername);          my $name=&unescape($foldername);
Line 2193  sub docs_breadcrumbs { Line 2098  sub docs_breadcrumbs {
         if (!$allowed && !$contenteditor) {          if (!$allowed && !$contenteditor) {
             $menulink = 1;              $menulink = 1;
         }          }
         if ($checklinkprot) {  
             if ($env{'request.deeplink.login'}) {  
                 my $linkprotout = &Apache::lonmenu::linkprot_exit();  
                 if ($linkprotout) {  
                     &Apache::lonhtmlcommon::add_breadcrumb_tool('tools',$linkprotout);  
                 }  
             }  
         }  
         return (&breadcrumbs(undef,undef,$menulink,'nohelp',undef,undef,          return (&breadcrumbs(undef,undef,$menulink,'nohelp',undef,undef,
                              $contenteditor),                               $contenteditor),
                              $randompick,$ishidden,$isencrypted,$plain,                               $randompick,$ishidden,$isencrypted,$plain,
Line 2441  sub course_selection { Line 2338  sub course_selection {
     if ($totcodes > 0) {      if ($totcodes > 0) {
         my $numtitles = @$codetitles;          my $numtitles = @$codetitles;
         if ($numtitles > 0) {          if ($numtitles > 0) {
             $output .= '<label><input type="radio" name="coursepick" value="category" onclick="coursePick(this.form);alert('."'".&html_escape(&mt('Choose categories, from left to right'))."'".')" />'.&mt('Pick courses by category:').'</label><br />';              $output .= '<label><input type="radio" name="coursepick" value="category" onclick="coursePick(this.form);alert('."'".&mt('Choose categories, from left to right')."'".')" />'.&mt('Pick courses by category:').'</label><br />';
             $output .= '<table><tr><td>'.$$codetitles[0].'<br />'."\n".              $output .= '<table><tr><td>'.$$codetitles[0].'<br />'."\n".
                '<select name="'.$standardnames->[0].                 '<select name="'.$standardnames->[0].
                '" onchange="setPick(this.form);courseSet('."'$$codetitles[0]'".')">'."\n".                 '" onchange="setPick(this.form);courseSet('."'$$codetitles[0]'".')">'."\n".
Line 2574  sub course_custom_roles { Line 2471  sub course_custom_roles {
   
   
 sub resource_info_box {  sub resource_info_box {
    my ($symb,$onlyfolderflag,$stuvcurrent,$stuvdisp,$divforres)=@_;     my ($symb,$onlyfolderflag,$stuvcurrent,$stuvdisp)=@_;
    my $return='';     my $return='';
    if (($stuvcurrent ne '') || ($divforres)) {     if ($stuvcurrent ne '') {
        $return = '<div class="LC_left_float">';         $return = '<div class="LC_left_float">';
    }     }
    if ($symb) {     if ($symb) {
Line 2605  sub resource_info_box { Line 2502  sub resource_info_box {
     } else {      } else {
        $return='<p><span class="LC_error">'.&mt('No context provided.').'</span></p>';         $return='<p><span class="LC_error">'.&mt('No context provided.').'</span></p>';
     }      }
     if (($stuvcurrent ne '') || ($divforres)) {      if ($stuvcurrent ne '') {
         $return .= '</div>';          $return .= '</div>';
     }      }
     return $return;      return $return;
Line 2620  sub resource_info_box { Line 2517  sub resource_info_box {
 #  #
   
 sub display_usage {  sub display_usage {
     my ($current_disk_usage,$disk_quota,$context) = @_;      my ($current_disk_usage,$disk_quota) = @_;
     my $usage = $current_disk_usage/1024;      my $usage = $current_disk_usage/1000;
     my $quota = $disk_quota/1024;      my $quota = $disk_quota/1000;
     my $percent;      my $percent;
     if ($disk_quota == 0) {      if ($disk_quota == 0) {
         $percent = 100.0;          $percent = 100.0;
Line 2646  sub display_usage { Line 2543  sub display_usage {
     if ($prog_width > 100) {      if ($prog_width > 100) {
         $prog_width = 100;          $prog_width = 100;
     }      }
     my $display = 'block';  
     if ($context eq 'authoring') {  
         $display = 'inline';  
     }  
     return '      return '
   <div id="meter1" align="left" style="display:'.$display.'" '.$cssclass.'>'.&mt('Currently using [_1] of the [_2] available.',$usage.' MB <span style="font-weight:bold;">('.$percent.'%)</span>',$quota.' MB')."\n".    <div id="meter1" align="left" '.$cssclass.'>'.&mt('Currently using [_1] of the [_2] available.',$usage.' MB <span style="font-weight:bold;">('.$percent.'%)</span>',$quota.' MB')."\n".
 '   <div id="meter2" style="display:block; margin-top:3px; margin-bottom:3px; margin-left:0px; margin-right:0px; width:400px; border:1px solid #000000; height:10px;">'."\n".  '   <div id="meter2" style="display:block; margin-top:5px; margin-bottom:5px; margin-left:0px; margin-right:0px; width:400px; border:1px solid #000000; height:10px;">'."\n".
 '    <div id="meter3" style="display:block; background-color:'.$color.'; width:'.$prog_width.'%; height:10px; color:#000000; margin:0px;"></div>'."\n".  '    <div id="meter3" style="display:block; background-color:'.$color.'; width:'.$prog_width.'%; height:10px; color:#000000; margin:0px;"></div>'."\n".
 '   </div>'."\n".  '   </div>'."\n".
 '  </div>';  '  </div>';
Line 2902  sub set_form_elements { Line 2795  sub set_form_elements {
   
 sub file_submissionchk_js {  sub file_submissionchk_js {
     my ($turninpaths,$multiples) = @_;      my ($turninpaths,$multiples) = @_;
     my $overwritewarn = &mt('File(s) you uploaded for your submission will overwrite existing file(s) submitted for this item')."\n".      my $overwritewarn = &mt('File(s) you uploaded for your submission will overwrite existing file(s) submitted for this item').'\\n'.
                       &mt('Continue submission and overwrite the file(s)?');                        &mt('Continue submission and overwrite the file(s)?');
     &js_escape(\$overwritewarn);      my $delfilewarn = &mt('You have indicated you wish to remove some files previously included in your submission.').'\\n'.
     my $delfilewarn = &mt('You have indicated you wish to remove some files previously included in your submission.')."\n".  
                       &mt('Continue submission with these files removed?');                        &mt('Continue submission with these files removed?');
     &js_escape(\$delfilewarn);  
     my ($turninpathtext,$multtext,$arrayindexofjs);      my ($turninpathtext,$multtext,$arrayindexofjs);
     if (ref($turninpaths) eq 'HASH') {      if (ref($turninpaths) eq 'HASH') {
         foreach my $key (sort(keys(%{$turninpaths}))) {          foreach my $key (sort(keys(%{$turninpaths}))) {
Line 3336  PARAMSONE Line 3227  PARAMSONE
         if (itemid != null) {          if (itemid != null) {
             itemh = itemid.offsetHeight;              itemh = itemid.offsetHeight;
         }          }
         var primaryheight = 0;          var primaryheight = document.getElementById('LC_nav_bar').offsetHeight;
         if (document.getElementById('LC_nav_bar') != null) {          var secondaryheight;
             primaryheight = document.getElementById('LC_nav_bar').offsetHeight;  
         }  
         var secondaryheight = 0;  
         if (document.getElementById('LC_secondary_menu') != null) {           if (document.getElementById('LC_secondary_menu') != null) { 
             secondaryheight = document.getElementById('LC_secondary_menu').offsetHeight;              secondaryheight = document.getElementById('LC_secondary_menu').offsetHeight;
         }          }
         var crumbsheight = 0;          var crumbsheight = document.getElementById('LC_breadcrumbs').offsetHeight;
         if (document.getElementById('LC_breadcrumbs') != null) {  
             crumbsheight = document.getElementById('LC_breadcrumbs').offsetHeight;  
         }  
         var dccidheight = 0;          var dccidheight = 0;
         if (document.getElementById('dccid') != null) {          if (document.getElementById('dccid') != null) {
             dccidheight = document.getElementById('dccid').offsetHeight;              dccidheight = document.getElementById('dccid').offsetHeight;
Line 3418  THIRD Line 3303  THIRD
 ##############################################  ##############################################
   
 sub javascript_jumpto_resource {  sub javascript_jumpto_resource {
     my $confirm_switch = &mt("Editing requires switching to the resource's home server.")."\n".      my $confirm_switch = &mt("Editing requires switching to the resource's home server.").'\n'.
                          &mt('Switch server?');                           &mt('Switch server?');
     &js_escape(\$confirm_switch);  
     return (<<ENDUTILITY)      return (<<ENDUTILITY)
   
 function go(url) {  function go(url) {
    if (url!='' && url!= null) {     if (url!='' && url!= null) {
        currentURL = null;         currentURL = null;
        currentSymb= null;         currentSymb= null;
        var lcHostname = setLCHost();         window.location.href=url;
        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;  
        }  
    }     }
 }  }
   
Line 3456  ENDUTILITY Line 3330  ENDUTILITY
   
 sub jump_to_editres {  sub jump_to_editres {
     my ($cfile,$home,$switchserver,$forceedit,$forcereg,$symb,$folderpath,      my ($cfile,$home,$switchserver,$forceedit,$forcereg,$symb,$folderpath,
         $title,$hostname,$idx,$suppurl,$todocs,$suppanchor) = @_;          $title,$idx,$suppurl,$todocs) = @_;
     my ($jscall,$anchor,$usehttp,$usehttps,$is_ext);      my $jscall;
     if ($switchserver) {      if ($switchserver) {
         if ($home) {          if ($home) {
             $cfile = '/adm/switchserver?otherserver='.$home.'&amp;role='.              $cfile = '/adm/switchserver?otherserver='.$home.'&amp;role='.
Line 3477  sub jump_to_editres { Line 3351  sub jump_to_editres {
         }          }
     } else {      } else {
         unless ($cfile =~ m{^/priv/}) {          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 ($symb) {
                 if ($anchor ne '') {  
                     if ($symb =~ m{^([^#]+)\Q#$anchor\E$}) {  
                         $symb = $1.&escape(&escape('#')).$anchor;  
                     }  
                 }  
                 $cfile .= (($cfile=~/\?/)?'&amp;':'?')."symb=$symb";                  $cfile .= (($cfile=~/\?/)?'&amp;':'?')."symb=$symb";
             } elsif ($folderpath) {              } elsif ($folderpath) {
                 $cfile .= (($cfile=~/\?/)?'&amp;':'?').                  $cfile .= (($cfile=~/\?/)?'&amp;':'?').
Line 3533  sub jump_to_editres { Line 3370  sub jump_to_editres {
             }              }
             if ($forceedit) {              if ($forceedit) {
                 $cfile .= (($cfile=~/\?/)?'&amp;':'?').'forceedit=1';                  $cfile .= (($cfile=~/\?/)?'&amp;':'?').'forceedit=1';
                 if ($usehttps) {  
                     $cfile = $env{'request.use_absolute'}.(($cfile =~ /^\//)? '':'/').$cfile;  
                 }  
             } elsif ($usehttp) {  
                 if ($hostname ne '') {  
                     $cfile = 'http://'.$hostname.(($cfile =~ /^\//)? '':'/').$cfile;  
                 }  
                 $cfile .= (($cfile=~/\?/)?'&amp;':'?').'usehttp=1';  
             } elsif ($usehttps) {  
                 $cfile = $env{'request.use_absolute'}.(($cfile =~ /^\//)? '':'/').$cfile;  
             }              }
             if ($forcereg) {              if ($forcereg) {
                 $cfile .= (($cfile=~/\?/)?'&amp;':'?').'register=1';                  $cfile .= (($cfile=~/\?/)?'&amp;':'?').'register=1';
             }              }
             if ($todocs) {              if ($todocs) {
                 $cfile .= (($cfile=~/\?/)?'&amp;':'?').'todocs=1';                 $cfile .= (($cfile=~/\?/)?'&amp;':'?').'todocs=1';
             }              }
             if ($suppanchor ne '') {  
                 $cfile .= (($cfile=~/\?/)?'&amp;':'?').'anchor='.  
                           &HTML::Entities::encode($suppanchor,'"<>&');  
             }  
         }  
         if ($anchor ne '') {  
             $cfile .= '#'.$anchor;  
         }          }
         $jscall = "go('".&Apache::loncommon::escape_single($cfile)."')";          $jscall = "go('".&Apache::loncommon::escape_single($cfile)."')";
     }      }
Line 3569  sub jump_to_editres { Line 3389  sub jump_to_editres {
 # javascript_valid_email  # javascript_valid_email
 #  #
 # Generates javascript to validate an e-mail address.  # 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  # returns false if field.value does not satisfy two regular expression matches
 # for a valid e-mail address.  Backwards compatible with old browsers without  # 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).   # support for javascript RegExp (just checks for @ in field.value in this case). 
   
 sub javascript_valid_email {  sub javascript_valid_email {
     my $scripttag .= <<'END';      my $scripttag .= <<'END';
 function validmail(field,suffix) {  function validmail(field) {
     var str = field.value;      var str = field.value;
     if (suffix != '' && suffix != undefined) {  
         str += suffix;  
     }  
     if (window.RegExp) {      if (window.RegExp) {
         var reg1str = "(@.*@)|(\\.\\.)|(@\\.)|(\\.@)|(^\\.)";          var reg1str = "(@.*@)|(\\.\\.)|(@\\.)|(\\.@)|(^\\.)";
         var reg2str = "^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,3}|[0-9]{1,3})(\\]?)$"; //"          var reg2str = "^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,3}|[0-9]{1,3})(\\]?)$"; //"
Line 3891  add_item_funclist Line 3708  add_item_funclist
 Inputs: ./.  Inputs: ./.
   
 Returns: HTML code with function list end  Returns: HTML code with function list end
   
 =cut  =cut
   
 sub end_funclist {  sub end_funclist {
Line 3935  sub funclist_from_array { Line 3751  sub funclist_from_array {
   
 =pod  =pod
   
 =over  
   
 =item &actionbox( \@array )  =item &actionbox( \@array )
   
 Constructs a XHTML list from \@array with the first item being visually  Constructs a XHTML list from \@array with the first item being visually
Line 3954  A reference to the array containing text Line 3768  A reference to the array containing text
   
 =back  =back
     
 Returns: XHTML div as string.  Returns: XHTML div as string. 
   
 =back  =back
   

Removed from v.1.358.2.19.2.3  
changed lines
  Added in v.1.360


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>