--- loncom/interface/lonextresedit.pm 2016/11/29 16:03:03 1.13
+++ loncom/interface/lonextresedit.pm 2023/05/22 21:10:55 1.31
@@ -1,7 +1,7 @@
# The LearningOnline Network
# Documents
#
-# $Id: lonextresedit.pm,v 1.13 2016/11/29 16:03:03 raeburn Exp $
+# $Id: lonextresedit.pm,v 1.31 2023/05/22 21:10:55 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -60,7 +60,7 @@ sub handler {
$symb,$type);
if (($env{'form.folderpath'} =~ /^supplemental/) && ($env{'form.suppurl'})) {
$supplementalflag = 1;
- if (&unescape($env{'form.suppurl'}) =~ m{^/adm/$cdom/$cnum/\d+/exttools?$}) {
+ if (&unescape($env{'form.suppurl'}) =~ m{^/adm/$cdom/$cnum/\d+/ext\.tool$}) {
$type = 'tool';
}
}
@@ -79,7 +79,7 @@ sub handler {
if ($symb ne $env{'form.symb'}) {
$env{'form.symb'} = $symb;
}
- if ($url =~ m{/adm/$cdom/$cnum/\d+/exttools?$}) {
+ if ($url =~ m{/adm/$cdom/$cnum/\d+/ext\.tool$}) {
$type = 'tool';
}
}
@@ -98,7 +98,18 @@ sub handler {
}
my %ltitools;
if ($type eq 'tool') {
- %ltitools = &Apache::lonnet::get_domain_ltitools($cdom);
+ my (%domtools,%crstools);
+ my %tooltypes = &Apache::loncommon::usable_exttools();
+ if ($tooltypes{'dom'}) {
+ %domtools = &Apache::lonnet::get_domain_lti($cdom,'consumer');
+ }
+ if ($tooltypes{'crs'}) {
+ %crstools = &Apache::lonnet::get_course_lti($cnum,$cdom,'consumer');
+ }
+ %ltitools = (
+ dom => \%domtools,
+ crs => \%crstools,
+ );
}
my $js = &Apache::lonhtmlcommon::scripttag(&extedit_javascript());
my $pathitem = ' 'Title',
al => 'Add Link',
at => 'Add Tool',
+ dd => 'Defined in domain',
+ dc => 'Defined in course',
);
my $tabid = 'aa';
my $size = 60;
if ($supplementalflag) {
$tabid = 'ee';
}
- my ($formname,$formid,$toggle,$fieldsetid,$urlid,$dispdivstyle,$dimendivstyle,
- $labelstyle,$titlestyle,$legend,$urlelem,$toolelem,%toolattr);
+ my ($formname,$formid,$toggle,$fieldsetid,$urlid,$subdivid,$dispdivstyle,$dimendivstyle,
+ $windivstyle,$linktextstyle,$explanationstyle,$labelstyle,$titlestyle,
+ $appendstyle,$gradablestyle,$subdivstyle,$legend,$urlelem,$toolelem,%toolattr);
$formname = 'new'.$type;
$toggle = $type;
- $fieldsetid = 'upload'.$type.'form';
+ $fieldsetid = 'external'.$type.'form';
$urlid = $type.'url';
map { $toolattr{$_} = $type.$_; } ('dispdiv','dimendiv','dimenwidth','dimenheight',
- 'crstitlediv','crslabeldiv','crstitle','crslabel');
+ 'crstitlediv','crslabeldiv','crsappenddiv',
+ 'gradablediv','crstitle','crslabel','crsappend',
+ 'windiv','linktextdiv','explanationdiv',
+ 'linktext','explanation','providerurl');
$dispdivstyle = 'display:none';
$dimendivstyle = 'display:none';
+ $windivstyle = 'display:none';
+ $linktextstyle = 'display:none';
+ $explanationstyle = 'display:none';
$labelstyle = 'display:none';
$titlestyle = 'display:none';
+ $appendstyle = 'display:none';
+ $gradablestyle = 'display:none';
+ $subdivstyle = 'display:block';
if ($supplementalflag) {
$formname = 'newsupp'.$type;
$toggle = 'supp'.$type;
- $fieldsetid = 'uploadsupp'.$type.'form';
+ $fieldsetid = 'externalsupp'.$type.'form';
$urlid = 'supp'.$type.'url';
map { $toolattr{$_} = 'supp'.$toolattr{$_}; } (keys(%toolattr));
}
my ($link,$legend,$active,$srcclass,$extsrc,$preview,$title,$save,$crstitle,$crslabel,
- $fieldsetstyle,$action,$hiddenelem,$form,$width,$height,$tooltarget,%chkstate);
+ $crsappend,$fieldsetstyle,$action,$hiddenelem,$form,$width,$height,$tooltarget,
+ $linktext,$explanation,$providerurl,$chkgrd,$chknogrd,%chkstate);
$fieldsetstyle = 'display: none;';
$action = '/adm/coursedocs';
+ my $protocol = ($ENV{'SERVER_PORT'} == 443?'https':'http');
+ my $rows = 2;
+ my $cols = 20;
if ($residx) {
if ($caller eq 'direct') {
$fieldsetstyle = 'display: block;';
$action = '/adm/extresedit';
+ $rows = 10;
+ $cols = 45;
if ($type eq 'tool') {
- $legend = $lt{'ee'};
- } else {
$legend = $lt{'te'};
+ } else {
+ $legend = $lt{'ee'};
}
$legend = '';
if ($symb) {
@@ -371,13 +457,13 @@ sub extedit_form {
$active = '';
}
$formname = 'edit'.$type.'_'.$residx;
- $fieldsetid = 'upload'.$type.$residx;
+ $fieldsetid = 'external'.$type.$residx;
$urlid = $type.'url_'.$residx;
map { $toolattr{$_} .= '_'.$residx; } (keys(%toolattr));
$srcclass = ' class="LC_nobreak"';
if ($type eq 'ext') {
$extsrc = ''.$lt{'ul'}.' ';
- $preview = ' '.$lt{'pr'}.'';
+ $preview = ' '.$lt{'pr'}.'';
}
$title = ''.$lt{'ti'}.' ';
$save = $lt{'sv'};
@@ -386,7 +472,7 @@ sub extedit_form {
if ($type eq 'tool') {
$link = $lt{'et'};
}
- $link = ''.$helpitem;
+ $link = ''.$helpitem;
if ($type eq 'tool') {
$legend = $lt{'te'};
} else {
@@ -399,12 +485,12 @@ sub extedit_form {
$orig_url = 'http://';
$orig_title = $lt{'ex'};
$extsrc = $lt{'ul'}.':
';
- $preview = '';
+ $preview = '';
$save = $lt{'al'};
} else {
$orig_title = $lt{'et'};
$save = $lt{'at'};
- $orig_url = "/adm/$cdom/$cnum/new/exttool";
+ $orig_url = "/adm/$cdom/$cnum/new/ext\.tool";
}
$pathitem .= '
';
}
@@ -415,93 +501,208 @@ sub extedit_form {
my $class = 'LC_nobreak';
if ($residx) {
$class = 'LC_docs_ext_edit LC_nobreak';
- if ($orig_url =~ m{^/adm/$cdom/$cnum/(\d+)/exttools?$}) {
+ if ($orig_url =~ m{^/adm/$cdom/$cnum/(\d+)/ext\.tool$}) {
my $marker = $1;
my %toolhash=&Apache::lonnet::dump('exttool_'.$marker,$cdom,$cnum);
- if ($toolhash{'id'}) {
+ my ($tooltype,$tool,$ltihash);
+ if ($toolhash{'id'} =~/^c(\d+)$/) {
+ $tool = $1;
+ $tooltype = 'crs';
if (ref($ltitools) eq 'HASH') {
- if (keys(%{$ltitools})) {
- if (ref($ltitools->{$toolhash{'id'}}) eq 'HASH') {
- my $tooltitle = $ltitools->{$toolhash{'id'}}->{'title'};
- my $icon = $ltitools->{$toolhash{'id'}}->{'image'};
- my $image;
- if ($icon) {
- $image = '';
- }
- $tooltarget = $toolhash{'target'};
- if ($tooltarget eq 'window') {
- $dimendivstyle = 'display:block';
- $chkstate{'window'} = 'checked="checked" ';
- } else {
- $chkstate{'iframe'} = 'checked="checked" ';
- }
- $width = $toolhash{'width'};
- $height = $toolhash{'height'};
- if (ref($ltitools->{$toolhash{'id'}}->{'crsconf'}) eq 'HASH') {
- if ($ltitools->{$toolhash{'id'}}->{'crsconf'}->{'title'}) {
- $crstitle = $toolhash{'crstitle'};
- $titlestyle = 'display:inline';
- }
- if ($ltitools->{$toolhash{'id'}}->{'crsconf'}->{'label'}) {
- $crslabel = $toolhash{'crslabel'};
- $labelstyle = 'display:inline';
- }
- if ($ltitools->{$toolhash{'id'}}->{'crsconf'}->{'target'}) {
- $dispdivstyle = 'display:block';
- }
- }
- $toolelem = ''.$image.' '.$tooltitle.'
';
- }
+ if (ref($ltitools->{'crs'}) eq 'HASH') {
+ $ltihash = $ltitools->{'crs'}->{$tool};
+ }
+ }
+ } elsif ($toolhash{'id'} =~/^\d+$/) {
+ $tooltype = 'dom';
+ $tool = $toolhash{'id'};
+ if (ref($ltitools) eq 'HASH') {
+ if (ref($ltitools->{'dom'}) eq 'HASH') {
+ $ltihash = $ltitools->{'dom'}->{$tool};
+ }
+ }
+ }
+ if (($tool ne '') && (ref($ltihash) eq 'HASH')) {
+ my $tooltitle = $ltihash->{'title'};
+ my $icon = $ltihash->{'image'};
+ my $image;
+ if ($icon) {
+ $image = '';
+ }
+ if ($ltihash->{'url'} =~ m{://}) {
+ (my $prot,my $host,$providerurl) = ($ltihash->{'url'} =~ m{^([^/]+)://([^/]+)(|/.+)$});
+ } else {
+ $providerurl = $ltihash->{'url'};
+ }
+ $tooltarget = $toolhash{'target'};
+ if ($tooltarget eq 'window') {
+ $dimendivstyle = 'display:block';
+ $windivstyle = 'display:block';
+ $chkstate{'window'} = 'checked="checked" ';
+ } elsif ($tooltarget eq 'tab') {
+ $windivstyle = 'display:block';
+ $chkstate{'tab'} = 'checked="checked" ';
+ } else {
+ $chkstate{'iframe'} = 'checked="checked" ';
+ }
+ $width = $toolhash{'width'};
+ $height = $toolhash{'height'};
+ $linktext = $toolhash{'linktext'};
+ $explanation = $toolhash{'explanation'};
+ if ($toolhash{'gradable'}) {
+ $chkgrd = ' checked="checked"';
+ } else {
+ $chknogrd = ' checked="checked"';
+ }
+ if (ref($ltihash->{'crsconf'}) eq 'HASH') {
+ if ($ltihash->{'crsconf'}->{'title'}) {
+ $crstitle = $toolhash{'crstitle'};
+ $titlestyle = 'display:inline';
+ }
+ if ($ltihash->{'crsconf'}->{'label'}) {
+ $crslabel = $toolhash{'crslabel'};
+ $labelstyle = 'display:inline';
+ }
+ if ($ltihash->{'crsconf'}->{'append'}) {
+ $crsappend = $toolhash{'crsappend'};
+ $appendstyle = 'display:inline';
+ }
+ if ($ltihash->{'crsconf'}->{'target'}) {
+ $dispdivstyle = 'display:block';
+ }
+ if ($ltihash->{'crsconf'}->{'linktext'}) {
+ $linktextstyle = 'padding:0;display:inline';
+ }
+ if ($ltihash->{'crsconf'}->{'explanation'}) {
+ $explanationstyle = 'padding:0;display:inline';
}
}
+ $toolelem = ''.$image.' '.$tooltitle.'
';
+ $gradablestyle = 'display:inline';
}
}
} else {
- $toolelem = ''."\n".
- '
';
+ foreach my $type ('crs','dom') {
+ $toolelem .= ' '."\n";
+ }
+ $toolelem .= '
'.
+ '
'."\n".
+ ''.
+ $exttypeofftext.
+ '
'."\n";
$crslabel = $env{'course.'.$cdom.'_'.$cnum.'.internal.coursecode'};
$crstitle = $env{'course.'.$cdom.'_'.$cnum.'.description'};
+ $crsappend = '';
+ $chknogrd = ' checked="checked"';
}
$toolelem .= ''.
- '';
+ $toolelem .= '';
+ $toolelem .= ''.
''.&mt('Course label:').' '.
- '
'.
+ '
'.
'
'.
''.
''.&mt('Course title:').' '.
- '
'.
- '
';
+ '
'.
+ ''.
+ ''.
+ ''.&mt('Append to URL[_1]',
+ ' ('.$providerurl.')
').
+ '
'.
+ '
'.
+ ''.
+ ''.&mt('Gradable').' '.
+ ''.(' 'x2).
+ '
';
}
my $chooser = $toolelem;
if ($type eq 'ext') {
@@ -521,7 +722,7 @@ $preview
$legend
$active
$chooser
-
+
$title
@@ -541,8 +742,37 @@ ENDFORM
}
}
+sub ordered_tooloptions {
+ my ($toolsref) = @_;
+ my ($seloptions,@ids,@titles);
+ if (ref($toolsref) eq 'HASH') {
+ my %bynum;
+ foreach my $id (keys(%{$toolsref})) {
+ if (ref($toolsref->{$id}) eq 'HASH') {
+ my $order = $toolsref->{$id}->{'order'};
+ $bynum{$order} = [$id,$toolsref->{$id}];
+ }
+ }
+ foreach my $item (sort { $a <=> $b } keys(%bynum)) {
+ if (ref($bynum{$item}) eq 'ARRAY') {
+ if (ref($bynum{$item}->[1]) eq 'HASH') {
+ my $tooltitle = $bynum{$item}->[1]->{'title'};
+ push(@titles,$tooltitle);
+ push(@ids,$bynum{$item}->[0]);
+ $seloptions .= ''."\n";
+ }
+ }
+ }
+ }
+ if (wantarray) {
+ return (\@ids,\@titles);
+ } else {
+ return $seloptions;
+ }
+}
+
sub display_editor {
- my ($url,$folderpath,$symb,$idx,$type,$cdom,$cnum) = @_;
+ my ($url,$folderpath,$symb,$idx,$type,$cdom,$cnum,$hostname) = @_;
my ($residx,$supplementalflag,$title,$pathitem,$output,$js,$navmap);
if ($folderpath =~ /^supplemental/) {
$supplementalflag = 1;
@@ -556,12 +786,26 @@ sub display_editor {
my $path = &Apache::loncommon::symb_to_docspath($symb,\$navmap);
$pathitem = '';
}
- my %ltitools;
+ my (%ltitools,%tooltypes);
if ($type eq 'tool') {
- %ltitools = &Apache::lonnet::get_domain_ltitools($cdom);
+ my (%domtools,%crstools);
+ %tooltypes = &Apache::loncommon::usable_exttools();
+ if ($tooltypes{'dom'}) {
+ %domtools = &Apache::lonnet::get_domain_lti($cdom,'consumer');
+ }
+ if ($tooltypes{'crs'}) {
+ %crstools = &Apache::lonnet::get_course_lti($cnum,$cdom,'consumer');
+ }
+ %ltitools = (
+ dom => \%domtools,
+ crs => \%crstools,
+ );
}
$js = &Apache::lonhtmlcommon::scripttag(&extedit_javascript());
my $args = { 'force_register' => $env{'form.register'} };
+ if ($hostname) {
+ $args->{'hostname'} = $hostname;
+ }
my $description = 'External Resource Editor';
if ($type eq 'tool') {
$description = 'External Tool Editor';
@@ -576,43 +820,112 @@ sub display_editor {
sub extedit_javascript {
my ($toolsref) = @_;
- my $toolsjs;
+ my ($toolsjs,$exttoolnums,$exttooloptions);
if (ref($toolsref) eq 'HASH') {
- my $num = scalar(keys(%{$toolsref}));
- $toolsjs = " var ltitools = new Array($num);\n".
- " var ltitoolsTarget = new Array($num);\n".
- " var ltitoolsWidth = new Array($num);\n".
- " var ltitoolsHeight = new Array($num);\n".
- " var ltitoolsDisplay = new Array($num);\n".
- " var ltitoolsLabel = new Array($num);\n".
- " var ltitoolsTitle = new Array($num);\n";
- my $i = 0;
- foreach my $key (sort { $a <=> $b } keys(%{$toolsref})) {
- if (ref($toolsref->{$key})) {
- my $target = $toolsref->{$key}->{'target'};
- my $width = $toolsref->{$key}->{'width'};
- my $height = $toolsref->{$key}->{'height'};
- $toolsjs .= ' ltitools['.$i.'] = '."'$key';\n".
- ' ltitoolsTarget['.$i.'] = '."'$target';\n".
- ' ltitoolsWidth['.$i.'] = '."'$width';\n".
- ' ltitoolsHeight['.$i.'] = '."'$height';\n";
- my %courseconfig;
- if (ref($toolsref->{$key}->{'crsconf'}) eq 'HASH') {
- my $display = $toolsref->{$key}->{'crsconf'}->{'target'};
- $toolsjs .= ' ltitoolsDisplay['.$i.'] = '."'$display';\n";
- my $label = $toolsref->{$key}->{'crsconf'}->{'label'};
- $toolsjs .= ' ltitoolsLabel['.$i.'] = '."'$label';\n";
- my $title = $toolsref->{$key}->{'crsconf'}->{'title'};
- $toolsjs .= ' ltitoolsTitle['.$i.'] = '."'$title';\n";
+ $toolsjs = " var ltitools = new Array();\n".
+ " var ltitoolsUrl = new Array();\n".
+ " var ltitoolsTarget = new Array();\n".
+ " var ltitoolsWidth = new Array();\n".
+ " var ltitoolsHeight = new Array();\n".
+ " var ltitoolsLinkDef = new Array();\n".
+ " var ltitoolsExplainDef = new Array();\n".
+ " var ltitoolsDisplay = new Array();\n".
+ " var ltitoolsLink = new Array();\n".
+ " var ltitoolsExplain = new Array();\n".
+ " var ltitoolsLabel = new Array();\n".
+ " var ltitoolsTitle = new Array();\n".
+ " var ltitoolsAppend = new Array();\n";
+ $exttoolnums = " var ltitoolsnum = new Array();\n".
+ " var tooloptval = new Array();\n".
+ " var toolopttxt = new Array();\n";
+ my $idx = 0;
+ foreach my $type ('crs','dom') {
+ if (ref($toolsref->{$type}) eq 'HASH') {
+ my $num = scalar(keys(%{$toolsref->{$type}}));
+ $toolsjs .= " ltitools[$idx] = new Array($num);\n".
+ " ltitoolsUrl[$idx] = new Array($num);\n".
+ " ltitoolsTarget[$idx] = new Array($num);\n".
+ " ltitoolsWidth[$idx] = new Array($num);\n".
+ " ltitoolsHeight[$idx] = new Array($num);\n".
+ " ltitoolsLinkDef[$idx] = new Array($num);\n".
+ " ltitoolsExplainDef[$idx] = new Array($num);\n".
+ " ltitoolsDisplay[$idx] = new Array($num);\n".
+ " ltitoolsLink[$idx] = new Array($num);\n".
+ " ltitoolsExplain[$idx] = new Array($num);\n".
+ " ltitoolsLabel[$idx] = new Array($num);\n".
+ " ltitoolsTitle[$idx] = new Array($num);\n".
+ " ltitoolsAppend[$idx] = new Array($num);\n";
+ my $i=0;
+ foreach my $key (sort { $a <=> $b } keys(%{$toolsref->{$type}})) {
+ if (ref($toolsref->{$type}->{$key}) eq 'HASH') {
+ if (ref($toolsref->{$type}->{$key}->{'display'}) eq 'HASH') {
+ my $target = $toolsref->{$type}->{$key}->{'display'}->{'target'};
+ my $width = $toolsref->{$type}->{$key}->{'display'}->{'width'};
+ my $height = $toolsref->{$type}->{$key}->{'display'}->{'height'};
+ my $linkdef = $toolsref->{$type}->{$key}->{'display'}->{'linktext'};
+ my $explaindef = $toolsref->{$type}->{$key}->{'display'}->{'explanation'};
+ my $providerurl;
+ if ($toolsref->{$type}->{$key}->{'url'} =~ m{://}) {
+ (my $prot,my $host,$providerurl) =
+ ($toolsref->{$type}->{$key}->{'url'} =~ m{^([^/]+)://([^/]+)(|/.+)$});
+ } else {
+ $providerurl = $toolsref->{$type}->{$key}->{'url'};
+ }
+ $providerurl = &LONCAPA::map::qtunescape($providerurl);
+ $toolsjs .= " ltitools[$idx][$i] = '$key';\n".
+ " ltitoolsTarget[$idx][$i] = '$target';\n".
+ " ltitoolsWidth[$idx][$i] = '$width';\n".
+ " ltitoolsHeight[$idx][$i] = '$height';\n".
+ " ltitoolsLinkDef[$idx][$i] = '$linkdef';\n".
+ " ltitoolsExplainDef[$idx][$i] = '$explaindef';\n".
+ " ltitoolsUrl[$idx][$i] = '$providerurl';\n";
+ }
+ if (ref($toolsref->{$type}->{$key}->{'crsconf'}) eq 'HASH') {
+ my $display = $toolsref->{$type}->{$key}->{'crsconf'}->{'target'};
+ $toolsjs .= " ltitoolsDisplay[$idx][$i] = '$display';\n";
+ my $linktext = $toolsref->{$type}->{$key}->{'crsconf'}->{'linktext'};
+ $toolsjs .= " ltitoolsLink[$idx][$i] = '$linktext';\n";
+ my $explanation = $toolsref->{$type}->{$key}->{'crsconf'}->{'explanation'};
+ $toolsjs .= " ltitoolsExplain[$idx][$i] = '$explanation';\n";
+ my $label = $toolsref->{$type}->{$key}->{'crsconf'}->{'label'};
+ $toolsjs .= " ltitoolsLabel[$idx][$i] = '$label';\n";
+ my $title = $toolsref->{$type}->{$key}->{'crsconf'}->{'title'};
+ $toolsjs .= " ltitoolsTitle[$idx][$i] = '$title';\n";
+ my $append = $toolsref->{$type}->{$key}->{'crsconf'}->{'append'};
+ $toolsjs .= " ltitoolsAppend[$idx][$i] = '$append';\n";
+ }
+ }
+ $i++;
}
- $i++;
+ my $firstoption = '';
+ my ($idsref,$titlesref) = &ordered_tooloptions($toolsref->{$type});
+ if ((ref($idsref) eq 'ARRAY') && (ref($titlesref) eq 'ARRAY')) {
+ my $count = scalar(@{$idsref});
+ $exttooloptions .= " tooloptval[$idx] = new Array($count);\n".
+ " toolopttxt[$idx] = new Array($count);\n";
+ for (my $n=0; $n<@{$idsref}; $n++) {
+ my $id = $idsref->[$n];
+ my $text = $titlesref->[$n];
+ $exttooloptions .= " tooloptval[$idx][$n] = '$id';\n".
+ " toolopttxt[$idx][$n] = '$text';\n";
+ }
+ }
+ $exttoolnums .= " ltitoolsnum[$idx] = $i;\n";
}
+ $idx ++;
}
}
my %js_lt = &Apache::lonlocal::texthash(
invurl => 'Invalid URL',
titbl => 'Title is blank',
invtool => 'Please select an external tool',
+ mixfra => 'Show preview in pop-up? (http in https page + no framing)',
+ mixonly => 'Show preview in pop-up? (http in https page)',
+ fraonly => 'Show preview in pop-up? (framing disallowed)',
+ nopopup => 'Pop-up blocked',
+ nopriv => 'Insufficient privileges to use preview',
+ badurl => 'URL is not: http://hostname/path or https://hostname/path',
+ sele => 'Select',
);
&js_escape(\%js_lt);
@@ -651,21 +964,35 @@ function setExternal(extform,residx,type
} else {
title = escape(title);
var info = exttoolurl;
+ var prefix = '';
+ if (supplementalflag == 1) {
+ prefix = 'supp';
+ }
if (residx == 0) {
var toolid = parseInt(extform.exttoolid.options[extform.exttoolid.selectedIndex].value);
if (isNaN(toolid)) {
alert("$js_lt{'invtool'}");
return;
}
- info += ':'+toolid;
- }
- var prefix = '';
- if (supplementalflag == 1) {
- prefix = 'supp';
+ var typeelem = extform.elements[prefix+'exttooltype'];
+ if (typeelem.length) {
+ for (var i=0; i 0) {
dispdiv += '_'+residx;
+ windiv += '_'+residx;
}
if (document.getElementById(dispdiv)) {
if (document.getElementById(dispdiv).style.display == 'block') {
@@ -677,7 +1004,9 @@ function setExternal(extform,residx,type
width.trim();
var height = extform.exttoolheight.value;
height.trim();
- info += ':window:'+width+':'+height;
+ info += ':window:'+width+':'+height;
+ } else if (extform.exttooltarget[i].value == 'tab') {
+ info += ':tab::';
} else {
info += ':iframe::';
}
@@ -690,11 +1019,41 @@ function setExternal(extform,residx,type
} else {
info += ':::';
}
+ if (document.getElementById(windiv)) {
+ if (document.getElementById(windiv).style.display == 'block') {
+ var linktextdiv = prefix+'toollinktextdiv';
+ var explanationdiv = prefix+'toolexplanationdiv';
+ if (residx > 0) {
+ linktextdiv += '_'+residx;
+ explanationdiv += '_'+residx;
+ }
+ if (document.getElementById(linktextdiv).style.display == 'inline') {
+ var linktext = extform.exttoollinktext.value;
+ linktext.trim();
+ info += ':'+escape(linktext);
+ } else {
+ info += ':';
+ }
+ if (document.getElementById(explanationdiv).style.display == 'inline') {
+ var explaintext = extform.exttoolexplanation.value;
+ explaintext.trim();
+ info += ':'+escape(explaintext);
+ } else {
+ info += ':';
+ }
+ } else {
+ info += '::';
+ }
+ } else {
+ info += '::';
+ }
var labelinput = prefix+'toolcrslabel';
var titleinput = prefix+'toolcrstitle';
+ var appendinput = prefix+'toolcrsappend';
if (residx > 0) {
labelinput += '_'+residx;
titleinput += '_'+residx;
+ appendinput += '_'+residx;
}
if (document.getElementById(labelinput)) {
var crslabel = document.getElementById(labelinput).value;
@@ -710,6 +1069,39 @@ function setExternal(extform,residx,type
} else {
info += ':';
}
+ if (document.getElementById(appendinput)) {
+ var crsappend = document.getElementById(appendinput).value;
+ crsappend.trim();
+ info += ':'+escape(crsappend);
+ } else {
+ info += ':';
+ }
+ var gradablediv = prefix+'toolgradablediv';
+ if (residx > 0) {
+ gradablediv += '_'+residx;
+ }
+ if (document.getElementById(gradablediv)) {
+ if (document.getElementById(gradablediv).style.display == 'inline') {
+ if (extform.exttoolgradable.length) {
+ for (var i=0; i 0) {
eval("extform.importdetail.value=title+'='+info+'='+residx;extform.submit();");
@@ -720,30 +1112,165 @@ function setExternal(extform,residx,type
}
function editext(residx,type) {
- if (document.getElementById('upload'+type+residx)) {
- var curr = document.getElementById('upload'+type+residx).style.display;
+ if (document.getElementById('external'+type+residx)) {
+ var curr = document.getElementById('external'+type+residx).style.display;
if (curr == 'none') {
disp = 'block';
} else {
disp = 'none';
}
- document.getElementById('upload'+type+residx).style.display=disp;
+ document.getElementById('external'+type+residx).style.display=disp;
}
resize_scrollbox('contentscroll','1','1');
return;
}
-function extUrlPreview(caller) {
+function extUrlPreview(caller,protocol) {
if (document.getElementById(caller)) {
var url = document.getElementById(caller).value;
if (regexp.test(url)) {
- openMyModal(url,500,400,'yes');
+ var http_regex = /^http\:\/\//gi;
+ var mixed = 0;
+ var noiframe = 0;
+ var nopriv = 0;
+ var badurl = 0;
+ var name = "externalpreview";
+ if ((protocol == 'https') && (http_regex.test(url))) {
+ mixed = 1;
+ }
+ var http = new XMLHttpRequest();
+ var lcurl = "/adm/exturlcheck";
+ var params = "exturl="+url;
+ http.open("POST",lcurl, true);
+ http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
+ http.onreadystatechange = function() {
+ if (http.readyState == 4) {
+ if (http.status == 200) {
+ if (http.responseText.length > 0) {
+ if (http.responseText == 1) {
+ noiframe = 1;
+ } else if (http.responseText == -1) {
+ nopriv = 1;
+ } else if (http.responseText == 0) {
+ badurl = 1;
+ }
+ }
+ openPreviewWindow(url,name,noiframe,mixed,nopriv,badurl);
+ }
+ }
+ }
+ http.send(params);
} else {
alert("$js_lt{'invurl'}");
}
}
}
+var previewLCWindow = null;
+function openPreviewWindow(url,name,noiframe,mixed,nopriv,badurl) {
+ if (previewLCWindow !=null) {
+ previewLCWindow.close();
+ }
+ if (badurl) {
+ alert("$js_lt{'badurl'}");
+ } else if (nopriv) {
+ alert("$js_lt{'nopriv'}");
+ } else if ((noiframe == 1) || (mixed == 1)) {
+ var encurl = encodeURI(url);
+ var msg;
+ if (mixed == 1) {
+ if (noiframe == 1) {
+ msg = "$js_lt{'mixfra'}";
+ } else {
+ msg = "$js_lt{'mixonly'}";
+ }
+ } else {
+ msg = "$js_lt{'fraonly'}";
+ }
+ if (confirm(msg)) {
+ previewLCWindow = window.open(url,name,"height=400,width=500,scrollbars=1,resizable=1,menubar=0,location=1");
+ if (previewLCWindow != null) {
+ previewLCWindow.focus();
+ } else {
+ alert("$js_lt{'nopopup'}");
+ }
+ }
+ } else {
+ openMyModal(url,500,400,'yes');
+ }
+}
+
+function updateExttoolSel(form,radioname,supplementalflag) {
+ var prefix = '';
+ var typepick;
+ var radelem = form.elements[radioname];
+ if (radelem.length) {
+ for (var i=0; i=0) {
+ for (i = numopts; i >= 0; i--) {
+ selelem.remove(i);
+ }
+ }
+ if (ltitoolsnum[typepick]) {
+ if ((Array.isArray(tooloptval[typepick])) && (Array.isArray(toolopttxt[typepick]))) {
+ var len = tooloptval[typepick].length;
+ if (len) {
+ selelem.options[selelem.options.length] = new Option('$js_lt{sele}','',1,1);
+ var j;
+ for (j=0; j 0) {
- for (var j=0; j 0) {
+ for (var j=0; j';
+ }
+ }
+ } else {
+ document.getElementById(appenddiv).style.display = 'none';
+ if (document.getElementById(providerurl)) {
+ document.getElementById(providerurl).innerHTML = '';
+ }
+ }
}
+ if (document.getElementById(gradablediv)) {
+ if (supplementalflag != 1) {
+ document.getElementById(gradablediv).style.display = 'inline';
+ }
+ }
+ break;
}
- break;
}
}
}
@@ -830,24 +1450,39 @@ function updateExttool(caller,form,suppl
}
}
-function updateTooldim(form,dimendiv,widthinput,heightinput) {
+function updateTooldim(form,dimendiv,windiv,widthinput,heightinput,linkinput,explaininput) {
if (form.exttooltarget.length) {
for (var i=0; i