JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
vanilla ckeditor-3.0.1
[ckeditor.git] / plugins / htmldataprocessor / plugin.js
index 942c155..8bb8c57 100644 (file)
@@ -3,5 +3,5 @@ Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.html or http://ckeditor.com/license\r
 */\r
 \r
-(function(){var a=/^[\t\r\n ]*(?:&nbsp;|\xa0)$/,b='{cke_protected}';function c(A,B){var C=A.children,D=C[C.length-1];if(D){if((B||!CKEDITOR.env.ie)&&(D.type==CKEDITOR.NODE_ELEMENT&&D.name=='br'))C.pop();if(D.type==CKEDITOR.NODE_TEXT&&a.test(D.value))C.pop();}};function d(A){if(A.children.length<1)return true;var B=A.children[A.children.length-1];return B.type==CKEDITOR.NODE_ELEMENT&&B.name=='br';};function e(A){c(A,true);if(d(A))if(CKEDITOR.env.ie)A.add(new CKEDITOR.htmlParser.text('\xa0'));else A.add(new CKEDITOR.htmlParser.element('br',{}));};function f(A){c(A);if(d(A))A.add(new CKEDITOR.htmlParser.text('\xa0'));};var g=CKEDITOR.dtd,h=CKEDITOR.tools.extend({},g.$block,g.$listItem,g.$tableContent);for(var i in h)if(!('br' in g[i]))delete h[i];delete h.pre;var j={attributeNames:[[/^on/,'_cke_pa_on']]},k={elements:{}};for(i in h)k.elements[i]=e;var l={elementNames:[[/^cke:/,''],[/^\?xml:namespace$/,'']],attributeNames:[[/^_cke_(saved|pa)_/,''],[/^_cke.*/,'']],elements:{$:function(A){var B=A.attributes;if(B){var C=['name','href','src'],D;for(var E=0;E<C.length;E++){D='_cke_saved_'+C[E];D in B&&delete B[C[E]];}}},embed:function(A){var B=A.parent;if(B&&B.name=='object'){var C=B.attributes.width,D=B.attributes.height;C&&(A.attributes.width=C);D&&(A.attributes.height=D);}},param:function(A){A.children=[];A.isEmpty=true;return A;},a:function(A){if(!(A.children.length||A.attributes.name||A.attributes._cke_saved_name))return false;}},attributes:{'class':function(A,B){return CKEDITOR.tools.ltrim(A.replace(/(?:^|\s+)cke_[^\s]*/g,''))||false;}},comment:function(A){if(A.substr(0,b.length)==b)return new CKEDITOR.htmlParser.cdata(decodeURIComponent(A.substr(b.length)));return A;}},m={elements:{}};for(i in h)m.elements[i]=f;if(CKEDITOR.env.ie)l.attributes.style=function(A,B){return A.toLowerCase();};var n=/<(?:a|area|img|input).*?\s((?:href|src|name)\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|(?:[^ "'>]+)))/gi;function o(A){return A.replace(n,'$& _cke_saved_$1');};var p=/<(style)(?=[ >])[^>]*>[^<]*<\/\1>/gi,q=/<cke:encoded>([^<]*)<\/cke:encoded>/gi,r=/(<\/?)((?:object|embed|param).*?>)/gi,s=/<cke:param(.*?)\/>/gi;function t(A){return '<cke:encoded>'+encodeURIComponent(A)+'</cke:encoded>';};function u(A){return A.replace(p,t);};function v(A){return A.replace(r,'$1cke:$2');};function w(A){return A.replace(s,'<cke:param$1></cke:param>');};function x(A,B){return decodeURIComponent(B);};function y(A){return A.replace(q,x);};function z(A,B){var C=[],D=/<\!--\{cke_temp\}(\d*?)-->/g,E=[/<!--[\s\S]*?-->/g,/<script[\s\S]*?<\/script>/gi,/<noscript[\s\S]*?<\/noscript>/gi].concat(B);\r
-for(var F=0;F<E.length;F++)A=A.replace(E[F],function(G){G=G.replace(D,function(H,I){return C[I];});return '<!--{cke_temp}'+(C.push(G)-1)+'-->';});A=A.replace(D,function(G,H){return '<!--'+b+encodeURIComponent(C[H]).replace(/--/g,'%2D%2D')+'-->';});return A;};CKEDITOR.plugins.add('htmldataprocessor',{requires:['htmlwriter'],init:function(A){var B=A.dataProcessor=new CKEDITOR.htmlDataProcessor(A);B.writer.forceSimpleAmpersand=A.config.forceSimpleAmpersand;B.dataFilter.addRules(j);B.dataFilter.addRules(k);B.htmlFilter.addRules(l);B.htmlFilter.addRules(m);}});CKEDITOR.htmlDataProcessor=function(A){var B=this;B.editor=A;B.writer=new CKEDITOR.htmlWriter();B.dataFilter=new CKEDITOR.htmlParser.filter();B.htmlFilter=new CKEDITOR.htmlParser.filter();};CKEDITOR.htmlDataProcessor.prototype={toHtml:function(A,B){A=z(A,this.editor.config.protectedSource);A=o(A);if(CKEDITOR.env.ie)A=u(A);A=v(A);A=w(A);var C=document.createElement('div');C.innerHTML='a'+A;A=C.innerHTML.substr(1);if(CKEDITOR.env.ie)A=y(A);var D=CKEDITOR.htmlParser.fragment.fromHtml(A,B),E=new CKEDITOR.htmlParser.basicWriter();D.writeHtml(E,this.dataFilter);return E.getHtml(true);},toDataFormat:function(A,B){var C=this.writer,D=CKEDITOR.htmlParser.fragment.fromHtml(A,B);C.reset();D.writeHtml(C,this.htmlFilter);return C.getHtml(true);}};})();CKEDITOR.config.forceSimpleAmpersand=false;\r
+(function(){var a=/^[\t\r\n ]*(?:&nbsp;|\xa0)$/,b='{cke_protected}';function c(B){var C=B.children.length,D=B.children[C-1];while(D&&D.type==CKEDITOR.NODE_TEXT&&!CKEDITOR.tools.trim(D.value))D=B.children[--C];return D;};function d(B,C){var D=B.children,E=c(B);if(E){if((C||!CKEDITOR.env.ie)&&(E.type==CKEDITOR.NODE_ELEMENT&&E.name=='br'))D.pop();if(E.type==CKEDITOR.NODE_TEXT&&a.test(E.value))D.pop();}};function e(B){var C=c(B);return!C||C.type==CKEDITOR.NODE_ELEMENT&&C.name=='br';};function f(B){d(B,true);if(e(B))if(CKEDITOR.env.ie)B.add(new CKEDITOR.htmlParser.text('\xa0'));else B.add(new CKEDITOR.htmlParser.element('br',{}));};function g(B){d(B);if(e(B))B.add(new CKEDITOR.htmlParser.text('\xa0'));};var h=CKEDITOR.dtd,i=CKEDITOR.tools.extend({},h.$block,h.$listItem,h.$tableContent);for(var j in i)if(!('br' in h[j]))delete i[j];delete i.pre;var k={attributeNames:[[/^on/,'_cke_pa_on']]},l={elements:{}};for(j in i)l.elements[j]=f;var m={elementNames:[[/^cke:/,''],[/^\?xml:namespace$/,'']],attributeNames:[[/^_cke_(saved|pa)_/,''],[/^_cke.*/,'']],elements:{$:function(B){var C=B.attributes;if(C){var D=['name','href','src'],E;for(var F=0;F<D.length;F++){E='_cke_saved_'+D[F];E in C&&delete C[D[F]];}}},embed:function(B){var C=B.parent;if(C&&C.name=='object'){var D=C.attributes.width,E=C.attributes.height;D&&(B.attributes.width=D);E&&(B.attributes.height=E);}},param:function(B){B.children=[];B.isEmpty=true;return B;},a:function(B){if(!(B.children.length||B.attributes.name||B.attributes._cke_saved_name))return false;}},attributes:{'class':function(B,C){return CKEDITOR.tools.ltrim(B.replace(/(?:^|\s+)cke_[^\s]*/g,''))||false;}},comment:function(B){if(B.substr(0,b.length)==b)return new CKEDITOR.htmlParser.cdata(decodeURIComponent(B.substr(b.length)));return B;}},n={elements:{}};for(j in i)n.elements[j]=g;if(CKEDITOR.env.ie)m.attributes.style=function(B,C){return B.toLowerCase();};var o=/<(?:a|area|img|input).*?\s((?:href|src|name)\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|(?:[^ "'>]+)))/gi;function p(B){return B.replace(o,'$& _cke_saved_$1');};var q=/<(style)(?=[ >])[^>]*>[^<]*<\/\1>/gi,r=/<cke:encoded>([^<]*)<\/cke:encoded>/gi,s=/(<\/?)((?:object|embed|param).*?>)/gi,t=/<cke:param(.*?)\/>/gi;function u(B){return '<cke:encoded>'+encodeURIComponent(B)+'</cke:encoded>';};function v(B){return B.replace(q,u);};function w(B){return B.replace(s,'$1cke:$2');};function x(B){return B.replace(t,'<cke:param$1></cke:param>');};function y(B,C){return decodeURIComponent(C);};function z(B){return B.replace(r,y);\r
+};function A(B,C){var D=[],E=/<\!--\{cke_temp\}(\d*?)-->/g,F=[/<!--[\s\S]*?-->/g,/<script[\s\S]*?<\/script>/gi,/<noscript[\s\S]*?<\/noscript>/gi].concat(C);for(var G=0;G<F.length;G++)B=B.replace(F[G],function(H){H=H.replace(E,function(I,J){return D[J];});return '<!--{cke_temp}'+(D.push(H)-1)+'-->';});B=B.replace(E,function(H,I){return '<!--'+b+encodeURIComponent(D[I]).replace(/--/g,'%2D%2D')+'-->';});return B;};CKEDITOR.plugins.add('htmldataprocessor',{requires:['htmlwriter'],init:function(B){var C=B.dataProcessor=new CKEDITOR.htmlDataProcessor(B);C.writer.forceSimpleAmpersand=B.config.forceSimpleAmpersand;C.dataFilter.addRules(k);C.dataFilter.addRules(l);C.htmlFilter.addRules(m);C.htmlFilter.addRules(n);}});CKEDITOR.htmlDataProcessor=function(B){var C=this;C.editor=B;C.writer=new CKEDITOR.htmlWriter();C.dataFilter=new CKEDITOR.htmlParser.filter();C.htmlFilter=new CKEDITOR.htmlParser.filter();};CKEDITOR.htmlDataProcessor.prototype={toHtml:function(B,C){B=A(B,this.editor.config.protectedSource);B=p(B);if(CKEDITOR.env.ie)B=v(B);B=w(B);B=x(B);var D=document.createElement('div');D.innerHTML='a'+B;B=D.innerHTML.substr(1);if(CKEDITOR.env.ie)B=z(B);var E=CKEDITOR.htmlParser.fragment.fromHtml(B,C),F=new CKEDITOR.htmlParser.basicWriter();E.writeHtml(F,this.dataFilter);return F.getHtml(true);},toDataFormat:function(B,C){var D=this.writer,E=CKEDITOR.htmlParser.fragment.fromHtml(B,C);D.reset();E.writeHtml(D,this.htmlFilter);return D.getHtml(true);}};})();CKEDITOR.config.forceSimpleAmpersand=false;\r