Diff for /loncom/interface/lonhtmlcommon.pm between versions 1.335 and 1.359

version 1.335, 2012/11/30 11:28:51 version 1.359, 2015/03/31 13:46:01
Line 64  use HTML::Entities(); Line 64  use HTML::Entities();
 use LONCAPA qw(:DEFAULT :match);  use LONCAPA qw(:DEFAULT :match);
   
 sub java_not_enabled {  sub java_not_enabled {
    return "\n".'<span class="LC_error">'.      if (($env{'browser.mobile'}) && ($env{'browser.mobile'} =~ /^ipad|ipod|iphone$/i)) {
           &mt('The required Java applet could not be started. Please make sure to have Java installed and active in your browser.').          return "\n".'<span class="LC_error">'.
           "</span>\n";                 &mt('The required Java applet could not be started, because Java is not supported by your mobile device.').
                  "</span>\n";
       } else {
           return "\n".'<span class="LC_error">'.
                  &mt('The required Java applet could not be started. Please make sure to have Java installed and active in your browser.').
                  "</span>\n";
       }
 }  }
   
 sub coursepreflink {  sub coursepreflink {
Line 170  sub dragmath_js { Line 176  sub dragmath_js {
                   function mathedit(textarea, doc) {                    function mathedit(textarea, doc) {
                      targetEntry = textarea;                       targetEntry = textarea;
                      targetDoc   = doc;                       targetDoc   = doc;
                      newwin  = window.open("/adm/dragmath/applet/$popup.html","","width=565,height=500,resizable");                       newwin  = window.open("/adm/dragmath/$popup.html","","width=565,height=500,resizable");
                   }                    }
                 // ]]>                  // ]]>
                 </script>                  </script>
Line 216  sub dependencycheck_js { Line 222  sub dependencycheck_js {
     } elsif ($folderpath) {      } elsif ($folderpath) {
         $link = '/adm/dependencies?folderpath='.&HTML::Entities::encode($folderpath,'<>&"');          $link = '/adm/dependencies?folderpath='.&HTML::Entities::encode($folderpath,'<>&"');
          $url = $uri;           $url = $uri;
       } elsif ($uri =~ m{^/public/$match_domain/$match_courseid/syllabus$}) {
           $link = '/adm/dependencies';
     }      }
     $link .= (($link=~/\?/)?'&amp;':'?').'title='.      $link .= (($link=~/\?/)?'&amp;':'?').'title='.
              &HTML::Entities::encode($title,'<>&"');               &HTML::Entities::encode($title,'<>&"');
Line 1219  ENDEDITOR Line 1227  ENDEDITOR
 <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" />
 <script type="text/javascript" src="/adm/countdown/js/jquery.countdown.js"></script>  <script type="text/javascript" src="/adm/countdown/js/jquery.countdown.min.js"></script>
 <link rel="stylesheet" type="text/css" href="/adm/countdown/css/jquery.countdown.css" />  <link rel="stylesheet" type="text/css" href="/adm/countdown/css/jquery.countdown.css" />
   
 <script type="text/javascript" src="/adm/spellchecker/js/jquery.spellchecker.min.js"></script>  <script type="text/javascript" src="/adm/spellchecker/js/jquery.spellchecker.min.js"></script>
 <link rel="stylesheet" type="text/css" href="/adm/spellchecker/css/spellchecker.css" />  <link rel="stylesheet" type="text/css" href="/adm/spellchecker/css/spellchecker.css" />
   <script type="text/javascript" src="/adm/nicescroll/jquery.nicescroll.min.js"></script>
   
 ENDJQUERY  ENDJQUERY
  return $s;   return $s;
Line 1257  sub htmlareaselectactive { Line 1266  sub htmlareaselectactive {
     my ($args) = @_;       my ($args) = @_; 
     unless (&htmlareabrowser()) { return ''; }      unless (&htmlareabrowser()) { return ''; }
     my $output='<script type="text/javascript" defer="defer">'."\n"      my $output='<script type="text/javascript" defer="defer">'."\n"
               .'// <![CDATA['."\n";                .'// <![CDATA['."\n"
                 .'//<!-- BEGIN LON-CAPA Internal'."\n";
     my $lang = &htmlarea_lang();      my $lang = &htmlarea_lang();
     my $fullpage = 'false';      my $fullpage = 'false';
     my ($dragmath_prefix,$dragmath_helpicon,$dragmath_whitespace);      my ($dragmath_prefix,$dragmath_helpicon,$dragmath_whitespace);
Line 1280  sub htmlareaselectactive { Line 1290  sub htmlareaselectactive {
             }              }
         }          }
     }      }
   
       my %lt = &Apache::lonlocal::texthash(
                 'plain'       => 'Plain text',
                 'rich'        => 'Rich formatting',
                 'plain_title' => 'Disable rich text formatting and edit in plain text',
                 'rich_title'  => 'Enable rich text formatting (bold, italic, etc.)',
             );
   
     $output.='      $output.='
           
     function containsBlockHtml(id) {      function containsBlockHtml(id) {
Line 1288  sub htmlareaselectactive { Line 1306  sub htmlareaselectactive {
     }      }
           
     function startRichEditor(id) {      function startRichEditor(id) {
           // fix character entities inside <m>
           // NOTE: this is not fixing characters inside <parse>
           var ta = document.getElementById(id);
           var value = ta.value;
           var in_m = false; // in the m element
           var in_text = false; // in the text inside the m element
           var im = -1; // position of <m>
           var it = -1; // position of the text inside
           for (var i=0; i<value.length; i++) {
               if (value.substr(i, 2) == "<m") {
                   // ignore previous <m> if found twice
                   in_m = true;
                   in_text = false;
                   im = i;
                   it = -1;
               } else if (in_m) {
                   if (!in_text) {
                       if (value.charAt(i) == ">") {
                           in_text = true;
                           it = i+1;
                       }
                   } else if (value.substr(i, 4) == "</m>") {
                       in_m = false;
                       var text = value.substr(it, i-it);
                       var l1 = text.length;
                       text = text.replace(/</g, "&lt;");
                       text = text.replace(/>/g, "&gt;");
                       var l2 = text.length;
                       value = value.substr(0, it) + text + "</m>" + value.substr(i+4);
                       i = i + (l2-l1);
                   }
               }
           }
           ta.value = value;
     CKEDITOR.replace(id,       CKEDITOR.replace(id, 
     {      {
     customConfig: "/ckeditor/loncapaconfig.js",      customConfig: "/ckeditor/loncapaconfig.js",
Line 1299  sub htmlareaselectactive { Line 1351  sub htmlareaselectactive {
           
     function destroyRichEditor(id) {      function destroyRichEditor(id) {
     CKEDITOR.instances[id].destroy();      CKEDITOR.instances[id].destroy();
           // replace character entities &lt; and &gt; in <m>
           // and "&amp;fctname(" by "&fctname("
           // and the quotes inside functions: "&fct(1, &quot;a&quot;)" -> "&fct(1, "a")"
           var ta = document.getElementById(id);
           var value = ta.value;
           var in_m = false; // in the m element
           var in_text = false; // in the text inside the m element
           var im = -1; // position of <m>
           var it = -1; // position of the text inside
           for (var i=0; i<value.length; i++) {
               if (value.substr(i, 2) == "<m") {
                   // ignore previous <m> if found twice
                   in_m = true;
                   in_text = false;
                   im = i;
                   it = -1;
               } else if (in_m) {
                   if (!in_text) {
                       if (value.charAt(i) == ">") {
                           in_text = true;
                           it = i+1;
                       }
                   } else if (value.substr(i, 4) == "</m>") {
                       in_m = false;
                       var text = value.substr(it, i-it);
                       var l1 = text.length;
                       text = text.replace(/&lt;/g, "<");
                       text = text.replace(/&gt;/g, ">");
                       var l2 = text.length;
                       value = value.substr(0, it) + text + "</m>" + value.substr(i+4);
                       i = i + (l2-l1);
                   }
               }
           }
           // fix function names
           value = value.replace(/&amp;([a-zA-Z_]+)\(/g, "&$1(");
           // fix quotes in functions
           var pos_next_fct = value.search(/&[a-zA-Z_]+\(/);
           var depth = 0;
           for (var i=0; i<value.length; i++) {
               if (i == pos_next_fct) {
                   depth++;
                   var sub = value.substring(i+1);
                   var pos2 = sub.search(/&[a-zA-Z_]+\(/);
                   if (pos2 == -1)
                       pos_next_fct = -1;
                   else
                       pos_next_fct = i + 1 + pos2;
               } else if (depth > 0) {
                   if (value.charAt(i) == ")")
                       depth--;
                   else if (value.substr(i, 6) == "&quot;")
                       value = value.substr(0, i) + "\"" + value.substr(i+6);
               }
           }
           // replace the text value
           ta.value = value;
     }      }
           
     function editorHandler(event) {      function editorHandler(event) {
Line 1308  sub htmlareaselectactive { Line 1417  sub htmlareaselectactive {
     var rt_enabled  = $(this).hasClass("LC_enable_rt");      var rt_enabled  = $(this).hasClass("LC_enable_rt");
         if (rt_enabled) {          if (rt_enabled) {
     startRichEditor(id);      startRichEditor(id);
  $("#LC_rt_"+id).html("<b>&laquo; Plain text</b>");   $("#LC_rt_"+id).html("<b>&laquo; '.$lt{'plain'}.'</b>");
  $("#LC_rt_"+id).attr("title", "Disable rich text formatting and edit in plain text");   $("#LC_rt_"+id).attr("title", "'.$lt{'plain_title'}.'");
  $("#LC_rt_"+id).addClass("LC_disable_rt");   $("#LC_rt_"+id).addClass("LC_disable_rt");
  $("#LC_rt_"+id).removeClass("LC_enable_rt");   $("#LC_rt_"+id).removeClass("LC_enable_rt");
     } else {      } else {
  destroyRichEditor(id);   destroyRichEditor(id);
  $("#LC_rt_"+id).html("<b>Rich formatting &raquo;</b>");   $("#LC_rt_"+id).html("<b>'.$lt{'rich'}.' &raquo;</b>");
  $("#LC_rt_"+id).attr("title", "Enable rich text formatting (bold, italic, etc.)");   $("#LC_rt_"+id).attr("title", "'.$lt{'rich_title'}.'");
  $("#LC_rt_"+id).addClass("LC_enable_rt");   $("#LC_rt_"+id).addClass("LC_enable_rt");
  $("#LC_rt_"+id).removeClass("LC_disable_rt");   $("#LC_rt_"+id).removeClass("LC_disable_rt");
  }';   }';
Line 1336  sub htmlareaselectactive { Line 1445  sub htmlareaselectactive {
  var id = $(this).attr("id");   var id = $(this).attr("id");
                         var rt_enabled = containsBlockHtml(id);                          var rt_enabled = containsBlockHtml(id);
  if(rt_enabled) {   if(rt_enabled) {
  $(this).before("<div><a href=\"#\" id=\"LC_rt_"+id+"\" title=\"Disable rich text formatting and edit in plain text\" class=\"LC_disable_rt\"><b>&laquo; Plain text</b></a></div>");   $(this).before("<div><a href=\"#\" id=\"LC_rt_"+id+"\" title=\"'.$lt{'plain_title'}.'\" class=\"LC_disable_rt\"><b>&laquo; '.$lt{'plain'}.'</b></a></div>");
  startRichEditor(id);   startRichEditor(id);
  $("#LC_rt_"+id).click(editorHandler);   $("#LC_rt_"+id).click(editorHandler);
  }   }
  else {   else {
  $(this).before("<div><a href=\"#\" id=\"LC_rt_"+id+"\" title=\"Enable rich text formatting (bold, italic, etc.)\" class=\"LC_enable_rt\"><b>Rich formatting &raquo;</b></a></div>");   $(this).before("<div><a href=\"#\" id=\"LC_rt_"+id+"\" title=\"'.$lt{'rich_title'}.'\" class=\"LC_enable_rt\"><b>'.$lt{'rich'}.' &raquo;</b></a></div>");
  $("#LC_rt_"+id).click(editorHandler);   $("#LC_rt_"+id).click(editorHandler);
  }';   }';
     if ($dragmath_prefix ne '') {      if ($dragmath_prefix ne '') {
Line 1355  sub htmlareaselectactive { Line 1464  sub htmlareaselectactive {
  });   });
  $(".LC_richDefaultOn").each(function() {   $(".LC_richDefaultOn").each(function() {
  var id = $(this).attr("id");   var id = $(this).attr("id");
  $(this).before("<div><a href=\"#\" id=\"LC_rt_"+id+"\" title=\"Disable rich text formatting and edit in plain text\" class=\"LC_disable_rt\"><b>&laquo; Plain text</b></a></div>");   $(this).before("<div><a href=\"#\" id=\"LC_rt_"+id+"\" title=\"'.$lt{'plain_title'}.'\" class=\"LC_disable_rt\"><b>&laquo; '.$lt{'plain'}.'</b></a></div>");
  startRichEditor(id);   startRichEditor(id);
  $("#LC_rt_"+id).click(editorHandler);   $("#LC_rt_"+id).click(editorHandler);
  });   });
  $(".LC_richDefaultOff").each(function() {   $(".LC_richDefaultOff").each(function() {
  var id = $(this).attr("id");   var id = $(this).attr("id");
  $(this).before("<div><a href=\"#\" id=\"LC_rt_"+id+"\" title=\"Enable rich text formatting (bold, italic, etc.)\" class=\"LC_enable_rt\"><b>Rich formatting &raquo;</b></a></div>");   $(this).before("<div><a href=\"#\" id=\"LC_rt_"+id+"\" title=\"'.$lt{'rich_title'}.'\" class=\"LC_enable_rt\"><b>'.$lt{'rich'}.' &raquo;</b></a></div>");
  $("#LC_rt_"+id).click(editorHandler);   $("#LC_rt_"+id).click(editorHandler);
  });   });
   
Line 1396  sub htmlareaselectactive { Line 1505  sub htmlareaselectactive {
     #   is used to determine when the countdown timer turns red to warn the user      #   is used to determine when the countdown timer turns red to warn the user
     #   to think about submitting.      #   to think about submitting.
   
     my $dueDateLayout = &mt('Due in: {dn} {dl} {hnn}{sep}{mnn}{sep}{snn} [_1]',"<span id='submitearly'></span>");      my $dueDateLayout = &mt('Due in: {dn} {dl} {hnn}{sep}{mnn}{sep}{snn} [_1]',
                               "<span id='submitearly'></span>");
     my $early = '- <b>'.&mt('Submit Early').'</b>';      my $early = '- <b>'.&mt('Submit Early').'</b>';
     my $pastdue = '- <b>'.&mt('Past Due').'</b>';      my $pastdue = '- <b>'.&mt('Past Due').'</b>';
     $output .= <<JAVASCRIPT;      $output .= <<JAVASCRIPT;
Line 1487  JAVASCRIPT Line 1597  JAVASCRIPT
   
     }      }
     $output.="\nwindow.status='Activated Editfields';\n"      $output.="\nwindow.status='Activated Editfields';\n"
               .'// END LON-CAPA Internal -->'."\n"
             .'// ]]>'."\n"              .'// ]]>'."\n"
             .'</script>';              .'</script>';
     return $output;      return $output;
Line 1686  returns: nothing Line 1797  returns: nothing
         my $links;          my $links;
         if ((&show_return_link) && (!$CourseBreadcrumbs) && (ref($last) eq 'HASH')) {          if ((&show_return_link) && (!$CourseBreadcrumbs) && (ref($last) eq 'HASH')) {
             my $alttext = &mt('Go Back');              my $alttext = &mt('Go Back');
               my $hashref = { href => '/adm/flip?postdata=return:',
                               title => &mt('Back to most recent content resource'),
                               class => 'LC_menubuttons_link',
                             };
               if ($env{'request.noversionuri'} eq '/adm/searchcat') {
                   $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" />',
                             { href => '/adm/flip?postdata=return:',                               $hashref);
                               title => &mt('Back to most recent content resource'),  
                               class => 'LC_menubuttons_link',  
                             });  
             $links=&htmltag('li',$links);              $links=&htmltag('li',$links);
         }          }
         $links.= join "",           $links.= join "", 
Line 1760  returns: nothing Line 1875  returns: nothing
                              .$links                                .$links 
 ;  ;
         }          }
                   my $nav_and_tools = 0;
         &render_tools(\$links);          foreach my $item ('navigation','tools') {
         $links = &htmltag('div', $links,               if (ref($tools{$item}) eq 'ARRAY') {
                         { id => "LC_breadcrumbs" }) unless ($CourseBreadcrumbs) ;                  $nav_and_tools += scalar(@{$tools{$item}})
         &render_advtools(\$links);              }
           }
           if (($links ne '') || ($nav_and_tools)) {
               &render_tools(\$links);
               $links = &htmltag('div', $links, 
                                 { id => "LC_breadcrumbs" }) unless ($CourseBreadcrumbs) ;
           }
           my $adv_tools = 0;
           if (ref($tools{'advtools'}) eq 'ARRAY') {
               $adv_tools = scalar(@{$tools{'advtools'}});
           }
           if (($links ne '') || ($adv_tools)) {
               &render_advtools(\$links);
           }
   
         # Return the @Crumbs stack to what we started with          # Return the @Crumbs stack to what we started with
         push(@Crumbs,$last);          push(@Crumbs,$last);
Line 1894  returns: nothing Line 2022  returns: nothing
   
 sub docs_breadcrumbs {  sub docs_breadcrumbs {
     my ($allowed,$crstype,$contenteditor,$title,$precleared)=@_;      my ($allowed,$crstype,$contenteditor,$title,$precleared)=@_;
     my ($folderpath,@folders);      my ($folderpath,@folders,$supplementalflag);
     if ($env{'form.pagepath'}) {      @folders = split('&',$env{'form.folderpath'});
         @folders = split('&',$env{'form.pagepath'});      if ($env{'form.folderpath'} =~ /^supplemental/) {
     } else {          $supplementalflag = 1;
         @folders = split('&',$env{'form.folderpath'});  
     }      }
     my $plain='';      my $plain='';
       my $container = 'sequence';
     my ($randompick,$isencrypted,$ishidden,$is_random_order) = (-1,0,0,0);      my ($randompick,$isencrypted,$ishidden,$is_random_order) = (-1,0,0,0);
     my @docs_crumbs;      my @docs_crumbs;
     while (@folders) {      while (@folders) {
Line 1916  sub docs_breadcrumbs { Line 2044  sub docs_breadcrumbs {
         }          }
         $url .= &escape($folderpath);          $url .= &escape($folderpath);
         my $name=&unescape($foldername);          my $name=&unescape($foldername);
 # each of randompick number, hidden, encrypted, random order are   # each of randompick number, hidden, encrypted, random order, is_page 
 # appended with ":"s to the foldername  # are appended with ":"s to the foldername
         $name=~s/\:(\d*)\:(\w*)\:(\w*):(\d*)$//;          $name=~s/\:(\d*)\:(\w*)\:(\w*):(\d*)\:?(\d*)$//;
         if ($contenteditor) {           unless ($supplementalflag) {
             if ($1 ne '') {              if ($contenteditor) { 
                 $randompick=$1;                  if ($1 ne '') {
             } else {                      $randompick=$1;
                $randompick=-1;                  } else {
                       $randompick=-1;
                   }
                   if ($2) { $ishidden=1; }
                   if ($3) { $isencrypted=1; }
                   if ($4 ne '') { $is_random_order = 1; }
                   if ($5 == 1) {$container = 'page'; }
             }              }
             if ($2) { $ishidden=1; }  
             if ($3) { $isencrypted=1; }  
             if ($4 ne '') { $is_random_order = 1; }  
         }          }
         if ($folder eq 'supplemental') {          if ($folder eq 'supplemental') {
             $name = &mt('Supplemental '.$crstype.' Contents');              $name = &mt('Supplemental Content');
         }          }
         if ($contenteditor) {          if ($contenteditor) {
             $plain.=$name.' &gt; ';              $plain.=$name.' &gt; ';
Line 1964  sub docs_breadcrumbs { Line 2095  sub docs_breadcrumbs {
         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,
                              $is_random_order);                               $is_random_order,$container);
     } else {      } else {
         return \@docs_crumbs;          return \@docs_crumbs;
     }      }
Line 2197  sub course_selection { Line 2328  sub course_selection {
   
     my $courseform='<b>'.&Apache::loncommon::selectcourse_link      my $courseform='<b>'.&Apache::loncommon::selectcourse_link
                      ($formname,'pickcourse','pickdomain','coursedesc','',1,$crstype).'</b>';                       ($formname,'pickcourse','pickdomain','coursedesc','',1,$crstype).'</b>';
         $output .= '<input type="radio" name="coursepick" value="all" onclick="coursePick(this.form)" />'.$allcrs.'<br />';          $output .= '<label><input type="radio" name="coursepick" value="all" onclick="coursePick(this.form)" />'.$allcrs.'</label><br />';
     if ($totcodes > 0) {      if ($totcodes > 0) {
         my $numtitles = @$codetitles;          my $numtitles = @$codetitles;
         if ($numtitles > 0) {          if ($numtitles > 0) {
             $output .= '<input type="radio" name="coursepick" value="category" onclick="coursePick(this.form);alert('."'".&mt('Choose categories, from left to right')."'".')" />'.&mt('Pick courses by category:').' <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".
                ' <option value="-1" />Select'."\n";                 ' <option value="-1" />Select'."\n";
             my @items = ();              my @items = ();
             my @longitems = ();              my @longitems = ();
Line 2234  sub course_selection { Line 2365  sub course_selection {
             for (my $i=1; $i<$numtitles; $i++) {              for (my $i=1; $i<$numtitles; $i++) {
                 $output .= '<td>'.$$codetitles[$i].'<br />'."\n".                  $output .= '<td>'.$$codetitles[$i].'<br />'."\n".
                           '<select name="'.$standardnames->[$i].                            '<select name="'.$standardnames->[$i].
                           '" onChange="courseSet('."'$$codetitles[$i]'".')">'."\n".                            '" onchange="courseSet('."'$$codetitles[$i]'".')">'."\n".
                           '<option value="-1">&lt;-Pick '.$$codetitles[$i-1].'</option>'."\n".                            '<option value="-1">&lt;-Pick '.$$codetitles[$i-1].'</option>'."\n".
                           '</select>'."\n".                            '</select>'."\n".
                           '</td>';                            '</td>';
Line 2242  sub course_selection { Line 2373  sub course_selection {
             $output .= '</tr></table><br />';              $output .= '</tr></table><br />';
         }          }
     }      }
     $output .= '<input type="radio" name="coursepick" value="specific" onclick="coursePick(this.form);opencrsbrowser('."'".$formname."','dccourse','dcdomain','coursedesc','','1','$crstype'".')" />'.$pickspec.' '.$courseform.'&nbsp;&nbsp;<input type="text" value="0" size="4" name="coursetotal" /><input type="hidden" name="courselist" value="" />selected.<br />'."\n";      $output .=
           '<label><input type="radio" name="coursepick" value="specific"'
          .' onclick="coursePick(this.form);opencrsbrowser('."'".$formname."','dccourse','dcdomain','coursedesc','','1','$crstype'".')" />'
          .$pickspec.'</label>'
          .' '.$courseform.'&nbsp;&nbsp;'
          .&mt('[_1] selected.',
                   '<input type="text" value="0" size="4" name="coursetotal" readonly="readonly" />'
                  .'<input type="hidden" name="courselist" value="" />')
          .'<br />'."\n";
     return $output;      return $output;
 }  }
   
Line 2363  sub resource_info_box { Line 2502  sub resource_info_box {
     return $return;      return $return;
 }  }
   
   # display_usage
   # 
   # Generates a div containing a block, filled to show percentage of current quota used
   #
   # Quotas available for user portfolios, group portfolios, authoring spaces, and course
   # content stored directly within a course (i.e., excluding published content).
   #
   
   sub display_usage {
       my ($current_disk_usage,$disk_quota) = @_;
       my $usage = $current_disk_usage/1000;
       my $quota = $disk_quota/1000;
       my $percent;
       if ($disk_quota == 0) {
           $percent = 100.0;
       } else {
           $percent = 100*($current_disk_usage/$disk_quota);
       }
       $usage = sprintf("%.2f",$usage);
       $quota = sprintf("%.2f",$quota);
       $percent = sprintf("%.0f",$percent);
       my ($color,$cssclass);
       if ($percent <= 60) {
           $color = '#00A000';
       } elsif ($percent > 60 && $percent < 90) {
           $color = '#FFD300';
           $cssclass = 'class="LC_warning"';
       } elsif( $percent >= 90) {
           $color = '#FF0000';
           $cssclass = 'class="LC_error"';
       }
       my $prog_width = $percent;
       if ($prog_width > 100) {
           $prog_width = 100;
       }
       return '
     <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: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>'."\n".
   '  </div>';
   }
   
 ##############################################  ##############################################
 ##############################################  ##############################################
   
Line 2851  ENDSCRIPT Line 3033  ENDSCRIPT
 ##############################################  ##############################################
   
 sub resize_scrollbox_js {  sub resize_scrollbox_js {
     my ($context,$tabidstr) = @_;      my ($context,$tabidstr,$tid) = @_;
     my (%names,$paddingwfrac,$offsetwfrac,$offsetv,$minw,$minv);      my (%names,$paddingwfrac,$offsetwfrac,$offsetv,$minw,$minv);
     if ($context eq 'docs') {      if ($context eq 'docs') {
         %names = (          %names = (
Line 2861  sub resize_scrollbox_js { Line 3043  sub resize_scrollbox_js {
                    scroll => 'contentscroll',                     scroll => 'contentscroll',
                    boxh   => 'contenteditor',                     boxh   => 'contenteditor',
                  );                   );
         $paddingwfrac = 0.09;           $paddingwfrac = 0.09;
         $offsetwfrac = 0.015;          $offsetwfrac = 0.015;
         $offsetv = 20;          $offsetv = 20;
         $minw = 250;          $minw = 250;
Line 2887  window.onresize=callResize; Line 3069  window.onresize=callResize;
   
 ';  ';
     if ($context eq 'docs') {      if ($context eq 'docs') {
         $output .= '          if ($env{'form.active'}) {
 var activeTab;              $output .= "\nvar activeTab = '$env{'form.active'}$tid';\n";
 ';          } else {
               $output .= "\nvar activeTab = '';\n";
           }
     }      }
     $output .=  <<"FIRST";      $output .=  <<"FIRST";
   
Line 2900  function resize_scrollbox(scrollboxname, Line 3084  function resize_scrollbox(scrollboxname,
     var scrolltableid = 'table_'+scrollboxname;      var scrolltableid = 'table_'+scrollboxname;
     var scrollbox;      var scrollbox;
     var scrolltable;      var scrolltable;
       var ismobile = '$env{'browser.mobile'}';
   
     if (document.getElementById("$names{'boxw'}") == null) {      if (document.getElementById("$names{'boxw'}") == null) {
         return;          return;
Line 2936  FIRST Line 3121  FIRST
     }      }
     $output .= <<"SECOND";      $output .= <<"SECOND";
     var listwchange;      var listwchange;
       var scrollchange;
     if (chkw == 1) {      if (chkw == 1) {
         var boxw = document.getElementById("$names{'boxw'}").offsetWidth;          var boxw = document.getElementById("$names{'boxw'}").offsetWidth;
         var itemw;          var itemw;
Line 2947  FIRST Line 3133  FIRST
   
         var scrollboxw = scrollbox.offsetWidth;          var scrollboxw = scrollbox.offsetWidth;
         var scrollboxscrollw = scrollbox.scrollWidth;          var scrollboxscrollw = scrollbox.scrollWidth;
           var scrollstart = scrollboxw;
   
         var offsetw = parseInt(vpw * $offsetwfrac);          var offsetw = parseInt(vpw * $offsetwfrac);
         var paddingw = parseInt(vpw * $paddingwfrac);          var paddingw = parseInt(vpw * $paddingwfrac);
Line 3021  PARAMSONE Line 3208  PARAMSONE
             }              }
         }          }
   
           if (newscrollboxw != scrollboxw) {
               scrollchange = 1;
           }
   
         if (itemid.offsetWidth != itemwstart) {          if (itemid.offsetWidth != itemwstart) {
             listwchange = 1;              listwchange = 1;
         }          }
     }      }
     if ((chkh == 1) || (listwchange)) {      if ((chkh == 1) || (listwchange)) {
           var itemid = document.getElementById("$names{'item'}");
           if (itemid != null) {
               itemh = itemid.offsetHeight;
           }
         var primaryheight = document.getElementById('LC_nav_bar').offsetHeight;          var primaryheight = document.getElementById('LC_nav_bar').offsetHeight;
         var secondaryheight = document.getElementById('LC_secondary_menu').offsetHeight;          var secondaryheight;
           if (document.getElementById('LC_secondary_menu') != null) { 
               secondaryheight = document.getElementById('LC_secondary_menu').offsetHeight;
           }
         var crumbsheight = document.getElementById('LC_breadcrumbs').offsetHeight;          var crumbsheight = document.getElementById('LC_breadcrumbs').offsetHeight;
         var dccidheight = 0;          var dccidheight = 0;
         if (document.getElementById('dccid') != null) {          if (document.getElementById('dccid') != null) {
Line 3043  PARAMSONE Line 3241  PARAMSONE
   
         var scrollboxheight = scrollbox.offsetHeight;          var scrollboxheight = scrollbox.offsetHeight;
         var scrollboxscrollheight = scrollbox.scrollHeight;          var scrollboxscrollheight = scrollbox.scrollHeight;
           var scrollboxh = scrollboxheight;
   
         var minvscrollbox = $minv;          var minvscrollbox = $minv;
         var offsetv = $offsetv;          var offsetv = $offsetv;
Line 3073  PARAMSONE Line 3272  PARAMSONE
                 scrollbox.style.height = newscrollheight+"px";                  scrollbox.style.height = newscrollheight+"px";
             }              }
         }          }
           var newscrollboxh = scrollbox.offsetHeight;
           if (scrollboxh != newscrollboxh) {
               scrollchange = 1;
           }
       }
       if (ismobile && scrollchange) {
           \$("#div_$names{'scroll'}").getNiceScroll().onResize();
     }      }
     return;      return;
 }  }
Line 3118  ENDUTILITY Line 3324  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,$idx,$suppurl) = @_;          $title,$idx,$suppurl,$todocs) = @_;
     my $jscall;      my $jscall;
     if ($switchserver) {      if ($switchserver) {
         if ($home) {          if ($home) {
Line 3135  sub jump_to_editres { Line 3341  sub jump_to_editres {
             if ($forcereg) {              if ($forcereg) {
                 $cfile .= '&amp;register=1';                  $cfile .= '&amp;register=1';
             }              }
             $jscall = "need_switchserver('$cfile');";              $jscall = "need_switchserver('".&Apache::loncommon::escape_single($cfile)."');";
         }          }
     } else {      } else {
         unless ($cfile =~ m{^/priv/}) {          unless ($cfile =~ m{^/priv/}) {
Line 3162  sub jump_to_editres { Line 3368  sub jump_to_editres {
             if ($forcereg) {              if ($forcereg) {
                 $cfile .= (($cfile=~/\?/)?'&amp;':'?').'register=1';                  $cfile .= (($cfile=~/\?/)?'&amp;':'?').'register=1';
             }              }
               if ($todocs) {
                  $cfile .= (($cfile=~/\?/)?'&amp;':'?').'todocs=1';
               }
         }          }
         $jscall = "go('$cfile')";          $jscall = "go('".&Apache::loncommon::escape_single($cfile)."')";
     }      }
     return $jscall;      return $jscall;
 }  }
Line 3230  END Line 3439  END
 sub htmltag{  sub htmltag{
     return      return
         qq|<$_[0]|          qq|<$_[0]|
         . join( '', map { qq| $_="${$_[2]}{$_}"| if ${$_[2]}{$_} } keys %{ $_[2] } )          . join( '', map { qq| $_="${$_[2]}{$_}"| if ${$_[2]}{$_} } keys(%{ $_[2] }) )
         . ($_[1] ? qq|>$_[1]</$_[0]>| : qq|/>|). "\n";          . ($_[1] ? qq|>$_[1]</$_[0]>| : qq|/>|). "\n";
 };  };
   
Line 3543  highlighted and set to the value 'Action Line 3752  highlighted and set to the value 'Action
   
 The actionlist is used to offer contextual actions, mostly at the bottom  The actionlist is used to offer contextual actions, mostly at the bottom
 of a page, on which the outcome of an processed action is shown,  of a page, on which the outcome of an processed action is shown,
 e.g. a file operation in Construction Space.  e.g. a file operation in Authoring Space.
   
 =over  =over
   

Removed from v.1.335  
changed lines
  Added in v.1.359


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