--- loncom/interface/lonextresedit.pm 2018/11/07 18:56:48 1.27 +++ 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.27 2018/11/07 18:56:48 raeburn Exp $ +# $Id: lonextresedit.pm,v 1.28 2019/05/02 02:12:18 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -767,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); @@ -959,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) {