index.js 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. 'use strict';
  2. exports.__esModule = true;
  3. exports.getRegisteredEditors = exports.getRegisteredEditorNames = exports.hasEditor = exports.getEditorInstance = exports.getEditor = exports.registerEditor = undefined;
  4. exports.RegisteredEditor = RegisteredEditor;
  5. exports._getEditorInstance = _getEditorInstance;
  6. var _staticRegister2 = require('./../utils/staticRegister');
  7. var _staticRegister3 = _interopRequireDefault(_staticRegister2);
  8. var _pluginHooks = require('./../pluginHooks');
  9. var _pluginHooks2 = _interopRequireDefault(_pluginHooks);
  10. var _baseEditor = require('./_baseEditor');
  11. var _baseEditor2 = _interopRequireDefault(_baseEditor);
  12. var _autocompleteEditor = require('./autocompleteEditor');
  13. var _autocompleteEditor2 = _interopRequireDefault(_autocompleteEditor);
  14. var _checkboxEditor = require('./checkboxEditor');
  15. var _checkboxEditor2 = _interopRequireDefault(_checkboxEditor);
  16. var _dateEditor = require('./dateEditor');
  17. var _dateEditor2 = _interopRequireDefault(_dateEditor);
  18. var _dropdownEditor = require('./dropdownEditor');
  19. var _dropdownEditor2 = _interopRequireDefault(_dropdownEditor);
  20. var _handsontableEditor = require('./handsontableEditor');
  21. var _handsontableEditor2 = _interopRequireDefault(_handsontableEditor);
  22. var _mobileTextEditor = require('./mobileTextEditor');
  23. var _mobileTextEditor2 = _interopRequireDefault(_mobileTextEditor);
  24. var _numericEditor = require('./numericEditor');
  25. var _numericEditor2 = _interopRequireDefault(_numericEditor);
  26. var _passwordEditor = require('./passwordEditor');
  27. var _passwordEditor2 = _interopRequireDefault(_passwordEditor);
  28. var _selectEditor = require('./selectEditor');
  29. var _selectEditor2 = _interopRequireDefault(_selectEditor);
  30. var _textEditor = require('./textEditor');
  31. var _textEditor2 = _interopRequireDefault(_textEditor);
  32. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  33. var registeredEditorClasses = new WeakMap(); /**
  34. * Utility to register editors and common namespace for keeping reference to all editor classes
  35. */
  36. var _staticRegister = (0, _staticRegister3.default)('editors'),
  37. register = _staticRegister.register,
  38. getItem = _staticRegister.getItem,
  39. hasItem = _staticRegister.hasItem,
  40. getNames = _staticRegister.getNames,
  41. getValues = _staticRegister.getValues;
  42. _register('base', _baseEditor2.default);
  43. _register('autocomplete', _autocompleteEditor2.default);
  44. _register('checkbox', _checkboxEditor2.default);
  45. _register('date', _dateEditor2.default);
  46. _register('dropdown', _dropdownEditor2.default);
  47. _register('handsontable', _handsontableEditor2.default);
  48. _register('mobile', _mobileTextEditor2.default);
  49. _register('numeric', _numericEditor2.default);
  50. _register('password', _passwordEditor2.default);
  51. _register('select', _selectEditor2.default);
  52. _register('text', _textEditor2.default);
  53. function RegisteredEditor(editorClass) {
  54. var instances = {};
  55. var Clazz = editorClass;
  56. this.getConstructor = function () {
  57. return editorClass;
  58. };
  59. this.getInstance = function (hotInstance) {
  60. if (!(hotInstance.guid in instances)) {
  61. instances[hotInstance.guid] = new Clazz(hotInstance);
  62. }
  63. return instances[hotInstance.guid];
  64. };
  65. _pluginHooks2.default.getSingleton().add('afterDestroy', function () {
  66. instances = {};
  67. });
  68. }
  69. /**
  70. * Returns instance (singleton) of editor class.
  71. *
  72. * @param {String} name Name of an editor under which it has been stored.
  73. * @param {Object} hotInstance Instance of Handsontable.
  74. * @returns {Function} Returns instance of editor.
  75. */
  76. function _getEditorInstance(name, hotInstance) {
  77. var editor = void 0;
  78. if (typeof name === 'function') {
  79. if (!registeredEditorClasses.get(name)) {
  80. _register(null, name);
  81. }
  82. editor = registeredEditorClasses.get(name);
  83. } else if (typeof name === 'string') {
  84. editor = getItem(name);
  85. } else {
  86. throw Error('Only strings and functions can be passed as "editor" parameter');
  87. }
  88. if (!editor) {
  89. throw Error('No editor registered under name "' + name + '"');
  90. }
  91. return editor.getInstance(hotInstance);
  92. }
  93. /**
  94. * Retrieve editor class.
  95. *
  96. * @param {String} name Editor identification.
  97. * @returns {Function} Returns editor class.
  98. */
  99. function _getItem(name) {
  100. if (!hasItem(name)) {
  101. throw Error('No registered editor found under "' + name + '" name');
  102. }
  103. return getItem(name).getConstructor();
  104. }
  105. /**
  106. * Register editor class under specified name.
  107. *
  108. * @param {String} name Editor identification.
  109. * @param {Function} editorClass Editor class.
  110. */
  111. function _register(name, editorClass) {
  112. var editorWrapper = new RegisteredEditor(editorClass);
  113. if (typeof name === 'string') {
  114. register(name, editorWrapper);
  115. }
  116. registeredEditorClasses.set(editorClass, editorWrapper);
  117. }
  118. exports.registerEditor = _register;
  119. exports.getEditor = _getItem;
  120. exports.getEditorInstance = _getEditorInstance;
  121. exports.hasEditor = hasItem;
  122. exports.getRegisteredEditorNames = getNames;
  123. exports.getRegisteredEditors = getValues;