version 1.369.2.2, 2012/05/14 13:58:04
|
version 1.369.2.13, 2012/05/29 19:41:27
|
Line 26
|
Line 26
|
# http://www.lon-capa.org/ |
# http://www.lon-capa.org/ |
# |
# |
# |
# |
# There is one parameter controlling the action of this module: |
|
# |
|
|
|
=head1 NAME |
=head1 NAME |
|
|
Line 35 Apache::lonmenu
|
Line 33 Apache::lonmenu
|
|
|
=head1 SYNOPSIS |
=head1 SYNOPSIS |
|
|
Coordinates the response to clicking an image. |
Loads contents of /home/httpd/lonTabs/mydesk.tab, |
|
used to generate inline menu, and Main Menu page. |
|
|
This is part of the LearningOnline Network with CAPA project |
This is part of the LearningOnline Network with CAPA project |
described at http://www.lon-capa.org. |
described at http://www.lon-capa.org. |
Line 74 It is set to 'done' in the BEGIN block o
|
Line 73 It is set to 'done' in the BEGIN block o
|
=item @primary_menu |
=item @primary_menu |
|
|
The elements of this array reference arrays that are made up of the components |
The elements of this array reference arrays that are made up of the components |
of those lines of mydesk.tab that start with prim. |
of those lines of mydesk.tab that start with prim:. |
It is used by primary_menu() to generate the corresponding menu. |
It is used by primary_menu() to generate the corresponding menu. |
It gets filled in the BEGIN block of this module. |
It gets filled in the BEGIN block of this module. |
|
|
|
=item %primary_sub_menu |
|
|
|
The keys of this hash reference are the names of items in the primary_menu array |
|
which have sub-menus. For each key, the corresponding value is a reference to |
|
an array containing components extracted from lines in mydesk.tab which begin |
|
with primsub:. |
|
This hash, which is used by primary_menu to generate sub-menus, is populated in |
|
the BEGIN block. |
|
|
=item @secondary_menu |
=item @secondary_menu |
|
|
The elements of this array reference arrays that are made up of the components |
The elements of this array reference arrays that are made up of the components |
Line 107 entries from mydesk.tab
|
Line 115 entries from mydesk.tab
|
|
|
Same as primary_menu() but operates on @secondary_menu. |
Same as primary_menu() but operates on @secondary_menu. |
|
|
|
=item create_submenu() |
|
|
|
Creates XHTML for unordered list of sub-menu items which belong to a |
|
particular top-level menu item. Uses hover pseudo class in css to display |
|
dropdown list when mouse hovers over top-level item. Support for IE6 |
|
(no hover psuedo class) via LC_hoverable class for <li> tag for top- |
|
level item, which employs jQuery to handle behavior on mouseover. |
|
|
|
Inputs: 4 - (a) link and (b) target for anchor href in top level item, |
|
(c) title for text wrapped by anchor tag in top level item. |
|
(d) reference to array of arrays of sub-menu items. |
|
|
=item innerregister() |
=item innerregister() |
|
|
This gets called in order to register a URL in the body of the document |
This gets called in order to register a URL in the body of the document |
Line 129 The javascript is usually similar to "go
|
Line 149 The javascript is usually similar to "go
|
|
|
=item utilityfunctions() |
=item utilityfunctions() |
|
|
|
Output from this routine is a number of javascript functions called by |
|
items in the inline menu, and in some cases items in the Main Menu page. |
|
|
=item serverform() |
=item serverform() |
|
|
=item constspaceform() |
=item constspaceform() |
Line 156 use Apache::lonlocal;
|
Line 179 use Apache::lonlocal;
|
use Apache::lonmsg(); |
use Apache::lonmsg(); |
use LONCAPA qw(:DEFAULT :match); |
use LONCAPA qw(:DEFAULT :match); |
use HTML::Entities(); |
use HTML::Entities(); |
|
use Apache::lonwishlist(); |
|
|
use vars qw(@desklines %category_names %category_members %category_positions |
use vars qw(@desklines %category_names %category_members %category_positions |
$readdesk @primary_menu @secondary_menu); |
$readdesk @primary_menu %primary_submenu @secondary_menu %secondary_submenu); |
|
|
my @inlineremote; |
my @inlineremote; |
|
|
Line 181 sub prep_menuitem {
|
Line 205 sub prep_menuitem {
|
|
|
# primary_menu() evaluates @primary_menu and returns XHTML for the menu |
# primary_menu() evaluates @primary_menu and returns XHTML for the menu |
# that contains following links: |
# that contains following links: |
# About, Message, Roles, Help, Logout |
# About, Message, Personal, Roles, Help, Logout |
# @primary_menu is filled within the BEGIN block of this module with |
# @primary_menu is filled within the BEGIN block of this module with |
# entries from mydesk.tab |
# entries from mydesk.tab |
sub primary_menu { |
sub primary_menu { |
Line 211 sub primary_menu {
|
Line 235 sub primary_menu {
|
next if $$menuitem[4] eq 'courses' ##'Roles' wanted |
next if $$menuitem[4] eq 'courses' ##'Roles' wanted |
&& !&Apache::loncommon::show_course(); ## |
&& !&Apache::loncommon::show_course(); ## |
|
|
|
my $title = $menuitem->[3]; |
if ($$menuitem[3] eq 'Help') { # special treatment for helplink |
if (defined($primary_submenu{$title})) { |
|
my ($link,$target); |
|
if ($menuitem->[0] ne '') { |
|
$link = $menuitem->[0]; |
|
$target = '_top'; |
|
} else { |
|
$link = '#'; |
|
} |
|
my @primsub; |
|
if (ref($primary_submenu{$title}) eq 'ARRAY') { |
|
foreach my $item (@{$primary_submenu{$title}}) { |
|
next if (($item->[2] eq 'wishlist') && |
|
((!&Apache::lonnet::allowed('bre',"/res/$env{'user.domain'}/")) && |
|
(!&Apache::lonnet::allowed('bro',"/res/$env{'user.domain'}/")))); |
|
next if (($item->[2] eq 'reqcrs') && (!&check_for_rcrs())); |
|
next if ((($item->[2] eq 'portfolio') || |
|
($item->[2] eq 'blog')) && |
|
(!&Apache::lonnet::usertools_access('','',$item->[2], |
|
undef,'tools'))); |
|
push(@primsub,$item); |
|
} |
|
if (@primsub > 0) { |
|
$menu .= &create_submenu($link,$target,$title,\@primsub); |
|
} elsif ($link) { |
|
$menu .= '<li><a href="'.$link.'" target="'.$target.'">'.&mt($title).'</a></li>'; |
|
} |
|
} |
|
} elsif ($$menuitem[3] eq 'Help') { # special treatment for helplink |
if ($public) { |
if ($public) { |
my $origmail = $Apache::lonnet::perlvar{'lonSupportEMail'}; |
my $origmail = $Apache::lonnet::perlvar{'lonSupportEMail'}; |
my $defdom = &Apache::lonnet::default_login_domain(); |
my $defdom = &Apache::lonnet::default_login_domain(); |
Line 268 sub secondary_menu {
|
Line 319 sub secondary_menu {
|
? "/$env{'request.course.sec'}" |
? "/$env{'request.course.sec'}" |
: ''); |
: ''); |
my $canedit = &Apache::lonnet::allowed('mdc', $env{'request.course.id'}); |
my $canedit = &Apache::lonnet::allowed('mdc', $env{'request.course.id'}); |
my $canviewgrps = &Apache::lonnet::allowed('vcg', $crs_sec); |
my $canviewroster = $env{'course.'.$env{'request.course.id'}.'.student_classlist_view'}; |
my $canmodifyuser = &Apache::lonnet::allowed('cst', $crs_sec); |
my $canviewgrps = &Apache::lonnet::allowed('vcg', $crs_sec); |
my $canviewwnew = &Apache::lonnet::allowed('whn', $crs_sec); |
my $canmodifyuser = &Apache::lonnet::allowed('cst', $crs_sec); |
|
my $canviewwnew = &Apache::lonnet::allowed('whn', $crs_sec); |
my $canmodpara = &Apache::lonnet::allowed('opa', $crs_sec); |
my $canmodpara = &Apache::lonnet::allowed('opa', $crs_sec); |
my $canvgr = &Apache::lonnet::allowed('vgr', $crs_sec); |
my $canvgr = &Apache::lonnet::allowed('vgr', $crs_sec); |
my $canmgr = &Apache::lonnet::allowed('mgr', $crs_sec); |
my $canmgr = &Apache::lonnet::allowed('mgr', $crs_sec); |
my $author = &getauthor(); |
my $author = &getauthor(); |
|
|
my %groups = &Apache::lonnet::get_active_groups( |
my %groups = &Apache::lonnet::get_active_groups( |
Line 289 sub secondary_menu {
|
Line 341 sub secondary_menu {
|
&& !$env{'request.course.id'}; |
&& !$env{'request.course.id'}; |
next if $$menuitem[4] =~ /^mdc/ |
next if $$menuitem[4] =~ /^mdc/ |
&& !$canedit; |
&& !$canedit; |
|
next if $$menuitem[4] eq 'mdcCourse' |
|
&& ($crstype eq 'Community'); |
|
next if $$menuitem[4] eq 'mdcCommunity' |
|
&& ($crstype eq 'Course'); |
next if $$menuitem[4] eq 'nvgr' |
next if $$menuitem[4] eq 'nvgr' |
&& $canvgr; |
&& $canvgr; |
next if $$menuitem[4] eq 'vgr' |
next if $$menuitem[4] eq 'vgr' |
Line 296 sub secondary_menu {
|
Line 352 sub secondary_menu {
|
next if $$menuitem[4] eq 'cst' |
next if $$menuitem[4] eq 'cst' |
&& !$canmodifyuser; |
&& !$canmodifyuser; |
next if $$menuitem[4] eq 'ncst' |
next if $$menuitem[4] eq 'ncst' |
&& $canmodifyuser; |
&& ($canmodifyuser || !$canviewroster); |
next if $$menuitem[4] eq 'mgr' |
next if $$menuitem[4] eq 'mgr' |
&& !$canmgr; |
&& !$canmgr; |
next if $$menuitem[4] eq 'nmgr' |
next if $$menuitem[4] eq 'nmgr' |
Line 305 sub secondary_menu {
|
Line 361 sub secondary_menu {
|
&& !$canviewwnew; |
&& !$canviewwnew; |
next if $$menuitem[4] eq 'opa' |
next if $$menuitem[4] eq 'opa' |
&& !$canmodpara; |
&& !$canmodpara; |
next if $$menuitem[4] =~ /showgroups$/ |
next if $$menuitem[4] eq 'nvcg' |
&& !$canviewgrps |
&& ($canviewgrps || !%groups); |
&& !%groups; |
|
next if $$menuitem[4] eq 'author' |
next if $$menuitem[4] eq 'author' |
&& !$author; |
&& !$author; |
|
|
if ($$menuitem[3] eq 'Roles' && $env{'request.course.id'}) { |
my $title = $menuitem->[3]; |
|
if (defined($secondary_submenu{$title})) { |
|
my ($link,$target); |
|
if ($menuitem->[0] ne '') { |
|
$link = $menuitem->[0]; |
|
$target = '_top'; |
|
} else { |
|
$link = '#'; |
|
} |
|
my @scndsub; |
|
if (ref($secondary_submenu{$title}) eq 'ARRAY') { |
|
foreach my $item (@{$secondary_submenu{$title}}) { |
|
if (ref($item) eq 'ARRAY') { |
|
next if ($item->[2] eq 'vgr' && !$canvgr); |
|
next if ($item->[2] eq 'opa' && !$canmodpara); |
|
next if ($item->[2] eq 'cst' && !$canmodifyuser); |
|
next if ($item->[2] eq 'mgr' && !$canmgr); |
|
next if ($item->[2] eq 'vcg' && !$canviewgrps); |
|
push(@scndsub,$item); |
|
} |
|
} |
|
if (@scndsub > 0) { |
|
$menu .= &create_submenu($link,$target,$title,\@scndsub); |
|
} elsif ($link) { |
|
$menu .= '<li><a href="'.$link.'" target="'.$target.'">'.&mt($title).'</a></li>'; |
|
} |
|
} |
|
} elsif ($$menuitem[3] eq 'Roles' && $env{'request.course.id'}) { |
# special treatment for role selector |
# special treatment for role selector |
my $roles_selector = &roles_selector( |
my $roles_selector = &roles_selector( |
$env{'course.' . $env{'request.course.id'} . '.domain'}, |
$env{'course.' . $env{'request.course.id'} . '.domain'}, |
$env{'course.' . $env{'request.course.id'} . '.num'} ); |
$env{'course.' . $env{'request.course.id'} . '.num'} ); |
|
|
$menu .= $roles_selector ? "<li>$roles_selector</li>" |
$menu .= $roles_selector ? "<li style=\"padding: 0 0.8em;\">$roles_selector</li>" |
: ''; |
: ''; |
} else { |
} else { |
$menu .= &prep_menuitem(\@$menuitem); |
$menu .= &prep_menuitem(\@$menuitem); |
Line 347 sub secondary_menu {
|
Line 429 sub secondary_menu {
|
return "<ul id=\"LC_secondary_menu\">$menu</ul>"; |
return "<ul id=\"LC_secondary_menu\">$menu</ul>"; |
} |
} |
|
|
|
sub create_submenu { |
|
my ($link,$target,$title,$submenu) = @_; |
|
return unless (ref($submenu) eq 'ARRAY'); |
|
my $disptarget; |
|
if ($target ne '') { |
|
$disptarget = ' target="'.$target.'"'; |
|
} |
|
my $menu = '<li class="LC_hoverable">'. |
|
'<a href="'.$link.'"'.$disptarget.'>'. |
|
'<span class="LC_nobreak">'.&mt($title). |
|
'<span class="LC_fontsize_small" style="font-weight:normal;">'. |
|
' ▼</span></span></a>'. |
|
'<ul>'; |
|
my $count = 0; |
|
my $numsub = scalar(@{$submenu}); |
|
foreach my $item (@{$submenu}) { |
|
$count ++; |
|
if (ref($item) eq 'ARRAY') { |
|
my $borderbot; |
|
if ($count == $numsub) { |
|
$borderbot = 'border-bottom:1px solid black;'; |
|
} |
|
$menu .= '<li style="margin:0;padding:0;'. |
|
$borderbot.'"><a href="'.$item->[0].'">'. |
|
&mt($item->[1]).'</a></li>'; |
|
} |
|
} |
|
$menu .= '</ul></li>'; |
|
return $menu; |
|
} |
|
|
sub innerregister { |
sub innerregister { |
my ($forcereg,$bread_crumbs) = @_; |
my ($forcereg,$bread_crumbs) = @_; |
my $const_space = ($env{'request.state'} eq 'construct'); |
my $const_space = ($env{'request.state'} eq 'construct'); |
Line 627 c&6&3
|
Line 740 c&6&3
|
c&8&1 |
c&8&1 |
c&8&2 |
c&8&2 |
s&8&3&prt.png&Print&printout[_1]&gopost('/adm/printout',currentURL)&Prepare a printable document |
s&8&3&prt.png&Print&printout[_1]&gopost('/adm/printout',currentURL)&Prepare a printable document |
s&9&1&sbkm.png&Bookmark&set[_1]bookmark[_2]&set_bookmark()&Set a bookmark for this resource&&1 |
|
|
|
ENDMENUITEMS |
ENDMENUITEMS |
|
if (&Apache::lonnet::allowed('bre', $env{'request.course.id'}) eq 'F' && $env{'request.uri'} =~ /^\/res/) { |
|
# wishlist is only available for users with access to resource-pool |
|
# and links can only be set for resources within the resource-pool |
|
$menuitems .= (<<ENDMENUITEMS); |
|
s&9&1&wishlist-link.png&Stored Links&wishlistlink[_2]&set_wishlistlink()&Save a link for this resource in your personal Stored Links repository&&1 |
|
ENDMENUITEMS |
|
} |
|
|
my $currentURL = &Apache::loncommon::get_symb(); |
my $currentURL = &Apache::loncommon::get_symb(); |
my ($symb_old,$symb_old_enc) = &Apache::loncommon::clean_symb($currentURL); |
my ($symb_old,$symb_old_enc) = &Apache::loncommon::clean_symb($currentURL); |
Line 659 ENDREALRES
|
Line 777 ENDREALRES
|
$menuitems .= (<<ENDMENUITEMS); |
$menuitems .= (<<ENDMENUITEMS); |
s&8&3&prt.png&Print&printout[_1]&gopost('/adm/printout',currentURL)&Prepare a printable document |
s&8&3&prt.png&Print&printout[_1]&gopost('/adm/printout',currentURL)&Prepare a printable document |
ENDMENUITEMS |
ENDMENUITEMS |
|
if (&Apache::lonnet::allowed('bre', $env{'request.course.id'}) eq 'F') { |
|
# wishlist is only available for users with access to resource-pool |
|
$menuitems .= (<<ENDMENUITEMS); |
|
s&9&1&wishlist-link.png&Stored Links&wishlistlink[_2]&set_wishlistlink()&Save a link for this resource in your personal Stored Links repository&&1 |
|
ENDMENUITEMS |
|
} |
} |
} |
my $buttons=''; |
my $buttons=''; |
foreach (split(/\n/,$menuitems)) { |
foreach (split(/\n/,$menuitems)) { |
Line 688 ENDMENUITEMS
|
Line 812 ENDMENUITEMS
|
&Apache::lonhtmlcommon::add_breadcrumb_tool( |
&Apache::lonhtmlcommon::add_breadcrumb_tool( |
'navigation', @inlineremote[21,23]); |
'navigation', @inlineremote[21,23]); |
|
|
if(hidden_button_check() ne 'yes') { |
my $countdown = &countdown_timer(); |
|
if (&hidden_button_check() eq 'yes') { |
|
if ($countdown) { |
|
&Apache::lonhtmlcommon::add_breadcrumb_tool('tools',$countdown); |
|
} |
|
} else { |
|
my @tools = @inlineremote[93,91,81,82,83]; |
|
if ($countdown) { |
|
unshift(@tools,$countdown); |
|
} |
&Apache::lonhtmlcommon::add_breadcrumb_tool( |
&Apache::lonhtmlcommon::add_breadcrumb_tool( |
'tools', @inlineremote[93,91,81,82,83]); |
'tools',@tools); |
|
|
#publish button in construction space |
#publish button in construction space |
if ($env{'request.state'} eq 'construct'){ |
if ($env{'request.state'} eq 'construct'){ |
Line 959 sub switch {
|
Line 1092 sub switch {
|
} |
} |
} else { |
} else { |
# Inline Menu |
# Inline Menu |
$inlineremote[$idx]= |
my @tools = (93,91,81,82,83); |
|
unless ($env{'request.state'} eq 'construct') { |
|
push(@tools,63); |
|
} |
|
if (($env{'environment.icons'} eq 'iconsonly') && |
|
(grep(/^$idx$/,@tools))) { |
|
$inlineremote[$idx] = |
|
'<a title="'.$desc.'" class="LC_menubuttons_link" href="javascript:'.$act.';">'.$pic.'</a>'; |
|
} else { |
|
$inlineremote[$idx] = |
'<a title="'.$desc.'" class="LC_menubuttons_link" href="javascript:'.$act.';">'.$pic. |
'<a title="'.$desc.'" class="LC_menubuttons_link" href="javascript:'.$act.';">'.$pic. |
'<span class="LC_menubuttons_inline_text">'.$top.' </span></a>'; |
'<span class="LC_menubuttons_inline_text">'.$top.' </span></a>'; |
|
} |
} |
} |
return ''; |
return ''; |
} |
} |
Line 1269 END
|
Line 1412 END
|
|
|
} |
} |
|
|
|
sub countdown_toggle_js { |
|
return <<"END"; |
|
|
|
function toggleCountdown() { |
|
var countdownid = document.getElementById('duedatecountdown'); |
|
var currstyle = countdownid.style.display; |
|
if (currstyle == 'inline') { |
|
countdownid.style.display = 'none'; |
|
document.getElementById('ddcountcollapse').innerHTML=''; |
|
document.getElementById('ddcountexpand').innerHTML='◄ '; |
|
} else { |
|
countdownid.style.display = 'inline'; |
|
document.getElementById('ddcountcollapse').innerHTML='► '; |
|
document.getElementById('ddcountexpand').innerHTML=''; |
|
} |
|
return; |
|
} |
|
|
|
END |
|
} |
|
|
sub utilityfunctions { |
sub utilityfunctions { |
my $currenturl=&Apache::lonnet::clutter(&Apache::lonnet::fixversion((split(/\?/,$env{'request.noversionuri'}))[0])); |
my $currenturl=&Apache::lonnet::clutter(&Apache::lonnet::fixversion((split(/\?/,$env{'request.noversionuri'}))[0])); |
if ($currenturl =~ m{^/adm/wrapper/ext/} |
if ($currenturl =~ m{^/adm/wrapper/ext/} |
Line 1297 sub utilityfunctions {
|
Line 1461 sub utilityfunctions {
|
my $end_page_annotate = |
my $end_page_annotate = |
&Apache::loncommon::end_page({'js_ready' => 1}); |
&Apache::loncommon::end_page({'js_ready' => 1}); |
|
|
my $start_page_bookmark = |
|
&Apache::loncommon::start_page('Bookmarks',undef, |
|
{'only_body' => 1, |
|
'js_ready' => 1, |
|
'bgcolor' => '#BBBBBB',}); |
|
|
|
my $end_page_bookmark = |
|
&Apache::loncommon::end_page({'js_ready' => 1}); |
|
|
|
my $confirm_switch = &mt("Editing requires switching to the resource's home server.").'\n'. |
my $confirm_switch = &mt("Editing requires switching to the resource's home server.").'\n'. |
&mt('Switch server?'); |
&mt('Switch server?'); |
|
|
my $esc_url=&escape($currenturl); |
my $esc_url=&escape($currenturl); |
my $esc_symb=&escape($currentsymb); |
my $esc_symb=&escape($currentsymb); |
|
|
|
my $countdown = &countdown_toggle_js(); |
|
|
return (<<ENDUTILITY) |
return (<<ENDUTILITY) |
|
|
var currentURL=unescape("$esc_url"); |
var currentURL=unescape("$esc_url"); |
Line 1422 function group_chat(group) {
|
Line 1579 function group_chat(group) {
|
grpchat=window.open(url,winName,'height=320,width=280,resizable=yes,location=no,menubar=no,toolbar=no'); |
grpchat=window.open(url,winName,'height=320,width=280,resizable=yes,location=no,menubar=no,toolbar=no'); |
} |
} |
|
|
function edit_bookmarks() { |
|
go(''); |
|
w_BookmarkPal_flag=1; |
|
bookmarkpal=window.open("/adm/bookmarks", |
|
"BookmarkPal", "width=500,height=505,scrollbars=0"); |
|
} |
|
|
|
function annotate() { |
function annotate() { |
w_Annotator_flag=1; |
w_Annotator_flag=1; |
annotator=window.open('','Annotator','width=365,height=265,scrollbars=0'); |
annotator=window.open('','Annotator','width=365,height=265,scrollbars=0'); |
Line 1442 function annotate() {
|
Line 1592 function annotate() {
|
annotator.document.close(); |
annotator.document.close(); |
} |
} |
|
|
function set_bookmark() { |
function open_StoredLinks_Import(rat) { |
go(''); |
var newWin; |
clienttitle=document.title; |
if (rat) { |
clienthref=location.pathname; |
newWin = window.open('/adm/wishlist?inhibitmenu=yes&mode=import&rat='+rat, |
w_bmquery_flag=1; |
'wishlistImport','scrollbars=1,resizable=1,menubar=0'); |
bmquery=window.open('','bmquery','width=365,height=165,scrollbars=0'); |
} |
bmquery.document.write( |
else { |
'$start_page_bookmark' |
newWin = window.open('/adm/wishlist?inhibitmenu=yes&mode=import', |
+'<center><form method="post"' |
'wishlistImport','scrollbars=1,resizable=1,menubar=0'); |
+' name="newlink" action="/adm/bookmarks" target="bmquery" ' |
} |
+'> <table width="340" height="150" ' |
newWin.focus(); |
+'bgcolor="#FFFFFF" align="center"><tr><td>Link Name:<br /><input ' |
|
+'type="text" name="title" size="45" value="'+clienttitle+'" />' |
|
+'<br />Address:<br /><input type="text" name="address" size="45" ' |
|
+'value="'+clienthref+'" /><br /><center><input type="submit" ' |
|
+'value="Save" /> <input type="button" value="Close" ' |
|
+'onclick="javascript:window.close();" /></center></td>' |
|
+'</tr></table></form></center>' |
|
+'$end_page_bookmark' ); |
|
bmquery.document.close(); |
|
} |
} |
|
|
|
(function (\$) { |
|
\$(document).ready(function () { |
|
\$.single=function(a){return function(b){a[0]=b;return a}}(\$([1])); |
|
/*\@cc_on |
|
if (!window.XMLHttpRequest) { |
|
\$('.LC_hoverable').each(function () { |
|
this.attachEvent('onmouseenter', function (evt) { \$.single(evt.srcElement).addClass('hover'); }); |
|
this.attachEvent('onmouseleave', function (evt) { \$.single(evt.srcElement).removeClass('hover'); }); |
|
}); |
|
} |
|
\@*/ |
|
}); |
|
}(jQuery)); |
|
|
|
$countdown |
|
|
ENDUTILITY |
ENDUTILITY |
} |
} |
|
|
Line 1862 sub required_privs {
|
Line 2019 sub required_privs {
|
return $privs; |
return $privs; |
} |
} |
|
|
|
sub countdown_timer { |
|
if (($env{'request.course.id'}) && ($env{'request.symb'} ne '') && |
|
($env{'request.filename'}=~/$LONCAPA::assess_re/) && |
|
($Apache::inputtags::status[-1] eq 'CAN_ANSWER')) { |
|
my $duedate = &Apache::lonnet::EXT("resource.0.duedate"); |
|
my @interval=&Apache::lonnet::EXT("resource.0.interval"); |
|
my $hastimeleft; |
|
if (@interval > 1) { |
|
my $first_access=&Apache::lonnet::get_first_access($interval[1]); |
|
if ($first_access > 0) { |
|
if ($first_access+$interval[0] > time) { |
|
$hastimeleft = 1; |
|
} |
|
} |
|
} |
|
if (($duedate && $duedate > time) || |
|
(!$duedate && $hastimeleft)) { |
|
my ($collapse,$expand,$alttxt,$title,$currdisp); |
|
if (@interval > 1 && $hastimeleft) { |
|
$currdisp = 'inline'; |
|
$collapse = '► '; |
|
} else { |
|
$currdisp = 'none'; |
|
$expand = '◄ '; |
|
} |
|
unless ($env{'environment.icons'} eq 'iconsonly') { |
|
$alttxt = &mt('Timer'); |
|
$title = $alttxt.' '; |
|
} |
|
my $desc = &mt('Countdown to due date/time'); |
|
return <<END; |
|
|
|
<a href="javascript:toggleCountdown();" class="LC_menubuttons_link"> |
|
<span id="ddcountcollapse" class="LC_menubuttons_inline_text"> |
|
$collapse |
|
</span></a> |
|
<span id="duedatecountdown" class="LC_menubuttons_inline_text" style="display: $currdisp;"></span> |
|
<a href="javascript:toggleCountdown();" class="LC_menubuttons_link"> |
|
<span id="ddcountexpand" class="LC_menubuttons_inline_text" >$expand</span> |
|
<img src="/res/adm/pages/timer.png" title="$desc" class="LC_icon" alt="$alttxt" /><span class="LC_menubuttons_inline_text">$title</span></a> |
|
END |
|
} |
|
} |
|
return; |
|
} |
|
|
# ================================================================ Main Program |
# ================================================================ Main Program |
|
|
BEGIN { |
BEGIN { |
Line 1880 BEGIN {
|
Line 2083 BEGIN {
|
} elsif ($configline=~/^prim\:/) { |
} elsif ($configline=~/^prim\:/) { |
my @entries = (split(/\:/, $configline))[1..5]; |
my @entries = (split(/\:/, $configline))[1..5]; |
push @primary_menu, \@entries; |
push @primary_menu, \@entries; |
|
} elsif ($configline=~/^primsub\:/) { |
|
my ($parent,@entries) = (split(/\:/, $configline))[1..4]; |
|
push (@{$primary_submenu{$parent}},\@entries); |
} elsif ($configline=~/^scnd\:/) { |
} elsif ($configline=~/^scnd\:/) { |
my @entries = (split(/\:/, $configline))[1..5]; |
my @entries = (split(/\:/, $configline))[1..5]; |
push @secondary_menu, \@entries; |
push @secondary_menu, \@entries; |
|
} elsif ($configline=~/^scndsub\:/) { |
|
my ($parent,@entries) = (split(/\:/, $configline))[1..4]; |
|
push (@{$secondary_submenu{$parent}},\@entries); |
} elsif ($configline) { |
} elsif ($configline) { |
push(@desklines,$configline); |
push(@desklines,$configline); |
} |
} |