fin-hypergrid
Version:
Canvas-based high-performance grid
79 lines (67 loc) • 2.19 kB
JavaScript
;
var Feature = require('./Feature');
var CellEditor = require('../cellEditors/CellEditor');
/**
* @constructor
* @extends Feature
*/
var CellEditing = Feature.extend('CellEditing', {
/**
* @memberOf CellEditing.prototype
* @param {Hypergrid} grid
* @param {Object} event - the event details
*/
handleClick: function(grid, event) {
edit.call(this, grid, event);
},
/**
* @memberOf CellEditing.prototype
* @param {Hypergrid} grid
* @param {Object} event - the event details
*/
handleDoubleClick: function(grid, event) {
edit.call(this, grid, event, true);
},
/**
* @param {Hypergrid} grid
* @param {Object} event - the event details
* @memberOf KeyPaging.prototype
*/
handleKeyDown: function(grid, event) {
var char, isVisibleChar, isDeleteChar, editor, cellEvent;
if (
(cellEvent = grid.getGridCellFromLastSelection()) &&
cellEvent.properties.editOnKeydown &&
!grid.cellEditor &&
(
(char = event.detail.char) === 'F2' ||
(isVisibleChar = char.length === 1 && !(event.detail.meta || event.detail.ctrl)) ||
(isDeleteChar = char === 'DELETE' || char === 'BACKSPACE')
)
) {
editor = grid.onEditorActivate(cellEvent);
if (editor instanceof CellEditor) {
if (isVisibleChar) {
editor.input.value = char;
} else if (isDeleteChar) {
editor.setEditorValue('');
}
event.detail.primitiveEvent.preventDefault();
}
} else if (this.next) {
this.next.handleKeyDown(grid, event);
}
}
});
function edit(grid, event, onDoubleClick) {
if (
event.isDataCell &&
!(event.getCellProperty('editOnDoubleClick') ^ onDoubleClick) // both same (true or falsy)?
) {
grid.onEditorActivate(event);
}
if (this.next) {
this.next[onDoubleClick ? 'handleDoubleClick' : 'handleClick'](grid, event);
}
}
module.exports = CellEditing;