Diffstat (limited to 'frontend/gamma/js/Clipperz/PM/UI/Web/Components/GridComponent.js') (more/less context) (ignore whitespace changes)
-rw-r--r-- | frontend/gamma/js/Clipperz/PM/UI/Web/Components/GridComponent.js | 262 |
1 files changed, 262 insertions, 0 deletions
diff --git a/frontend/gamma/js/Clipperz/PM/UI/Web/Components/GridComponent.js b/frontend/gamma/js/Clipperz/PM/UI/Web/Components/GridComponent.js new file mode 100644 index 0000000..8b3e6c9 --- a/dev/null +++ b/frontend/gamma/js/Clipperz/PM/UI/Web/Components/GridComponent.js @@ -0,0 +1,262 @@ +/* + +Copyright 2008-2011 Clipperz Srl + +This file is part of Clipperz's Javascript Crypto Library. +Javascript Crypto Library provides web developers with an extensive +and efficient set of cryptographic functions. The library aims to +obtain maximum execution speed while preserving modularity and +reusability. +For further information about its features and functionalities please +refer to http://www.clipperz.com + +* Javascript Crypto Library is free software: you can redistribute + it and/or modify it under the terms of the GNU Affero General Public + License as published by the Free Software Foundation, either version + 3 of the License, or (at your option) any later version. + +* Javascript Crypto Library is distributed in the hope that it will + be useful, but WITHOUT ANY WARRANTY; without even the implied + warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Affero General Public License for more details. + +* You should have received a copy of the GNU Affero General Public + License along with Javascript Crypto Library. If not, see + <http://www.gnu.org/licenses/>. + +*/ + +Clipperz.Base.module('Clipperz.PM.UI.Web.Components'); + +Clipperz.PM.UI.Web.Components.GridComponent = function(args) { + args = args || {}; + + Clipperz.PM.UI.Web.Components.GridComponent.superclass.constructor.apply(this, arguments); + + this._columnsManagers = args.columnsManagers; + + this._rowsObjects = []; + this._noRowsGridComponent = null; + + this._slots = { + 'headerSlot': this.getId('headerSlot') + }; + + return this; +} + +//============================================================================= + +Clipperz.Base.extend(Clipperz.PM.UI.Web.Components.GridComponent, Clipperz.PM.UI.Common.Components.BaseComponent, { + + //------------------------------------------------------------------------- + + 'toString': function () { + return "Clipperz.PM.UI.Web.Components.GridComponent component"; + }, + + //------------------------------------------------------------------------- + + 'rows': function () { + throw Clipperz.Base.exception.AbstractMethod; +// return this._rows; + }, + + //------------------------------------------------------------------------- + + 'columnsManagers': function () { + return this._columnsManagers; + }, + + //------------------------------------------------------------------------- + + 'renderSelf': function(/*aContainer, aPosition*/) { + this.append(this.element(), [ + {tag:'div', cls:'header', children:[ + {tag:'form', id:this.getId('searchForm'), cls:'search', children:[ + {tag:'div', cls:'search', children:[ + {tag:'input', type:'text', id:this.getId('search'), cls:'search', placeholder:"search", name:'textToSearch'/*, value:"clipperz"*/} + ]}, + {tag:'div', cls:'clearSearchButton', id:this.getId('clearSearch')}, +// {tag:'input', type:'button', cls:'searchButton', name:'searchButton', value:"search"}, + {tag:'div', cls:'headerSlot', id:this.getId('headerSlot')} + ]} + ]}, + {tag:'div', cls:'body', children:[ + {tag:'div', cls:'rows', id:this.getId('rows'), children:[ + {tag:'table', cellpadding:'0', cellspacing:'0', cls:'rows', children:[ + {tag:'thead', children:[ + {tag:'tr', id:this.getId('thead_tr'), children:[]} + ]}, + {tag:'tbody', id:this.getId('gridRows'), children:[]} + ]} + ]}, + {tag:'div', cls:'noRowsBlock', id:this.getId('noRowsBlock'), children:[]} + ]}, + {tag:'div', cls:'footer'} + ]); + + this.renderHeader(); + MochiKit.Signal.connect(this.getId('clearSearch'), 'onclick', this, 'clearSearchHandler'); + }, + + //------------------------------------------------------------------------- + + 'renderHeader': function () { + var headerElement; + + headerElement = this.getElement('thead_tr'); + headerElement.innerHTML = ""; + + MochiKit.Iter.forEach(this.columnsManagers(), function (aColumnManager) { + aColumnManager.renderHeader(headerElement); + }); + }, + + //------------------------------------------------------------------------- + + 'update': function (someObjects) { + this._rowsObjects = someObjects + this.refresh(); + this.focus(); + }, + + 'focus': function () { + this.getElement('search').focus(); + }, + + //------------------------------------------------------------------------- + + 'startSearch': function () { +//console.log("--> startSearch"); + MochiKit.DOM.addElementClass(this.getElement('search'), 'running'); + }, + + 'endSearch': function () { + MochiKit.DOM.removeElementClass(this.getElement('search'), 'running'); +//console.log("<-- startSearch"); + }, + + //------------------------------------------------------------------------- + + 'disconnectColumnManagersRowsSignals': function () { + MochiKit.Iter.forEach(this.columnsManagers(), function (aColumnManager) { + aColumnManager.disconnectRowsSignals(); + }); + }, + + //------------------------------------------------------------------------- + + 'refresh': function () { + var gridRowsElement; + var rowClass; + + this.disconnectColumnManagersRowsSignals(); + + { + MochiKit.DOM.removeElementClass(this.getElement('search'), 'disabled'); +// MochiKit.DOM.setNodeAttribute(this.getElement('search'), 'disabled', null); + MochiKit.DOM.removeElementClass(this.element(), 'empty'); + MochiKit.DOM.removeElementClass(this.element(), 'noRows'); + } + + + gridRowsElement = this.getElement('gridRows'); + gridRowsElement.innerHTML = ""; + + MochiKit.DOM.removeElementClass(this.element(), 'empty'); + + rowClass = 'odd'; + MochiKit.Iter.forEach(this._rowsObjects, MochiKit.Base.bind(function (aRowObject) { + var cardRowElement; + + cardRowElement = this.append(gridRowsElement, {tag:'tr', id:this.getId(aRowObject['_reference']), cls:rowClass}); + MochiKit.Iter.forEach(this.columnsManagers(), function (aColumnManager) { + aColumnManager.renderCell(cardRowElement, aRowObject); + }); + + rowClass = (rowClass == 'odd') ? 'even' : 'odd'; + }, this)); + }, + + //----------------------------------------------------------------------------- + + 'filterElement': function () { + return this.getElement('search'); + }, + + //------------------------------------------------------------------------- + + 'shouldShowElementWhileRendering': function () { + return false; + }, + + //------------------------------------------------------------------------- + + 'selectRow': function (aRowObject) { + MochiKit.DOM.addElementClass(this.getId(aRowObject['_reference']), 'selected'); + }, + + 'unselectRow': function (aRowObject) { + MochiKit.DOM.removeElementClass(this.getId(aRowObject['_reference']), 'selected'); + }, + + //------------------------------------------------------------------------- +/* + 'passOpenDirectLogin': function(aDirectLoginReferenceId) { + MochiKit.Signal.signal(this, 'openDirectLogin', aDirectLoginReferenceId); + }, +*/ + //------------------------------------------------------------------------- + + 'clearSearchHandler': function (anEvent) { + var searchElement; + + anEvent.preventDefault(); + + searchElement = this.getElement('search'); + searchElement.value = ""; + searchElement.focus(); + }, + + //------------------------------------------------------------------------- + + 'drawEmpty': function () { + this.disconnectColumnManagersRowsSignals(); + MochiKit.DOM.addElementClass(this.getElement('search'), 'disabled'); +// MochiKit.DOM.setNodeAttribute(this.getElement('search'), 'disabled', 'disabled'); + + gridRowsElement = this.getElement('gridRows'); + gridRowsElement.innerHTML = ""; + MochiKit.DOM.addElementClass(this.element(), 'empty'); + }, + + //------------------------------------------------------------------------- + + 'setNoRowsGridComponent': function (aComponent) { + this.removeNoRowsGridComponent(); + this._noRowsGridComponent = aComponent; + + this.disconnectColumnManagersRowsSignals(); + MochiKit.DOM.addElementClass(this.getElement('search'), 'disabled'); +// MochiKit.DOM.setNodeAttribute(this.getElement('search'), 'disabled', 'disabled'); + + gridRowsElement = this.getElement('gridRows'); + gridRowsElement.innerHTML = ""; + MochiKit.DOM.addElementClass(this.element(), 'noRows'); + + if (aComponent != null) { + aComponent.renderInNode(this.getElement('noRowsBlock')); + } + }, + + 'removeNoRowsGridComponent': function () { + if (this._noRowsGridComponent != null) { + this._noRowsGridComponent.remove(); + this._noRowsGridComponent = null; + } + }, + + //------------------------------------------------------------------------- + __syntaxFix__: "syntax fix" +}); |