--- loncom/interface/lonhtmlcommon.pm 2010/01/26 05:22:03 1.264
+++ loncom/interface/lonhtmlcommon.pm 2011/06/03 13:00:39 1.290
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# a pile of common html routines
#
-# $Id: lonhtmlcommon.pm,v 1.264 2010/01/26 05:22:03 faziophi Exp $
+# $Id: lonhtmlcommon.pm,v 1.290 2011/06/03 13:00:39 www Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -60,13 +60,19 @@ use Time::Local;
use Time::HiRes;
use Apache::lonlocal;
use Apache::lonnet;
+use HTML::Entities();
use LONCAPA;
+sub java_not_enabled {
+ return "\n".''.
+ &mt('The required Java applet could not be started. Please make sure to have Java installed and active in your browser.').
+ "\n";
+}
sub coursepreflink {
my ($text,$category)=@_;
if (&Apache::lonnet::allowed('opa',$env{'request.course.id'})) {
- return '&"').'">'.$text.'';
+ return '&"').'">'.$text.'';
} else {
return '';
}
@@ -78,6 +84,22 @@ sub raw_href_to_link {
return $message;
}
+sub entity_encode {
+ my ($text)=@_;
+ return &HTML::Entities::encode($text, '<>&"');
+}
+
+sub direct_parm_link {
+ my ($linktext,$symb,$filter,$part,$target)=@_;
+ $symb=&entity_encode($symb);
+ $filter=&entity_encode($filter);
+ $part=&entity_encode($part);
+ if (($symb) && (&Apache::lonnet::allowed('opa')) && ($target ne 'tex')) {
+ return "$linktext";
+ } else {
+ return $linktext;
+ }
+}
##############################################
##############################################
@@ -90,7 +112,7 @@ Successful completion of an operation me
sub confirm_success {
my ($message,$failure)=@_;
if ($failure) {
- return ''."\n"
+ return ''."\n"
.'
'."\n"
.$message."\n"
.''."\n";
@@ -121,7 +143,7 @@ sub dragmath_button {
my ($textarea,$helpicon) = @_;
my $help_text;
if ($helpicon) {
- $help_text = &Apache::loncommon::help_open_topic('Authoring_Math_Editor');
+ $help_text = &Apache::loncommon::help_open_topic('Authoring_Math_Editor',undef,undef,undef,undef,'mathhelpicon_'.$textarea);
}
my $buttontext=&mt('Edit Math');
return < 0 ? $step : 1;
+ $$prog_state{'done'} += $step;
+
+ # Catch (max modulo step) <> 0
+ my $current = $$prog_state{'done'};
+ my $last = ($$prog_state{'max'} - $current);
+ if ($last <= 0) {
+ $last = 1;
+ $current = $$prog_state{'max'};
+ }
+
my $time_est= (&Time::HiRes::time() - $$prog_state{'firststart'})/
- $$prog_state{'done'} *
- ($$prog_state{'max'}-$$prog_state{'done'});
+ $current * $last;
$time_est = int($time_est);
#
my $min = int($time_est/60);
my $sec = $time_est % 60;
- #
- my $str;
- if ($min == 0 && $sec > 1) {
- $str = '[_2] seconds';
- } elsif ($min == 1 && $sec > 1) {
- $str = '1 minute [_2] seconds';
- } elsif ($min == 1 && $sec < 2) {
- $str = '1 minute';
- } elsif ($min < 10 && $sec > 1) {
- $str = '[_1] minutes, [_2] seconds';
- } elsif ($min >= 10 || $sec < 2) {
- $str = '[_1] minutes';
- }
- $time_est = &mt($str,$min,$sec);
- #
+
my $lasttime = &Time::HiRes::time()-$$prog_state{'laststart'};
if ($lasttime > 9) {
$lasttime = int($lasttime);
@@ -1081,27 +1100,24 @@ sub Increment_PrgWin {
} else {
$lasttime = sprintf("%3.2f",$lasttime);
}
- if ($lasttime == 1) {
- $lasttime = '('.$lasttime.' '.&mt('second for').' '.$extraInfo.')';
- } else {
- $lasttime = '('.$lasttime.' '.&mt('seconds for').' '.$extraInfo.')';
- }
- #
- my $user_browser = $env{'browser.type'} if (exists($env{'browser.type'}));
- my $user_os = $env{'browser.os'} if (exists($env{'browser.os'}));
- if (! defined($user_browser) || ! defined($user_os)) {
- (undef,$user_browser,undef,undef,undef,$user_os) =
- &Apache::loncommon::decode_user_agent();
- }
- if ($user_browser eq 'explorer' && $user_os =~ 'mac') {
- $lasttime = '';
- }
+
+ $sec = 0 if ($min >= 10); # Don't show seconds if remaining time >= 10 min.
+ $sec = 1 if ( ($min == 0) && ($sec == 0) ); # Little cheating: pretend to have 1 second remaining instead of 0 to have something to display
+
+ my $timeinfo =
+ &mt('[_1]/[_2]:'
+ .' [quant,_3,minute,minutes,] [quant,_4,second ,seconds ,]remaining'
+ .' ([quant,_5,second] for '.$extraInfo.')',
+ $current,
+ $$prog_state{'max'},
+ $min,
+ $sec,
+ $lasttime);
+
&r_print($r,&Apache::lonhtmlcommon::scripttag(
$$prog_state{'window'}.'.document.'.
$$prog_state{'formname'}.'.'.
- $$prog_state{'inputname'}.'.value="'.
- $$prog_state{'done'}.'/'.$$prog_state{'max'}.
- ': '.$time_est.' '.&mt('remaining').' '.$lasttime.'";'
+ $$prog_state{'inputname'}.'.value="'.$timeinfo.'";'
));
$$prog_state{'laststart'}=&Time::HiRes::time();
}
@@ -1218,23 +1234,7 @@ sub spelllink {
ENDLINK
}
-# ------------------------------------------------- Output headers for HTMLArea
-
-{
- my @htmlareafields;
- sub init_htmlareafields {
- undef(@htmlareafields);
- }
-
- sub add_htmlareafields {
- my (@newfields) = @_;
- push(@htmlareafields,@newfields);
- }
-
- sub get_htmlareafields {
- return @htmlareafields;
- }
-}
+# ------------------------------------------------- Output headers for CKEditor
sub htmlareaheaders {
my $s="";
@@ -1253,22 +1253,6 @@ ENDJQUERY
# ----------------------------------------------------------------- Preferences
-sub disablelink {
- my @fields=@_;
- if (defined($#fields)) {
- unless ($#fields>=0) { return ''; }
- }
- return ''.&mt('Disable WYSIWYG Editor').'';
-}
-
-sub enablelink {
- my @fields=@_;
- if (defined($#fields)) {
- unless ($#fields>=0) { return ''; }
- }
- return ''.&mt('Enable WYSIWYG Editor').'';
-}
-
# ------------------------------------------------- lang to use in html editor
sub htmlarea_lang {
my $lang='en';
@@ -1281,23 +1265,45 @@ sub htmlarea_lang {
# ----------------------------------------- Script to activate only some fields
sub htmlareaselectactive {
- my @fields=@_;
+ my ($args) = @_;
unless (&htmlareabrowser()) { return ''; }
- #if (&htmlareablocked()) { return '
'.&enablelink(@fields); }
my $output='
'.
- &disablelink(@fields);
+ .'';
return $output;
}
@@ -1375,6 +1424,34 @@ sub htmlareabrowser {
return 1;
}
+#
+# Should the "return to content" link be shown?
+#
+
+sub show_return_link {
+
+ unless ($env{'request.course.id'}) { return 0; }
+ if ($env{'request.noversionuri'}=~m{^/priv/} ||
+ $env{'request.uri'}=~m{^/~}) { return 1; }
+
+ if (($env{'request.noversionuri'} =~ m{^/adm/(viewclasslist|navmaps)($|\?)})
+ || ($env{'request.noversionuri'} =~ m{^/adm/.*/aboutme($|\?)})) {
+
+ return if ($env{'form.register'});
+ }
+ return (($env{'request.noversionuri'}=~m{^/(res|public)/} &&
+ $env{'request.symb'} eq '')
+ ||
+ ($env{'request.noversionuri'}=~ m{^/cgi-bin/printout.pl})
+ ||
+ (($env{'request.noversionuri'}=~/^\/adm\//) &&
+ ($env{'request.noversionuri'}!~/^\/adm\/wrapper\//) &&
+ ($env{'request.noversionuri'}!~
+ m{^/adm/.*/(smppg|bulletinboard)($|\?)})
+ ));
+}
+
+
############################################################
############################################################
@@ -1440,8 +1517,9 @@ returns: nothing
if ($menulink) {
my $description = 'Menu';
my $no_mt_descr = 0;
- if (exists($env{'request.course.id'}) &&
- $env{'request.course.id'} ne '') {
+ if ((exists($env{'request.course.id'})) &&
+ ($env{'request.course.id'} ne '') &&
+ ($env{'course.'.$env{'request.course.id'}.'.description'} ne '')) {
$description =
$env{'course.'.$env{'request.course.id'}.'.description'};
$no_mt_descr = 1;
@@ -1459,22 +1537,28 @@ returns: nothing
$last = $menulink;
}
}
- my $links = join "",
+ my $links;
+ if ((&show_return_link) && (!$CourseBreadcrumbs)) {
+ $links=&htmltag( 'a',"
",
+ { href => '/adm/flip?postdata=return:',
+ title => &mt("Back to most recent content resource") });
+ }
+ $links.= join "",
map {
$faq = $_->{'faq'} if (exists($_->{'faq'}));
$bug = $_->{'bug'} if (exists($_->{'bug'}));
$help = $_->{'help'} if (exists($_->{'help'}));
- my $result = $_->{no_mt} ? $_->{text} : mt($_->{text});
+ my $result = $_->{no_mt} ? $_->{text} : &mt($_->{text});
if ($_->{href}){
- $result = htmltag( 'a', $result,
+ $result = &htmltag( 'a', $result,
{ href => $_->{href},
- title => $_->{no_mt} ? $_->{title} : mt($_->{title}),
+ title => $_->{no_mt} ? $_->{title} : &mt($_->{title}),
target => $_->{target}, });
}
- $result = htmltag( 'li', "$result $crumbsymbol");
+ $result = &htmltag( 'li', "$result $crumbsymbol");
} @Crumbs;
#should the last Element be translated?
@@ -1482,7 +1566,10 @@ returns: nothing
my $lasttext = $last->{'no_mt'} ? $last->{'text'}
: mt( $last->{'text'} );
- $links .= htmltag( 'li', htmltag('b', $lasttext), {title => $lasttext});
+ # last breadcrumb is the first order heading of a page
+ # for course breadcrumbs it's just bold
+ $links .= &htmltag( 'li', htmltag($CourseBreadcrumbs ? 'b' : 'h1',
+ $lasttext), {title => $lasttext});
my $icons = '';
$faq = $last->{'faq'} if (exists($last->{'faq'}));
@@ -1504,23 +1591,23 @@ returns: nothing
unless ($CourseBreadcrumbs) {
- $links = htmltag('ol', $links, { id => "LC_MenuBreadcrumbs" });
+ $links = &htmltag('ol', $links, { id => "LC_MenuBreadcrumbs" });
} else {
- $links = htmltag('ul', $links, { class => "LC_CourseBreadcrumbs" });
+ $links = &htmltag('ul', $links, { class => "LC_CourseBreadcrumbs" });
}
if ($component) {
- $links = htmltag('span',
+ $links = &htmltag('span',
( $no_mt ? $component : mt($component) ).
( $icons ? $icons : '' ),
{ class => 'LC_breadcrumbs_component' } )
.$links;
}
- render_tools(\$links);
- $links = htmltag('div', $links,
+ &render_tools(\$links);
+ $links = &htmltag('div', $links,
{ id => "LC_breadcrumbs" }) unless ($CourseBreadcrumbs) ;
- render_advtools(\$links);
+ &render_advtools(\$links);
# Return the @Crumbs stack to what we started with
push(@Crumbs,$last);
@@ -1567,7 +1654,7 @@ returns: nothing
sub add_breadcrumb_tool {
my ($category, @html) = @_;
return unless @html;
- if (!defined(%tools)) {
+ if (!keys(%tools)) {
%tools = ( navigation => [], tools => [], advtools => []);
}
@@ -1575,7 +1662,7 @@ returns: nothing
@html = grep {defined $_ && $_ ne ''} @html;
for (@html) {
s/align="(right|left)"//;
- s/// if $category ne 'advtools';
+# s/// if $category ne 'advtools';
}
push @{$tools{$category}}, @html;
@@ -1607,7 +1694,7 @@ returns: nothing
#TODO might split this in separate functions for each category
sub render_tools {
my ($breadcrumbs) = @_;
- return unless defined %tools;
+ return unless (keys(%tools));
my $navigation = list_from_array($tools{navigation},
{ listattr => { class=>"LC_breadcrumb_tools_navigation" } });
@@ -1768,7 +1855,6 @@ ENDTWO
} # End: row_count block for pick_box
-
sub role_select_row {
my ($roles,$title,$css_class,$show_separate_custom,$cdom,$cnum) = @_;
my $crstype = 'Course';
@@ -1814,15 +1900,15 @@ sub role_select_row {
sub course_select_row {
my ($title,$formname,$totcodes,$codetitles,$idlist,$idlist_titles,
- $css_class,$crstype) = @_;
+ $css_class,$crstype,$standardnames) = @_;
my $output = &row_title($title,$css_class);
- $output .= &course_selection($formname,$totcodes,$codetitles,$idlist,$idlist_titles,$crstype);
+ $output .= &course_selection($formname,$totcodes,$codetitles,$idlist,$idlist_titles,$crstype,$standardnames);
$output .= &row_closure();
return $output;
}
sub course_selection {
- my ($formname,$totcodes,$codetitles,$idlist,$idlist_titles,$crstype) = @_;
+ my ($formname,$totcodes,$codetitles,$idlist,$idlist_titles,$crstype,$standardnames) = @_;
my $output = qq|