X-Git-Url: http://git.roojs.org/?a=blobdiff_plain;f=Roo%2Fhtmleditor%2FFilterWord.js;h=3cb8df628a04c12a030847bab80fde61308f280c;hb=bb4f20285cb0ce281099e1db5cb76e60175de50f;hp=73cd8dfb92b9f1322a43241560cbed3f37bc4d42;hpb=89c252671ea90f85d171cc8c8d9a49eb52ceb6f5;p=roojs1 diff --git a/Roo/htmleditor/FilterWord.js b/Roo/htmleditor/FilterWord.js index 73cd8dfb92..3cb8df628a 100644 --- a/Roo/htmleditor/FilterWord.js +++ b/Roo/htmleditor/FilterWord.js @@ -14,7 +14,7 @@ Roo.htmleditor.FilterWord = function(cfg) // no need to apply config. this.replaceDocBullets(cfg.node); - this.walk(cfg.node); + // this.walk(cfg.node); } @@ -66,7 +66,10 @@ Roo.extend(Roo.htmleditor.FilterWord, Roo.htmleditor.Filter, 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.. @@ -122,7 +125,7 @@ Roo.extend(Roo.htmleditor.FilterWord, Roo.htmleditor.Filter, styleToObject: function(node) { - var styles = node.getAttribute("style").split(";"); + var styles = (node.getAttribute("style") || '').split(";"); var ret = {}; Roo.each(styles, function(s) { if (!s.match(/:/)) { @@ -139,10 +142,16 @@ Roo.extend(Roo.htmleditor.FilterWord, Roo.htmleditor.Filter, replaceDocBullets : function(doc) { + // this is a bit odd - but it appears some indents use ql-indent-1 + + var listpara = doc.getElementsByClassName('ql-indent-1'); + while(listpara.length) { + this.replaceDocBullet(listpara.item(0)); + } + var listpara = doc.getElementsByClassName('MsoListParagraph'); while(listpara.length) { this.replaceDocBullet(listpara.item(0)); - //code } }, @@ -154,7 +163,11 @@ Roo.extend(Roo.htmleditor.FilterWord, Roo.htmleditor.Filter, doc = parent.ownerDocument, items = []; while (ns) { - if (!ns.className.match(/MsoListParagraph/)) { + if (ns.nodeType != 1) { + ns = ns.nextSibling; + continue; + } + if (!ns.className.match(/(MsoListParagraph|ql-indent-1)/i)) { break; } items.push(ns); @@ -167,26 +180,58 @@ Roo.extend(Roo.htmleditor.FilterWord, Roo.htmleditor.Filter, var stack = [ ul ]; var last_li = false; items.forEach(function(n) { - parent.removeChild(n); + //Roo.log("got innertHMLT=" + n.innerHTML); + var spans = n.getElementsByTagName('span'); - n.removeChild(spans.item(0)); // remove the fake bullet. - var style = this.styleToObject(n); + 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 nlvl = (style['mso-list'].split(' ')[1].replace(/level/,'') *1) - 1; - if (nlvl > lvl) { - new indent + if (nlvl > lvl && last_li) { + //new indent var nul = doc.createElement('ul'); // what about number lists... last_li.appendChild(nul); stack[nlvl] = nul; } + lvl = nlvl; - var nli = stack[nlvl].appendChild('li'); + var nli = stack[nlvl].appendChild(doc.createElement('li')); last_li = nli; + nli.innerHTML = n.innerHTML; + //Roo.log("innerHTML = " + n.innerHTML); + parent.removeChild(n); + // copy children of p into nli - while(p.firstChild) { - var fc = p.firstChild; - p.removeChild(fc); + /*while(n.firstChild) { + var fc = n.firstChild; + n.removeChild(fc); nli.appendChild(fc); - } + }*/ },this);