mirror of
https://git.deluge-torrent.org/deluge
synced 2025-08-08 09:28:41 +00:00
Update extensions to Ext JS 3.4.0
This commit is contained in:
parent
e9239be691
commit
abc82c1439
12 changed files with 1277 additions and 1183 deletions
File diff suppressed because it is too large
Load diff
File diff suppressed because one or more lines are too long
|
@ -1,8 +1,8 @@
|
|||
/*!
|
||||
* Ext JS Library 3.1.0
|
||||
* Copyright(c) 2006-2009 Ext JS, LLC
|
||||
* licensing@extjs.com
|
||||
* http://www.extjs.com/license
|
||||
* Ext JS Library 3.4.0
|
||||
* Copyright(c) 2006-2011 Sencha Inc.
|
||||
* licensing@sencha.com
|
||||
* http://www.sencha.com/license
|
||||
*/
|
||||
/**
|
||||
* @class Ext.ux.Spinner
|
||||
|
@ -89,12 +89,14 @@ Ext.ux.Spinner = Ext.extend(Ext.util.Observable, {
|
|||
|
||||
doEnable: function(){
|
||||
if (this.wrap) {
|
||||
this.disabled = false;
|
||||
this.wrap.removeClass(this.field.disabledClass);
|
||||
}
|
||||
},
|
||||
|
||||
doDisable: function(){
|
||||
if (this.wrap) {
|
||||
this.disabled = true;
|
||||
this.wrap.addClass(this.field.disabledClass);
|
||||
this.el.removeClass(this.field.disabledClass);
|
||||
}
|
||||
|
@ -431,6 +433,9 @@ Ext.ux.Spinner = Ext.extend(Ext.util.Observable, {
|
|||
if (this.repeater) {
|
||||
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
|
||||
* Copyright(c) 2006-2009 Ext JS, LLC
|
||||
* licensing@extjs.com
|
||||
* http://www.extjs.com/license
|
||||
* Ext JS Library 3.4.0
|
||||
* Copyright(c) 2006-2011 Sencha Inc.
|
||||
* licensing@sencha.com
|
||||
* http://www.sencha.com/license
|
||||
*/
|
||||
Ext.ns('Ext.ux.form');
|
||||
|
||||
|
@ -119,9 +119,11 @@ Ext.ux.form.FileUploadField = Ext.extend(Ext.form.TextField, {
|
|||
},
|
||||
|
||||
reset : function(){
|
||||
this.fileInput.remove();
|
||||
this.createFileInput();
|
||||
this.bindListeners();
|
||||
if (this.rendered) {
|
||||
this.fileInput.remove();
|
||||
this.createFileInput();
|
||||
this.bindListeners();
|
||||
}
|
||||
Ext.ux.form.FileUploadField.superclass.reset.call(this);
|
||||
},
|
||||
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
/*!
|
||||
* Ext JS Library 3.1.0
|
||||
* Copyright(c) 2006-2009 Ext JS, LLC
|
||||
* licensing@extjs.com
|
||||
* http://www.extjs.com/license
|
||||
* Ext JS Library 3.4.0
|
||||
* Copyright(c) 2006-2011 Sencha Inc.
|
||||
* licensing@sencha.com
|
||||
* http://www.sencha.com/license
|
||||
*/
|
||||
Ext.ns('Ext.ux.form');
|
||||
|
||||
|
@ -20,17 +20,17 @@ Ext.ux.form.SpinnerField = Ext.extend(Ext.form.NumberField, {
|
|||
adjustSize: Ext.BoxComponent.prototype.adjustSize,
|
||||
|
||||
constructor: function(config) {
|
||||
var spinnerConfig = Ext.copyTo({}, config, 'incrementValue,alternateIncrementValue,accelerate,defaultValue,triggerClass,splitterClass');
|
||||
var spinnerConfig = Ext.copyTo({}, config, 'incrementValue,alternateIncrementValue,accelerate,defaultValue,triggerClass,splitterClass');
|
||||
|
||||
var spl = this.spinner = new Ext.ux.Spinner(spinnerConfig);
|
||||
var spl = this.spinner = new Ext.ux.Spinner(spinnerConfig);
|
||||
|
||||
var plugins = config.plugins
|
||||
? (Ext.isArray(config.plugins)
|
||||
? config.plugins.push(spl)
|
||||
: [config.plugins, spl])
|
||||
: spl;
|
||||
var plugins = config.plugins
|
||||
? (Ext.isArray(config.plugins)
|
||||
? config.plugins.push(spl)
|
||||
: [config.plugins, spl])
|
||||
: spl;
|
||||
|
||||
Ext.ux.form.SpinnerField.superclass.constructor.call(this, Ext.apply(config, {plugins: plugins}));
|
||||
Ext.ux.form.SpinnerField.superclass.constructor.call(this, Ext.apply(config, {plugins: plugins}));
|
||||
},
|
||||
|
||||
// private
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
/*!
|
||||
* Ext JS Library 3.1.0
|
||||
* Copyright(c) 2006-2009 Ext JS, LLC
|
||||
* licensing@extjs.com
|
||||
* http://www.extjs.com/license
|
||||
* Ext JS Library 3.4.0
|
||||
* Copyright(c) 2006-2011 Sencha Inc.
|
||||
* licensing@sencha.com
|
||||
* http://www.sencha.com/license
|
||||
*/
|
||||
Ext.ns('Ext.ux.grid');
|
||||
|
||||
|
@ -50,14 +50,14 @@ Ext.ux.grid.BufferView = Ext.extend(Ext.grid.GridView, {
|
|||
Ext.ux.grid.BufferView.superclass.initTemplates.call(this);
|
||||
var ts = this.templates;
|
||||
// empty div to act as a place holder for a row
|
||||
ts.rowHolder = new Ext.Template(
|
||||
'<div class="x-grid3-row {alt}" style="{tstyle}"></div>'
|
||||
ts.rowHolder = new Ext.Template(
|
||||
'<div class="x-grid3-row {alt}" style="{tstyle}"></div>'
|
||||
);
|
||||
ts.rowHolder.disableFormats = true;
|
||||
ts.rowHolder.compile();
|
||||
|
||||
ts.rowBody = new Ext.Template(
|
||||
'<table class="x-grid3-row-table" border="0" cellspacing="0" cellpadding="0" style="{tstyle}">',
|
||||
'<table class="x-grid3-row-table" border="0" cellspacing="0" cellpadding="0" style="{tstyle}">',
|
||||
'<tbody><tr>{cells}</tr>',
|
||||
(this.enableRowBody ? '<tr class="x-grid3-row-body-tr" style="{bodyStyle}"><td colspan="{cols}" class="x-grid3-body-cell" tabIndex="0" hidefocus="on"><div class="x-grid3-row-body">{body}</div></td></tr>' : ''),
|
||||
'</tbody></table>'
|
||||
|
@ -75,15 +75,15 @@ Ext.ux.grid.BufferView = Ext.extend(Ext.grid.GridView, {
|
|||
},
|
||||
|
||||
getVisibleRowCount : function(){
|
||||
var rh = this.getCalculatedRowHeight();
|
||||
var visibleHeight = this.scroller.dom.clientHeight;
|
||||
var rh = this.getCalculatedRowHeight(),
|
||||
visibleHeight = this.scroller.dom.clientHeight;
|
||||
return (visibleHeight < 1) ? 0 : Math.ceil(visibleHeight / rh);
|
||||
},
|
||||
|
||||
getVisibleRows: function(){
|
||||
var count = this.getVisibleRowCount();
|
||||
var sc = this.scroller.dom.scrollTop;
|
||||
var start = (sc == 0 ? 0 : Math.floor(sc/this.getCalculatedRowHeight())-1);
|
||||
var count = this.getVisibleRowCount(),
|
||||
sc = this.scroller.dom.scrollTop,
|
||||
start = (sc === 0 ? 0 : Math.floor(sc/this.getCalculatedRowHeight())-1);
|
||||
return {
|
||||
first: Math.max(start, 0),
|
||||
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){
|
||||
var ts = this.templates, ct = ts.cell, rt = ts.row, rb = ts.rowBody, last = colCount-1;
|
||||
var rh = this.getStyleRowHeight();
|
||||
var vr = this.getVisibleRows();
|
||||
var tstyle = 'width:'+this.getTotalWidth()+';height:'+rh+'px;';
|
||||
// buffers
|
||||
var buf = [], cb, c, p = {}, rp = {tstyle: tstyle}, r;
|
||||
var ts = this.templates,
|
||||
ct = ts.cell,
|
||||
rt = ts.row,
|
||||
rb = ts.rowBody,
|
||||
last = colCount-1,
|
||||
rh = this.getStyleRowHeight(),
|
||||
vr = this.getVisibleRows(),
|
||||
tstyle = 'width:'+this.getTotalWidth()+';height:'+rh+'px;',
|
||||
// buffers
|
||||
buf = [],
|
||||
cb,
|
||||
c,
|
||||
p = {},
|
||||
rp = {tstyle: tstyle},
|
||||
r;
|
||||
for (var j = 0, len = rs.length; j < len; j++) {
|
||||
r = rs[j]; cb = [];
|
||||
var rowIndex = (j+startRow);
|
||||
var visible = rowIndex >= vr.first && rowIndex <= vr.last;
|
||||
var rowIndex = (j+startRow),
|
||||
visible = rowIndex >= vr.first && rowIndex <= vr.last;
|
||||
if (visible) {
|
||||
for (var i = 0; i < colCount; i++) {
|
||||
c = cs[i];
|
||||
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.value = c.renderer(r.data[c.name], p, r, rowIndex, i, ds);
|
||||
p.style = c.style;
|
||||
if (p.value == undefined || p.value === "") {
|
||||
if (p.value === undefined || p.value === "") {
|
||||
p.value = " ";
|
||||
}
|
||||
if (r.dirty && typeof r.modified[c.name] !== 'undefined') {
|
||||
|
@ -119,7 +128,7 @@ Ext.ux.grid.BufferView = Ext.extend(Ext.grid.GridView, {
|
|||
}
|
||||
}
|
||||
var alt = [];
|
||||
if(stripe && ((rowIndex+1) % 2 == 0)){
|
||||
if(stripe && ((rowIndex+1) % 2 === 0)){
|
||||
alt[0] = "x-grid3-row-alt";
|
||||
}
|
||||
if(r.dirty){
|
||||
|
@ -159,23 +168,25 @@ Ext.ux.grid.BufferView = Ext.extend(Ext.grid.GridView, {
|
|||
},
|
||||
|
||||
onRemove : function(ds, record, index, isUpdate){
|
||||
Ext.ux.grid.BufferView.superclass.onRemove.apply(this, arguments);
|
||||
if(isUpdate !== true){
|
||||
this.update();
|
||||
}
|
||||
Ext.ux.grid.BufferView.superclass.onRemove.apply(this, arguments);
|
||||
if(isUpdate !== true){
|
||||
this.update();
|
||||
}
|
||||
},
|
||||
|
||||
doUpdate: function(){
|
||||
if (this.getVisibleRowCount() > 0) {
|
||||
var g = this.grid, cm = g.colModel, ds = g.store;
|
||||
var cs = this.getColumnData();
|
||||
|
||||
var vr = this.getVisibleRows();
|
||||
var g = this.grid,
|
||||
cm = g.colModel,
|
||||
ds = g.store,
|
||||
cs = this.getColumnData(),
|
||||
vr = this.getVisibleRows(),
|
||||
row;
|
||||
for (var i = vr.first; i <= vr.last; i++) {
|
||||
// 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);
|
||||
this.getRow(i).innerHTML = html;
|
||||
row.innerHTML = html;
|
||||
}
|
||||
}
|
||||
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(){
|
||||
Ext.ux.grid.BufferView.superclass.layout.call(this);
|
||||
this.update();
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
/*!
|
||||
* Ext JS Library 3.1.0
|
||||
* Copyright(c) 2006-2009 Ext JS, LLC
|
||||
* licensing@extjs.com
|
||||
* http://www.extjs.com/license
|
||||
* Ext JS Library 3.4.0
|
||||
* Copyright(c) 2006-2011 Sencha Inc.
|
||||
* licensing@sencha.com
|
||||
* http://www.sencha.com/license
|
||||
*/
|
||||
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){
|
||||
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;
|
||||
|
||||
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-treegrid-header-inner">',
|
||||
'<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">',
|
||||
'<tpl for="columns">',
|
||||
'<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>',
|
||||
'</td></tpl>',
|
||||
'</tr></thead>',
|
||||
'</div></table>',
|
||||
'</table>',
|
||||
'</div></div>',
|
||||
'</div>',
|
||||
'<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});
|
||||
|
||||
if(this.hideHeaders){
|
||||
this.header.dom.style.display = 'none';
|
||||
this.el.child('.x-grid3-header').setDisplayed('none');
|
||||
}
|
||||
else if(this.enableHdMenu !== false){
|
||||
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;
|
||||
},
|
||||
|
||||
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() {
|
||||
Ext.ux.tree.TreeGrid.superclass.initEvents.apply(this, arguments);
|
||||
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
/*!
|
||||
* Ext JS Library 3.1.0
|
||||
* Copyright(c) 2006-2009 Ext JS, LLC
|
||||
* licensing@extjs.com
|
||||
* http://www.extjs.com/license
|
||||
* Ext JS Library 3.4.0
|
||||
* Copyright(c) 2006-2011 Sencha Inc.
|
||||
* licensing@sencha.com
|
||||
* http://www.sencha.com/license
|
||||
*/
|
||||
/**
|
||||
* @class Ext.tree.ColumnResizer
|
||||
|
@ -80,6 +80,7 @@ Ext.tree.ColumnResizer = Ext.extend(Ext.util.Observable, {
|
|||
},
|
||||
|
||||
onStart : function(e){
|
||||
this.dragHeadersDisabled = this.tree.headersDisabled;
|
||||
this.tree.headersDisabled = true;
|
||||
this.proxy = this.tree.body.createChild({cls:'x-treegrid-resizer'});
|
||||
this.proxy.setHeight(this.tree.body.getHeight());
|
||||
|
@ -102,7 +103,8 @@ Ext.tree.ColumnResizer = Ext.extend(Ext.util.Observable, {
|
|||
|
||||
onEnd : function(e){
|
||||
var nw = this.proxy.getWidth(),
|
||||
tree = this.tree;
|
||||
tree = this.tree,
|
||||
disabled = this.dragHeadersDisabled;
|
||||
|
||||
this.proxy.remove();
|
||||
delete this.dragHd;
|
||||
|
@ -111,7 +113,7 @@ Ext.tree.ColumnResizer = Ext.extend(Ext.util.Observable, {
|
|||
tree.updateColumnWidths();
|
||||
|
||||
setTimeout(function(){
|
||||
tree.headersDisabled = false;
|
||||
tree.headersDisabled = disabled;
|
||||
}, 100);
|
||||
}
|
||||
});
|
|
@ -1,34 +1,28 @@
|
|||
/*!
|
||||
* Ext JS Library 3.1.0
|
||||
* Copyright(c) 2006-2009 Ext JS, LLC
|
||||
* licensing@extjs.com
|
||||
* http://www.extjs.com/license
|
||||
* Ext JS Library 3.4.0
|
||||
* Copyright(c) 2006-2011 Sencha Inc.
|
||||
* licensing@sencha.com
|
||||
* http://www.sencha.com/license
|
||||
*/
|
||||
(function() {
|
||||
Ext.override(Ext.list.Column, {
|
||||
init : function() {
|
||||
if(!this.type){
|
||||
this.type = "auto";
|
||||
}
|
||||
var types = Ext.data.Types,
|
||||
st = this.sortType;
|
||||
|
||||
var st = Ext.data.SortTypes;
|
||||
// named sortTypes are supported, here we look them up
|
||||
if(typeof this.sortType == "string"){
|
||||
this.sortType = st[this.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;
|
||||
if(this.type){
|
||||
if(Ext.isString(this.type)){
|
||||
this.type = Ext.data.Types[this.type.toUpperCase()] || types.AUTO;
|
||||
}
|
||||
}else{
|
||||
this.type = types.AUTO;
|
||||
}
|
||||
|
||||
// named sortTypes are supported, here we look them up
|
||||
if(Ext.isString(st)){
|
||||
this.sortType = Ext.data.SortTypes[st];
|
||||
}else if(Ext.isEmpty(st)){
|
||||
this.sortType = this.type.sortType;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
/*!
|
||||
* Ext JS Library 3.1.0
|
||||
* Copyright(c) 2006-2009 Ext JS, LLC
|
||||
* licensing@extjs.com
|
||||
* http://www.extjs.com/license
|
||||
* Ext JS Library 3.4.0
|
||||
* Copyright(c) 2006-2011 Sencha Inc.
|
||||
* licensing@sencha.com
|
||||
* http://www.sencha.com/license
|
||||
*/
|
||||
/**
|
||||
* @class Ext.ux.tree.TreeGridLoader
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
/*!
|
||||
* Ext JS Library 3.1.0
|
||||
* Copyright(c) 2006-2009 Ext JS, LLC
|
||||
* licensing@extjs.com
|
||||
* http://www.extjs.com/license
|
||||
* Ext JS Library 3.4.0
|
||||
* Copyright(c) 2006-2011 Sencha Inc.
|
||||
* licensing@sencha.com
|
||||
* http://www.sencha.com/license
|
||||
*/
|
||||
/**
|
||||
* @class Ext.ux.tree.TreeGridNodeUI
|
||||
|
@ -21,11 +21,11 @@ Ext.ux.tree.TreeGridNodeUI = Ext.extend(Ext.tree.TreeNodeUI, {
|
|||
|
||||
buf = [
|
||||
'<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">',
|
||||
'<span class="x-tree-node-indent">', this.indentMarkup, "</span>",
|
||||
'<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="', 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" />',
|
||||
'<a hidefocus="on" class="x-tree-node-anchor" href="', a.href ? a.href : '#', '" tabIndex="1" ',
|
||||
a.hrefTarget ? ' target="'+a.hrefTarget+'"' : '', '>',
|
||||
'<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
|
||||
* Copyright(c) 2006-2009 Ext JS, LLC
|
||||
* licensing@extjs.com
|
||||
* http://www.extjs.com/license
|
||||
* Ext JS Library 3.4.0
|
||||
* Copyright(c) 2006-2011 Sencha Inc.
|
||||
* licensing@sencha.com
|
||||
* http://www.sencha.com/license
|
||||
*/
|
||||
Ext.ns('Ext.ux.tree');
|
||||
|
||||
/**
|
||||
* @class Ext.ux.tree.TreeGridSorter
|
||||
* @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, {
|
||||
/**
|
||||
|
@ -38,30 +54,34 @@ Ext.ux.tree.TreeGridSorter = Ext.extend(Ext.tree.TreeSorter, {
|
|||
tree.on('headerclick', this.onHeaderClick, this);
|
||||
tree.ddAppendOnly = true;
|
||||
|
||||
me = this;
|
||||
var me = this;
|
||||
this.defaultSortFn = function(n1, n2){
|
||||
|
||||
var dsc = me.dir && me.dir.toLowerCase() == 'desc';
|
||||
var p = me.property || 'text';
|
||||
var sortType = me.sortType;
|
||||
var fs = me.folderSort;
|
||||
var cs = me.caseSensitive === true;
|
||||
var leafAttr = me.leafAttr || 'leaf';
|
||||
var desc = me.dir && me.dir.toLowerCase() == 'desc',
|
||||
prop = me.property || 'text',
|
||||
sortType = me.sortType,
|
||||
caseSensitive = me.caseSensitive === true,
|
||||
leafAttr = me.leafAttr || 'leaf',
|
||||
attr1 = n1.attributes,
|
||||
attr2 = n2.attributes;
|
||||
|
||||
if(fs){
|
||||
if(n1.attributes[leafAttr] && !n2.attributes[leafAttr]){
|
||||
if(me.folderSort){
|
||||
if(attr1[leafAttr] && !attr2[leafAttr]){
|
||||
return 1;
|
||||
}
|
||||
if(!n1.attributes[leafAttr] && n2.attributes[leafAttr]){
|
||||
if(!attr1[leafAttr] && attr2[leafAttr]){
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
var v1 = sortType ? sortType(n1.attributes[p]) : (cs ? n1.attributes[p] : n1.attributes[p].toUpperCase());
|
||||
var v2 = sortType ? sortType(n2.attributes[p]) : (cs ? n2.attributes[p] : n2.attributes[p].toUpperCase());
|
||||
var prop1 = attr1[prop],
|
||||
prop2 = attr2[prop],
|
||||
v1 = sortType ? sortType(prop1) : (caseSensitive ? prop1 : prop1.toUpperCase());
|
||||
v2 = sortType ? sortType(prop2) : (caseSensitive ? prop2 : prop2.toUpperCase());
|
||||
|
||||
if(v1 < v2){
|
||||
return dsc ? +1 : -1;
|
||||
return desc ? +1 : -1;
|
||||
}else if(v1 > v2){
|
||||
return dsc ? -1 : +1;
|
||||
return desc ? -1 : +1;
|
||||
}else{
|
||||
return 0;
|
||||
}
|
||||
|
@ -72,11 +92,12 @@ Ext.ux.tree.TreeGridSorter = Ext.extend(Ext.tree.TreeSorter, {
|
|||
},
|
||||
|
||||
onAfterTreeRender : function() {
|
||||
var hmenu = this.tree.hmenu;
|
||||
hmenu.insert(0,
|
||||
{itemId:'asc', text: this.sortAscText, cls: 'xg-hmenu-sort-asc'},
|
||||
{itemId:'desc', text: this.sortDescText, cls: 'xg-hmenu-sort-desc'}
|
||||
);
|
||||
if(this.tree.hmenu){
|
||||
this.tree.hmenu.insert(0,
|
||||
{itemId:'asc', text: this.sortAscText, cls: 'xg-hmenu-sort-asc'},
|
||||
{itemId:'desc', text: this.sortDescText, cls: 'xg-hmenu-sort-desc'}
|
||||
);
|
||||
}
|
||||
this.updateSortIcon(0, 'asc');
|
||||
},
|
||||
|
||||
|
@ -109,8 +130,8 @@ Ext.ux.tree.TreeGridSorter = Ext.extend(Ext.tree.TreeSorter, {
|
|||
|
||||
// private
|
||||
updateSortIcon : function(col, dir){
|
||||
var sc = this.sortClasses;
|
||||
var hds = this.tree.innerHd.select('td').removeClass(sc);
|
||||
var sc = this.sortClasses,
|
||||
hds = this.tree.innerHd.select('td').removeClass(sc);
|
||||
hds.item(col).addClass(sc[dir == 'desc' ? 1 : 0]);
|
||||
}
|
||||
});
|
Loading…
Add table
Add a link
Reference in a new issue