mirror of
http://git.whoc.org.uk/git/password-manager.git
synced 2025-12-19 21:07:03 +01:00
First version of the newly restructured repository
This commit is contained in:
182
frontend/beta/js/YUI-extensions/grid/EditorSelectionModel.js
Normal file
182
frontend/beta/js/YUI-extensions/grid/EditorSelectionModel.js
Normal file
@@ -0,0 +1,182 @@
|
||||
|
||||
/**
|
||||
@class YAHOO.ext.grid.EditorSelectionModel
|
||||
* Extends {@link YAHOO.ext.grid.DefaultSelectionModel} to enable cell navigation. <br><br>
|
||||
@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);
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user