X-Git-Url: http://git.ithinksw.org/extjs.git/blobdiff_plain/0494b8d9b9bb03ab6c22b34dae81261e3cd7e3e6..7a654f8d43fdb43d78b63d90528bed6e86b608cc:/src/view/TableChunker.js
diff --git a/src/view/TableChunker.js b/src/view/TableChunker.js
new file mode 100644
index 00000000..10f5cec9
--- /dev/null
+++ b/src/view/TableChunker.js
@@ -0,0 +1,138 @@
+/**
+ * @class Ext.view.TableChunker
+ *
+ * Produces optimized XTemplates for chunks of tables to be
+ * used in grids, trees and other table based widgets.
+ *
+ * @singleton
+ */
+Ext.define('Ext.view.TableChunker', {
+ singleton: true,
+ requires: ['Ext.XTemplate'],
+ metaTableTpl: [
+ '{[this.openTableWrap()]}',
+ '
',
+ '',
+ '',
+ '',
+ ' | ',
+ '',
+ '
',
+ '{[this.openRows()]}',
+ '{row}',
+ '',
+ '{[this.embedFeature(values, parent, xindex, xcount)]}',
+ '',
+ '{[this.closeRows()]}',
+ '',
+ '
',
+ '{[this.closeTableWrap()]}'
+ ],
+
+ constructor: function() {
+ Ext.XTemplate.prototype.recurse = function(values, reference) {
+ return this.apply(reference ? values[reference] : values);
+ };
+ },
+
+ embedFeature: function(values, parent, x, xcount) {
+ var tpl = '';
+ if (!values.disabled) {
+ tpl = values.getFeatureTpl(values, parent, x, xcount);
+ }
+ return tpl;
+ },
+
+ embedFullWidth: function() {
+ return 'style="width: {fullWidth}px;"';
+ },
+
+ openRows: function() {
+ return '';
+ },
+
+ closeRows: function() {
+ return '';
+ },
+
+ metaRowTpl: [
+ '',
+ '',
+ '{{id}} | ',
+ '',
+ '
'
+ ],
+
+ firstOrLastCls: function(xindex, xcount) {
+ var cssCls = '';
+ if (xindex === 1) {
+ cssCls = Ext.baseCSSPrefix + 'grid-cell-first';
+ } else if (xindex === xcount) {
+ cssCls = Ext.baseCSSPrefix + 'grid-cell-last';
+ }
+ return cssCls;
+ },
+
+ embedRowCls: function() {
+ return '{rowCls}';
+ },
+
+ embedRowAttr: function() {
+ return '{rowAttr}';
+ },
+
+ openTableWrap: function() {
+ return '';
+ },
+
+ closeTableWrap: function() {
+ return '';
+ },
+
+ getTableTpl: function(cfg, textOnly) {
+ var tpl,
+ tableTplMemberFns = {
+ openRows: this.openRows,
+ closeRows: this.closeRows,
+ embedFeature: this.embedFeature,
+ embedFullWidth: this.embedFullWidth,
+ openTableWrap: this.openTableWrap,
+ closeTableWrap: this.closeTableWrap
+ },
+ tplMemberFns = {},
+ features = cfg.features || [],
+ ln = features.length,
+ i = 0,
+ memberFns = {
+ embedRowCls: this.embedRowCls,
+ embedRowAttr: this.embedRowAttr,
+ firstOrLastCls: this.firstOrLastCls
+ },
+ // copy the default
+ metaRowTpl = Array.prototype.slice.call(this.metaRowTpl, 0),
+ metaTableTpl;
+
+ for (; i < ln; i++) {
+ if (!features[i].disabled) {
+ features[i].mutateMetaRowTpl(metaRowTpl);
+ Ext.apply(memberFns, features[i].getMetaRowTplFragments());
+ Ext.apply(tplMemberFns, features[i].getFragmentTpl());
+ Ext.apply(tableTplMemberFns, features[i].getTableFragments());
+ }
+ }
+
+ metaRowTpl = Ext.create('Ext.XTemplate', metaRowTpl.join(''), memberFns);
+ cfg.row = metaRowTpl.applyTemplate(cfg);
+
+ metaTableTpl = Ext.create('Ext.XTemplate', this.metaTableTpl.join(''), tableTplMemberFns);
+
+ tpl = metaTableTpl.applyTemplate(cfg);
+
+ // TODO: Investigate eliminating.
+ if (!textOnly) {
+ tpl = Ext.create('Ext.XTemplate', tpl, tplMemberFns);
+ }
+ return tpl;
+
+ }
+});