Diff for /loncom/interface/lonhtmlcommon.pm between versions 1.345 and 1.358.2.1

version 1.345, 2013/05/21 19:30:11 version 1.358.2.1, 2015/05/11 17:18:36
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 476  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 indiciates the form elements are not disabled.   Defaults to empty, which indicates 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 490  The method used to restrict user input w Line 525  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_hh_mm_ss,$defhour,$defmin,$defsec,$nolink,$no_mm_ss,$no_ss) = @_;
     my $now = time;      my $now = time;
   
     my $tzname;      my $tzname;
Line 643  ENDJS Line 678  ENDJS
         $result .= &mt('[_1] [_2] [_3] ',          $result .= &mt('[_1] [_2] [_3] ',
                        $monthselector,$dayselector,$yearselector).                         $monthselector,$dayselector,$yearselector).
                    $tzone;                     $tzone;
         if (!$nolink) {      } elsif ($no_mm_ss) {
             $result .= &mt('[_1]Select Date[_2]',$cal_link,'</a>');          $result .= &mt('[_1] [_2] [_3] [_4]',
         }                        $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) {      }
             $result .= &mt('[_1]Select Date[_2]',$cal_link,'</a>');      if (!$nolink) {
         }          $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 1221  ENDEDITOR Line 1263  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 1259  sub htmlareaselectactive { Line 1302  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 1498  JAVASCRIPT Line 1542  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 1697  returns: nothing Line 1742  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 2231  sub course_selection { Line 2280  sub course_selection {
             $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 .= '<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 2261  sub course_selection { Line 2310  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 2398  sub resource_info_box { Line 2447  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 2886  ENDSCRIPT Line 2978  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 2896  sub resize_scrollbox_js { Line 2988  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 2922  window.onresize=callResize; Line 3014  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 2935  function resize_scrollbox(scrollboxname, Line 3029  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 2971  FIRST Line 3066  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 2982  FIRST Line 3078  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 3056  PARAMSONE Line 3153  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;          var secondaryheight;
         if (document.getElementById('LC_secondary_menu') != null) {           if (document.getElementById('LC_secondary_menu') != null) { 
Line 3081  PARAMSONE Line 3186  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 3111  PARAMSONE Line 3217  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 3173  sub jump_to_editres { Line 3286  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 3204  sub jump_to_editres { Line 3317  sub jump_to_editres {
                $cfile .= (($cfile=~/\?/)?'&amp;':'?').'todocs=1';                 $cfile .= (($cfile=~/\?/)?'&amp;':'?').'todocs=1';
             }              }
         }          }
         $jscall = "go('$cfile')";          $jscall = "go('".&Apache::loncommon::escape_single($cfile)."')";
     }      }
     return $jscall;      return $jscall;
 }  }
Line 3271  END Line 3384  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 3534  add_item_funclist Line 3647  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 3577  sub funclist_from_array { Line 3691  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 3584  highlighted and set to the value 'Action Line 3700  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
   
Line 3594  A reference to the array containing text Line 3710  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.345  
changed lines
  Added in v.1.358.2.1


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