From ef68436ac04da078ffdcacd7e1f785473a303d45 Mon Sep 17 00:00:00 2001 From: Giulio Cesare Solaroli Date: Sun, 02 Oct 2011 23:56:18 +0000 Subject: First version of the newly restructured repository --- (limited to 'frontend/beta/js/YUI-extensions/grid/PagedGridView.js') diff --git a/frontend/beta/js/YUI-extensions/grid/PagedGridView.js b/frontend/beta/js/YUI-extensions/grid/PagedGridView.js new file mode 100644 index 0000000..ecaece2 --- a/dev/null +++ b/frontend/beta/js/YUI-extensions/grid/PagedGridView.js @@ -0,0 +1,194 @@ +/** + * @class YAHOO.ext.grid.PagedGridView + * @extends YAHOO.ext.grid.GridView + * Extends the default GridView to add a paging interface. + * @constructor + * This class is created for you automatically if your data model is set to use paging. + */ +YAHOO.ext.grid.PagedGridView = function(){ + YAHOO.ext.grid.PagedGridView.superclass.constructor.call(this); + this.cursor = 1; +}; + +YAHOO.extendX(YAHOO.ext.grid.PagedGridView, YAHOO.ext.grid.GridView, { + appendFooter : function(parentEl){ + var fwrap = document.createElement('div'); + fwrap.className = 'ygrid-wrap-footer'; + var fbody = document.createElement('span'); + fbody.className = 'ygrid-footer'; + fwrap.appendChild(fbody); + parentEl.appendChild(fwrap); + this.createPagingToolbar(fbody); + return fwrap; + }, + + createPagingToolbar : function(container){ + var tb = new YAHOO.ext.Toolbar(container); + this.pageToolbar = tb; + this.first = tb.addButton({ + tooltip: this.firstText, + className: 'ygrid-page-first', + disabled: true, + click: this.onClick.createDelegate(this, ['first']) + }); + this.prev = tb.addButton({ + tooltip: this.prevText, + className: 'ygrid-page-prev', + disabled: true, + click: this.onClick.createDelegate(this, ['prev']) + }); + tb.addSeparator(); + tb.add(this.beforePageText); + var pageBox = document.createElement('input'); + pageBox.type = 'text'; + pageBox.size = 3; + pageBox.value = '1'; + pageBox.className = 'ygrid-page-number'; + tb.add(pageBox); + this.field = getEl(pageBox, true); + this.field.mon('keydown', this.onEnter, this, true); + this.field.on('focus', function(){pageBox.select();}); + this.afterTextEl = tb.addText(this.afterPageText.replace('%0', '1')); + this.field.setHeight(18); + tb.addSeparator(); + this.next = tb.addButton({ + tooltip: this.nextText, + className: 'ygrid-page-next', + disabled: true, + click: this.onClick.createDelegate(this, ['next']) + }); + this.last = tb.addButton({ + tooltip: this.lastText, + className: 'ygrid-page-last', + disabled: true, + click: this.onClick.createDelegate(this, ['last']) + }); + tb.addSeparator(); + this.loading = tb.addButton({ + tooltip: this.refreshText, + className: 'ygrid-loading', + disabled: true, + click: this.onClick.createDelegate(this, ['refresh']) + }); + this.onPageLoaded(1, this.grid.dataModel.getTotalPages()); + }, + + /** + * Returns the toolbar used for paging so you can add new buttons. + * @return {YAHOO.ext.Toolbar} + */ + getPageToolbar : function(){ + return this.pageToolbar; + }, + + onPageLoaded : function(pageNum, totalPages){ + this.cursor = pageNum; + this.lastPage = totalPages; + this.afterTextEl.innerHTML = this.afterPageText.replace('%0', totalPages); + this.field.dom.value = pageNum; + this.first.setDisabled(pageNum == 1); + this.prev.setDisabled(pageNum == 1); + this.next.setDisabled(pageNum == totalPages); + this.last.setDisabled(pageNum == totalPages); + this.loading.enable(); + }, + + onLoadError : function(){ + this.loading.enable(); + }, + + onEnter : function(e){ + if(e.browserEvent.keyCode == e.RETURN){ + var v = this.field.dom.value; + if(!v){ + this.field.dom.value = this.cursor; + return; + } + var pageNum = parseInt(v, 10); + if(isNaN(pageNum)){ + this.field.dom.value = this.cursor; + return; + } + pageNum = Math.min(Math.max(1, pageNum), this.lastPage); + this.grid.dataModel.loadPage(pageNum); + e.stopEvent(); + } + }, + + beforeLoad : function(){ + this.grid.stopEditing(); + if(this.loading){ + this.loading.disable(); + } + }, + + onClick : function(which){ + switch(which){ + case 'first': + this.grid.dataModel.loadPage(1); + break; + case 'prev': + this.grid.dataModel.loadPage(this.cursor -1); + break; + case 'next': + this.grid.dataModel.loadPage(this.cursor + 1); + break; + case 'last': + this.grid.dataModel.loadPage(this.lastPage); + break; + case 'refresh': + this.grid.dataModel.loadPage(this.cursor); + break; + } + }, + + unplugDataModel : function(dm){ + dm.removeListener('beforeload', this.beforeLoad, this); + dm.removeListener('load', this.onPageLoaded, this); + dm.removeListener('loadexception', this.onLoadError, this); + YAHOO.ext.grid.PagedGridView.superclass.unplugDataModel.call(this, dm); + }, + + plugDataModel : function(dm){ + dm.on('beforeload', this.beforeLoad, this, true); + dm.on('load', this.onPageLoaded, this, true); + dm.on('loadexception', this.onLoadError, this); + YAHOO.ext.grid.PagedGridView.superclass.plugDataModel.call(this, dm); + }, + + /** + * Customizable piece of the default paging text (defaults to "Page") + * @type String + */ + beforePageText : "Page", + /** + * Customizable piece of the default paging text (defaults to "of %0") + * @type String + */ + afterPageText : "of %0", + /** + * Customizable piece of the default paging text (defaults to "First Page") + * @type String + */ + firstText : "First Page", + /** + * Customizable piece of the default paging text (defaults to "Previous Page") + * @type String + */ + prevText : "Previous Page", + /** + * Customizable piece of the default paging text (defaults to "Next Page") + * @type String + */ + nextText : "Next Page", + /** + * Customizable piece of the default paging text (defaults to "Last Page") + * @type String + */ + lastText : "Last Page", + /** + * Customizable piece of the default paging text (defaults to "Refresh") + * @type String + */ + refreshText : "Refresh" +}); -- cgit v0.9.0.2