mirror of
https://git.deluge-torrent.org/deluge
synced 2025-08-06 16:38:43 +00:00
Update extensions to Ext JS 3.4.0
This commit is contained in:
parent
5ff0d61b52
commit
966fc6f64f
12 changed files with 1330 additions and 1226 deletions
|
@ -55,10 +55,10 @@ Ext.override(Ext.layout.FormLayout, {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
/*!
|
/*!
|
||||||
* Ext JS Library 3.1.0
|
* Ext JS Library 3.4.0
|
||||||
* Copyright(c) 2006-2009 Ext JS, LLC
|
* Copyright(c) 2006-2011 Sencha Inc.
|
||||||
* licensing@extjs.com
|
* licensing@sencha.com
|
||||||
* http://www.extjs.com/license
|
* http://www.sencha.com/license
|
||||||
*/
|
*/
|
||||||
Ext.ns('Ext.ux.tree');
|
Ext.ns('Ext.ux.tree');
|
||||||
|
|
||||||
|
@ -98,14 +98,6 @@ Ext.ux.tree.TreeGrid = Ext.extend(Ext.tree.TreePanel, {
|
||||||
}else if(Ext.isObject(l) && !l.load){
|
}else if(Ext.isObject(l) && !l.load){
|
||||||
l = new Ext.ux.tree.TreeGridLoader(l);
|
l = new Ext.ux.tree.TreeGridLoader(l);
|
||||||
}
|
}
|
||||||
else if(l) {
|
|
||||||
l.createNode = function(attr) {
|
|
||||||
if (!attr.uiProvider) {
|
|
||||||
attr.uiProvider = Ext.ux.tree.TreeGridNodeUI;
|
|
||||||
}
|
|
||||||
return Ext.tree.TreeLoader.prototype.createNode.call(this, attr);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
this.loader = l;
|
this.loader = l;
|
||||||
|
|
||||||
Ext.ux.tree.TreeGrid.superclass.initComponent.call(this);
|
Ext.ux.tree.TreeGrid.superclass.initComponent.call(this);
|
||||||
|
@ -127,7 +119,7 @@ Ext.ux.tree.TreeGrid = Ext.extend(Ext.tree.TreePanel, {
|
||||||
'<div class="x-grid3-header">',
|
'<div class="x-grid3-header">',
|
||||||
'<div class="x-treegrid-header-inner">',
|
'<div class="x-treegrid-header-inner">',
|
||||||
'<div class="x-grid3-header-offset">',
|
'<div class="x-grid3-header-offset">',
|
||||||
'<table cellspacing="0" cellpadding="0" border="0"><colgroup><tpl for="columns"><col /></tpl></colgroup>',
|
'<table style="table-layout: fixed;" cellspacing="0" cellpadding="0" border="0"><colgroup><tpl for="columns"><col /></tpl></colgroup>',
|
||||||
'<thead><tr class="x-grid3-hd-row">',
|
'<thead><tr class="x-grid3-hd-row">',
|
||||||
'<tpl for="columns">',
|
'<tpl for="columns">',
|
||||||
'<td class="x-grid3-hd x-grid3-cell x-treegrid-hd" style="text-align: {align};" id="', this.id, '-xlhd-{#}">',
|
'<td class="x-grid3-hd x-grid3-cell x-treegrid-hd" style="text-align: {align};" id="', this.id, '-xlhd-{#}">',
|
||||||
|
@ -137,7 +129,7 @@ Ext.ux.tree.TreeGrid = Ext.extend(Ext.tree.TreePanel, {
|
||||||
'</div>',
|
'</div>',
|
||||||
'</td></tpl>',
|
'</td></tpl>',
|
||||||
'</tr></thead>',
|
'</tr></thead>',
|
||||||
'</div></table>',
|
'</table>',
|
||||||
'</div></div>',
|
'</div></div>',
|
||||||
'</div>',
|
'</div>',
|
||||||
'<div class="x-treegrid-root-node">',
|
'<div class="x-treegrid-root-node">',
|
||||||
|
@ -196,7 +188,7 @@ Ext.ux.tree.TreeGrid = Ext.extend(Ext.tree.TreePanel, {
|
||||||
this.colgroupTpl.insertFirst(this.innerCt, {columns: this.columns});
|
this.colgroupTpl.insertFirst(this.innerCt, {columns: this.columns});
|
||||||
|
|
||||||
if(this.hideHeaders){
|
if(this.hideHeaders){
|
||||||
this.header.dom.style.display = 'none';
|
this.el.child('.x-grid3-header').setDisplayed('none');
|
||||||
}
|
}
|
||||||
else if(this.enableHdMenu !== false){
|
else if(this.enableHdMenu !== false){
|
||||||
this.hmenu = new Ext.menu.Menu({id: this.id + '-hctx'});
|
this.hmenu = new Ext.menu.Menu({id: this.id + '-hctx'});
|
||||||
|
@ -228,6 +220,17 @@ Ext.ux.tree.TreeGrid = Ext.extend(Ext.tree.TreePanel, {
|
||||||
return node;
|
return node;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
clearInnerCt : function(){
|
||||||
|
if(Ext.isIE){
|
||||||
|
var dom = this.innerCt.dom;
|
||||||
|
while(dom.firstChild){
|
||||||
|
dom.removeChild(dom.firstChild);
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
Ext.ux.tree.TreeGrid.superclass.clearInnerCt.call(this);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
initEvents : function() {
|
initEvents : function() {
|
||||||
Ext.ux.tree.TreeGrid.superclass.initEvents.apply(this, arguments);
|
Ext.ux.tree.TreeGrid.superclass.initEvents.apply(this, arguments);
|
||||||
|
|
||||||
|
@ -464,10 +467,10 @@ Ext.ux.tree.TreeGrid = Ext.extend(Ext.tree.TreePanel, {
|
||||||
|
|
||||||
Ext.reg('treegrid', Ext.ux.tree.TreeGrid);
|
Ext.reg('treegrid', Ext.ux.tree.TreeGrid);
|
||||||
/*!
|
/*!
|
||||||
* Ext JS Library 3.1.0
|
* Ext JS Library 3.4.0
|
||||||
* Copyright(c) 2006-2009 Ext JS, LLC
|
* Copyright(c) 2006-2011 Sencha Inc.
|
||||||
* licensing@extjs.com
|
* licensing@sencha.com
|
||||||
* http://www.extjs.com/license
|
* http://www.sencha.com/license
|
||||||
*/
|
*/
|
||||||
/**
|
/**
|
||||||
* @class Ext.tree.ColumnResizer
|
* @class Ext.tree.ColumnResizer
|
||||||
|
@ -545,6 +548,7 @@ Ext.tree.ColumnResizer = Ext.extend(Ext.util.Observable, {
|
||||||
},
|
},
|
||||||
|
|
||||||
onStart : function(e){
|
onStart : function(e){
|
||||||
|
this.dragHeadersDisabled = this.tree.headersDisabled;
|
||||||
this.tree.headersDisabled = true;
|
this.tree.headersDisabled = true;
|
||||||
this.proxy = this.tree.body.createChild({cls:'x-treegrid-resizer'});
|
this.proxy = this.tree.body.createChild({cls:'x-treegrid-resizer'});
|
||||||
this.proxy.setHeight(this.tree.body.getHeight());
|
this.proxy.setHeight(this.tree.body.getHeight());
|
||||||
|
@ -567,7 +571,8 @@ Ext.tree.ColumnResizer = Ext.extend(Ext.util.Observable, {
|
||||||
|
|
||||||
onEnd : function(e){
|
onEnd : function(e){
|
||||||
var nw = this.proxy.getWidth(),
|
var nw = this.proxy.getWidth(),
|
||||||
tree = this.tree;
|
tree = this.tree,
|
||||||
|
disabled = this.dragHeadersDisabled;
|
||||||
|
|
||||||
this.proxy.remove();
|
this.proxy.remove();
|
||||||
delete this.dragHd;
|
delete this.dragHd;
|
||||||
|
@ -576,40 +581,34 @@ Ext.tree.ColumnResizer = Ext.extend(Ext.util.Observable, {
|
||||||
tree.updateColumnWidths();
|
tree.updateColumnWidths();
|
||||||
|
|
||||||
setTimeout(function(){
|
setTimeout(function(){
|
||||||
tree.headersDisabled = false;
|
tree.headersDisabled = disabled;
|
||||||
}, 100);
|
}, 100);
|
||||||
}
|
}
|
||||||
});/*!
|
});/*!
|
||||||
* Ext JS Library 3.1.0
|
* Ext JS Library 3.4.0
|
||||||
* Copyright(c) 2006-2009 Ext JS, LLC
|
* Copyright(c) 2006-2011 Sencha Inc.
|
||||||
* licensing@extjs.com
|
* licensing@sencha.com
|
||||||
* http://www.extjs.com/license
|
* http://www.sencha.com/license
|
||||||
*/
|
*/
|
||||||
(function() {
|
(function() {
|
||||||
Ext.override(Ext.list.Column, {
|
Ext.override(Ext.list.Column, {
|
||||||
init : function() {
|
init : function() {
|
||||||
if(!this.type){
|
var types = Ext.data.Types,
|
||||||
this.type = "auto";
|
st = this.sortType;
|
||||||
|
|
||||||
|
if(this.type){
|
||||||
|
if(Ext.isString(this.type)){
|
||||||
|
this.type = Ext.data.Types[this.type.toUpperCase()] || types.AUTO;
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
this.type = types.AUTO;
|
||||||
}
|
}
|
||||||
|
|
||||||
var st = Ext.data.SortTypes;
|
|
||||||
// named sortTypes are supported, here we look them up
|
// named sortTypes are supported, here we look them up
|
||||||
if(typeof this.sortType == "string"){
|
if(Ext.isString(st)){
|
||||||
this.sortType = st[this.sortType];
|
this.sortType = Ext.data.SortTypes[st];
|
||||||
}
|
}else if(Ext.isEmpty(st)){
|
||||||
|
this.sortType = this.type.sortType;
|
||||||
// set default sortType for strings and dates
|
|
||||||
if(!this.sortType){
|
|
||||||
switch(this.type){
|
|
||||||
case "string":
|
|
||||||
this.sortType = st.asUCString;
|
|
||||||
break;
|
|
||||||
case "date":
|
|
||||||
this.sortType = st.asDate;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
this.sortType = st.none;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -625,10 +624,10 @@ Ext.tree.ColumnResizer = Ext.extend(Ext.util.Observable, {
|
||||||
Ext.reg('tgbooleancolumn', Ext.tree.BooleanColumn);
|
Ext.reg('tgbooleancolumn', Ext.tree.BooleanColumn);
|
||||||
})();
|
})();
|
||||||
/*!
|
/*!
|
||||||
* Ext JS Library 3.1.0
|
* Ext JS Library 3.4.0
|
||||||
* Copyright(c) 2006-2009 Ext JS, LLC
|
* Copyright(c) 2006-2011 Sencha Inc.
|
||||||
* licensing@extjs.com
|
* licensing@sencha.com
|
||||||
* http://www.extjs.com/license
|
* http://www.sencha.com/license
|
||||||
*/
|
*/
|
||||||
/**
|
/**
|
||||||
* @class Ext.ux.tree.TreeGridLoader
|
* @class Ext.ux.tree.TreeGridLoader
|
||||||
|
@ -642,10 +641,10 @@ Ext.ux.tree.TreeGridLoader = Ext.extend(Ext.tree.TreeLoader, {
|
||||||
return Ext.tree.TreeLoader.prototype.createNode.call(this, attr);
|
return Ext.tree.TreeLoader.prototype.createNode.call(this, attr);
|
||||||
}
|
}
|
||||||
});/*!
|
});/*!
|
||||||
* Ext JS Library 3.1.0
|
* Ext JS Library 3.4.0
|
||||||
* Copyright(c) 2006-2009 Ext JS, LLC
|
* Copyright(c) 2006-2011 Sencha Inc.
|
||||||
* licensing@extjs.com
|
* licensing@sencha.com
|
||||||
* http://www.extjs.com/license
|
* http://www.sencha.com/license
|
||||||
*/
|
*/
|
||||||
/**
|
/**
|
||||||
* @class Ext.ux.tree.TreeGridNodeUI
|
* @class Ext.ux.tree.TreeGridNodeUI
|
||||||
|
@ -664,11 +663,11 @@ Ext.ux.tree.TreeGridNodeUI = Ext.extend(Ext.tree.TreeNodeUI, {
|
||||||
|
|
||||||
buf = [
|
buf = [
|
||||||
'<tbody class="x-tree-node">',
|
'<tbody class="x-tree-node">',
|
||||||
'<tr ext:tree-node-id="', n.id ,'" class="x-tree-node-el ', a.cls, '">',
|
'<tr ext:tree-node-id="', n.id ,'" class="x-tree-node-el x-tree-node-leaf ', a.cls, '">',
|
||||||
'<td class="x-treegrid-col">',
|
'<td class="x-treegrid-col">',
|
||||||
'<span class="x-tree-node-indent">', this.indentMarkup, "</span>",
|
'<span class="x-tree-node-indent">', this.indentMarkup, "</span>",
|
||||||
'<img src="', this.emptyIcon, '" class="x-tree-ec-icon x-tree-elbow">',
|
'<img src="', this.emptyIcon, '" class="x-tree-ec-icon x-tree-elbow" />',
|
||||||
'<img src="', a.icon || this.emptyIcon, '" class="x-tree-node-icon', (a.icon ? " x-tree-node-inline-icon" : ""), (a.iconCls ? " "+a.iconCls : ""), '" unselectable="on">',
|
'<img src="', a.icon || this.emptyIcon, '" class="x-tree-node-icon', (a.icon ? " x-tree-node-inline-icon" : ""), (a.iconCls ? " "+a.iconCls : ""), '" unselectable="on" />',
|
||||||
'<a hidefocus="on" class="x-tree-node-anchor" href="', a.href ? a.href : '#', '" tabIndex="1" ',
|
'<a hidefocus="on" class="x-tree-node-anchor" href="', a.href ? a.href : '#', '" tabIndex="1" ',
|
||||||
a.hrefTarget ? ' target="'+a.hrefTarget+'"' : '', '>',
|
a.hrefTarget ? ' target="'+a.hrefTarget+'"' : '', '>',
|
||||||
'<span unselectable="on">', (c.tpl ? c.tpl.apply(a) : a[c.dataIndex] || c.text), '</span></a>',
|
'<span unselectable="on">', (c.tpl ? c.tpl.apply(a) : a[c.dataIndex] || c.text), '</span></a>',
|
||||||
|
@ -811,16 +810,32 @@ Ext.tree.RenderColumn = Ext.extend(Ext.tree.Column, {
|
||||||
});
|
});
|
||||||
Ext.reg('tgrendercolumn', Ext.tree.RenderColumn);
|
Ext.reg('tgrendercolumn', Ext.tree.RenderColumn);
|
||||||
/*!
|
/*!
|
||||||
* Ext JS Library 3.1.0
|
* Ext JS Library 3.4.0
|
||||||
* Copyright(c) 2006-2009 Ext JS, LLC
|
* Copyright(c) 2006-2011 Sencha Inc.
|
||||||
* licensing@extjs.com
|
* licensing@sencha.com
|
||||||
* http://www.extjs.com/license
|
* http://www.sencha.com/license
|
||||||
*/
|
*/
|
||||||
Ext.ns('Ext.ux.tree');
|
Ext.ns('Ext.ux.tree');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @class Ext.ux.tree.TreeGridSorter
|
* @class Ext.ux.tree.TreeGridSorter
|
||||||
* @extends Ext.tree.TreeSorter
|
* @extends Ext.tree.TreeSorter
|
||||||
|
* Provides sorting of nodes in a {@link Ext.ux.tree.TreeGrid}. The TreeGridSorter automatically monitors events on the
|
||||||
|
* associated TreeGrid that might affect the tree's sort order (beforechildrenrendered, append, insert and textchange).
|
||||||
|
* Example usage:<br />
|
||||||
|
* <pre><code>
|
||||||
|
new Ext.ux.tree.TreeGridSorter(myTreeGrid, {
|
||||||
|
folderSort: true,
|
||||||
|
dir: "desc",
|
||||||
|
sortType: function(node) {
|
||||||
|
// sort by a custom, typed attribute:
|
||||||
|
return parseInt(node.id, 10);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
</code></pre>
|
||||||
|
* @constructor
|
||||||
|
* @param {TreeGrid} tree
|
||||||
|
* @param {Object} config
|
||||||
*/
|
*/
|
||||||
Ext.ux.tree.TreeGridSorter = Ext.extend(Ext.tree.TreeSorter, {
|
Ext.ux.tree.TreeGridSorter = Ext.extend(Ext.tree.TreeSorter, {
|
||||||
/**
|
/**
|
||||||
|
@ -850,30 +865,34 @@ Ext.ux.tree.TreeGridSorter = Ext.extend(Ext.tree.TreeSorter, {
|
||||||
tree.on('headerclick', this.onHeaderClick, this);
|
tree.on('headerclick', this.onHeaderClick, this);
|
||||||
tree.ddAppendOnly = true;
|
tree.ddAppendOnly = true;
|
||||||
|
|
||||||
me = this;
|
var me = this;
|
||||||
this.defaultSortFn = function(n1, n2){
|
this.defaultSortFn = function(n1, n2){
|
||||||
|
|
||||||
var dsc = me.dir && me.dir.toLowerCase() == 'desc';
|
var desc = me.dir && me.dir.toLowerCase() == 'desc',
|
||||||
var p = me.property || 'text';
|
prop = me.property || 'text',
|
||||||
var sortType = me.sortType;
|
sortType = me.sortType,
|
||||||
var fs = me.folderSort;
|
caseSensitive = me.caseSensitive === true,
|
||||||
var cs = me.caseSensitive === true;
|
leafAttr = me.leafAttr || 'leaf',
|
||||||
var leafAttr = me.leafAttr || 'leaf';
|
attr1 = n1.attributes,
|
||||||
|
attr2 = n2.attributes;
|
||||||
|
|
||||||
if(fs){
|
if(me.folderSort){
|
||||||
if(n1.attributes[leafAttr] && !n2.attributes[leafAttr]){
|
if(attr1[leafAttr] && !attr2[leafAttr]){
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
if(!n1.attributes[leafAttr] && n2.attributes[leafAttr]){
|
if(!attr1[leafAttr] && attr2[leafAttr]){
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
var v1 = sortType ? sortType(n1.attributes[p]) : (cs ? n1.attributes[p] : n1.attributes[p].toUpperCase());
|
var prop1 = attr1[prop],
|
||||||
var v2 = sortType ? sortType(n2.attributes[p]) : (cs ? n2.attributes[p] : n2.attributes[p].toUpperCase());
|
prop2 = attr2[prop],
|
||||||
|
v1 = sortType ? sortType(prop1) : (caseSensitive ? prop1 : prop1.toUpperCase());
|
||||||
|
v2 = sortType ? sortType(prop2) : (caseSensitive ? prop2 : prop2.toUpperCase());
|
||||||
|
|
||||||
if(v1 < v2){
|
if(v1 < v2){
|
||||||
return dsc ? +1 : -1;
|
return desc ? +1 : -1;
|
||||||
}else if(v1 > v2){
|
}else if(v1 > v2){
|
||||||
return dsc ? -1 : +1;
|
return desc ? -1 : +1;
|
||||||
}else{
|
}else{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -884,11 +903,12 @@ Ext.ux.tree.TreeGridSorter = Ext.extend(Ext.tree.TreeSorter, {
|
||||||
},
|
},
|
||||||
|
|
||||||
onAfterTreeRender : function() {
|
onAfterTreeRender : function() {
|
||||||
var hmenu = this.tree.hmenu;
|
if(this.tree.hmenu){
|
||||||
hmenu.insert(0,
|
this.tree.hmenu.insert(0,
|
||||||
{itemId:'asc', text: this.sortAscText, cls: 'xg-hmenu-sort-asc'},
|
{itemId:'asc', text: this.sortAscText, cls: 'xg-hmenu-sort-asc'},
|
||||||
{itemId:'desc', text: this.sortDescText, cls: 'xg-hmenu-sort-desc'}
|
{itemId:'desc', text: this.sortDescText, cls: 'xg-hmenu-sort-desc'}
|
||||||
);
|
);
|
||||||
|
}
|
||||||
this.updateSortIcon(0, 'asc');
|
this.updateSortIcon(0, 'asc');
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -921,15 +941,16 @@ Ext.ux.tree.TreeGridSorter = Ext.extend(Ext.tree.TreeSorter, {
|
||||||
|
|
||||||
// private
|
// private
|
||||||
updateSortIcon : function(col, dir){
|
updateSortIcon : function(col, dir){
|
||||||
var sc = this.sortClasses;
|
var sc = this.sortClasses,
|
||||||
var hds = this.tree.innerHd.select('td').removeClass(sc);
|
hds = this.tree.innerHd.select('td').removeClass(sc);
|
||||||
hds.item(col).addClass(sc[dir == 'desc' ? 1 : 0]);
|
hds.item(col).addClass(sc[dir == 'desc' ? 1 : 0]);
|
||||||
}
|
}
|
||||||
});/*!
|
});
|
||||||
* Ext JS Library 3.1.0
|
/*!
|
||||||
* Copyright(c) 2006-2009 Ext JS, LLC
|
* Ext JS Library 3.4.0
|
||||||
* licensing@extjs.com
|
* Copyright(c) 2006-2011 Sencha Inc.
|
||||||
* http://www.extjs.com/license
|
* licensing@sencha.com
|
||||||
|
* http://www.sencha.com/license
|
||||||
*/
|
*/
|
||||||
Ext.ns('Ext.ux.grid');
|
Ext.ns('Ext.ux.grid');
|
||||||
|
|
||||||
|
@ -1002,15 +1023,15 @@ Ext.ux.grid.BufferView = Ext.extend(Ext.grid.GridView, {
|
||||||
},
|
},
|
||||||
|
|
||||||
getVisibleRowCount : function(){
|
getVisibleRowCount : function(){
|
||||||
var rh = this.getCalculatedRowHeight();
|
var rh = this.getCalculatedRowHeight(),
|
||||||
var visibleHeight = this.scroller.dom.clientHeight;
|
visibleHeight = this.scroller.dom.clientHeight;
|
||||||
return (visibleHeight < 1) ? 0 : Math.ceil(visibleHeight / rh);
|
return (visibleHeight < 1) ? 0 : Math.ceil(visibleHeight / rh);
|
||||||
},
|
},
|
||||||
|
|
||||||
getVisibleRows: function(){
|
getVisibleRows: function(){
|
||||||
var count = this.getVisibleRowCount();
|
var count = this.getVisibleRowCount(),
|
||||||
var sc = this.scroller.dom.scrollTop;
|
sc = this.scroller.dom.scrollTop,
|
||||||
var start = (sc == 0 ? 0 : Math.floor(sc/this.getCalculatedRowHeight())-1);
|
start = (sc === 0 ? 0 : Math.floor(sc/this.getCalculatedRowHeight())-1);
|
||||||
return {
|
return {
|
||||||
first: Math.max(start, 0),
|
first: Math.max(start, 0),
|
||||||
last: Math.min(start + count + 2, this.ds.getCount()-1)
|
last: Math.min(start + count + 2, this.ds.getCount()-1)
|
||||||
|
@ -1018,25 +1039,34 @@ Ext.ux.grid.BufferView = Ext.extend(Ext.grid.GridView, {
|
||||||
},
|
},
|
||||||
|
|
||||||
doRender : function(cs, rs, ds, startRow, colCount, stripe, onlyBody){
|
doRender : function(cs, rs, ds, startRow, colCount, stripe, onlyBody){
|
||||||
var ts = this.templates, ct = ts.cell, rt = ts.row, rb = ts.rowBody, last = colCount-1;
|
var ts = this.templates,
|
||||||
var rh = this.getStyleRowHeight();
|
ct = ts.cell,
|
||||||
var vr = this.getVisibleRows();
|
rt = ts.row,
|
||||||
var tstyle = 'width:'+this.getTotalWidth()+';height:'+rh+'px;';
|
rb = ts.rowBody,
|
||||||
|
last = colCount-1,
|
||||||
|
rh = this.getStyleRowHeight(),
|
||||||
|
vr = this.getVisibleRows(),
|
||||||
|
tstyle = 'width:'+this.getTotalWidth()+';height:'+rh+'px;',
|
||||||
// buffers
|
// buffers
|
||||||
var buf = [], cb, c, p = {}, rp = {tstyle: tstyle}, r;
|
buf = [],
|
||||||
|
cb,
|
||||||
|
c,
|
||||||
|
p = {},
|
||||||
|
rp = {tstyle: tstyle},
|
||||||
|
r;
|
||||||
for (var j = 0, len = rs.length; j < len; j++) {
|
for (var j = 0, len = rs.length; j < len; j++) {
|
||||||
r = rs[j]; cb = [];
|
r = rs[j]; cb = [];
|
||||||
var rowIndex = (j+startRow);
|
var rowIndex = (j+startRow),
|
||||||
var visible = rowIndex >= vr.first && rowIndex <= vr.last;
|
visible = rowIndex >= vr.first && rowIndex <= vr.last;
|
||||||
if (visible) {
|
if (visible) {
|
||||||
for (var i = 0; i < colCount; i++) {
|
for (var i = 0; i < colCount; i++) {
|
||||||
c = cs[i];
|
c = cs[i];
|
||||||
p.id = c.id;
|
p.id = c.id;
|
||||||
p.css = i == 0 ? 'x-grid3-cell-first ' : (i == last ? 'x-grid3-cell-last ' : '');
|
p.css = i === 0 ? 'x-grid3-cell-first ' : (i == last ? 'x-grid3-cell-last ' : '');
|
||||||
p.attr = p.cellAttr = "";
|
p.attr = p.cellAttr = "";
|
||||||
p.value = c.renderer(r.data[c.name], p, r, rowIndex, i, ds);
|
p.value = c.renderer(r.data[c.name], p, r, rowIndex, i, ds);
|
||||||
p.style = c.style;
|
p.style = c.style;
|
||||||
if (p.value == undefined || p.value === "") {
|
if (p.value === undefined || p.value === "") {
|
||||||
p.value = " ";
|
p.value = " ";
|
||||||
}
|
}
|
||||||
if (r.dirty && typeof r.modified[c.name] !== 'undefined') {
|
if (r.dirty && typeof r.modified[c.name] !== 'undefined') {
|
||||||
|
@ -1046,7 +1076,7 @@ Ext.ux.grid.BufferView = Ext.extend(Ext.grid.GridView, {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
var alt = [];
|
var alt = [];
|
||||||
if(stripe && ((rowIndex+1) % 2 == 0)){
|
if(stripe && ((rowIndex+1) % 2 === 0)){
|
||||||
alt[0] = "x-grid3-row-alt";
|
alt[0] = "x-grid3-row-alt";
|
||||||
}
|
}
|
||||||
if(r.dirty){
|
if(r.dirty){
|
||||||
|
@ -1094,15 +1124,17 @@ Ext.ux.grid.BufferView = Ext.extend(Ext.grid.GridView, {
|
||||||
|
|
||||||
doUpdate: function(){
|
doUpdate: function(){
|
||||||
if (this.getVisibleRowCount() > 0) {
|
if (this.getVisibleRowCount() > 0) {
|
||||||
var g = this.grid, cm = g.colModel, ds = g.store;
|
var g = this.grid,
|
||||||
var cs = this.getColumnData();
|
cm = g.colModel,
|
||||||
|
ds = g.store,
|
||||||
var vr = this.getVisibleRows();
|
cs = this.getColumnData(),
|
||||||
|
vr = this.getVisibleRows(),
|
||||||
|
row;
|
||||||
for (var i = vr.first; i <= vr.last; i++) {
|
for (var i = vr.first; i <= vr.last; i++) {
|
||||||
// if row is NOT rendered and is visible, render it
|
// if row is NOT rendered and is visible, render it
|
||||||
if(!this.isRowRendered(i)){
|
if(!this.isRowRendered(i) && (row = this.getRow(i))){
|
||||||
var html = this.doRender(cs, [ds.getAt(i)], ds, i, cm.getColumnCount(), g.stripeRows, true);
|
var html = this.doRender(cs, [ds.getAt(i)], ds, i, cm.getColumnCount(), g.stripeRows, true);
|
||||||
this.getRow(i).innerHTML = html;
|
row.innerHTML = html;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
this.clean();
|
this.clean();
|
||||||
|
@ -1139,16 +1171,30 @@ Ext.ux.grid.BufferView = Ext.extend(Ext.grid.GridView, {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
removeTask: function(name){
|
||||||
|
var task = this[name];
|
||||||
|
if(task && task.cancel){
|
||||||
|
task.cancel();
|
||||||
|
this[name] = null;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
destroy : function(){
|
||||||
|
this.removeTask('cleanTask');
|
||||||
|
this.removeTask('renderTask');
|
||||||
|
Ext.ux.grid.BufferView.superclass.destroy.call(this);
|
||||||
|
},
|
||||||
|
|
||||||
layout: function(){
|
layout: function(){
|
||||||
Ext.ux.grid.BufferView.superclass.layout.call(this);
|
Ext.ux.grid.BufferView.superclass.layout.call(this);
|
||||||
this.update();
|
this.update();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
/*!
|
/*!
|
||||||
* Ext JS Library 3.1.0
|
* Ext JS Library 3.4.0
|
||||||
* Copyright(c) 2006-2009 Ext JS, LLC
|
* Copyright(c) 2006-2011 Sencha Inc.
|
||||||
* licensing@extjs.com
|
* licensing@sencha.com
|
||||||
* http://www.extjs.com/license
|
* http://www.sencha.com/license
|
||||||
*/
|
*/
|
||||||
Ext.ns('Ext.ux.form');
|
Ext.ns('Ext.ux.form');
|
||||||
|
|
||||||
|
@ -1265,9 +1311,11 @@ Ext.ux.form.FileUploadField = Ext.extend(Ext.form.TextField, {
|
||||||
},
|
},
|
||||||
|
|
||||||
reset : function(){
|
reset : function(){
|
||||||
|
if (this.rendered) {
|
||||||
this.fileInput.remove();
|
this.fileInput.remove();
|
||||||
this.createFileInput();
|
this.createFileInput();
|
||||||
this.bindListeners();
|
this.bindListeners();
|
||||||
|
}
|
||||||
Ext.ux.form.FileUploadField.superclass.reset.call(this);
|
Ext.ux.form.FileUploadField.superclass.reset.call(this);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -1398,10 +1446,10 @@ Ext.override(Ext.form.RadioGroup, {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
/*!
|
/*!
|
||||||
* Ext JS Library 3.1.0
|
* Ext JS Library 3.4.0
|
||||||
* Copyright(c) 2006-2009 Ext JS, LLC
|
* Copyright(c) 2006-2011 Sencha Inc.
|
||||||
* licensing@extjs.com
|
* licensing@sencha.com
|
||||||
* http://www.extjs.com/license
|
* http://www.sencha.com/license
|
||||||
*/
|
*/
|
||||||
Ext.ns('Ext.ux.form');
|
Ext.ns('Ext.ux.form');
|
||||||
|
|
||||||
|
@ -1846,10 +1894,10 @@ Ext.ux.JSLoader.stdError = function(options, e) {
|
||||||
window.alert('Error loading script:\n\n' + options.url + '\n\nstatus: ' + e);
|
window.alert('Error loading script:\n\n' + options.url + '\n\nstatus: ' + e);
|
||||||
}
|
}
|
||||||
/*!
|
/*!
|
||||||
* Ext JS Library 3.1.0
|
* Ext JS Library 3.4.0
|
||||||
* Copyright(c) 2006-2009 Ext JS, LLC
|
* Copyright(c) 2006-2011 Sencha Inc.
|
||||||
* licensing@extjs.com
|
* licensing@sencha.com
|
||||||
* http://www.extjs.com/license
|
* http://www.sencha.com/license
|
||||||
*/
|
*/
|
||||||
/**
|
/**
|
||||||
* @class Ext.ux.Spinner
|
* @class Ext.ux.Spinner
|
||||||
|
@ -1936,12 +1984,14 @@ Ext.ux.Spinner = Ext.extend(Ext.util.Observable, {
|
||||||
|
|
||||||
doEnable: function(){
|
doEnable: function(){
|
||||||
if (this.wrap) {
|
if (this.wrap) {
|
||||||
|
this.disabled = false;
|
||||||
this.wrap.removeClass(this.field.disabledClass);
|
this.wrap.removeClass(this.field.disabledClass);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
doDisable: function(){
|
doDisable: function(){
|
||||||
if (this.wrap) {
|
if (this.wrap) {
|
||||||
|
this.disabled = true;
|
||||||
this.wrap.addClass(this.field.disabledClass);
|
this.wrap.addClass(this.field.disabledClass);
|
||||||
this.el.removeClass(this.field.disabledClass);
|
this.el.removeClass(this.field.disabledClass);
|
||||||
}
|
}
|
||||||
|
@ -2278,12 +2328,14 @@ Ext.ux.Spinner = Ext.extend(Ext.util.Observable, {
|
||||||
if (this.repeater) {
|
if (this.repeater) {
|
||||||
this.repeater.purgeListeners();
|
this.repeater.purgeListeners();
|
||||||
}
|
}
|
||||||
|
if (this.mimicing){
|
||||||
|
Ext.get(Ext.isIE ? document.body : document).un("mousedown", this.mimicBlur, this);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
//backwards compat
|
//backwards compat
|
||||||
Ext.form.Spinner = Ext.ux.Spinner;
|
Ext.form.Spinner = Ext.ux.Spinner;/*!
|
||||||
/*!
|
|
||||||
* Ext JS Library 3.4.0
|
* Ext JS Library 3.4.0
|
||||||
* Copyright(c) 2006-2011 Sencha Inc.
|
* Copyright(c) 2006-2011 Sencha Inc.
|
||||||
* licensing@sencha.com
|
* licensing@sencha.com
|
||||||
|
|
File diff suppressed because one or more lines are too long
|
@ -1,8 +1,8 @@
|
||||||
/*!
|
/*!
|
||||||
* Ext JS Library 3.1.0
|
* Ext JS Library 3.4.0
|
||||||
* Copyright(c) 2006-2009 Ext JS, LLC
|
* Copyright(c) 2006-2011 Sencha Inc.
|
||||||
* licensing@extjs.com
|
* licensing@sencha.com
|
||||||
* http://www.extjs.com/license
|
* http://www.sencha.com/license
|
||||||
*/
|
*/
|
||||||
/**
|
/**
|
||||||
* @class Ext.ux.Spinner
|
* @class Ext.ux.Spinner
|
||||||
|
@ -89,12 +89,14 @@ Ext.ux.Spinner = Ext.extend(Ext.util.Observable, {
|
||||||
|
|
||||||
doEnable: function(){
|
doEnable: function(){
|
||||||
if (this.wrap) {
|
if (this.wrap) {
|
||||||
|
this.disabled = false;
|
||||||
this.wrap.removeClass(this.field.disabledClass);
|
this.wrap.removeClass(this.field.disabledClass);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
doDisable: function(){
|
doDisable: function(){
|
||||||
if (this.wrap) {
|
if (this.wrap) {
|
||||||
|
this.disabled = true;
|
||||||
this.wrap.addClass(this.field.disabledClass);
|
this.wrap.addClass(this.field.disabledClass);
|
||||||
this.el.removeClass(this.field.disabledClass);
|
this.el.removeClass(this.field.disabledClass);
|
||||||
}
|
}
|
||||||
|
@ -431,6 +433,9 @@ Ext.ux.Spinner = Ext.extend(Ext.util.Observable, {
|
||||||
if (this.repeater) {
|
if (this.repeater) {
|
||||||
this.repeater.purgeListeners();
|
this.repeater.purgeListeners();
|
||||||
}
|
}
|
||||||
|
if (this.mimicing){
|
||||||
|
Ext.get(Ext.isIE ? document.body : document).un("mousedown", this.mimicBlur, this);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
/*!
|
/*!
|
||||||
* Ext JS Library 3.1.0
|
* Ext JS Library 3.4.0
|
||||||
* Copyright(c) 2006-2009 Ext JS, LLC
|
* Copyright(c) 2006-2011 Sencha Inc.
|
||||||
* licensing@extjs.com
|
* licensing@sencha.com
|
||||||
* http://www.extjs.com/license
|
* http://www.sencha.com/license
|
||||||
*/
|
*/
|
||||||
Ext.ns('Ext.ux.form');
|
Ext.ns('Ext.ux.form');
|
||||||
|
|
||||||
|
@ -119,9 +119,11 @@ Ext.ux.form.FileUploadField = Ext.extend(Ext.form.TextField, {
|
||||||
},
|
},
|
||||||
|
|
||||||
reset : function(){
|
reset : function(){
|
||||||
|
if (this.rendered) {
|
||||||
this.fileInput.remove();
|
this.fileInput.remove();
|
||||||
this.createFileInput();
|
this.createFileInput();
|
||||||
this.bindListeners();
|
this.bindListeners();
|
||||||
|
}
|
||||||
Ext.ux.form.FileUploadField.superclass.reset.call(this);
|
Ext.ux.form.FileUploadField.superclass.reset.call(this);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
/*!
|
/*!
|
||||||
* Ext JS Library 3.1.0
|
* Ext JS Library 3.4.0
|
||||||
* Copyright(c) 2006-2009 Ext JS, LLC
|
* Copyright(c) 2006-2011 Sencha Inc.
|
||||||
* licensing@extjs.com
|
* licensing@sencha.com
|
||||||
* http://www.extjs.com/license
|
* http://www.sencha.com/license
|
||||||
*/
|
*/
|
||||||
Ext.ns('Ext.ux.form');
|
Ext.ns('Ext.ux.form');
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
/*!
|
/*!
|
||||||
* Ext JS Library 3.1.0
|
* Ext JS Library 3.4.0
|
||||||
* Copyright(c) 2006-2009 Ext JS, LLC
|
* Copyright(c) 2006-2011 Sencha Inc.
|
||||||
* licensing@extjs.com
|
* licensing@sencha.com
|
||||||
* http://www.extjs.com/license
|
* http://www.sencha.com/license
|
||||||
*/
|
*/
|
||||||
Ext.ns('Ext.ux.grid');
|
Ext.ns('Ext.ux.grid');
|
||||||
|
|
||||||
|
@ -75,15 +75,15 @@ Ext.ux.grid.BufferView = Ext.extend(Ext.grid.GridView, {
|
||||||
},
|
},
|
||||||
|
|
||||||
getVisibleRowCount : function(){
|
getVisibleRowCount : function(){
|
||||||
var rh = this.getCalculatedRowHeight();
|
var rh = this.getCalculatedRowHeight(),
|
||||||
var visibleHeight = this.scroller.dom.clientHeight;
|
visibleHeight = this.scroller.dom.clientHeight;
|
||||||
return (visibleHeight < 1) ? 0 : Math.ceil(visibleHeight / rh);
|
return (visibleHeight < 1) ? 0 : Math.ceil(visibleHeight / rh);
|
||||||
},
|
},
|
||||||
|
|
||||||
getVisibleRows: function(){
|
getVisibleRows: function(){
|
||||||
var count = this.getVisibleRowCount();
|
var count = this.getVisibleRowCount(),
|
||||||
var sc = this.scroller.dom.scrollTop;
|
sc = this.scroller.dom.scrollTop,
|
||||||
var start = (sc == 0 ? 0 : Math.floor(sc/this.getCalculatedRowHeight())-1);
|
start = (sc === 0 ? 0 : Math.floor(sc/this.getCalculatedRowHeight())-1);
|
||||||
return {
|
return {
|
||||||
first: Math.max(start, 0),
|
first: Math.max(start, 0),
|
||||||
last: Math.min(start + count + 2, this.ds.getCount()-1)
|
last: Math.min(start + count + 2, this.ds.getCount()-1)
|
||||||
|
@ -91,25 +91,34 @@ Ext.ux.grid.BufferView = Ext.extend(Ext.grid.GridView, {
|
||||||
},
|
},
|
||||||
|
|
||||||
doRender : function(cs, rs, ds, startRow, colCount, stripe, onlyBody){
|
doRender : function(cs, rs, ds, startRow, colCount, stripe, onlyBody){
|
||||||
var ts = this.templates, ct = ts.cell, rt = ts.row, rb = ts.rowBody, last = colCount-1;
|
var ts = this.templates,
|
||||||
var rh = this.getStyleRowHeight();
|
ct = ts.cell,
|
||||||
var vr = this.getVisibleRows();
|
rt = ts.row,
|
||||||
var tstyle = 'width:'+this.getTotalWidth()+';height:'+rh+'px;';
|
rb = ts.rowBody,
|
||||||
|
last = colCount-1,
|
||||||
|
rh = this.getStyleRowHeight(),
|
||||||
|
vr = this.getVisibleRows(),
|
||||||
|
tstyle = 'width:'+this.getTotalWidth()+';height:'+rh+'px;',
|
||||||
// buffers
|
// buffers
|
||||||
var buf = [], cb, c, p = {}, rp = {tstyle: tstyle}, r;
|
buf = [],
|
||||||
|
cb,
|
||||||
|
c,
|
||||||
|
p = {},
|
||||||
|
rp = {tstyle: tstyle},
|
||||||
|
r;
|
||||||
for (var j = 0, len = rs.length; j < len; j++) {
|
for (var j = 0, len = rs.length; j < len; j++) {
|
||||||
r = rs[j]; cb = [];
|
r = rs[j]; cb = [];
|
||||||
var rowIndex = (j+startRow);
|
var rowIndex = (j+startRow),
|
||||||
var visible = rowIndex >= vr.first && rowIndex <= vr.last;
|
visible = rowIndex >= vr.first && rowIndex <= vr.last;
|
||||||
if (visible) {
|
if (visible) {
|
||||||
for (var i = 0; i < colCount; i++) {
|
for (var i = 0; i < colCount; i++) {
|
||||||
c = cs[i];
|
c = cs[i];
|
||||||
p.id = c.id;
|
p.id = c.id;
|
||||||
p.css = i == 0 ? 'x-grid3-cell-first ' : (i == last ? 'x-grid3-cell-last ' : '');
|
p.css = i === 0 ? 'x-grid3-cell-first ' : (i == last ? 'x-grid3-cell-last ' : '');
|
||||||
p.attr = p.cellAttr = "";
|
p.attr = p.cellAttr = "";
|
||||||
p.value = c.renderer(r.data[c.name], p, r, rowIndex, i, ds);
|
p.value = c.renderer(r.data[c.name], p, r, rowIndex, i, ds);
|
||||||
p.style = c.style;
|
p.style = c.style;
|
||||||
if (p.value == undefined || p.value === "") {
|
if (p.value === undefined || p.value === "") {
|
||||||
p.value = " ";
|
p.value = " ";
|
||||||
}
|
}
|
||||||
if (r.dirty && typeof r.modified[c.name] !== 'undefined') {
|
if (r.dirty && typeof r.modified[c.name] !== 'undefined') {
|
||||||
|
@ -119,7 +128,7 @@ Ext.ux.grid.BufferView = Ext.extend(Ext.grid.GridView, {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
var alt = [];
|
var alt = [];
|
||||||
if(stripe && ((rowIndex+1) % 2 == 0)){
|
if(stripe && ((rowIndex+1) % 2 === 0)){
|
||||||
alt[0] = "x-grid3-row-alt";
|
alt[0] = "x-grid3-row-alt";
|
||||||
}
|
}
|
||||||
if(r.dirty){
|
if(r.dirty){
|
||||||
|
@ -167,15 +176,17 @@ Ext.ux.grid.BufferView = Ext.extend(Ext.grid.GridView, {
|
||||||
|
|
||||||
doUpdate: function(){
|
doUpdate: function(){
|
||||||
if (this.getVisibleRowCount() > 0) {
|
if (this.getVisibleRowCount() > 0) {
|
||||||
var g = this.grid, cm = g.colModel, ds = g.store;
|
var g = this.grid,
|
||||||
var cs = this.getColumnData();
|
cm = g.colModel,
|
||||||
|
ds = g.store,
|
||||||
var vr = this.getVisibleRows();
|
cs = this.getColumnData(),
|
||||||
|
vr = this.getVisibleRows(),
|
||||||
|
row;
|
||||||
for (var i = vr.first; i <= vr.last; i++) {
|
for (var i = vr.first; i <= vr.last; i++) {
|
||||||
// if row is NOT rendered and is visible, render it
|
// if row is NOT rendered and is visible, render it
|
||||||
if(!this.isRowRendered(i)){
|
if(!this.isRowRendered(i) && (row = this.getRow(i))){
|
||||||
var html = this.doRender(cs, [ds.getAt(i)], ds, i, cm.getColumnCount(), g.stripeRows, true);
|
var html = this.doRender(cs, [ds.getAt(i)], ds, i, cm.getColumnCount(), g.stripeRows, true);
|
||||||
this.getRow(i).innerHTML = html;
|
row.innerHTML = html;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
this.clean();
|
this.clean();
|
||||||
|
@ -212,6 +223,20 @@ Ext.ux.grid.BufferView = Ext.extend(Ext.grid.GridView, {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
removeTask: function(name){
|
||||||
|
var task = this[name];
|
||||||
|
if(task && task.cancel){
|
||||||
|
task.cancel();
|
||||||
|
this[name] = null;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
destroy : function(){
|
||||||
|
this.removeTask('cleanTask');
|
||||||
|
this.removeTask('renderTask');
|
||||||
|
Ext.ux.grid.BufferView.superclass.destroy.call(this);
|
||||||
|
},
|
||||||
|
|
||||||
layout: function(){
|
layout: function(){
|
||||||
Ext.ux.grid.BufferView.superclass.layout.call(this);
|
Ext.ux.grid.BufferView.superclass.layout.call(this);
|
||||||
this.update();
|
this.update();
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
/*!
|
/*!
|
||||||
* Ext JS Library 3.1.0
|
* Ext JS Library 3.4.0
|
||||||
* Copyright(c) 2006-2009 Ext JS, LLC
|
* Copyright(c) 2006-2011 Sencha Inc.
|
||||||
* licensing@extjs.com
|
* licensing@sencha.com
|
||||||
* http://www.extjs.com/license
|
* http://www.sencha.com/license
|
||||||
*/
|
*/
|
||||||
Ext.ns('Ext.ux.tree');
|
Ext.ns('Ext.ux.tree');
|
||||||
|
|
||||||
|
@ -42,14 +42,6 @@ Ext.ux.tree.TreeGrid = Ext.extend(Ext.tree.TreePanel, {
|
||||||
}else if(Ext.isObject(l) && !l.load){
|
}else if(Ext.isObject(l) && !l.load){
|
||||||
l = new Ext.ux.tree.TreeGridLoader(l);
|
l = new Ext.ux.tree.TreeGridLoader(l);
|
||||||
}
|
}
|
||||||
else if(l) {
|
|
||||||
l.createNode = function(attr) {
|
|
||||||
if (!attr.uiProvider) {
|
|
||||||
attr.uiProvider = Ext.ux.tree.TreeGridNodeUI;
|
|
||||||
}
|
|
||||||
return Ext.tree.TreeLoader.prototype.createNode.call(this, attr);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
this.loader = l;
|
this.loader = l;
|
||||||
|
|
||||||
Ext.ux.tree.TreeGrid.superclass.initComponent.call(this);
|
Ext.ux.tree.TreeGrid.superclass.initComponent.call(this);
|
||||||
|
@ -71,7 +63,7 @@ Ext.ux.tree.TreeGrid = Ext.extend(Ext.tree.TreePanel, {
|
||||||
'<div class="x-grid3-header">',
|
'<div class="x-grid3-header">',
|
||||||
'<div class="x-treegrid-header-inner">',
|
'<div class="x-treegrid-header-inner">',
|
||||||
'<div class="x-grid3-header-offset">',
|
'<div class="x-grid3-header-offset">',
|
||||||
'<table cellspacing="0" cellpadding="0" border="0"><colgroup><tpl for="columns"><col /></tpl></colgroup>',
|
'<table style="table-layout: fixed;" cellspacing="0" cellpadding="0" border="0"><colgroup><tpl for="columns"><col /></tpl></colgroup>',
|
||||||
'<thead><tr class="x-grid3-hd-row">',
|
'<thead><tr class="x-grid3-hd-row">',
|
||||||
'<tpl for="columns">',
|
'<tpl for="columns">',
|
||||||
'<td class="x-grid3-hd x-grid3-cell x-treegrid-hd" style="text-align: {align};" id="', this.id, '-xlhd-{#}">',
|
'<td class="x-grid3-hd x-grid3-cell x-treegrid-hd" style="text-align: {align};" id="', this.id, '-xlhd-{#}">',
|
||||||
|
@ -81,7 +73,7 @@ Ext.ux.tree.TreeGrid = Ext.extend(Ext.tree.TreePanel, {
|
||||||
'</div>',
|
'</div>',
|
||||||
'</td></tpl>',
|
'</td></tpl>',
|
||||||
'</tr></thead>',
|
'</tr></thead>',
|
||||||
'</div></table>',
|
'</table>',
|
||||||
'</div></div>',
|
'</div></div>',
|
||||||
'</div>',
|
'</div>',
|
||||||
'<div class="x-treegrid-root-node">',
|
'<div class="x-treegrid-root-node">',
|
||||||
|
@ -140,7 +132,7 @@ Ext.ux.tree.TreeGrid = Ext.extend(Ext.tree.TreePanel, {
|
||||||
this.colgroupTpl.insertFirst(this.innerCt, {columns: this.columns});
|
this.colgroupTpl.insertFirst(this.innerCt, {columns: this.columns});
|
||||||
|
|
||||||
if(this.hideHeaders){
|
if(this.hideHeaders){
|
||||||
this.header.dom.style.display = 'none';
|
this.el.child('.x-grid3-header').setDisplayed('none');
|
||||||
}
|
}
|
||||||
else if(this.enableHdMenu !== false){
|
else if(this.enableHdMenu !== false){
|
||||||
this.hmenu = new Ext.menu.Menu({id: this.id + '-hctx'});
|
this.hmenu = new Ext.menu.Menu({id: this.id + '-hctx'});
|
||||||
|
@ -172,6 +164,17 @@ Ext.ux.tree.TreeGrid = Ext.extend(Ext.tree.TreePanel, {
|
||||||
return node;
|
return node;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
clearInnerCt : function(){
|
||||||
|
if(Ext.isIE){
|
||||||
|
var dom = this.innerCt.dom;
|
||||||
|
while(dom.firstChild){
|
||||||
|
dom.removeChild(dom.firstChild);
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
Ext.ux.tree.TreeGrid.superclass.clearInnerCt.call(this);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
initEvents : function() {
|
initEvents : function() {
|
||||||
Ext.ux.tree.TreeGrid.superclass.initEvents.apply(this, arguments);
|
Ext.ux.tree.TreeGrid.superclass.initEvents.apply(this, arguments);
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
/*!
|
/*!
|
||||||
* Ext JS Library 3.1.0
|
* Ext JS Library 3.4.0
|
||||||
* Copyright(c) 2006-2009 Ext JS, LLC
|
* Copyright(c) 2006-2011 Sencha Inc.
|
||||||
* licensing@extjs.com
|
* licensing@sencha.com
|
||||||
* http://www.extjs.com/license
|
* http://www.sencha.com/license
|
||||||
*/
|
*/
|
||||||
/**
|
/**
|
||||||
* @class Ext.tree.ColumnResizer
|
* @class Ext.tree.ColumnResizer
|
||||||
|
@ -80,6 +80,7 @@ Ext.tree.ColumnResizer = Ext.extend(Ext.util.Observable, {
|
||||||
},
|
},
|
||||||
|
|
||||||
onStart : function(e){
|
onStart : function(e){
|
||||||
|
this.dragHeadersDisabled = this.tree.headersDisabled;
|
||||||
this.tree.headersDisabled = true;
|
this.tree.headersDisabled = true;
|
||||||
this.proxy = this.tree.body.createChild({cls:'x-treegrid-resizer'});
|
this.proxy = this.tree.body.createChild({cls:'x-treegrid-resizer'});
|
||||||
this.proxy.setHeight(this.tree.body.getHeight());
|
this.proxy.setHeight(this.tree.body.getHeight());
|
||||||
|
@ -102,7 +103,8 @@ Ext.tree.ColumnResizer = Ext.extend(Ext.util.Observable, {
|
||||||
|
|
||||||
onEnd : function(e){
|
onEnd : function(e){
|
||||||
var nw = this.proxy.getWidth(),
|
var nw = this.proxy.getWidth(),
|
||||||
tree = this.tree;
|
tree = this.tree,
|
||||||
|
disabled = this.dragHeadersDisabled;
|
||||||
|
|
||||||
this.proxy.remove();
|
this.proxy.remove();
|
||||||
delete this.dragHd;
|
delete this.dragHd;
|
||||||
|
@ -111,7 +113,7 @@ Ext.tree.ColumnResizer = Ext.extend(Ext.util.Observable, {
|
||||||
tree.updateColumnWidths();
|
tree.updateColumnWidths();
|
||||||
|
|
||||||
setTimeout(function(){
|
setTimeout(function(){
|
||||||
tree.headersDisabled = false;
|
tree.headersDisabled = disabled;
|
||||||
}, 100);
|
}, 100);
|
||||||
}
|
}
|
||||||
});
|
});
|
|
@ -1,34 +1,28 @@
|
||||||
/*!
|
/*!
|
||||||
* Ext JS Library 3.1.0
|
* Ext JS Library 3.4.0
|
||||||
* Copyright(c) 2006-2009 Ext JS, LLC
|
* Copyright(c) 2006-2011 Sencha Inc.
|
||||||
* licensing@extjs.com
|
* licensing@sencha.com
|
||||||
* http://www.extjs.com/license
|
* http://www.sencha.com/license
|
||||||
*/
|
*/
|
||||||
(function() {
|
(function() {
|
||||||
Ext.override(Ext.list.Column, {
|
Ext.override(Ext.list.Column, {
|
||||||
init : function() {
|
init : function() {
|
||||||
if(!this.type){
|
var types = Ext.data.Types,
|
||||||
this.type = "auto";
|
st = this.sortType;
|
||||||
|
|
||||||
|
if(this.type){
|
||||||
|
if(Ext.isString(this.type)){
|
||||||
|
this.type = Ext.data.Types[this.type.toUpperCase()] || types.AUTO;
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
this.type = types.AUTO;
|
||||||
}
|
}
|
||||||
|
|
||||||
var st = Ext.data.SortTypes;
|
|
||||||
// named sortTypes are supported, here we look them up
|
// named sortTypes are supported, here we look them up
|
||||||
if(typeof this.sortType == "string"){
|
if(Ext.isString(st)){
|
||||||
this.sortType = st[this.sortType];
|
this.sortType = Ext.data.SortTypes[st];
|
||||||
}
|
}else if(Ext.isEmpty(st)){
|
||||||
|
this.sortType = this.type.sortType;
|
||||||
// set default sortType for strings and dates
|
|
||||||
if(!this.sortType){
|
|
||||||
switch(this.type){
|
|
||||||
case "string":
|
|
||||||
this.sortType = st.asUCString;
|
|
||||||
break;
|
|
||||||
case "date":
|
|
||||||
this.sortType = st.asDate;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
this.sortType = st.none;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
/*!
|
/*!
|
||||||
* Ext JS Library 3.1.0
|
* Ext JS Library 3.4.0
|
||||||
* Copyright(c) 2006-2009 Ext JS, LLC
|
* Copyright(c) 2006-2011 Sencha Inc.
|
||||||
* licensing@extjs.com
|
* licensing@sencha.com
|
||||||
* http://www.extjs.com/license
|
* http://www.sencha.com/license
|
||||||
*/
|
*/
|
||||||
/**
|
/**
|
||||||
* @class Ext.ux.tree.TreeGridLoader
|
* @class Ext.ux.tree.TreeGridLoader
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
/*!
|
/*!
|
||||||
* Ext JS Library 3.1.0
|
* Ext JS Library 3.4.0
|
||||||
* Copyright(c) 2006-2009 Ext JS, LLC
|
* Copyright(c) 2006-2011 Sencha Inc.
|
||||||
* licensing@extjs.com
|
* licensing@sencha.com
|
||||||
* http://www.extjs.com/license
|
* http://www.sencha.com/license
|
||||||
*/
|
*/
|
||||||
/**
|
/**
|
||||||
* @class Ext.ux.tree.TreeGridNodeUI
|
* @class Ext.ux.tree.TreeGridNodeUI
|
||||||
|
@ -21,11 +21,11 @@ Ext.ux.tree.TreeGridNodeUI = Ext.extend(Ext.tree.TreeNodeUI, {
|
||||||
|
|
||||||
buf = [
|
buf = [
|
||||||
'<tbody class="x-tree-node">',
|
'<tbody class="x-tree-node">',
|
||||||
'<tr ext:tree-node-id="', n.id ,'" class="x-tree-node-el ', a.cls, '">',
|
'<tr ext:tree-node-id="', n.id ,'" class="x-tree-node-el x-tree-node-leaf ', a.cls, '">',
|
||||||
'<td class="x-treegrid-col">',
|
'<td class="x-treegrid-col">',
|
||||||
'<span class="x-tree-node-indent">', this.indentMarkup, "</span>",
|
'<span class="x-tree-node-indent">', this.indentMarkup, "</span>",
|
||||||
'<img src="', this.emptyIcon, '" class="x-tree-ec-icon x-tree-elbow">',
|
'<img src="', this.emptyIcon, '" class="x-tree-ec-icon x-tree-elbow" />',
|
||||||
'<img src="', a.icon || this.emptyIcon, '" class="x-tree-node-icon', (a.icon ? " x-tree-node-inline-icon" : ""), (a.iconCls ? " "+a.iconCls : ""), '" unselectable="on">',
|
'<img src="', a.icon || this.emptyIcon, '" class="x-tree-node-icon', (a.icon ? " x-tree-node-inline-icon" : ""), (a.iconCls ? " "+a.iconCls : ""), '" unselectable="on" />',
|
||||||
'<a hidefocus="on" class="x-tree-node-anchor" href="', a.href ? a.href : '#', '" tabIndex="1" ',
|
'<a hidefocus="on" class="x-tree-node-anchor" href="', a.href ? a.href : '#', '" tabIndex="1" ',
|
||||||
a.hrefTarget ? ' target="'+a.hrefTarget+'"' : '', '>',
|
a.hrefTarget ? ' target="'+a.hrefTarget+'"' : '', '>',
|
||||||
'<span unselectable="on">', (c.tpl ? c.tpl.apply(a) : a[c.dataIndex] || c.text), '</span></a>',
|
'<span unselectable="on">', (c.tpl ? c.tpl.apply(a) : a[c.dataIndex] || c.text), '</span></a>',
|
||||||
|
|
|
@ -1,14 +1,30 @@
|
||||||
/*!
|
/*!
|
||||||
* Ext JS Library 3.1.0
|
* Ext JS Library 3.4.0
|
||||||
* Copyright(c) 2006-2009 Ext JS, LLC
|
* Copyright(c) 2006-2011 Sencha Inc.
|
||||||
* licensing@extjs.com
|
* licensing@sencha.com
|
||||||
* http://www.extjs.com/license
|
* http://www.sencha.com/license
|
||||||
*/
|
*/
|
||||||
Ext.ns('Ext.ux.tree');
|
Ext.ns('Ext.ux.tree');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @class Ext.ux.tree.TreeGridSorter
|
* @class Ext.ux.tree.TreeGridSorter
|
||||||
* @extends Ext.tree.TreeSorter
|
* @extends Ext.tree.TreeSorter
|
||||||
|
* Provides sorting of nodes in a {@link Ext.ux.tree.TreeGrid}. The TreeGridSorter automatically monitors events on the
|
||||||
|
* associated TreeGrid that might affect the tree's sort order (beforechildrenrendered, append, insert and textchange).
|
||||||
|
* Example usage:<br />
|
||||||
|
* <pre><code>
|
||||||
|
new Ext.ux.tree.TreeGridSorter(myTreeGrid, {
|
||||||
|
folderSort: true,
|
||||||
|
dir: "desc",
|
||||||
|
sortType: function(node) {
|
||||||
|
// sort by a custom, typed attribute:
|
||||||
|
return parseInt(node.id, 10);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
</code></pre>
|
||||||
|
* @constructor
|
||||||
|
* @param {TreeGrid} tree
|
||||||
|
* @param {Object} config
|
||||||
*/
|
*/
|
||||||
Ext.ux.tree.TreeGridSorter = Ext.extend(Ext.tree.TreeSorter, {
|
Ext.ux.tree.TreeGridSorter = Ext.extend(Ext.tree.TreeSorter, {
|
||||||
/**
|
/**
|
||||||
|
@ -38,30 +54,34 @@ Ext.ux.tree.TreeGridSorter = Ext.extend(Ext.tree.TreeSorter, {
|
||||||
tree.on('headerclick', this.onHeaderClick, this);
|
tree.on('headerclick', this.onHeaderClick, this);
|
||||||
tree.ddAppendOnly = true;
|
tree.ddAppendOnly = true;
|
||||||
|
|
||||||
me = this;
|
var me = this;
|
||||||
this.defaultSortFn = function(n1, n2){
|
this.defaultSortFn = function(n1, n2){
|
||||||
|
|
||||||
var dsc = me.dir && me.dir.toLowerCase() == 'desc';
|
var desc = me.dir && me.dir.toLowerCase() == 'desc',
|
||||||
var p = me.property || 'text';
|
prop = me.property || 'text',
|
||||||
var sortType = me.sortType;
|
sortType = me.sortType,
|
||||||
var fs = me.folderSort;
|
caseSensitive = me.caseSensitive === true,
|
||||||
var cs = me.caseSensitive === true;
|
leafAttr = me.leafAttr || 'leaf',
|
||||||
var leafAttr = me.leafAttr || 'leaf';
|
attr1 = n1.attributes,
|
||||||
|
attr2 = n2.attributes;
|
||||||
|
|
||||||
if(fs){
|
if(me.folderSort){
|
||||||
if(n1.attributes[leafAttr] && !n2.attributes[leafAttr]){
|
if(attr1[leafAttr] && !attr2[leafAttr]){
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
if(!n1.attributes[leafAttr] && n2.attributes[leafAttr]){
|
if(!attr1[leafAttr] && attr2[leafAttr]){
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
var v1 = sortType ? sortType(n1.attributes[p]) : (cs ? n1.attributes[p] : n1.attributes[p].toUpperCase());
|
var prop1 = attr1[prop],
|
||||||
var v2 = sortType ? sortType(n2.attributes[p]) : (cs ? n2.attributes[p] : n2.attributes[p].toUpperCase());
|
prop2 = attr2[prop],
|
||||||
|
v1 = sortType ? sortType(prop1) : (caseSensitive ? prop1 : prop1.toUpperCase());
|
||||||
|
v2 = sortType ? sortType(prop2) : (caseSensitive ? prop2 : prop2.toUpperCase());
|
||||||
|
|
||||||
if(v1 < v2){
|
if(v1 < v2){
|
||||||
return dsc ? +1 : -1;
|
return desc ? +1 : -1;
|
||||||
}else if(v1 > v2){
|
}else if(v1 > v2){
|
||||||
return dsc ? -1 : +1;
|
return desc ? -1 : +1;
|
||||||
}else{
|
}else{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -72,11 +92,12 @@ Ext.ux.tree.TreeGridSorter = Ext.extend(Ext.tree.TreeSorter, {
|
||||||
},
|
},
|
||||||
|
|
||||||
onAfterTreeRender : function() {
|
onAfterTreeRender : function() {
|
||||||
var hmenu = this.tree.hmenu;
|
if(this.tree.hmenu){
|
||||||
hmenu.insert(0,
|
this.tree.hmenu.insert(0,
|
||||||
{itemId:'asc', text: this.sortAscText, cls: 'xg-hmenu-sort-asc'},
|
{itemId:'asc', text: this.sortAscText, cls: 'xg-hmenu-sort-asc'},
|
||||||
{itemId:'desc', text: this.sortDescText, cls: 'xg-hmenu-sort-desc'}
|
{itemId:'desc', text: this.sortDescText, cls: 'xg-hmenu-sort-desc'}
|
||||||
);
|
);
|
||||||
|
}
|
||||||
this.updateSortIcon(0, 'asc');
|
this.updateSortIcon(0, 'asc');
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -109,8 +130,8 @@ Ext.ux.tree.TreeGridSorter = Ext.extend(Ext.tree.TreeSorter, {
|
||||||
|
|
||||||
// private
|
// private
|
||||||
updateSortIcon : function(col, dir){
|
updateSortIcon : function(col, dir){
|
||||||
var sc = this.sortClasses;
|
var sc = this.sortClasses,
|
||||||
var hds = this.tree.innerHd.select('td').removeClass(sc);
|
hds = this.tree.innerHd.select('td').removeClass(sc);
|
||||||
hds.item(col).addClass(sc[dir == 'desc' ? 1 : 0]);
|
hds.item(col).addClass(sc[dir == 'desc' ? 1 : 0]);
|
||||||
}
|
}
|
||||||
});
|
});
|
Loading…
Add table
Add a link
Reference in a new issue