X-Git-Url: http://git.roojs.org/?a=blobdiff_plain;f=roojs-debug.js;h=56f81942e08f095a7378b6a23df317e6a529d2cf;hb=3818ab34627387a252c8450f8b34bbe7e153cafd;hp=06263cce6700e4eb6200c5f5f755521becfedf34;hpb=30e10548b38e2463677188b014287af7c9e3ed01;p=roojs1 diff --git a/roojs-debug.js b/roojs-debug.js index 06263cce67..56f81942e0 100644 --- a/roojs-debug.js +++ b/roojs-debug.js @@ -31134,7 +31134,23 @@ Roo.extend(Roo.Button, Roo.util.Observable, { this.hide(); } }, - + /** + * Similar to toggle, but does not trigger event. + * @param {Boolean} state [required] Force a particular state + */ + setPressed : function(state) + { + if(state != this.pressed){ + if(state){ + this.el.addClass("x-btn-pressed"); + this.pressed = true; + }else{ + this.el.removeClass("x-btn-pressed"); + this.pressed = false; + } + } + }, + /** * If a state it passed, it becomes the pressed state otherwise the current state is toggled. * @param {Boolean} state (optional) Force a particular state @@ -31157,6 +31173,8 @@ Roo.extend(Roo.Button, Roo.util.Observable, { } }, + + /** * Focus the button */ @@ -45374,7 +45392,7 @@ Roo.rtf.Parser.prototype = { this.hexStore.push(cmd); }, cmderror : function(cmd) { - throw new Exception (cmd.value); + throw cmd.value; }, /* @@ -45504,7 +45522,8 @@ Roo.rtf.Parser.prototype = { { this.emitText(); if (this.controlWord === '') { - this.emitError('empty control word'); + // do we want to track this - it seems just to cause problems. + //this.emitError('empty control word'); } else { this.push({ type: 'controlword', @@ -46053,7 +46072,11 @@ Roo.extend(Roo.htmleditor.FilterTableWidth, Roo.htmleditor.Filter, Roo.htmleditor.FilterWord = function(cfg) { // no need to apply config. + this.replaceDocBullets(cfg.node); + this.walk(cfg.node); + + } Roo.extend(Roo.htmleditor.FilterWord, Roo.htmleditor.Filter, @@ -46103,7 +46126,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.. @@ -46155,7 +46181,98 @@ Roo.extend(Roo.htmleditor.FilterWord, Roo.htmleditor.Filter, + }, + + 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]] = kv[1]; + }); + return ret; + }, + + + replaceDocBullets : function(doc) + { + var listpara = doc.getElementsByClassName('MsoListParagraph'); + while(listpara.length) { + this.replaceDocBullet(listpara.item(0)); + //code + } + }, + + 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/i)) { + break; + } + items.push(ns); + ns = ns.nextSibling; + + } + var ul = parent.ownerDocument.createElement('ul'); // what about number lists... + parent.insertBefore(ul, p); + var lvl = 0; + var stack = [ ul ]; + var last_li = false; + items.forEach(function(n) { + parent.removeChild(n); + var spans = n.getElementsByTagName('span'); + if (!spans.length || !n.isEqualNode(spans.item(0).parentNode)) { + return; // skip it... + } + + var style = this.styleToObject(n); + if (typeof(style['mso-list']) == 'undefined') { + return; // skip it. + } + n.removeChild(spans.item(0)); // remove the fake bullet. + var nlvl = (style['mso-list'].split(' ')[1].replace(/level/,'') *1) - 1; + if (nlvl > lvl) { + //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(doc.createElement('li')); + last_li = nli; + // copy children of p into nli + while(n.firstChild) { + var fc = n.firstChild; + n.removeChild(fc); + nli.appendChild(fc); + } + + + },this); + + + + } + + + }); /** * @class Roo.htmleditor.FilterStyleToTag @@ -48010,7 +48127,6 @@ Roo.extend(Roo.htmleditor.BlockFigure, Roo.htmleditor.Block, { store : { xtype : 'SimpleStore', data : [ - ['auto'], ['50%'], ['80%'], ['100%'] @@ -48067,7 +48183,10 @@ Roo.extend(Roo.htmleditor.BlockFigure, Roo.htmleditor.Block, { pressed : false, enableToggle : true, setValue : function(v) { - this.toggle(v == 'block' ? false : true); + // this trigger toggle. + + this.setText(v ? "Hide Caption" : "Show Caption"); + this.setPressed(v != 'block'); }, listeners : { toggle: function (btn, state) @@ -48106,8 +48225,7 @@ Roo.extend(Roo.htmleditor.BlockFigure, Roo.htmleditor.Block, { style: { width : iw, maxWidth : iw + ' !important', // this is not getting rendered? - margin : m - + margin : m } }; @@ -48148,10 +48266,11 @@ Roo.extend(Roo.htmleditor.BlockFigure, Roo.htmleditor.Block, { // we remove caption totally if its hidden... - will delete data.. but otherwise we end up with fake caption var captionhtml = this.caption_display == 'none' ? '' : (this.caption.length ? this.caption : "Caption"); - return { + + var ret = { tag: 'figure', 'data-block' : 'Figure', - + 'data-width' : this.width, contenteditable : 'false', style : { @@ -48160,7 +48279,7 @@ Roo.extend(Roo.htmleditor.BlockFigure, Roo.htmleditor.Block, { maxWidth : this.align == 'center' ? '100% !important' : (this.width + ' !important'), width : this.align == 'center' ? '100%' : this.width, margin: '0px', - padding: '10px 0', + padding: this.align == 'center' ? '0' : '0 10px' , textAlign : this.align // seems to work for email.. }, @@ -48178,9 +48297,9 @@ Roo.extend(Roo.htmleditor.BlockFigure, Roo.htmleditor.Block, { fontSize : '16px', lineHeight : '24px', display : this.caption_display, - maxWidth : this.width + ' !important', + maxWidth : (this.align == 'center' ? this.width : '100%' ) + ' !important', margin: m, - width: this.width + width: this.align == 'center' ? this.width : '100%' }, @@ -48209,6 +48328,7 @@ Roo.extend(Roo.htmleditor.BlockFigure, Roo.htmleditor.Block, { } ] }; + return ret; }, @@ -48224,11 +48344,14 @@ Roo.extend(Roo.htmleditor.BlockFigure, Roo.htmleditor.Block, { this.align = this.getVal(node, 'figure', 'align'); var figcaption = this.getVal(node, 'figcaption', false); - this.caption = this.getVal(figcaption, 'i', 'html'); + if (figcaption !== '') { + this.caption = this.getVal(figcaption, 'i', 'html'); + } + this.caption_display = this.getVal(node, 'figcaption', 'data-display'); //this.text_align = this.getVal(node, 'figcaption', 'style','text-align'); - this.width = this.getVal(node, 'figcaption', 'style', 'width'); + this.width = this.getVal(node, true, 'data-width'); //this.margin = this.getVal(node, 'figure', 'style', 'margin'); }, @@ -49841,7 +49964,9 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component, { //Roo.log("HtmlEditorCore:syncValue (EDITOR->TEXT)"); if(this.initialized){ - this.undoManager.addEvent(); + if (this.undoManager) { + this.undoManager.addEvent(); + } var bd = (this.doc.body || this.doc.documentElement); @@ -50072,7 +50197,7 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component, { var parser = new Roo.rtf.Parser(cd.getData('text/rtf')); images = parser.doc ? parser.doc.getElementsByType('pict') : []; } - Roo.log(images); + //Roo.log(images); //Roo.log(imgs); // fixme.. images = images.filter(function(g) { return !g.path.match(/^rtf\/(head|pgdsctbl|listtable|footerf)/); }) // ignore headers/footers etc. @@ -50103,10 +50228,12 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component, { }); } if (this.autoClean) { + new Roo.htmleditor.FilterWord({ node : d }); + new Roo.htmleditor.FilterStyleToTag({ node : d }); new Roo.htmleditor.FilterAttributes({ node : d, - attrib_white : ['href', 'src', 'name', 'align', 'colspan', 'rowspan'], + attrib_white : ['href', 'src', 'name', 'align', 'colspan', 'rowspan', 'data-display', 'data-width'], attrib_clean : ['href', 'src' ] }); new Roo.htmleditor.FilterBlack({ node : d, tag : this.black}); @@ -50115,6 +50242,9 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component, { new Roo.htmleditor.FilterParagraph({ node : d }); new Roo.htmleditor.FilterSpan({ node : d }); new Roo.htmleditor.FilterLongBr({ node : d }); + new Roo.htmleditor.FilterComment({ node : d }); + + } if (this.enableBlocks) { @@ -50135,7 +50265,7 @@ Roo.extend(Roo.HtmlEditorCore, Roo.Component, { if (this.enableBlocks) { Roo.htmleditor.Block.initAll(this.doc.body); } - + e.preventDefault(); return false; @@ -64302,7 +64432,7 @@ Roo.grid.ColumnModel = function(config){ }; Roo.extend(Roo.grid.ColumnModel, Roo.util.Observable, { /** - * @cfg {String} header The header text to display in the Grid view. + * @cfg {String} header [required] The header text to display in the Grid view. */ /** * @cfg {String} xsHeader Header at Bootsrap Extra Small width (default for all) @@ -64320,66 +64450,66 @@ Roo.extend(Roo.grid.ColumnModel, Roo.util.Observable, { * @cfg {String} xlHeader Header at Bootsrap extra Large width */ /** - * @cfg {String} dataIndex (Optional) The name of the field in the grid's {@link Roo.data.Store}'s + * @cfg {String} dataIndex The name of the field in the grid's {@link Roo.data.Store}'s * {@link Roo.data.Record} definition from which to draw the column's value. If not * specified, the column's index is used as an index into the Record's data Array. */ /** - * @cfg {Number} width (Optional) The initial width in pixels of the column. Using this + * @cfg {Number} width The initial width in pixels of the column. Using this * instead of {@link Roo.grid.Grid#autoSizeColumns} is more efficient. */ /** - * @cfg {Boolean} sortable (Optional) True if sorting is to be allowed on this column. + * @cfg {Boolean} sortable True if sorting is to be allowed on this column. * Defaults to the value of the {@link #defaultSortable} property. * Whether local/remote sorting is used is specified in {@link Roo.data.Store#remoteSort}. */ /** - * @cfg {Boolean} locked (Optional) True to lock the column in place while scrolling the Grid. Defaults to false. + * @cfg {Boolean} locked True to lock the column in place while scrolling the Grid. Defaults to false. */ /** - * @cfg {Boolean} fixed (Optional) True if the column width cannot be changed. Defaults to false. + * @cfg {Boolean} fixed True if the column width cannot be changed. Defaults to false. */ /** - * @cfg {Boolean} resizable (Optional) False to disable column resizing. Defaults to true. + * @cfg {Boolean} resizable False to disable column resizing. Defaults to true. */ /** - * @cfg {Boolean} hidden (Optional) True to hide the column. Defaults to false. + * @cfg {Boolean} hidden True to hide the column. Defaults to false. */ /** - * @cfg {Function} renderer (Optional) A function used to generate HTML markup for a cell + * @cfg {Function} renderer A function used to generate HTML markup for a cell * given the cell's data value. See {@link #setRenderer}. If not specified, the * default renderer returns the escaped data value. If an object is returned (bootstrap only) * then it is treated as a Roo Component object instance, and it is rendered after the initial row is rendered */ /** - * @cfg {Roo.grid.GridEditor} editor (Optional) For grid editors - returns the grid editor + * @cfg {Roo.grid.GridEditor} editor For grid editors - returns the grid editor */ /** - * @cfg {String} align (Optional) Set the CSS text-align property of the column. Defaults to undefined. + * @cfg {String} align (left|right) Set the CSS text-align property of the column. Defaults to undefined (left). */ /** - * @cfg {String} valign (Optional) Set the CSS vertical-align property of the column (eg. middle, top, bottom etc). Defaults to undefined. + * @cfg {String} valign (top|bottom|middle) Set the CSS vertical-align property of the column (eg. middle, top, bottom etc). Defaults to undefined (middle) */ /** - * @cfg {String} cursor (Optional) + * @cfg {String} cursor ( auto|default|none|context-menu|help|pointer|progress|wait|cell|crosshair|text|vertical-text|alias|copy|move|no-drop|not-allowed|e-resize|n-resize|ne-resize|nw-resize|s-resize|se-resize|sw-resize|w-resize|ew-resize|ns-resize|nesw-resize|nwse-resize|col-resize|row-resize|all-scroll|zoom-in|zoom-out|grab|grabbing) */ /** - * @cfg {String} tooltip (Optional) + * @cfg {String} tooltip mouse over tooltip text */ /** - * @cfg {Number} xs (Optional) can be '0' for hidden at this size (number less than 12) + * @cfg {Number} xs can be '0' for hidden at this size (number less than 12) */ /** - * @cfg {Number} sm (Optional) can be '0' for hidden at this size (number less than 12) + * @cfg {Number} sm can be '0' for hidden at this size (number less than 12) */ /** - * @cfg {Number} md (Optional) can be '0' for hidden at this size (number less than 12) + * @cfg {Number} md can be '0' for hidden at this size (number less than 12) */ /** - * @cfg {Number} lg (Optional) can be '0' for hidden at this size (number less than 12) + * @cfg {Number} lg can be '0' for hidden at this size (number less than 12) */ /** - * @cfg {Number} xl (Optional) can be '0' for hidden at this size (number less than 12) + * @cfg {Number} xl can be '0' for hidden at this size (number less than 12) */ /** * Returns the id of the column at the specified index.