123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- 'use strict';
- exports.__esModule = true;
- var _element = require('./../helpers/dom/element');
- var _eventManager = require('./../eventManager');
- var _eventManager2 = _interopRequireDefault(_eventManager);
- var _src = require('./../3rdparty/walkontable/src');
- var _index = require('./index');
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- var clonableWRAPPER = document.createElement('DIV');
- clonableWRAPPER.className = 'htAutocompleteWrapper';
- var clonableARROW = document.createElement('DIV');
- clonableARROW.className = 'htAutocompleteArrow';
- // workaround for https://github.com/handsontable/handsontable/issues/1946
- // this is faster than innerHTML. See: https://github.com/handsontable/handsontable/wiki/JavaScript-&-DOM-performance-tips
- clonableARROW.appendChild(document.createTextNode(String.fromCharCode(9660)));
- var wrapTdContentWithWrapper = function wrapTdContentWithWrapper(TD, WRAPPER) {
- WRAPPER.innerHTML = TD.innerHTML;
- (0, _element.empty)(TD);
- TD.appendChild(WRAPPER);
- };
- /**
- * Autocomplete renderer
- *
- * @private
- * @renderer AutocompleteRenderer
- * @param {Object} instance Handsontable instance
- * @param {Element} TD Table cell where to render
- * @param {Number} row
- * @param {Number} col
- * @param {String|Number} prop Row object property name
- * @param value Value to render (remember to escape unsafe HTML before inserting to DOM!)
- * @param {Object} cellProperties Cell properites (shared by cell renderer and editor)
- */
- function autocompleteRenderer(instance, TD, row, col, prop, value, cellProperties) {
- var WRAPPER = clonableWRAPPER.cloneNode(true); // this is faster than createElement
- var ARROW = clonableARROW.cloneNode(true); // this is faster than createElement
- if (cellProperties.allowHtml) {
- (0, _index.getRenderer)('html').apply(this, arguments);
- } else {
- (0, _index.getRenderer)('text').apply(this, arguments);
- }
- TD.appendChild(ARROW);
- (0, _element.addClass)(TD, 'htAutocomplete');
- if (!TD.firstChild) {
- // http://jsperf.com/empty-node-if-needed
- // otherwise empty fields appear borderless in demo/renderers.html (IE)
- TD.appendChild(document.createTextNode(String.fromCharCode(160))); // workaround for https://github.com/handsontable/handsontable/issues/1946
- // this is faster than innerHTML. See: https://github.com/handsontable/handsontable/wiki/JavaScript-&-DOM-performance-tips
- }
- if (!instance.acArrowListener) {
- var eventManager = new _eventManager2.default(instance);
- // not very elegant but easy and fast
- instance.acArrowListener = function (event) {
- if ((0, _element.hasClass)(event.target, 'htAutocompleteArrow')) {
- instance.view.wt.getSetting('onCellDblClick', null, new _src.CellCoords(row, col), TD);
- }
- };
- eventManager.addEventListener(instance.rootElement, 'mousedown', instance.acArrowListener);
- // We need to unbind the listener after the table has been destroyed
- instance.addHookOnce('afterDestroy', function () {
- eventManager.destroy();
- });
- }
- }
- exports.default = autocompleteRenderer;
|