META-INF.resources.scripts.vendor.plugins.wysiwyg.wysiwyg.link.js Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of lightadmin Show documentation
Show all versions of lightadmin Show documentation
Pluggable data management solution for Java web applications developed in a "Rapid" manner
/**
* Controls: Link plugin
*
* Depends on jWYSIWYG
*
* By: Esteban Beltran (academo)
*/
(function ( $ ) {
"use strict";
if ( undefined === $.wysiwyg ) {
throw "wysiwyg.link.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, dialogReplacements, key, translation, regexp, baseUrl, img;
dialogReplacements = {
legend: "Insert Link",
url: "Link URL",
title: "Link Title",
target: "Link Target",
submit: "Insert Link",
reset: "Cancel"
};
formLinkHtml = '';
for ( key in dialogReplacements ) {
if ( $.wysiwyg.i18n ) {
translation = $.wysiwyg.i18n.t( dialogReplacements[key], "dialogs.link" );
if ( translation === dialogReplacements[key] ) { // if not translated search in dialogs
translation = $.wysiwyg.i18n.t( dialogReplacements[key], "dialogs" );
}
dialogReplacements[key] = translation;
}
regexp = new RegExp( "{" + key + "}", "g" );
formLinkHtml = formLinkHtml.replace( regexp, dialogReplacements[key] );
}
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 ) {
try {
dialog = elements.appendTo( Wysiwyg.editorDoc.body );
} catch ( err ) {
dialog = elements.appendTo( "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, img;
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" );
dialog.remove();
}
} );
} 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( dialogReplacements.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 ) {
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 );
}
return this;
} );
};
})( jQuery );