utils.js 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. 'use strict';
  2. exports.__esModule = true;
  3. exports.normalizeSelection = normalizeSelection;
  4. exports.isSeparator = isSeparator;
  5. exports.hasSubMenu = hasSubMenu;
  6. exports.isDisabled = isDisabled;
  7. exports.isSelectionDisabled = isSelectionDisabled;
  8. exports.getValidSelection = getValidSelection;
  9. exports.prepareVerticalAlignClass = prepareVerticalAlignClass;
  10. exports.prepareHorizontalAlignClass = prepareHorizontalAlignClass;
  11. exports.getAlignmentClasses = getAlignmentClasses;
  12. exports.align = align;
  13. exports.checkSelectionConsistency = checkSelectionConsistency;
  14. exports.markLabelAsSelected = markLabelAsSelected;
  15. exports.isItemHidden = isItemHidden;
  16. exports.filterSeparators = filterSeparators;
  17. var _array = require('./../../helpers/array');
  18. var _element = require('./../../helpers/dom/element');
  19. var _separator = require('./predefinedItems/separator');
  20. function normalizeSelection(selRange) {
  21. return {
  22. start: selRange.getTopLeftCorner(),
  23. end: selRange.getBottomRightCorner()
  24. };
  25. }
  26. function isSeparator(cell) {
  27. return (0, _element.hasClass)(cell, 'htSeparator');
  28. }
  29. function hasSubMenu(cell) {
  30. return (0, _element.hasClass)(cell, 'htSubmenu');
  31. }
  32. function isDisabled(cell) {
  33. return (0, _element.hasClass)(cell, 'htDisabled');
  34. }
  35. function isSelectionDisabled(cell) {
  36. return (0, _element.hasClass)(cell, 'htSelectionDisabled');
  37. }
  38. function getValidSelection(hot) {
  39. var selected = hot.getSelected();
  40. if (!selected) {
  41. return null;
  42. }
  43. if (selected[0] < 0) {
  44. return null;
  45. }
  46. return selected;
  47. }
  48. function prepareVerticalAlignClass(className, alignment) {
  49. if (className.indexOf(alignment) != -1) {
  50. return className;
  51. }
  52. className = className.replace('htTop', '').replace('htMiddle', '').replace('htBottom', '').replace(' ', '');
  53. className += ' ' + alignment;
  54. return className;
  55. }
  56. function prepareHorizontalAlignClass(className, alignment) {
  57. if (className.indexOf(alignment) != -1) {
  58. return className;
  59. }
  60. className = className.replace('htLeft', '').replace('htCenter', '').replace('htRight', '').replace('htJustify', '').replace(' ', '');
  61. className += ' ' + alignment;
  62. return className;
  63. }
  64. function getAlignmentClasses(range, callback) {
  65. var classes = {};
  66. for (var row = range.from.row; row <= range.to.row; row++) {
  67. for (var col = range.from.col; col <= range.to.col; col++) {
  68. if (!classes[row]) {
  69. classes[row] = [];
  70. }
  71. classes[row][col] = callback(row, col);
  72. }
  73. }
  74. return classes;
  75. }
  76. function align(range, type, alignment, cellDescriptor, propertySetter) {
  77. if (range.from.row == range.to.row && range.from.col == range.to.col) {
  78. applyAlignClassName(range.from.row, range.from.col, type, alignment, cellDescriptor, propertySetter);
  79. } else {
  80. for (var row = range.from.row; row <= range.to.row; row++) {
  81. for (var col = range.from.col; col <= range.to.col; col++) {
  82. applyAlignClassName(row, col, type, alignment, cellDescriptor, propertySetter);
  83. }
  84. }
  85. }
  86. }
  87. function applyAlignClassName(row, col, type, alignment, cellDescriptor, propertySetter) {
  88. var cellMeta = cellDescriptor(row, col);
  89. var className = alignment;
  90. if (cellMeta.className) {
  91. if (type === 'vertical') {
  92. className = prepareVerticalAlignClass(cellMeta.className, alignment);
  93. } else {
  94. className = prepareHorizontalAlignClass(cellMeta.className, alignment);
  95. }
  96. }
  97. propertySetter(row, col, 'className', className);
  98. }
  99. function checkSelectionConsistency(range, comparator) {
  100. var result = false;
  101. if (range) {
  102. range.forAll(function (row, col) {
  103. if (comparator(row, col)) {
  104. result = true;
  105. return false;
  106. }
  107. });
  108. }
  109. return result;
  110. }
  111. function markLabelAsSelected(label) {
  112. // workaround for https://github.com/handsontable/handsontable/issues/1946
  113. return '<span class="selected">' + String.fromCharCode(10003) + '</span>' + label;
  114. }
  115. function isItemHidden(item, instance) {
  116. return !item.hidden || !(typeof item.hidden == 'function' && item.hidden.call(instance));
  117. }
  118. function shiftSeparators(items, separator) {
  119. var result = items.slice(0);
  120. for (var i = 0; i < result.length;) {
  121. if (result[i].name === separator) {
  122. result.shift();
  123. } else {
  124. break;
  125. }
  126. }
  127. return result;
  128. }
  129. function popSeparators(items, separator) {
  130. var result = items.slice(0);
  131. result.reverse();
  132. result = shiftSeparators(result, separator);
  133. result.reverse();
  134. return result;
  135. }
  136. function removeDuplicatedSeparators(items) {
  137. var result = [];
  138. (0, _array.arrayEach)(items, function (value, index) {
  139. if (index > 0) {
  140. if (result[result.length - 1].name !== value.name) {
  141. result.push(value);
  142. }
  143. } else {
  144. result.push(value);
  145. }
  146. });
  147. return result;
  148. }
  149. function filterSeparators(items) {
  150. var separator = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _separator.KEY;
  151. var result = items.slice(0);
  152. result = shiftSeparators(result, separator);
  153. result = popSeparators(result, separator);
  154. result = removeDuplicatedSeparators(result);
  155. return result;
  156. }