X-Git-Url: https://jasonwoof.com/gitweb/?p=ckeditor.git;a=blobdiff_plain;f=_source%2Fplugins%2Fhtmldataprocessor%2Fplugin.js;h=a460bba57ef742079d4cbb243195a1f562f79af8;hp=f9b5deab14620bc52a86c17fff26657b7dd56c9e;hb=48b1db88210b4160dce439c6e3e32e14af8c106b;hpb=9afde8772159bd3436f1f5b7862960307710ae5a diff --git a/_source/plugins/htmldataprocessor/plugin.js b/_source/plugins/htmldataprocessor/plugin.js index f9b5dea..a460bba 100644 --- a/_source/plugins/htmldataprocessor/plugin.js +++ b/_source/plugins/htmldataprocessor/plugin.js @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ @@ -92,7 +92,14 @@ For licensing, see LICENSE.html or http://ckeditor.com/license delete blockLikeTags.pre; var defaultDataFilterRules = { - elements : {}, + elements : { + a : function( element ) + { + var attrs = element.attributes; + if ( attrs && attrs[ 'data-cke-saved-name' ] ) + attrs[ 'class' ] = ( attrs[ 'class' ] ? attrs[ 'class' ] + ' ' : '' ) + 'cke_anchor'; + } + }, attributeNames : [ // Event attributes (onXYZ) must not be directly set. They can become @@ -122,8 +129,8 @@ For licensing, see LICENSE.html or http://ckeditor.com/license // Attributes saved for changes and protected attributes. [ ( /^data-cke-(saved|pa)-/ ), '' ], - // All "data-cke" attributes are to be ignored. - [ ( /^data-cke.*/ ), '' ], + // All "data-cke-" attributes are to be ignored. + [ ( /^data-cke-.*/ ), '' ], [ 'hidefocus', '' ] ], @@ -193,6 +200,9 @@ For licensing, see LICENSE.html or http://ckeditor.com/license delete element.name; }, + // Empty
in IE is reported with filler node ( ). + pre : function( element ) { CKEDITOR.env.ie && trimFillers( element ); }, + html : function( element ) { delete element.attributes.contenteditable; @@ -251,20 +261,35 @@ For licensing, see LICENSE.html or http://ckeditor.com/license if ( CKEDITOR.env.ie ) { // IE outputs style attribute in capital letters. We should convert - // them back to lower case. + // them back to lower case, while not hurting the values (#5930) defaultHtmlFilterRules.attributes.style = function( value, element ) { - return value.toLowerCase(); + return value.replace( /(^|;)([^\:]+)/g, function( match ) + { + return match.toLowerCase(); + }); }; } function protectReadOnly( element ) { - element.attributes.contenteditable = "false"; + var attrs = element.attributes; + + // We should flag that the element was locked by our code so + // it'll be editable by the editor functions (#6046). + if ( attrs.contenteditable != "false" ) + attrs[ 'data-cke-editable' ] = attrs.contenteditable ? 'true' : 1; + + attrs.contenteditable = "false"; } function unprotectReadyOnly( element ) { - delete element.attributes.contenteditable; + var attrs = element.attributes; + switch( attrs[ 'data-cke-editable' ] ) + { + case 'true': attrs.contenteditable = 'true'; break; + case '1': delete attrs.contenteditable; break; + } } // Disable form elements editing mode provided by some browers. (#5746) for ( i in { input : 1, textarea : 1 } ) @@ -273,8 +298,8 @@ For licensing, see LICENSE.html or http://ckeditor.com/license defaultHtmlFilterRules.elements[ i ] = unprotectReadyOnly; } - var protectAttributeRegex = /<((?:a|area|img|input)\b[\s\S]*?\s)((href|src|name)\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|(?:[^ "'>]+)))([^>]*)>/gi, - findSavedSrcRegex = /\sdata-cke-saved-src\s*=/; + var protectElementRegex = /<(a|area|img|input)\b([^>]*)>/gi, + protectAttributeRegex = /\b(href|src|name)\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|(?:[^ "'>]+))/gi; var protectElementsRegex = /(?: