version 1.358.2.24, 2024/12/29 01:51:03
|
version 1.371, 2016/04/02 04:30:20
|
Line 92 sub raw_href_to_link {
|
Line 92 sub raw_href_to_link {
|
|
|
sub entity_encode { |
sub entity_encode { |
my ($text)=@_; |
my ($text)=@_; |
return &HTML::Entities::encode($text, '\'<>&"'); |
return &HTML::Entities::encode($text, '<>&"'); |
} |
} |
|
|
sub direct_parm_link { |
sub direct_parm_link { |
Line 407 sub textbox {
|
Line 407 sub textbox {
|
############################################## |
############################################## |
############################################## |
############################################## |
sub checkbox { |
sub checkbox { |
my ($name,$checked,$value,$special) = @_; |
my ($name,$checked,$value) = @_; |
my $Str = '<input type="checkbox" name="'.$name.'" '; |
my $Str = '<input type="checkbox" name="'.$name.'" '; |
if (defined($value)) { |
if (defined($value)) { |
$Str .= 'value="'.$value.'"'; |
$Str .= 'value="'.$value.'"'; |
Line 415 sub checkbox {
|
Line 415 sub checkbox {
|
if ($checked) { |
if ($checked) { |
$Str .= ' checked="checked"'; |
$Str .= ' checked="checked"'; |
} |
} |
$Str .= $special.' />'; |
$Str .= ' />'; |
return $Str; |
return $Str; |
} |
} |
|
|
Line 451 sub radio {
|
Line 451 sub radio {
|
&date_setter returns html and javascript for a compact date-setting form. |
&date_setter returns html and javascript for a compact date-setting form. |
To retrieve values from it, use &get_date_from_form. |
To retrieve values from it, use &get_date_from_form. |
|
|
Inputs |
|
|
|
=over 4 |
=over 4 |
|
|
|
=item Inputs |
|
|
|
=over |
|
|
=item $dname |
=item $dname |
|
|
The name to prepend to the form elements. |
The name to prepend to the form elements. |
Line 515 If true, text boxes for seconds are omit
|
Line 517 If true, text boxes for seconds are omit
|
|
|
=back |
=back |
|
|
Bugs |
=item Bugs |
|
|
The method used to restrict user input will fail in the year 2400. |
The method used to restrict user input will fail in the year 2400. |
|
|
|
=back |
|
|
=cut |
=cut |
|
|
############################################## |
############################################## |
Line 534 sub date_setter {
|
Line 538 sub date_setter {
|
|
|
if (! defined($state) || $state ne 'disabled') { |
if (! defined($state) || $state ne 'disabled') { |
$state = ''; |
$state = ''; |
} else { |
|
$state = 'disabled="disabled"'; |
|
} |
} |
if (! defined($no_hh_mm_ss)) { |
if (! defined($no_hh_mm_ss)) { |
$no_hh_mm_ss = 0; |
$no_hh_mm_ss = 0; |
Line 685 ENDJS
|
Line 687 ENDJS
|
$monthselector,$dayselector,$yearselector, |
$monthselector,$dayselector,$yearselector, |
$hourselector). |
$hourselector). |
$tzone; |
$tzone; |
|
|
} elsif ($no_ss) { |
} elsif ($no_ss) { |
$result .= &mt('[_1] [_2] [_3] [_4] [_5]m', |
$result .= &mt('[_1] [_2] [_3] [_4] [_5]m', |
$monthselector,$dayselector,$yearselector, |
$monthselector,$dayselector,$yearselector, |
$hourselector,$minuteselector). |
$hourselector,$minuteselector). |
$tzone; |
$tzone; |
|
|
} else { |
} else { |
$result .= &mt('[_1] [_2] [_3] [_4] [_5]m [_6]s ', |
$result .= &mt('[_1] [_2] [_3] [_4] [_5]m [_6]s ', |
$monthselector,$dayselector,$yearselector, |
$monthselector,$dayselector,$yearselector, |
Line 741 sub build_url {
|
Line 745 sub build_url {
|
|
|
get_date_from_form retrieves the date specified in an &date_setter form. |
get_date_from_form retrieves the date specified in an &date_setter form. |
|
|
Inputs: |
=over |
|
|
|
=item Inputs: |
|
|
=over 4 |
=over 4 |
|
|
Line 755 The unix time to use as the default in c
|
Line 761 The unix time to use as the default in c
|
|
|
=back |
=back |
|
|
|
=back |
|
|
Returns: Unix time represented in the form. |
Returns: Unix time represented in the form. |
|
|
=cut |
=cut |
Line 926 sub javascript_docopen {
|
Line 934 sub javascript_docopen {
|
Returns html for a selection box which allows the user to choose the |
Returns html for a selection box which allows the user to choose the |
enrollment status of students. The selection box name is 'Status'. |
enrollment status of students. The selection box name is 'Status'. |
|
|
Inputs: |
=over |
|
|
|
=item Inputs: |
|
|
$status: the currently selected status. If undefined the value of |
$status: the currently selected status. If undefined the value of |
$env{'form.Status'} is taken. If that is undefined, a value of 'Active' |
$env{'form.Status'} is taken. If that is undefined, a value of 'Active' |
Line 940 $size: the size (number of lines) of the
|
Line 950 $size: the size (number of lines) of the
|
$onchange: javascript to use when the value is changed. Enclosed in |
$onchange: javascript to use when the value is changed. Enclosed in |
double quotes, ""s, not single quotes. |
double quotes, ""s, not single quotes. |
|
|
|
=back |
|
|
Returns: a perl string as described. |
Returns: a perl string as described. |
|
|
=cut |
=cut |
Line 987 sub StatusOptions {
|
Line 999 sub StatusOptions {
|
|
|
=pod |
=pod |
|
|
=item Progess Window Handling Routines |
=item Progress Window Handling Routines |
|
|
These routines handle the creation, update, increment, and closure of |
These routines handle the creation, update, increment, and closure of |
progress windows. The progress window reports to the user the number |
progress windows. The progress window reports to the user the number |
Line 1001 of items completed and an estimate of th
|
Line 1013 of items completed and an estimate of th
|
Writes javascript to the client to open a progress window and returns a |
Writes javascript to the client to open a progress window and returns a |
data structure used for bookkeeping. |
data structure used for bookkeeping. |
|
|
Inputs |
=over |
|
|
=over 4 |
=item Inputs |
|
|
|
=over |
|
|
=item $r Apache request |
=item $r Apache request |
|
|
=item $number_to_do The total number of items being processed. |
=item $number_to_do The total number of items being processed. |
|
|
=item $preamble Optional HTML to display before the progress bar. |
=back |
|
|
=back |
=back |
|
|
Returns a hash containing the progress state data structure. |
Returns a hash containing the progress state data structure. |
If $number_to_do is zero or null, an indeterminate progress bar will |
|
be used. |
|
|
|
=item &Update_PrgWin() |
=item &Update_PrgWin() |
|
|
Updates the text in the progress indicator. Does not increment the count. |
Updates the text in the progress indicator. Does not increment the count. |
See &Increment_PrgWin. |
See &Increment_PrgWin. |
|
|
Inputs: |
=over |
|
|
|
=item Inputs: |
|
|
=over 4 |
=over 4 |
|
|
Line 1034 Inputs:
|
Line 1048 Inputs:
|
|
|
=back |
=back |
|
|
|
=back |
|
|
Returns: none |
Returns: none |
|
|
|
|
=item Increment_PrgWin() |
=item &Increment_PrgWin() |
|
|
Increment the count of items completed for the progress window by $step or 1 if no step is provided. |
Increment the count of items completed for the progress window by $step or 1 if no step is provided. |
|
|
Inputs: |
=over |
|
|
|
=item Inputs: |
|
|
=over 4 |
=over 4 |
|
|
=item $r Apache request |
=item $r |
|
|
=item $prog_state Pointer to the data structure returned by Create_PrgWin |
Apache request |
|
|
|
=item $prog_state |
|
|
=item $extraInfo A description of the items being iterated over. Typically |
Pointer to the data structure returned by Create_PrgWin |
'student'. |
|
|
|
=item $step (optional) counter step. Will be set to default 1 if ommited. step must be greater than 0 or empty. |
=item $extraInfo |
|
|
|
A description of the items being iterated over. Typically 'student'. |
|
|
|
=item $step |
|
|
|
(optional) counter step. Will be set to default 1 if ommited. step must be greater than 0 or empty. |
|
|
|
=back |
|
|
=back |
=back |
|
|
Line 1063 Returns: none
|
Line 1090 Returns: none
|
|
|
Closes the progress window. |
Closes the progress window. |
|
|
Inputs: |
=over |
|
|
|
=item Inputs: |
|
|
=over 4 |
=over 4 |
|
|
Line 1073 Inputs:
|
Line 1102 Inputs:
|
|
|
=back |
=back |
|
|
|
=back |
|
|
Returns: none |
Returns: none |
|
|
=back |
=back |
Line 1085 Returns: none
|
Line 1116 Returns: none
|
|
|
# Create progress |
# Create progress |
sub Create_PrgWin { |
sub Create_PrgWin { |
my ($r,$number_to_do,$preamble)=@_; |
my ($r,$number_to_do)=@_; |
my %prog_state; |
my %prog_state; |
$prog_state{'done'}=0; |
$prog_state{'done'}=0; |
$prog_state{'firststart'}=&Time::HiRes::time(); |
$prog_state{'firststart'}=&Time::HiRes::time(); |
$prog_state{'laststart'}=&Time::HiRes::time(); |
$prog_state{'laststart'}=&Time::HiRes::time(); |
$prog_state{'max'}=$number_to_do; |
$prog_state{'max'}=$number_to_do; |
&Apache::loncommon::LCprogressbar($r,$prog_state{'max'},$preamble); |
&Apache::loncommon::LCprogressbar($r); |
return %prog_state; |
return %prog_state; |
} |
} |
|
|
# update progress |
# update progress |
sub Update_PrgWin { |
sub Update_PrgWin { |
my ($r,$prog_state,$displayString)=@_; |
my ($r,$prog_state,$displayString)=@_; |
&Apache::loncommon::LCprogressbarUpdate($r,undef,$displayString,$$prog_state{'max'}); |
&Apache::loncommon::LCprogressbarUpdate($r,undef,$displayString); |
$$prog_state{'laststart'}=&Time::HiRes::time(); |
$$prog_state{'laststart'}=&Time::HiRes::time(); |
} |
} |
|
|
Line 1148 sub Increment_PrgWin {
|
Line 1179 sub Increment_PrgWin {
|
if ($$prog_state{'max'}) { |
if ($$prog_state{'max'}) { |
$percent=int(100.*$current/$$prog_state{'max'}); |
$percent=int(100.*$current/$$prog_state{'max'}); |
} |
} |
&Apache::loncommon::LCprogressbarUpdate($r,$percent,$timeinfo,$$prog_state{'max'}); |
&Apache::loncommon::LCprogressbarUpdate($r,$percent,$timeinfo); |
$$prog_state{'laststart'}=&Time::HiRes::time(); |
$$prog_state{'laststart'}=&Time::HiRes::time(); |
} |
} |
|
|
Line 1163 sub Close_PrgWin {
|
Line 1194 sub Close_PrgWin {
|
# ------------------------------------------------------- Puts directory header |
# ------------------------------------------------------- Puts directory header |
|
|
sub crumbs { |
sub crumbs { |
my ($uri,$target,$prefix,$form,$skiplast,$onclick)=@_; |
my ($uri,$target,$prefix,$form,$skiplast)=@_; |
# You cannot crumbnify uploaded or adm resources |
# You cannot crumbnify uploaded or adm resources |
if ($uri=~/^\/*(uploaded|adm)\//) { return &mt('(Internal Course/Community Content)'); } |
if ($uri=~/^\/*(uploaded|adm)\//) { return &mt('(Internal Course/Group Content)'); } |
if ($target) { |
if ($target) { |
$target = ' target="'. |
$target = ' target="'. |
&Apache::loncommon::escape_single($target).'"'; |
&Apache::loncommon::escape_single($target).'"'; |
Line 1185 sub crumbs {
|
Line 1216 sub crumbs {
|
} else { |
} else { |
$path.='/'; |
$path.='/'; |
} |
} |
if ($path eq '/res/') { |
|
unless (&Apache::lonnet::allowed('bre',$path)) { |
|
$output.="$dir/"; |
|
next; |
|
} |
|
} |
|
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"$onclick$target>$dir</a>/}; |
$output.=qq{<a href="$href"$target>$dir</a>/}; |
} else { |
} else { |
$output.=qq{<a href="$href_path"$onclick$target>$dir</a>/}; |
$output.=qq{<a href="$href_path"$target>$dir</a>/}; |
} |
} |
} |
} |
} else { |
} else { |
Line 1268 sub htmlareaheaders {
|
Line 1293 sub htmlareaheaders {
|
ENDEDITOR |
ENDEDITOR |
} |
} |
$s.=(<<ENDJQUERY); |
$s.=(<<ENDJQUERY); |
<script type="text/javascript" src="/adm/jQuery/js/jquery-3.7.1.min.js"></script> |
<script type="text/javascript" src="/adm/jQuery/js/jquery-1.11.3.min.js"></script> |
<script type="text/javascript" src="/adm/jQuery/js/jquery-ui-1.13.3.custom.min.js"></script> |
<script type="text/javascript" src="/adm/jQuery/js/jquery-ui-1.11.4.custom.min.js"></script> |
<link rel="stylesheet" type="text/css" href="/adm/jQuery/css/smoothness/jquery-ui-1.13.3.custom.min.css" /> |
<link rel="stylesheet" type="text/css" href="/adm/jQuery/css/smoothness/jquery-ui-1.11.4.custom.css" /> |
<script type="text/javascript" src="/adm/jpicker/js/jpicker-1.1.6.min.js" > |
<script type="text/javascript" src="/adm/jpicker/js/jpicker-1.1.6.min.js" > |
</script> |
</script> |
<link rel="stylesheet" type="text/css" href="/adm/jpicker/css/jPicker-1.1.6.min.css" /> |
<link rel="stylesheet" type="text/css" href="/adm/jpicker/css/jPicker-1.1.6.min.css" /> |
Line 1679 sub show_return_link {
|
Line 1704 sub show_return_link {
|
if ($env{'request.noversionuri'}=~m{^/priv/} || |
if ($env{'request.noversionuri'}=~m{^/priv/} || |
$env{'request.uri'}=~m{^/priv/}) { return 1; } |
$env{'request.uri'}=~m{^/priv/}) { return 1; } |
return if ($env{'request.noversionuri'} eq '/adm/supplemental'); |
return if ($env{'request.noversionuri'} eq '/adm/supplemental'); |
|
return if (($env{'course.'.$env{'request.course.id'}.'.type'} eq 'Placement') && |
if (($env{'request.noversionuri'} =~ m{^/adm/viewclasslist($|\?)}) |
(!$env{'request.role.adv'})); |
|
if (($env{'request.noversionuri'} =~ m{^/adm/(viewclasslist|navmaps)($|\?)}) |
|| ($env{'request.noversionuri'} =~ m{^/adm/.*/aboutme($|\?)})) { |
|| ($env{'request.noversionuri'} =~ m{^/adm/.*/aboutme($|\?)})) { |
|
|
return if ($env{'form.register'}); |
return if ($env{'form.register'}); |
Line 1693 sub show_return_link {
|
Line 1719 sub show_return_link {
|
(($env{'request.noversionuri'}=~/^\/adm\//) && |
(($env{'request.noversionuri'}=~/^\/adm\//) && |
($env{'request.noversionuri'}!~/^\/adm\/wrapper\//) && |
($env{'request.noversionuri'}!~/^\/adm\/wrapper\//) && |
($env{'request.noversionuri'}!~ |
($env{'request.noversionuri'}!~ |
m{^/adm/.*/(smppg|bulletinboard)($|\?)}) |
m{^/adm/.*/(smppg|bulletinboard|exttools?)($|\?)}) |
)); |
)); |
} |
} |
|
|
Line 1753 clientTime = (new Date()).getTime();
|
Line 1779 clientTime = (new Date()).getTime();
|
END |
END |
} |
} |
|
|
## |
|
# Client-side javascript to convert any dashes in text pasted |
|
# into textbox(es) for numericalresponse item(s) to a standard |
|
# minus, i.e., - . Calls to dash_to_minus_js() in end_problem() |
|
# and in loncommon::endbodytag() for a .page (arg: dashjs => 1) |
|
# |
|
# Will apply to any input tag with class: LC_numresponse_text. |
|
# Currently set in start_textline for numericalresponse items. |
|
# |
|
|
|
sub dash_to_minus_js { |
|
return <<'ENDJS'; |
|
|
|
<script type="text/javascript"> |
|
//<![CDATA[ |
|
//<!-- BEGIN LON-CAPA Internal |
|
document.addEventListener("DOMContentLoaded", (event) => { |
|
const numresp = document.querySelectorAll("input.LC_numresponse_text"); |
|
if (numresp.length > 0) { |
|
Array.from(numresp).forEach((el) => { |
|
el.addEventListener("paste", (e) => { |
|
e.preventDefault(); |
|
e.stopPropagation(); |
|
let p = (e.clipboardData || window.clipboardData).getData("text"); |
|
p.toString(); |
|
var regex; |
|
try |
|
{ |
|
regex = new RegExp ("\\p{Dash}", "gu"); |
|
} |
|
catch (e) { regex = new RegExp ("[\\u058A\\u05BE\\u1400\\u1806\\u2010-\\u2015\\u2212\\u2E3A\\u2E3B\\u2E5D\\u301C\\uFE58\\uFE63\\uFF0D]","g"); } |
|
p = p.replace(regex,'-'); |
|
putInText(p); |
|
}); |
|
}); |
|
} |
|
const putInText = (newText, el = document.activeElement) => { |
|
const [start, end] = [el.selectionStart, el.selectionEnd]; |
|
el.setRangeText(newText, start, end, 'end'); |
|
} |
|
}); |
|
// END LON-CAPA Internal --> |
|
//]]> |
|
</script> |
|
|
|
ENDJS |
|
} |
|
|
|
############################################################ |
############################################################ |
############################################################ |
############################################################ |
|
|
Line 1815 A link to help for the component will be
|
Line 1793 A link to help for the component will be
|
|
|
All inputs can be undef without problems. |
All inputs can be undef without problems. |
|
|
Inputs: $component (the text on the right side of the breadcrumbs trail), |
=over |
$component_help (the help item filename (without .tex extension). |
|
$menulink (boolean, controls whether to include a link to /adm/menu) |
=item Inputs: |
$helplink (if 'nohelp' don't include the orange help link) |
|
$crumbs_style optional style attribute for div containing breadcrumbs |
=over |
unless called from docs_breadcrumbs |
|
$no_mt (optional flag, 1 if &mt() is _not_ to be applied to $component |
=item $component |
when including the text on the right. |
|
$CourseBreadcrumbs (optional flag, 1 if &breadcrumbs called from &docs_breadcrumbs, |
the text on the right side of the breadcrumbs trail |
because breadcrumbs are being) |
|
$topic_help (optional help item to be displayed on right side of the breadcrumbs |
=item $component_help |
row, using loncommon::help_open_topic() to generate the link. |
|
$topic_help_text (text to include in the link in the optional help item |
the help item filename (without .tex extension). |
on the right side of the breadcrumbs row. |
|
|
=item $menulink |
|
|
|
boolean, controls whether to include a link to /adm/menu |
|
|
|
=item $helplink |
|
|
|
if 'nohelp' don't include the orange help link |
|
|
|
=item $css_class |
|
|
|
optional name for the class to apply to the table for CSS |
|
|
|
=item $no_mt |
|
|
|
optional flag, 1 if &mt() is _not_ to be applied to $component when including the text on the right |
|
|
|
=item $CourseBreadcrumbs |
|
|
|
optional flag, 1 if &breadcrumbs called from &docs_breadcrumbs, because breadcrumbs are being |
|
used to display hierarchy for current folder shown in the Course Editor. |
|
|
|
=item $topic_help |
|
|
|
optional help item to be displayed on right side of the breadcrumbs row, using |
|
loncommon::help_open_topic() to generate the link. |
|
|
|
=item $topic_help_text |
|
|
|
text to include in the link in the optional help item ($topic_help) on the right |
|
side of the breadcrumbs row. |
|
|
|
=back |
|
|
|
=back |
|
|
Returns a string containing breadcrumbs for the current page. |
Returns a string containing breadcrumbs for the current page. |
|
|
Line 1856 returns: nothing
|
Line 1868 returns: nothing
|
my %tools = (); |
my %tools = (); |
|
|
sub breadcrumbs { |
sub breadcrumbs { |
my ($component,$component_help,$menulink,$helplink,$crumbs_style,$no_mt, |
my ($component,$component_help,$menulink,$helplink,$css_class,$no_mt, |
$CourseBreadcrumbs,$topic_help,$topic_help_text) = @_; |
$CourseBreadcrumbs,$topic_help,$topic_help_text,$crstype) = @_; |
# |
# |
|
$css_class ||= 'LC_breadcrumbs'; |
|
|
# Make the faq and bug data cascade |
# Make the faq and bug data cascade |
my $faq = ''; |
my $faq = ''; |
my $bug = ''; |
my $bug = ''; |
Line 1870 returns: nothing
|
Line 1884 returns: nothing
|
# |
# |
# The first one should be the course or a menu link |
# The first one should be the course or a menu link |
if (!defined($menulink)) { $menulink=1; } |
if (!defined($menulink)) { $menulink=1; } |
|
if ((($crstype eq 'Placement') || (($env{'request.course.id'}) && |
|
($env{'course.'.$env{'request.course.id'}.'.type'} eq 'Placement'))) && |
|
(!$env{'request.role.adv'})) { |
|
undef($menulink); |
|
} |
if ($menulink) { |
if ($menulink) { |
my $description = 'Menu'; |
my $description = 'Menu'; |
my $no_mt_descr = 0; |
my $no_mt_descr = 0; |
Line 1880 returns: nothing
|
Line 1899 returns: nothing
|
$env{'course.'.$env{'request.course.id'}.'.description'}; |
$env{'course.'.$env{'request.course.id'}.'.description'}; |
$no_mt_descr = 1; |
$no_mt_descr = 1; |
if ($env{'request.noversionuri'} =~ |
if ($env{'request.noversionuri'} =~ |
m{^/?public/($match_domain)/($match_courseid)/syllabus$}) { |
m{^/public/($match_domain)/($match_courseid)/syllabus$}) { |
unless (($env{'course.'.$env{'request.course.id'}.'.domain'} eq $1) && |
unless (($env{'course.'.$env{'request.course.id'}.'.domain'} eq $1) && |
($env{'course.'.$env{'request.course.id'}.'.num'} eq $2)) { |
($env{'course.'.$env{'request.course.id'}.'.num'} eq $2)) { |
$description = 'Menu'; |
$description = 'Menu'; |
Line 1994 returns: nothing
|
Line 2013 returns: nothing
|
} |
} |
if (($links ne '') || ($nav_and_tools)) { |
if (($links ne '') || ($nav_and_tools)) { |
&render_tools(\$links); |
&render_tools(\$links); |
unless ($CourseBreadcrumbs) { |
$links = &htmltag('div', $links, |
my $args = { id => 'LC_breadcrumbs' }; |
{ id => "LC_breadcrumbs" }) unless ($CourseBreadcrumbs) ; |
if ($crumbs_style ne '') { |
|
$args->{'style'} = $crumbs_style; |
|
} |
|
$links = &htmltag('div', $links, $args); |
|
} |
|
} |
} |
my $adv_tools = 0; |
my $adv_tools = 0; |
if (ref($tools{'advtools'}) eq 'ARRAY') { |
if (ref($tools{'advtools'}) eq 'ARRAY') { |
Line 2038 Adds $html to $category of the breadcrum
|
Line 2052 Adds $html to $category of the breadcrum
|
$html is usually a link to a page that invokes a function on the currently |
$html is usually a link to a page that invokes a function on the currently |
displayed data (e.g. print when viewing a problem) |
displayed data (e.g. print when viewing a problem) |
|
|
Currently there are 3 possible values for $category: |
=over |
|
|
|
=item Currently there are 3 possible values for $category: |
|
|
=over |
=over |
|
|
Line 2052 remaining items in right of breadcrumbs
|
Line 2068 remaining items in right of breadcrumbs
|
advanced tools shown in a separate box below breadcrumbs line |
advanced tools shown in a separate box below breadcrumbs line |
|
|
=back |
=back |
|
|
|
=back |
|
|
returns: nothing |
returns: nothing |
|
|
=cut |
=cut |
Line 2101 returns: a hash containing the current b
|
Line 2119 returns: a hash containing the current b
|
Creates html for breadcrumb tools (categories navigation and tools) and inserts |
Creates html for breadcrumb tools (categories navigation and tools) and inserts |
\$breadcrumbs at the correct position. |
\$breadcrumbs at the correct position. |
|
|
input: \$breadcrumbs - a reference to the string containing prepared |
=over |
breadcrumbs. |
|
|
=item input: |
|
|
|
=over |
|
|
|
=item \$breadcrumbs - a reference to the string containing prepared breadcrumbs. |
|
|
|
=back |
|
|
|
=back |
|
|
returns: nothing |
returns: nothing |
|
|
Line 2128 returns: nothing
|
Line 2155 returns: nothing
|
Creates html for advanced tools (category advtools) and inserts \$breadcrumbs |
Creates html for advanced tools (category advtools) and inserts \$breadcrumbs |
at the correct position. |
at the correct position. |
|
|
input: \$breadcrumbs - a reference to the string containing prepared |
=over |
breadcrumbs (after render_tools call). |
|
|
=item input: |
|
|
|
=over |
|
|
|
=item \$breadcrumbs - a reference to the string containing prepared breadcrumbs (after render_tools call). |
|
|
|
=back |
|
|
|
=back |
|
|
returns: nothing |
returns: nothing |
|
|
Line 2162 sub docs_breadcrumbs {
|
Line 2198 sub docs_breadcrumbs {
|
my $foldername=shift(@folders); |
my $foldername=shift(@folders); |
if ($folderpath) {$folderpath.='&';} |
if ($folderpath) {$folderpath.='&';} |
$folderpath.=$folder.'&'.$foldername; |
$folderpath.=$folder.'&'.$foldername; |
my $url = $env{'request.use_absolute'}; |
my $url; |
if ($allowed) { |
if ($allowed) { |
$url .= '/adm/coursedocs?folderpath='; |
$url = '/adm/coursedocs?folderpath='; |
} else { |
} else { |
$url .= '/adm/supplemental?folderpath='; |
$url = '/adm/supplemental?folderpath='; |
} |
} |
$url .= &escape($folderpath); |
$url .= &escape($folderpath); |
my $name=&unescape($foldername); |
my $name=&unescape($foldername); |
Line 2591 sub course_custom_roles {
|
Line 2627 sub course_custom_roles {
|
|
|
|
|
sub resource_info_box { |
sub resource_info_box { |
my ($symb,$onlyfolderflag,$stuvcurrent,$stuvdisp,$divforres)=@_; |
my ($symb,$onlyfolderflag,$stuvcurrent,$stuvdisp)=@_; |
my $return=''; |
my $return=''; |
if (($stuvcurrent ne '') || ($divforres)) { |
if ($stuvcurrent ne '') { |
$return = '<div class="LC_left_float">'; |
$return = '<div class="LC_left_float">'; |
} |
} |
if ($symb) { |
if ($symb) { |
Line 2622 sub resource_info_box {
|
Line 2658 sub resource_info_box {
|
} else { |
} else { |
$return='<p><span class="LC_error">'.&mt('No context provided.').'</span></p>'; |
$return='<p><span class="LC_error">'.&mt('No context provided.').'</span></p>'; |
} |
} |
if (($stuvcurrent ne '') || ($divforres)) { |
if ($stuvcurrent ne '') { |
$return .= '</div>'; |
$return .= '</div>'; |
} |
} |
return $return; |
return $return; |
Line 2637 sub resource_info_box {
|
Line 2673 sub resource_info_box {
|
# |
# |
|
|
sub display_usage { |
sub display_usage { |
my ($current_disk_usage,$disk_quota,$context) = @_; |
my ($current_disk_usage,$disk_quota) = @_; |
my $usage = $current_disk_usage/1024; |
my $usage = $current_disk_usage/1000; |
my $quota = $disk_quota/1024; |
my $quota = $disk_quota/1000; |
my $percent; |
my $percent; |
if ($disk_quota == 0) { |
if ($disk_quota == 0) { |
$percent = 100.0; |
$percent = 100.0; |
Line 2663 sub display_usage {
|
Line 2699 sub display_usage {
|
if ($prog_width > 100) { |
if ($prog_width > 100) { |
$prog_width = 100; |
$prog_width = 100; |
} |
} |
my $display = 'block'; |
|
if ($context eq 'authoring') { |
|
$display = 'inline'; |
|
} |
|
return ' |
return ' |
<div id="meter1" align="left" style="display:'.$display.'" '.$cssclass.'>'.&mt('Currently using [_1] of the [_2] available.',$usage.' MB <span style="font-weight:bold;">('.$percent.'%)</span>',$quota.' MB')."\n". |
<div id="meter1" align="left" '.$cssclass.'>'.&mt('Currently using [_1] of the [_2] available.',$usage.' MB <span style="font-weight:bold;">('.$percent.'%)</span>',$quota.' MB')."\n". |
' <div id="meter2" style="display:block; margin-top:3px; margin-bottom:3px; margin-left:0px; margin-right:0px; width:400px; border:1px solid #000000; height:10px;">'."\n". |
' <div id="meter2" style="display:block; margin-top:5px; margin-bottom:5px; margin-left:0px; margin-right:0px; width:400px; border:1px solid #000000; height:10px;">'."\n". |
' <div id="meter3" style="display:block; background-color:'.$color.'; width:'.$prog_width.'%; height:10px; color:#000000; margin:0px;"></div>'."\n". |
' <div id="meter3" style="display:block; background-color:'.$color.'; width:'.$prog_width.'%; height:10px; color:#000000; margin:0px;"></div>'."\n". |
' </div>'."\n". |
' </div>'."\n". |
' </div>'; |
' </div>'; |
Line 3353 PARAMSONE
|
Line 3385 PARAMSONE
|
if (itemid != null) { |
if (itemid != null) { |
itemh = itemid.offsetHeight; |
itemh = itemid.offsetHeight; |
} |
} |
var primaryheight = 0; |
var primaryheight = document.getElementById('LC_nav_bar').offsetHeight; |
if (document.getElementById('LC_nav_bar') != null) { |
var secondaryheight; |
primaryheight = document.getElementById('LC_nav_bar').offsetHeight; |
|
} |
|
var secondaryheight = 0; |
|
if (document.getElementById('LC_secondary_menu') != null) { |
if (document.getElementById('LC_secondary_menu') != null) { |
secondaryheight = document.getElementById('LC_secondary_menu').offsetHeight; |
secondaryheight = document.getElementById('LC_secondary_menu').offsetHeight; |
} |
} |
var crumbsheight = 0; |
var crumbsheight = document.getElementById('LC_breadcrumbs').offsetHeight; |
if (document.getElementById('LC_breadcrumbs') != null) { |
|
crumbsheight = document.getElementById('LC_breadcrumbs').offsetHeight; |
|
} |
|
var dccidheight = 0; |
var dccidheight = 0; |
if (document.getElementById('dccid') != null) { |
if (document.getElementById('dccid') != null) { |
dccidheight = document.getElementById('dccid').offsetHeight; |
dccidheight = document.getElementById('dccid').offsetHeight; |
Line 3437 THIRD
|
Line 3463 THIRD
|
sub javascript_jumpto_resource { |
sub javascript_jumpto_resource { |
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 $confirm_new_tab = &mt("Editing requires using the resource's home server.")."\n". |
|
&mt('Open a new browser tab?'); |
|
&js_escape(\$confirm_switch); |
&js_escape(\$confirm_switch); |
&js_escape(\$confirm_new_tab); |
|
return (<<ENDUTILITY) |
return (<<ENDUTILITY) |
|
|
function go(url) { |
function go(url) { |
if (url!='' && url!= null) { |
if (url!='' && url!= null) { |
currentURL = null; |
currentURL = null; |
currentSymb= null; |
currentSymb= null; |
var lcHostname = setLCHost(); |
window.location.href=url; |
if (lcHostname!='' && lcHostname!= null) { |
|
var RegExp = /^https?\:/; |
|
if (RegExp.test(url)) { |
|
window.location.href=url; |
|
} else { |
|
window.location.href=lcHostname+url; |
|
} |
|
} else { |
|
window.location.href=url; |
|
} |
|
} |
} |
} |
} |
|
|
function need_switchserver(url,target) { |
function need_switchserver(url) { |
if (url!='' && url!= null) { |
if (url!='' && url!= null) { |
if (target == '_blank') { |
if (confirm("$confirm_switch")) { |
if (confirm("$confirm_new_tab")) { |
|
window.open(url,target); |
|
} |
|
} else if (confirm("$confirm_switch")) { |
|
go(url); |
go(url); |
} |
} |
} |
} |
Line 3479 ENDUTILITY
|
Line 3488 ENDUTILITY
|
} |
} |
|
|
sub jump_to_editres { |
sub jump_to_editres { |
my ($cfile,$home,$switchserver,$forceedit,$forcereg,$symb,$shownsymb, |
my ($cfile,$home,$switchserver,$forceedit,$forcereg,$symb,$folderpath, |
$folderpath,$title,$hostname,$idx,$suppurl,$todocs,$suppanchor) = @_; |
$title,$idx,$suppurl,$todocs) = @_; |
my ($jscall,$anchor,$usehttp,$usehttps,$is_ext,$target); |
my $jscall; |
if ($switchserver) { |
if ($switchserver) { |
if ($home) { |
if ($home) { |
my $resedit; |
|
if ($cfile =~ m{^/priv/($match_domain)/($match_username)/}) { |
|
my ($audom,$auname) = ($1,$2); |
|
unless (&Apache::lonnet::is_course($audom,$auname)) { |
|
if (($symb ne '') && ($env{'request.course.id'}) && |
|
(&Apache::lonnet::allowed('mdc',$env{'request.course.id'}))) { |
|
unless (&Apache::lonnet::can_switchserver($env{'user.domain'},$home)) { |
|
$target = '_blank'; |
|
$resedit = 1; |
|
} |
|
} |
|
} |
|
} |
|
$cfile = '/adm/switchserver?otherserver='.$home.'&role='. |
$cfile = '/adm/switchserver?otherserver='.$home.'&role='. |
&HTML::Entities::encode($env{'request.role'},'"<>&'); |
&HTML::Entities::encode($env{'request.role'},'"<>&'); |
if ($shownsymb) { |
if ($symb) { |
$cfile .= '&symb='.&HTML::Entities::encode($shownsymb,'"<>&'); |
$cfile .= '&symb='.&HTML::Entities::encode($symb,'"<>&'); |
if ($resedit) { |
|
$cfile .= '&edit=1'; |
|
} |
|
} elsif ($folderpath) { |
} elsif ($folderpath) { |
$cfile .= '&folderpath='.&HTML::Entities::encode($folderpath,'"<>&'); |
$cfile .= '&folderpath='.&HTML::Entities::encode($folderpath,'"<>&'); |
} |
} |
Line 3513 sub jump_to_editres {
|
Line 3506 sub jump_to_editres {
|
if ($forcereg) { |
if ($forcereg) { |
$cfile .= '&register=1'; |
$cfile .= '&register=1'; |
} |
} |
$jscall = "need_switchserver('".&Apache::loncommon::escape_single($cfile)."','$target');"; |
$jscall = "need_switchserver('".&Apache::loncommon::escape_single($cfile)."');"; |
} |
} |
} else { |
} else { |
unless ($cfile =~ m{^/priv/}) { |
unless ($cfile =~ m{^/priv/}) { |
if ($cfile =~ m{^(/adm/wrapper/ext/([^#]+))(?:|#([^#]+))$}) { |
|
$cfile = $1; |
|
my $extlink = $2; |
|
$anchor = $3; |
|
$is_ext = 1; |
|
if (($extlink !~ /^https:/) && ($ENV{'SERVER_PORT'} == 443)) { |
|
unless ((&Apache::lonnet::uses_sts()) || (&Apache::lonnet::waf_allssl($hostname))) { |
|
$usehttp = 1; |
|
} |
|
} elsif ($env{'request.use_absolute'}) { |
|
if ($env{'request.use_absolute'} =~ m{^https://}) { |
|
$usehttps = 1; |
|
} |
|
} |
|
} elsif ($cfile =~ m{^/?public/($match_domain)/($match_courseid)/syllabus}) { |
|
if ($ENV{'SERVER_PORT'} == 443) { |
|
my ($cdom,$cnum) = ($1,$2); |
|
if (($env{'request.course.id'}) && |
|
($env{'course.'.$env{'request.course.id'}.'.num'} eq $cnum) && |
|
($env{'course.'.$env{'request.course.id'}.'.domain'} eq $cdom)) { |
|
if ($env{'course.'.$env{'request.course.id'}.'.externalsyllabus'} =~ m{^http://}) { |
|
unless ((&Apache::lonnet::uses_sts()) || (&Apache::lonnet::waf_allssl($hostname))) { |
|
$usehttp = 1; |
|
} |
|
} |
|
} |
|
} elsif ($env{'request.use_absolute'}) { |
|
if ($env{'request.use_absolute'} =~ m{^https://}) { |
|
$usehttps = 1; |
|
} |
|
} |
|
} |
|
if ($symb) { |
if ($symb) { |
if ($anchor ne '') { |
|
if ($symb =~ m{^([^#]+)\Q#$anchor\E$}) { |
|
$symb = $1.&escape(&escape('#')).$anchor; |
|
} |
|
} |
|
$cfile .= (($cfile=~/\?/)?'&':'?')."symb=$symb"; |
$cfile .= (($cfile=~/\?/)?'&':'?')."symb=$symb"; |
} elsif ($folderpath) { |
} elsif ($folderpath) { |
$cfile .= (($cfile=~/\?/)?'&':'?'). |
$cfile .= (($cfile=~/\?/)?'&':'?'). |
Line 3573 sub jump_to_editres {
|
Line 3529 sub jump_to_editres {
|
} |
} |
if ($forceedit) { |
if ($forceedit) { |
$cfile .= (($cfile=~/\?/)?'&':'?').'forceedit=1'; |
$cfile .= (($cfile=~/\?/)?'&':'?').'forceedit=1'; |
if ($usehttps) { |
|
$cfile = $env{'request.use_absolute'}.(($cfile =~ /^\//)? '':'/').$cfile; |
|
} |
|
} elsif ($usehttp) { |
|
if ($hostname ne '') { |
|
$cfile = 'http://'.$hostname.(($cfile =~ /^\//)? '':'/').$cfile; |
|
} |
|
$cfile .= (($cfile=~/\?/)?'&':'?').'usehttp=1'; |
|
} elsif ($usehttps) { |
|
$cfile = $env{'request.use_absolute'}.(($cfile =~ /^\//)? '':'/').$cfile; |
|
} |
} |
if ($forcereg) { |
if ($forcereg) { |
$cfile .= (($cfile=~/\?/)?'&':'?').'register=1'; |
$cfile .= (($cfile=~/\?/)?'&':'?').'register=1'; |
} |
} |
if ($todocs) { |
if ($todocs) { |
$cfile .= (($cfile=~/\?/)?'&':'?').'todocs=1'; |
$cfile .= (($cfile=~/\?/)?'&':'?').'todocs=1'; |
} |
|
if ($suppanchor ne '') { |
|
$cfile .= (($cfile=~/\?/)?'&':'?').'anchor='. |
|
&HTML::Entities::encode($suppanchor,'"<>&'); |
|
} |
} |
} |
} |
if ($anchor ne '') { |
|
$cfile .= '#'.$anchor; |
|
} |
|
$jscall = "go('".&Apache::loncommon::escape_single($cfile)."')"; |
$jscall = "go('".&Apache::loncommon::escape_single($cfile)."')"; |
} |
} |
return $jscall; |
return $jscall; |
Line 3609 sub jump_to_editres {
|
Line 3548 sub jump_to_editres {
|
# javascript_valid_email |
# javascript_valid_email |
# |
# |
# Generates javascript to validate an e-mail address. |
# Generates javascript to validate an e-mail address. |
# Returns a javascript function which accepts a form field as argument, and |
# Returns a javascript function which accetps a form field as argumnent, and |
# returns false if field.value does not satisfy two regular expression matches |
# returns false if field.value does not satisfy two regular expression matches |
# for a valid e-mail address. Backwards compatible with old browsers without |
# for a valid e-mail address. Backwards compatible with old browsers without |
# support for javascript RegExp (just checks for @ in field.value in this case). |
# support for javascript RegExp (just checks for @ in field.value in this case). |
|
|
sub javascript_valid_email { |
sub javascript_valid_email { |
my $scripttag .= <<'END'; |
my $scripttag .= <<'END'; |
function validmail(field,suffix) { |
function validmail(field) { |
var str = field.value; |
var str = field.value; |
if (suffix != '' && suffix != undefined) { |
|
str += suffix; |
|
} |
|
if (window.RegExp) { |
if (window.RegExp) { |
var reg1str = "(@.*@)|(\\.\\.)|(@\\.)|(\\.@)|(^\\.)"; |
var reg1str = "(@.*@)|(\\.\\.)|(@\\.)|(\\.@)|(^\\.)"; |
var reg2str = "^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,3}|[0-9]{1,3})(\\]?)$"; //" |
var reg2str = "^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,3}|[0-9]{1,3})(\\]?)$"; //" |
Line 3730 sub scripttag {
|
Line 3666 sub scripttag {
|
|
|
Constructs a XHTML list from \@array. |
Constructs a XHTML list from \@array. |
|
|
input: |
=over |
|
|
|
=item input: |
|
|
=over |
=over |
|
|
Line 3744 Attributes for <ul> and <li> passed in a
|
Line 3682 Attributes for <ul> and <li> passed in a
|
See htmltag() for more details. |
See htmltag() for more details. |
|
|
=back |
=back |
|
|
|
=back |
|
|
returns: XHTML list as String. |
returns: XHTML list as String. |
|
|
=cut |
=cut |
Line 3863 should be included in this list.
|
Line 3803 should be included in this list.
|
|
|
If the optional headline text is not provided, a default text will be used. |
If the optional headline text is not provided, a default text will be used. |
|
|
|
=over |
|
|
|
=item Related routines: |
|
|
Related routines: |
|
=over 4 |
=over 4 |
add_item_funclist |
|
end_funclist |
=item add_item_funclist |
|
|
|
=item end_funclist |
|
|
=back |
=back |
|
|
|
=back |
|
|
Inputs: (optional) headline text |
Inputs: (optional) headline text |
|
|
Line 3896 sub start_funclist {
|
Line 3842 sub start_funclist {
|
|
|
Adds an item to the list of available functions |
Adds an item to the list of available functions |
|
|
Related routines: |
=over |
|
|
|
=item Related routines: |
|
|
=over 4 |
=over 4 |
start_funclist |
|
end_funclist |
=item start_funclist |
|
|
|
=item end_funclist |
|
|
|
=back |
|
|
=back |
=back |
|
|
Inputs: content item with text and link to function |
Inputs: content item with text and link to function |
Line 3922 sub add_item_funclist {
|
Line 3876 sub add_item_funclist {
|
|
|
End list of available functions |
End list of available functions |
|
|
Related routines: |
=over |
=over 4 |
|
start_funclist |
=item Related routines: |
add_item_funclist |
|
|
start_funclist |
|
add_item_funclist |
|
|
=back |
=back |
|
|
Inputs: ./. |
Inputs: ./. |
Line 3958 A string that's used as visually highlig
|
Line 3915 A string that's used as visually highlig
|
it's value evaluates to false. |
it's value evaluates to false. |
|
|
=back |
=back |
|
|
returns: XHTML list as string. |
returns: XHTML list as string. |
|
|
=back |
=back |
Line 3971 sub funclist_from_array {
|
Line 3928 sub funclist_from_array {
|
$args->{legend} ||= mt('Functions'); |
$args->{legend} ||= mt('Functions'); |
return list_from_array( [$args->{legend}, @$items], |
return list_from_array( [$args->{legend}, @$items], |
{ listattr => {class => 'LC_funclist'} }); |
{ listattr => {class => 'LC_funclist'} }); |
} |
} |
|
|
=pod |
=pod |
|
|
Line 3993 e.g. a file operation in Authoring Space
|
Line 3950 e.g. a file operation in Authoring Space
|
A reference to the array containing text. Details: sub funclist_from_array |
A reference to the array containing text. Details: sub funclist_from_array |
|
|
=back |
=back |
|
|
Returns: XHTML div as string. |
Returns: XHTML div as string. |
|
|
=back |
=back |
|
|