X-Git-Url: http://git.roojs.org/?a=blobdiff_plain;f=docs%2Fsrc%2FRoo_htmleditor_FilterWord.js.html;h=72e1211cdd1e6e12eda6d6ed39323a61982101f5;hb=3c34d062a8d246a6c80c1e8146dfcea3e35e7a5e;hp=ab26fbf69cb2c2a4411da51fadacb94aceb558ae;hpb=61c726d90ac8dc8f5c38582448500c515bb8c5c6;p=roojs1 diff --git a/docs/src/Roo_htmleditor_FilterWord.js.html b/docs/src/Roo_htmleditor_FilterWord.js.html index ab26fbf69c..72e1211cdd 100644 --- a/docs/src/Roo_htmleditor_FilterWord.js.html +++ b/docs/src/Roo_htmleditor_FilterWord.js.html @@ -12,8 +12,14 @@ Roo.htmleditor.FilterWord = function(cfg) { // no need to apply config. - this.walk(cfg.node); -} + this.replaceDocBullets(cfg.node); + + this.replaceAname(cfg.node); + // this is disabled as the removal is done by other filters; + // this.walk(cfg.node); + + +} Roo.extend(Roo.htmleditor.FilterWord, Roo.htmleditor.Filter, { @@ -62,7 +68,10 @@ node.removeChild(cn); node.parentNode.insertBefore(cn, node); // move node to parent - and clean it.. - this.replaceTag(cn); + if (cn.nodeType == 1) { + this.replaceTag(cn); + } + } node.parentNode.removeChild(node); /// no need to iterate chidlren = it's got none.. @@ -114,5 +123,214 @@ - } + }, + + styleToObject: function(node) + { + var styles = (node.getAttribute("style") || '').split(";"); + var ret = {}; + Roo.each(styles, function(s) { + if (!s.match(/:/)) { + return; + } + var kv = s.split(":"); + + // what ever is left... we allow. + ret[kv[0].trim()] = kv[1]; + }); + return ret; + }, + + + replaceAname : function (doc) + { + // replace all the a/name without.. + var aa = Array.from(doc.getElementsByTagName('a')); + for (var i = 0; i < aa.length; i++) { + var a = aa[i]; + if (a.hasAttribute("name")) { + a.removeAttribute("name"); + } + if (a.hasAttribute("href")) { + continue; + } + // reparent children. + this.removeNodeKeepChildren(a); + + } + + + + }, + + + + replaceDocBullets : function(doc) + { + // this is a bit odd - but it appears some indents use ql-indent-1 + //Roo.log(doc.innerHTML); + + var listpara = doc.getElementsByClassName('MsoListParagraphCxSpFirst'); + for( var i = 0; i < listpara.length; i ++) { + listpara.item(i).className = "MsoListParagraph"; + } + // this is a bit hacky - we had one word document where h2 had a miso-list attribute. + var htwo = doc.getElementsByTagName('h2'); + for( var i = 0; i < htwo.length; i ++) { + if (htwo.item(i).hasAttribute('style') && htwo.item(i).getAttribute('style').match(/mso-list:/)) { + htwo.item(i).className = "MsoListParagraph"; + } + } + listpara = doc.getElementsByClassName('MsoNormal'); + while(listpara.length) { + if (listpara.item(0).hasAttribute('style') && listpara.item(0).getAttribute('style').match(/mso-list:/)) { + listpara.item(0).className = "MsoListParagraph"; + } else { + listpara.item(0).className = "MsoNormalx"; + } + } + listpara = doc.getElementsByClassName('ql-indent-1'); + while(listpara.length) { + this.replaceDocBullet(listpara.item(0)); + } + listpara = doc.getElementsByClassName('MsoListParagraph'); + while(listpara.length) { + + this.replaceDocBullet(listpara.item(0)); + } + + }, + + + + replaceDocBullet : function(p) + { + // gather all the siblings. + var ns = p, + parent = p.parentNode, + doc = parent.ownerDocument, + items = []; + + + while (ns) { + if (ns.nodeType != 1) { + ns = ns.nextSibling; + continue; + } + if (!ns.className.match(/(MsoListParagraph|ql-indent-1)/i)) { + break; + } + if (ns.hasAttribute('style') && ns.getAttribute('style').match(/mso-list/)) { + items.push(ns); + ns = ns.nextSibling; + has_list = true; + continue; + } + var spans = ns.getElementsByTagName('span'); + if (!spans.length) { + break; + } + var has_list = false; + for(var i = 0; i < spans.length; i++) { + if (spans[i].hasAttribute('style') && spans[i].getAttribute('style').match(/mso-list/)) { + has_list = true; + break; + } + } + if (!has_list) { + break; + } + items.push(ns); + ns = ns.nextSibling; + + + } + if (!items.length) { + ns.className = ""; + return; + } + + var ul = parent.ownerDocument.createElement('ul'); // what about number lists... + parent.insertBefore(ul, p); + var lvl = 0; + var stack = [ ul ]; + var last_li = false; + + var margin_to_depth = {}; + max_margins = -1; + + items.forEach(function(n, ipos) { + //Roo.log("got innertHMLT=" + n.innerHTML); + + var spans = n.getElementsByTagName('span'); + if (!spans.length) { + //Roo.log("No spans found"); + + parent.removeChild(n); + + + return; // skip it... + } + + + + var style = {}; + for(var i = 0; i < spans.length; i++) { + + style = this.styleToObject(spans[i]); + if (typeof(style['mso-list']) == 'undefined') { + continue; + } + + spans[i].parentNode.removeChild(spans[i]); // remove the fake bullet. + break; + } + //Roo.log("NOW GOT innertHMLT=" + n.innerHTML); + style = this.styleToObject(n); // mo-list is from the parent node. + if (typeof(style['mso-list']) == 'undefined') { + //Roo.log("parent is missing level"); + + parent.removeChild(n); + + return; + } + + var margin = style['margin-left']; + if (typeof(margin_to_depth[margin]) == 'undefined') { + max_margins++; + margin_to_depth[margin] = max_margins; + } + nlvl = margin_to_depth[margin] ; + + if (nlvl > lvl) { + //new indent + var nul = doc.createElement('ul'); // what about number lists... + if (!last_li) { + last_li = doc.createElement('li'); + stack[lvl].appendChild(last_li); + } + last_li.appendChild(nul); + stack[nlvl] = nul; + + } + lvl = nlvl; + + var nli = stack[nlvl].appendChild(doc.createElement('li')); + last_li = nli; + nli.innerHTML = n.innerHTML; + //Roo.log("innerHTML = " + n.innerHTML); + parent.removeChild(n); + + + + + },this); + + + + + } + + + }); \ No newline at end of file