Diff for /loncom/interface/lonhtmlcommon.pm between versions 1.242 and 1.257

version 1.242, 2009/11/10 13:58:55 version 1.257, 2009/12/22 17:27:28
Line 62  use Apache::lonlocal; Line 62  use Apache::lonlocal;
 use Apache::lonnet;  use Apache::lonnet;
 use LONCAPA;  use LONCAPA;
   
   
   sub coursepreflink {
      my ($text,$category)=@_;
      if (&Apache::lonnet::allowed('opa',$env{'request.course.id'})) {
         return '<a href="/adm/courseprefs?phase=display&actions='.$category.'">'.$text.'</a>';
      } else {
         return '';
      }
   }
   
   sub raw_href_to_link {
      my ($message)=@_;
      $message=~s/(https?\:\/\/[^\s\'\"]+)(\s|$)/<a href="$1"><tt>$1<\/tt><\/a>$2/gi;
      return $message;
   }
   
 ##############################################  ##############################################
 ##############################################  ##############################################
   
Line 111  sub dragmath_button { Line 127  sub dragmath_button {
     }      }
     my $buttontext=&mt('Edit Math');      my $buttontext=&mt('Edit Math');
     return <<ENDDRAGMATH;      return <<ENDDRAGMATH;
                 <input type="button" value="$buttontext", onclick="javascript:mathedit('$textarea',document)" />$help_text                  <input type="button" value="$buttontext" onclick="javascript:mathedit('$textarea',document)" />$help_text
 ENDDRAGMATH  ENDDRAGMATH
 }  }
   
Line 222  sub select_recent { Line 238  sub select_recent {
  unless ($value =~/^error\:/) {   unless ($value =~/^error\:/) {
     my $escaped = &Apache::loncommon::escape_url($value);      my $escaped = &Apache::loncommon::escape_url($value);
     &Apache::loncommon::inhibit_menu_check(\$escaped);      &Apache::loncommon::inhibit_menu_check(\$escaped);
               if ($area eq 'residx') {
                   next if ((!&Apache::lonnet::allowed('bre',$value)) && (!&Apache::lonnet::allowed('bro',$value)));
               }
     $return.="\n<option value='$escaped'>".      $return.="\n<option value='$escaped'>".
  &unescape((split(/\&/,$recent{$value}))[1]).   &unescape((split(/\&/,$recent{$value}))[1]).
  '</option>';   '</option>';
Line 364  dname_hour, dname_min, and dname_sec. Line 383  dname_hour, dname_min, and dname_sec.
   
 The current setting for this time parameter.  A unix format time  The current setting for this time parameter.  A unix format time
 (time in seconds since the beginning of Jan 1st, 1970, GMT.    (time in seconds since the beginning of Jan 1st, 1970, GMT.  
 An undefined value is taken to indicate the value is the current time.  An undefined value is taken to indicate the value is the current time
   unless it is requested to leave it empty. See $includeempty.
 Also, to be explicit, a value of 'now' also indicates the current time.  Also, to be explicit, a value of 'now' also indicates the current time.
   
 =item $special  =item $special
Line 374  the date_setter.  See lonparmset for exa Line 394  the date_setter.  See lonparmset for exa
   
 =item $includeempty   =item $includeempty 
   
   If it is set (true) and no date/time value is provided,
   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.
Line 393  sub date_setter { Line 416  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) = @_;
     my $now = time;      my $now = time;
     my $wasdefined=1;  
       my $tzname;
       my ($sec,$min,$hour,$mday,$month,$year) = ('', '', undef,''.''.'');
       #other potentially useful values:    wkday,yrday,is_daylight_savings
   
     if (! defined($state) || $state ne 'disabled') {      if (! defined($state) || $state ne 'disabled') {
         $state = '';          $state = '';
     }      }
Line 401  sub date_setter { Line 428  sub date_setter {
         $no_hh_mm_ss = 0;          $no_hh_mm_ss = 0;
     }      }
     if ($currentvalue eq 'now') {      if ($currentvalue eq 'now') {
  $currentvalue = $now;          $currentvalue = $now;
     }      }
     if ((!defined($currentvalue)) || ($currentvalue eq '')) {      
  $wasdefined=0;      # Default value: Set empty date field to current time
  if ($includeempty) {      # unless empty inclusion is requested
     $currentvalue = 0;      if ((!$includeempty) && (!$currentvalue)) {
  } else {          $currentvalue = $now;
     $currentvalue = $now;  
  }  
     }      }
     # other potentially useful values:     wkday,yrday,is_daylight_savings      # Do we have a date? Split it!
     my $tzname;  
     my ($sec,$min,$hour,$mday,$month,$year)=('','',undef,'','','');  
     if ($currentvalue) {      if ($currentvalue) {
         ($tzname,$sec,$min,$hour,$mday,$month,$year) = &get_timedates($currentvalue);    ($tzname,$sec,$min,$hour,$mday,$month,$year) = &get_timedates($currentvalue);
     }  
     unless ($wasdefined) {          #No values provided for hour, min, sec? Use default 0
         ($tzname,$sec,$min,$hour,$mday,$month,$year) = &get_timedates($now);          if (($defhour) || ($defmin) || ($defsec)) {
  if (($defhour) || ($defmin) || ($defsec)) {              $sec  = ($defsec  ? $defsec  : 0);
     $sec=($defsec?$defsec:0);              $min  = ($defmin  ? $defmin  : 0);
     $min=($defmin?$defmin:0);              $hour = ($defhour ? $defhour : 0);
     $hour=($defhour?$defhour:0);          }
  } elsif (!$includeempty) {  
     $sec=0;  
     $min=0;  
     $hour=0;  
  }  
     }      }
     my $result = "\n<!-- $dname date setting form -->\n";      my $result = "\n<!-- $dname date setting form -->\n";
     $result .= <<ENDJS;      $result .= <<ENDJS;
Line 1117  sub r_print { Line 1135  sub r_print {
 # ------------------------------------------------------- Puts directory header  # ------------------------------------------------------- Puts directory header
   
 sub crumbs {  sub crumbs {
     my ($uri,$target,$prefix,$form,$size,$noformat,$skiplast)=@_;      my ($uri,$target,$prefix,$form,$skiplast)=@_;
     if (! defined($size)) {  
         $size = '+2';  
     }  
     if ($target) {      if ($target) {
         $target = ' target="'.          $target = ' target="'.
                   &Apache::loncommon::escape_single($target).'"';                    &Apache::loncommon::escape_single($target).'"';
     }      }
     my $output='';      my $output='<span class="LC_filename">';
     unless ($noformat) { $output.='<br /><tt><b>'; }      $output.=$prefix.'/';
     $output.='<font size="'.$size.'">'.$prefix.'/';      if (($env{'user.adv'}) || ($env{'user.author'})) {
     if (($env{'user.adv'}) | ($env{'user.author'})) {          my $path=$prefix.'/';
  my $path=$prefix.'/';          foreach my $dir (split('/',$uri)) {
  foreach my $dir (split('/',$uri)) {  
             if (! $dir) { next; }              if (! $dir) { next; }
             $path .= $dir;              $path .= $dir;
     if ($path eq $uri) {              if ($path eq $uri) {
  if ($skiplast) {                  if ($skiplast) {
     $output.=$dir;                      $output.=$dir;
                     last;                      last;
  }                   } 
     } else {              } else {
  $path.='/';                   $path.='/'; 
     }                  }
             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" $target>$dir</a>/};                  $output.=qq{<a href="$href"$target>$dir</a>/};
     } else {              } else {
         $output.=qq{<a href="$href_path" $target>$dir</a>/};                  $output.=qq{<a href="$href_path"$target>$dir</a>/};
     }              }
  }          }
     } else {      } else {
  foreach my $dir (split('/',$uri)) {          foreach my $dir (split('/',$uri)) {
             if (! $dir) { next; }              if (! $dir) { next; }
     $output.=$dir.'/';              $output.=$dir.'/';
  }          }
     }      }
     if ($uri !~ m|/$|) { $output=~s|/$||; }      if ($uri !~ m|/$|) { $output=~s|/$||; }
     return $output.'</font>'.($noformat?'':'</b></tt><br />');      $output.='</span>';
   
       return $output;
 }  }
   
 # --------------------- A function that generates a window for the spellchecker  # --------------------- A function that generates a window for the spellchecker
Line 1224  ENDLINK Line 1240  ENDLINK
 }  }
   
 sub htmlareaheaders {  sub htmlareaheaders {
     return if (&htmlareablocked());   my $s="";
     return if (!&htmlareabrowser());   if (!&htmlareablocked() && &htmlareabrowser()) {
     return (<<ENDHEADERS);   $s.=(<<ENDEDITOR);
 <script type="text/javascript" src="/fckeditor/fckeditor.js"></script>  <script type="text/javascript" src="/fckeditor/fckeditor.js"></script>
 ENDHEADERS  <script type="text/javascript" src="/ckeditor/ckeditor.js"></script>
   ENDEDITOR
    }
       $s.=(<<ENDJQUERY);
   <script type="text/javascript" src="/adm/jQuery/js/jquery-1.3.2.min.js"></script>
   <script type="text/javascript" src="/adm/jQuery/js/jquery-ui-1.7.2.custom.min.js"></script>
   ENDJQUERY
    return $s;
 }  }
   
 # ----------------------------------------------------------------- Preferences  # ----------------------------------------------------------------- Preferences
Line 1267  sub htmlareaselectactive { Line 1290  sub htmlareaselectactive {
     my $output='<script type="text/javascript" defer="1">'."\n"      my $output='<script type="text/javascript" defer="1">'."\n"
               .'// <![CDATA['."\n";                .'// <![CDATA['."\n";
     my $lang = &htmlarea_lang();      my $lang = &htmlarea_lang();
       $output.='
       
       function containsBlockHtml(id) {
    var re = $("#"+id).html().search(/(?:\&lt\;|\<)(br|h1|h2|h3|h4|h5|h6|p|ol|ul|table|pre|address|blockquote|center|div)[\s]*((?:\/[\s]*(?:\&gt\;|\>)|(?:\&gt\;|\>)[\s\S]*(?:\&lt\;|\<)\/[\s]*\1[\s]*\(?:\&gt\;|\>))/im);
       return (re >= 0);
       }
       
       function startRichEditor(id) {
       CKEDITOR.replace(id, 
       {
       customConfig: "/ckeditor/loncapaconfig.js",
       }
       );
       }
       
       function destroyRichEditor(id) {
       CKEDITOR.instances[id].destroy();
       }
       
       function editorHandler(event) {
       var rawid = $(this).attr("id");
       var id = new RegExp("LC_rt_(.*)").exec(rawid)[1]
       event.preventDefault();
       if ($(this).hasClass("LC_enable_rt")) {
       startRichEditor(id);
    $("#LC_rt_"+id).html("<b>&laquo; Plain text</b>");
    $("#LC_rt_"+id).attr("title", "Disable rich text formatting and edit in plain text");
    $("#LC_rt_"+id).addClass("LC_disable_rt");
    $("#LC_rt_"+id).removeClass("LC_enable_rt");
       } else {
    destroyRichEditor(id);
    $("#LC_rt_"+id).html("<b>Rich formatting &raquo;</b>");
    $("#LC_rt_"+id).attr("title", "Enable rich text formatting (bold, italic, etc.)");
    $("#LC_rt_"+id).addClass("LC_enable_rt");
    $("#LC_rt_"+id).removeClass("LC_disable_rt");
    }
    }
       
       $(document).ready(function(){
    $(".LC_richAlwaysOn").each(function() {
    startRichEditor($(this).attr("id"));
    });
    $(".LC_richDetectHtml").each(function() {
    var id = $(this).attr("id");
    if(containsBlockHtml(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>");
    startRichEditor(id);
    $("#LC_rt_"+id).click(editorHandler);
    }
    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>");
    $("#LC_rt_"+id).click(editorHandler);
    }
    });
    $(".LC_richDefaultOn").each(function() {
    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>");
    startRichEditor(id);
    $("#LC_rt_"+id).click(editorHandler);
    });
    $(".LC_richDefaultOff").each(function() {
    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>");
    $("#LC_rt_"+id).click(editorHandler);
    });
   
    });
   ';
       
     foreach my $field (@fields) {      foreach my $field (@fields) {
  $output.="   $output.='
   
 {  {
     var oFCKeditor = new FCKeditor('$field');   $(document).ready(function() {
     oFCKeditor.Config['CustomConfigurationsPath'] =    if (!($("#'.$field.'").hasClass("LC_richAlwaysOn"))) {
  '/fckeditor/loncapaconfig.js';       if (!($("#'.$field.'").hasClass("LC_richAlwaysOff"))) {
     oFCKeditor.ReplaceTextarea();   if (!($("#'.$field.'").hasClass("LC_richDetectHtml"))) {
     oFCKeditor.Config['AutoDetectLanguage'] = false;   if (!($("#'.$field.'").hasClass("LC_richDefaultOn"))) {
     oFCKeditor.Config['DefaultLanguage'] = '$lang';   if (!($("#'.$field.'").hasClass("LC_richDefaultOff"))) {
 }";   var oFCKeditor = new FCKeditor("'.$field.'");
    oFCKeditor.Config["CustomConfigurationsPath"] = 
    "/fckeditor/loncapaconfig.js";    
    oFCKeditor.ReplaceTextarea();
    oFCKeditor.Config["AutoDetectLanguage"] = false;
    oFCKeditor.Config["DefaultLanguage"] = "'.$lang.'";
    }
    }
    }
    }
    }
       });
   }';
     }      }
     $output.="\nwindow.status='Activated Editfields';\n"      $output.="\nwindow.status='Activated Editfields';\n"
             .'// ]]>'."\n"              .'// ]]>'."\n"
Line 1473  returns: nothing Line 1578  returns: nothing
         push @{$tools{$category}}, $html;          push @{$tools{$category}}, $html;
     }      }
   
       sub clear_breadcrumb_tools {
           undef(%tools);
       }
   
     sub add_tools {      sub add_tools {
         my ($links) = @_;          my ($links) = @_;
         return unless defined %tools;          return unless defined %tools;
Line 1487  returns: nothing Line 1596  returns: nothing
                 $item =~ s/<span(.*?)\/span>//;                  $item =~ s/<span(.*?)\/span>//;
                 $html .= "<li>$item</li>";                  $html .= "<li>$item</li>";
             }              }
             $html .= '</li></ul>';              $html .= '</ul></li>';
             if ($category eq 'A') { $html .= "<li>$$links</li>"; }              if ($category eq 'A') { $html .= "<li>$$links</li>"; }
         }          }
         $$links = $html.'</ul>';          $$links = $html.'</ul>';
Line 1599  END Line 1708  END
 }  }
   
 sub row_title {  sub row_title {
     my ($title,$css_title_class,$css_value_class) = @_;      my ($title,$css_title_class,$css_value_class, $css_value_furtherAttributes) = @_;
     $row_count[0]++;      $row_count[0]++;
     my $css_class = ($row_count[0] % 2)?'LC_odd_row':'LC_even_row';      my $css_class = ($row_count[0] % 2)?'LC_odd_row':'LC_even_row';
     $css_title_class ||= 'LC_pick_box_title';      $css_title_class ||= 'LC_pick_box_title';
Line 1611  sub row_title { Line 1720  sub row_title {
         $title .= ':';          $title .= ':';
     }      }
     my $output = <<"ENDONE";      my $output = <<"ENDONE";
            <tr class="LC_pick_box_row">             <tr class="LC_pick_box_row" $css_value_furtherAttributes> 
             <td $css_title_class>              <td $css_title_class>
        $title         $title
             </td>              </td>
Line 1867  sub course_custom_roles { Line 1976  sub course_custom_roles {
   
 # topic_bar  # topic_bar
 #  #
 # Generates a div containing an (optional) numbered (static) image followed by a   # Generates a div containing an (optional) number with a white background followed by a 
 # title with a background color defined in the corresponding CSS: LC_topic_bar  # title with a background color defined in the corresponding CSS: LC_topic_bar
 # Inputs:  # Inputs:
 # 1. number to display (corresponding static image should exist).  # 1. number to display.
 #    img tag will be included if arg is an integer in the range 1 to 9.   #    If input for number is empty only the title will be displayed. 
 # 2. title text to display.  # 2. title text to display.
 # Outputs - a scalar containing html mark-up for the div.  # Outputs - a scalar containing html mark-up for the div.
   
 sub topic_bar {  sub topic_bar {
     my ($imgnum,$title) = @_;      my ($num,$title) = @_;
     my $imgtag;      my $number = '';
     if ($imgnum =~ /^[1-9]$/) {      if ($num ne '') {
         $imgtag = '<img src="/res/adm/pages/bl_step'.$imgnum.'.gif"'.           $number = '<span>'.$num.'</span>';
                   ' alt="'.&mt('Step [_1]',$imgnum).'" /> ';  
     }      }
     return '<div class="LC_topic_bar">'.$imgtag.$title.'</div>';      return '<div class="LC_topic_bar">'.$number.$title.'</div>';
 }  }
   
 ##############################################  ##############################################
Line 2343  Returns: HTML code with function list st Line 2451  Returns: HTML code with function list st
 sub start_funclist {  sub start_funclist {
     my($legendtext)=@_;      my($legendtext)=@_;
     $legendtext=&mt('Functions') if !$legendtext;      $legendtext=&mt('Functions') if !$legendtext;
     return "<fieldset>\n<legend>$legendtext</legend>\n"      return '<ul class="LC_funclist"><li style="font-weight:bold; margin-left:0.8em;">'.$legendtext.'</li>'."\n";
           .'<ul class="LC_funclist">'."\n";  
 }  }
   
   
Line 2402  Returns: HTML code with function list en Line 2509  Returns: HTML code with function list en
 ##############################################  ##############################################
   
 sub end_funclist {  sub end_funclist {
     my($r)=@_;      return "</ul>\n";
     return "</ul>\n</fieldset>\n";  
 }  }
   
 1;  1;

Removed from v.1.242  
changed lines
  Added in v.1.257


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