-
+
ENDFORM
-
+ if (wantarray) {
+ return ($link,$form);
+ } else {
+ return $link.$form;
+ }
}
sub display_editor {
- my ($url,$folderpath,$symb,$idx) = @_;
- my ($residx,$supplementalflag,$title,$pathitem,$output);
+ my ($url,$folderpath,$symb,$idx,$type,$cdom,$cnum,$hostname) = @_;
+ my ($residx,$supplementalflag,$title,$pathitem,$output,$js,$navmap);
if ($folderpath =~ /^supplemental/) {
$supplementalflag = 1;
$residx = $idx;
@@ -290,15 +309,14 @@ sub display_editor {
(my $map,$residx,my $res) =
&Apache::lonnet::decode_symb($symb);
$title = &Apache::lonnet::gettitle($symb);
- my $path = &Apache::lonnet::getdocspath($symb);
- if ($map =~ /\.page$/) {
- $pathitem = '';
- } else {
- $pathitem = '';
- }
+ my $path = &Apache::loncommon::symb_to_docspath($symb,\$navmap);
+ $pathitem = '';
}
- my $js = &Apache::lonhtmlcommon::scripttag(&extedit_javascript());
+ $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).
@@ -307,10 +325,17 @@ sub display_editor {
}
sub extedit_javascript {
- my %lt = &Apache::lonlocal::texthash(
+ 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);
my $urlregexp = <<'ENDREGEXP';
/^([a-z]([a-z]|\d|\+|-|\.)*):(\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?((\[(|(v[\da-f]{1,}\.(([a-z]|\d|-|\.|_|~)|[!\$&'\(\)\*\+,;=]|:)+))\])|((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=])*)(:\d*)?)(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*|(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)|((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)|((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)){0})(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i
@@ -326,19 +351,20 @@ function setExternal(extform,residx) {
String.prototype.trim = function() {return this.replace(\/^\\s+|\\s+$\/g, "");}; }
var url=extform.exturl.value;
if (title == null || title.trim()=="") {
- alert("$lt{'titbl'}");
+ alert("$js_lt{'titbl'}");
extform.exttitle.focus();
return;
}
if (regexp.test(url)) {
url = escape(url);
+ title = escape(title);
if (residx > 0) {
eval("extform.importdetail.value=title+'='+url+'='+residx;extform.submit();");
} else {
eval("extform.importdetail.value=title+'='+url;extform.submit();");
}
} else {
- alert("$lt{'invurl'}");
+ alert("$js_lt{'invurl'}");
extform.exturl.focus();
return;
}
@@ -358,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("$lt{'invurl'}");
+ 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
}