X-Git-Url: http://git.roojs.org/?p=roojs1;a=blobdiff_plain;f=roojs-bootstrap-debug.js;h=2a1b23d30b108049247cfe52bbb4fa875b264c1a;hp=bfb048e48beb841dbbefd9f2de46586727a8ea3e;hb=refs%2Fheads%2Fwip_alan_T6011_fixing_surrogate_characters;hpb=77b718c2e076743bcbc2d99cee1594caa96095bb diff --git a/roojs-bootstrap-debug.js b/roojs-bootstrap-debug.js index bfb048e48b..2a1b23d30b 100644 --- a/roojs-bootstrap-debug.js +++ b/roojs-bootstrap-debug.js @@ -7,7 +7,7 @@ Roo.bootstrap.version = ( function() { var ret=3; Roo.each(document.styleSheets, function(s) { - if (s.href.match(/css-bootstrap4/)) { + if ( s.href && s.href.match(/css-bootstrap4/)) { ret=4; } }); @@ -2651,6 +2651,8 @@ Roo.extend(Roo.bootstrap.MenuSeparator, Roo.bootstrap.Component, { * @cfg {Boolean} animate default true * @cfg {Boolean} allow_close default true * @cfg {Boolean} fitwindow default false + * @cfg {Number} width fixed width - usefull for chrome extension only really. + * @cfg {Number} height fixed height - usefull for chrome extension only really. * @cfg {String} size (sm|lg) default empty * @cfg {Number} max_width set the max width of modal * @@ -3924,7 +3926,7 @@ Roo.extend(Roo.bootstrap.Navbar, Roo.bootstrap.Component, { if(this.fireEvent('beforetoggle', this) === false){ return; } - var ce = this.el.select('.roo-navbar-collapse',true).first(); + var ce = this.el.select('.navbar-collapse',true).first(); if (!ce.hasClass('show')) { this.expand(); @@ -3941,7 +3943,7 @@ Roo.extend(Roo.bootstrap.Navbar, Roo.bootstrap.Component, { expand : function () { - var ce = this.el.select('.roo-navbar-collapse',true).first(); + var ce = this.el.select('.navbar-collapse',true).first(); if (ce.hasClass('collapsing')) { return; } @@ -3973,7 +3975,7 @@ Roo.extend(Roo.bootstrap.Navbar, Roo.bootstrap.Component, { */ collapse : function() { - var ce = this.el.select('.roo-navbar-collapse',true).first(); + var ce = this.el.select('.navbar-collapse',true).first(); if (ce.hasClass('collapsing') || ce.hasClass('collapse') ) { // it's collapsed or collapsing.. @@ -22318,17 +22320,32 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component, { html = this.cleanHtml(html); // fix up the special chars.. normaly like back quotes in word... // however we do not want to do this with chinese.. - html = html.replace(/([\x80-\uffff])/g, function (a, b) { - var cc = b.charCodeAt(); - if ( + html = html.replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]|[\u0080-\uFFFF]/g, function(match) { + + var cc = match.charCodeAt(); + + // Get the character value, handling surrogate pairs + if (match.length == 2) { + // It's a surrogate pair, calculate the Unicode code point + var high = match.charCodeAt(0) - 0xD800; + var low = match.charCodeAt(1) - 0xDC00; + cc = (high * 0x400) + low + 0x10000; + } else if ( (cc >= 0x4E00 && cc < 0xA000 ) || (cc >= 0x3400 && cc < 0x4E00 ) || (cc >= 0xf900 && cc < 0xfb00 ) ) { - return b; - } - return "&#"+cc+";" + return match; + } + + // No, use a numeric entity. Here we brazenly (and possibly mistakenly) + return "&#" + cc + ";"; + + }); + + + if(this.owner.fireEvent('beforesync', this, html) !== false){ this.el.dom.value = html; this.owner.fireEvent('sync', this, html); @@ -23149,12 +23166,29 @@ 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 textNode = node.firstChild; + node.removeChild(textNode); + if (node.getAttribute('lang') != 'zh-CN') { // do not space pad on chinese characters.. + node.parentNode.insertBefore(node.ownerDocument.createTextNode(" "), node); + } + node.parentNode.insertBefore(textNode, node); + if (node.getAttribute('lang') != 'zh-CN') { // do not space pad on chinese characters.. + node.parentNode.insertBefore(node.ownerDocument.createTextNode(" ") , node); + } + node.parentNode.removeChild(node); + } + if (node.nodeName == "#text") { // clean up silly Windows -- stuff? return;