123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182 |
- import { KEY_CODES } from './../helpers/unicode';
- import { extend } from './../helpers/object';
- import { setCaretPosition } from './../helpers/dom/element';
- import { stopImmediatePropagation, isImmediatePropagationStopped } from './../helpers/dom/event';
- import TextEditor from './textEditor';
- var HandsontableEditor = TextEditor.prototype.extend();
- /**
- * @private
- * @editor HandsontableEditor
- * @class HandsontableEditor
- * @dependencies TextEditor
- */
- HandsontableEditor.prototype.createElements = function () {
- TextEditor.prototype.createElements.apply(this, arguments);
- var DIV = document.createElement('DIV');
- DIV.className = 'handsontableEditor';
- this.TEXTAREA_PARENT.appendChild(DIV);
- this.htContainer = DIV;
- this.assignHooks();
- };
- HandsontableEditor.prototype.prepare = function (td, row, col, prop, value, cellProperties) {
- TextEditor.prototype.prepare.apply(this, arguments);
- var parent = this;
- var options = {
- startRows: 0,
- startCols: 0,
- minRows: 0,
- minCols: 0,
- className: 'listbox',
- copyPaste: false,
- autoColumnSize: false,
- autoRowSize: false,
- readOnly: true,
- fillHandle: false,
- afterOnCellMouseDown: function afterOnCellMouseDown(_, coords) {
- var value = this.getSourceData(coords.row, coords.col);
- // if the value is undefined then it means we don't want to set the value
- if (value !== void 0) {
- parent.setValue(value);
- }
- parent.instance.destroyEditor();
- }
- };
- if (this.cellProperties.handsontable) {
- extend(options, cellProperties.handsontable);
- }
- this.htOptions = options;
- };
- var onBeforeKeyDown = function onBeforeKeyDown(event) {
- if (isImmediatePropagationStopped(event)) {
- return;
- }
- var editor = this.getActiveEditor();
- var innerHOT = editor.htEditor.getInstance();
- var rowToSelect;
- var selectedRow;
- if (event.keyCode == KEY_CODES.ARROW_DOWN) {
- if (!innerHOT.getSelected() && !innerHOT.flipped) {
- rowToSelect = 0;
- } else if (innerHOT.getSelected()) {
- if (innerHOT.flipped) {
- rowToSelect = innerHOT.getSelected()[0] + 1;
- } else if (!innerHOT.flipped) {
- selectedRow = innerHOT.getSelected()[0];
- var lastRow = innerHOT.countRows() - 1;
- rowToSelect = Math.min(lastRow, selectedRow + 1);
- }
- }
- } else if (event.keyCode == KEY_CODES.ARROW_UP) {
- if (!innerHOT.getSelected() && innerHOT.flipped) {
- rowToSelect = innerHOT.countRows() - 1;
- } else if (innerHOT.getSelected()) {
- if (innerHOT.flipped) {
- selectedRow = innerHOT.getSelected()[0];
- rowToSelect = Math.max(0, selectedRow - 1);
- } else {
- selectedRow = innerHOT.getSelected()[0];
- rowToSelect = selectedRow - 1;
- }
- }
- }
- if (rowToSelect !== void 0) {
- if (rowToSelect < 0 || innerHOT.flipped && rowToSelect > innerHOT.countRows() - 1) {
- innerHOT.deselectCell();
- } else {
- innerHOT.selectCell(rowToSelect, 0);
- }
- if (innerHOT.getData().length) {
- event.preventDefault();
- stopImmediatePropagation(event);
- editor.instance.listen();
- editor.TEXTAREA.focus();
- }
- }
- };
- HandsontableEditor.prototype.open = function () {
- this.instance.addHook('beforeKeyDown', onBeforeKeyDown);
- TextEditor.prototype.open.apply(this, arguments);
- if (this.htEditor) {
- this.htEditor.destroy();
- }
- this.htEditor = new Handsontable(this.htContainer, this.htOptions);
- if (this.cellProperties.strict) {
- this.htEditor.selectCell(0, 0);
- this.TEXTAREA.style.visibility = 'hidden';
- } else {
- this.htEditor.deselectCell();
- this.TEXTAREA.style.visibility = 'visible';
- }
- setCaretPosition(this.TEXTAREA, 0, this.TEXTAREA.value.length);
- };
- HandsontableEditor.prototype.close = function () {
- this.instance.removeHook('beforeKeyDown', onBeforeKeyDown);
- this.instance.listen();
- TextEditor.prototype.close.apply(this, arguments);
- };
- HandsontableEditor.prototype.focus = function () {
- this.instance.listen();
- TextEditor.prototype.focus.apply(this, arguments);
- };
- HandsontableEditor.prototype.beginEditing = function (initialValue) {
- var onBeginEditing = this.instance.getSettings().onBeginEditing;
- if (onBeginEditing && onBeginEditing() === false) {
- return;
- }
- TextEditor.prototype.beginEditing.apply(this, arguments);
- };
- HandsontableEditor.prototype.finishEditing = function (isCancelled, ctrlDown) {
- if (this.htEditor && this.htEditor.isListening()) {
- // if focus is still in the HOT editor
- this.instance.listen(); // return the focus to the parent HOT instance
- }
- if (this.htEditor && this.htEditor.getSelected()) {
- var value = this.htEditor.getInstance().getValue();
- if (value !== void 0) {
- // if the value is undefined then it means we don't want to set the value
- this.setValue(value);
- }
- }
- return TextEditor.prototype.finishEditing.apply(this, arguments);
- };
- HandsontableEditor.prototype.assignHooks = function () {
- var _this = this;
- this.instance.addHook('afterDestroy', function () {
- if (_this.htEditor) {
- _this.htEditor.destroy();
- }
- });
- };
- export default HandsontableEditor;
|