X-Git-Url: http://git.roojs.org/?a=blobdiff_plain;f=roojs-debug.js;h=b106290d361b1d90218bab069597c01b0ff80588;hb=cf3fc315159d6f38c826064ffab95d686a8bfac7;hp=da29d8a68a0cf144c6c004627825d3ff1c7d0cfb;hpb=10af4af08a68c7cec1d0a1252849b8be28ba76d7;p=roojs1 diff --git a/roojs-debug.js b/roojs-debug.js index da29d8a68a..b106290d36 100644 --- a/roojs-debug.js +++ b/roojs-debug.js @@ -1015,8 +1015,34 @@ Roo.applyIf(Array.prototype, { } return res; + }, + /** + * equals + * @param {Array} o The array to compare to + * @returns {Boolean} true if the same + */ + equals : function(b) + { + // https://stackoverflow.com/questions/3115982/how-to-check-if-two-arrays-are-equal-with-javascript + if (this === b) { + return true; + } + if (b == null) { + return false; + } + if (this.length !== b.length) { + return false; + } + + // sort?? a.sort().equals(b.sort()); + + for (var i = 0; i < this.length; ++i) { + if (this[i] !== b[i]) { + return false; + } + } + return true; } - }); @@ -4652,6 +4678,12 @@ Roo.Template = function(cfg){ }; Roo.Template.prototype = { + /** + * @cfg {Function} onLoad Called after the template has been loaded and complied (usually from a remove source) + */ + onLoad : false, + + /** * @cfg {String} url The Url to load the template from. beware if you are loading from a url, the data may not be ready if you use it instantly.. * it should be fixed so that template is observable... @@ -4661,11 +4693,18 @@ Roo.Template.prototype = { * @cfg {String} html The HTML fragment or an array of fragments to join("") or multiple arguments to join("") */ html : '', + + + compiled : false, + loaded : false, /** * Returns an HTML fragment of this template with the specified values applied. * @param {Object} values The template values. Can be an array if your params are numeric (i.e. {0}) or an object (i.e. {foo: 'bar'}) * @return {String} The HTML fragment */ + + + applyTemplate : function(values){ //Roo.log(["applyTemplate", values]); try { @@ -4726,9 +4765,13 @@ Roo.Template.prototype = { method : 'GET', success : function (response) { _t.loading = false; - _t.html = response.responseText; _t.url = false; - _t.compile(); + + _t.set(response.responseText,true); + _t.loaded = true; + if (_t.onLoad) { + _t.onLoad(); + } }, failure : function(response) { Roo.log("Template failed to load from " + _t.url); @@ -4745,7 +4788,7 @@ Roo.Template.prototype = { */ set : function(html, compile){ this.html = html; - this.compiled = null; + this.compiled = false; if(compile){ this.compile(); } @@ -5906,12 +5949,15 @@ Roo.util.Observable.prototype = { relayEvents : function(o, events){ var createHandler = function(ename){ return function(){ + return this.fireEvent.apply(this, Roo.combine(ename, Array.prototype.slice.call(arguments, 0))); }; }; for(var i = 0, len = events.length; i < len; i++){ var ename = events[i]; - if(!this.events[ename]){ this.events[ename] = true; }; + if(!this.events[ename]){ + this.events[ename] = true; + }; o.on(ename, createHandler(ename), this); } }, @@ -6256,6 +6302,7 @@ Roo.EventManager = function(){ } } + var listen = function(element, ename, opt, fn, scope){ var o = (!opt || typeof opt == "boolean") ? {} : opt; @@ -8186,7 +8233,32 @@ if(opt.anim.isAnimated()){ if (this.dom) { Roo.EventManager.on(this.dom, eventName, fn, scope || this, options); } + if (eventName == 'dblclick') { + this.addListener('touchstart', this.onTapHandler, this); + } }, + tapedTwice : false, + onTapHandler : function(event) + { + if(!this.tapedTwice) { + this.tapedTwice = true; + var s = this; + setTimeout( function() { + s.tapedTwice = false; + }, 300 ); + return; + } + event.preventDefault(); + var revent = new MouseEvent('dblclick', { + view: window, + bubbles: true, + cancelable: true + }); + + this.dom.dispatchEvent(revent); + //action on double tap goes below + + }, /** * Removes an event handler from this element @@ -8562,7 +8634,8 @@ if(opt.anim.isAnimated()){ * @param {Array} offsets (optional) Offset the positioning by [x, y] * @return {Array} [x, y] */ - getAlignToXY : function(el, p, o){ + getAlignToXY : function(el, p, o) + { el = Roo.get(el); var d = this.dom; if(!el.dom){ @@ -8603,7 +8676,7 @@ if(opt.anim.isAnimated()){ //otherwise swap the aligned el to the opposite border of the target. var p1y = p1.charAt(0), p1x = p1.charAt(p1.length-1); var p2y = p2.charAt(0), p2x = p2.charAt(p2.length-1); - var swapY = ((p1y=="t" && p2y=="b") || (p1y=="b" && p2y=="t")); + var swapY = ((p1y=="t" && p2y=="b") || (p1y=="b" && p2y=="t") ); var swapX = ((p1x=="r" && p2x=="l") || (p1x=="l" && p2x=="r")); var doc = document; @@ -9317,7 +9390,7 @@ if(opt.anim.isAnimated()){ /** * @private */ - fitToParentDelegate : Roo.emptyFn, // keep a reference to the fitToParent delegate + fitToParentDelegate : Roo.emptyFn, // keep a reference to the fitToParent delegate /** * Sizes this element to its parent element's dimensions performing @@ -13917,7 +13990,26 @@ Roo.util.Format = function(){ */ stripTags : function(v){ return !v ? v : String(v).replace(this.stripTagsRE, ""); + }, + + /** + * Size in Mb,Gb etc. + * @param {Number} value The number to be formated + * @param {number} decimals how many decimal places + * @return {String} the formated string + */ + size : function(value, decimals) + { + var sizes = ['b', 'k', 'm', 'g', 't']; + if (value == 0) { + return 0; + } + var i = parseInt(Math.floor(Math.log(value) / Math.log(1024))); + return Roo.util.Format.number(value/ Math.pow(1024, i) ,decimals) + sizes[i]; } + + + }; }(); Roo.util.Format.defaults = { @@ -14432,7 +14524,44 @@ Roo.extend(Roo.util.ClickRepeater, Roo.util.Observable, { this.el.removeClass(this.pressClass); this.fireEvent("mouseup", this); } -});/* +});/** + * @class Roo.util.Clipboard + * @static + * + * Clipboard UTILS + * + **/ +Roo.util.Clipboard = { + /** + * Writes a string to the clipboard - using the Clipboard API if https, otherwise using text area. + * @param {String} text to copy to clipboard + */ + write : function(text) { + // navigator clipboard api needs a secure context (https) + if (navigator.clipboard && window.isSecureContext) { + // navigator clipboard api method' + navigator.clipboard.writeText(text); + return ; + } + // text area method + var ta = document.createElement("textarea"); + ta.value = text; + // make the textarea out of viewport + ta.style.position = "fixed"; + ta.style.left = "-999999px"; + ta.style.top = "-999999px"; + document.body.appendChild(ta); + ta.focus(); + ta.select(); + document.execCommand('copy'); + (function() { + ta.remove(); + }).defer(100); + + } + +} + /* * Based on: * Ext JS Library 1.1.1 * Copyright(c) 2006-2007, Ext JS, LLC. @@ -22520,7 +22649,7 @@ Roo.dd.DropTarget = function(el, config){ * target. This default implementation adds the CSS class specified by overClass (if any) to the drop element * and returns the dropAllowed config value. This method should be overridden if drop validation is required. * - * IMPORTANT : it should set this.overClass and this.dropAllowed + * IMPORTANT : it should set this.valid to true|false * * @param {Roo.dd.DragSource} source The drag source that was dragged over this drop target * @param {Event} e The event @@ -22534,7 +22663,7 @@ Roo.dd.DropTarget = function(el, config){ * This method will be called on every mouse movement while the drag source is over the drop target. * This default implementation simply returns the dropAllowed config value. * - * IMPORTANT : it should set this.dropAllowed + * IMPORTANT : it should set this.valid to true|false * * @param {Roo.dd.DragSource} source The drag source that was dragged over this drop target * @param {Event} e The event @@ -22548,6 +22677,7 @@ Roo.dd.DropTarget = function(el, config){ * out of the target without dropping. This default implementation simply removes the CSS class specified by * overClass (if any) from the drop element. * + * * @param {Roo.dd.DragSource} source The drag source that was dragged over this drop target * @param {Event} e The event * @param {Object} data An object containing arbitrary data supplied by the drag source @@ -25157,35 +25287,35 @@ Roo.extend(Roo.data.ArrayReader, Roo.data.JsonReader, { readRecords : function(o) { var sid = this.meta ? this.meta.id : null; - var recordType = this.recordType, fields = recordType.prototype.fields; - var records = []; - var root = o; - for(var i = 0; i < root.length; i++){ - var n = root[i]; - var values = {}; - var id = ((sid || sid === 0) && n[sid] !== undefined && n[sid] !== "" ? n[sid] : null); - for(var j = 0, jlen = fields.length; j < jlen; j++){ - var f = fields.items[j]; - var k = f.mapping !== undefined && f.mapping !== null ? f.mapping : j; - var v = n[k] !== undefined ? n[k] : f.defaultValue; - v = f.convert(v); - values[f.name] = v; - } - var record = new recordType(values, id); - record.json = n; - records[records.length] = record; - } - return { - records : records, - totalRecords : records.length - }; + var recordType = this.recordType, fields = recordType.prototype.fields; + var records = []; + var root = o; + for(var i = 0; i < root.length; i++){ + var n = root[i]; + var values = {}; + var id = ((sid || sid === 0) && n[sid] !== undefined && n[sid] !== "" ? n[sid] : null); + for(var j = 0, jlen = fields.length; j < jlen; j++){ + var f = fields.items[j]; + var k = f.mapping !== undefined && f.mapping !== null ? f.mapping : j; + var v = n[k] !== undefined ? n[k] : f.defaultValue; + v = f.convert(v); + values[f.name] = v; + } + var record = new recordType(values, id); + record.json = n; + records[records.length] = record; + } + return { + records : records, + totalRecords : records.length + }; }, // used when loading children.. @see loadDataFromChildren toLoadData: function(rec) { - // expect rec just to be an array.. eg [a,b,c, [...] << cn ] - return typeof(rec.data.cn) == 'undefined' ? [] : rec.data.cn; - + // expect rec just to be an array.. eg [a,b,c, [...] << cn ] + return typeof(rec.data.cn) == 'undefined' ? [] : rec.data.cn; + } @@ -38306,7 +38436,7 @@ Roo.menu.TextItem = function(cfg){ Roo.extend(Roo.menu.TextItem, Roo.menu.BaseItem, { /** - * @cfg {Boolean} text Text to show on item. + * @cfg {String} text Text to show on item. */ text : '', @@ -45179,8 +45309,8 @@ Roo.HtmlEditorCore.cblack= [ Roo.HtmlEditorCore.swapCodes =[ - [ 8211, "--" ], - [ 8212, "--" ], + [ 8211, "–" ], + [ 8212, "—" ], [ 8216, "'" ], [ 8217, "'" ], [ 8220, '"' ], @@ -51426,10 +51556,10 @@ Roo.DDView = function(container, tpl, config) { this.getEl().setStyle("outline", "0px none"); this.getEl().unselectable(); if (this.dragGroup) { - this.setDraggable(this.dragGroup.split(",")); + this.setDraggable(this.dragGroup.split(",")); } if (this.dropGroup) { - this.setDroppable(this.dropGroup.split(",")); + this.setDroppable(this.dropGroup.split(",")); } if (this.deletable) { this.setDeletable(); @@ -55363,6 +55493,9 @@ Roo.extend(Roo.grid.Grid, Roo.util.Observable, { /** * @cfg {String} ddGroup - drag drop group. */ + /** + * @cfg {String} dragGroup - drag group (?? not sure if needed.) + */ /** * @cfg {Number} minColumnWidth The minimum width a column can be resized to. Default is 25. @@ -55399,6 +55532,9 @@ Roo.extend(Roo.grid.Grid, Roo.util.Observable, { /** * @cfg {Boolean} enableDrag True to enable drag of rows. Default is false. (double check if this is needed?) + */ + /** + * @cfg {Boolean} enableDrop True to enable drop of elements. Default is false. (double check if this is needed?) */ /** @@ -55473,6 +55609,15 @@ Roo.extend(Roo.grid.Grid, Roo.util.Observable, { /** * @cfg {Number} maxHeight Sets the maximum height of the grid - ignored if autoHeight is not on. */ + + + /** + * @cfg {String} ddText Configures the text is the drag proxy (defaults to "%0 selected row(s)"). + * %0 is replaced with the number of selected rows. + */ + ddText : "{0} selected row{1}", + + /** * Called once after all setup has been completed and the grid is ready to be rendered. * @return {Roo.grid.Grid} this @@ -55783,11 +55928,17 @@ Roo.extend(Roo.grid.Grid, Roo.util.Observable, { getView : function(){ if(!this.view){ this.view = new Roo.grid.GridView(this.viewConfig); + this.relayEvents(this.view, [ + "beforerowremoved", "beforerowsinserted", + "beforerefresh", "rowremoved", + "rowsinserted", "rowupdated" ,"refresh" + ]); } return this.view; }, /** * Called to get grid's drag proxy text, by default returns this.ddText. + * Override this to put something different in the dragged text. * @return {String} */ getDragDropText : function(){ @@ -55795,12 +55946,7 @@ Roo.extend(Roo.grid.Grid, Roo.util.Observable, { return String.format(this.ddText, count, count == 1 ? '' : 's'); } }); -/** - * Configures the text is the drag proxy (defaults to "%0 selected row(s)"). - * %0 is replaced with the number of selected rows. - * @type String - */ -Roo.grid.Grid.prototype.ddText = "{0} selected row{1}";/* +/* * Based on: * Ext JS Library 1.1.1 * Copyright(c) 2006-2007, Ext JS, LLC. @@ -56715,7 +56861,7 @@ Roo.extend(Roo.grid.GridView, Roo.grid.AbstractGridView, { ); */ if(ctop < stop){ - c.scrollTop = ctop; + c.scrollTop = ctop; //Roo.log("set scrolltop to ctop DISABLE?"); }else if(cbot > sbot){ //Roo.log("set scrolltop to cbot-ch"); @@ -57710,7 +57856,8 @@ Roo.extend(Roo.grid.GridView, Roo.grid.AbstractGridView, { } }, - layout : function(initialRender, is2ndPass){ + layout : function(initialRender, is2ndPass) + { var g = this.grid; var auto = g.autoHeight; var scrollOffset = 16; @@ -57969,7 +58116,12 @@ Roo.extend(Roo.grid.GridDragZone, Roo.dd.DragZone, { } } + if (sm.getSelections && sm.getSelections().length < 1) { + return false; + } + + // before it used to all dragging of unseleted... - now we dont do that. if(rowIndex !== false){ // if editorgrid.. @@ -57990,14 +58142,14 @@ Roo.extend(Roo.grid.GridDragZone, Roo.dd.DragZone, { grid: this.grid, ddel: this.ddel, rowIndex: rowIndex, - selections:sm.getSelections ? sm.getSelections() : ( - sm.getSelectedCell() ? [ this.grid.ds.getAt(sm.getSelectedCell()[0]) ] : [] - ) + selections: sm.getSelections ? sm.getSelections() : ( + sm.getSelectedCell() ? [ this.grid.ds.getAt(sm.getSelectedCell()[0]) ] : []) }; } return false; }, - + + onInitDrag : function(e){ var data = this.dragData; this.ddel.innerHTML = this.grid.getDragDropText();