--- loncom/interface/lonextresedit.pm 2017/04/25 22:18:59 1.16 +++ loncom/interface/lonextresedit.pm 2017/11/30 01:52:14 1.20 @@ -1,7 +1,7 @@ # The LearningOnline Network # Documents # -# $Id: lonextresedit.pm,v 1.16 2017/04/25 22:18:59 raeburn Exp $ +# $Id: lonextresedit.pm,v 1.20 2017/11/30 01:52:14 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'; } } @@ -146,7 +146,7 @@ sub process_changes { $oldtitle = &unescape($env{'form.title'}); $container = 'sequence'; $supplementalflag = 1; - if ($oldurl =~ m{^/adm/$cdom/$cnum/\d+/exttools?$}) { + if ($oldurl =~ m{^/adm/$cdom/$cnum/\d+/ext\.tool$}) { $type = 'tool'; } else { $type = 'ext'; @@ -157,7 +157,7 @@ sub process_changes { if ($env{'form.importdetail'}) { ($newtitle,$newurl,$newidx) = map {&unescape($_)} split(/\=/,$env{'form.importdetail'}); - if ($newurl =~ m{^(/adm/$cdom/$cnum/(\d+)/exttools?)\:?(.*)$}) { + if ($newurl =~ m{^(/adm/$cdom/$cnum/(\d+)/ext\.tool)\:?(.*)$}) { $newurl = $1; $marker = $2; $args = $3; @@ -261,25 +261,32 @@ sub update_exttool { my %toolhash=&Apache::lonnet::dump('exttool_'.$marker,$cdom,$cnum); my (%newhash,$changed,@deleted,$errormsg); ($newhash{'target'},$newhash{'width'},$newhash{'height'},$newhash{'linktext'},$newhash{'explanation'}, - $newhash{'crslabel'},$newhash{'crstitle'}) = split(/:/,$args); - foreach my $item ('linktext','explanation','crslabel','crstitle') { + $newhash{'crslabel'},$newhash{'crstitle'},$newhash{'crsappend'}) = split(/:/,$args); + foreach my $item ('linktext','explanation','crslabel','crstitle','crsappend') { $newhash{$item} = &unescape($newhash{$item}); } my %toolhash=&Apache::lonnet::dump('exttool_'.$marker,$cdom,$cnum); - foreach my $item ('target','width','height','linktext','explanation','crslabel','crstitle') { + foreach my $item ('target','width','height','linktext','explanation','crslabel','crstitle','crsappend') { $newhash{$item} =~ s/^\s+//; $newhash{$item} =~ s/\s+$//; if (($item eq 'width') || ($item eq 'height') || ($item eq 'linktext') || ($item eq 'explanation')) { if ($newhash{'target'} eq 'iframe') { $newhash{$item} = ''; + } elsif ($newhash{'target'} eq 'tab') { + if (($item eq 'width') || ($item eq 'height')) { + $newhash{$item} = ''; + } } } if ($toolhash{$item} ne $newhash{$item}) { if ($newhash{$item} eq '') { unless (($item eq 'target') || - ((($item eq 'width') || ($item eq 'height') || ($item eq 'linktext') || ($item eq 'explanation')) && + ((($item eq 'width') || ($item eq 'height')) && (($newhash{'target'} eq 'window') || - (($newhash{'target'} eq '') && ($toolhash{'target'} eq 'window'))))) { + (($newhash{'target'} eq '') && ($toolhash{'target'} eq 'window')))) || + ((($item eq 'linktext') || ($item eq 'explanation')) && + ((($newhash{'target'} =~ /^(window|tab)$/)) || + (($newhash{'target'} eq '') && ($toolhash{'target'} =~ /^(window|tab)$/))))) { delete($toolhash{$item}); push(@deleted,$item); $changed = 1; @@ -328,15 +335,16 @@ sub extedit_form { } my ($formname,$formid,$toggle,$fieldsetid,$urlid,$dispdivstyle,$dimendivstyle, $windivstyle,$linktextstyle,$explanationstyle,$labelstyle,$titlestyle, - $legend,$urlelem,$toolelem,%toolattr); + $appendstyle,$legend,$urlelem,$toolelem,%toolattr); $formname = 'new'.$type; $toggle = $type; $fieldsetid = 'upload'.$type.'form'; $urlid = $type.'url'; map { $toolattr{$_} = $type.$_; } ('dispdiv','dimendiv','dimenwidth','dimenheight', - 'crstitlediv','crslabeldiv','crstitle','crslabel', - 'windiv','linktextdiv','explanationdiv','linktext', - 'explanation'); + 'crstitlediv','crslabeldiv','crsappenddiv', + 'crstitle','crslabel','crsappend','windiv', + 'linktextdiv','explanationdiv','linktext', + 'explanation','providerurl'); $dispdivstyle = 'display:none'; $dimendivstyle = 'display:none'; $windivstyle = 'display:none'; @@ -344,6 +352,7 @@ sub extedit_form { $explanationstyle = 'display:none'; $labelstyle = 'display:none'; $titlestyle = 'display:none'; + $appendstyle = 'display:none'; if ($supplementalflag) { $formname = 'newsupp'.$type; $toggle = 'supp'.$type; @@ -352,8 +361,8 @@ sub extedit_form { map { $toolattr{$_} = 'supp'.$toolattr{$_}; } (keys(%toolattr)); } my ($link,$legend,$active,$srcclass,$extsrc,$preview,$title,$save,$crstitle,$crslabel, - $fieldsetstyle,$action,$hiddenelem,$form,$width,$height,$tooltarget, - $linktext,$explanation,%chkstate); + $crsappend,$fieldsetstyle,$action,$hiddenelem,$form,$width,$height,$tooltarget, + $linktext,$explanation,$providerurl,%chkstate); $fieldsetstyle = 'display: none;'; $action = '/adm/coursedocs'; my $protocol = ($ENV{'SERVER_PORT'} == 443?'https':'http'); @@ -418,7 +427,7 @@ sub extedit_form { } else { $orig_title = $lt{'et'}; $save = $lt{'at'}; - $orig_url = "/adm/$cdom/$cnum/new/exttool"; + $orig_url = "/adm/$cdom/$cnum/new/ext\.tool"; } $pathitem .= '
'; } @@ -429,7 +438,7 @@ 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'}) { @@ -442,11 +451,19 @@ sub extedit_form { if ($icon) { $image = ''.$tooltitle.''; } + if ($ltitools->{$toolhash{'id'}}->{'url'} =~ m{://}) { + (my $prot,my $host,$providerurl) = ($ltitools->{$toolhash{'id'}}->{'url'} =~ m{^([^/]+)://([^/]+)(|/.+)$}); + } else { + $providerurl = $ltitools->{$toolhash{'id'}}->{'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" '; } @@ -463,6 +480,10 @@ sub extedit_form { $crslabel = $toolhash{'crslabel'}; $labelstyle = 'display:inline'; } + if ($ltitools->{$toolhash{'id'}}->{'crsconf'}->{'append'}) { + $crsappend = $toolhash{'crsappend'}; + $appendstyle = 'display:inline'; + } if ($ltitools->{$toolhash{'id'}}->{'crsconf'}->{'target'}) { $dispdivstyle = 'display:block'; } @@ -505,12 +526,16 @@ sub extedit_form { $toolelem .= '
'; $crslabel = $env{'course.'.$cdom.'_'.$cnum.'.internal.coursecode'}; $crstitle = $env{'course.'.$cdom.'_'.$cnum.'.description'}; + $crsappend = ''; } $toolelem .= '
'. ''.&mt('Display target:').' '. ''.(' 'x2). + ''.(' 'x2). ''. @@ -534,6 +559,11 @@ sub extedit_form { '
'. ''.&mt('Course title:').' '. '
'. + '
'. + '
'. + ''.&mt('Append to URL[_1]', + ' ('.$providerurl.')
'). + '

'. '
'; } my $chooser = $toolelem; @@ -616,6 +646,7 @@ sub extedit_javascript { if (ref($toolsref) eq 'HASH') { my $num = scalar(keys(%{$toolsref})); $toolsjs = " var ltitools = new Array($num);\n". + " var ltitoolsUrl = new Array($num);\n". " var ltitoolsTarget = new Array($num);\n". " var ltitoolsWidth = new Array($num);\n". " var ltitoolsHeight = new Array($num);\n". @@ -626,6 +657,7 @@ sub extedit_javascript { " var ltitoolsExplain = new Array($num);\n". " var ltitoolsLabel = new Array($num);\n". " var ltitoolsTitle = new Array($num);\n"; + " var ltitoolsAppend = new Array($num);\n"; my $i = 0; foreach my $key (sort { $a <=> $b } keys(%{$toolsref})) { if (ref($toolsref->{$key}) eq 'HASH') { @@ -635,12 +667,19 @@ sub extedit_javascript { my $height = $toolsref->{$key}->{'display'}->{'height'}; my $linkdef = $toolsref->{$key}->{'display'}->{'linktext'}; my $explaindef = $toolsref->{$key}->{'display'}->{'explanation'}; + my $providerurl; + if ($toolsref->{$key}->{'url'} =~ m{://}) { + (my $prot,my $host,$providerurl) = ($toolsref->{$key}->{'url'} =~ m{^([^/]+)://([^/]+)(|/.+)$}); + } else { + $providerurl = $toolsref->{$key}->{'url'}; + } $toolsjs .= ' ltitools['.$i.'] = '."'$key';\n". ' ltitoolsTarget['.$i.'] = '."'$target';\n". ' ltitoolsWidth['.$i.'] = '."'$width';\n". ' ltitoolsHeight['.$i.'] = '."'$height';\n". ' ltitoolsLinkDef['.$i.'] = '."'$linkdef';\n". - ' ltitoolsExplainDef['.$i.'] = '."'$explaindef';\n"; + ' ltitoolsExplainDef['.$i.'] = '."'$explaindef';\n". + ' ltitoolsUrl['.$i.'] = '."'$providerurl';\n"; } if (ref($toolsref->{$key}->{'crsconf'}) eq 'HASH') { my $display = $toolsref->{$key}->{'crsconf'}->{'target'}; @@ -653,7 +692,10 @@ sub extedit_javascript { $toolsjs .= ' ltitoolsLabel['.$i.'] = '."'$label';\n"; my $title = $toolsref->{$key}->{'crsconf'}->{'title'}; $toolsjs .= ' ltitoolsTitle['.$i.'] = '."'$title';\n"; + my $append = $toolsref->{$key}->{'crsconf'}->{'append'}; + $toolsjs .= ' ltitoolsAppend['.$i.'] = '."'$append';\n"; } + $i++; } } @@ -729,6 +771,8 @@ function setExternal(extform,residx,type var height = extform.exttoolheight.value; height.trim(); info += ':window:'+width+':'+height; + } else if (extform.exttooltarget[i].value == 'tab') { + info += ':tab::'; } else { info += ':iframe::'; } @@ -771,9 +815,11 @@ function setExternal(extform,residx,type } 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; @@ -789,6 +835,13 @@ function setExternal(extform,residx,type } else { info += ':'; } + if (document.getElementById(appendinput)) { + var crsappend = document.getElementById(appendinput).value; + crsappend.trim(); + info += ':'+escape(crsappend); + } else { + info += ':'; + } info=escape(info); if (residx > 0) { eval("extform.importdetail.value=title+'='+info+'='+residx;extform.submit();"); @@ -839,8 +892,11 @@ function updateExttool(caller,form,suppl heightinput = prefix+'tooldimenheight'; labeldiv = prefix+'toolcrslabeldiv'; titlediv = prefix+'toolcrstitlediv'; + appenddiv = prefix+'toolcrsappenddiv'; + providerurl = prefix+'toolproviderurl'; labelinput = prefix+'toolcrslabel'; titleinput = prefix+'toolcrstitle'; + appendinput = prefix+'toolcrsappend'; windiv = prefix+'toolwindiv'; linktextdiv = prefix+'toollinktextdiv'; linktextinput = prefix+'toollinktext'; @@ -871,6 +927,9 @@ function updateExttool(caller,form,suppl if (document.getElementById(titlediv)) { document.getElementById(titlediv).style.display = 'none'; } + if (document.getElementById(appenddiv)) { + document.getElementById(appenddiv).style.display = 'none'; + } } else { if (ltitools.length > 0) { for (var j=0; j'; + } + } + } else { + document.getElementById(appenddiv).style.display = 'none'; + if (document.getElementById(providerurl)) { + document.getElementById(providerurl).innerHTML.value = ''; + } + } + } break; } } @@ -967,22 +1041,26 @@ function updateTooldim(form,dimendiv,win for (var i=0; i