⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 overview-summary-tinymce_cleanup.class.js.html

📁 tinyMCE在线编辑器使用手册
💻 HTML
📖 第 1 页 / 共 5 页
字号:
	h = h.replace(/&lt;p&gt;\s*&lt;br \/&gt;\s*&amp;nbsp;\s*&lt;\/p&gt;/g, <span class="literal">'&lt;p&gt;&amp;nbsp;&lt;/p&gt;'</span>);
	h = h.replace(/&lt;a&gt;(.*?)&lt;\/a&gt;/g, <span class="literal">'$1'</span>);

	<span class="comment">// Clean body</span>
	<span class="reserved">if</span> (/^\s*(&lt;br \/&gt;|&lt;p&gt;&amp;nbsp;&lt;\/p&gt;|&lt;p&gt;&amp;#160;&lt;\/p&gt;|&lt;p&gt;&lt;\/p&gt;)\s*$/.test(h))
		h = <span class="literal">''</span>;

	<span class="comment">// If preformatted</span>
	<span class="reserved">if</span> (s.preformatted) {
		h = h.replace(/^&lt;pre&gt;/, <span class="literal">''</span>);
		h = h.replace(/&lt;\/pre&gt;$/, <span class="literal">''</span>);
		h = <span class="literal">'&lt;pre&gt;'</span> + h + <span class="literal">'&lt;/pre&gt;'</span>;
	}

	<span class="comment">// Gecko specific processing</span>
	<span class="reserved">if</span> (tinyMCE.isGecko) {
		h = h.replace(/&lt;o:p _moz-userdefined=<span class="literal">""</span> \/&gt;/g, <span class="literal">''</span>);
		h = h.replace(/&lt;td([^&gt;]*)&gt;\s*&lt;br \/&gt;\s*&lt;\/td&gt;/g, <span class="literal">'&lt;td$1&gt;&amp;nbsp;&lt;/td&gt;'</span>);
	}

	<span class="reserved">if</span> (s.force_br_newlines)
		h = h.replace(/&lt;p&gt;(&amp;nbsp;|&amp;#160;)&lt;\/p&gt;/g, <span class="literal">'&lt;br /&gt;'</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 &amp;&amp; !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 &amp;&amp; c.settings.indent)
		h = c.formatHTML(h);

	<span class="comment">// If encoding (not recommended option)</span>
	<span class="reserved">if</span> (on_submit &amp;&amp; (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">'^&lt;('</span>, <span class="literal">')[^&gt;]*'</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">'^&lt;\\/('</span>, <span class="literal">')[^&gt;]*'</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">'&lt;('</span>,  <span class="literal">')([^&gt;]*)&gt;'</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">'&lt;('</span>,  <span class="literal">')([^&gt;]*)&gt;'</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">'&lt;(\\/?)('</span>, <span class="literal">')([^&gt;]*)&gt;'</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&lt;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&lt;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&lt;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 &lt; 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&lt;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 &gt; 1) {
					r.vAttribsRe = <span class="literal">'^('</span>;
					a = <span class="reserved">this</span>.split(/\|/, p[1]);

					<span class="reserved">for</span> (i=0; i&lt;a.length; i++) {
						t = a[i];

						av = /(=|:|&lt;)(.*?)$/.exec(t);
						t = t.replace(/(=|:|&lt;).*?$/, <span class="literal">''</span>);
						<span class="reserved">if</span> (av &amp;&amp; av.length &gt; 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">'&lt;'</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 + -