X-Git-Url: https://jasonwoof.com/gitweb/?p=ckeditor.git;a=blobdiff_plain;f=_source%2Fplugins%2Flink%2Fdialogs%2Flink.js;h=f904e032c7f3ed49bc55451dea2d54b718342d24;hp=8d4e74b5d1ee029bb49632a0f57cf7086504912b;hb=c6e377a02b54abc07129d72b632763c727476a15;hpb=941b0a9ba4e673e292510d80a5a86806994b8ea6
diff --git a/_source/plugins/link/dialogs/link.js b/_source/plugins/link/dialogs/link.js
index 8d4e74b..f904e03 100644
--- a/_source/plugins/link/dialogs/link.js
+++ b/_source/plugins/link/dialogs/link.js
@@ -17,18 +17,26 @@ CKEDITOR.dialog.add( 'link', function( editor )
return;
popupFeatures = popupFeatures.getElement();
+ popupFeatures.hide();
+ targetName.setValue( '' );
+
+ switch ( value )
+ {
+ case 'frame' :
+ targetName.setLabel( editor.lang.link.targetFrameName );
+ targetName.getElement().show();
+ break;
+ case 'popup' :
+ popupFeatures.show();
+ targetName.setLabel( editor.lang.link.targetPopupName );
+ targetName.getElement().show();
+ break;
+ default :
+ targetName.setValue( value );
+ targetName.getElement().hide();
+ break;
+ }
- if ( value == 'popup' )
- {
- popupFeatures.show();
- targetName.setLabel( editor.lang.link.targetPopupName );
- }
- else
- {
- popupFeatures.hide();
- targetName.setLabel( editor.lang.link.targetFrameName );
- this.getDialog().setValueOf( 'target', 'linkTargetName', value.charAt( 0 ) == '_' ? value : '' );
- }
};
// Handles the event when the "Type" selection box is changed.
@@ -69,11 +77,12 @@ CKEDITOR.dialog.add( 'link', function( editor )
};
// Loads the parameters in a selected link to the link dialog fields.
- var emailRegex = /^mailto:([^?]+)(?:\?(.+))?$/,
+ var javascriptProtocolRegex = /^javascript:/,
+ emailRegex = /^mailto:([^?]+)(?:\?(.+))?$/,
emailSubjectRegex = /subject=([^;?:@&=$,\/]*)/,
emailBodyRegex = /body=([^;?:@&=$,\/]*)/,
anchorRegex = /^#(.*)$/,
- urlRegex = /^(?!javascript)((?:http|https|ftp|news):\/\/)?(.*)$/,
+ urlRegex = /^((?:http|https|ftp|news):\/\/)?(.*)$/,
selectableTargets = /^(_(?:self|top|parent|blank))$/,
encodedEmailLinkRegex = /^javascript:void\(location\.href='mailto:'\+String\.fromCharCode\(([^)]+)\)(?:\+'(.*)')?\)$/,
functionCallProtectedEmailLinkRegex = /^javascript:([^(]+)\(([^)]+)\)$/;
@@ -85,29 +94,15 @@ CKEDITOR.dialog.add( 'link', function( editor )
var parseLink = function( editor, element )
{
var href = element ? ( element.getAttribute( '_cke_saved_href' ) || element.getAttribute( 'href' ) ) : '',
+ javascriptMatch,
emailMatch,
anchorMatch,
urlMatch,
retval = {};
- if ( ( anchorMatch = href.match( anchorRegex ) ) )
+ if ( ( javascriptMatch = href.match( javascriptProtocolRegex ) ) )
{
- retval.type = 'anchor';
- retval.anchor = {};
- retval.anchor.name = retval.anchor.id = anchorMatch[1];
- }
- // urlRegex matches empty strings, so need to check for href as well.
- else if ( href && ( urlMatch = href.match( urlRegex ) ) )
- {
- retval.type = 'url';
- retval.url = {};
- retval.url.protocol = urlMatch[1];
- retval.url.url = urlMatch[2];
- }
- // Protected email link as encoded string.
- else if ( !emailProtection || emailProtection == 'encode' )
- {
- if( emailProtection == 'encode' )
+ if ( emailProtection == 'encode' )
{
href = href.replace( encodedEmailLinkRegex,
function ( match, protectedAddress, rest )
@@ -115,12 +110,47 @@ CKEDITOR.dialog.add( 'link', function( editor )
return 'mailto:' +
String.fromCharCode.apply( String, protectedAddress.split( ',' ) ) +
( rest && unescapeSingleQuote( rest ) );
- } );
+ });
}
+ // Protected email link as function call.
+ else if ( emailProtection )
+ {
+ href.replace( functionCallProtectedEmailLinkRegex, function( match, funcName, funcArgs )
+ {
+ if ( funcName == compiledProtectionFunction.name )
+ {
+ retval.type = 'email';
+ var email = retval.email = {};
- emailMatch = href.match( emailRegex );
+ var paramRegex = /[^,\s]+/g,
+ paramQuoteRegex = /(^')|('$)/g,
+ paramsMatch = funcArgs.match( paramRegex ),
+ paramsMatchLength = paramsMatch.length,
+ paramName,
+ paramVal;
- if( emailMatch )
+ for ( var i = 0; i < paramsMatchLength; i++ )
+ {
+ paramVal = decodeURIComponent( unescapeSingleQuote( paramsMatch[ i ].replace( paramQuoteRegex, '' ) ) );
+ paramName = compiledProtectionFunction.params[ i ].toLowerCase();
+ email[ paramName ] = paramVal;
+ }
+ email.address = [ email.name, email.domain ].join( '@' );
+ }
+ } );
+ }
+ }
+
+ if ( !retval.type )
+ {
+ if ( ( anchorMatch = href.match( anchorRegex ) ) )
+ {
+ retval.type = 'anchor';
+ retval.anchor = {};
+ retval.anchor.name = retval.anchor.id = anchorMatch[1];
+ }
+ // Protected email link as encoded string.
+ else if ( ( emailMatch = href.match( emailRegex ) ) )
{
var subjectMatch = href.match( emailSubjectRegex ),
bodyMatch = href.match( emailBodyRegex );
@@ -131,36 +161,17 @@ CKEDITOR.dialog.add( 'link', function( editor )
subjectMatch && ( email.subject = decodeURIComponent( subjectMatch[ 1 ] ) );
bodyMatch && ( email.body = decodeURIComponent( bodyMatch[ 1 ] ) );
}
- }
- // Protected email link as function call.
- else if( emailProtection )
- {
- href.replace( functionCallProtectedEmailLinkRegex, function( match, funcName, funcArgs )
+ // urlRegex matches empty strings, so need to check for href as well.
+ else if ( href && ( urlMatch = href.match( urlRegex ) ) )
{
- if( funcName == compiledProtectionFunction.name )
- {
- retval.type = 'email';
- var email = retval.email = {};
-
- var paramRegex = /[^,\s]+/g,
- paramQuoteRegex = /(^')|('$)/g,
- paramsMatch = funcArgs.match( paramRegex ),
- paramsMatchLength = paramsMatch.length,
- paramName,
- paramVal;
-
- for ( var i = 0; i < paramsMatchLength; i++ )
- {
- paramVal = decodeURIComponent( unescapeSingleQuote( paramsMatch[ i ].replace( paramQuoteRegex, '' ) ) );
- paramName = compiledProtectionFunction.params[ i ].toLowerCase();
- email[ paramName ] = paramVal;
- }
- email.address = [ email.name, email.domain ].join( '@' );
- }
- } );
+ retval.type = 'url';
+ retval.url = {};
+ retval.url.protocol = urlMatch[1];
+ retval.url.url = urlMatch[2];
+ }
+ else
+ retval.type = 'url';
}
- else
- retval.type = 'url';
// Load target and popup settings.
if ( element )
@@ -227,7 +238,7 @@ CKEDITOR.dialog.add( 'link', function( editor )
realAnchors = new CKEDITOR.dom.nodeList( editor.document.$.anchors ),
anchors = retval.anchors = [];
- for( var i = 0; i < elements.count() ; i++ )
+ for ( var i = 0; i < elements.count() ; i++ )
{
var item = elements.getItem( i );
if ( item.getAttribute( '_cke_realelement' ) && item.getAttribute( '_cke_real_element_type' ) == 'anchor' )
@@ -298,7 +309,7 @@ CKEDITOR.dialog.add( 'link', function( editor )
var emailProtection = editor.config.emailProtection || '';
// Compile the protection function pattern.
- if( emailProtection && emailProtection != 'encode' )
+ if ( emailProtection && emailProtection != 'encode' )
{
var compiledProtectionFunction = {};
@@ -481,6 +492,10 @@ CKEDITOR.dialog.add( 'link', function( editor )
},
commit : function( data )
{
+ // IE will not trigger the onChange event if the mouse has been used
+ // to carry all the operations #4724
+ this.onChange();
+
if ( !data.url )
data.url = {};
@@ -1312,7 +1327,9 @@ CKEDITOR.dialog.add( 'link', function( editor )
else
{
// We're only editing an existing link, so just overwrite the attributes.
- var element = this._.selectedElement;
+ var element = this._.selectedElement,
+ href = element.getAttribute( '_cke_saved_href' ),
+ textView = element.getHtml();
// IE BUG: Setting the name attribute to an existing link doesn't work.
// Must re-create the link from weired syntax to workaround.
@@ -1333,7 +1350,9 @@ CKEDITOR.dialog.add( 'link', function( editor )
element.setAttributes( attributes );
element.removeAttributes( removeAttributes );
-
+ // Update text view when user changes protocol #4612.
+ if (href == textView)
+ element.setHtml( attributes._cke_saved_href );
// Make the element display as an anchor if a name has been set.
if ( element.getAttribute( 'name' ) )
element.addClass( 'cke_anchor' );
@@ -1359,21 +1378,27 @@ CKEDITOR.dialog.add( 'link', function( editor )
});
/**
- * The e-mail address anti-spam protection option.
+ * The e-mail address anti-spam protection option. The protection will be
+ * applied when creating or modifying e-mail links through the editor interface.
+ * Two methods of protection can be choosed:
+ *