///import core ///plugin 编辑器默认的过滤转换机制 UE.plugins["defaultfilter"] = function() { var me = this; me.setOpt({ allowDivTransToP: true, disabledTableInTable: true, rgb2Hex: true }); //默认的过滤处理 //进入编辑器的内容处理 me.addInputRule(function(root) { var allowDivTransToP = this.options.allowDivTransToP; var val; function tdParent(node) { while (node && node.type == "element") { if (node.tagName == "td") { return true; } node = node.parentNode; } return false; } //进行默认的处理 root.traversal(function(node) { if (node.type == "element") { if ( !dtd.$cdata[node.tagName] && me.options.autoClearEmptyNode && dtd.$inline[node.tagName] && !dtd.$empty[node.tagName] && (!node.attrs || utils.isEmptyObject(node.attrs)) ) { if (!node.firstChild()) node.parentNode.removeChild(node); else if ( node.tagName == "span" && (!node.attrs || utils.isEmptyObject(node.attrs)) ) { node.parentNode.removeChild(node, true); } return; } switch (node.tagName) { case "style": case "script": node.setAttr({ cdata_tag: node.tagName, cdata_data: node.innerHTML() || "", _ue_custom_node_: "true" }); node.tagName = "div"; node.innerHTML(""); break; case "a": if ((val = node.getAttr("href"))) { node.setAttr("_href", val); } break; case "img": //todo base64暂时去掉,后边做远程图片上传后,干掉这个 if ((val = node.getAttr("src"))) { if (/^data:/.test(val)) { node.parentNode.removeChild(node); break; } } node.setAttr("_src", node.getAttr("src")); break; case "span": if (browser.webkit && (val = node.getStyle("white-space"))) { if (/nowrap|normal/.test(val)) { node.setStyle("white-space", ""); if ( me.options.autoClearEmptyNode && utils.isEmptyObject(node.attrs) ) { node.parentNode.removeChild(node, true); } } } val = node.getAttr("id"); if (val && /^_baidu_bookmark_/i.test(val)) { node.parentNode.removeChild(node); } break; case "p": if ((val = node.getAttr("align"))) { node.setAttr("align"); node.setStyle("text-align", val); } //trace:3431 // var cssStyle = node.getAttr('style'); // if (cssStyle) { // cssStyle = cssStyle.replace(/(margin|padding)[^;]+/g, ''); // node.setAttr('style', cssStyle) // // } //p标签不允许嵌套 utils.each(node.children, function(n) { if (n.type == "element" && n.tagName == "p") { var next = n.nextSibling(); node.parentNode.insertAfter(n, node); var last = n; while (next) { var tmp = next.nextSibling(); node.parentNode.insertAfter(next, last); last = next; next = tmp; } return false; } }); if (!node.firstChild()) { node.innerHTML(browser.ie ? " " : "
"); } break; case "div": if (node.getAttr("cdata_tag")) { break; } //针对代码这里不处理插入代码的div val = node.getAttr("class"); if (val && /^line number\d+/.test(val)) { break; } if (!allowDivTransToP) { break; } var tmpNode, p = UE.uNode.createElement("p"); while ((tmpNode = node.firstChild())) { if ( tmpNode.type == "text" || !UE.dom.dtd.$block[tmpNode.tagName] ) { p.appendChild(tmpNode); } else { if (p.firstChild()) { node.parentNode.insertBefore(p, node); p = UE.uNode.createElement("p"); } else { node.parentNode.insertBefore(tmpNode, node); } } } if (p.firstChild()) { node.parentNode.insertBefore(p, node); } node.parentNode.removeChild(node); break; case "dl": node.tagName = "ul"; break; case "dt": case "dd": node.tagName = "li"; break; case "li": var className = node.getAttr("class"); if (!className || !/list\-/.test(className)) { node.setAttr(); } var tmpNodes = node.getNodesByTagName("ol ul"); UE.utils.each(tmpNodes, function(n) { node.parentNode.insertAfter(n, node); }); break; case "td": case "th": case "caption": if (!node.children || !node.children.length) { node.appendChild( browser.ie11below ? UE.uNode.createText(" ") : UE.uNode.createElement("br") ); } break; case "table": if (me.options.disabledTableInTable && tdParent(node)) { node.parentNode.insertBefore( UE.uNode.createText(node.innerText()), node ); node.parentNode.removeChild(node); } } } // if(node.type == 'comment'){ // node.parentNode.removeChild(node); // } }); }); //从编辑器出去的内容处理 me.addOutputRule(function(root) { var val; root.traversal(function(node) { if (node.type == "element") { if ( me.options.autoClearEmptyNode && dtd.$inline[node.tagName] && !dtd.$empty[node.tagName] && (!node.attrs || utils.isEmptyObject(node.attrs)) ) { if (!node.firstChild()) node.parentNode.removeChild(node); else if ( node.tagName == "span" && (!node.attrs || utils.isEmptyObject(node.attrs)) ) { node.parentNode.removeChild(node, true); } return; } switch (node.tagName) { case "div": if ((val = node.getAttr("cdata_tag"))) { node.tagName = val; node.appendChild(UE.uNode.createText(node.getAttr("cdata_data"))); node.setAttr({ cdata_tag: "", cdata_data: "", _ue_custom_node_: "" }); } break; case "a": if ((val = node.getAttr("_href"))) { node.setAttr({ href: utils.html(val), _href: "" }); } break; break; case "span": val = node.getAttr("id"); if (val && /^_baidu_bookmark_/i.test(val)) { node.parentNode.removeChild(node); } //将color的rgb格式转换为#16进制格式 if (me.getOpt("rgb2Hex")) { var cssStyle = node.getAttr("style"); if (cssStyle) { node.setAttr( "style", cssStyle.replace(/rgba?\(([\d,\s]+)\)/g, function(a, value) { var array = value.split(","); if (array.length > 3) return ""; value = "#"; for (var i = 0, color; (color = array[i++]); ) { color = parseInt( color.replace(/[^\d]/gi, ""), 10 ).toString(16); value += color.length == 1 ? "0" + color : color; } return value.toUpperCase(); }) ); } } break; case "img": if ((val = node.getAttr("_src"))) { node.setAttr({ src: node.getAttr("_src"), _src: "" }); } } } }); }); };