--- loncom/interface/lonextresedit.pm 2016/11/29 16:28:16 1.8.2.1
+++ loncom/interface/lonextresedit.pm 2019/07/30 19:53:22 1.8.2.4
@@ -1,7 +1,7 @@
# The LearningOnline Network
# Documents
#
-# $Id: lonextresedit.pm,v 1.8.2.1 2016/11/29 16:28:16 raeburn Exp $
+# $Id: lonextresedit.pm,v 1.8.2.4 2019/07/30 19:53:22 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -229,6 +229,7 @@ sub extedit_form {
$fieldsetstyle,$action,$hiddenelem,$form);
$fieldsetstyle = 'display: none;';
$action = '/adm/coursedocs';
+ my $protocol = ($ENV{'SERVER_PORT'} == 443?'https':'http');
if ($residx) {
if ($caller eq 'direct') {
$fieldsetstyle = 'display: block;';
@@ -252,7 +253,7 @@ sub extedit_form {
$urlid = "exturl_$residx";
$srcclass = ' class="LC_nobreak"';
$extsrc = ''.$lt{'ul'}.' ';
- $preview = ' '.$lt{'pr'}.'';
+ $preview = ' '.$lt{'pr'}.'';
$title = ''.$lt{'ti'}.' ';
$save = $lt{'sv'};
} else {
@@ -263,7 +264,7 @@ sub extedit_form {
$residx = 0;
$orig_url = 'http://';
$orig_title = $lt{'ex'};
- $preview = '';
+ $preview = '';
$save = $lt{'al'};
$pathitem .= '
';
}
@@ -297,7 +298,7 @@ ENDFORM
}
sub display_editor {
- my ($url,$folderpath,$symb,$idx) = @_;
+ my ($url,$folderpath,$symb,$idx,$type,$cdom,$cnum,$hostname) = @_;
my ($residx,$supplementalflag,$title,$pathitem,$output,$js,$navmap);
if ($folderpath =~ /^supplemental/) {
$supplementalflag = 1;
@@ -313,6 +314,9 @@ sub display_editor {
}
$js = &Apache::lonhtmlcommon::scripttag(&extedit_javascript());
my $args = { 'force_register' => $env{'form.register'} };
+ if ($hostname) {
+ $args->{'hostname'} = $hostname;
+ }
return &Apache::loncommon::start_page('External Resource Editor',$js,$args).
'
'.
&extedit_form($supplementalflag,$residx,$url,$title,$pathitem,undef,'direct',$symb).
@@ -324,6 +328,12 @@ sub extedit_javascript {
my %js_lt = &Apache::lonlocal::texthash(
invurl => 'Invalid URL',
titbl => 'Title is blank',
+ 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);
@@ -374,17 +384,81 @@ function editext(residx) {
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');
+ }
+}
+
ENDJS
}