📄 overview-summary-tinymce_cleanup.class.js.html
字号:
h = h.replace(/<p>\s*<br \/>\s*&nbsp;\s*<\/p>/g, <span class="literal">'<p>&nbsp;</p>'</span>);
h = h.replace(/<a>(.*?)<\/a>/g, <span class="literal">'$1'</span>);
<span class="comment">// Clean body</span>
<span class="reserved">if</span> (/^\s*(<br \/>|<p>&nbsp;<\/p>|<p>&#160;<\/p>|<p><\/p>)\s*$/.test(h))
h = <span class="literal">''</span>;
<span class="comment">// If preformatted</span>
<span class="reserved">if</span> (s.preformatted) {
h = h.replace(/^<pre>/, <span class="literal">''</span>);
h = h.replace(/<\/pre>$/, <span class="literal">''</span>);
h = <span class="literal">'<pre>'</span> + h + <span class="literal">'</pre>'</span>;
}
<span class="comment">// Gecko specific processing</span>
<span class="reserved">if</span> (tinyMCE.isGecko) {
h = h.replace(/<o:p _moz-userdefined=<span class="literal">""</span> \/>/g, <span class="literal">''</span>);
h = h.replace(/<td([^>]*)>\s*<br \/>\s*<\/td>/g, <span class="literal">'<td$1>&nbsp;</td>'</span>);
}
<span class="reserved">if</span> (s.force_br_newlines)
h = h.replace(/<p>(&nbsp;|&#160;)<\/p>/g, <span class="literal">'<br />'</span>);
<span class="comment">// Call custom cleanup code</span>
h = tinyMCE._customCleanup(inst, on_save ? <span class="literal">"get_from_editor"</span> : <span class="literal">"insert_to_editor"</span>, h);
<span class="comment">// Remove internal classes</span>
<span class="reserved">if</span> (on_save) {
h = h.replace(new RegExp(<span class="literal">' ?(mceItem[a-zA-Z0-9]*|'</span> + s.visual_table_class + <span class="literal">')'</span>, <span class="literal">'g'</span>), <span class="literal">''</span>);
h = h.replace(new RegExp(<span class="literal">' ?class=""'</span>, <span class="literal">'g'</span>), <span class="literal">''</span>);
}
<span class="reserved">if</span> (s.remove_linebreaks && !c.settings.indent)
h = h.replace(/\n|\r/g, <span class="literal">' '</span>);
<span class="reserved">if</span> (d)
t4 = new Date().getTime();
<span class="reserved">if</span> (on_save && c.settings.indent)
h = c.formatHTML(h);
<span class="comment">// If encoding (not recommended option)</span>
<span class="reserved">if</span> (on_submit && (s.encoding == <span class="literal">"xml"</span> || s.encoding == <span class="literal">"html"</span>))
h = c.xmlEncode(h);
<span class="reserved">if</span> (d)
t5 = new Date().getTime();
<span class="reserved">if</span> (c.settings.debug)
tinyMCE.debug(<span class="literal">"Cleanup in ms: Pre="</span> + (t2-t1) + <span class="literal">", Serialize: "</span> + (t3-t2) + <span class="literal">", Post: "</span> + (t4-t3) + <span class="literal">", Format: "</span> + (t5-t4) + <span class="literal">", Sum: "</span> + (t5-t1) + <span class="literal">"."</span>);
<span class="reserved">return</span> h;
};
<span class="comment">/**
* TinyMCE_Cleanup class.
*/</span>
<span class="reserved">function</span> TinyMCE_Cleanup() {
<span class="reserved">this</span>.isMSIE = (navigator.appName == <span class="literal">"Microsoft Internet Explorer"</span>);
<span class="reserved">this</span>.rules = tinyMCE.clearArray(new Array());
<span class="comment">// Default config</span>
<span class="reserved">this</span>.settings = {
indent_elements : <span class="literal">'head,table,tbody,thead,tfoot,form,tr,ul,ol,blockquote,object'</span>,
newline_before_elements : <span class="literal">'h1,h2,h3,h4,h5,h6,pre,address,div,ul,ol,li,meta,option,area,title,link,base,script,td'</span>,
newline_after_elements : <span class="literal">'br,hr,p,pre,address,div,ul,ol,meta,option,area,link,base,script'</span>,
newline_before_after_elements : <span class="literal">'html,head,body,table,thead,tbody,tfoot,tr,form,ul,blockquote,p,object,param,hr,div'</span>,
indent_char : <span class="literal">'\t'</span>,
indent_levels : 1,
entity_encoding : <span class="literal">'raw'</span>,
valid_elements : <span class="literal">'*[*]'</span>,
entities : <span class="literal">''</span>,
url_converter : <span class="literal">''</span>,
invalid_elements : <span class="literal">''</span>,
verify_html : false
};
<span class="reserved">this</span>.vElements = tinyMCE.clearArray(new Array());
<span class="reserved">this</span>.vElementsRe = <span class="literal">''</span>;
<span class="reserved">this</span>.closeElementsRe = /^(IMG|BR|HR|LINK|META|BASE)$/;
<span class="reserved">this</span>.codeElementsRe = /^(SCRIPT|STYLE)$/;
<span class="reserved">this</span>.mceAttribs = {
href : <span class="literal">'mce_href'</span>,
src : <span class="literal">'mce_src'</span>,
type : <span class="literal">'mce_type'</span>
};
}
TinyMCE_Cleanup.<span class="reserved">prototype</span> = {
<span class="comment">/**
* Initializes the cleanup engine with the specified config.
*
* <span class="attrib">@param</span> {Array} s Name/Value array with config settings.
*/</span>
init : <span class="reserved">function</span>(s) {
var n, a, i, ir, or, st;
<span class="reserved">for</span> (n in s)
<span class="reserved">this</span>.settings[n] = s[n];
<span class="comment">// Setup code formating</span>
s = <span class="reserved">this</span>.settings;
<span class="comment">// Setup regexps</span>
<span class="reserved">this</span>.inRe = <span class="reserved">this</span>._arrayToRe(s.indent_elements.split(<span class="literal">','</span>), <span class="literal">''</span>, <span class="literal">'^<('</span>, <span class="literal">')[^>]*'</span>);
<span class="reserved">this</span>.ouRe = <span class="reserved">this</span>._arrayToRe(s.indent_elements.split(<span class="literal">','</span>), <span class="literal">''</span>, <span class="literal">'^<\\/('</span>, <span class="literal">')[^>]*'</span>);
<span class="reserved">this</span>.nlBeforeRe = <span class="reserved">this</span>._arrayToRe(s.newline_before_elements.split(<span class="literal">','</span>), <span class="literal">'gi'</span>, <span class="literal">'<('</span>, <span class="literal">')([^>]*)>'</span>);
<span class="reserved">this</span>.nlAfterRe = <span class="reserved">this</span>._arrayToRe(s.newline_after_elements.split(<span class="literal">','</span>), <span class="literal">'gi'</span>, <span class="literal">'<('</span>, <span class="literal">')([^>]*)>'</span>);
<span class="reserved">this</span>.nlBeforeAfterRe = <span class="reserved">this</span>._arrayToRe(s.newline_before_after_elements.split(<span class="literal">','</span>), <span class="literal">'gi'</span>, <span class="literal">'<(\\/?)('</span>, <span class="literal">')([^>]*)>'</span>);
<span class="reserved">if</span> (s.invalid_elements != <span class="literal">''</span>)
<span class="reserved">this</span>.iveRe = <span class="reserved">this</span>._arrayToRe(s.invalid_elements.toUpperCase().split(<span class="literal">','</span>), <span class="literal">'g'</span>, <span class="literal">'^('</span>, <span class="literal">')$'</span>);
<span class="reserved">else</span>
<span class="reserved">this</span>.iveRe = null;
<span class="comment">// Setup separator</span>
st = <span class="literal">''</span>;
<span class="reserved">for</span> (i=0; i<s.indent_levels; i++)
st += s.indent_char;
<span class="reserved">this</span>.inStr = st;
<span class="comment">// If verify_html if false force *[*]</span>
<span class="reserved">if</span> (!s.verify_html) {
s.valid_elements = <span class="literal">'*[*]'</span>;
s.extended_valid_elements = <span class="literal">''</span>;
}
<span class="comment">// Setup default rule</span>
<span class="reserved">this</span>.addRuleStr(s.valid_elements);
<span class="reserved">this</span>.addRuleStr(s.extended_valid_elements);
<span class="comment">// Setup entities</span>
<span class="reserved">if</span> (s.entity_encoding == <span class="literal">"named"</span>) {
n = tinyMCE.clearArray(new Array());
a = <span class="reserved">this</span>.split(<span class="literal">','</span>, s.entities);
<span class="reserved">for</span> (i=0; i<a.length; i+=2)
n[a[i]] = a[i+1];
<span class="reserved">this</span>.entities = n;
}
<span class="reserved">this</span>.fillStr = <span class="reserved">this</span>.xmlEncode(String.fromCharCode(160));
<span class="reserved">this</span>.idCount = 0;
},
<span class="comment">/**
* Adds a cleanup rule string, for example: a[href|name|title=title|class=class1?class2?class3].
* These rules are then used when serializing the DOM tree as a HTML string, it gives the possibility
* to control the valid elements and attributes and force attribute values or default them.
*
* <span class="attrib">@param</span> {string} s Rule string to parse and add to the cleanup rules array.
*/</span>
addRuleStr : <span class="reserved">function</span>(s) {
var r = <span class="reserved">this</span>.parseRuleStr(s);
var n;
<span class="reserved">for</span> (n in r) {
<span class="reserved">if</span> (r[n])
<span class="reserved">this</span>.rules[n] = r[n];
}
<span class="reserved">this</span>.vElements = tinyMCE.clearArray(new Array());
<span class="reserved">for</span> (n in <span class="reserved">this</span>.rules) {
<span class="reserved">if</span> (<span class="reserved">this</span>.rules[n])
<span class="reserved">this</span>.vElements[<span class="reserved">this</span>.vElements.length] = <span class="reserved">this</span>.rules[n].tag;
}
<span class="reserved">this</span>.vElementsRe = <span class="reserved">this</span>._arrayToRe(<span class="reserved">this</span>.vElements, <span class="literal">''</span>);
},
<span class="comment">/**
* Parses a cleanup rule string, for example: a[href|name|title=title|class=class1?class2?class3].
* These rules are then used when serializing the DOM tree as a HTML string, it gives the possibility
* to control the valid elements and attributes and force attribute values or default them.
*
* <span class="attrib">@param</span> {string} s Rule string to parse as a name/value rule array.
* <span class="attrib">@return</span> Parsed name/value rule array.
* <span class="attrib">@type</span> Array
*/</span>
parseRuleStr : <span class="reserved">function</span>(s) {
var ta, p, r, a, i, x, px, t, tn, y, av, or = tinyMCE.clearArray(new Array());
<span class="reserved">if</span> (s == null || s.length == 0)
<span class="reserved">return</span> or;
ta = s.split(<span class="literal">','</span>);
<span class="reserved">for</span> (x=0; x<ta.length; x++) {
s = ta[x];
<span class="reserved">if</span> (s.length == 0)
continue;
<span class="comment">// Split tag/attrs</span>
p = <span class="reserved">this</span>.split(/\[|\]/, s);
<span class="reserved">if</span> (p == null || p.length < 1)
t = s.toUpperCase();
<span class="reserved">else</span>
t = p[0].toUpperCase();
<span class="comment">// Handle all tag names</span>
tn = <span class="reserved">this</span>.split(<span class="literal">'/'</span>, t);
<span class="reserved">for</span> (y=0; y<tn.length; y++) {
r = {};
r.tag = tn[y];
r.forceAttribs = null;
r.defaultAttribs = null;
r.validAttribValues = null;
<span class="comment">// Handle prefixes</span>
px = r.tag.charAt(0);
r.forceOpen = px == <span class="literal">'+'</span>;
r.removeEmpty = px == <span class="literal">'-'</span>;
r.fill = px == <span class="literal">'#'</span>;
r.tag = r.tag.replace(/\+|-|#/g, <span class="literal">''</span>);
r.oTagName = tn[0].replace(/\+|-|#/g, <span class="literal">''</span>).toLowerCase();
r.isWild = /\*|\?|\+/g.test(r.tag);
r.validRe = new RegExp(<span class="reserved">this</span>._wildcardToRe(<span class="literal">'^'</span> + r.tag + <span class="literal">'$'</span>));
<span class="comment">// Setup valid attributes</span>
<span class="reserved">if</span> (p.length > 1) {
r.vAttribsRe = <span class="literal">'^('</span>;
a = <span class="reserved">this</span>.split(/\|/, p[1]);
<span class="reserved">for</span> (i=0; i<a.length; i++) {
t = a[i];
av = /(=|:|<)(.*?)$/.exec(t);
t = t.replace(/(=|:|<).*?$/, <span class="literal">''</span>);
<span class="reserved">if</span> (av && av.length > 0) {
<span class="reserved">if</span> (av[0].charAt(0) == <span class="literal">':'</span>) {
<span class="reserved">if</span> (!r.forceAttribs)
r.forceAttribs = tinyMCE.clearArray(new Array());
r.forceAttribs[t.toLowerCase()] = av[0].substring(1);
} <span class="reserved">else</span> <span class="reserved">if</span> (av[0].charAt(0) == <span class="literal">'='</span>) {
<span class="reserved">if</span> (!r.defaultAttribs)
r.defaultAttribs = tinyMCE.clearArray(new Array());
r.defaultAttribs[t.toLowerCase()] = av[0].substring(1);
} <span class="reserved">else</span> <span class="reserved">if</span> (av[0].charAt(0) == <span class="literal">'<'</span>) {
<span class="reserved">if</span> (!r.validAttribValues)
r.validAttribValues = tinyMCE.clearArray(new Array());
r.validAttribValues[t.toLowerCase()] = <span class="reserved">this</span>._arrayToRe(<span class="reserved">this</span>.split(<span class="literal">'?'</span>, av[0].substring(1)), <span class="literal">''</span>);
}
}
r.vAttribsRe += <span class="literal">''</span> + t.toLowerCase() + (i != a.length - 1 ? <span class="literal">'|'</span> : <span class="literal">''</span>);
a[i] = t.toLowerCase();
}
r.vAttribsRe += <span class="literal">')$'</span>;
r.vAttribsRe = <span class="reserved">this</span>._wildcardToRe(r.vAttribsRe);
r.vAttribsReIsWild = /\*|\?|\+/g.test(r.vAttribsRe);
r.vAttribsRe = new RegExp(r.vAttribsRe);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -