textRenderer.js 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  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) {
  18. getRenderer('base').apply(this, arguments);
  19. if (!value && cellProperties.placeholder) {
  20. value = cellProperties.placeholder;
  21. }
  22. var escaped = stringify(value);
  23. if (!instance.getSettings().trimWhitespace) {
  24. escaped = escaped.replace(/ /g, String.fromCharCode(160));
  25. }
  26. if (cellProperties.rendererTemplate) {
  27. empty(TD);
  28. var TEMPLATE = document.createElement('TEMPLATE');
  29. TEMPLATE.setAttribute('bind', '{{}}');
  30. TEMPLATE.innerHTML = cellProperties.rendererTemplate;
  31. HTMLTemplateElement.decorate(TEMPLATE);
  32. TEMPLATE.model = instance.getSourceDataAtRow(row);
  33. TD.appendChild(TEMPLATE);
  34. } else {
  35. // this is faster than innerHTML. See: https://github.com/handsontable/handsontable/wiki/JavaScript-&-DOM-performance-tips
  36. fastInnerText(TD, escaped);
  37. }
  38. }
  39. export default textRenderer;