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

version 1.257, 2009/12/22 17:27:28 version 1.271, 2010/04/13 10:21:29
Line 66  use LONCAPA; Line 66  use LONCAPA;
 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'})) {
       return '<a href="/adm/courseprefs?phase=display&actions='.$category.'">'.$text.'</a>';        return '<a href="'.&HTML::Entities::encode("/adm/courseprefs?phase=display&actions=$category",'<>&"').'">'.$text.'</a>';
    } else {     } else {
       return '';        return '';
    }     }
Line 74  sub coursepreflink { Line 74  sub coursepreflink {
   
 sub raw_href_to_link {  sub raw_href_to_link {
    my ($message)=@_;     my ($message)=@_;
    $message=~s/(https?\:\/\/[^\s\'\"]+)(\s|$)/<a href="$1"><tt>$1<\/tt><\/a>$2/gi;     $message=~s/(https?\:\/\/[^\s\'\"\<]+)([\s\<]|$)/<a href="$1"><tt>$1<\/tt><\/a>$2/gi;
    return $message;     return $message;
 }  }
   
 ##############################################  ##############################################
 ##############################################  ##############################################
   
 =pod  
   
 =item confirm_success  =item confirm_success
   
 Successful completion of an operation message  Successful completion of an operation message
Line 92  Successful completion of an operation me Line 90  Successful completion of an operation me
 sub confirm_success {  sub confirm_success {
    my ($message,$failure)=@_;     my ($message,$failure)=@_;
    if ($failure) {     if ($failure) {
       return '<span class="LC_error">'."\n"        return '<span class="LC_error" style="font-size: inherit;">'."\n"
             .'<img src="/adm/lonIcons/navmap.wrong.gif" alt="'.&mt('Error').'" /> '."\n"              .'<img src="/adm/lonIcons/navmap.wrong.gif" alt="'.&mt('Error').'" /> '."\n"
             .$message."\n"              .$message."\n"
             .'</span>'."\n";              .'</span>'."\n";
Line 139  ENDDRAGMATH Line 137  ENDDRAGMATH
   
 Javascript used to open pop-up window containing dragmath applet which   Javascript used to open pop-up window containing dragmath applet which 
 can be used to paste LaTeX into a textarea.  can be used to paste LaTeX into a textarea.
    
 =cut  =cut
   
 sub dragmath_js {  sub dragmath_js {
Line 1064  sub Increment_PrgWin { Line 1061  sub Increment_PrgWin {
     #       # 
     my $str;      my $str;
     if ($min == 0 && $sec > 1) {      if ($min == 0 && $sec > 1) {
         $str = '[_2] seconds';          $str = '[_1] seconds';
     } elsif ($min == 1 && $sec > 1) {      } elsif ($min == 1 && $sec > 1) {
         $str = '1 minute [_2] seconds';          $str = '1 minute [_2] seconds';
     } elsif ($min == 1 && $sec < 2) {      } elsif ($min == 1 && $sec < 2) {
Line 1241  ENDLINK Line 1238  ENDLINK
   
 sub htmlareaheaders {  sub htmlareaheaders {
  my $s="";   my $s="";
  if (!&htmlareablocked() && &htmlareabrowser()) {   if (&htmlareabrowser()) {
  $s.=(<<ENDEDITOR);   $s.=(<<ENDEDITOR);
 <script type="text/javascript" src="/fckeditor/fckeditor.js"></script>  
 <script type="text/javascript" src="/ckeditor/ckeditor.js"></script>  <script type="text/javascript" src="/ckeditor/ckeditor.js"></script>
 ENDEDITOR  ENDEDITOR
  }   }
     $s.=(<<ENDJQUERY);      $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-1.3.2.min.js"></script>
 <script type="text/javascript" src="/adm/jQuery/js/jquery-ui-1.7.2.custom.min.js"></script>  <script type="text/javascript" src="/adm/jQuery/js/jquery-ui-1.7.2.custom.min.js"></script>
   <link rel="stylesheet" type="text/css" href="/adm/jQuery/css/smoothness/jquery-ui-1.7.2.custom.css" />
 ENDJQUERY  ENDJQUERY
  return $s;   return $s;
 }  }
Line 1286  sub htmlarea_lang { Line 1283  sub htmlarea_lang {
 sub htmlareaselectactive {  sub htmlareaselectactive {
     my @fields=@_;      my @fields=@_;
     unless (&htmlareabrowser()) { return ''; }      unless (&htmlareabrowser()) { return ''; }
     if (&htmlareablocked()) { return '<br />'.&enablelink(@fields); }      my $output='<script type="text/javascript" defer="defer">'."\n"
     my $output='<script type="text/javascript" defer="1">'."\n"  
               .'// <![CDATA['."\n";                .'// <![CDATA['."\n";
     my $lang = &htmlarea_lang();      my $lang = &htmlarea_lang();
     $output.='      $output.='
Line 1300  sub htmlareaselectactive { Line 1296  sub htmlareaselectactive {
     function startRichEditor(id) {      function startRichEditor(id) {
     CKEDITOR.replace(id,       CKEDITOR.replace(id, 
     {      {
     customConfig: "/ckeditor/loncapaconfig.js",      customConfig: "/ckeditor/loncapaconfig.js"
     }      }
     );      );
     }      }
Line 1357  sub htmlareaselectactive { Line 1353  sub htmlareaselectactive {
  });   });
   
  });   });
 ';  '; 
       
     foreach my $field (@fields) {  
  $output.='  
   
 {  
  $(document).ready(function() {  
  if (!($("#'.$field.'").hasClass("LC_richAlwaysOn"))) {  
  if (!($("#'.$field.'").hasClass("LC_richAlwaysOff"))) {  
  if (!($("#'.$field.'").hasClass("LC_richDetectHtml"))) {  
  if (!($("#'.$field.'").hasClass("LC_richDefaultOn"))) {  
  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"
             .'</script><br />'.              .'</script><br />';
  &disablelink(@fields);  
     return $output;      return $output;
 }  }
   
Line 1468  returns: nothing Line 1438  returns: nothing
         if ($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'})) && 
                 $env{'request.course.id'} ne '') {                  ($env{'request.course.id'} ne '') && 
                   ($env{'course.'.$env{'request.course.id'}.'.description'} ne '')) {
                 $description =                   $description = 
                     $env{'course.'.$env{'request.course.id'}.'.description'};                      $env{'course.'.$env{'request.course.id'}.'.description'};
                 $no_mt_descr = 1;                  $no_mt_descr = 1;
Line 1488  returns: nothing Line 1459  returns: nothing
             }              }
         }          }
         my $links = join "",           my $links = join "", 
                  map {               map {
                      $faq  = $_->{'faq'}  if (exists($_->{'faq'}));                   $faq  = $_->{'faq'}  if (exists($_->{'faq'}));
                      $bug  = $_->{'bug'}  if (exists($_->{'bug'}));                   $bug  = $_->{'bug'}  if (exists($_->{'bug'}));
                      $help = $_->{'help'} if (exists($_->{'help'}));                   $help = $_->{'help'} if (exists($_->{'help'}));
   
                      my $result = htmltag( 'a',                    my $result = $_->{no_mt} ? $_->{text} : mt($_->{text});
                                            $_->{no_mt} ?   
                                             $_->{text} : mt($_->{text}),                    if ($_->{href}){
                                            {                        $result = htmltag( 'a', $result, 
                                                href   => $_->{href},                         { href   => $_->{href},
                                                title  => $_->{no_mt} ?                            title  => $_->{no_mt} ? $_->{title} : mt($_->{title}),
                                                 $_->{title} : mt($_->{title}),                           target => $_->{target}, });
                                                target => $_->{target},                   }
                                            });  
                      $result = htmltag( 'li', "$result $crumbsymbol");                   $result = htmltag( 'li', "$result $crumbsymbol");
                      } @Crumbs;               } @Crumbs;
   
         #should the last Element be translated?          #should the last Element be translated?
         $links  .= htmltag( 'li',   
                         htmltag( 'b',           my $lasttext = $last->{'no_mt'} ? $last->{'text'} 
                                  $last->{'no_mt'} ?                        : mt( $last->{'text'} );
                                  $last->{'text'} : mt($last->{'text'}) ));  
           $links .= htmltag( 'li', htmltag('b', $lasttext), {title => $lasttext});
   
         my $icons = '';          my $icons = '';
         $faq  = $last->{'faq'}  if (exists($last->{'faq'}));          $faq  = $last->{'faq'}  if (exists($last->{'faq'}));
Line 1544  returns: nothing Line 1516  returns: nothing
                              .$links;                               .$links;
         }          }
                   
         #SD START (work in progress!)          render_tools(\$links);
         add_tools(\$links);  
         #SD END  
         $links = htmltag('div', $links,           $links = htmltag('div', $links, 
                         { id => "LC_breadcrumbs" }) unless ($CourseBreadcrumbs) ;                          { id => "LC_breadcrumbs" }) unless ($CourseBreadcrumbs) ;
         add_advtools(\$links);          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 1567  returns: nothing Line 1537  returns: nothing
         push(@Crumbs,@_);          push(@Crumbs,@_);
     }      }
           
   =item add_breadcrumb_tool($category, $html)
   
   Adds $html to $category of the breadcrumb toolbar container.
   
   $html is usually a link to a page that invokes a function on the currently 
   displayed data (e.g. print when viewing a problem)
   
   Currently there are 3 possible values for $category: 
   
   =over 
   
   =item navigation 
   left of breadcrumbs line
   
   =item tools 
   right of breadcrumbs line
   
   =item advtools 
   advanced tools shown in a separate box below breadcrumbs line 
   
   =back
    
   returns: nothing
   
   =cut
   
     #SD START (work in progress!)  
     sub add_breadcrumb_tool {      sub add_breadcrumb_tool {
         my ($category, $html) = @_;          my ($category, @html) = @_;
         return unless $html;          return unless @html;
         if (!defined(%tools)) {           if (!defined(%tools)) { 
             my %tools = ( A => [], B => [], C => []);              %tools = ( navigation => [], tools => [], advtools => []);
         }          }
         push @{$tools{$category}}, $html;  
           #this cleans data received from lonmenu::innerregister
           @html = grep {defined $_ && $_ ne ''} @html;
           for (@html) { 
               s/align="(right|left)"//; 
               s/<span.*?\/span>// if $category ne 'advtools'; 
           } 
   
           push @{$tools{$category}}, @html;
     }      }
   
   =item clear_breadcrumb_tools()
   
   Clears the breadcrumb toolbar container.
   
   returns: nothing
   
   =cut
   
     sub clear_breadcrumb_tools {      sub clear_breadcrumb_tools {
         undef(%tools);          undef(%tools);
     }      }
   
     sub add_tools {  =item render_tools(\$breadcrumbs)
         my ($links) = @_;  
   Creates html for breadcrumb tools (categories navigation and tools) and inserts 
   \$breadcrumbs at the correct position.
   
   input: \$breadcrumbs - a reference to the string containing prepared 
   breadcrumbs.
   
   returns: nothing
   =cut
   
   #TODO might split this in separate functions for each category
       sub render_tools {
           my ($breadcrumbs) = @_;
         return unless defined %tools;          return unless defined %tools;
         my $html = '<ul class="LC_bct">';  
         for my $category ('A','B') {          my $navigation = list_from_array($tools{navigation}, 
             $html .= '<li class="LC_breadcrumb_tools">'                     { listattr => { class=>"LC_breadcrumb_tools_navigation" } });
                    . '<ul class="LC_breadcrumb_tools'          my $tools = list_from_array($tools{tools}, 
                    . " LC_breadcrumb_tools_$category\">";                     { listattr => { class=>"LC_breadcrumb_tools_tools" } });
             for my $item (@{$tools{$category}}){          $$breadcrumbs = list_from_array([$navigation, $tools, $$breadcrumbs], 
                 #SD ugly! I'll fix that later on                     { listattr => { class=>'LC_breadcrumb_tools_outerlist' } });
                 $item =~ s/align="(right|left)"//;      }
                 $item =~ s/<span(.*?)\/span>//;  
                 $html .= "<li>$item</li>";  =item render_advtools(\$breadcrumbs)
             }  
             $html .= '</ul></li>';  Creates html for advanced tools (category advtools) and inserts \$breadcrumbs 
             if ($category eq 'A') { $html .= "<li>$$links</li>"; }  at the correct position.
         }  
         $$links = $html.'</ul>';  input: \$breadcrumbs - a reference to the string containing prepared 
     }  breadcrumbs (after render_tools call).
   
     sub add_advtools {  returns: nothing
         my ($links) = @_;  =cut
         return unless (defined $tools{'C'}) and (scalar (@{$tools{'C'}}) > 0);  
         my $html = start_funclist();      sub render_advtools {
         for my $item (@{$tools{'C'}}){          my ($breadcrumbs) = @_;
                 next unless $item;          return unless     (defined $tools{'advtools'}) 
                 $item =~ s/align="(right|left)"//;                        and (scalar(@{$tools{'advtools'}}) > 0);
                 $html .= add_item_funclist($item);  
         }          $$breadcrumbs .= Apache::loncommon::head_subbox(
         $html   .= end_funclist();                              funclist_from_array($tools{'advtools'}) );
         $html    = Apache::loncommon::head_subbox($html);  
         $$links .= $html;  
     }      }
     #SD END  
   
 } # End of scope for @Crumbs  } # End of scope for @Crumbs
   
Line 1748  ENDTWO Line 1767  ENDTWO
   
 } # End: row_count block for pick_box  } # End: row_count block for pick_box
   
   
 sub role_select_row {  sub role_select_row {
     my ($roles,$title,$css_class,$show_separate_custom,$cdom,$cnum) = @_;      my ($roles,$title,$css_class,$show_separate_custom,$cdom,$cnum) = @_;
     my $crstype = 'Course';      my $crstype = 'Course';
Line 1971  sub course_custom_roles { Line 1989  sub course_custom_roles {
 }  }
   
   
   sub resource_info_box {
      my ($symb,$onlyfolderflag)=@_;
      my $return='';
      if ($symb) {
          $return=&Apache::loncommon::start_data_table();
          my ($map,$id,$resource)=&Apache::lonnet::decode_symb($symb);
          my $folder=&Apache::lonnet::gettitle($map);
          $return.=&Apache::loncommon::start_data_table_row().
                       '<th>'.&mt('Folder:').'</th><td>'.$folder.'</td>'.
                       &Apache::loncommon::end_data_table_row();
          unless ($onlyfolderflag) {
             $return.=&Apache::loncommon::start_data_table_row().
                       '<th>'.&mt('Resource:').'</th><td>'.&Apache::lonnet::gettitle($symb).'</td>'.
                       &Apache::loncommon::end_data_table_row();
          }
          $return.=&Apache::loncommon::end_data_table();
       } else {
          $return='<p><span class="LC_error">'.&mt('No context provided.').'</span></p>';
       }
       return $return;
   
   }
   
 ##############################################  ##############################################
 ##############################################  ##############################################
   
Line 1995  sub topic_bar { Line 2036  sub topic_bar {
   
 ##############################################  ##############################################
 ##############################################  ##############################################
                                                                                
 # echo_form_input  # echo_form_input
 #  #
 # Generates html markup to add form elements from the referrer page  # Generates html markup to add form elements from the referrer page
Line 2060  sub echo_form_input { Line 2100  sub echo_form_input {
   
 ##############################################  ##############################################
 ##############################################  ##############################################
                                                                                
 # set_form_elements  # set_form_elements
 #  #
 # Generates javascript to set form elements to values based on  # Generates javascript to set form elements to values based on
Line 2278  sub htmltag{ Line 2317  sub htmltag{
 # USAGE: inittags(@tags);  # USAGE: inittags(@tags);
 #  #
 # EXAMPLES:  # EXAMPLES:
 #  - my ($h1, $h2, $h3) = initTags( qw( h1 h2 h3 ) )  #  - my ($h1, $h2, $h3) = inittags( qw( h1 h2 h3 ) )
 #    $h1->("This is a headline") #Returns: <h1>This is a headline</h1>  #    $h1->("This is a headline") #Returns: <h1>This is a headline</h1>
 #  #
 # NOTES: See sub htmltag for further information.  # NOTES: See sub htmltag for further information.
Line 2327  sub scripttag { Line 2366  sub scripttag {
 };  };
   
   
   =item list_from_array( \@array, { listattr =>{}, itemattr =>{} } )
   
   Constructs a XHTML list from \@array.
   
   input: 
   
   =over
   
   =item \@array 
   
   A reference to the array containing text that will be wrapped in <li></li> tags.
   
   =item { listattr => {}, itemattr =>{} } 
   
   Attributes for <ul> and <li> passed in as hash references. 
   See htmltag() for more details.
   
   =back
    
   returns: XHTML list as String. 
   
   =cut   
   
   # \@items, {listattr => { class => 'abc', id => 'xyx' }, itemattr => {class => 'abc', id => 'xyx'}}
   sub list_from_array {
       my ($items, $args) = @_;
       my ($ul, $li) = inittags( qw(ul li) );
       my $listitems = join '', map { $li->($_, $args->{itemattr}) } @$items;
       return $ul->( $listitems, $args->{listattr} );
   }
   
   
 ##############################################  ##############################################
 ##############################################  ##############################################
   
Line 2356  sub scripttag { Line 2427  sub scripttag {
 #  #
 # Outputs: A scalar containing the html markup for the menu.  # Outputs: A scalar containing the html markup for the menu.
   
 # ---- Remove when done ----  
 # This routine is part of the redesign of LON-CAPA and it's   
 # subject to change during this project.  
 # Don't rely on its current functionality as it might be   
 # changed or removed.  
 # --------------------------  
 sub generate_menu {  sub generate_menu {
     my @menu = @_;      my @menu = @_;
     # subs for specific html elements      # subs for specific html elements
Line 2484  sub add_item_funclist { Line 2549  sub add_item_funclist {
     return '<li>'.$content.'</li>'."\n";      return '<li>'.$content.'</li>'."\n";
 }  }
   
 ##############################################  
 ##############################################  
   
 =pod  =pod
   
 =item &end_funclist  =item &end_funclist
Line 2502  add_item_funclist Line 2564  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 {
     return "</ul>\n";      return "</ul>\n";
 }  }
   
   =pod
   
   =item funclist_from_array( \@array, {legend => 'text for legend'} )
   
   Constructs a XHTML list from \@array with the first item being visually
   highlighted and set to the value of legend or 'Functions' if legend is
   empty. 
   
   =over
   
   =item \@array
   
   A reference to the array containing text that will be wrapped in <li></li> tags.
   
   =item { legend => 'text' }
   
   A string that's used as visually highlighted first item. 'Functions' is used if
   it's value evaluates to false.
   
   =back
    
   returns: XHTML list as string. 
   
   =back
   
   =cut  
   
   sub funclist_from_array {
       my ($items, $args) = @_;
       $args->{legend} ||= mt('Functions');
       return list_from_array( [$args->{legend}, @$items], 
                  { listattr => {class => 'LC_funclist'} });
   }   
   
 1;  1;
   
 __END__  __END__

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


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