\r
CKEDITOR.dialog.add( 'link', function( editor )\r
{\r
+ var plugin = CKEDITOR.plugins.link;\r
// Handles the event when the "Target" selection box is changed.\r
var targetChanged = function()\r
{\r
\r
var parseLink = function( editor, element )\r
{\r
- var href = element ? ( element.getAttribute( '_cke_saved_href' ) || element.getAttribute( 'href' ) ) : '',\r
+ var href = ( element && ( element.getAttribute( '_cke_saved_href' ) || element.getAttribute( 'href' ) ) ) || '',\r
javascriptMatch,\r
emailMatch,\r
anchorMatch,\r
type : 'select',\r
label : editor.lang.common.protocol,\r
'default' : 'http://',\r
- style : 'width : 100%;',\r
items :\r
[\r
- [ 'http://' ],\r
- [ 'https://' ],\r
- [ 'ftp://' ],\r
- [ 'news://' ],\r
- [ '<other>', '' ]\r
+ // Force 'ltr' for protocol names in BIDI. (#5433)\r
+ [ 'http://\u200E', 'http://' ],\r
+ [ 'https://\u200E', 'https://' ],\r
+ [ 'ftp://\u200E', 'ftp://' ],\r
+ [ 'news://\u200E', 'news://' ],\r
+ [ editor.lang.link.other , '' ]\r
],\r
setup : function( data )\r
{\r
var protocolCmb = this.getDialog().getContentElement( 'info', 'protocol' ),\r
url = this.getValue(),\r
urlOnChangeProtocol = /^(http|https|ftp|news):\/\/(?=.)/gi,\r
- urlOnChangeTestOther = /^((javascript:)|[#\/\.])/gi;\r
+ urlOnChangeTestOther = /^((javascript:)|[#\/\.\?])/gi;\r
\r
var protocol = urlOnChangeProtocol.exec( url );\r
if ( protocol )\r
if ( !data.target )\r
data.target = {};\r
\r
- data.target.name = this.getValue();\r
+ data.target.name = this.getValue().replace(/\W/gi, '');\r
}\r
}\r
]\r
\r
var editor = this.getParentEditor(),\r
selection = editor.getSelection(),\r
- ranges = selection.getRanges(),\r
- element = null,\r
- me = this;\r
+ element = null;\r
+\r
// Fill in all the relevant fields if there's already one link selected.\r
- if ( ranges.length == 1 )\r
+ if ( ( element = plugin.getSelectedLink( editor ) ) && element.hasAttribute( 'href' ) )\r
+ selection.selectElement( element );\r
+ else if ( ( element = selection.getSelectedElement() ) && element.is( 'img' )\r
+ && element.getAttribute( '_cke_real_element_type' )\r
+ && element.getAttribute( '_cke_real_element_type' ) == 'anchor' )\r
{\r
-\r
- var rangeRoot = ranges[0].getCommonAncestor( true );\r
- element = rangeRoot.getAscendant( 'a', true );\r
- if ( element && element.getAttribute( 'href' ) )\r
- {\r
- selection.selectElement( element );\r
- }\r
- else if ( ( element = rangeRoot.getAscendant( 'img', true ) ) &&\r
- element.getAttribute( '_cke_real_element_type' ) &&\r
- element.getAttribute( '_cke_real_element_type' ) == 'anchor' )\r
- {\r
- this.fakeObj = element;\r
- element = editor.restoreRealElement( this.fakeObj );\r
- selection.selectElement( this.fakeObj );\r
- }\r
- else\r
- element = null;\r
+ this.fakeObj = element;\r
+ element = editor.restoreRealElement( this.fakeObj );\r
+ selection.selectElement( this.fakeObj );\r
}\r
+ else\r
+ element = null;\r
\r
this.setupContent( parseLink.apply( this, [ editor, element ] ) );\r
},\r