autocompleteRenderer.js 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. 'use strict';
  2. exports.__esModule = true;
  3. var _element = require('./../helpers/dom/element');
  4. var _eventManager = require('./../eventManager');
  5. var _eventManager2 = _interopRequireDefault(_eventManager);
  6. var _src = require('./../3rdparty/walkontable/src');
  7. var _index = require('./index');
  8. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  9. var clonableWRAPPER = document.createElement('DIV');
  10. clonableWRAPPER.className = 'htAutocompleteWrapper';
  11. var clonableARROW = document.createElement('DIV');
  12. clonableARROW.className = 'htAutocompleteArrow';
  13. // workaround for https://github.com/handsontable/handsontable/issues/1946
  14. // this is faster than innerHTML. See: https://github.com/handsontable/handsontable/wiki/JavaScript-&-DOM-performance-tips
  15. clonableARROW.appendChild(document.createTextNode(String.fromCharCode(9660)));
  16. var wrapTdContentWithWrapper = function wrapTdContentWithWrapper(TD, WRAPPER) {
  17. WRAPPER.innerHTML = TD.innerHTML;
  18. (0, _element.empty)(TD);
  19. TD.appendChild(WRAPPER);
  20. };
  21. /**
  22. * Autocomplete renderer
  23. *
  24. * @private
  25. * @renderer AutocompleteRenderer
  26. * @param {Object} instance Handsontable instance
  27. * @param {Element} TD Table cell where to render
  28. * @param {Number} row
  29. * @param {Number} col
  30. * @param {String|Number} prop Row object property name
  31. * @param value Value to render (remember to escape unsafe HTML before inserting to DOM!)
  32. * @param {Object} cellProperties Cell properites (shared by cell renderer and editor)
  33. */
  34. function autocompleteRenderer(instance, TD, row, col, prop, value, cellProperties) {
  35. var WRAPPER = clonableWRAPPER.cloneNode(true); // this is faster than createElement
  36. var ARROW = clonableARROW.cloneNode(true); // this is faster than createElement
  37. if (cellProperties.allowHtml) {
  38. (0, _index.getRenderer)('html').apply(this, arguments);
  39. } else {
  40. (0, _index.getRenderer)('text').apply(this, arguments);
  41. }
  42. TD.appendChild(ARROW);
  43. (0, _element.addClass)(TD, 'htAutocomplete');
  44. if (!TD.firstChild) {
  45. // http://jsperf.com/empty-node-if-needed
  46. // otherwise empty fields appear borderless in demo/renderers.html (IE)
  47. TD.appendChild(document.createTextNode(String.fromCharCode(160))); // workaround for https://github.com/handsontable/handsontable/issues/1946
  48. // this is faster than innerHTML. See: https://github.com/handsontable/handsontable/wiki/JavaScript-&-DOM-performance-tips
  49. }
  50. if (!instance.acArrowListener) {
  51. var eventManager = new _eventManager2.default(instance);
  52. // not very elegant but easy and fast
  53. instance.acArrowListener = function (event) {
  54. if ((0, _element.hasClass)(event.target, 'htAutocompleteArrow')) {
  55. instance.view.wt.getSetting('onCellDblClick', null, new _src.CellCoords(row, col), TD);
  56. }
  57. };
  58. eventManager.addEventListener(instance.rootElement, 'mousedown', instance.acArrowListener);
  59. // We need to unbind the listener after the table has been destroyed
  60. instance.addHookOnce('afterDestroy', function () {
  61. eventManager.destroy();
  62. });
  63. }
  64. }
  65. exports.default = autocompleteRenderer;