From 541bb378ddece2eab135a8066a16994e94436dea Mon Sep 17 00:00:00 2001 From: Giulio Cesare Solaroli Date: Mon, 03 Oct 2011 16:04:12 +0000 Subject: Merge pull request #1 from gcsolaroli/master First version of the restructured repository --- (limited to 'frontend/beta/js/YUI-extensions/grid/EditorSelectionModel.js') diff --git a/frontend/beta/js/YUI-extensions/grid/EditorSelectionModel.js b/frontend/beta/js/YUI-extensions/grid/EditorSelectionModel.js new file mode 100644 index 0000000..c1cb240 --- a/dev/null +++ b/frontend/beta/js/YUI-extensions/grid/EditorSelectionModel.js @@ -0,0 +1,182 @@ + +/** + @class YAHOO.ext.grid.EditorSelectionModel + * Extends {@link YAHOO.ext.grid.DefaultSelectionModel} to enable cell navigation.

+ @extends YAHOO.ext.grid.DefaultSelectionModel + @constructor + */ +YAHOO.ext.grid.EditorSelectionModel = function(){ + YAHOO.ext.grid.EditorSelectionModel.superclass.constructor.call(this); + /** Number of clicks to activate a cell (for editing) - valid values are 1 or 2 + * @type Number */ + this.clicksToActivateCell = 1; + this.events['cellactivate'] = new YAHOO.util.CustomEvent('cellactivate'); +}; + +YAHOO.extendX(YAHOO.ext.grid.EditorSelectionModel, YAHOO.ext.grid.DefaultSelectionModel); + +YAHOO.ext.grid.EditorSelectionModel.prototype.disableArrowNavigation = false; +YAHOO.ext.grid.EditorSelectionModel.prototype.controlForArrowNavigation = false; + +/** @ignore */ +YAHOO.ext.grid.EditorSelectionModel.prototype.initEvents = function(){ + this.grid.addListener("cellclick", this.onCellClick, this, true); + this.grid.addListener("celldblclick", this.onCellDblClick, this, true); + this.grid.addListener("keydown", this.keyDown, this, true); +}; + +YAHOO.ext.grid.EditorSelectionModel.prototype.onCellClick = function(grid, rowIndex, colIndex){ + if(this.clicksToActivateCell == 1){ + var row = this.grid.getRow(rowIndex); + var cell = row.childNodes[colIndex]; + if(cell){ + this.activate(row, cell); + } + } +}; + +YAHOO.ext.grid.EditorSelectionModel.prototype.activate = function(row, cell){ + this.fireEvent('cellactivate', this, row, cell); + this.grid.doEdit(row, cell); +}; + +YAHOO.ext.grid.EditorSelectionModel.prototype.onCellDblClick = function(grid, rowIndex, colIndex){ + if(this.clicksToActivateCell == 2){ + var row = this.grid.getRow(rowIndex); + var cell = row.childNodes[colIndex]; + if(cell){ + this.activate(row, cell); + } + } +}; + +/** @ignore */ +YAHOO.ext.grid.EditorSelectionModel.prototype.setRowState = function(row, selected){ + YAHOO.ext.grid.EditorSelectionModel.superclass.setRowState.call(this, row, false, false); +}; +/** @ignore */ +YAHOO.ext.grid.EditorSelectionModel.prototype.focusRow = function(row, selected){ +}; + +YAHOO.ext.grid.EditorSelectionModel.prototype.getEditorCellAfter = function(cell, spanRows){ + var g = this.grid; + var next = g.getCellAfter(cell); + while(next && !g.colModel.isCellEditable(next.columnIndex)){ + next = g.getCellAfter(next); + } + if(!next && spanRows){ + var row = g.getRowAfter(g.getRowFromChild(cell)); + if(row){ + next = g.getFirstCell(row); + if(!g.colModel.isCellEditable(next.columnIndex)){ + next = this.getEditorCellAfter(next); + } + } + } + return next; +}; + +YAHOO.ext.grid.EditorSelectionModel.prototype.getEditorCellBefore = function(cell, spanRows){ + var g = this.grid; + var prev = g.getCellBefore(cell); + while(prev && !g.colModel.isCellEditable(prev.columnIndex)){ + prev = g.getCellBefore(prev); + } + if(!prev && spanRows){ + var row = g.getRowBefore(g.getRowFromChild(cell)); + if(row){ + prev = g.getLastCell(row); + if(!g.colModel.isCellEditable(prev.columnIndex)){ + prev = this.getEditorCellBefore(prev); + } + } + } + return prev; +}; + +YAHOO.ext.grid.EditorSelectionModel.prototype.allowArrowNav = function(e){ + return (!this.disableArrowNavigation && (!this.controlForArrowNavigation || e.ctrlKey)); +} +/** @ignore */ +YAHOO.ext.grid.EditorSelectionModel.prototype.keyDown = function(e){ + var g = this.grid, cm = g.colModel, cell = g.getEditingCell(); + if(!cell) return; + var newCell; + switch(e.browserEvent.keyCode){ + case e.TAB: + if(e.shiftKey){ + newCell = this.getEditorCellBefore(cell, true); + }else{ + newCell = this.getEditorCellAfter(cell, true); + } + e.preventDefault(); + break; + case e.DOWN: + if(this.allowArrowNav(e)){ + var next = g.getRowAfter(g.getRowFromChild(cell)); + if(next){ + newCell = next.childNodes[cell.columnIndex]; + } + } + break; + case e.UP: + if(this.allowArrowNav(e)){ + var prev = g.getRowBefore(g.getRowFromChild(cell)); + if(prev){ + newCell = prev.childNodes[cell.columnIndex]; + } + } + break; + case e.RETURN: + if(e.shiftKey){ + var prev = g.getRowBefore(g.getRowFromChild(cell)); + if(prev){ + newCell = prev.childNodes[cell.columnIndex]; + } + }else{ + var next = g.getRowAfter(g.getRowFromChild(cell)); + if(next){ + newCell = next.childNodes[cell.columnIndex]; + } + } + break; + case e.RIGHT: + if(this.allowArrowNav(e)){ + newCell = this.getEditorCellAfter(cell); + } + break; + case e.LEFT: + if(this.allowArrowNav(e)){ + newCell = this.getEditorCellBefore(cell); + } + break; + }; + if(newCell){ + this.activate(g.getRowFromChild(newCell), newCell); + e.stopEvent(); + } +}; + +/** + * @class YAHOO.ext.grid.EditorAndSelectionModel + */ +YAHOO.ext.grid.EditorAndSelectionModel = function(){ + YAHOO.ext.grid.EditorAndSelectionModel.superclass.constructor.call(this); + this.events['cellactivate'] = new YAHOO.util.CustomEvent('cellactivate'); +}; + +YAHOO.extendX(YAHOO.ext.grid.EditorAndSelectionModel, YAHOO.ext.grid.DefaultSelectionModel); + +YAHOO.ext.grid.EditorAndSelectionModel.prototype.initEvents = function(){ + YAHOO.ext.grid.EditorAndSelectionModel.superclass.initEvents.call(this); + this.grid.addListener("celldblclick", this.onCellDblClick, this, true); +}; + +YAHOO.ext.grid.EditorAndSelectionModel.prototype.onCellDblClick = function(grid, rowIndex, colIndex){ + var row = this.grid.getRow(rowIndex); + var cell = row.childNodes[colIndex]; + if(cell){ + this.fireEvent('cellactivate', this, row, cell); + this.grid.doEdit(row, cell); + } +}; -- cgit v0.9.0.2