HandsontableUtil.js 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. /**
  2. * Utility for Handsontable (and cooperation with MarkdownTable)
  3. */
  4. export default class HandsontableUtil {
  5. static setClassNameToColumns(core, startCol, endCol, className) {
  6. for (let i = startCol; i <= endCol; i++) {
  7. for (let j = 0; j < core.countRows(); j++) {
  8. core.setCellMeta(j, i, 'className', className);
  9. }
  10. }
  11. core.render();
  12. }
  13. /**
  14. * return a function(handsontable event handler) to adjust the handsontable alignment to the markdown table
  15. */
  16. static createHandlerToSynchronizeHandontableAlignWith(markdownTableAlign) {
  17. const mapping = {
  18. 'r': 'htRight',
  19. 'c': 'htCenter',
  20. 'l': 'htLeft',
  21. '': ''
  22. };
  23. return function() {
  24. const align = markdownTableAlign;
  25. for (let i = 0; i < align.length; i++) {
  26. HandsontableUtil.setClassNameToColumns(this, i, i, mapping[align[i]]);
  27. }
  28. };
  29. }
  30. static synchronizeHandsontableModalWithMarkdownTable(handsontable, markdownTable) {
  31. const mapping = {
  32. 'r': 'htRight',
  33. 'c': 'htCenter',
  34. 'l': 'htLeft',
  35. '': ''
  36. };
  37. for (let i = 0; i < markdownTable.options.align.length; i++) {
  38. HandsontableUtil.setClassNameToColumns(handsontable, i, i, mapping[markdownTable.options.align[i]]);
  39. }
  40. }
  41. /**
  42. * return MarkdownTable alignment retrieved from Handsontable instance
  43. */
  44. static getMarkdownTableAlignmentFrom(handsontable) {
  45. const cellMetasAtFirstRow = handsontable.getCellMetaAtRow(0);
  46. const mapping = {
  47. 'htRight': 'r',
  48. 'htCenter': 'c',
  49. 'htLeft': 'l',
  50. '': ''
  51. };
  52. let align = [];
  53. for (let i = 0; i < cellMetasAtFirstRow.length; i++) {
  54. align.push(mapping[cellMetasAtFirstRow[i].className]);
  55. }
  56. return align;
  57. }
  58. }