textRenderer.js 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. import { empty, fastInnerText } from './../helpers/dom/element';
  2. import { stringify } from './../helpers/mixed';
  3. import { getRenderer } from './index';
  4. /**
  5. * Default text renderer
  6. *
  7. * @private
  8. * @renderer TextRenderer
  9. * @param {Object} instance Handsontable instance
  10. * @param {Element} TD Table cell where to render
  11. * @param {Number} row
  12. * @param {Number} col
  13. * @param {String|Number} prop Row object property name
  14. * @param value Value to render (remember to escape unsafe HTML before inserting to DOM!)
  15. * @param {Object} cellProperties Cell properties (shared by cell renderer and editor)
  16. */
  17. function textRenderer(instance, TD, row, col, prop, value, cellProperties, ...args) {
  18. getRenderer('base').apply(this, [instance, TD, row, col, prop, value, cellProperties, ...args]);
  19. let escaped = value;
  20. if (!escaped && cellProperties.placeholder) {
  21. escaped = cellProperties.placeholder;
  22. }
  23. escaped = stringify(escaped);
  24. if (!instance.getSettings().trimWhitespace) {
  25. escaped = escaped.replace(/ /g, String.fromCharCode(160));
  26. }
  27. if (cellProperties.rendererTemplate) {
  28. empty(TD);
  29. const TEMPLATE = document.createElement('TEMPLATE');
  30. TEMPLATE.setAttribute('bind', '{{}}');
  31. TEMPLATE.innerHTML = cellProperties.rendererTemplate;
  32. HTMLTemplateElement.decorate(TEMPLATE);
  33. TEMPLATE.model = instance.getSourceDataAtRow(row);
  34. TD.appendChild(TEMPLATE);
  35. } else {
  36. // this is faster than innerHTML. See: https://github.com/handsontable/handsontable/wiki/JavaScript-&-DOM-performance-tips
  37. fastInnerText(TD, escaped);
  38. }
  39. }
  40. export default textRenderer;