X-Git-Url: http://git.roojs.org/?a=blobdiff_plain;f=Roo%2FHtmlEditorCore.js;h=eee4f0510ebe13a027ce581ca569b3b7b726b364;hb=825a74c132eae7b97e43866ab3c00ff122fb239c;hp=59a514380d748c77035abbce8b754a91c120674a;hpb=9bda9a4b531210ec79405024c6f90e57a73a571d;p=roojs1 diff --git a/Roo/HtmlEditorCore.js b/Roo/HtmlEditorCore.js index 59a514380d..eee4f0510e 100644 --- a/Roo/HtmlEditorCore.js +++ b/Roo/HtmlEditorCore.js @@ -133,7 +133,7 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component, { black: false, white: false, - + bodyCls : '', /** * Protected method that will not generally be called directly. It @@ -161,19 +161,26 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component, { 'body{border:0;margin:0;padding:3px;height:98%;cursor:text;}' + ''; } else { - + st = ''; } st += ''; + var cls = 'roo-htmleditor-body'; + + if(this.bodyCls.length){ + cls += ' ' + this.bodyCls; + } return '' + st + //' + - ' '; + ' '; }, // private @@ -587,8 +594,6 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component, { insertAtCursor : function(text) { - - if(!this.activated){ return; } @@ -939,13 +944,16 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component, { var nodeIsBefore = ss == 1; var nodeIsAfter = ee == -1; - if (nodeIsBefore && nodeIsAfter) + if (nodeIsBefore && nodeIsAfter) { return 0; // outer - if (!nodeIsBefore && nodeIsAfter) + } + if (!nodeIsBefore && nodeIsAfter) { return 1; //right trailed. + } - if (nodeIsBefore && !nodeIsAfter) + if (nodeIsBefore && !nodeIsAfter) { return 2; // left trailed. + } // fully contined. return 3; }, @@ -1047,7 +1055,7 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component, { if (v.match(/^\./) || v.match(/^\//)) { return; } - if (v.match(/^(http|https):\/\//) || v.match(/^mailto:/)) { + if (v.match(/^(http|https):\/\//) || v.match(/^mailto:/) || v.match(/^ftp:/)) { return; } if (v.match(/^#/)) { @@ -1136,7 +1144,7 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component, { node.className = ''; } - if (a.value.match(/body/)) { + if (a.value.match(/^body$/)) { node.className = ''; } continue; @@ -1158,12 +1166,23 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component, { */ cleanWord : function(node) { - - if (!node) { this.cleanWord(this.doc.body); return; } + + if( + node.nodeName == 'SPAN' && + !node.hasAttributes() && + node.childNodes.length == 1 && + node.firstChild.nodeName == "#text" + ) { + var text = ' ' + node.innerHTML + ' '; + var textNode = document.createTextNode(text); + node.parentNode.insertBefore(textNode, node); + node.parentNode.removeChild(node); + } + if (node.nodeName == "#text") { // clean up silly Windows -- stuff? return; @@ -1238,7 +1257,8 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component, { }, /** * iterateChildren of a Node, calling fn each time, using this as the scole.. - * + * @param {DomNode} node node to iterate children of. + * @param {Function} fn method of this class to call on each item. */ iterateChildren : function(node, fn) { @@ -1260,73 +1280,29 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component, { */ cleanTableWidths : function(node) { - - var _t = this; - var cleanTableWidthsChildren = function() - { - if (!node.childNodes.length) { - return; - } - for (var i = node.childNodes.length-1; i > -1 ; i--) { - _t.cleanTableWidths(node.childNodes[i]); - } - } - - - - + + if (!node) { - this.cleanWord(this.doc.body); + this.cleanTableWidths(this.doc.body); return; } - if (node.nodeName == "#text") { - // clean up silly Windows -- stuff? - return; - } - if (node.nodeName == "#comment") { - node.parentNode.removeChild(node); - // clean up silly Windows -- stuff? - return; - } - if (node.tagName.toLowerCase().match(/^(style|script|applet|embed|noframes|noscript)$/)) { - node.parentNode.removeChild(node); - return; + // ignore list... + if (node.nodeName == "#text" || node.nodeName == "#comment") { + return; } - - // remove - but keep children.. - if (node.tagName.toLowerCase().match(/^(meta|link|\\?xml:|st1:|o:|font)/)) { - while (node.childNodes.length) { - var cn = node.childNodes[0]; - node.removeChild(cn); - node.parentNode.insertBefore(cn, node); - } - node.parentNode.removeChild(node); - cleanWordChildren(); + Roo.log(node.tagName); + if (!node.tagName.toLowerCase().match(/^(table|td|tr)$/)) { + this.iterateChildren(node, this.cleanTableWidths); return; } - // clean styles - if (node.className.length) { - - var cn = node.className.split(/\W+/); - var cna = []; - Roo.each(cn, function(cls) { - if (cls.match(/Mso[a-zA-Z]+/)) { - return; - } - cna.push(cls); - }); - node.className = cna.length ? cna.join(' ') : ''; - if (!cna.length) { - node.removeAttribute("class"); - } - } - - if (node.hasAttribute("lang")) { - node.removeAttribute("lang"); + if (node.hasAttribute('width')) { + node.removeAttribute('width'); } + if (node.hasAttribute("style")) { + // pretty basic... var styles = node.getAttribute("style").split(";"); var nstyle = []; @@ -1335,7 +1311,7 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component, { return; } var kv = s.split(":"); - if (kv[0].match(/^(mso-|line|font|background|margin|padding|color)/)) { + if (kv[0].match(/^\s*(width|min-width)\s*$/)) { return; } // what ever is left... we allow. @@ -1347,7 +1323,7 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component, { } } - cleanWordChildren(); + this.iterateChildren(node, this.cleanTableWidths); }, @@ -1590,6 +1566,17 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component, { Roo.each(Roo.get(_this.iframe.contentDocument.head).select('link[rel=stylesheet]', true).elements, function(s){ s.remove(); }); + }, + + setStyle : function(style) + { + Roo.get(this.iframe.contentDocument.head).createChild({ + tag : 'style', + type : 'text/css', + html : style + }); + + return; } // hide stuff that is not compatible