
PK 
/**
* Controls: Link plugin
*
* Depends on jWYSIWYG
*
* By: Esteban Beltran (academo) <sergies@gmail.com>
*/
(function ($) {
if (undefined === $.wysiwyg) {
throw "wysiwyg.image.js depends on $.wysiwyg";
}
if (!$.wysiwyg.controls) {
$.wysiwyg.controls = {};
}
/*
* Wysiwyg namespace: public properties and methods
*/
$.wysiwyg.controls.link = {
init: function (Wysiwyg) {
var self = this, elements, dialog, url, a, selection,
formLinkHtml, formTextLegend, formTextUrl, formTextTitle, formTextTarget,
formTextSubmit, formTextReset,
baseUrl;
formTextLegend = "Insert Link";
formTextUrl = "Link URL";
formTextTitle = "Link Title";
formTextTarget = "Link Target";
formTextSubmit = "Insert Link";
formTextReset = "Cancel";
if ($.wysiwyg.i18n) {
formTextLegend = $.wysiwyg.i18n.t(formTextLegend, "dialogs.link");
formTextUrl = $.wysiwyg.i18n.t(formTextUrl, "dialogs.link");
formTextTitle = $.wysiwyg.i18n.t(formTextTitle, "dialogs.link");
formTextTarget = $.wysiwyg.i18n.t(formTextTarget, "dialogs.link");
formTextSubmit = $.wysiwyg.i18n.t(formTextSubmit, "dialogs.link");
formTextReset = $.wysiwyg.i18n.t(formTextReset, "dialogs");
}
formLinkHtml = '<form class="wysiwyg"><fieldset><legend>' + formTextLegend + '</legend>' +
'<label>' + formTextUrl + ': <input type="text" name="linkhref" value=""/></label>' +
'<label>' + formTextTitle + ': <input type="text" name="linktitle" value=""/></label>' +
'<label>' + formTextTarget + ': <input type="text" name="linktarget" value=""/></label>' +
'<input type="submit" class="button" value="' + formTextSubmit + '"/> ' +
'<input type="reset" value="' + formTextReset + '"/></fieldset></form>';
a = {
self: Wysiwyg.dom.getElement("a"), // link to element node
href: "http://",
title: "",
target: ""
};
if (a.self) {
a.href = a.self.href ? a.self.href : a.href;
a.title = a.self.title ? a.self.title : "";
a.target = a.self.target ? a.self.target : "";
}
if ($.fn.dialog) {
elements = $(formLinkHtml);
elements.find("input[name=linkhref]").val(a.href);
elements.find("input[name=linktitle]").val(a.title);
elements.find("input[name=linktarget]").val(a.target);
if ($.browser.msie) {
dialog = elements.appendTo(Wysiwyg.editorDoc.body);
} else {
dialog = elements.appendTo("body");
}
dialog.dialog({
modal: true,
open: function (ev, ui) {
$("input:submit", dialog).click(function (e) {
e.preventDefault();
var url = $('input[name="linkhref"]', dialog).val(),
title = $('input[name="linktitle"]', dialog).val(),
target = $('input[name="linktarget"]', dialog).val(),
baseUrl;
if (Wysiwyg.options.controlLink.forceRelativeUrls) {
baseUrl = window.location.protocol + "//" + window.location.hostname;
if (0 === url.indexOf(baseUrl)) {
url = url.substr(baseUrl.length);
}
}
if (a.self) {
if ("string" === typeof (url)) {
if (url.length > 0) {
// to preserve all link attributes
$(a.self).attr("href", url).attr("title", title).attr("target", target);
} else {
$(a.self).replaceWith(a.self.innerHTML);
}
}
} else {
if ($.browser.msie) {
Wysiwyg.ui.returnRange();
}
//Do new link element
selection = Wysiwyg.getRangeText();
img = Wysiwyg.dom.getElement("img");
if ((selection && selection.length > 0) || img) {
if ($.browser.msie) {
Wysiwyg.ui.focus();
}
if ("string" === typeof (url)) {
if (url.length > 0) {
Wysiwyg.editorDoc.execCommand("createLink", false, url);
} else {
Wysiwyg.editorDoc.execCommand("unlink", false, null);
}
}
a.self = Wysiwyg.dom.getElement("a");
$(a.self).attr("href", url).attr("title", title);
/**
* @url https://github.com/akzhan/jwysiwyg/issues/16
*/
$(a.self).attr("target", target);
} else if (Wysiwyg.options.messages.nonSelection) {
window.alert(Wysiwyg.options.messages.nonSelection);
}
}
Wysiwyg.saveContent();
$(dialog).dialog("close");
});
$("input:reset", dialog).click(function (e) {
e.preventDefault();
$(dialog).dialog("close");
});
},
close: function (ev, ui) {
dialog.dialog("destroy");
}
});
} else {
if (a.self) {
url = window.prompt("URL", a.href);
if (Wysiwyg.options.controlLink.forceRelativeUrls) {
baseUrl = window.location.protocol + "//" + window.location.hostname;
if (0 === url.indexOf(baseUrl)) {
url = url.substr(baseUrl.length);
}
}
if ("string" === typeof (url)) {
if (url.length > 0) {
$(a.self).attr("href", url);
} else {
$(a.self).replaceWith(a.self.innerHTML);
}
}
} else {
//Do new link element
selection = Wysiwyg.getRangeText();
img = Wysiwyg.dom.getElement("img");
if ((selection && selection.length > 0) || img) {
if ($.browser.msie) {
Wysiwyg.ui.focus();
Wysiwyg.editorDoc.execCommand("createLink", true, null);
} else {
url = window.prompt(formTextUrl, a.href);
if (Wysiwyg.options.controlLink.forceRelativeUrls) {
baseUrl = window.location.protocol + "//" + window.location.hostname;
if (0 === url.indexOf(baseUrl)) {
url = url.substr(baseUrl.length);
}
}
if ("string" === typeof (url)) {
if (url.length > 0) {
Wysiwyg.editorDoc.execCommand("createLink", false, url);
} else {
Wysiwyg.editorDoc.execCommand("unlink", false, null);
}
}
}
} else if (Wysiwyg.options.messages.nonSelection) {
window.alert(Wysiwyg.options.messages.nonSelection);
}
}
Wysiwyg.saveContent();
}
$(Wysiwyg.editorDoc).trigger("editorRefresh.wysiwyg");
}
};
$.wysiwyg.createLink = function (object, url) {
return object.each(function () {
var oWysiwyg = $(this).data("wysiwyg"),
selection;
if (!oWysiwyg) {
return this;
}
if (!url || url.length === 0) {
return this;
}
selection = oWysiwyg.getRangeText();
if (selection && selection.length > 0) {
if ($.browser.msie) {
oWysiwyg.ui.focus();
}
oWysiwyg.editorDoc.execCommand("unlink", false, null);
oWysiwyg.editorDoc.execCommand("createLink", false, url);
} else if (oWysiwyg.options.messages.nonSelection) {
window.alert(oWysiwyg.options.messages.nonSelection);
}
});
};
})(jQuery);


PK 99