@pie-lib/editable-html-tip-tap 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (167) hide show
  1. package/CHANGELOG.json +32 -0
  2. package/CHANGELOG.md +2280 -0
  3. package/lib/__tests__/editor.test.js +470 -0
  4. package/lib/__tests__/serialization.test.js +246 -0
  5. package/lib/__tests__/utils.js +106 -0
  6. package/lib/block-tags.js +25 -0
  7. package/lib/constants.js +16 -0
  8. package/lib/editor.js +1356 -0
  9. package/lib/extensions/MediaView.js +112 -0
  10. package/lib/extensions/characters.js +65 -0
  11. package/lib/extensions/component.js +325 -0
  12. package/lib/extensions/css.js +252 -0
  13. package/lib/extensions/custom-toolbar-wrapper.js +124 -0
  14. package/lib/extensions/image.js +106 -0
  15. package/lib/extensions/math.js +330 -0
  16. package/lib/extensions/media.js +276 -0
  17. package/lib/extensions/responseArea.js +278 -0
  18. package/lib/index.js +1213 -0
  19. package/lib/old-index.js +269 -0
  20. package/lib/parse-html.js +16 -0
  21. package/lib/plugins/characters/custom-popper.js +73 -0
  22. package/lib/plugins/characters/index.js +305 -0
  23. package/lib/plugins/characters/utils.js +381 -0
  24. package/lib/plugins/css/icons/index.js +37 -0
  25. package/lib/plugins/css/index.js +390 -0
  26. package/lib/plugins/customPlugin/index.js +114 -0
  27. package/lib/plugins/html/icons/index.js +38 -0
  28. package/lib/plugins/html/index.js +81 -0
  29. package/lib/plugins/image/__tests__/component.test.js +51 -0
  30. package/lib/plugins/image/__tests__/image-toolbar-logic.test.js +56 -0
  31. package/lib/plugins/image/__tests__/image-toolbar.test.js +26 -0
  32. package/lib/plugins/image/__tests__/index.test.js +98 -0
  33. package/lib/plugins/image/__tests__/insert-image-handler.test.js +125 -0
  34. package/lib/plugins/image/__tests__/mock-change.js +25 -0
  35. package/lib/plugins/image/alt-dialog.js +129 -0
  36. package/lib/plugins/image/component.js +419 -0
  37. package/lib/plugins/image/image-toolbar.js +177 -0
  38. package/lib/plugins/image/index.js +263 -0
  39. package/lib/plugins/image/insert-image-handler.js +117 -0
  40. package/lib/plugins/index.js +413 -0
  41. package/lib/plugins/list/__tests__/index.test.js +79 -0
  42. package/lib/plugins/list/index.js +334 -0
  43. package/lib/plugins/math/__tests__/index.test.js +300 -0
  44. package/lib/plugins/math/index.js +454 -0
  45. package/lib/plugins/media/__tests__/index.test.js +71 -0
  46. package/lib/plugins/media/index.js +387 -0
  47. package/lib/plugins/media/media-dialog.js +709 -0
  48. package/lib/plugins/media/media-toolbar.js +101 -0
  49. package/lib/plugins/media/media-wrapper.js +93 -0
  50. package/lib/plugins/rendering/index.js +46 -0
  51. package/lib/plugins/respArea/drag-in-the-blank/choice.js +289 -0
  52. package/lib/plugins/respArea/drag-in-the-blank/index.js +94 -0
  53. package/lib/plugins/respArea/explicit-constructed-response/index.js +120 -0
  54. package/lib/plugins/respArea/icons/index.js +95 -0
  55. package/lib/plugins/respArea/index.js +341 -0
  56. package/lib/plugins/respArea/inline-dropdown/index.js +126 -0
  57. package/lib/plugins/respArea/math-templated/index.js +130 -0
  58. package/lib/plugins/respArea/utils.js +125 -0
  59. package/lib/plugins/table/CustomTablePlugin.js +133 -0
  60. package/lib/plugins/table/__tests__/index.test.js +442 -0
  61. package/lib/plugins/table/__tests__/table-toolbar.test.js +54 -0
  62. package/lib/plugins/table/icons/index.js +69 -0
  63. package/lib/plugins/table/index.js +483 -0
  64. package/lib/plugins/table/table-toolbar.js +187 -0
  65. package/lib/plugins/textAlign/icons/index.js +194 -0
  66. package/lib/plugins/textAlign/index.js +34 -0
  67. package/lib/plugins/toolbar/__tests__/default-toolbar.test.js +128 -0
  68. package/lib/plugins/toolbar/__tests__/editor-and-toolbar.test.js +51 -0
  69. package/lib/plugins/toolbar/__tests__/toolbar-buttons.test.js +54 -0
  70. package/lib/plugins/toolbar/__tests__/toolbar.test.js +120 -0
  71. package/lib/plugins/toolbar/default-toolbar.js +229 -0
  72. package/lib/plugins/toolbar/done-button.js +53 -0
  73. package/lib/plugins/toolbar/editor-and-toolbar.js +286 -0
  74. package/lib/plugins/toolbar/index.js +34 -0
  75. package/lib/plugins/toolbar/toolbar-buttons.js +194 -0
  76. package/lib/plugins/toolbar/toolbar.js +376 -0
  77. package/lib/plugins/utils.js +62 -0
  78. package/lib/serialization.js +677 -0
  79. package/lib/shared/alert-dialog.js +75 -0
  80. package/lib/theme.js +9 -0
  81. package/package.json +69 -0
  82. package/src/__tests__/editor.test.jsx +363 -0
  83. package/src/__tests__/serialization.test.js +291 -0
  84. package/src/__tests__/utils.js +36 -0
  85. package/src/block-tags.js +17 -0
  86. package/src/constants.js +7 -0
  87. package/src/editor.jsx +1197 -0
  88. package/src/extensions/characters.js +46 -0
  89. package/src/extensions/component.jsx +294 -0
  90. package/src/extensions/css.js +217 -0
  91. package/src/extensions/custom-toolbar-wrapper.jsx +100 -0
  92. package/src/extensions/image.js +55 -0
  93. package/src/extensions/math.js +259 -0
  94. package/src/extensions/media.js +182 -0
  95. package/src/extensions/responseArea.js +205 -0
  96. package/src/index.jsx +1462 -0
  97. package/src/old-index.jsx +162 -0
  98. package/src/parse-html.js +8 -0
  99. package/src/plugins/README.md +27 -0
  100. package/src/plugins/characters/custom-popper.js +48 -0
  101. package/src/plugins/characters/index.jsx +284 -0
  102. package/src/plugins/characters/utils.js +447 -0
  103. package/src/plugins/css/icons/index.jsx +17 -0
  104. package/src/plugins/css/index.jsx +340 -0
  105. package/src/plugins/customPlugin/index.jsx +85 -0
  106. package/src/plugins/html/icons/index.jsx +19 -0
  107. package/src/plugins/html/index.jsx +72 -0
  108. package/src/plugins/image/__tests__/__snapshots__/component.test.jsx.snap +51 -0
  109. package/src/plugins/image/__tests__/__snapshots__/image-toolbar-logic.test.jsx.snap +27 -0
  110. package/src/plugins/image/__tests__/__snapshots__/image-toolbar.test.jsx.snap +44 -0
  111. package/src/plugins/image/__tests__/component.test.jsx +41 -0
  112. package/src/plugins/image/__tests__/image-toolbar-logic.test.jsx +42 -0
  113. package/src/plugins/image/__tests__/image-toolbar.test.jsx +11 -0
  114. package/src/plugins/image/__tests__/index.test.js +95 -0
  115. package/src/plugins/image/__tests__/insert-image-handler.test.js +113 -0
  116. package/src/plugins/image/__tests__/mock-change.js +15 -0
  117. package/src/plugins/image/alt-dialog.jsx +82 -0
  118. package/src/plugins/image/component.jsx +343 -0
  119. package/src/plugins/image/image-toolbar.jsx +100 -0
  120. package/src/plugins/image/index.jsx +227 -0
  121. package/src/plugins/image/insert-image-handler.js +79 -0
  122. package/src/plugins/index.jsx +377 -0
  123. package/src/plugins/list/__tests__/index.test.js +54 -0
  124. package/src/plugins/list/index.jsx +305 -0
  125. package/src/plugins/math/__tests__/__snapshots__/index.test.jsx.snap +48 -0
  126. package/src/plugins/math/__tests__/index.test.jsx +245 -0
  127. package/src/plugins/math/index.jsx +379 -0
  128. package/src/plugins/media/__tests__/index.test.js +75 -0
  129. package/src/plugins/media/index.jsx +325 -0
  130. package/src/plugins/media/media-dialog.js +624 -0
  131. package/src/plugins/media/media-toolbar.jsx +56 -0
  132. package/src/plugins/media/media-wrapper.jsx +43 -0
  133. package/src/plugins/rendering/index.js +31 -0
  134. package/src/plugins/respArea/drag-in-the-blank/choice.jsx +215 -0
  135. package/src/plugins/respArea/drag-in-the-blank/index.jsx +70 -0
  136. package/src/plugins/respArea/explicit-constructed-response/index.jsx +92 -0
  137. package/src/plugins/respArea/icons/index.jsx +71 -0
  138. package/src/plugins/respArea/index.jsx +299 -0
  139. package/src/plugins/respArea/inline-dropdown/index.jsx +108 -0
  140. package/src/plugins/respArea/math-templated/index.jsx +104 -0
  141. package/src/plugins/respArea/utils.jsx +90 -0
  142. package/src/plugins/table/CustomTablePlugin.js +113 -0
  143. package/src/plugins/table/__tests__/__snapshots__/table-toolbar.test.jsx.snap +44 -0
  144. package/src/plugins/table/__tests__/index.test.jsx +401 -0
  145. package/src/plugins/table/__tests__/table-toolbar.test.jsx +42 -0
  146. package/src/plugins/table/icons/index.jsx +53 -0
  147. package/src/plugins/table/index.jsx +427 -0
  148. package/src/plugins/table/table-toolbar.jsx +136 -0
  149. package/src/plugins/textAlign/icons/index.jsx +114 -0
  150. package/src/plugins/textAlign/index.jsx +23 -0
  151. package/src/plugins/toolbar/__tests__/__snapshots__/default-toolbar.test.jsx.snap +923 -0
  152. package/src/plugins/toolbar/__tests__/__snapshots__/editor-and-toolbar.test.jsx.snap +20 -0
  153. package/src/plugins/toolbar/__tests__/__snapshots__/toolbar-buttons.test.jsx.snap +36 -0
  154. package/src/plugins/toolbar/__tests__/__snapshots__/toolbar.test.jsx.snap +46 -0
  155. package/src/plugins/toolbar/__tests__/default-toolbar.test.jsx +94 -0
  156. package/src/plugins/toolbar/__tests__/editor-and-toolbar.test.jsx +37 -0
  157. package/src/plugins/toolbar/__tests__/toolbar-buttons.test.jsx +51 -0
  158. package/src/plugins/toolbar/__tests__/toolbar.test.jsx +106 -0
  159. package/src/plugins/toolbar/default-toolbar.jsx +206 -0
  160. package/src/plugins/toolbar/done-button.jsx +38 -0
  161. package/src/plugins/toolbar/editor-and-toolbar.jsx +257 -0
  162. package/src/plugins/toolbar/index.jsx +23 -0
  163. package/src/plugins/toolbar/toolbar-buttons.jsx +138 -0
  164. package/src/plugins/toolbar/toolbar.jsx +338 -0
  165. package/src/plugins/utils.js +31 -0
  166. package/src/serialization.jsx +621 -0
  167. package/src/theme.js +1 -0
@@ -0,0 +1,177 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports["default"] = exports.ImageToolbar = void 0;
9
+
10
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
11
+
12
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
13
+
14
+ var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
15
+
16
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
17
+
18
+ var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
19
+
20
+ var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
21
+
22
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
23
+
24
+ var _propTypes = _interopRequireDefault(require("prop-types"));
25
+
26
+ var _react = _interopRequireDefault(require("react"));
27
+
28
+ var _debug = _interopRequireDefault(require("debug"));
29
+
30
+ var _reactDom = _interopRequireDefault(require("react-dom"));
31
+
32
+ var _styles = require("@material-ui/core/styles");
33
+
34
+ var _classnames = _interopRequireDefault(require("classnames"));
35
+
36
+ var _toolbarButtons = require("../toolbar/toolbar-buttons");
37
+
38
+ var _altDialog = _interopRequireDefault(require("./alt-dialog"));
39
+
40
+ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
41
+
42
+ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
43
+
44
+ var log = (0, _debug["default"])('@pie-lib:editable-html:plugins:image:image-toolbar');
45
+
46
+ var AlignmentButton = function AlignmentButton(_ref) {
47
+ var alignment = _ref.alignment,
48
+ active = _ref.active,
49
+ onClick = _ref.onClick;
50
+ return /*#__PURE__*/_react["default"].createElement(_toolbarButtons.MarkButton, {
51
+ active: active,
52
+ onToggle: function onToggle() {
53
+ return onClick(alignment);
54
+ },
55
+ label: alignment
56
+ }, alignment);
57
+ };
58
+
59
+ AlignmentButton.propTypes = {
60
+ alignment: _propTypes["default"].string.isRequired,
61
+ active: _propTypes["default"].bool.isRequired,
62
+ onClick: _propTypes["default"].func.isRequired
63
+ };
64
+
65
+ var ImageToolbar = /*#__PURE__*/function (_React$Component) {
66
+ (0, _inherits2["default"])(ImageToolbar, _React$Component);
67
+
68
+ var _super = _createSuper(ImageToolbar);
69
+
70
+ function ImageToolbar() {
71
+ var _this;
72
+
73
+ (0, _classCallCheck2["default"])(this, ImageToolbar);
74
+
75
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
76
+ args[_key] = arguments[_key];
77
+ }
78
+
79
+ _this = _super.call.apply(_super, [this].concat(args));
80
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onAltTextDone", function (newAlt) {
81
+ log('[onAltTextDone]: alt:', newAlt);
82
+
83
+ _this.props.onChange({
84
+ alt: newAlt
85
+ }, true);
86
+ });
87
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onAlignmentClick", function (alignment) {
88
+ log('[onAlignmentClick]: alignment:', alignment);
89
+
90
+ _this.props.onChange({
91
+ alignment: alignment
92
+ });
93
+ });
94
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "renderDialog", function () {
95
+ var alt = _this.props.alt;
96
+ var popoverEl = document.createElement('div');
97
+
98
+ var el = /*#__PURE__*/_react["default"].createElement(_altDialog["default"], {
99
+ alt: alt,
100
+ onDone: _this.onAltTextDone
101
+ });
102
+
103
+ _reactDom["default"].render(el, popoverEl);
104
+
105
+ document.body.appendChild(popoverEl);
106
+ });
107
+ return _this;
108
+ }
109
+
110
+ (0, _createClass2["default"])(ImageToolbar, [{
111
+ key: "render",
112
+ value: function render() {
113
+ var _classNames,
114
+ _this2 = this;
115
+
116
+ var _this$props = this.props,
117
+ classes = _this$props.classes,
118
+ alignment = _this$props.alignment,
119
+ imageLoaded = _this$props.imageLoaded,
120
+ disableImageAlignmentButtons = _this$props.disableImageAlignmentButtons;
121
+ return /*#__PURE__*/_react["default"].createElement("div", {
122
+ className: classes.holder
123
+ }, !disableImageAlignmentButtons && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(AlignmentButton, {
124
+ alignment: 'left',
125
+ active: alignment === 'left',
126
+ onClick: this.onAlignmentClick
127
+ }), /*#__PURE__*/_react["default"].createElement(AlignmentButton, {
128
+ alignment: 'center',
129
+ active: alignment === 'center',
130
+ onClick: this.onAlignmentClick
131
+ }), /*#__PURE__*/_react["default"].createElement(AlignmentButton, {
132
+ alignment: 'right',
133
+ active: alignment === 'right',
134
+ onClick: this.onAlignmentClick
135
+ })), /*#__PURE__*/_react["default"].createElement("span", {
136
+ className: (0, _classnames["default"])((_classNames = {}, (0, _defineProperty2["default"])(_classNames, classes.disabled, !imageLoaded), (0, _defineProperty2["default"])(_classNames, classes.altButton, !disableImageAlignmentButtons), _classNames)),
137
+ onMouseDown: function onMouseDown(event) {
138
+ return imageLoaded && _this2.renderDialog(event);
139
+ }
140
+ }, "Alt text"));
141
+ }
142
+ }]);
143
+ return ImageToolbar;
144
+ }(_react["default"].Component);
145
+
146
+ exports.ImageToolbar = ImageToolbar;
147
+ (0, _defineProperty2["default"])(ImageToolbar, "propTypes", {
148
+ onChange: _propTypes["default"].func.isRequired,
149
+ classes: _propTypes["default"].object.isRequired,
150
+ alignment: _propTypes["default"].string,
151
+ alt: _propTypes["default"].string,
152
+ imageLoaded: _propTypes["default"].bool,
153
+ disableImageAlignmentButtons: _propTypes["default"].bool
154
+ });
155
+
156
+ var styles = function styles(theme) {
157
+ return {
158
+ holder: {
159
+ paddingLeft: theme.spacing.unit,
160
+ display: 'flex',
161
+ alignItems: 'center'
162
+ },
163
+ disabled: {
164
+ opacity: 0.5
165
+ },
166
+ altButton: {
167
+ borderLeft: '1px solid grey',
168
+ paddingLeft: 8,
169
+ marginLeft: 4
170
+ }
171
+ };
172
+ };
173
+
174
+ var _default = (0, _styles.withStyles)(styles)(ImageToolbar);
175
+
176
+ exports["default"] = _default;
177
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wbHVnaW5zL2ltYWdlL2ltYWdlLXRvb2xiYXIuanN4Il0sIm5hbWVzIjpbImxvZyIsIkFsaWdubWVudEJ1dHRvbiIsImFsaWdubWVudCIsImFjdGl2ZSIsIm9uQ2xpY2siLCJwcm9wVHlwZXMiLCJQcm9wVHlwZXMiLCJzdHJpbmciLCJpc1JlcXVpcmVkIiwiYm9vbCIsImZ1bmMiLCJJbWFnZVRvb2xiYXIiLCJuZXdBbHQiLCJwcm9wcyIsIm9uQ2hhbmdlIiwiYWx0IiwicG9wb3ZlckVsIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiZWwiLCJvbkFsdFRleHREb25lIiwiUmVhY3RET00iLCJyZW5kZXIiLCJib2R5IiwiYXBwZW5kQ2hpbGQiLCJjbGFzc2VzIiwiaW1hZ2VMb2FkZWQiLCJkaXNhYmxlSW1hZ2VBbGlnbm1lbnRCdXR0b25zIiwiaG9sZGVyIiwib25BbGlnbm1lbnRDbGljayIsImRpc2FibGVkIiwiYWx0QnV0dG9uIiwiZXZlbnQiLCJyZW5kZXJEaWFsb2ciLCJSZWFjdCIsIkNvbXBvbmVudCIsIm9iamVjdCIsInN0eWxlcyIsInRoZW1lIiwicGFkZGluZ0xlZnQiLCJzcGFjaW5nIiwidW5pdCIsImRpc3BsYXkiLCJhbGlnbkl0ZW1zIiwib3BhY2l0eSIsImJvcmRlckxlZnQiLCJtYXJnaW5MZWZ0Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBOztBQUNBOzs7Ozs7QUFFQSxJQUFNQSxHQUFHLEdBQUcsdUJBQU0sb0RBQU4sQ0FBWjs7QUFFQSxJQUFNQyxlQUFlLEdBQUcsU0FBbEJBLGVBQWtCLE9BQW9DO0FBQUEsTUFBakNDLFNBQWlDLFFBQWpDQSxTQUFpQztBQUFBLE1BQXRCQyxNQUFzQixRQUF0QkEsTUFBc0I7QUFBQSxNQUFkQyxPQUFjLFFBQWRBLE9BQWM7QUFDMUQsc0JBQ0UsZ0NBQUMsMEJBQUQ7QUFBWSxJQUFB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RUF0RCtCRSxrQkFBTUMsUzs7O2lDQUEzQnhCLFksZUFDUTtBQUNqQkcsRUFBQUEsUUFBUSxFQUFFUixzQkFBVUksSUFBVixDQUFlRixVQURSO0FBRWpCaUIsRUFBQUEsT0FBTyxFQUFFbkIsc0JBQVU4QixNQUFWLENBQWlCNUIsVUFGVDtBQUdqQk4sRUFBQUEsU0FBUyxFQUFFSSxzQkFBVUMsTUFISjtBQUlqQlEsRUFBQUEsR0FBRyxFQUFFVCxzQkFBVUMsTUFKRTtBQUtqQm1CLEVBQUFBLFdBQVcsRUFBRXBCLHNCQUFVRyxJQUxOO0FBTWpCa0IsRUFBQUEsNEJBQTRCLEVBQUVyQixzQkFBVUc7QUFOdkIsQzs7QUF3RHJCLElBQU00QixNQUFNLEdBQUcsU0FBVEEsTUFBUyxDQUFDQyxLQUFEO0FBQUEsU0FBWTtBQUN6QlYsSUFBQUEsTUFBTSxFQUFFO0FBQ05XLE1BQUFBLFdBQVcsRUFBRUQsS0FBSyxDQUFDRSxPQUFOLENBQWNDLElBRHJCO0FBRU5DLE1BQUFBLE9BQU8sRUFBRSxNQUZIO0FBR05DLE1BQUFBLFVBQVUsRUFBRTtBQUhOLEtBRGlCO0FBTXpCYixJQUFBQSxRQUFRLEVBQUU7QUFDUmMsTUFBQUEsT0FBTyxFQUFFO0FBREQsS0FOZTtBQVN6QmIsSUFBQUEsU0FBUyxFQUFFO0FBQ1RjLE1BQUFBLFVBQVUsRUFBRSxnQkFESDtBQUVUTixNQUFBQSxXQUFXLEVBQUUsQ0FGSjtBQUdUTyxNQUFBQSxVQUFVLEVBQUU7QUFISDtBQVRjLEdBQVo7QUFBQSxDQUFmOztlQWdCZSx3QkFBV1QsTUFBWCxFQUFtQjFCLFlBQW5CLEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBkZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQgUmVhY3RET00gZnJvbSAncmVhY3QtZG9tJztcbmltcG9ydCB7IHdpdGhTdHlsZXMgfSBmcm9tICdAbWF0ZXJpYWwtdWkvY29yZS9zdHlsZXMnO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5cbmltcG9ydCB7IE1hcmtCdXR0b24gfSBmcm9tICcuLi90b29sYmFyL3Rvb2xiYXItYnV0dG9ucyc7XG5pbXBvcnQgQWx0RGlhbG9nIGZyb20gJy4vYWx0LWRpYWxvZyc7XG5cbmNvbnN0IGxvZyA9IGRlYnVnKCdAcGllLWxpYjplZGl0YWJsZS1odG1sOnBsdWdpbnM6aW1hZ2U6aW1hZ2UtdG9vbGJhcicpO1xuXG5jb25zdCBBbGlnbm1lbnRCdXR0b24gPSAoeyBhbGlnbm1lbnQsIGFjdGl2ZSwgb25DbGljayB9KSA9PiB7XG4gIHJldHVybiAoXG4gICAgPE1hcmtCdXR0b24gYWN0aXZlPXthY3RpdmV9IG9uVG9nZ2xlPXsoKSA9PiBvbkNsaWNrKGFsaWdubWVudCl9IGxhYmVsPXthbGlnbm1lbnR9PlxuICAgICAge2FsaWdubWVudH1cbiAgICA8L01hcmtCdXR0b24+XG4gICk7XG59O1xuXG5BbGlnbm1lbnRCdXR0b24ucHJvcFR5cGVzID0ge1xuICBhbGlnbm1lbnQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgYWN0aXZlOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxufTtcblxuZXhwb3J0IGNsYXNzIEltYWdlVG9vbGJhciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuICAgIGFsaWdubWVudDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBhbHQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgaW1hZ2VMb2FkZWQ6IFByb3BUeXBlcy5ib29sLFxuICAgIGRpc2FibGVJbWFnZUFsaWdubWVudEJ1dHRvbnM6IFByb3BUeXBlcy5ib29sLFxuICB9O1xuXG4gIG9uQWx0VGV4dERvbmUgPSAobmV3QWx0KSA9PiB7XG4gICAgbG9nKCdbb25BbHRUZXh0RG9uZV06IGFsdDonLCBuZXdBbHQpO1xuXG4gICAgdGhpcy5wcm9wcy5vbkNoYW5nZSh7IGFsdDogbmV3QWx0IH0sIHRydWUpO1xuICB9O1xuXG4gIG9uQWxpZ25tZW50Q2xpY2sgPSAoYWxpZ25tZW50KSA9PiB7XG4gICAgbG9nKCdbb25BbGlnbm1lbnRDbGlja106IGFsaWdubWVudDonLCBhbGlnbm1lbnQpO1xuICAgIHRoaXMucHJvcHMub25DaGFuZ2UoeyBhbGlnbm1lbnQgfSk7XG4gIH07XG5cbiAgcmVuZGVyRGlhbG9nID0gKCkgPT4ge1xuICAgIGNvbnN0IHsgYWx0IH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHBvcG92ZXJFbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuXG4gICAgY29uc3QgZWwgPSA8QWx0RGlhbG9nIGFsdD17YWx0fSBvbkRvbmU9e3RoaXMub25BbHRUZXh0RG9uZX0gLz47XG5cbiAgICBSZWFjdERPTS5yZW5kZXIoZWwsIHBvcG92ZXJFbCk7XG5cbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHBvcG92ZXJFbCk7XG4gIH07XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHsgY2xhc3NlcywgYWxpZ25tZW50LCBpbWFnZUxvYWRlZCwgZGlzYWJsZUltYWdlQWxpZ25tZW50QnV0dG9ucyB9ID0gdGhpcy5wcm9wcztcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzZXMuaG9sZGVyfT5cbiAgICAgICAgeyFkaXNhYmxlSW1hZ2VBbGlnbm1lbnRCdXR0b25zICYmIChcbiAgICAgICAgICA8PlxuICAgICAgICAgICAgPEFsaWdubWVudEJ1dHRvbiBhbGlnbm1lbnQ9eydsZWZ0J30gYWN0aXZlPXthbGlnbm1lbnQgPT09ICdsZWZ0J30gb25DbGljaz17dGhpcy5vbkFsaWdubWVudENsaWNrfSAvPlxuICAgICAgICAgICAgPEFsaWdubWVudEJ1dHRvbiBhbGlnbm1lbnQ9eydjZW50ZXInfSBhY3RpdmU9e2FsaWdubWVudCA9PT0gJ2NlbnRlcid9IG9uQ2xpY2s9e3RoaXMub25BbGlnbm1lbnRDbGlja30gLz5cbiAgICAgICAgICAgIDxBbGlnbm1lbnRCdXR0b24gYWxpZ25tZW50PXsncmlnaHQnfSBhY3RpdmU9e2FsaWdubWVudCA9PT0gJ3JpZ2h0J30gb25DbGljaz17dGhpcy5vbkFsaWdubWVudENsaWNrfSAvPlxuICAgICAgICAgIDwvPlxuICAgICAgICApfVxuICAgICAgICA8c3BhblxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyh7XG4gICAgICAgICAgICBbY2xhc3Nlcy5kaXNhYmxlZF06ICFpbWFnZUxvYWRlZCxcbiAgICAgICAgICAgIFtjbGFzc2VzLmFsdEJ1dHRvbl06ICFkaXNhYmxlSW1hZ2VBbGlnbm1lbnRCdXR0b25zLFxuICAgICAgICAgIH0pfVxuICAgICAgICAgIG9uTW91c2VEb3duPXsoZXZlbnQpID0+IGltYWdlTG9hZGVkICYmIHRoaXMucmVuZGVyRGlhbG9nKGV2ZW50KX1cbiAgICAgICAgPlxuICAgICAgICAgIEFsdCB0ZXh0XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuY29uc3Qgc3R5bGVzID0gKHRoZW1lKSA9PiAoe1xuICBob2xkZXI6IHtcbiAgICBwYWRkaW5nTGVmdDogdGhlbWUuc3BhY2luZy51bml0LFxuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgfSxcbiAgZGlzYWJsZWQ6IHtcbiAgICBvcGFjaXR5OiAwLjUsXG4gIH0sXG4gIGFsdEJ1dHRvbjoge1xuICAgIGJvcmRlckxlZnQ6ICcxcHggc29saWQgZ3JleScsXG4gICAgcGFkZGluZ0xlZnQ6IDgsXG4gICAgbWFyZ2luTGVmdDogNCxcbiAgfSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCB3aXRoU3R5bGVzKHN0eWxlcykoSW1hZ2VUb29sYmFyKTtcbiJdfQ==
@@ -0,0 +1,263 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports["default"] = ImagePlugin;
9
+ exports.serialization = void 0;
10
+
11
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
12
+
13
+ var _slate = require("slate");
14
+
15
+ var _Image = _interopRequireDefault(require("@material-ui/icons/Image"));
16
+
17
+ var _component = _interopRequireDefault(require("./component"));
18
+
19
+ var _imageToolbar = _interopRequireDefault(require("./image-toolbar"));
20
+
21
+ var _insertImageHandler = _interopRequireDefault(require("./insert-image-handler"));
22
+
23
+ var _react = _interopRequireDefault(require("react"));
24
+
25
+ var _debug = _interopRequireDefault(require("debug"));
26
+
27
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
28
+
29
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
30
+
31
+ var log = (0, _debug["default"])('@pie-lib:editable-html:plugins:image');
32
+
33
+ function ImagePlugin(opts) {
34
+ var toolbar = opts.insertImageRequested && {
35
+ icon: /*#__PURE__*/_react["default"].createElement(_Image["default"], null),
36
+ ariaLabel: 'Insert Image',
37
+ onClick: function onClick(value, onChange) {
38
+ log('[toolbar] onClick');
39
+
40
+ var inline = _slate.Inline.create({
41
+ type: 'image',
42
+ isVoid: true,
43
+ data: {
44
+ loaded: false,
45
+ src: undefined
46
+ }
47
+ });
48
+
49
+ var change = value.change().insertInline(inline);
50
+ onChange(change);
51
+ opts.insertImageRequested(inline, function (onFinish, getValue) {
52
+ return new _insertImageHandler["default"](inline, onFinish, getValue, onChange);
53
+ });
54
+ },
55
+ supports: function supports(node) {
56
+ return node.object === 'inline' && node.type === 'image';
57
+ },
58
+ customToolbar: function customToolbar(node, value, onToolbarDone) {
59
+ var alignment = node.data.get('alignment');
60
+ var alt = node.data.get('alt');
61
+ var imageLoaded = node.data.get('loaded') !== false;
62
+
63
+ var onChange = function onChange(newValues, done) {
64
+ var update = _objectSpread(_objectSpread({}, node.data.toObject()), newValues);
65
+
66
+ var change = value.change().setNodeByKey(node.key, {
67
+ data: update
68
+ });
69
+ onToolbarDone(change, done);
70
+ };
71
+
72
+ var Tb = function Tb() {
73
+ return /*#__PURE__*/_react["default"].createElement(_imageToolbar["default"], {
74
+ disableImageAlignmentButtons: opts.disableImageAlignmentButtons,
75
+ alt: alt,
76
+ imageLoaded: imageLoaded,
77
+ alignment: alignment || 'left',
78
+ onChange: onChange
79
+ });
80
+ };
81
+
82
+ return Tb;
83
+ },
84
+ showDone: true
85
+ };
86
+ return {
87
+ name: 'image',
88
+ toolbar: toolbar,
89
+ deleteNode: function deleteNode(e, node, value, onChange) {
90
+ e.preventDefault();
91
+
92
+ if (opts.onDelete) {
93
+ var update = node.data.merge(_slate.Data.create({
94
+ deleteStatus: 'pending'
95
+ }));
96
+ var change = value.change().setNodeByKey(node.key, {
97
+ data: update
98
+ });
99
+ onChange(change);
100
+ opts.onDelete(node, function (err, v) {
101
+ if (!err) {
102
+ change = v.change().removeNodeByKey(node.key);
103
+ } else {
104
+ log('[error]: ', err);
105
+ change = v.change().setNodeByKey(node.key, node.data.merge(_slate.Data.create({
106
+ deleteStatus: 'failed'
107
+ })));
108
+ }
109
+
110
+ onChange(change);
111
+ });
112
+ } else {
113
+ var _change = value.change().removeNodeByKey(node.key);
114
+
115
+ onChange(_change);
116
+ }
117
+ },
118
+ stopReset: function stopReset(value) {
119
+ var imgPendingInsertion = value.document.findDescendant(function (n) {
120
+ if (n.type !== 'image') {
121
+ return;
122
+ }
123
+
124
+ return n.data.get('loaded') === false;
125
+ });
126
+ /** don't reset if there is an image pending insertion */
127
+
128
+ return imgPendingInsertion !== undefined && imgPendingInsertion !== null;
129
+ },
130
+ renderNode: function renderNode(props) {
131
+ if (props.node.type === 'image') {
132
+ var all = Object.assign({
133
+ onDelete: opts.onDelete,
134
+ onFocus: opts.onFocus,
135
+ onBlur: opts.onBlur,
136
+ maxImageWidth: opts.maxImageWidth,
137
+ maxImageHeight: opts.maxImageHeight
138
+ }, props);
139
+ return /*#__PURE__*/_react["default"].createElement(_component["default"], all);
140
+ }
141
+ },
142
+ normalizeNode: function normalizeNode(node) {
143
+ var textNodeMap = {};
144
+ var updateNodesArray = [];
145
+ var index = 0;
146
+ if (node.object !== 'document') return;
147
+ node.findDescendant(function (d) {
148
+ if (d.object === 'text') {
149
+ textNodeMap[index] = d;
150
+ }
151
+
152
+ if (d.type === 'image') {
153
+ if (index > 0 && textNodeMap[index - 1] && textNodeMap[index - 1].text === '') {
154
+ updateNodesArray.push(textNodeMap[index - 1]);
155
+ }
156
+ }
157
+
158
+ index++;
159
+ });
160
+ if (!updateNodesArray.length) return;
161
+ return function (change) {
162
+ change.withoutNormalization(function () {
163
+ updateNodesArray.forEach(function (n) {
164
+ return change.insertTextByKey(n.key, 0, ' ');
165
+ });
166
+ });
167
+ };
168
+ }
169
+ };
170
+ }
171
+
172
+ var serialization = {
173
+ deserialize: function deserialize(el
174
+ /*, next*/
175
+ ) {
176
+ var name = el.tagName.toLowerCase();
177
+ if (name !== 'img') return;
178
+ log('deserialize: ', name);
179
+ var style = el.style || {
180
+ width: '',
181
+ height: '',
182
+ margin: '',
183
+ justifyContent: ''
184
+ };
185
+ var width = parseInt(style.width.replace('px', ''), 10) || null;
186
+ var height = parseInt(style.height.replace('px', ''), 10) || null;
187
+ var out = {
188
+ object: 'inline',
189
+ type: 'image',
190
+ isVoid: true,
191
+ data: {
192
+ src: el.getAttribute('src'),
193
+ width: width,
194
+ height: height,
195
+ margin: el.style.margin,
196
+ justifyContent: el.style.justifyContent,
197
+ alignment: el.getAttribute('alignment'),
198
+ alt: el.getAttribute('alt')
199
+ }
200
+ };
201
+ log('return object: ', out);
202
+ return out;
203
+ },
204
+ serialize: function serialize(object
205
+ /*, children*/
206
+ ) {
207
+ if (object.type !== 'image') return;
208
+ var data = object.data;
209
+ var src = data.get('src');
210
+ var width = data.get('width');
211
+ var height = data.get('height');
212
+ var alignment = data.get('alignment') || 'left';
213
+ var margin = data.get('margin');
214
+ var justifyContent = data.get('margin');
215
+ var alt = data.get('alt');
216
+ var style = {};
217
+
218
+ if (width) {
219
+ style.width = "".concat(width, "px");
220
+ }
221
+
222
+ if (height) {
223
+ style.height = "".concat(height, "px");
224
+ }
225
+
226
+ style.margin = margin;
227
+ style.justifyContent = justifyContent;
228
+
229
+ if (alignment) {
230
+ switch (alignment) {
231
+ case 'left':
232
+ style.justifyContent = 'flex-start';
233
+ style.margin = '0';
234
+ break;
235
+
236
+ case 'center':
237
+ style.justifyContent = 'center';
238
+ style.margin = '0 auto';
239
+ break;
240
+
241
+ case 'right':
242
+ style.justifyContent = 'flex-end';
243
+ style.margin = 'auto 0 0 auto';
244
+ break;
245
+
246
+ default:
247
+ style.justifyContent = 'flex-start';
248
+ break;
249
+ }
250
+ }
251
+
252
+ style.objectFit = 'contain';
253
+ var props = {
254
+ src: src,
255
+ style: style,
256
+ alignment: alignment,
257
+ alt: alt
258
+ };
259
+ return /*#__PURE__*/_react["default"].createElement("img", props);
260
+ }
261
+ };
262
+ exports.serialization = serialization;
263
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wbHVnaW5zL2ltYWdlL2luZGV4LmpzeCJdLCJuYW1lcyI6WyJsb2ciLCJJbWFnZVBsdWdpbiIsIm9wdHMiLCJ0b29sYmFyIiwiaW5zZXJ0SW1hZ2VSZXF1ZXN0ZWQiLCJpY29uIiwiYXJpYUxhYmVsIiwib25DbGljayIsInZhbHVlIiwib25DaGFuZ2UiLCJpbmxpbmUiLCJJbmxpbmUiLCJjcmVhdGUiLCJ0eXBlIiwiaXNWb2lkIiwiZGF0YSIsImxvYWRlZCIsInNyYyIsInVuZGVmaW5lZCIsImNoYW5nZSIsImluc2VydElubGluZSIsIm9uRmluaXNoIiwiZ2V0VmFsdWUiLCJJbnNlcnRJbWFnZUhhbmRsZXIiLCJzdXBwb3J0cyIsIm5vZGUiLCJvYmplY3QiLCJjdXN0b21Ub29sYmFyIiwib25Ub29sYmFyRG9uZSIsImFsaWdubWVudCIsImdldCIsImFsdCIsImltYWdlTG9hZGVkIiwibmV3VmFsdWVzIiwiZG9uZSIsInVwZGF0ZSIsInRvT2JqZWN0Iiwic2V0Tm9kZUJ5S2V5Iiwia2V5IiwiVGIiLCJkaXNhYmxlSW1hZ2VBbGlnbm1lbnRCdXR0b25zIiwic2hvd0RvbmUiLCJuYW1lIiwiZGVsZXRlTm9kZSIsImUiLCJwcmV2ZW50RGVmYXVsdCIsIm9uRGVsZXRlIiwibWVyZ2UiLCJEYXRhIiwiZGVsZXRlU3RhdHVzIiwiZXJyIiwidiIsInJlbW92ZU5vZGVCeUtleSIsInN0b3BSZXNldCIsImltZ1BlbmRpbmdJbnNlcnRpb24iLCJkb2N1bWVudCIsImZpbmREZXNjZW5kYW50IiwibiIsInJlbmRlck5vZGUiLCJwcm9wcyIsImFsbCIsIk9iamVjdCIsImFzc2lnbiIsIm9uRm9jdXMiLCJvbkJsdXIiLCJtYXhJbWFnZVdpZHRoIiwibWF4SW1hZ2VIZWlnaHQiLCJub3JtYWxpemVOb2RlIiwidGV4dE5vZGVNYXAiLCJ1cGRhdGVOb2Rlc0FycmF5IiwiaW5kZXgiLCJkIiwidGV4dCIsInB1c2giLCJsZW5ndGgiLCJ3aXRob3V0Tm9ybWFsaXphdGlvbiIsImZvckVhY2giLCJpbnNlcnRUZXh0QnlLZXkiLCJzZXJpYWxpemF0aW9uIiwiZGVzZXJpYWxpemUiLCJlbCIsInRhZ05hbWUiLCJ0b0xvd2VyQ2FzZSIsInN0eWxlIiwid2lkdGgiLCJoZWlnaHQiLCJtYXJnaW4iLCJqdXN0aWZ5Q29udGVudCIsInBhcnNlSW50IiwicmVwbGFjZSIsIm91dCIsImdldEF0dHJpYnV0ZSIsInNlcmlhbGl6ZSIsIm9iamVjdEZpdCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUE7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7OztBQUVBLElBQU1BLEdBQUcsR0FBRyx1QkFBTSxzQ0FBTixDQUFaOztBQUVlLFNBQVNDLFdBQVQsQ0FBcUJDLElBQXJCLEVBQTJCO0FBQ3hDLE1BQU1DLE9BQU8sR0FBR0QsSUFBSSxDQUFDRSxvQkFBTCxJQUE2QjtBQUMzQ0MsSUFBQUEsSUFBSSxlQUFFLGdDQUFDLGlCQUFELE9BRHFDO0FBRTNDQyxJQUFBQSxTQUFTLEVBQUUsY0FGZ0M7QUFHM0NDLElBQUFBLE9BQU8sRUFBRSxpQkFBQ0MsS0FBRCxFQUFRQyxRQUFSLEVBQXFCO0FBQzVCVCxNQUFBQSxHQUFHLENBQUMsbUJBQUQsQ0FBSDs7QUFDQSxVQUFNVSxNQUFNLEdBQUdDLGNBQU9DLE1BQVAsQ0FBYztBQUMzQkMsUUFBQUEsSUFBSSxFQUFFLE9BRHFCO0FBRTNCQyxRQUFBQSxNQUFNLEVBQUUsSUFGbUI7QUFHM0JDLFFBQUFBLElBQUksRUFBRTtBQUNKQyxVQUFBQSxNQUFNLEVBQUUsS0FESjtBQUVKQyxVQUFBQSxHQUFHLEVBQUVDO0FBRkQ7QUFIcUIsT0FBZCxDQUFmOztBQVNBLFVBQU1DLE1BQU0sR0FBR1gsS0FBSyxDQUFDVyxNQUFOLEdBQWVDLFlBQWYsQ0FBNEJWLE1BQTVCLENBQWY7QUFFQUQsTUFBQUEsUUFBUSxDQUFDVSxNQUFELENBQVI7QUFDQWpCLE1BQUFBLElBQUksQ0FBQ0Usb0JBQUwsQ0FDRU0sTUFERixFQUVFLFVB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SEEsR0FEWTtBQUVaa0UsTUFBQUEsS0FBSyxFQUFMQSxLQUZZO0FBR1p0RCxNQUFBQSxTQUFTLEVBQVRBLFNBSFk7QUFJWkUsTUFBQUEsR0FBRyxFQUFIQTtBQUpZLEtBQWQ7QUFPQSx3QkFBTyx1Q0FBUzRCLEtBQVQsQ0FBUDtBQUNEO0FBaEYwQixDQUF0QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERhdGEsIElubGluZSB9IGZyb20gJ3NsYXRlJztcblxuaW1wb3J0IEltYWdlIGZyb20gJ0BtYXRlcmlhbC11aS9pY29ucy9JbWFnZSc7XG5pbXBvcnQgSW1hZ2VDb21wb25lbnQgZnJvbSAnLi9jb21wb25lbnQnO1xuaW1wb3J0IEltYWdlVG9vbGJhciBmcm9tICcuL2ltYWdlLXRvb2xiYXInO1xuaW1wb3J0IEluc2VydEltYWdlSGFuZGxlciBmcm9tICcuL2luc2VydC1pbWFnZS1oYW5kbGVyJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuXG5jb25zdCBsb2cgPSBkZWJ1ZygnQHBpZS1saWI6ZWRpdGFibGUtaHRtbDpwbHVnaW5zOmltYWdlJyk7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEltYWdlUGx1Z2luKG9wdHMpIHtcbiAgY29uc3QgdG9vbGJhciA9IG9wdHMuaW5zZXJ0SW1hZ2VSZXF1ZXN0ZWQgJiYge1xuICAgIGljb246IDxJbWFnZSAvPixcbiAgICBhcmlhTGFiZWw6ICdJbnNlcnQgSW1hZ2UnLFxuICAgIG9uQ2xpY2s6ICh2YWx1ZSwgb25DaGFuZ2UpID0+IHtcbiAgICAgIGxvZygnW3Rvb2xiYXJdIG9uQ2xpY2snKTtcbiAgICAgIGNvbnN0IGlubGluZSA9IElubGluZS5jcmVhdGUoe1xuICAgICAgICB0eXBlOiAnaW1hZ2UnLFxuICAgICAgICBpc1ZvaWQ6IHRydWUsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBsb2FkZWQ6IGZhbHNlLFxuICAgICAgICAgIHNyYzogdW5kZWZpbmVkLFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGNoYW5nZSA9IHZhbHVlLmNoYW5nZSgpLmluc2VydElubGluZShpbmxpbmUpO1xuXG4gICAgICBvbkNoYW5nZShjaGFuZ2UpO1xuICAgICAgb3B0cy5pbnNlcnRJbWFnZVJlcXVlc3RlZChcbiAgICAgICAgaW5saW5lLFxuICAgICAgICAob25GaW5pc2gsIGdldFZhbHVlKSA9PiBuZXcgSW5zZXJ0SW1hZ2VIYW5kbGVyKGlubGluZSwgb25GaW5pc2gsIGdldFZhbHVlLCBvbkNoYW5nZSksXG4gICAgICApO1xuICAgIH0sXG4gICAgc3VwcG9ydHM6IChub2RlKSA9PiBub2RlLm9iamVjdCA9PT0gJ2lubGluZScgJiYgbm9kZS50eXBlID09PSAnaW1hZ2UnLFxuICAgIGN1c3RvbVRvb2xiYXI6IChub2RlLCB2YWx1ZSwgb25Ub29sYmFyRG9uZSkgPT4ge1xuICAgICAgY29uc3QgYWxpZ25tZW50ID0gbm9kZS5kYXRhLmdldCgnYWxpZ25tZW50Jyk7XG4gICAgICBjb25zdCBhbHQgPSBub2RlLmRhdGEuZ2V0KCdhbHQnKTtcbiAgICAgIGNvbnN0IGltYWdlTG9hZGVkID0gbm9kZS5kYXRhLmdldCgnbG9hZGVkJykgIT09IGZhbHNlO1xuICAgICAgY29uc3Qgb25DaGFuZ2UgPSAobmV3VmFsdWVzLCBkb25lKSA9PiB7XG4gICAgICAgIGNvbnN0IHVwZGF0ZSA9IHtcbiAgICAgICAgICAuLi5ub2RlLmRhdGEudG9PYmplY3QoKSxcbiAgICAgICAgICAuLi5uZXdWYWx1ZXMsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgY2hhbmdlID0gdmFsdWUuY2hhbmdlKCkuc2V0Tm9kZUJ5S2V5KG5vZGUua2V5LCB7IGRhdGE6IHVwZGF0ZSB9KTtcbiAgICAgICAgb25Ub29sYmFyRG9uZShjaGFuZ2UsIGRvbmUpO1xuICAgICAgfTtcblxuICAgICAgY29uc3QgVGIgPSAoKSA9PiAoXG4gICAgICAgIDxJbWFnZVRvb2xiYXJcbiAgICAgICAgICBkaXNhYmxlSW1hZ2VBbGlnbm1lbnRCdXR0b25zPXtvcHRzLmRpc2FibGVJbWFnZUFsaWdubWVudEJ1dHRvbnN9XG4gICAgICAgICAgYWx0PXthbHR9XG4gICAgICAgICAgaW1hZ2VMb2FkZWQ9e2ltYWdlTG9hZGVkfVxuICAgICAgICAgIGFsaWdubWVudD17YWxpZ25tZW50IHx8ICdsZWZ0J31cbiAgICAgICAgICBvbkNoYW5nZT17b25DaGFuZ2V9XG4gICAgICAgIC8+XG4gICAgICApO1xuICAgICAgcmV0dXJuIFRiO1xuICAgIH0sXG4gICAgc2hvd0RvbmU6IHRydWUsXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnaW1hZ2UnLFxuICAgIHRvb2xiYXIsXG4gICAgZGVsZXRlTm9kZTogKGUsIG5vZGUsIHZhbHVlLCBvbkNoYW5nZSkgPT4ge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgaWYgKG9wdHMub25EZWxldGUpIHtcbiAgICAgICAgY29uc3QgdXBkYXRlID0gbm9kZS5kYXRhLm1lcmdlKERhdGEuY3JlYXRlKHsgZGVsZXRlU3RhdHVzOiAncGVuZGluZycgfSkpO1xuXG4gICAgICAgIGxldCBjaGFuZ2UgPSB2YWx1ZS5jaGFuZ2UoKS5zZXROb2RlQnlLZXkobm9kZS5rZXksIHsgZGF0YTogdXBkYXRlIH0pO1xuXG4gICAgICAgIG9uQ2hhbmdlKGNoYW5nZSk7XG4gICAgICAgIG9wdHMub25EZWxldGUobm9kZSwgKGVyciwgdikgPT4ge1xuICAgICAgICAgIGlmICghZXJyKSB7XG4gICAgICAgICAgICBjaGFuZ2UgPSB2LmNoYW5nZSgpLnJlbW92ZU5vZGVCeUtleShub2RlLmtleSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxvZygnW2Vycm9yXTogJywgZXJyKTtcbiAgICAgICAgICAgIGNoYW5nZSA9IHYuY2hhbmdlKCkuc2V0Tm9kZUJ5S2V5KG5vZGUua2V5LCBub2RlLmRhdGEubWVyZ2UoRGF0YS5jcmVhdGUoeyBkZWxldGVTdGF0dXM6ICdmYWlsZWQnIH0pKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIG9uQ2hhbmdlKGNoYW5nZSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IGNoYW5nZSA9IHZhbHVlLmNoYW5nZSgpLnJlbW92ZU5vZGVCeUtleShub2RlLmtleSk7XG4gICAgICAgIG9uQ2hhbmdlKGNoYW5nZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBzdG9wUmVzZXQ6ICh2YWx1ZSkgPT4ge1xuICAgICAgY29uc3QgaW1nUGVuZGluZ0luc2VydGlvbiA9IHZhbHVlLmRvY3VtZW50LmZpbmREZXNjZW5kYW50KChuKSA9PiB7XG4gICAgICAgIGlmIChuLnR5cGUgIT09ICdpbWFnZScpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG4uZGF0YS5nZXQoJ2xvYWRlZCcpID09PSBmYWxzZTtcbiAgICAgIH0pO1xuICAgICAgLyoqIGRvbid0IHJlc2V0IGlmIHRoZXJlIGlzIGFuIGltYWdlIHBlbmRpbmcgaW5zZXJ0aW9uICovXG4gICAgICByZXR1cm4gaW1nUGVuZGluZ0luc2VydGlvbiAhPT0gdW5kZWZpbmVkICYmIGltZ1BlbmRpbmdJbnNlcnRpb24gIT09IG51bGw7XG4gICAgfSxcbiAgICByZW5kZXJOb2RlKHByb3BzKSB7XG4gICAgICBpZiAocHJvcHMubm9kZS50eXBlID09PSAnaW1hZ2UnKSB7XG4gICAgICAgIGNvbnN0IGFsbCA9IE9iamVjdC5hc3NpZ24oXG4gICAgICAgICAge1xuICAgICAgICAgICAgb25EZWxldGU6IG9wdHMub25EZWxldGUsXG4gICAgICAgICAgICBvbkZvY3VzOiBvcHRzLm9uRm9jdXMsXG4gICAgICAgICAgICBvbkJsdXI6IG9wdHMub25CbHVyLFxuICAgICAgICAgICAgbWF4SW1hZ2VXaWR0aDogb3B0cy5tYXhJbWFnZVdpZHRoLFxuICAgICAgICAgICAgbWF4SW1hZ2VIZWlnaHQ6IG9wdHMubWF4SW1hZ2VIZWlnaHQsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwcm9wcyxcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIDxJbWFnZUNvbXBvbmVudCB7Li4uYWxsfSAvPjtcbiAgICAgIH1cbiAgICB9LFxuICAgIG5vcm1hbGl6ZU5vZGU6IChub2RlKSA9PiB7XG4gICAgICBjb25zdCB0ZXh0Tm9kZU1hcCA9IHt9O1xuICAgICAgY29uc3QgdXBkYXRlTm9kZXNBcnJheSA9IFtdO1xuICAgICAgbGV0IGluZGV4ID0gMDtcblxuICAgICAgaWYgKG5vZGUub2JqZWN0ICE9PSAnZG9jdW1lbnQnKSByZXR1cm47XG5cbiAgICAgIG5vZGUuZmluZERlc2NlbmRhbnQoKGQpID0+IHtcbiAgICAgICAgaWYgKGQub2JqZWN0ID09PSAndGV4dCcpIHtcbiAgICAgICAgICB0ZXh0Tm9kZU1hcFtpbmRleF0gPSBkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGQudHlwZSA9PT0gJ2ltYWdlJykge1xuICAgICAgICAgIGlmIChpbmRleCA+IDAgJiYgdGV4dE5vZGVNYXBbaW5kZXggLSAxXSAmJiB0ZXh0Tm9kZU1hcFtpbmRleCAtIDFdLnRleHQgPT09ICcnKSB7XG4gICAgICAgICAgICB1cGRhdGVOb2Rlc0FycmF5LnB1c2godGV4dE5vZGVNYXBbaW5kZXggLSAxXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaW5kZXgrKztcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoIXVwZGF0ZU5vZGVzQXJyYXkubGVuZ3RoKSByZXR1cm47XG5cbiAgICAgIHJldHVybiAoY2hhbmdlKSA9PiB7XG4gICAgICAgIGNoYW5nZS53aXRob3V0Tm9ybWFsaXphdGlvbigoKSA9PiB7XG4gICAgICAgICAgdXBkYXRlTm9kZXNBcnJheS5mb3JFYWNoKChuKSA9PiBjaGFuZ2UuaW5zZXJ0VGV4dEJ5S2V5KG4ua2V5LCAwLCAnICcpKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgIH0sXG4gIH07XG59XG5cbmV4cG9ydCBjb25zdCBzZXJpYWxpemF0aW9uID0ge1xuICBkZXNlcmlhbGl6ZShlbCAvKiwgbmV4dCovKSB7XG4gICAgY29uc3QgbmFtZSA9IGVsLnRhZ05hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAobmFtZSAhPT0gJ2ltZycpIHJldHVybjtcblxuICAgIGxvZygnZGVzZXJpYWxpemU6ICcsIG5hbWUpO1xuICAgIGNvbnN0IHN0eWxlID0gZWwuc3R5bGUgfHwgeyB3aWR0aDogJycsIGhlaWdodDogJycsIG1hcmdpbjogJycsIGp1c3RpZnlDb250ZW50OiAnJyB9O1xuICAgIGNvbnN0IHdpZHRoID0gcGFyc2VJbnQoc3R5bGUud2lkdGgucmVwbGFjZSgncHgnLCAnJyksIDEwKSB8fCBudWxsO1xuICAgIGNvbnN0IGhlaWdodCA9IHBhcnNlSW50KHN0eWxlLmhlaWdodC5yZXBsYWNlKCdweCcsICcnKSwgMTApIHx8IG51bGw7XG5cbiAgICBjb25zdCBvdXQgPSB7XG4gICAgICBvYmplY3Q6ICdpbmxpbmUnLFxuICAgICAgdHlwZTogJ2ltYWdlJyxcbiAgICAgIGlzVm9pZDogdHJ1ZSxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgc3JjOiBlbC5nZXRBdHRyaWJ1dGUoJ3NyYycpLFxuICAgICAgICB3aWR0aCxcbiAgICAgICAgaGVpZ2h0LFxuICAgICAgICBtYXJnaW46IGVsLnN0eWxlLm1hcmdpbixcbiAgICAgICAganVzdGlmeUNvbnRlbnQ6IGVsLnN0eWxlLmp1c3RpZnlDb250ZW50LFxuICAgICAgICBhbGlnbm1lbnQ6IGVsLmdldEF0dHJpYnV0ZSgnYWxpZ25tZW50JyksXG4gICAgICAgIGFsdDogZWwuZ2V0QXR0cmlidXRlKCdhbHQnKSxcbiAgICAgIH0sXG4gICAgfTtcbiAgICBsb2coJ3JldHVybiBvYmplY3Q6ICcsIG91dCk7XG4gICAgcmV0dXJuIG91dDtcbiAgfSxcbiAgc2VyaWFsaXplKG9iamVjdCAvKiwgY2hpbGRyZW4qLykge1xuICAgIGlmIChvYmplY3QudHlwZSAhPT0gJ2ltYWdlJykgcmV0dXJuO1xuXG4gICAgY29uc3QgeyBkYXRhIH0gPSBvYmplY3Q7XG4gICAgY29uc3Qgc3JjID0gZGF0YS5nZXQoJ3NyYycpO1xuICAgIGNvbnN0IHdpZHRoID0gZGF0YS5nZXQoJ3dpZHRoJyk7XG4gICAgY29uc3QgaGVpZ2h0ID0gZGF0YS5nZXQoJ2hlaWdodCcpO1xuICAgIGNvbnN0IGFsaWdubWVudCA9IGRhdGEuZ2V0KCdhbGlnbm1lbnQnKSB8fCAnbGVmdCc7XG4gICAgY29uc3QgbWFyZ2luID0gZGF0YS5nZXQoJ21hcmdpbicpO1xuICAgIGNvbnN0IGp1c3RpZnlDb250ZW50ID0gZGF0YS5nZXQoJ21hcmdpbicpO1xuICAgIGNvbnN0IGFsdCA9IGRhdGEuZ2V0KCdhbHQnKTtcbiAgICBjb25zdCBzdHlsZSA9IHt9O1xuICAgIGlmICh3aWR0aCkge1xuICAgICAgc3R5bGUud2lkdGggPSBgJHt3aWR0aH1weGA7XG4gICAgfVxuXG4gICAgaWYgKGhlaWdodCkge1xuICAgICAgc3R5bGUuaGVpZ2h0ID0gYCR7aGVpZ2h0fXB4YDtcbiAgICB9XG5cbiAgICBzdHlsZS5tYXJnaW4gPSBtYXJnaW47XG4gICAgc3R5bGUuanVzdGlmeUNvbnRlbnQgPSBqdXN0aWZ5Q29udGVudDtcblxuICAgIGlmIChhbGlnbm1lbnQpIHtcbiAgICAgIHN3aXRjaCAoYWxpZ25tZW50KSB7XG4gICAgICAgIGNhc2UgJ2xlZnQnOlxuICAgICAgICAgIHN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2ZsZXgtc3RhcnQnO1xuICAgICAgICAgIHN0eWxlLm1hcmdpbiA9ICcwJztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnY2VudGVyJzpcbiAgICAgICAgICBzdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdjZW50ZXInO1xuICAgICAgICAgIHN0eWxlLm1hcmdpbiA9ICcwIGF1dG8nO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdyaWdodCc6XG4gICAgICAgICAgc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnZmxleC1lbmQnO1xuICAgICAgICAgIHN0eWxlLm1hcmdpbiA9ICdhdXRvIDAgMCBhdXRvJztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBzdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdmbGV4LXN0YXJ0JztcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzdHlsZS5vYmplY3RGaXQgPSAnY29udGFpbic7XG5cbiAgICBjb25zdCBwcm9wcyA9IHtcbiAgICAgIHNyYyxcbiAgICAgIHN0eWxlLFxuICAgICAgYWxpZ25tZW50LFxuICAgICAgYWx0LFxuICAgIH07XG5cbiAgICByZXR1cm4gPGltZyB7Li4ucHJvcHN9IC8+O1xuICB9LFxufTtcbiJdfQ==
@@ -0,0 +1,117 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports["default"] = void 0;
9
+
10
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
11
+
12
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
13
+
14
+ var _slate = require("slate");
15
+
16
+ var _debug = _interopRequireDefault(require("debug"));
17
+
18
+ var log = (0, _debug["default"])('@pie-lib:editable-html:image:insert-image-handler');
19
+ /**
20
+ * Handles user selection, insertion (or cancellation) of an image into the editor.
21
+ * @param {Block} placeholderBlock - a block that has been added to the editor as a place holder for the image
22
+ * @param {Function} onFinish - a function to call if uploading fails or succeeds
23
+ * @param {Function} getValue - a function to return the value of the editor
24
+ * @param {Function} onChange - callback to notify changes applied by the handler
25
+ * @param {Boolean} isPasted - a boolean that keeps track if the file is pasted
26
+ */
27
+
28
+ var InsertImageHandler = /*#__PURE__*/function () {
29
+ function InsertImageHandler(editor, onFinish) {
30
+ var isPasted = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
31
+ (0, _classCallCheck2["default"])(this, InsertImageHandler);
32
+ this.editor = editor;
33
+ this.onFinish = onFinish;
34
+ this.isPasted = isPasted;
35
+ this.chosenFile = null;
36
+ }
37
+
38
+ (0, _createClass2["default"])(InsertImageHandler, [{
39
+ key: "cancel",
40
+ value: function cancel() {
41
+ log('insert cancelled');
42
+
43
+ try {
44
+ this.editor.commands.deleteNode('imageUploadNode');
45
+ this.onFinish(false);
46
+ } catch (err) {//
47
+ }
48
+ }
49
+ }, {
50
+ key: "done",
51
+ value: function done(err, src) {
52
+ log('done: err:', err);
53
+
54
+ if (err) {
55
+ //eslint-disable-next-line
56
+ console.log(err);
57
+ this.onFinish(false);
58
+ } else {
59
+ this.editor.commands.updateAttributes('imageUploadNode', {
60
+ loaded: true,
61
+ src: src,
62
+ percent: 100
63
+ });
64
+ this.onFinish(true);
65
+ }
66
+ }
67
+ /**
68
+ * Notify handler that the user chose a file - will create a change with a preview in the editor.
69
+ *
70
+ * @param {File} file - the file that the user chose using a file input.
71
+ */
72
+
73
+ }, {
74
+ key: "fileChosen",
75
+ value: function fileChosen(file) {
76
+ var _this = this;
77
+
78
+ if (!file) {
79
+ return;
80
+ } // Save the chosen file to this.chosenFile
81
+
82
+
83
+ this.chosenFile = file;
84
+ log('[fileChosen] file: ', file);
85
+ var reader = new FileReader();
86
+
87
+ reader.onload = function () {
88
+ var dataURL = reader.result;
89
+
90
+ _this.editor.commands.updateAttributes('imageUploadNode', {
91
+ src: dataURL
92
+ });
93
+ };
94
+
95
+ reader.readAsDataURL(file);
96
+ }
97
+ }, {
98
+ key: "progress",
99
+ value: function progress(percent, bytes, total) {
100
+ log('progress: ', percent, bytes, total);
101
+ this.editor.commands.updateAttributes('imageUploadNode', {
102
+ percent: percent
103
+ });
104
+ } // Add a getter method to retrieve the chosen file
105
+
106
+ }, {
107
+ key: "getChosenFile",
108
+ value: function getChosenFile() {
109
+ return this.chosenFile;
110
+ }
111
+ }]);
112
+ return InsertImageHandler;
113
+ }();
114
+
115
+ var _default = InsertImageHandler;
116
+ exports["default"] = _default;
117
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wbHVnaW5zL2ltYWdlL2luc2VydC1pbWFnZS1oYW5kbGVyLmpzIl0sIm5hbWVzIjpbImxvZyIsIkluc2VydEltYWdlSGFuZGxlciIsImVkaXRvciIsIm9uRmluaXNoIiwiaXNQYXN0ZWQiLCJjaG9zZW5GaWxlIiwiY29tbWFuZHMiLCJkZWxldGVOb2RlIiwiZXJyIiwic3JjIiwiY29uc29sZSIsInVwZGF0ZUF0dHJpYnV0ZXMiLCJsb2FkZWQiLCJwZXJjZW50IiwiZmlsZSIsInJlYWRlciIsIkZpbGVSZWFkZXIiLCJvbmxvYWQiLCJkYXRhVVJMIiwicmVzdWx0IiwicmVhZEFzRGF0YVVSTCIsImJ5dGVzIiwidG90YWwiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFFQSxJQUFNQSxHQUFHLEdBQUcsdUJBQU0sbURBQU4sQ0FBWjtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0lBQ01DLGtCO0FBQ0osOEJBQVlDLE1BQVosRUFBb0JDLFFBQXBCLEVBQWdEO0FBQUEsUUFBbEJDLFFBQWtCLHVFQUFQLEtBQU87QUFBQTtBQUM5QyxTQUFLRixNQUFMLEdBQWNBLE1BQWQ7QUFDQSxTQUFLQyxRQUFMLEdBQWdCQSxRQUFoQjtBQUNBLFNBQUtDLFFBQUwsR0FBZ0JBLFFBQWhCO0FBQ0EsU0FBS0MsVUFBTCxHQUFrQixJQUFsQjtBQUNEOzs7O1dBRUQsa0JBQVM7QUFDUEwsTUFBQUEsR0FBRyxDQUFDLGtCQUFELENBQUg7O0FBRUEsVUFBSTtBQUNGLGFBQUtFLE1BQUwsQ0FBWUksUUFBWixDQUFxQkMsVUFBckIsQ0FBZ0MsaUJBQWhDO0FBQ0EsYUFBS0osUUFBTCxDQUFjLEtBQWQ7QUFDRCxPQUhELENBR0UsT0FBT0ssR0FBUCxFQUFZLENBQ1o7QUFDRDtBQUNGOzs7V0FFRCxjQUFLQSxHQUFMLEVBQVVDLEdBQVYsRUFBZTtBQUNiVCxNQUFBQSxHQUFHLENBQUMsWUFBRCxFQUFlUSxHQUFmLENBQUg7O0FBQ0EsVUFBSUEsR0FBSixFQUFTO0FBQ1A7QUFDQUUsUUFBQUEsT0FBTyxDQUFDVixHQUFSLENBQVlRLEdBQVo7QUFDQSxhQUFLTCxRQUFMLENBQWMsS0FBZDtBQUNELE9BSkQsTUFJTztBQUNMLGFBQUtELE1BQUwsQ0FBWUksUUFBWixDQUFxQkssZ0JBQXJCLENBQXNDLGlCQUF0QyxFQUF5RDtBQUFFQyxVQUFBQSxNQUFNLEVBQUUsSUFBVjtBQUFnQkgsVUFBQUEsR0FBRyxFQUFIQSxHQUFoQjtBQUFxQkksVUFBQUEsT0FBTyxFQUFFO0FBQTlCLFNBQXpEO0FBQ0EsYUFBS1YsUUFBTCxDQUFjLElBQWQ7QUFDRDtBQUNGO0FBRUQ7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7OztXQUNFLG9CQUFXVyxJQUFYLEVBQWlCO0FBQUE7O0FBQ2YsVUFBSSxDQUFDQSxJQUFMLEVBQVc7QUFDVDtBQUNELE9BSGMsQ0FLZjs7O0FBQ0EsV0FBS1QsVUFBTCxHQUFrQlMsSUFBbEI7QUFFQWQsTUFBQUEsR0FBRyxDQUFDLHFCQUFELEVBQXdCYyxJQUF4QixDQUFIO0FBQ0EsVUFBTUMsTUFBTSxHQUFHLElBQUlDLFVBQUosRUFBZjs7QUFDQUQsTUFBQUEsTUFBTSxDQUFDRSxNQUFQLEdBQWdCLFlBQU07QUFDcEIsWUFBTUMsT0FBTyxHQUFHSCxNQUFNLENBQUNJLE1BQXZCOztBQUVBLFFBQUEsS0FBSSxDQUFDakIsTUFBTCxDQUFZSSxRQUFaLENBQXFCSyxnQkFBckIsQ0FBc0MsaUJBQXRDLEVBQXlEO0FBQUVGLFVBQUFBLEdBQUcsRUFBRVM7QUFBUCxTQUF6RDtBQUNELE9BSkQ7O0FBS0FILE1BQUFBLE1BQU0sQ0FBQ0ssYUFBUCxDQUFxQk4sSUFBckI7QUFDRDs7O1dBRUQsa0JBQVNELE9BQVQsRUFBa0JRLEtBQWxCLEVBQXlCQyxLQUF6QixFQUFnQztBQUM5QnRCLE1BQUFBLEdBQUcsQ0FBQyxZQUFELEVBQWVhLE9BQWYsRUFBd0JRLEtBQXhCLEVBQStCQyxLQUEvQixDQUFIO0FBQ0EsV0FBS3BCLE1BQUwsQ0FBWUksUUFBWixDQUFxQkssZ0JBQXJCLENBQXNDLGlCQUF0QyxFQUF5RDtBQUFFRSxRQUFBQSxPQUFPLEVBQVBBO0FBQUYsT0FBekQ7QUFDRCxLLENBRUQ7Ozs7V0FDQSx5QkFBZ0I7QUFDZCxhQUFPLEtBQUtSLFVBQVo7QUFDRDs7Ozs7ZUFHWUosa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRhIH0gZnJvbSAnc2xhdGUnO1xuaW1wb3J0IGRlYnVnIGZyb20gJ2RlYnVnJztcblxuY29uc3QgbG9nID0gZGVidWcoJ0BwaWUtbGliOmVkaXRhYmxlLWh0bWw6aW1hZ2U6aW5zZXJ0LWltYWdlLWhhbmRsZXInKTtcblxuLyoqXG4gKiBIYW5kbGVzIHVzZXIgc2VsZWN0aW9uLCBpbnNlcnRpb24gKG9yIGNhbmNlbGxhdGlvbikgb2YgYW4gaW1hZ2UgaW50byB0aGUgZWRpdG9yLlxuICogQHBhcmFtIHtCbG9ja30gcGxhY2Vob2xkZXJCbG9jayAtIGEgYmxvY2sgdGhhdCBoYXMgYmVlbiBhZGRlZCB0byB0aGUgZWRpdG9yIGFzIGEgcGxhY2UgaG9sZGVyIGZvciB0aGUgaW1hZ2VcbiAqIEBwYXJhbSB7RnVuY3Rpb259IG9uRmluaXNoIC0gYSBmdW5jdGlvbiB0byBjYWxsIGlmIHVwbG9hZGluZyBmYWlscyBvciBzdWNjZWVkc1xuICogQHBhcmFtIHtGdW5jdGlvbn0gZ2V0VmFsdWUgLSBhIGZ1bmN0aW9uIHRvIHJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGVkaXRvclxuICogQHBhcmFtIHtGdW5jdGlvbn0gb25DaGFuZ2UgLSBjYWxsYmFjayB0byBub3RpZnkgY2hhbmdlcyBhcHBsaWVkIGJ5IHRoZSBoYW5kbGVyXG4gKiBAcGFyYW0ge0Jvb2xlYW59IGlzUGFzdGVkIC0gYSBib29sZWFuIHRoYXQga2VlcHMgdHJhY2sgaWYgdGhlIGZpbGUgaXMgcGFzdGVkXG4gKi9cbmNsYXNzIEluc2VydEltYWdlSGFuZGxlciB7XG4gIGNvbnN0cnVjdG9yKGVkaXRvciwgb25GaW5pc2gsIGlzUGFzdGVkID0gZmFsc2UpIHtcbiAgICB0aGlzLmVkaXRvciA9IGVkaXRvcjtcbiAgICB0aGlzLm9uRmluaXNoID0gb25GaW5pc2g7XG4gICAgdGhpcy5pc1Bhc3RlZCA9IGlzUGFzdGVkO1xuICAgIHRoaXMuY2hvc2VuRmlsZSA9IG51bGw7XG4gIH1cblxuICBjYW5jZWwoKSB7XG4gICAgbG9nKCdpbnNlcnQgY2FuY2VsbGVkJyk7XG5cbiAgICB0cnkge1xuICAgICAgdGhpcy5lZGl0b3IuY29tbWFuZHMuZGVsZXRlTm9kZSgnaW1hZ2VVcGxvYWROb2RlJyk7XG4gICAgICB0aGlzLm9uRmluaXNoKGZhbHNlKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vXG4gICAgfVxuICB9XG5cbiAgZG9uZShlcnIsIHNyYykge1xuICAgIGxvZygnZG9uZTogZXJyOicsIGVycik7XG4gICAgaWYgKGVycikge1xuICAgICAgLy9lc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICB0aGlzLm9uRmluaXNoKGZhbHNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5lZGl0b3IuY29tbWFuZHMudXBkYXRlQXR0cmlidXRlcygnaW1hZ2VVcGxvYWROb2RlJywgeyBsb2FkZWQ6IHRydWUsIHNyYywgcGVyY2VudDogMTAwIH0pO1xuICAgICAgdGhpcy5vbkZpbmlzaCh0cnVlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTm90aWZ5IGhhbmRsZXIgdGhhdCB0aGUgdXNlciBjaG9zZSBhIGZpbGUgLSB3aWxsIGNyZWF0ZSBhIGNoYW5nZSB3aXRoIGEgcHJldmlldyBpbiB0aGUgZWRpdG9yLlxuICAgKlxuICAgKiBAcGFyYW0ge0ZpbGV9IGZpbGUgLSB0aGUgZmlsZSB0aGF0IHRoZSB1c2VyIGNob3NlIHVzaW5nIGEgZmlsZSBpbnB1dC5cbiAgICovXG4gIGZpbGVDaG9zZW4oZmlsZSkge1xuICAgIGlmICghZmlsZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFNhdmUgdGhlIGNob3NlbiBmaWxlIHRvIHRoaXMuY2hvc2VuRmlsZVxuICAgIHRoaXMuY2hvc2VuRmlsZSA9IGZpbGU7XG5cbiAgICBsb2coJ1tmaWxlQ2hvc2VuXSBmaWxlOiAnLCBmaWxlKTtcbiAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgIHJlYWRlci5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRhVVJMID0gcmVhZGVyLnJlc3VsdDtcblxuICAgICAgdGhpcy5lZGl0b3IuY29tbWFuZHMudXBkYXRlQXR0cmlidXRlcygnaW1hZ2VVcGxvYWROb2RlJywgeyBzcmM6IGRhdGFVUkwgfSk7XG4gICAgfTtcbiAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTtcbiAgfVxuXG4gIHByb2dyZXNzKHBlcmNlbnQsIGJ5dGVzLCB0b3RhbCkge1xuICAgIGxvZygncHJvZ3Jlc3M6ICcsIHBlcmNlbnQsIGJ5dGVzLCB0b3RhbCk7XG4gICAgdGhpcy5lZGl0b3IuY29tbWFuZHMudXBkYXRlQXR0cmlidXRlcygnaW1hZ2VVcGxvYWROb2RlJywgeyBwZXJjZW50IH0pO1xuICB9XG5cbiAgLy8gQWRkIGEgZ2V0dGVyIG1ldGhvZCB0byByZXRyaWV2ZSB0aGUgY2hvc2VuIGZpbGVcbiAgZ2V0Q2hvc2VuRmlsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5jaG9zZW5GaWxlO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEluc2VydEltYWdlSGFuZGxlcjtcbiJdfQ==