version 1.444, 2016/04/04 17:24:05
|
version 1.451, 2016/06/19 04:27:50
|
Line 124 dropdown list when mouse hovers over top
|
Line 124 dropdown list when mouse hovers over top
|
(no hover psuedo class) via LC_hoverable class for <li> tag for top- |
(no hover psuedo class) via LC_hoverable class for <li> tag for top- |
level item, which employs jQuery to handle behavior on mouseover. |
level item, which employs jQuery to handle behavior on mouseover. |
|
|
Inputs: 4 - (a) link and (b) target for anchor href in top level item, |
Inputs: 6 - (a) link and (b) target for anchor href in top level item, |
(c) title for text wrapped by anchor tag 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. |
(d) reference to array of arrays of sub-menu items, |
|
(e) boolean to indicate whether to call &mt() to translate |
|
name of menu item, |
|
(f) optional class for <li> element in primary menu, for which |
|
sub menu is being generated. |
|
|
The underlying datastructure used in (d) contains data from mydesk.tab. |
The underlying datastructure used in (d) contains data from mydesk.tab. |
It consists of an array which has an array for each item appearing in |
It consists of an array which has an array for each item appearing in |
Line 534 sub secondary_menu {
|
Line 538 sub secondary_menu {
|
} |
} |
|
|
sub create_submenu { |
sub create_submenu { |
my ($link,$target,$title,$submenu,$translate) = @_; |
my ($link,$target,$title,$submenu,$translate,$addclass) = @_; |
return unless (ref($submenu) eq 'ARRAY'); |
return unless (ref($submenu) eq 'ARRAY'); |
my $disptarget; |
my $disptarget; |
if ($target ne '') { |
if ($target ne '') { |
$disptarget = ' target="'.$target.'"'; |
$disptarget = ' target="'.$target.'"'; |
} |
} |
my $menu = '<li class="LC_hoverable">'. |
my $menu = '<li class="LC_hoverable '.$addclass.'">'. |
'<a href="'.$link.'"'.$disptarget.'>'. |
'<a href="'.$link.'"'.$disptarget.'>'. |
'<span class="LC_nobreak">'.$title. |
'<span class="LC_nobreak">'.$title. |
'<span class="LC_fontsize_small" style="font-weight:normal;">'. |
'<span class="LC_fontsize_small" style="font-weight:normal;">'. |
Line 560 sub create_submenu {
|
Line 564 sub create_submenu {
|
# see perldoc create_submenu documentation for further information |
# see perldoc create_submenu documentation for further information |
sub build_submenu { |
sub build_submenu { |
my ($target, $submenu, $translate, $first_level) = @_; |
my ($target, $submenu, $translate, $first_level) = @_; |
if (!defined(@{$submenu})) { |
unless (@{$submenu}) { |
return ''; |
return ''; |
} |
} |
|
|
Line 808 sub innerregister {
|
Line 812 sub innerregister {
|
if ($currdir =~ m-/$-) { |
if ($currdir =~ m-/$-) { |
$is_const_dir = 1; |
$is_const_dir = 1; |
if ($thisdisfn eq '') { |
if ($thisdisfn eq '') { |
$is_const_dir = 2; |
unless (($env{'request.course.id'}) && |
|
($env{'course.'.$env{'request.course.id'}.'.num'} eq $uname) && |
|
($env{'course.'.$env{'request.course.id'}.'.domain'} eq $udom)) { |
|
$is_const_dir = 2; |
|
} |
} |
} |
} else { |
} else { |
$currdir =~ s|[^/]+$||; |
$currdir =~ s|[^/]+$||; |
Line 947 ENDMENUITEMS
|
Line 955 ENDMENUITEMS
|
} |
} |
} |
} |
} |
} |
|
my $showprogress; |
|
if (($crstype eq 'Placement') && (!$env{'request.role.adv'})) { |
|
$showprogress = &placement_progress(); |
|
} |
|
|
|
my $addremote=0; |
|
foreach (@inlineremote) { if ($_ ne '') { $addremote=1; last;} } |
|
|
my $addremote=0; |
|
foreach (@inlineremote) { if ($_ ne '') { $addremote=1; last;} } |
|
if ($addremote) { |
if ($addremote) { |
my $countdown; |
my $countdown; |
if ($env{'request.filename'} =~ /\.page$/) { |
if ($env{'request.filename'} =~ /\.page$/) { |
Line 969 ENDMENUITEMS
|
Line 982 ENDMENUITEMS
|
if ($countdown) { |
if ($countdown) { |
&Apache::lonhtmlcommon::add_breadcrumb_tool('tools',$countdown); |
&Apache::lonhtmlcommon::add_breadcrumb_tool('tools',$countdown); |
} |
} |
|
if ($showprogress) { |
|
&Apache::lonhtmlcommon::add_breadcrumb_tool('tools',$showprogress); |
|
} |
} else { |
} else { |
my @tools = @inlineremote[93,91,81,82,83]; |
my @tools = @inlineremote[93,91,81,82,83]; |
if ($countdown) { |
if ($countdown) { |
Line 987 ENDMENUITEMS
|
Line 1003 ENDMENUITEMS
|
} |
} |
&advtools_crumbs(@inlineremote); |
&advtools_crumbs(@inlineremote); |
} |
} |
|
} else { |
|
if ($showprogress) { |
|
&Apache::lonhtmlcommon::add_breadcrumb_tool('tools',$showprogress); |
|
} |
} |
} |
my ($topic_help,$topic_help_text); |
my ($topic_help,$topic_help_text); |
if ($is_const_dir == 2) { |
if ($is_const_dir == 2) { |
Line 1618 END
|
Line 1638 END
|
# LC_interval_done is true. |
# LC_interval_done is true. |
# |
# |
sub done_button_js { |
sub done_button_js { |
my ($type,$width,$height,$proctor) = @_; |
my ($type,$width,$height,$proctor,$donebuttontext) = @_; |
return unless (($type eq 'map') || ($type eq 'resource')); |
return unless (($type eq 'map') || ($type eq 'resource')); |
my %lt = &Apache::lonlocal::texthash( |
my %lt = &Apache::lonlocal::texthash( |
title => 'WARNING!', |
title => 'WARNING!', |
button => 'Done', |
|
preamble => 'You are trying to end this timed event early.', |
preamble => 'You are trying to end this timed event early.', |
map => 'Confirming that you are done will cause the time to expire and prevent you from changing any answers in the current folder.', |
map => 'Confirming that you are done will cause the time to expire and prevent you from changing any answers in the current folder.', |
resource => 'Confirming that you are done will cause the time to expire for this question, and prevent you from changing your answer(s).', |
resource => 'Confirming that you are done will cause the time to expire for this question, and prevent you from changing your answer(s).', |
Line 1635 sub done_button_js {
|
Line 1654 sub done_button_js {
|
nokey => 'A proctor key is required', |
nokey => 'A proctor key is required', |
); |
); |
my $navmap = Apache::lonnavmaps::navmap->new(); |
my $navmap = Apache::lonnavmaps::navmap->new(); |
my ($missing,$tried); |
my ($missing,$tried) = (0,0); |
if (ref($navmap)) { |
if (ref($navmap)) { |
$missing=0; |
|
$tried=0; |
|
my @resources=(); |
my @resources=(); |
if ($type eq 'map') { |
if ($type eq 'map') { |
my ($mapurl,$rid,$resurl)=&Apache::lonnet::decode_symb($env{'request.symb'}); |
my ($mapurl,$rid,$resurl)=&Apache::lonnet::decode_symb($env{'request.symb'}); |
Line 1652 sub done_button_js {
|
Line 1669 sub done_button_js {
|
} |
} |
} |
} |
foreach my $res (@resources) { |
foreach my $res (@resources) { |
if ($res->singlepart()) { |
if (ref($res->parts()) eq 'ARRAY') { |
if (!$res->tries()) { |
|
$missing++; |
|
} else { |
|
$tried++; |
|
} |
|
} else { |
|
foreach my $part (@{$res->parts()}) { |
foreach my $part (@{$res->parts()}) { |
if (!$res->tries($part)) { |
if (!$res->tries($part)) { |
$missing++; |
$missing++; |
Line 1682 sub done_button_js {
|
Line 1693 sub done_button_js {
|
$lt{'miss'} .= ' '.&mt('If you confirm you are done you will be unable to submit an answer for it.').'</p>'; |
$lt{'miss'} .= ' '.&mt('If you confirm you are done you will be unable to submit an answer for it.').'</p>'; |
} |
} |
} |
} |
|
$donebuttontext = &HTML::Entities::encode($donebuttontext,'<>&"'); |
if ($proctor) { |
if ($proctor) { |
if ($height !~ /^\d+$/) { |
if ($height !~ /^\d+$/) { |
$height = 400; |
$height = 400; |
Line 1699 sub done_button_js {
|
Line 1711 sub done_button_js {
|
<form method="post" name="LCdoneButton" action=""> |
<form method="post" name="LCdoneButton" action=""> |
<input type="hidden" name="LC_interval_done" value="" /> |
<input type="hidden" name="LC_interval_done" value="" /> |
<input type="hidden" name="LC_interval_done_proctorpass" value="" /> |
<input type="hidden" name="LC_interval_done_proctorpass" value="" /> |
<button id="LC_done-confirm-opener" type="button">$lt{'button'}</button> |
<button id="LC_done-confirm-opener" type="button">$donebuttontext</button> |
</form> |
</form> |
|
|
<div id="LC_done-confirm" title="$lt{'title'}"> |
<div id="LC_done-confirm" title="$lt{'title'}"> |
<p>$lt{'preamble'} $lt{$type}</p> |
<p>$lt{'preamble'} $lt{$type}</p> |
$lt{'miss'} |
$lt{'miss'} |
<p>$lt{'proctor'}</p> |
<p>$lt{'proctor'}</p> |
<form> |
<form name="LCdoneButtonProctor" action=""> |
<label>$lt{'key'}<input type="password" name="LC_interval_done_proctorkey" value="" /></label> |
<label>$lt{'key'}<input type="password" name="LC_interval_done_proctorkey" value="" /></label> |
<input type="submit" tabindex="-1" style="position:absolute; top:-1000px" /> |
<input type="submit" tabindex="-1" style="position:absolute; top:-1000px" /> |
</form> |
</form> |
Line 1780 END
|
Line 1792 END
|
|
|
<form method="post" name="LCdoneButton" action=""> |
<form method="post" name="LCdoneButton" action=""> |
<input type="hidden" name="LC_interval_done" value="" /> |
<input type="hidden" name="LC_interval_done" value="" /> |
<button id="LC_done-confirm-opener" type="button">$lt{'button'}</button> |
<button id="LC_done-confirm-opener" type="button">$donebuttontext</button> |
</form> |
</form> |
|
|
<div id="LC_done-confirm" title="$lt{'title'}"> |
<div id="LC_done-confirm" title="$lt{'title'}"> |
Line 2485 sub countdown_timer {
|
Line 2497 sub countdown_timer {
|
} |
} |
my $duedate = &Apache::lonnet::EXT("resource.0.duedate"); |
my $duedate = &Apache::lonnet::EXT("resource.0.duedate"); |
my @interval=&Apache::lonnet::EXT("resource.0.interval"); |
my @interval=&Apache::lonnet::EXT("resource.0.interval"); |
my ($timelimit,$usesdone,$proctor,$secret); |
my ($timelimit,$usesdone,$donebuttontext,$proctor,$secret); |
if (@interval > 1) { |
if (@interval > 1) { |
($timelimit,$usesdone,$proctor,$secret) = split(/_/,$interval[0]); |
($timelimit,my $donesuffix) = split(/_/,$interval[0],2); |
|
if ($donesuffix =~ /^done\:([^\:]+)\:(.*)$/) { |
|
$usesdone = 'done'; |
|
$donebuttontext = $1; |
|
(undef,$proctor,$secret) = split(/_/,$2); |
|
} elsif ($donesuffix =~ /^done(|_.+)$/) { |
|
$donebuttontext = &mt('Done'); |
|
($usesdone,$proctor,$secret) = split(/_/,$donesuffix); |
|
} |
my $first_access=&Apache::lonnet::get_first_access($interval[1]); |
my $first_access=&Apache::lonnet::get_first_access($interval[1]); |
if ($first_access > 0) { |
if ($first_access > 0) { |
if ($first_access+$timelimit > time) { |
if ($first_access+$timelimit > time) { |
Line 2505 sub countdown_timer {
|
Line 2525 sub countdown_timer {
|
$collapse = '► '; |
$collapse = '► '; |
if ((@interval > 1) && ($hastimeleft)) { |
if ((@interval > 1) && ($hastimeleft)) { |
if ($usesdone eq 'done') { |
if ($usesdone eq 'done') { |
$donebutton = &done_button_js($interval[1],'','',$proctor); |
$donebutton = &done_button_js($interval[1],'','',$proctor,$donebuttontext); |
} |
} |
} |
} |
} else { |
} else { |
Line 2534 END
|
Line 2554 END
|
return; |
return; |
} |
} |
|
|
|
sub placement_progress { |
|
my ($totalpoints,$incomplete) = &Apache::lonplacementtest::check_completion(undef,undef,1); |
|
my $complete = 100 - $incomplete; |
|
return '<span class="LC_placement_prog">'. |
|
&mt('Test is [_1]% complete',$complete).'</span>'; |
|
} |
|
|
# ================================================================ Main Program |
# ================================================================ Main Program |
|
|
BEGIN { |
BEGIN { |