define(function () { // Adds a context menu entry to open the selected link in a new tab. // See https://github.com/xwiki-contrib/application-ckeditor/commit/755d193497bf23ed874d874b4ae92fbee887fc10 return { addSupportForOpeningLinksInNewTab : function (Ckeditor) { // Returns the DOM element of the active (currently focused) link. It has also support for linked image widgets. // @return {CKEDITOR.dom.element} var getActiveLink = function(editor) { var anchor = Ckeditor.plugins.link.getSelectedLink(editor), // We need to do some special checking against widgets availability. activeWidget = editor.widgets && editor.widgets.focused; // If default way of getting links didn't return anything useful.. if (!anchor && activeWidget && activeWidget.name === 'image' && activeWidget.parts.link) { // Since CKEditor 4.4.0 image widgets may be linked. anchor = activeWidget.parts.link; } return anchor; }; return function(event) { var editor = event.editor; if (!Ckeditor.plugins.link) { return; } editor.addCommand( 'openLink', { exec: function(editor) { var anchor = getActiveLink(editor); if (anchor) { var href = anchor.getAttribute('href'); if (href) { window.open(href); } } } }); if (typeof editor.addMenuItem === 'function') { editor.addMenuItem('openLink', { label: 'Open Link in New Tab', command: 'openLink', group: 'link', order: -1 }); } if (editor.contextMenu) { editor.contextMenu.addListener(function(startElement) { if (startElement) { var anchor = getActiveLink(editor); if (anchor && anchor.getAttribute('href')) { return {openLink: Ckeditor.TRISTATE_OFF}; } } }); editor.contextMenu._.panelDefinition.css.push('.cke_button__openLink_icon {' + Ckeditor.skin.getIconStyle('link') + '}'); } }; } }; });