--- loncom/interface/lonextresedit.pm 2017/12/18 22:56:45 1.23 +++ loncom/interface/lonextresedit.pm 2019/05/02 02:12:18 1.28 @@ -1,7 +1,7 @@ # The LearningOnline Network # Documents # -# $Id: lonextresedit.pm,v 1.23 2017/12/18 22:56:45 raeburn Exp $ +# $Id: lonextresedit.pm,v 1.28 2019/05/02 02:12:18 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -296,7 +296,6 @@ sub process_changes { sub update_exttool { my ($marker,$cdom,$cnum,$supplementalflag,$args) = @_; - my %toolhash=&Apache::lonnet::dump('exttool_'.$marker,$cdom,$cnum); my (%newhash,$changed,$newgradable,@deleted,$errormsg); ($newhash{'target'},$newhash{'width'},$newhash{'height'},$newhash{'linktext'},$newhash{'explanation'}, $newhash{'crslabel'},$newhash{'crstitle'},$newhash{'crsappend'},$newhash{'gradable'}) = split(/:/,$args); @@ -387,7 +386,7 @@ sub extedit_form { $appendstyle,$gradablestyle,$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','crsappenddiv', @@ -406,7 +405,7 @@ sub extedit_form { 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)); } @@ -444,7 +443,7 @@ 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"'; @@ -459,7 +458,7 @@ sub extedit_form { if ($type eq 'tool') { $link = $lt{'et'}; } - $link = ''.$link.''.$helpitem; + $link = ''.$link.''.$helpitem; if ($type eq 'tool') { $legend = $lt{'te'}; } else { @@ -768,6 +767,12 @@ sub extedit_javascript { 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', ); &js_escape(\%js_lt); @@ -942,14 +947,14 @@ 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; @@ -960,17 +965,74 @@ function extUrlPreview(caller,protocol) var url = document.getElementById(caller).value; if (regexp.test(url)) { 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))) { - window.open(url,"externalpreview","height=400,width=500,scrollbars=1,resizable=1,menubar=0,location=1"); - } else { - openMyModal(url,500,400,'yes'); + 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 == 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 updateExttool(caller,form,supplementalflag) { var prefix = ''; if (supplementalflag == 1) {