\n *\n * @extends {Container} unstated Container\n */\n\nclass CommentContainer extends unstated__WEBPACK_IMPORTED_MODULE_0__[\"Container\"] {\n constructor(appContainer) {\n super();\n this.appContainer = appContainer;\n this.appContainer.registerContainer(this);\n const mainContent = document.querySelector('#content-main');\n\n if (mainContent == null) {\n logger.debug('#content-main element is not exists');\n return;\n }\n\n this.state = {\n comments: [],\n // settings shared among all of CommentEditor\n isSlackEnabled: false,\n slackChannels: mainContent.getAttribute('data-slack-channels') || ''\n };\n this.retrieveComments = this.retrieveComments.bind(this);\n this.checkAndUpdateImageOfCommentAuthers = this.checkAndUpdateImageOfCommentAuthers.bind(this);\n }\n /**\n * Workaround for the mangling in production build to break constructor.name\n */\n\n\n static getClassName() {\n return 'CommentContainer';\n }\n\n getPageContainer() {\n return this.appContainer.getContainer('PageContainer');\n }\n\n findAndSplice(comment) {\n const comments = this.state.comments;\n const index = comments.indexOf(comment);\n\n if (index < 0) {\n return;\n }\n\n comments.splice(index, 1);\n this.setState({\n comments\n });\n }\n /**\n * Load data of comments and store them in state\n */\n\n\n async retrieveComments() {\n const {\n pageId\n } = this.getPageContainer().state; // get data (desc order array)\n\n const res = await this.appContainer.apiGet('/comments.get', {\n page_id: pageId\n });\n\n if (res.ok) {\n const comments = res.comments;\n this.setState({\n comments\n });\n this.checkAndUpdateImageOfCommentAuthers(comments);\n }\n }\n\n async checkAndUpdateImageOfCommentAuthers(comments) {\n const noImageCacheUserIds = comments.filter(comment => {\n const {\n creator\n } = comment;\n return creator != null && creator.imageUrlCached == null;\n }).map(comment => {\n return comment.creator._id;\n });\n\n if (noImageCacheUserIds.length === 0) {\n return;\n }\n\n try {\n await this.appContainer.apiv3Put('/users/update.imageUrlCache', {\n userIds: noImageCacheUserIds\n });\n } catch (err) {\n // Error alert doesn't apear, because user don't need to notice this error.\n logger.error(err);\n }\n }\n /**\n * Load data of comments and rerender \n */\n\n\n postComment(comment, isMarkdown, replyTo, isSlackEnabled, slackChannels) {\n const {\n pageId,\n revisionId\n } = this.getPageContainer().state;\n return this.appContainer.apiPost('/comments.add', {\n commentForm: {\n comment,\n page_id: pageId,\n revision_id: revisionId,\n is_markdown: isMarkdown,\n replyTo\n },\n slackNotificationForm: {\n isSlackEnabled,\n slackChannels\n }\n }).then(res => {\n if (res.ok) {\n return this.retrieveComments();\n }\n });\n }\n /**\n * Load data of comments and rerender \n */\n\n\n putComment(comment, isMarkdown, commentId, author) {\n const {\n pageId,\n revisionId\n } = this.getPageContainer().state;\n return this.appContainer.apiPost('/comments.update', {\n commentForm: {\n comment,\n page_id: pageId,\n revision_id: revisionId,\n is_markdown: isMarkdown,\n comment_id: commentId,\n author\n }\n }).then(res => {\n if (res.ok) {\n return this.retrieveComments();\n }\n });\n }\n\n deleteComment(comment) {\n return this.appContainer.apiPost('/comments.remove', {\n comment_id: comment._id\n }).then(res => {\n if (res.ok) {\n this.findAndSplice(comment);\n }\n });\n }\n\n uploadAttachment(file) {\n const {\n pageId,\n pagePath\n } = this.getPageContainer().state;\n const endpoint = '/attachments.add';\n const formData = new FormData();\n formData.append('_csrf', this.appContainer.csrfToken);\n formData.append('file', file);\n formData.append('path', pagePath);\n formData.append('page_id', pageId);\n return this.appContainer.apiPost(endpoint, formData);\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvY2xpZW50L2pzL3NlcnZpY2VzL0NvbW1lbnRDb250YWluZXIuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY2xpZW50L2pzL3NlcnZpY2VzL0NvbW1lbnRDb250YWluZXIuanM/N2FhZCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb250YWluZXIgfSBmcm9tICd1bnN0YXRlZCc7XG5cbmltcG9ydCBsb2dnZXJGYWN0b3J5IGZyb20gJ0BhbGlhcy9sb2dnZXInO1xuXG5jb25zdCBsb2dnZXIgPSBsb2dnZXJGYWN0b3J5KCdncm93aTpzZXJ2aWNlczpDb21tZW50Q29udGFpbmVyJyk7XG5cbi8qKlxuICpcbiAqIEBhdXRob3IgWXVraSBUYWtlaSA8eXVraUB3ZXNlZWsuY28uanA+XG4gKlxuICogQGV4dGVuZHMge0NvbnRhaW5lcn0gdW5zdGF0ZWQgQ29udGFpbmVyXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbW1lbnRDb250YWluZXIgZXh0ZW5kcyBDb250YWluZXIge1xuXG4gIGNvbnN0cnVjdG9yKGFwcENvbnRhaW5lcikge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLmFwcENvbnRhaW5lciA9IGFwcENvbnRhaW5lcjtcbiAgICB0aGlzLmFwcENvbnRhaW5lci5yZWdpc3RlckNvbnRhaW5lcih0aGlzKTtcblxuICAgIGNvbnN0IG1haW5Db250ZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2NvbnRlbnQtbWFpbicpO1xuXG4gICAgaWYgKG1haW5Db250ZW50ID09IG51bGwpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZygnI2NvbnRlbnQtbWFpbiBlbGVtZW50IGlzIG5vdCBleGlzdHMnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgY29tbWVudHM6IFtdLFxuXG4gICAgICAvLyBzZXR0aW5ncyBzaGFyZWQgYW1vbmcgYWxsIG9mIENvbW1lbnRFZGl0b3JcbiAgICAgIGlzU2xhY2tFbmFibGVkOiBmYWxzZSxcbiAgICAgIHNsYWNrQ2hhbm5lbHM6IG1haW5Db250ZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1zbGFjay1jaGFubmVscycpIHx8ICcnLFxuICAgIH07XG5cbiAgICB0aGlzLnJldHJpZXZlQ29tbWVudHMgPSB0aGlzLnJldHJpZXZlQ29tbWVudHMuYmluZCh0aGlzKTtcbiAgICB0aGlzLmNoZWNrQW5kVXBkYXRlSW1hZ2VPZkNvbW1lbnRBdXRoZXJzID0gdGhpcy5jaGVja0FuZFVwZGF0ZUltYWdlT2ZDb21tZW50QXV0aGVycy5iaW5kKHRoaXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdvcmthcm91bmQgZm9yIHRoZSBtYW5nbGluZyBpbiBwcm9kdWN0aW9uIGJ1aWxkIHRvIGJyZWFrIGNvbnN0cnVjdG9yLm5hbWVcbiAgICovXG4gIHN0YXRpYyBnZXRDbGFzc05hbWUoKSB7XG4gICAgcmV0dXJuICdDb21tZW50Q29udGFpbmVyJztcbiAgfVxuXG4gIGdldFBhZ2VDb250YWluZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBwQ29udGFpbmVyLmdldENvbnRhaW5lcignUGFnZUNvbnRhaW5lcicpO1xuICB9XG5cbiAgZmluZEFuZFNwbGljZShjb21tZW50KSB7XG4gICAgY29uc3QgY29tbWVudHMgPSB0aGlzLnN0YXRlLmNvbW1lbnRzO1xuXG4gICAgY29uc3QgaW5kZXggPSBjb21tZW50cy5pbmRleE9mKGNvbW1lbnQpO1xuICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29tbWVudHMuc3BsaWNlKGluZGV4LCAxKTtcblxuICAgIHRoaXMuc2V0U3RhdGUoeyBjb21tZW50cyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkIGRhdGEgb2YgY29tbWVudHMgYW5kIHN0b3JlIHRoZW0gaW4gc3RhdGVcbiAgICovXG4gIGFzeW5jIHJldHJpZXZlQ29tbWVudHMoKSB7XG4gICAgY29uc3QgeyBwYWdlSWQgfSA9IHRoaXMuZ2V0UGFnZUNvbnRhaW5lcigpLnN0YXRlO1xuXG4gICAgLy8gZ2V0IGRhdGEgKGRlc2Mgb3JkZXIgYXJyYXkpXG4gICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5hcHBDb250YWluZXIuYXBpR2V0KCcvY29tbWVudHMuZ2V0JywgeyBwYWdlX2lkOiBwYWdlSWQgfSk7XG4gICAgaWYgKHJlcy5vaykge1xuICAgICAgY29uc3QgY29tbWVudHMgPSByZXMuY29tbWVudHM7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgY29tbWVudHMgfSk7XG5cbiAgICAgIHRoaXMuY2hlY2tBbmRVcGRhdGVJbWFnZU9mQ29tbWVudEF1dGhlcnMoY29tbWVudHMpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGNoZWNrQW5kVXBkYXRlSW1hZ2VPZkNvbW1lbnRBdXRoZXJzKGNvbW1lbnRzKSB7XG4gICAgY29uc3Qgbm9JbWFnZUNhY2hlVXNlcklkcyA9IGNvbW1lbnRzLmZpbHRlcigoY29tbWVudCkgPT4ge1xuICAgICAgY29uc3QgeyBjcmVhdG9yIH0gPSBjb21tZW50O1xuICAgICAgcmV0dXJuIGNyZWF0b3IgIT0gbnVsbCAmJiBjcmVhdG9yLmltYWdlVXJsQ2FjaGVkID09IG51bGw7XG4gICAgfSkubWFwKChjb21tZW50KSA9PiB7XG4gICAgICByZXR1cm4gY29tbWVudC5jcmVhdG9yLl9pZDtcbiAgICB9KTtcblxuICAgIGlmIChub0ltYWdlQ2FjaGVVc2VySWRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmFwcENvbnRhaW5lci5hcGl2M1B1dCgnL3VzZXJzL3VwZGF0ZS5pbWFnZVVybENhY2hlJywgeyB1c2VySWRzOiBub0ltYWdlQ2FjaGVVc2VySWRzIH0pO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyBFcnJvciBhbGVydCBkb2Vzbid0IGFwZWFyLCBiZWNhdXNlIHVzZXIgZG9uJ3QgbmVlZCB0byBub3RpY2UgdGhpcyBlcnJvci5cbiAgICAgIGxvZ2dlci5lcnJvcihlcnIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkIGRhdGEgb2YgY29tbWVudHMgYW5kIHJlcmVuZGVyIDxQYWdlQ29tbWVudHMgLz5cbiAgICovXG4gIHBvc3RDb21tZW50KGNvbW1lbnQsIGlzTWFya2Rvd24sIHJlcGx5VG8sIGlzU2xhY2tFbmFibGVkLCBzbGFja0NoYW5uZWxzKSB7XG4gICAgY29uc3QgeyBwYWdlSWQsIHJldmlzaW9uSWQgfSA9IHRoaXMuZ2V0UGFnZUNvbnRhaW5lcigpLnN0YXRlO1xuXG4gICAgcmV0dXJuIHRoaXMuYXBwQ29udGFpbmVyLmFwaVBvc3QoJy9jb21tZW50cy5hZGQnLCB7XG4gICAgICBjb21tZW50Rm9ybToge1xuICAgICAgICBjb21tZW50LFxuICAgICAgICBwYWdlX2lkOiBwYWdlSWQsXG4gICAgICAgIHJldmlzaW9uX2lkOiByZXZpc2lvbklkLFxuICAgICAgICBpc19tYXJrZG93bjogaXNNYXJrZG93bixcbiAgICAgICAgcmVwbHlUbyxcbiAgICAgIH0sXG4gICAgICBzbGFja05vdGlmaWNhdGlvbkZvcm06IHtcbiAgICAgICAgaXNTbGFja0VuYWJsZWQsXG4gICAgICAgIHNsYWNrQ2hhbm5lbHMsXG4gICAgICB9LFxuICAgIH0pXG4gICAgICAudGhlbigocmVzKSA9PiB7XG4gICAgICAgIGlmIChyZXMub2spIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5yZXRyaWV2ZUNvbW1lbnRzKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgZGF0YSBvZiBjb21tZW50cyBhbmQgcmVyZW5kZXIgPFBhZ2VDb21tZW50cyAvPlxuICAgKi9cbiAgcHV0Q29tbWVudChjb21tZW50LCBpc01hcmtkb3duLCBjb21tZW50SWQsIGF1dGhvcikge1xuICAgIGNvbnN0IHsgcGFnZUlkLCByZXZpc2lvbklkIH0gPSB0aGlzLmdldFBhZ2VDb250YWluZXIoKS5zdGF0ZTtcblxuICAgIHJldHVybiB0aGlzLmFwcENvbnRhaW5lci5hcGlQb3N0KCcvY29tbWVudHMudXBkYXRlJywge1xuICAgICAgY29tbWVudEZvcm06IHtcbiAgICAgICAgY29tbWVudCxcbiAgICAgICAgcGFnZV9pZDogcGFnZUlkLFxuICAgICAgICByZXZpc2lvbl9pZDogcmV2aXNpb25JZCxcbiAgICAgICAgaXNfbWFya2Rvd246IGlzTWFya2Rvd24sXG4gICAgICAgIGNvbW1lbnRfaWQ6IGNvbW1lbnRJZCxcbiAgICAgICAgYXV0aG9yLFxuICAgICAgfSxcbiAgICB9KVxuICAgICAgLnRoZW4oKHJlcykgPT4ge1xuICAgICAgICBpZiAocmVzLm9rKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucmV0cmlldmVDb21tZW50cygpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIGRlbGV0ZUNvbW1lbnQoY29tbWVudCkge1xuICAgIHJldHVybiB0aGlzLmFwcENvbnRhaW5lci5hcGlQb3N0KCcvY29tbWVudHMucmVtb3ZlJywgeyBjb21tZW50X2lkOiBjb21tZW50Ll9pZCB9KVxuICAgICAgLnRoZW4oKHJlcykgPT4ge1xuICAgICAgICBpZiAocmVzLm9rKSB7XG4gICAgICAgICAgdGhpcy5maW5kQW5kU3BsaWNlKGNvbW1lbnQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHVwbG9hZEF0dGFjaG1lbnQoZmlsZSkge1xuICAgIGNvbnN0IHsgcGFnZUlkLCBwYWdlUGF0aCB9ID0gdGhpcy5nZXRQYWdlQ29udGFpbmVyKCkuc3RhdGU7XG5cbiAgICBjb25zdCBlbmRwb2ludCA9ICcvYXR0YWNobWVudHMuYWRkJztcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGZvcm1EYXRhLmFwcGVuZCgnX2NzcmYnLCB0aGlzLmFwcENvbnRhaW5lci5jc3JmVG9rZW4pO1xuICAgIGZvcm1EYXRhLmFwcGVuZCgnZmlsZScsIGZpbGUpO1xuICAgIGZvcm1EYXRhLmFwcGVuZCgncGF0aCcsIHBhZ2VQYXRoKTtcbiAgICBmb3JtRGF0YS5hcHBlbmQoJ3BhZ2VfaWQnLCBwYWdlSWQpO1xuXG4gICAgcmV0dXJuIHRoaXMuYXBwQ29udGFpbmVyLmFwaVBvc3QoZW5kcG9pbnQsIGZvcm1EYXRhKTtcbiAgfVxuXG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBRUE7QUFFQTs7Ozs7OztBQU1BO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFMQTtBQVFBO0FBQ0E7QUFDQTtBQUVBOzs7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUVBOzs7OztBQUdBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7QUFHQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQU9BO0FBQ0E7QUFDQTtBQUZBO0FBUkE7QUFjQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7O0FBR0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFOQTtBQURBO0FBV0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBN0pBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/client/js/services/CommentContainer.js\n");
/***/ }),
/***/ "./src/client/js/services/EditorContainer.js":
/*!***************************************************!*\
!*** ./src/client/js/services/EditorContainer.js ***!
\***************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return EditorContainer; });\n/* harmony import */ var unstated__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! unstated */ \"./node_modules/unstated/lib/unstated.es.js\");\n/* harmony import */ var _alias_logger__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @alias/logger */ \"./src/lib/service/logger/index.js\");\n/* harmony import */ var _alias_logger__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_alias_logger__WEBPACK_IMPORTED_MODULE_1__);\n\n\nconst logger = _alias_logger__WEBPACK_IMPORTED_MODULE_1___default()('growi:services:EditorContainer');\n/**\n * Service container related to options for Editor/Preview\n * @extends {Container} unstated Container\n */\n\nclass EditorContainer extends unstated__WEBPACK_IMPORTED_MODULE_0__[\"Container\"] {\n constructor(appContainer, defaultEditorOptions, defaultPreviewOptions) {\n super();\n this.appContainer = appContainer;\n this.appContainer.registerContainer(this);\n const mainContent = document.querySelector('#content-main');\n\n if (mainContent == null) {\n logger.debug('#content-main element is not exists');\n return;\n }\n\n this.state = {\n tags: null,\n isSlackEnabled: false,\n slackChannels: mainContent.getAttribute('data-slack-channels') || '',\n grant: 1,\n // default: public\n grantGroupId: null,\n grantGroupName: null,\n editorOptions: {},\n previewOptions: {},\n indentSize: this.appContainer.config.adminPreferredIndentSize || 4\n };\n this.isSetBeforeunloadEventHandler = false;\n this.initStateGrant();\n this.initDrafts();\n this.initEditorOptions('editorOptions', 'editorOptions', defaultEditorOptions);\n this.initEditorOptions('previewOptions', 'previewOptions', defaultPreviewOptions);\n }\n /**\n * Workaround for the mangling in production build to break constructor.name\n */\n\n\n static getClassName() {\n return 'EditorContainer';\n }\n /**\n * initialize state for page permission\n */\n\n\n initStateGrant() {\n const mainContent = document.getElementById('content-main');\n\n if (mainContent == null) {\n logger.debug('#content-main element is not exists');\n return;\n }\n\n this.state.grant = +mainContent.getAttribute('data-page-grant');\n const grantGroupId = mainContent.getAttribute('data-page-grant-group');\n\n if (grantGroupId != null && grantGroupId.length > 0) {\n this.state.grantGroupId = grantGroupId;\n this.state.grantGroupName = mainContent.getAttribute('data-page-grant-group-name');\n }\n }\n /**\n * initialize state for drafts\n */\n\n\n initDrafts() {\n this.drafts = {}; // restore data from localStorage\n\n const contents = window.localStorage.drafts;\n\n if (contents != null) {\n try {\n this.drafts = JSON.parse(contents);\n } catch (e) {\n window.localStorage.removeItem('drafts');\n }\n }\n\n if (this.state.pageId == null) {\n const draft = this.findDraft(this.state.path);\n\n if (draft != null) {\n this.state.markdown = draft;\n }\n }\n }\n\n initEditorOptions(stateKey, localStorageKey, defaultOptions) {\n // load from localStorage\n const optsStr = window.localStorage[localStorageKey];\n let loadedOpts = {}; // JSON.parseparse\n\n if (optsStr != null) {\n try {\n loadedOpts = JSON.parse(optsStr);\n } catch (e) {\n this.localStorage.removeItem(localStorageKey);\n }\n } // set to state obj\n\n\n this.state[stateKey] = Object.assign(defaultOptions, loadedOpts);\n }\n\n saveOptsToLocalStorage() {\n window.localStorage.setItem('editorOptions', JSON.stringify(this.state.editorOptions));\n window.localStorage.setItem('previewOptions', JSON.stringify(this.state.previewOptions));\n }\n\n setCaretLine(line) {\n const pageEditor = this.appContainer.getComponentInstance('PageEditor');\n\n if (pageEditor != null) {\n pageEditor.setCaretLine(line);\n }\n }\n\n focusToEditor() {\n const pageEditor = this.appContainer.getComponentInstance('PageEditor');\n\n if (pageEditor != null) {\n pageEditor.focusToEditor();\n }\n }\n\n getCurrentOptionsToSave() {\n const opt = {\n isSlackEnabled: this.state.isSlackEnabled,\n slackChannels: this.state.slackChannels,\n grant: this.state.grant,\n pageTags: this.state.tags\n };\n\n if (this.state.grantGroupId != null) {\n opt.grantUserGroupId = this.state.grantGroupId;\n }\n\n return opt;\n } // See https://developer.mozilla.org/en-US/docs/Web/API/WindowEventHandlers/onbeforeunload#example\n\n\n showUnsavedWarning(e) {\n // Cancel the event\n e.preventDefault(); // display browser default message\n\n e.returnValue = '';\n return '';\n }\n\n disableUnsavedWarning() {\n window.removeEventListener('beforeunload', this.showUnsavedWarning);\n this.isSetBeforeunloadEventHandler = false;\n }\n\n enableUnsavedWarning() {\n if (!this.isSetBeforeunloadEventHandler) {\n window.addEventListener('beforeunload', this.showUnsavedWarning);\n this.isSetBeforeunloadEventHandler = true;\n }\n }\n\n clearDraft(path) {\n delete this.drafts[path];\n window.localStorage.setItem('drafts', JSON.stringify(this.drafts));\n }\n\n clearAllDrafts() {\n window.localStorage.removeItem('drafts');\n }\n\n saveDraft(path, body) {\n this.drafts[path] = body;\n window.localStorage.setItem('drafts', JSON.stringify(this.drafts));\n }\n\n findDraft(path) {\n if (this.drafts != null && this.drafts[path]) {\n return this.drafts[path];\n }\n\n return null;\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvY2xpZW50L2pzL3NlcnZpY2VzL0VkaXRvckNvbnRhaW5lci5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9jbGllbnQvanMvc2VydmljZXMvRWRpdG9yQ29udGFpbmVyLmpzPzA5MGEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29udGFpbmVyIH0gZnJvbSAndW5zdGF0ZWQnO1xuXG5pbXBvcnQgbG9nZ2VyRmFjdG9yeSBmcm9tICdAYWxpYXMvbG9nZ2VyJztcblxuY29uc3QgbG9nZ2VyID0gbG9nZ2VyRmFjdG9yeSgnZ3Jvd2k6c2VydmljZXM6RWRpdG9yQ29udGFpbmVyJyk7XG5cbi8qKlxuICogU2VydmljZSBjb250YWluZXIgcmVsYXRlZCB0byBvcHRpb25zIGZvciBFZGl0b3IvUHJldmlld1xuICogQGV4dGVuZHMge0NvbnRhaW5lcn0gdW5zdGF0ZWQgQ29udGFpbmVyXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVkaXRvckNvbnRhaW5lciBleHRlbmRzIENvbnRhaW5lciB7XG5cbiAgY29uc3RydWN0b3IoYXBwQ29udGFpbmVyLCBkZWZhdWx0RWRpdG9yT3B0aW9ucywgZGVmYXVsdFByZXZpZXdPcHRpb25zKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMuYXBwQ29udGFpbmVyID0gYXBwQ29udGFpbmVyO1xuICAgIHRoaXMuYXBwQ29udGFpbmVyLnJlZ2lzdGVyQ29udGFpbmVyKHRoaXMpO1xuXG4gICAgY29uc3QgbWFpbkNvbnRlbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjY29udGVudC1tYWluJyk7XG5cbiAgICBpZiAobWFpbkNvbnRlbnQgPT0gbnVsbCkge1xuICAgICAgbG9nZ2VyLmRlYnVnKCcjY29udGVudC1tYWluIGVsZW1lbnQgaXMgbm90IGV4aXN0cycpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICB0YWdzOiBudWxsLFxuXG4gICAgICBpc1NsYWNrRW5hYmxlZDogZmFsc2UsXG4gICAgICBzbGFja0NoYW5uZWxzOiBtYWluQ29udGVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtc2xhY2stY2hhbm5lbHMnKSB8fCAnJyxcblxuICAgICAgZ3JhbnQ6IDEsIC8vIGRlZmF1bHQ6IHB1YmxpY1xuICAgICAgZ3JhbnRHcm91cElkOiBudWxsLFxuICAgICAgZ3JhbnRHcm91cE5hbWU6IG51bGwsXG5cbiAgICAgIGVkaXRvck9wdGlvbnM6IHt9LFxuICAgICAgcHJldmlld09wdGlvbnM6IHt9LFxuICAgICAgaW5kZW50U2l6ZTogdGhpcy5hcHBDb250YWluZXIuY29uZmlnLmFkbWluUHJlZmVycmVkSW5kZW50U2l6ZSB8fCA0LFxuICAgIH07XG5cbiAgICB0aGlzLmlzU2V0QmVmb3JldW5sb2FkRXZlbnRIYW5kbGVyID0gZmFsc2U7XG5cbiAgICB0aGlzLmluaXRTdGF0ZUdyYW50KCk7XG4gICAgdGhpcy5pbml0RHJhZnRzKCk7XG5cbiAgICB0aGlzLmluaXRFZGl0b3JPcHRpb25zKCdlZGl0b3JPcHRpb25zJywgJ2VkaXRvck9wdGlvbnMnLCBkZWZhdWx0RWRpdG9yT3B0aW9ucyk7XG4gICAgdGhpcy5pbml0RWRpdG9yT3B0aW9ucygncHJldmlld09wdGlvbnMnLCAncHJldmlld09wdGlvbnMnLCBkZWZhdWx0UHJldmlld09wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdvcmthcm91bmQgZm9yIHRoZSBtYW5nbGluZyBpbiBwcm9kdWN0aW9uIGJ1aWxkIHRvIGJyZWFrIGNvbnN0cnVjdG9yLm5hbWVcbiAgICovXG4gIHN0YXRpYyBnZXRDbGFzc05hbWUoKSB7XG4gICAgcmV0dXJuICdFZGl0b3JDb250YWluZXInO1xuICB9XG5cbiAgLyoqXG4gICAqIGluaXRpYWxpemUgc3RhdGUgZm9yIHBhZ2UgcGVybWlzc2lvblxuICAgKi9cbiAgaW5pdFN0YXRlR3JhbnQoKSB7XG4gICAgY29uc3QgbWFpbkNvbnRlbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29udGVudC1tYWluJyk7XG5cbiAgICBpZiAobWFpbkNvbnRlbnQgPT0gbnVsbCkge1xuICAgICAgbG9nZ2VyLmRlYnVnKCcjY29udGVudC1tYWluIGVsZW1lbnQgaXMgbm90IGV4aXN0cycpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc3RhdGUuZ3JhbnQgPSArbWFpbkNvbnRlbnQuZ2V0QXR0cmlidXRlKCdkYXRhLXBhZ2UtZ3JhbnQnKTtcblxuICAgIGNvbnN0IGdyYW50R3JvdXBJZCA9IG1haW5Db250ZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1wYWdlLWdyYW50LWdyb3VwJyk7XG4gICAgaWYgKGdyYW50R3JvdXBJZCAhPSBudWxsICYmIGdyYW50R3JvdXBJZC5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnN0YXRlLmdyYW50R3JvdXBJZCA9IGdyYW50R3JvdXBJZDtcbiAgICAgIHRoaXMuc3RhdGUuZ3JhbnRHcm91cE5hbWUgPSBtYWluQ29udGVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtcGFnZS1ncmFudC1ncm91cC1uYW1lJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGluaXRpYWxpemUgc3RhdGUgZm9yIGRyYWZ0c1xuICAgKi9cbiAgaW5pdERyYWZ0cygpIHtcbiAgICB0aGlzLmRyYWZ0cyA9IHt9O1xuXG4gICAgLy8gcmVzdG9yZSBkYXRhIGZyb20gbG9jYWxTdG9yYWdlXG4gICAgY29uc3QgY29udGVudHMgPSB3aW5kb3cubG9jYWxTdG9yYWdlLmRyYWZ0cztcbiAgICBpZiAoY29udGVudHMgIT0gbnVsbCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5kcmFmdHMgPSBKU09OLnBhcnNlKGNvbnRlbnRzKTtcbiAgICAgIH1cbiAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnZHJhZnRzJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc3RhdGUucGFnZUlkID09IG51bGwpIHtcbiAgICAgIGNvbnN0IGRyYWZ0ID0gdGhpcy5maW5kRHJhZnQodGhpcy5zdGF0ZS5wYXRoKTtcbiAgICAgIGlmIChkcmFmdCAhPSBudWxsKSB7XG4gICAgICAgIHRoaXMuc3RhdGUubWFya2Rvd24gPSBkcmFmdDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpbml0RWRpdG9yT3B0aW9ucyhzdGF0ZUtleSwgbG9jYWxTdG9yYWdlS2V5LCBkZWZhdWx0T3B0aW9ucykge1xuICAgIC8vIGxvYWQgZnJvbSBsb2NhbFN0b3JhZ2VcbiAgICBjb25zdCBvcHRzU3RyID0gd2luZG93LmxvY2FsU3RvcmFnZVtsb2NhbFN0b3JhZ2VLZXldO1xuXG4gICAgbGV0IGxvYWRlZE9wdHMgPSB7fTtcbiAgICAvLyBKU09OLnBhcnNlcGFyc2VcbiAgICBpZiAob3B0c1N0ciAhPSBudWxsKSB7XG4gICAgICB0cnkge1xuICAgICAgICBsb2FkZWRPcHRzID0gSlNPTi5wYXJzZShvcHRzU3RyKTtcbiAgICAgIH1cbiAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgIHRoaXMubG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0obG9jYWxTdG9yYWdlS2V5KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBzZXQgdG8gc3RhdGUgb2JqXG4gICAgdGhpcy5zdGF0ZVtzdGF0ZUtleV0gPSBPYmplY3QuYXNzaWduKGRlZmF1bHRPcHRpb25zLCBsb2FkZWRPcHRzKTtcbiAgfVxuXG4gIHNhdmVPcHRzVG9Mb2NhbFN0b3JhZ2UoKSB7XG4gICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKCdlZGl0b3JPcHRpb25zJywgSlNPTi5zdHJpbmdpZnkodGhpcy5zdGF0ZS5lZGl0b3JPcHRpb25zKSk7XG4gICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKCdwcmV2aWV3T3B0aW9ucycsIEpTT04uc3RyaW5naWZ5KHRoaXMuc3RhdGUucHJldmlld09wdGlvbnMpKTtcbiAgfVxuXG4gIHNldENhcmV0TGluZShsaW5lKSB7XG4gICAgY29uc3QgcGFnZUVkaXRvciA9IHRoaXMuYXBwQ29udGFpbmVyLmdldENvbXBvbmVudEluc3RhbmNlKCdQYWdlRWRpdG9yJyk7XG4gICAgaWYgKHBhZ2VFZGl0b3IgIT0gbnVsbCkge1xuICAgICAgcGFnZUVkaXRvci5zZXRDYXJldExpbmUobGluZSk7XG4gICAgfVxuICB9XG5cbiAgZm9jdXNUb0VkaXRvcigpIHtcbiAgICBjb25zdCBwYWdlRWRpdG9yID0gdGhpcy5hcHBDb250YWluZXIuZ2V0Q29tcG9uZW50SW5zdGFuY2UoJ1BhZ2VFZGl0b3InKTtcbiAgICBpZiAocGFnZUVkaXRvciAhPSBudWxsKSB7XG4gICAgICBwYWdlRWRpdG9yLmZvY3VzVG9FZGl0b3IoKTtcbiAgICB9XG4gIH1cblxuICBnZXRDdXJyZW50T3B0aW9uc1RvU2F2ZSgpIHtcbiAgICBjb25zdCBvcHQgPSB7XG4gICAgICBpc1NsYWNrRW5hYmxlZDogdGhpcy5zdGF0ZS5pc1NsYWNrRW5hYmxlZCxcbiAgICAgIHNsYWNrQ2hhbm5lbHM6IHRoaXMuc3RhdGUuc2xhY2tDaGFubmVscyxcbiAgICAgIGdyYW50OiB0aGlzLnN0YXRlLmdyYW50LFxuICAgICAgcGFnZVRhZ3M6IHRoaXMuc3RhdGUudGFncyxcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMuc3RhdGUuZ3JhbnRHcm91cElkICE9IG51bGwpIHtcbiAgICAgIG9wdC5ncmFudFVzZXJHcm91cElkID0gdGhpcy5zdGF0ZS5ncmFudEdyb3VwSWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9wdDtcbiAgfVxuXG4gIC8vIFNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvV2luZG93RXZlbnRIYW5kbGVycy9vbmJlZm9yZXVubG9hZCNleGFtcGxlXG4gIHNob3dVbnNhdmVkV2FybmluZyhlKSB7XG4gICAgLy8gQ2FuY2VsIHRoZSBldmVudFxuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAvLyBkaXNwbGF5IGJyb3dzZXIgZGVmYXVsdCBtZXNzYWdlXG4gICAgZS5yZXR1cm5WYWx1ZSA9ICcnO1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGRpc2FibGVVbnNhdmVkV2FybmluZygpIHtcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignYmVmb3JldW5sb2FkJywgdGhpcy5zaG93VW5zYXZlZFdhcm5pbmcpO1xuICAgIHRoaXMuaXNTZXRCZWZvcmV1bmxvYWRFdmVudEhhbmRsZXIgPSBmYWxzZTtcbiAgfVxuXG4gIGVuYWJsZVVuc2F2ZWRXYXJuaW5nKCkge1xuICAgIGlmICghdGhpcy5pc1NldEJlZm9yZXVubG9hZEV2ZW50SGFuZGxlcikge1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2JlZm9yZXVubG9hZCcsIHRoaXMuc2hvd1Vuc2F2ZWRXYXJuaW5nKTtcbiAgICAgIHRoaXMuaXNTZXRCZWZvcmV1bmxvYWRFdmVudEhhbmRsZXIgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGNsZWFyRHJhZnQocGF0aCkge1xuICAgIGRlbGV0ZSB0aGlzLmRyYWZ0c1twYXRoXTtcbiAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2RyYWZ0cycsIEpTT04uc3RyaW5naWZ5KHRoaXMuZHJhZnRzKSk7XG4gIH1cblxuICBjbGVhckFsbERyYWZ0cygpIHtcbiAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ2RyYWZ0cycpO1xuICB9XG5cbiAgc2F2ZURyYWZ0KHBhdGgsIGJvZHkpIHtcbiAgICB0aGlzLmRyYWZ0c1twYXRoXSA9IGJvZHk7XG4gICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKCdkcmFmdHMnLCBKU09OLnN0cmluZ2lmeSh0aGlzLmRyYWZ0cykpO1xuICB9XG5cbiAgZmluZERyYWZ0KHBhdGgpIHtcbiAgICBpZiAodGhpcy5kcmFmdHMgIT0gbnVsbCAmJiB0aGlzLmRyYWZ0c1twYXRoXSkge1xuICAgICAgcmV0dXJuIHRoaXMuZHJhZnRzW3BhdGhdO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFFQTtBQUVBOzs7OztBQUlBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFaQTtBQWVBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBOzs7OztBQUdBO0FBQ0E7QUFDQTtBQUVBOzs7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7O0FBR0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUExTEEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/client/js/services/EditorContainer.js\n");
/***/ }),
/***/ "./src/client/js/services/PageAccessoriesContainer.js":
/*!************************************************************!*\
!*** ./src/client/js/services/PageAccessoriesContainer.js ***!
\************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return PageAccessoriesContainer; });\n/* harmony import */ var unstated__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! unstated */ \"./node_modules/unstated/lib/unstated.es.js\");\n\n/**\n * Service container related to options for Application\n * @extends {Container} unstated Container\n */\n\nclass PageAccessoriesContainer extends unstated__WEBPACK_IMPORTED_MODULE_0__[\"Container\"] {\n constructor(appContainer) {\n super();\n this.appContainer = appContainer;\n this.state = {\n isPageAccessoriesModalShown: false,\n activeTab: '',\n // Prevent unnecessary rendering\n activeComponents: new Set([''])\n };\n this.openPageAccessoriesModal = this.openPageAccessoriesModal.bind(this);\n this.closePageAccessoriesModal = this.closePageAccessoriesModal.bind(this);\n this.switchActiveTab = this.switchActiveTab.bind(this);\n }\n /**\n * Workaround for the mangling in production build to break constructor.name\n */\n\n\n static getClassName() {\n return 'PageAccessoriesContainer';\n }\n\n openPageAccessoriesModal(activeTab) {\n this.setState({\n isPageAccessoriesModalShown: true\n });\n this.switchActiveTab(activeTab);\n }\n\n closePageAccessoriesModal() {\n this.setState({\n isPageAccessoriesModalShown: false,\n activeTab: ''\n });\n }\n\n switchActiveTab(activeTab) {\n this.setState({\n activeTab,\n activeComponents: this.state.activeComponents.add(activeTab)\n });\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvY2xpZW50L2pzL3NlcnZpY2VzL1BhZ2VBY2Nlc3Nvcmllc0NvbnRhaW5lci5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9jbGllbnQvanMvc2VydmljZXMvUGFnZUFjY2Vzc29yaWVzQ29udGFpbmVyLmpzP2FjNGQiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29udGFpbmVyIH0gZnJvbSAndW5zdGF0ZWQnO1xuXG4vKipcbiAqIFNlcnZpY2UgY29udGFpbmVyIHJlbGF0ZWQgdG8gb3B0aW9ucyBmb3IgQXBwbGljYXRpb25cbiAqIEBleHRlbmRzIHtDb250YWluZXJ9IHVuc3RhdGVkIENvbnRhaW5lclxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBhZ2VBY2Nlc3Nvcmllc0NvbnRhaW5lciBleHRlbmRzIENvbnRhaW5lciB7XG5cbiAgY29uc3RydWN0b3IoYXBwQ29udGFpbmVyKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMuYXBwQ29udGFpbmVyID0gYXBwQ29udGFpbmVyO1xuXG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGlzUGFnZUFjY2Vzc29yaWVzTW9kYWxTaG93bjogZmFsc2UsXG4gICAgICBhY3RpdmVUYWI6ICcnLFxuICAgICAgLy8gUHJldmVudCB1bm5lY2Vzc2FyeSByZW5kZXJpbmdcbiAgICAgIGFjdGl2ZUNvbXBvbmVudHM6IG5ldyBTZXQoWycnXSksXG4gICAgfTtcbiAgICB0aGlzLm9wZW5QYWdlQWNjZXNzb3JpZXNNb2RhbCA9IHRoaXMub3BlblBhZ2VBY2Nlc3Nvcmllc01vZGFsLmJpbmQodGhpcyk7XG4gICAgdGhpcy5jbG9zZVBhZ2VBY2Nlc3Nvcmllc01vZGFsID0gdGhpcy5jbG9zZVBhZ2VBY2Nlc3Nvcmllc01vZGFsLmJpbmQodGhpcyk7XG4gICAgdGhpcy5zd2l0Y2hBY3RpdmVUYWIgPSB0aGlzLnN3aXRjaEFjdGl2ZVRhYi5iaW5kKHRoaXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdvcmthcm91bmQgZm9yIHRoZSBtYW5nbGluZyBpbiBwcm9kdWN0aW9uIGJ1aWxkIHRvIGJyZWFrIGNvbnN0cnVjdG9yLm5hbWVcbiAgICovXG4gIHN0YXRpYyBnZXRDbGFzc05hbWUoKSB7XG4gICAgcmV0dXJuICdQYWdlQWNjZXNzb3JpZXNDb250YWluZXInO1xuICB9XG5cblxuICBvcGVuUGFnZUFjY2Vzc29yaWVzTW9kYWwoYWN0aXZlVGFiKSB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBpc1BhZ2VBY2Nlc3Nvcmllc01vZGFsU2hvd246IHRydWUsXG4gICAgfSk7XG4gICAgdGhpcy5zd2l0Y2hBY3RpdmVUYWIoYWN0aXZlVGFiKTtcbiAgfVxuXG4gIGNsb3NlUGFnZUFjY2Vzc29yaWVzTW9kYWwoKSB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBpc1BhZ2VBY2Nlc3Nvcmllc01vZGFsU2hvd246IGZhbHNlLFxuICAgICAgYWN0aXZlVGFiOiAnJyxcbiAgICB9KTtcbiAgfVxuXG4gIHN3aXRjaEFjdGl2ZVRhYihhY3RpdmVUYWIpIHtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGFjdGl2ZVRhYiwgYWN0aXZlQ29tcG9uZW50czogdGhpcy5zdGF0ZS5hY3RpdmVDb21wb25lbnRzLmFkZChhY3RpdmVUYWIpLFxuICAgIH0pO1xuICB9XG5cbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTs7Ozs7QUFLQTtBQUVBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFEQTtBQUdBO0FBQ0E7QUE3Q0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/client/js/services/PageAccessoriesContainer.js\n");
/***/ }),
/***/ "./src/client/js/services/PageContainer.js":
/*!*************************************************!*\
!*** ./src/client/js/services/PageContainer.js ***!
\*************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function($) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return PageContainer; });\n/* harmony import */ var unstated__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! unstated */ \"./node_modules/unstated/lib/unstated.es.js\");\n/* harmony import */ var _alias_logger__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @alias/logger */ \"./src/lib/service/logger/index.js\");\n/* harmony import */ var _alias_logger__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_alias_logger__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var entities__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! entities */ \"./node_modules/entities/lib/index.js\");\n/* harmony import */ var entities__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(entities__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var toastr__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! toastr */ \"./node_modules/toastr/toastr.js\");\n/* harmony import */ var toastr__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(toastr__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _commons_util_path_utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @commons/util/path-utils */ \"./src/lib/util/path-utils.js\");\n/* harmony import */ var _commons_util_path_utils__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_commons_util_path_utils__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _util_apiNotification__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../util/apiNotification */ \"./src/client/js/util/apiNotification.js\");\n/* harmony import */ var _util_interceptor_detach_code_blocks__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../util/interceptor/detach-code-blocks */ \"./src/client/js/util/interceptor/detach-code-blocks.js\");\n/* harmony import */ var _util_interceptor_drawio_interceptor__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../util/interceptor/drawio-interceptor */ \"./src/client/js/util/interceptor/drawio-interceptor.js\");\n\n\n\n\n\n\n\n\nconst logger = _alias_logger__WEBPACK_IMPORTED_MODULE_1___default()('growi:services:PageContainer');\n/**\n * Service container related to Page\n * @extends {Container} unstated Container\n */\n\nclass PageContainer extends unstated__WEBPACK_IMPORTED_MODULE_0__[\"Container\"] {\n constructor(appContainer) {\n super();\n this.appContainer = appContainer;\n this.appContainer.registerContainer(this);\n this.state = {};\n const mainContent = document.querySelector('#content-main');\n\n if (mainContent == null) {\n logger.debug('#content-main element is not exists');\n return;\n }\n\n const revisionId = mainContent.getAttribute('data-page-revision-id');\n const path = decodeURI(mainContent.getAttribute('data-path'));\n this.state = {\n // local page data\n markdown: null,\n // will be initialized after initStateMarkdown()\n pageId: mainContent.getAttribute('data-page-id'),\n revisionId,\n revisionCreatedAt: +mainContent.getAttribute('data-page-revision-created'),\n path,\n tocHtml: '',\n isLiked: false,\n isBookmarked: false,\n seenUsers: [],\n seenUserIds: mainContent.getAttribute('data-page-ids-of-seen-users'),\n countOfSeenUsers: mainContent.getAttribute('data-page-count-of-seen-users'),\n likerUsers: [],\n sumOfLikers: 0,\n sumOfBookmarks: 0,\n createdAt: mainContent.getAttribute('data-page-created-at'),\n updatedAt: mainContent.getAttribute('data-page-updated-at'),\n deletedAt: mainContent.getAttribute('data-page-deleted-at') || null,\n isUserPage: JSON.parse(mainContent.getAttribute('data-page-user')) != null,\n isTrashPage: Object(_commons_util_path_utils__WEBPACK_IMPORTED_MODULE_4__[\"isTrashPage\"])(path),\n isDeleted: JSON.parse(mainContent.getAttribute('data-page-is-deleted')),\n isDeletable: JSON.parse(mainContent.getAttribute('data-page-is-deletable')),\n isNotCreatable: JSON.parse(mainContent.getAttribute('data-page-is-not-creatable')),\n isAbleToDeleteCompletely: JSON.parse(mainContent.getAttribute('data-page-is-able-to-delete-completely')),\n isPageExist: mainContent.getAttribute('data-page-id') != null,\n pageUser: JSON.parse(mainContent.getAttribute('data-page-user')),\n tags: null,\n hasChildren: JSON.parse(mainContent.getAttribute('data-page-has-children')),\n templateTagData: mainContent.getAttribute('data-template-tags') || null,\n shareLinksNumber: mainContent.getAttribute('data-share-links-number'),\n shareLinkId: JSON.parse(mainContent.getAttribute('data-share-link-id') || null),\n // latest(on remote) information\n remoteRevisionId: revisionId,\n revisionIdHackmdSynced: mainContent.getAttribute('data-page-revision-id-hackmd-synced') || null,\n lastUpdateUsername: mainContent.getAttribute('data-page-last-update-username') || null,\n deleteUsername: mainContent.getAttribute('data-page-delete-username') || null,\n pageIdOnHackmd: mainContent.getAttribute('data-page-id-on-hackmd') || null,\n hasDraftOnHackmd: !!mainContent.getAttribute('data-page-has-draft-on-hackmd'),\n isHackmdDraftUpdatingInRealtime: false\n }; // parse creator, lastUpdateUser and revisionAuthor\n\n try {\n this.state.creator = JSON.parse(mainContent.getAttribute('data-page-creator'));\n } catch (e) {\n logger.warn('The data of \\'data-page-creator\\' is invalid', e);\n }\n\n try {\n this.state.revisionAuthor = JSON.parse(mainContent.getAttribute('data-page-revision-author'));\n } catch (e) {\n logger.warn('The data of \\'data-page-revision-author\\' is invalid', e);\n }\n\n const {\n interceptorManager\n } = this.appContainer;\n interceptorManager.addInterceptor(new _util_interceptor_detach_code_blocks__WEBPACK_IMPORTED_MODULE_6__[\"DetachCodeBlockInterceptor\"](appContainer), 10); // process as soon as possible\n\n interceptorManager.addInterceptor(new _util_interceptor_drawio_interceptor__WEBPACK_IMPORTED_MODULE_7__[\"DrawioInterceptor\"](appContainer), 20);\n interceptorManager.addInterceptor(new _util_interceptor_detach_code_blocks__WEBPACK_IMPORTED_MODULE_6__[\"RestoreCodeBlockInterceptor\"](appContainer), 900); // process as late as possible\n\n this.initStateMarkdown();\n this.checkAndUpdateImageUrlCached(this.state.likerUsers);\n const {\n isSharedUser\n } = this.appContainer; // see https://dev.growi.org/5fabddf8bbeb1a0048bcb9e9\n\n const isAbleToGetAttachedInformationAboutPages = this.state.isPageExist && !isSharedUser;\n\n if (isAbleToGetAttachedInformationAboutPages) {\n this.retrieveSeenUsers();\n this.retrieveLikeInfo();\n this.retrieveBookmarkInfo();\n }\n\n this.setTocHtml = this.setTocHtml.bind(this);\n this.save = this.save.bind(this);\n this.checkAndUpdateImageUrlCached = this.checkAndUpdateImageUrlCached.bind(this);\n this.addWebSocketEventHandlers = this.addWebSocketEventHandlers.bind(this);\n this.addWebSocketEventHandlers();\n const unlinkPageButton = document.getElementById('unlink-page-button');\n\n if (unlinkPageButton != null) {\n unlinkPageButton.addEventListener('click', async () => {\n try {\n const res = await this.appContainer.apiPost('/pages.unlink', {\n path\n });\n window.location.href = encodeURI(`${res.path}?unlinked=true`);\n } catch (err) {\n Object(_util_apiNotification__WEBPACK_IMPORTED_MODULE_5__[\"toastError\"])(err);\n }\n });\n }\n }\n /**\n * Workaround for the mangling in production build to break constructor.name\n */\n\n\n static getClassName() {\n return 'PageContainer';\n }\n\n get isAbleToOpenPageEditor() {\n const {\n isNotCreatable,\n isTrashPage\n } = this.state;\n const {\n isGuestUser\n } = this.appContainer;\n return !isNotCreatable && !isTrashPage && !isGuestUser;\n }\n /**\n * whether to display reaction buttons\n * ex.) like, bookmark\n */\n\n\n get isAbleToShowPageReactionButtons() {\n const {\n isTrashPage,\n isPageExist\n } = this.state;\n const {\n isSharedUser\n } = this.appContainer;\n return !isTrashPage && isPageExist && !isSharedUser;\n }\n /**\n * whether to display tag labels\n */\n\n\n get isAbleToShowTagLabel() {\n const {\n isUserPage\n } = this.state;\n const {\n isSharedUser\n } = this.appContainer;\n return !isUserPage && !isSharedUser;\n }\n /**\n * whether to display page management\n * ex.) duplicate, rename\n */\n\n\n get isAbleToShowPageManagement() {\n const {\n isPageExist,\n isTrashPage\n } = this.state;\n const {\n isSharedUser\n } = this.appContainer;\n return isPageExist && !isTrashPage && !isSharedUser;\n }\n /**\n * whether to display pageEditorModeManager\n * ex.) view, edit, hackmd\n */\n\n\n get isAbleToShowPageEditorModeManager() {\n const {\n isNotCreatable,\n isTrashPage\n } = this.state;\n const {\n isSharedUser\n } = this.appContainer;\n return !isNotCreatable && !isTrashPage && !isSharedUser;\n }\n /**\n * whether to display pageAuthors\n * ex.) creator, lastUpdateUser\n */\n\n\n get isAbleToShowPageAuthors() {\n const {\n isPageExist,\n isUserPage\n } = this.state;\n return isPageExist && !isUserPage;\n }\n /**\n * whether to like button\n * not displayed on user page\n */\n\n\n get isAbleToShowLikeButton() {\n const {\n isUserPage\n } = this.state;\n const {\n isSharedUser\n } = this.appContainer;\n return !isUserPage && !isSharedUser;\n }\n /**\n * whether to Empty Trash Page\n * not displayed when guest user and not on trash page\n */\n\n\n get isAbleToShowEmptyTrashButton() {\n const {\n currentUser\n } = this.appContainer;\n const {\n path,\n hasChildren\n } = this.state;\n return currentUser != null && currentUser.admin && path === '/trash' && hasChildren;\n }\n /**\n * whether to display trash management buttons\n * ex.) undo, delete completly\n * not displayed when guest user\n */\n\n\n get isAbleToShowTrashPageManagementButtons() {\n const {\n currentUser\n } = this.appContainer;\n const {\n isDeleted\n } = this.state;\n return isDeleted && currentUser != null;\n }\n /**\n * initialize state for markdown data\n */\n\n\n initStateMarkdown() {\n let pageContent = '';\n const rawText = document.getElementById('raw-text-original');\n\n if (rawText) {\n pageContent = rawText.innerHTML;\n }\n\n const markdown = entities__WEBPACK_IMPORTED_MODULE_2__[\"decodeHTML\"](pageContent);\n this.state.markdown = markdown;\n }\n\n async retrieveSeenUsers() {\n const {\n users\n } = await this.appContainer.apiGet('/users.list', {\n user_ids: this.state.seenUserIds\n });\n this.setState({\n seenUsers: users\n });\n this.checkAndUpdateImageUrlCached(users);\n }\n\n async retrieveLikeInfo() {\n const res = await this.appContainer.apiv3Get('/page/like-info', {\n _id: this.state.pageId\n });\n const {\n sumOfLikers,\n isLiked\n } = res.data;\n this.setState({\n sumOfLikers,\n isLiked\n });\n }\n\n async toggleLike() {\n const bool = !this.state.isLiked;\n await this.appContainer.apiv3Put('/page/likes', {\n pageId: this.state.pageId,\n bool\n });\n this.setState({\n isLiked: bool\n });\n return this.retrieveLikeInfo();\n }\n\n async retrieveBookmarkInfo() {\n const response = await this.appContainer.apiv3Get('/bookmarks/info', {\n pageId: this.state.pageId\n });\n this.setState({\n sumOfBookmarks: response.data.sumOfBookmarks,\n isBookmarked: response.data.isBookmarked\n });\n }\n\n async toggleBookmark() {\n const bool = !this.state.isBookmarked;\n await this.appContainer.apiv3Put('/bookmarks', {\n pageId: this.state.pageId,\n bool\n });\n return this.retrieveBookmarkInfo();\n }\n\n async checkAndUpdateImageUrlCached(users) {\n const noImageCacheUsers = users.filter(user => {\n return user.imageUrlCached == null;\n });\n\n if (noImageCacheUsers.length === 0) {\n return;\n }\n\n const noImageCacheUserIds = noImageCacheUsers.map(user => {\n return user.id;\n });\n\n try {\n await this.appContainer.apiv3Put('/users/update.imageUrlCache', {\n userIds: noImageCacheUserIds\n });\n } catch (err) {\n // Error alert doesn't apear, because user don't need to notice this error.\n logger.error(err);\n }\n }\n\n get navigationContainer() {\n return this.appContainer.getContainer('NavigationContainer');\n }\n\n setLatestRemotePageData(s2cMessagePageUpdated) {\n const newState = {\n remoteRevisionId: s2cMessagePageUpdated.revisionId,\n revisionIdHackmdSynced: s2cMessagePageUpdated.revisionIdHackmdSynced,\n lastUpdateUsername: s2cMessagePageUpdated.lastUpdateUsername\n };\n\n if (s2cMessagePageUpdated.hasDraftOnHackmd != null) {\n newState.hasDraftOnHackmd = s2cMessagePageUpdated.hasDraftOnHackmd;\n }\n\n this.setState(newState);\n }\n\n setTocHtml(tocHtml) {\n if (this.state.tocHtml !== tocHtml) {\n this.setState({\n tocHtml\n });\n }\n }\n /**\n * save success handler\n * @param {object} page Page instance\n * @param {Array[Tag]} tags Array of Tag\n * @param {object} revision Revision instance\n */\n\n\n updateStateAfterSave(page, tags, revision) {\n const {\n editorMode\n } = this.navigationContainer.state; // update state of PageContainer\n\n const newState = {\n pageId: page._id,\n revisionId: revision._id,\n revisionCreatedAt: new Date(revision.createdAt).getTime() / 1000,\n remoteRevisionId: revision._id,\n revisionIdHackmdSynced: page.revisionHackmdSynced,\n hasDraftOnHackmd: page.hasDraftOnHackmd,\n markdown: revision.body,\n createdAt: page.createdAt,\n updatedAt: page.updatedAt\n };\n\n if (tags != null) {\n newState.tags = tags;\n }\n\n this.setState(newState); // PageEditor component\n\n const pageEditor = this.appContainer.getComponentInstance('PageEditor');\n\n if (pageEditor != null) {\n if (editorMode !== 'edit') {\n pageEditor.updateEditorValue(newState.markdown);\n }\n } // PageEditorByHackmd component\n\n\n const pageEditorByHackmd = this.appContainer.getComponentInstance('PageEditorByHackmd');\n\n if (pageEditorByHackmd != null) {\n // reset\n if (editorMode !== 'hackmd') {\n pageEditorByHackmd.reset();\n }\n } // hidden input\n\n\n $('input[name=\"revision_id\"]').val(newState.revisionId);\n }\n /**\n * Save page\n * @param {string} markdown\n * @param {object} optionsToSave\n * @return {object} { page: Page, tags: Tag[] }\n */\n\n\n async save(markdown, optionsToSave = {}) {\n const {\n editorMode\n } = this.navigationContainer.state;\n const {\n pageId,\n path\n } = this.state;\n let {\n revisionId\n } = this.state;\n const options = Object.assign({}, optionsToSave);\n\n if (editorMode === 'hackmd') {\n // set option to sync\n options.isSyncRevisionToHackmd = true;\n revisionId = this.state.revisionIdHackmdSynced;\n }\n\n let res;\n\n if (pageId == null) {\n res = await this.createPage(path, markdown, options);\n } else {\n res = await this.updatePage(pageId, revisionId, markdown, options);\n }\n\n this.updateStateAfterSave(res.page, res.tags, res.revision);\n return res;\n }\n\n async saveAndReload(optionsToSave) {\n if (optionsToSave == null) {\n const msg = '\\'saveAndReload\\' requires the \\'optionsToSave\\' param';\n throw new Error(msg);\n }\n\n const {\n editorMode\n } = this.navigationContainer.state;\n\n if (editorMode == null) {\n logger.warn('\\'saveAndReload\\' requires the \\'errorMode\\' param');\n return;\n }\n\n const {\n pageId,\n path\n } = this.state;\n let {\n revisionId\n } = this.state;\n const options = Object.assign({}, optionsToSave);\n let markdown;\n\n if (editorMode === 'hackmd') {\n const pageEditorByHackmd = this.appContainer.getComponentInstance('PageEditorByHackmd');\n markdown = await pageEditorByHackmd.getMarkdown(); // set option to sync\n\n options.isSyncRevisionToHackmd = true;\n revisionId = this.state.revisionIdHackmdSynced;\n } else {\n const pageEditor = this.appContainer.getComponentInstance('PageEditor');\n markdown = pageEditor.getMarkdown();\n }\n\n let res;\n\n if (pageId == null) {\n res = await this.createPage(path, markdown, options);\n } else {\n res = await this.updatePage(pageId, revisionId, markdown, options);\n }\n\n const editorContainer = this.appContainer.getContainer('EditorContainer');\n editorContainer.clearDraft(path);\n window.location.href = path;\n return res;\n }\n\n async createPage(pagePath, markdown, tmpParams) {\n const socketIoContainer = this.appContainer.getContainer('SocketIoContainer'); // clone\n\n const params = Object.assign(tmpParams, {\n socketClientId: socketIoContainer.getSocketClientId(),\n path: pagePath,\n body: markdown\n });\n const res = await this.appContainer.apiv3Post('/pages/', params);\n const {\n page,\n tags,\n revision\n } = res.data;\n return {\n page,\n tags,\n revision\n };\n }\n\n async updatePage(pageId, revisionId, markdown, tmpParams) {\n const socketIoContainer = this.appContainer.getContainer('SocketIoContainer'); // clone\n\n const params = Object.assign(tmpParams, {\n socketClientId: socketIoContainer.getSocketClientId(),\n page_id: pageId,\n revision_id: revisionId,\n body: markdown\n });\n const res = await this.appContainer.apiPost('/pages.update', params);\n\n if (!res.ok) {\n throw new Error(res.error);\n }\n\n return res;\n }\n\n deletePage(isRecursively, isCompletely) {\n const socketIoContainer = this.appContainer.getContainer('SocketIoContainer'); // control flag\n\n const completely = isCompletely ? true : null;\n const recursively = isRecursively ? true : null;\n return this.appContainer.apiPost('/pages.remove', {\n recursively,\n completely,\n page_id: this.state.pageId,\n revision_id: this.state.revisionId,\n socketClientId: socketIoContainer.getSocketClientId()\n });\n }\n\n revertRemove(isRecursively) {\n const socketIoContainer = this.appContainer.getContainer('SocketIoContainer'); // control flag\n\n const recursively = isRecursively ? true : null;\n return this.appContainer.apiPost('/pages.revertRemove', {\n recursively,\n page_id: this.state.pageId,\n socketClientId: socketIoContainer.getSocketClientId()\n });\n }\n\n rename(newPagePath, isRecursively, isRenameRedirect, isRemainMetadata) {\n const socketIoContainer = this.appContainer.getContainer('SocketIoContainer');\n const {\n pageId,\n revisionId,\n path\n } = this.state;\n return this.appContainer.apiv3Put('/pages/rename', {\n revisionId,\n pageId,\n isRecursively,\n isRenameRedirect,\n isRemainMetadata,\n newPagePath,\n path,\n socketClientId: socketIoContainer.getSocketClientId()\n });\n }\n\n showSuccessToastr() {\n toastr__WEBPACK_IMPORTED_MODULE_3__[\"success\"](undefined, 'Saved successfully', {\n closeButton: true,\n progressBar: true,\n newestOnTop: false,\n showDuration: '100',\n hideDuration: '100',\n timeOut: '1200',\n extendedTimeOut: '150'\n });\n }\n\n showErrorToastr(error) {\n toastr__WEBPACK_IMPORTED_MODULE_3__[\"error\"](error.message, 'Error occured', {\n closeButton: true,\n progressBar: true,\n newestOnTop: false,\n showDuration: '100',\n hideDuration: '100',\n timeOut: '3000'\n });\n }\n\n addWebSocketEventHandlers() {\n const pageContainer = this;\n const socketIoContainer = this.appContainer.getContainer('SocketIoContainer');\n const socket = socketIoContainer.getSocket();\n socket.on('page:create', data => {\n // skip if triggered myself\n if (data.socketClientId != null && data.socketClientId === socketIoContainer.getSocketClientId()) {\n return;\n }\n\n logger.debug({\n obj: data\n }, `websocket on 'page:create'`); // eslint-disable-line quotes\n // update remote page data\n\n const {\n s2cMessagePageUpdated\n } = data;\n\n if (s2cMessagePageUpdated.pageId === pageContainer.state.pageId) {\n pageContainer.setLatestRemotePageData(s2cMessagePageUpdated);\n }\n });\n socket.on('page:update', data => {\n // skip if triggered myself\n if (data.socketClientId != null && data.socketClientId === socketIoContainer.getSocketClientId()) {\n return;\n }\n\n logger.debug({\n obj: data\n }, `websocket on 'page:update'`); // eslint-disable-line quotes\n // update remote page data\n\n const {\n s2cMessagePageUpdated\n } = data;\n\n if (s2cMessagePageUpdated.pageId === pageContainer.state.pageId) {\n pageContainer.setLatestRemotePageData(s2cMessagePageUpdated);\n }\n });\n socket.on('page:delete', data => {\n // skip if triggered myself\n if (data.socketClientId != null && data.socketClientId === socketIoContainer.getSocketClientId()) {\n return;\n }\n\n logger.debug({\n obj: data\n }, `websocket on 'page:delete'`); // eslint-disable-line quotes\n // update remote page data\n\n const {\n s2cMessagePageUpdated\n } = data;\n\n if (s2cMessagePageUpdated.pageId === pageContainer.state.pageId) {\n pageContainer.setLatestRemotePageData(s2cMessagePageUpdated);\n }\n });\n socket.on('page:editingWithHackmd', data => {\n // skip if triggered myself\n if (data.socketClientId != null && data.socketClientId === socketIoContainer.getSocketClientId()) {\n return;\n }\n\n logger.debug({\n obj: data\n }, `websocket on 'page:editingWithHackmd'`); // eslint-disable-line quotes\n // update isHackmdDraftUpdatingInRealtime\n\n const {\n s2cMessagePageUpdated\n } = data;\n\n if (s2cMessagePageUpdated.pageId === pageContainer.state.pageId) {\n pageContainer.setState({\n isHackmdDraftUpdatingInRealtime: true\n });\n }\n });\n }\n /* TODO GW-325 */\n\n\n retrieveMyBookmarkList() {}\n\n}\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! jquery */ \"jquery\")))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvY2xpZW50L2pzL3NlcnZpY2VzL1BhZ2VDb250YWluZXIuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY2xpZW50L2pzL3NlcnZpY2VzL1BhZ2VDb250YWluZXIuanM/MzlkNiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb250YWluZXIgfSBmcm9tICd1bnN0YXRlZCc7XG5cbmltcG9ydCBsb2dnZXJGYWN0b3J5IGZyb20gJ0BhbGlhcy9sb2dnZXInO1xuXG5pbXBvcnQgKiBhcyBlbnRpdGllcyBmcm9tICdlbnRpdGllcyc7XG5pbXBvcnQgKiBhcyB0b2FzdHIgZnJvbSAndG9hc3RyJztcbmltcG9ydCB7IGlzVHJhc2hQYWdlIH0gZnJvbSAnQGNvbW1vbnMvdXRpbC9wYXRoLXV0aWxzJztcbmltcG9ydCB7IHRvYXN0RXJyb3IgfSBmcm9tICcuLi91dGlsL2FwaU5vdGlmaWNhdGlvbic7XG5cbmltcG9ydCB7XG4gIERldGFjaENvZGVCbG9ja0ludGVyY2VwdG9yLFxuICBSZXN0b3JlQ29kZUJsb2NrSW50ZXJjZXB0b3IsXG59IGZyb20gJy4uL3V0aWwvaW50ZXJjZXB0b3IvZGV0YWNoLWNvZGUtYmxvY2tzJztcblxuaW1wb3J0IHtcbiAgRHJhd2lvSW50ZXJjZXB0b3IsXG59IGZyb20gJy4uL3V0aWwvaW50ZXJjZXB0b3IvZHJhd2lvLWludGVyY2VwdG9yJztcblxuY29uc3QgbG9nZ2VyID0gbG9nZ2VyRmFjdG9yeSgnZ3Jvd2k6c2VydmljZXM6UGFnZUNvbnRhaW5lcicpO1xuXG4vKipcbiAqIFNlcnZpY2UgY29udGFpbmVyIHJlbGF0ZWQgdG8gUGFnZVxuICogQGV4dGVuZHMge0NvbnRhaW5lcn0gdW5zdGF0ZWQgQ29udGFpbmVyXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBhZ2VDb250YWluZXIgZXh0ZW5kcyBDb250YWluZXIge1xuXG4gIGNvbnN0cnVjdG9yKGFwcENvbnRhaW5lcikge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLmFwcENvbnRhaW5lciA9IGFwcENvbnRhaW5lcjtcbiAgICB0aGlzLmFwcENvbnRhaW5lci5yZWdpc3RlckNvbnRhaW5lcih0aGlzKTtcblxuICAgIHRoaXMuc3RhdGUgPSB7fTtcblxuICAgIGNvbnN0IG1haW5Db250ZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2NvbnRlbnQtbWFpbicpO1xuICAgIGlmIChtYWluQ29udGVudCA9PSBudWxsKSB7XG4gICAgICBsb2dnZXIuZGVidWcoJyNjb250ZW50LW1haW4gZWxlbWVudCBpcyBub3QgZXhpc3RzJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcmV2aXNpb25JZCA9IG1haW5Db250ZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1wYWdlLXJldmlzaW9uLWlkJyk7XG4gICAgY29uc3QgcGF0aCA9IGRlY29kZVVSSShtYWluQ29udGVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtcGF0aCcpKTtcblxuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAvLyBsb2NhbCBwYWdlIGRhdGFcbiAgICAgIG1hcmtkb3duOiBudWxsLCAvLyB3aWxsIGJlIGluaXRpYWxpemVkIGFmdGVyIGluaXRTdGF0ZU1hcmtkb3duKClcbiAgICAgIHBhZ2VJZDogbWFpbkNvbnRlbnQuZ2V0QXR0cmlidXRlKCdkYXRhLXBhZ2UtaWQnKSxcbiAgICAgIHJldmlzaW9uSWQsXG4gICAgICByZXZpc2lvbkNyZWF0ZWRBdDogK21haW5Db250ZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1wYWdlLXJldmlzaW9uLWNyZWF0ZWQnKSxcbiAgICAgIHBhdGgsXG4gICAgICB0b2NIdG1sOiAnJyxcbiAgICAgIGlzTGlrZWQ6IGZhbHNlLFxuICAgICAgaXNCb29rbWFya2VkOiBmYWxzZSxcbiAgICAgIHNlZW5Vc2VyczogW10sXG4gICAgICBzZWVuVXNlcklkczogbWFpbkNvbnRlbnQuZ2V0QXR0cmlidXRlKCdkYXRhLXBhZ2UtaWRzLW9mLXNlZW4tdXNlcnMnKSxcbiAgICAgIGNvdW50T2ZTZWVuVXNlcnM6IG1haW5Db250ZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1wYWdlLWNvdW50LW9mLXNlZW4tdXNlcnMnKSxcblxuICAgICAgbGlrZXJVc2VyczogW10sXG4gICAgICBzdW1PZkxpa2VyczogMCxcbiAgICAgIHN1bU9mQm9va21hcmtzOiAwLFxuICAgICAgY3JlYXRlZEF0OiBtYWluQ29udGVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtcGFnZS1jcmVhdGVkLWF0JyksXG4gICAgICB1cGRhdGVkQXQ6IG1haW5Db250ZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1wYWdlLXVwZGF0ZWQtYXQnKSxcbiAgICAgIGRlbGV0ZWRBdDogbWFpbkNvbnRlbnQuZ2V0QXR0cmlidXRlKCdkYXRhLXBhZ2UtZGVsZXRlZC1hdCcpIHx8IG51bGwsXG5cbiAgICAgIGlzVXNlclBhZ2U6IEpTT04ucGFyc2UobWFpbkNvbnRlbnQuZ2V0QXR0cmlidXRlKCdkYXRhLXBhZ2UtdXNlcicpKSAhPSBudWxsLFxuICAgICAgaXNUcmFzaFBhZ2U6IGlzVHJhc2hQYWdlKHBhdGgpLFxuICAgICAgaXNEZWxldGVkOiBKU09OLnBhcnNlKG1haW5Db250ZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1wYWdlLWlzLWRlbGV0ZWQnKSksXG4gICAgICBpc0RlbGV0YWJsZTogSlNPTi5wYXJzZShtYWluQ29udGVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtcGFnZS1pcy1kZWxldGFibGUnKSksXG4gICAgICBpc05vdENyZWF0YWJsZTogSlNPTi5wYXJzZShtYWluQ29udGVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtcGFnZS1pcy1ub3QtY3JlYXRhYmxlJykpLFxuICAgICAgaXNBYmxlVG9EZWxldGVDb21wbGV0ZWx5OiBKU09OLnBhcnNlKG1haW5Db250ZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1wYWdlLWlzLWFibGUtdG8tZGVsZXRlLWNvbXBsZXRlbHknKSksXG4gICAgICBpc1BhZ2VFeGlzdDogbWFpbkNvbnRlbnQuZ2V0QXR0cmlidXRlKCdkYXRhLXBhZ2UtaWQnKSAhPSBudWxsLFxuXG4gICAgICBwYWdlVXNlcjogSlNPTi5wYXJzZShtYWluQ29udGVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtcGFnZS11c2VyJykpLFxuICAgICAgdGFnczogbnVsbCxcbiAgICAgIGhhc0NoaWxkcmVuOiBKU09OLnBhcnNlKG1haW5Db250ZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1wYWdlLWhhcy1jaGlsZHJlbicpKSxcbiAgICAgIHRlbXBsYXRlVGFnRGF0YTogbWFpbkNvbnRlbnQuZ2V0QXR0cmlidXRlKCdkYXRhLXRlbXBsYXRlLXRhZ3MnKSB8fCBudWxsLFxuICAgICAgc2hhcmVMaW5rc051bWJlcjogbWFpbkNvbnRlbnQuZ2V0QXR0cmlidXRlKCdkYXRhLXNoYXJlLWxpbmtzLW51bWJlcicpLFxuICAgICAgc2hhcmVMaW5rSWQ6IEpTT04ucGFyc2UobWFpbkNvbnRlbnQuZ2V0QXR0cmlidXRlKCdkYXRhLXNoYXJlLWxpbmstaWQnKSB8fCBudWxsKSxcblxuICAgICAgLy8gbGF0ZXN0KG9uIHJlbW90ZSkgaW5mb3JtYXRpb25cbiAgICAgIHJlbW90ZVJldmlzaW9uSWQ6IHJldmlzaW9uSWQsXG4gICAgICByZXZpc2lvbklkSGFja21kU3luY2VkOiBtYWluQ29udGVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtcGFnZS1yZXZpc2lvbi1pZC1oYWNrbWQtc3luY2VkJykgfHwgbnVsbCxcbiAgICAgIGxhc3RVcGRhdGVVc2VybmFtZTogbWFpbkNvbnRlbnQuZ2V0QXR0cmlidXRlKCdkYXRhLXBhZ2UtbGFzdC11cGRhdGUtdXNlcm5hbWUnKSB8fCBudWxsLFxuICAgICAgZGVsZXRlVXNlcm5hbWU6IG1haW5Db250ZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1wYWdlLWRlbGV0ZS11c2VybmFtZScpIHx8IG51bGwsXG4gICAgICBwYWdlSWRPbkhhY2ttZDogbWFpbkNvbnRlbnQuZ2V0QXR0cmlidXRlKCdkYXRhLXBhZ2UtaWQtb24taGFja21kJykgfHwgbnVsbCxcbiAgICAgIGhhc0RyYWZ0T25IYWNrbWQ6ICEhbWFpbkNvbnRlbnQuZ2V0QXR0cmlidXRlKCdkYXRhLXBhZ2UtaGFzLWRyYWZ0LW9uLWhhY2ttZCcpLFxuICAgICAgaXNIYWNrbWREcmFmdFVwZGF0aW5nSW5SZWFsdGltZTogZmFsc2UsXG4gICAgfTtcblxuICAgIC8vIHBhcnNlIGNyZWF0b3IsIGxhc3RVcGRhdGVVc2VyIGFuZCByZXZpc2lvbkF1dGhvclxuICAgIHRyeSB7XG4gICAgICB0aGlzLnN0YXRlLmNyZWF0b3IgPSBKU09OLnBhcnNlKG1haW5Db250ZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1wYWdlLWNyZWF0b3InKSk7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICBsb2dnZXIud2FybignVGhlIGRhdGEgb2YgXFwnZGF0YS1wYWdlLWNyZWF0b3JcXCcgaXMgaW52YWxpZCcsIGUpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgdGhpcy5zdGF0ZS5yZXZpc2lvbkF1dGhvciA9IEpTT04ucGFyc2UobWFpbkNvbnRlbnQuZ2V0QXR0cmlidXRlKCdkYXRhLXBhZ2UtcmV2aXNpb24tYXV0aG9yJykpO1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgbG9nZ2VyLndhcm4oJ1RoZSBkYXRhIG9mIFxcJ2RhdGEtcGFnZS1yZXZpc2lvbi1hdXRob3JcXCcgaXMgaW52YWxpZCcsIGUpO1xuICAgIH1cblxuICAgIGNvbnN0IHsgaW50ZXJjZXB0b3JNYW5hZ2VyIH0gPSB0aGlzLmFwcENvbnRhaW5lcjtcbiAgICBpbnRlcmNlcHRvck1hbmFnZXIuYWRkSW50ZXJjZXB0b3IobmV3IERldGFjaENvZGVCbG9ja0ludGVyY2VwdG9yKGFwcENvbnRhaW5lciksIDEwKTsgLy8gcHJvY2VzcyBhcyBzb29uIGFzIHBvc3NpYmxlXG4gICAgaW50ZXJjZXB0b3JNYW5hZ2VyLmFkZEludGVyY2VwdG9yKG5ldyBEcmF3aW9JbnRlcmNlcHRvcihhcHBDb250YWluZXIpLCAyMCk7XG4gICAgaW50ZXJjZXB0b3JNYW5hZ2VyLmFkZEludGVyY2VwdG9yKG5ldyBSZXN0b3JlQ29kZUJsb2NrSW50ZXJjZXB0b3IoYXBwQ29udGFpbmVyKSwgOTAwKTsgLy8gcHJvY2VzcyBhcyBsYXRlIGFzIHBvc3NpYmxlXG5cbiAgICB0aGlzLmluaXRTdGF0ZU1hcmtkb3duKCk7XG4gICAgdGhpcy5jaGVja0FuZFVwZGF0ZUltYWdlVXJsQ2FjaGVkKHRoaXMuc3RhdGUubGlrZXJVc2Vycyk7XG5cbiAgICBjb25zdCB7IGlzU2hhcmVkVXNlciB9ID0gdGhpcy5hcHBDb250YWluZXI7XG5cbiAgICAvLyBzZWUgaHR0cHM6Ly9kZXYuZ3Jvd2kub3JnLzVmYWJkZGY4YmJlYjFhMDA0OGJjYjllOVxuICAgIGNvbnN0IGlzQWJsZVRvR2V0QXR0YWNoZWRJbmZvcm1hdGlvbkFib3V0UGFnZXMgPSB0aGlzLnN0YXRlLmlzUGFnZUV4aXN0ICYmICFpc1NoYXJlZFVzZXI7XG5cbiAgICBpZiAoaXNBYmxlVG9HZXRBdHRhY2hlZEluZm9ybWF0aW9uQWJvdXRQYWdlcykge1xuICAgICAgdGhpcy5yZXRyaWV2ZVNlZW5Vc2VycygpO1xuICAgICAgdGhpcy5yZXRyaWV2ZUxpa2VJbmZvKCk7XG4gICAgICB0aGlzLnJldHJpZXZlQm9va21hcmtJbmZvKCk7XG4gICAgfVxuXG4gICAgdGhpcy5zZXRUb2NIdG1sID0gdGhpcy5zZXRUb2NIdG1sLmJpbmQodGhpcyk7XG4gICAgdGhpcy5zYXZlID0gdGhpcy5zYXZlLmJpbmQodGhpcyk7XG4gICAgdGhpcy5jaGVja0FuZFVwZGF0ZUltYWdlVXJsQ2FjaGVkID0gdGhpcy5jaGVja0FuZFVwZGF0ZUltYWdlVXJsQ2FjaGVkLmJpbmQodGhpcyk7XG4gICAgdGhpcy5hZGRXZWJTb2NrZXRFdmVudEhhbmRsZXJzID0gdGhpcy5hZGRXZWJTb2NrZXRFdmVudEhhbmRsZXJzLmJpbmQodGhpcyk7XG4gICAgdGhpcy5hZGRXZWJTb2NrZXRFdmVudEhhbmRsZXJzKCk7XG5cbiAgICBjb25zdCB1bmxpbmtQYWdlQnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3VubGluay1wYWdlLWJ1dHRvbicpO1xuICAgIGlmICh1bmxpbmtQYWdlQnV0dG9uICE9IG51bGwpIHtcbiAgICAgIHVubGlua1BhZ2VCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBhc3luYygpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmFwcENvbnRhaW5lci5hcGlQb3N0KCcvcGFnZXMudW5saW5rJywgeyBwYXRoIH0pO1xuICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gZW5jb2RlVVJJKGAke3Jlcy5wYXRofT91bmxpbmtlZD10cnVlYCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgIHRvYXN0RXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gIH1cblxuICAvKipcbiAgICogV29ya2Fyb3VuZCBmb3IgdGhlIG1hbmdsaW5nIGluIHByb2R1Y3Rpb24gYnVpbGQgdG8gYnJlYWsgY29uc3RydWN0b3IubmFtZVxuICAgKi9cbiAgc3RhdGljIGdldENsYXNzTmFtZSgpIHtcbiAgICByZXR1cm4gJ1BhZ2VDb250YWluZXInO1xuICB9XG5cblxuICBnZXQgaXNBYmxlVG9PcGVuUGFnZUVkaXRvcigpIHtcbiAgICBjb25zdCB7IGlzTm90Q3JlYXRhYmxlLCBpc1RyYXNoUGFnZSB9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCB7IGlzR3Vlc3RVc2VyIH0gPSB0aGlzLmFwcENvbnRhaW5lcjtcblxuICAgIHJldHVybiAoIWlzTm90Q3JlYXRhYmxlICYmICFpc1RyYXNoUGFnZSAmJiAhaXNHdWVzdFVzZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIHdoZXRoZXIgdG8gZGlzcGxheSByZWFjdGlvbiBidXR0b25zXG4gICAqIGV4LikgbGlrZSwgYm9va21hcmtcbiAgICovXG4gIGdldCBpc0FibGVUb1Nob3dQYWdlUmVhY3Rpb25CdXR0b25zKCkge1xuICAgIGNvbnN0IHsgaXNUcmFzaFBhZ2UsIGlzUGFnZUV4aXN0IH0gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IHsgaXNTaGFyZWRVc2VyIH0gPSB0aGlzLmFwcENvbnRhaW5lcjtcblxuICAgIHJldHVybiAoIWlzVHJhc2hQYWdlICYmIGlzUGFnZUV4aXN0ICYmICFpc1NoYXJlZFVzZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIHdoZXRoZXIgdG8gZGlzcGxheSB0YWcgbGFiZWxzXG4gICAqL1xuICBnZXQgaXNBYmxlVG9TaG93VGFnTGFiZWwoKSB7XG4gICAgY29uc3QgeyBpc1VzZXJQYWdlIH0gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IHsgaXNTaGFyZWRVc2VyIH0gPSB0aGlzLmFwcENvbnRhaW5lcjtcblxuICAgIHJldHVybiAoIWlzVXNlclBhZ2UgJiYgIWlzU2hhcmVkVXNlcik7XG4gIH1cblxuICAvKipcbiAgICogd2hldGhlciB0byBkaXNwbGF5IHBhZ2UgbWFuYWdlbWVudFxuICAgKiBleC4pIGR1cGxpY2F0ZSwgcmVuYW1lXG4gICAqL1xuICBnZXQgaXNBYmxlVG9TaG93UGFnZU1hbmFnZW1lbnQoKSB7XG4gICAgY29uc3QgeyBpc1BhZ2VFeGlzdCwgaXNUcmFzaFBhZ2UgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3QgeyBpc1NoYXJlZFVzZXIgfSA9IHRoaXMuYXBwQ29udGFpbmVyO1xuXG4gICAgcmV0dXJuIChpc1BhZ2VFeGlzdCAmJiAhaXNUcmFzaFBhZ2UgJiYgIWlzU2hhcmVkVXNlcik7XG4gIH1cblxuICAvKipcbiAgICogd2hldGhlciB0byBkaXNwbGF5IHBhZ2VFZGl0b3JNb2RlTWFuYWdlclxuICAgKiBleC4pIHZpZXcsIGVkaXQsIGhhY2ttZFxuICAgKi9cbiAgZ2V0IGlzQWJsZVRvU2hvd1BhZ2VFZGl0b3JNb2RlTWFuYWdlcigpIHtcbiAgICBjb25zdCB7IGlzTm90Q3JlYXRhYmxlLCBpc1RyYXNoUGFnZSB9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCB7IGlzU2hhcmVkVXNlciB9ID0gdGhpcy5hcHBDb250YWluZXI7XG5cbiAgICByZXR1cm4gKCFpc05vdENyZWF0YWJsZSAmJiAhaXNUcmFzaFBhZ2UgJiYgIWlzU2hhcmVkVXNlcik7XG4gIH1cblxuICAvKipcbiAgICogd2hldGhlciB0byBkaXNwbGF5IHBhZ2VBdXRob3JzXG4gICAqIGV4LikgY3JlYXRvciwgbGFzdFVwZGF0ZVVzZXJcbiAgICovXG4gIGdldCBpc0FibGVUb1Nob3dQYWdlQXV0aG9ycygpIHtcbiAgICBjb25zdCB7IGlzUGFnZUV4aXN0LCBpc1VzZXJQYWdlIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgcmV0dXJuIChpc1BhZ2VFeGlzdCAmJiAhaXNVc2VyUGFnZSk7XG4gIH1cblxuICAvKipcbiAgICogd2hldGhlciB0byBsaWtlIGJ1dHRvblxuICAgKiBub3QgZGlzcGxheWVkIG9uIHVzZXIgcGFnZVxuICAgKi9cbiAgZ2V0IGlzQWJsZVRvU2hvd0xpa2VCdXR0b24oKSB7XG4gICAgY29uc3QgeyBpc1VzZXJQYWdlIH0gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IHsgaXNTaGFyZWRVc2VyIH0gPSB0aGlzLmFwcENvbnRhaW5lcjtcblxuICAgIHJldHVybiAoIWlzVXNlclBhZ2UgJiYgIWlzU2hhcmVkVXNlcik7XG4gIH1cblxuICAvKipcbiAgICogd2hldGhlciB0byBFbXB0eSBUcmFzaCBQYWdlXG4gICAqIG5vdCBkaXNwbGF5ZWQgd2hlbiBndWVzdCB1c2VyIGFuZCBub3Qgb24gdHJhc2ggcGFnZVxuICAgKi9cbiAgZ2V0IGlzQWJsZVRvU2hvd0VtcHR5VHJhc2hCdXR0b24oKSB7XG4gICAgY29uc3QgeyBjdXJyZW50VXNlciB9ID0gdGhpcy5hcHBDb250YWluZXI7XG4gICAgY29uc3QgeyBwYXRoLCBoYXNDaGlsZHJlbiB9ID0gdGhpcy5zdGF0ZTtcblxuICAgIHJldHVybiAoY3VycmVudFVzZXIgIT0gbnVsbCAmJiBjdXJyZW50VXNlci5hZG1pbiAmJiBwYXRoID09PSAnL3RyYXNoJyAmJiBoYXNDaGlsZHJlbik7XG4gIH1cblxuICAvKipcbiAgICogd2hldGhlciB0byBkaXNwbGF5IHRyYXNoIG1hbmFnZW1lbnQgYnV0dG9uc1xuICAgKiBleC4pIHVuZG8sIGRlbGV0ZSBjb21wbGV0bHlcbiAgICogbm90IGRpc3BsYXllZCB3aGVuIGd1ZXN0IHVzZXJcbiAgICovXG4gIGdldCBpc0FibGVUb1Nob3dUcmFzaFBhZ2VNYW5hZ2VtZW50QnV0dG9ucygpIHtcbiAgICBjb25zdCB7IGN1cnJlbnRVc2VyIH0gPSB0aGlzLmFwcENvbnRhaW5lcjtcbiAgICBjb25zdCB7IGlzRGVsZXRlZCB9ID0gdGhpcy5zdGF0ZTtcblxuICAgIHJldHVybiAoaXNEZWxldGVkICYmIGN1cnJlbnRVc2VyICE9IG51bGwpO1xuICB9XG5cbiAgLyoqXG4gICAqIGluaXRpYWxpemUgc3RhdGUgZm9yIG1hcmtkb3duIGRhdGFcbiAgICovXG4gIGluaXRTdGF0ZU1hcmtkb3duKCkge1xuICAgIGxldCBwYWdlQ29udGVudCA9ICcnO1xuXG4gICAgY29uc3QgcmF3VGV4dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyYXctdGV4dC1vcmlnaW5hbCcpO1xuICAgIGlmIChyYXdUZXh0KSB7XG4gICAgICBwYWdlQ29udGVudCA9IHJhd1RleHQuaW5uZXJIVE1MO1xuICAgIH1cbiAgICBjb25zdCBtYXJrZG93biA9IGVudGl0aWVzLmRlY29kZUhUTUwocGFnZUNvbnRlbnQpO1xuXG4gICAgdGhpcy5zdGF0ZS5tYXJrZG93biA9IG1hcmtkb3duO1xuICB9XG5cbiAgYXN5bmMgcmV0cmlldmVTZWVuVXNlcnMoKSB7XG4gICAgY29uc3QgeyB1c2VycyB9ID0gYXdhaXQgdGhpcy5hcHBDb250YWluZXIuYXBpR2V0KCcvdXNlcnMubGlzdCcsIHsgdXNlcl9pZHM6IHRoaXMuc3RhdGUuc2VlblVzZXJJZHMgfSk7XG5cbiAgICB0aGlzLnNldFN0YXRlKHsgc2VlblVzZXJzOiB1c2VycyB9KTtcbiAgICB0aGlzLmNoZWNrQW5kVXBkYXRlSW1hZ2VVcmxDYWNoZWQodXNlcnMpO1xuICB9XG5cbiAgYXN5bmMgcmV0cmlldmVMaWtlSW5mbygpIHtcbiAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmFwcENvbnRhaW5lci5hcGl2M0dldCgnL3BhZ2UvbGlrZS1pbmZvJywgeyBfaWQ6IHRoaXMuc3RhdGUucGFnZUlkIH0pO1xuICAgIGNvbnN0IHsgc3VtT2ZMaWtlcnMsIGlzTGlrZWQgfSA9IHJlcy5kYXRhO1xuXG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBzdW1PZkxpa2VycyxcbiAgICAgIGlzTGlrZWQsXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyB0b2dnbGVMaWtlKCkge1xuICAgIGNvbnN0IGJvb2wgPSAhdGhpcy5zdGF0ZS5pc0xpa2VkO1xuICAgIGF3YWl0IHRoaXMuYXBwQ29udGFpbmVyLmFwaXYzUHV0KCcvcGFnZS9saWtlcycsIHsgcGFnZUlkOiB0aGlzLnN0YXRlLnBhZ2VJZCwgYm9vbCB9KTtcbiAgICB0aGlzLnNldFN0YXRlKHsgaXNMaWtlZDogYm9vbCB9KTtcblxuICAgIHJldHVybiB0aGlzLnJldHJpZXZlTGlrZUluZm8oKTtcbiAgfVxuXG4gIGFzeW5jIHJldHJpZXZlQm9va21hcmtJbmZvKCkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5hcHBDb250YWluZXIuYXBpdjNHZXQoJy9ib29rbWFya3MvaW5mbycsIHsgcGFnZUlkOiB0aGlzLnN0YXRlLnBhZ2VJZCB9KTtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIHN1bU9mQm9va21hcmtzOiByZXNwb25zZS5kYXRhLnN1bU9mQm9va21hcmtzLFxuICAgICAgaXNCb29rbWFya2VkOiByZXNwb25zZS5kYXRhLmlzQm9va21hcmtlZCxcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHRvZ2dsZUJvb2ttYXJrKCkge1xuICAgIGNvbnN0IGJvb2wgPSAhdGhpcy5zdGF0ZS5pc0Jvb2ttYXJrZWQ7XG4gICAgYXdhaXQgdGhpcy5hcHBDb250YWluZXIuYXBpdjNQdXQoJy9ib29rbWFya3MnLCB7IHBhZ2VJZDogdGhpcy5zdGF0ZS5wYWdlSWQsIGJvb2wgfSk7XG4gICAgcmV0dXJuIHRoaXMucmV0cmlldmVCb29rbWFya0luZm8oKTtcbiAgfVxuXG4gIGFzeW5jIGNoZWNrQW5kVXBkYXRlSW1hZ2VVcmxDYWNoZWQodXNlcnMpIHtcbiAgICBjb25zdCBub0ltYWdlQ2FjaGVVc2VycyA9IHVzZXJzLmZpbHRlcigodXNlcikgPT4geyByZXR1cm4gdXNlci5pbWFnZVVybENhY2hlZCA9PSBudWxsIH0pO1xuICAgIGlmIChub0ltYWdlQ2FjaGVVc2Vycy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBub0ltYWdlQ2FjaGVVc2VySWRzID0gbm9JbWFnZUNhY2hlVXNlcnMubWFwKCh1c2VyKSA9PiB7IHJldHVybiB1c2VyLmlkIH0pO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmFwcENvbnRhaW5lci5hcGl2M1B1dCgnL3VzZXJzL3VwZGF0ZS5pbWFnZVVybENhY2hlJywgeyB1c2VySWRzOiBub0ltYWdlQ2FjaGVVc2VySWRzIH0pO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyBFcnJvciBhbGVydCBkb2Vzbid0IGFwZWFyLCBiZWNhdXNlIHVzZXIgZG9uJ3QgbmVlZCB0byBub3RpY2UgdGhpcyBlcnJvci5cbiAgICAgIGxvZ2dlci5lcnJvcihlcnIpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBuYXZpZ2F0aW9uQ29udGFpbmVyKCkge1xuICAgIHJldHVybiB0aGlzLmFwcENvbnRhaW5lci5nZXRDb250YWluZXIoJ05hdmlnYXRpb25Db250YWluZXInKTtcbiAgfVxuXG4gIHNldExhdGVzdFJlbW90ZVBhZ2VEYXRhKHMyY01lc3NhZ2VQYWdlVXBkYXRlZCkge1xuICAgIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgICAgcmVtb3RlUmV2aXNpb25JZDogczJjTWVzc2FnZVBhZ2VVcGRhdGVkLnJldmlzaW9uSWQsXG4gICAgICByZXZpc2lvbklkSGFja21kU3luY2VkOiBzMmNNZXNzYWdlUGFnZVVwZGF0ZWQucmV2aXNpb25JZEhhY2ttZFN5bmNlZCxcbiAgICAgIGxhc3RVcGRhdGVVc2VybmFtZTogczJjTWVzc2FnZVBhZ2VVcGRhdGVkLmxhc3RVcGRhdGVVc2VybmFtZSxcbiAgICB9O1xuXG4gICAgaWYgKHMyY01lc3NhZ2VQYWdlVXBkYXRlZC5oYXNEcmFmdE9uSGFja21kICE9IG51bGwpIHtcbiAgICAgIG5ld1N0YXRlLmhhc0RyYWZ0T25IYWNrbWQgPSBzMmNNZXNzYWdlUGFnZVVwZGF0ZWQuaGFzRHJhZnRPbkhhY2ttZDtcbiAgICB9XG5cbiAgICB0aGlzLnNldFN0YXRlKG5ld1N0YXRlKTtcbiAgfVxuXG4gIHNldFRvY0h0bWwodG9jSHRtbCkge1xuICAgIGlmICh0aGlzLnN0YXRlLnRvY0h0bWwgIT09IHRvY0h0bWwpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyB0b2NIdG1sIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBzYXZlIHN1Y2Nlc3MgaGFuZGxlclxuICAgKiBAcGFyYW0ge29iamVjdH0gcGFnZSBQYWdlIGluc3RhbmNlXG4gICAqIEBwYXJhbSB7QXJyYXlbVGFnXX0gdGFncyBBcnJheSBvZiBUYWdcbiAgICogQHBhcmFtIHtvYmplY3R9IHJldmlzaW9uIFJldmlzaW9uIGluc3RhbmNlXG4gICAqL1xuICB1cGRhdGVTdGF0ZUFmdGVyU2F2ZShwYWdlLCB0YWdzLCByZXZpc2lvbikge1xuICAgIGNvbnN0IHsgZWRpdG9yTW9kZSB9ID0gdGhpcy5uYXZpZ2F0aW9uQ29udGFpbmVyLnN0YXRlO1xuXG4gICAgLy8gdXBkYXRlIHN0YXRlIG9mIFBhZ2VDb250YWluZXJcbiAgICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAgIHBhZ2VJZDogcGFnZS5faWQsXG4gICAgICByZXZpc2lvbklkOiByZXZpc2lvbi5faWQsXG4gICAgICByZXZpc2lvbkNyZWF0ZWRBdDogbmV3IERhdGUocmV2aXNpb24uY3JlYXRlZEF0KS5nZXRUaW1lKCkgLyAxMDAwLFxuICAgICAgcmVtb3RlUmV2aXNpb25JZDogcmV2aXNpb24uX2lkLFxuICAgICAgcmV2aXNpb25JZEhhY2ttZFN5bmNlZDogcGFnZS5yZXZpc2lvbkhhY2ttZFN5bmNlZCxcbiAgICAgIGhhc0RyYWZ0T25IYWNrbWQ6IHBhZ2UuaGFzRHJhZnRPbkhhY2ttZCxcbiAgICAgIG1hcmtkb3duOiByZXZpc2lvbi5ib2R5LFxuICAgICAgY3JlYXRlZEF0OiBwYWdlLmNyZWF0ZWRBdCxcbiAgICAgIHVwZGF0ZWRBdDogcGFnZS51cGRhdGVkQXQsXG4gICAgfTtcbiAgICBpZiAodGFncyAhPSBudWxsKSB7XG4gICAgICBuZXdTdGF0ZS50YWdzID0gdGFncztcbiAgICB9XG4gICAgdGhpcy5zZXRTdGF0ZShuZXdTdGF0ZSk7XG5cbiAgICAvLyBQYWdlRWRpdG9yIGNvbXBvbmVudFxuICAgIGNvbnN0IHBhZ2VFZGl0b3IgPSB0aGlzLmFwcENvbnRhaW5lci5nZXRDb21wb25lbnRJbnN0YW5jZSgnUGFnZUVkaXRvcicpO1xuICAgIGlmIChwYWdlRWRpdG9yICE9IG51bGwpIHtcbiAgICAgIGlmIChlZGl0b3JNb2RlICE9PSAnZWRpdCcpIHtcbiAgICAgICAgcGFnZUVkaXRvci51cGRhdGVFZGl0b3JWYWx1ZShuZXdTdGF0ZS5tYXJrZG93bik7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIFBhZ2VFZGl0b3JCeUhhY2ttZCBjb21wb25lbnRcbiAgICBjb25zdCBwYWdlRWRpdG9yQnlIYWNrbWQgPSB0aGlzLmFwcENvbnRhaW5lci5nZXRDb21wb25lbnRJbnN0YW5jZSgnUGFnZUVkaXRvckJ5SGFja21kJyk7XG4gICAgaWYgKHBhZ2VFZGl0b3JCeUhhY2ttZCAhPSBudWxsKSB7XG4gICAgICAvLyByZXNldFxuICAgICAgaWYgKGVkaXRvck1vZGUgIT09ICdoYWNrbWQnKSB7XG4gICAgICAgIHBhZ2VFZGl0b3JCeUhhY2ttZC5yZXNldCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGhpZGRlbiBpbnB1dFxuICAgICQoJ2lucHV0W25hbWU9XCJyZXZpc2lvbl9pZFwiXScpLnZhbChuZXdTdGF0ZS5yZXZpc2lvbklkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlIHBhZ2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1hcmtkb3duXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zVG9TYXZlXG4gICAqIEByZXR1cm4ge29iamVjdH0geyBwYWdlOiBQYWdlLCB0YWdzOiBUYWdbXSB9XG4gICAqL1xuICBhc3luYyBzYXZlKG1hcmtkb3duLCBvcHRpb25zVG9TYXZlID0ge30pIHtcbiAgICBjb25zdCB7IGVkaXRvck1vZGUgfSA9IHRoaXMubmF2aWdhdGlvbkNvbnRhaW5lci5zdGF0ZTtcblxuICAgIGNvbnN0IHsgcGFnZUlkLCBwYXRoIH0gPSB0aGlzLnN0YXRlO1xuICAgIGxldCB7IHJldmlzaW9uSWQgfSA9IHRoaXMuc3RhdGU7XG5cbiAgICBjb25zdCBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9uc1RvU2F2ZSk7XG5cbiAgICBpZiAoZWRpdG9yTW9kZSA9PT0gJ2hhY2ttZCcpIHtcbiAgICAgIC8vIHNldCBvcHRpb24gdG8gc3luY1xuICAgICAgb3B0aW9ucy5pc1N5bmNSZXZpc2lvblRvSGFja21kID0gdHJ1ZTtcbiAgICAgIHJldmlzaW9uSWQgPSB0aGlzLnN0YXRlLnJldmlzaW9uSWRIYWNrbWRTeW5jZWQ7XG4gICAgfVxuXG4gICAgbGV0IHJlcztcbiAgICBpZiAocGFnZUlkID09IG51bGwpIHtcbiAgICAgIHJlcyA9IGF3YWl0IHRoaXMuY3JlYXRlUGFnZShwYXRoLCBtYXJrZG93biwgb3B0aW9ucyk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgcmVzID0gYXdhaXQgdGhpcy51cGRhdGVQYWdlKHBhZ2VJZCwgcmV2aXNpb25JZCwgbWFya2Rvd24sIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIHRoaXMudXBkYXRlU3RhdGVBZnRlclNhdmUocmVzLnBhZ2UsIHJlcy50YWdzLCByZXMucmV2aXNpb24pO1xuICAgIHJldHVybiByZXM7XG4gIH1cblxuICBhc3luYyBzYXZlQW5kUmVsb2FkKG9wdGlvbnNUb1NhdmUpIHtcbiAgICBpZiAob3B0aW9uc1RvU2F2ZSA9PSBudWxsKSB7XG4gICAgICBjb25zdCBtc2cgPSAnXFwnc2F2ZUFuZFJlbG9hZFxcJyByZXF1aXJlcyB0aGUgXFwnb3B0aW9uc1RvU2F2ZVxcJyBwYXJhbSc7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IobXNnKTtcbiAgICB9XG5cbiAgICBjb25zdCB7IGVkaXRvck1vZGUgfSA9IHRoaXMubmF2aWdhdGlvbkNvbnRhaW5lci5zdGF0ZTtcbiAgICBpZiAoZWRpdG9yTW9kZSA9PSBudWxsKSB7XG4gICAgICBsb2dnZXIud2FybignXFwnc2F2ZUFuZFJlbG9hZFxcJyByZXF1aXJlcyB0aGUgXFwnZXJyb3JNb2RlXFwnIHBhcmFtJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgeyBwYWdlSWQsIHBhdGggfSA9IHRoaXMuc3RhdGU7XG4gICAgbGV0IHsgcmV2aXNpb25JZCB9ID0gdGhpcy5zdGF0ZTtcblxuICAgIGNvbnN0IG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zVG9TYXZlKTtcblxuICAgIGxldCBtYXJrZG93bjtcbiAgICBpZiAoZWRpdG9yTW9kZSA9PT0gJ2hhY2ttZCcpIHtcbiAgICAgIGNvbnN0IHBhZ2VFZGl0b3JCeUhhY2ttZCA9IHRoaXMuYXBwQ29udGFpbmVyLmdldENvbXBvbmVudEluc3RhbmNlKCdQYWdlRWRpdG9yQnlIYWNrbWQnKTtcbiAgICAgIG1hcmtkb3duID0gYXdhaXQgcGFnZUVkaXRvckJ5SGFja21kLmdldE1hcmtkb3duKCk7XG4gICAgICAvLyBzZXQgb3B0aW9uIHRvIHN5bmNcbiAgICAgIG9wdGlvbnMuaXNTeW5jUmV2aXNpb25Ub0hhY2ttZCA9IHRydWU7XG4gICAgICByZXZpc2lvbklkID0gdGhpcy5zdGF0ZS5yZXZpc2lvbklkSGFja21kU3luY2VkO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNvbnN0IHBhZ2VFZGl0b3IgPSB0aGlzLmFwcENvbnRhaW5lci5nZXRDb21wb25lbnRJbnN0YW5jZSgnUGFnZUVkaXRvcicpO1xuICAgICAgbWFya2Rvd24gPSBwYWdlRWRpdG9yLmdldE1hcmtkb3duKCk7XG4gICAgfVxuXG4gICAgbGV0IHJlcztcbiAgICBpZiAocGFnZUlkID09IG51bGwpIHtcbiAgICAgIHJlcyA9IGF3YWl0IHRoaXMuY3JlYXRlUGFnZShwYXRoLCBtYXJrZG93biwgb3B0aW9ucyk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgcmVzID0gYXdhaXQgdGhpcy51cGRhdGVQYWdlKHBhZ2VJZCwgcmV2aXNpb25JZCwgbWFya2Rvd24sIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIGNvbnN0IGVkaXRvckNvbnRhaW5lciA9IHRoaXMuYXBwQ29udGFpbmVyLmdldENvbnRhaW5lcignRWRpdG9yQ29udGFpbmVyJyk7XG4gICAgZWRpdG9yQ29udGFpbmVyLmNsZWFyRHJhZnQocGF0aCk7XG4gICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBwYXRoO1xuXG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZVBhZ2UocGFnZVBhdGgsIG1hcmtkb3duLCB0bXBQYXJhbXMpIHtcbiAgICBjb25zdCBzb2NrZXRJb0NvbnRhaW5lciA9IHRoaXMuYXBwQ29udGFpbmVyLmdldENvbnRhaW5lcignU29ja2V0SW9Db250YWluZXInKTtcblxuICAgIC8vIGNsb25lXG4gICAgY29uc3QgcGFyYW1zID0gT2JqZWN0LmFzc2lnbih0bXBQYXJhbXMsIHtcbiAgICAgIHNvY2tldENsaWVudElkOiBzb2NrZXRJb0NvbnRhaW5lci5nZXRTb2NrZXRDbGllbnRJZCgpLFxuICAgICAgcGF0aDogcGFnZVBhdGgsXG4gICAgICBib2R5OiBtYXJrZG93bixcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuYXBwQ29udGFpbmVyLmFwaXYzUG9zdCgnL3BhZ2VzLycsIHBhcmFtcyk7XG4gICAgY29uc3QgeyBwYWdlLCB0YWdzLCByZXZpc2lvbiB9ID0gcmVzLmRhdGE7XG5cbiAgICByZXR1cm4geyBwYWdlLCB0YWdzLCByZXZpc2lvbiB9O1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlUGFnZShwYWdlSWQsIHJldmlzaW9uSWQsIG1hcmtkb3duLCB0bXBQYXJhbXMpIHtcbiAgICBjb25zdCBzb2NrZXRJb0NvbnRhaW5lciA9IHRoaXMuYXBwQ29udGFpbmVyLmdldENvbnRhaW5lcignU29ja2V0SW9Db250YWluZXInKTtcblxuICAgIC8vIGNsb25lXG4gICAgY29uc3QgcGFyYW1zID0gT2JqZWN0LmFzc2lnbih0bXBQYXJhbXMsIHtcbiAgICAgIHNvY2tldENsaWVudElkOiBzb2NrZXRJb0NvbnRhaW5lci5nZXRTb2NrZXRDbGllbnRJZCgpLFxuICAgICAgcGFnZV9pZDogcGFnZUlkLFxuICAgICAgcmV2aXNpb25faWQ6IHJldmlzaW9uSWQsXG4gICAgICBib2R5OiBtYXJrZG93bixcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuYXBwQ29udGFpbmVyLmFwaVBvc3QoJy9wYWdlcy51cGRhdGUnLCBwYXJhbXMpO1xuICAgIGlmICghcmVzLm9rKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IocmVzLmVycm9yKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIGRlbGV0ZVBhZ2UoaXNSZWN1cnNpdmVseSwgaXNDb21wbGV0ZWx5KSB7XG4gICAgY29uc3Qgc29ja2V0SW9Db250YWluZXIgPSB0aGlzLmFwcENvbnRhaW5lci5nZXRDb250YWluZXIoJ1NvY2tldElvQ29udGFpbmVyJyk7XG5cbiAgICAvLyBjb250cm9sIGZsYWdcbiAgICBjb25zdCBjb21wbGV0ZWx5ID0gaXNDb21wbGV0ZWx5ID8gdHJ1ZSA6IG51bGw7XG4gICAgY29uc3QgcmVjdXJzaXZlbHkgPSBpc1JlY3Vyc2l2ZWx5ID8gdHJ1ZSA6IG51bGw7XG5cbiAgICByZXR1cm4gdGhpcy5hcHBDb250YWluZXIuYXBpUG9zdCgnL3BhZ2VzLnJlbW92ZScsIHtcbiAgICAgIHJlY3Vyc2l2ZWx5LFxuICAgICAgY29tcGxldGVseSxcbiAgICAgIHBhZ2VfaWQ6IHRoaXMuc3RhdGUucGFnZUlkLFxuICAgICAgcmV2aXNpb25faWQ6IHRoaXMuc3RhdGUucmV2aXNpb25JZCxcbiAgICAgIHNvY2tldENsaWVudElkOiBzb2NrZXRJb0NvbnRhaW5lci5nZXRTb2NrZXRDbGllbnRJZCgpLFxuICAgIH0pO1xuXG4gIH1cblxuICByZXZlcnRSZW1vdmUoaXNSZWN1cnNpdmVseSkge1xuICAgIGNvbnN0IHNvY2tldElvQ29udGFpbmVyID0gdGhpcy5hcHBDb250YWluZXIuZ2V0Q29udGFpbmVyKCdTb2NrZXRJb0NvbnRhaW5lcicpO1xuXG4gICAgLy8gY29udHJvbCBmbGFnXG4gICAgY29uc3QgcmVjdXJzaXZlbHkgPSBpc1JlY3Vyc2l2ZWx5ID8gdHJ1ZSA6IG51bGw7XG5cbiAgICByZXR1cm4gdGhpcy5hcHBDb250YWluZXIuYXBpUG9zdCgnL3BhZ2VzLnJldmVydFJlbW92ZScsIHtcbiAgICAgIHJlY3Vyc2l2ZWx5LFxuICAgICAgcGFnZV9pZDogdGhpcy5zdGF0ZS5wYWdlSWQsXG4gICAgICBzb2NrZXRDbGllbnRJZDogc29ja2V0SW9Db250YWluZXIuZ2V0U29ja2V0Q2xpZW50SWQoKSxcbiAgICB9KTtcbiAgfVxuXG4gIHJlbmFtZShuZXdQYWdlUGF0aCwgaXNSZWN1cnNpdmVseSwgaXNSZW5hbWVSZWRpcmVjdCwgaXNSZW1haW5NZXRhZGF0YSkge1xuICAgIGNvbnN0IHNvY2tldElvQ29udGFpbmVyID0gdGhpcy5hcHBDb250YWluZXIuZ2V0Q29udGFpbmVyKCdTb2NrZXRJb0NvbnRhaW5lcicpO1xuICAgIGNvbnN0IHsgcGFnZUlkLCByZXZpc2lvbklkLCBwYXRoIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgcmV0dXJuIHRoaXMuYXBwQ29udGFpbmVyLmFwaXYzUHV0KCcvcGFnZXMvcmVuYW1lJywge1xuICAgICAgcmV2aXNpb25JZCxcbiAgICAgIHBhZ2VJZCxcbiAgICAgIGlzUmVjdXJzaXZlbHksXG4gICAgICBpc1JlbmFtZVJlZGlyZWN0LFxuICAgICAgaXNSZW1haW5NZXRhZGF0YSxcbiAgICAgIG5ld1BhZ2VQYXRoLFxuICAgICAgcGF0aCxcbiAgICAgIHNvY2tldENsaWVudElkOiBzb2NrZXRJb0NvbnRhaW5lci5nZXRTb2NrZXRDbGllbnRJZCgpLFxuICAgIH0pO1xuICB9XG5cbiAgc2hvd1N1Y2Nlc3NUb2FzdHIoKSB7XG4gICAgdG9hc3RyLnN1Y2Nlc3ModW5kZWZpbmVkLCAnU2F2ZWQgc3VjY2Vzc2Z1bGx5Jywge1xuICAgICAgY2xvc2VCdXR0b246IHRydWUsXG4gICAgICBwcm9ncmVzc0JhcjogdHJ1ZSxcbiAgICAgIG5ld2VzdE9uVG9wOiBmYWxzZSxcbiAgICAgIHNob3dEdXJhdGlvbjogJzEwMCcsXG4gICAgICBoaWRlRHVyYXRpb246ICcxMDAnLFxuICAgICAgdGltZU91dDogJzEyMDAnLFxuICAgICAgZXh0ZW5kZWRUaW1lT3V0OiAnMTUwJyxcbiAgICB9KTtcbiAgfVxuXG4gIHNob3dFcnJvclRvYXN0cihlcnJvcikge1xuICAgIHRvYXN0ci5lcnJvcihlcnJvci5tZXNzYWdlLCAnRXJyb3Igb2NjdXJlZCcsIHtcbiAgICAgIGNsb3NlQnV0dG9uOiB0cnVlLFxuICAgICAgcHJvZ3Jlc3NCYXI6IHRydWUsXG4gICAgICBuZXdlc3RPblRvcDogZmFsc2UsXG4gICAgICBzaG93RHVyYXRpb246ICcxMDAnLFxuICAgICAgaGlkZUR1cmF0aW9uOiAnMTAwJyxcbiAgICAgIHRpbWVPdXQ6ICczMDAwJyxcbiAgICB9KTtcbiAgfVxuXG4gIGFkZFdlYlNvY2tldEV2ZW50SGFuZGxlcnMoKSB7XG4gICAgY29uc3QgcGFnZUNvbnRhaW5lciA9IHRoaXM7XG4gICAgY29uc3Qgc29ja2V0SW9Db250YWluZXIgPSB0aGlzLmFwcENvbnRhaW5lci5nZXRDb250YWluZXIoJ1NvY2tldElvQ29udGFpbmVyJyk7XG4gICAgY29uc3Qgc29ja2V0ID0gc29ja2V0SW9Db250YWluZXIuZ2V0U29ja2V0KCk7XG5cbiAgICBzb2NrZXQub24oJ3BhZ2U6Y3JlYXRlJywgKGRhdGEpID0+IHtcbiAgICAgIC8vIHNraXAgaWYgdHJpZ2dlcmVkIG15c2VsZlxuICAgICAgaWYgKGRhdGEuc29ja2V0Q2xpZW50SWQgIT0gbnVsbCAmJiBkYXRhLnNvY2tldENsaWVudElkID09PSBzb2NrZXRJb0NvbnRhaW5lci5nZXRTb2NrZXRDbGllbnRJZCgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbG9nZ2VyLmRlYnVnKHsgb2JqOiBkYXRhIH0sIGB3ZWJzb2NrZXQgb24gJ3BhZ2U6Y3JlYXRlJ2ApOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHF1b3Rlc1xuXG4gICAgICAvLyB1cGRhdGUgcmVtb3RlIHBhZ2UgZGF0YVxuICAgICAgY29uc3QgeyBzMmNNZXNzYWdlUGFnZVVwZGF0ZWQgfSA9IGRhdGE7XG4gICAgICBpZiAoczJjTWVzc2FnZVBhZ2VVcGRhdGVkLnBhZ2VJZCA9PT0gcGFnZUNvbnRhaW5lci5zdGF0ZS5wYWdlSWQpIHtcbiAgICAgICAgcGFnZUNvbnRhaW5lci5zZXRMYXRlc3RSZW1vdGVQYWdlRGF0YShzMmNNZXNzYWdlUGFnZVVwZGF0ZWQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgc29ja2V0Lm9uKCdwYWdlOnVwZGF0ZScsIChkYXRhKSA9PiB7XG4gICAgICAvLyBza2lwIGlmIHRyaWdnZXJlZCBteXNlbGZcbiAgICAgIGlmIChkYXRhLnNvY2tldENsaWVudElkICE9IG51bGwgJiYgZGF0YS5zb2NrZXRDbGllbnRJZCA9PT0gc29ja2V0SW9Db250YWluZXIuZ2V0U29ja2V0Q2xpZW50SWQoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGxvZ2dlci5kZWJ1Zyh7IG9iajogZGF0YSB9LCBgd2Vic29ja2V0IG9uICdwYWdlOnVwZGF0ZSdgKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBxdW90ZXNcblxuICAgICAgLy8gdXBkYXRlIHJlbW90ZSBwYWdlIGRhdGFcbiAgICAgIGNvbnN0IHsgczJjTWVzc2FnZVBhZ2VVcGRhdGVkIH0gPSBkYXRhO1xuICAgICAgaWYgKHMyY01lc3NhZ2VQYWdlVXBkYXRlZC5wYWdlSWQgPT09IHBhZ2VDb250YWluZXIuc3RhdGUucGFnZUlkKSB7XG4gICAgICAgIHBhZ2VDb250YWluZXIuc2V0TGF0ZXN0UmVtb3RlUGFnZURhdGEoczJjTWVzc2FnZVBhZ2VVcGRhdGVkKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHNvY2tldC5vbigncGFnZTpkZWxldGUnLCAoZGF0YSkgPT4ge1xuICAgICAgLy8gc2tpcCBpZiB0cmlnZ2VyZWQgbXlzZWxmXG4gICAgICBpZiAoZGF0YS5zb2NrZXRDbGllbnRJZCAhPSBudWxsICYmIGRhdGEuc29ja2V0Q2xpZW50SWQgPT09IHNvY2tldElvQ29udGFpbmVyLmdldFNvY2tldENsaWVudElkKCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBsb2dnZXIuZGVidWcoeyBvYmo6IGRhdGEgfSwgYHdlYnNvY2tldCBvbiAncGFnZTpkZWxldGUnYCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcXVvdGVzXG5cbiAgICAgIC8vIHVwZGF0ZSByZW1vdGUgcGFnZSBkYXRhXG4gICAgICBjb25zdCB7IHMyY01lc3NhZ2VQYWdlVXBkYXRlZCB9ID0gZGF0YTtcbiAgICAgIGlmIChzMmNNZXNzYWdlUGFnZVVwZGF0ZWQucGFnZUlkID09PSBwYWdlQ29udGFpbmVyLnN0YXRlLnBhZ2VJZCkge1xuICAgICAgICBwYWdlQ29udGFpbmVyLnNldExhdGVzdFJlbW90ZVBhZ2VEYXRhKHMyY01lc3NhZ2VQYWdlVXBkYXRlZCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBzb2NrZXQub24oJ3BhZ2U6ZWRpdGluZ1dpdGhIYWNrbWQnLCAoZGF0YSkgPT4ge1xuICAgICAgLy8gc2tpcCBpZiB0cmlnZ2VyZWQgbXlzZWxmXG4gICAgICBpZiAoZGF0YS5zb2NrZXRDbGllbnRJZCAhPSBudWxsICYmIGRhdGEuc29ja2V0Q2xpZW50SWQgPT09IHNvY2tldElvQ29udGFpbmVyLmdldFNvY2tldENsaWVudElkKCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBsb2dnZXIuZGVidWcoeyBvYmo6IGRhdGEgfSwgYHdlYnNvY2tldCBvbiAncGFnZTplZGl0aW5nV2l0aEhhY2ttZCdgKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBxdW90ZXNcblxuICAgICAgLy8gdXBkYXRlIGlzSGFja21kRHJhZnRVcGRhdGluZ0luUmVhbHRpbWVcbiAgICAgIGNvbnN0IHsgczJjTWVzc2FnZVBhZ2VVcGRhdGVkIH0gPSBkYXRhO1xuICAgICAgaWYgKHMyY01lc3NhZ2VQYWdlVXBkYXRlZC5wYWdlSWQgPT09IHBhZ2VDb250YWluZXIuc3RhdGUucGFnZUlkKSB7XG4gICAgICAgIHBhZ2VDb250YWluZXIuc2V0U3RhdGUoeyBpc0hhY2ttZERyYWZ0VXBkYXRpbmdJblJlYWx0aW1lOiB0cnVlIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gIH1cblxuICAvKiBUT0RPIEdXLTMyNSAqL1xuICByZXRyaWV2ZU15Qm9va21hcmtMaXN0KCkge1xuICB9XG5cbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBS0E7QUFJQTtBQUVBOzs7OztBQUlBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUEzQ0E7QUFDQTtBQThDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTs7Ozs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBRUE7Ozs7OztBQUlBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBRUE7Ozs7O0FBR0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBRUE7Ozs7OztBQUlBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBRUE7Ozs7OztBQUlBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBRUE7Ozs7OztBQUlBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBRUE7Ozs7OztBQUlBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUVBOzs7Ozs7QUFJQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUVBOzs7Ozs7O0FBS0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBRUE7Ozs7O0FBR0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRUE7Ozs7Ozs7O0FBTUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBVEE7QUFDQTtBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7OztBQU1BO0FBQ0E7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFFQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFNQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU9BO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFSQTtBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFQQTtBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTkE7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFsbUJBO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/client/js/services/PageContainer.js\n");
/***/ }),
/***/ "./src/client/js/services/PageHistoryContainer.js":
/*!********************************************************!*\
!*** ./src/client/js/services/PageHistoryContainer.js ***!
\********************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return PageHistoryContainer; });\n/* harmony import */ var unstated__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! unstated */ \"./node_modules/unstated/lib/unstated.es.js\");\n/* harmony import */ var _alias_logger__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @alias/logger */ \"./src/lib/service/logger/index.js\");\n/* harmony import */ var _alias_logger__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_alias_logger__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _util_apiNotification__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../util/apiNotification */ \"./src/client/js/util/apiNotification.js\");\n\n\n\nconst logger = _alias_logger__WEBPACK_IMPORTED_MODULE_1___default()('growi:PageHistoryContainer');\n/**\n * Service container for personal settings page (PageHistory.jsx)\n * @extends {Container} unstated Container\n */\n\nclass PageHistoryContainer extends unstated__WEBPACK_IMPORTED_MODULE_0__[\"Container\"] {\n constructor(appContainer, pageContainer) {\n super();\n this.appContainer = appContainer;\n this.pageContainer = pageContainer;\n this.dummyRevisions = 0;\n this.state = {\n errorMessage: null,\n // set dummy rivisions for using suspense\n revisions: this.dummyRevisions,\n latestRevision: this.dummyRevisions,\n oldestRevision: this.dummyRevisions,\n diffOpened: {},\n totalPages: 0,\n activePage: 1,\n pagingLimit: 10\n };\n this.retrieveRevisions = this.retrieveRevisions.bind(this);\n this.getPreviousRevision = this.getPreviousRevision.bind(this);\n this.fetchPageRevisionBody = this.fetchPageRevisionBody.bind(this);\n }\n /**\n * Workaround for the mangling in production build to break constructor.name\n */\n\n\n static getClassName() {\n return 'PageHistoryContainer';\n }\n /**\n * syncRevisions of selectedPage\n * @param {number} selectedPage\n */\n\n\n async retrieveRevisions(selectedPage) {\n const {\n pageId,\n shareLinkId\n } = this.pageContainer.state;\n const {\n pagingLimit\n } = this.state;\n const page = selectedPage;\n const pagingLimitForApiParam = pagingLimit + 1;\n\n if (!pageId) {\n return;\n } // Get one more for the bottom display\n\n\n const res = await this.appContainer.apiv3Get('/revisions/list', {\n pageId,\n shareLinkId,\n page,\n limit: pagingLimitForApiParam\n });\n const rev = res.data.docs; // set Pagination state\n\n this.setState({\n activePage: selectedPage,\n totalPages: res.data.totalDocs,\n pagingLimit\n });\n const diffOpened = {};\n let lastId = rev.length - 1; // If the number of rev count is the same, the last rev is for diff display, so exclude it.\n\n if (rev.length > pagingLimit) {\n lastId = rev.length - 2;\n }\n\n res.data.docs.forEach((revision, i) => {\n const user = revision.author;\n\n if (user) {\n rev[i].author = user;\n }\n\n if (i === 0 || i === lastId) {\n diffOpened[revision._id] = true;\n } else {\n diffOpened[revision._id] = false;\n }\n });\n this.setState({\n revisions: rev\n });\n this.setState({\n diffOpened\n });\n\n if (selectedPage === 1) {\n this.setState({\n latestRevision: rev[0]\n });\n }\n\n if (selectedPage === res.data.totalPages) {\n this.setState({\n oldestRevision: rev[lastId]\n });\n } // load 0, and last default\n\n\n if (rev[0]) {\n this.fetchPageRevisionBody(rev[0]);\n }\n\n if (rev[1]) {\n this.fetchPageRevisionBody(rev[1]);\n }\n\n if (lastId !== 0 && lastId !== 1 && rev[lastId]) {\n this.fetchPageRevisionBody(rev[lastId]);\n }\n\n return;\n }\n\n getPreviousRevision(currentRevision) {\n let cursor = null;\n\n for (const revision of this.state.revisions) {\n // comparing ObjectId\n // eslint-disable-next-line eqeqeq\n if (cursor && cursor._id == currentRevision._id) {\n cursor = revision;\n break;\n }\n\n cursor = revision;\n }\n\n return cursor;\n }\n /**\n * fetch page revision body by revision in argument\n * @param {object} revision\n */\n\n\n async fetchPageRevisionBody(revision) {\n const {\n pageId,\n shareLinkId\n } = this.pageContainer.state;\n\n if (revision.body) {\n return;\n }\n\n try {\n const res = await this.appContainer.apiv3Get(`/revisions/${revision._id}`, {\n pageId,\n shareLinkId\n });\n this.setState({\n revisions: this.state.revisions.map(rev => {\n // comparing ObjectId\n // eslint-disable-next-line eqeqeq\n if (rev._id == res.data.revision._id) {\n return res.data.revision;\n }\n\n return rev;\n })\n });\n } catch (err) {\n Object(_util_apiNotification__WEBPACK_IMPORTED_MODULE_2__[\"toastError\"])(err);\n this.setState({\n errorMessage: err.message\n });\n logger.error(err);\n }\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvY2xpZW50L2pzL3NlcnZpY2VzL1BhZ2VIaXN0b3J5Q29udGFpbmVyLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL2NsaWVudC9qcy9zZXJ2aWNlcy9QYWdlSGlzdG9yeUNvbnRhaW5lci5qcz80YWRlIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnRhaW5lciB9IGZyb20gJ3Vuc3RhdGVkJztcblxuaW1wb3J0IGxvZ2dlckZhY3RvcnkgZnJvbSAnQGFsaWFzL2xvZ2dlcic7XG5cbmltcG9ydCB7IHRvYXN0RXJyb3IgfSBmcm9tICcuLi91dGlsL2FwaU5vdGlmaWNhdGlvbic7XG5cbmNvbnN0IGxvZ2dlciA9IGxvZ2dlckZhY3RvcnkoJ2dyb3dpOlBhZ2VIaXN0b3J5Q29udGFpbmVyJyk7XG5cbi8qKlxuICogU2VydmljZSBjb250YWluZXIgZm9yIHBlcnNvbmFsIHNldHRpbmdzIHBhZ2UgKFBhZ2VIaXN0b3J5LmpzeClcbiAqIEBleHRlbmRzIHtDb250YWluZXJ9IHVuc3RhdGVkIENvbnRhaW5lclxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQYWdlSGlzdG9yeUNvbnRhaW5lciBleHRlbmRzIENvbnRhaW5lciB7XG5cbiAgY29uc3RydWN0b3IoYXBwQ29udGFpbmVyLCBwYWdlQ29udGFpbmVyKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMuYXBwQ29udGFpbmVyID0gYXBwQ29udGFpbmVyO1xuICAgIHRoaXMucGFnZUNvbnRhaW5lciA9IHBhZ2VDb250YWluZXI7XG4gICAgdGhpcy5kdW1teVJldmlzaW9ucyA9IDA7XG5cbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgZXJyb3JNZXNzYWdlOiBudWxsLFxuXG4gICAgICAvLyBzZXQgZHVtbXkgcml2aXNpb25zIGZvciB1c2luZyBzdXNwZW5zZVxuICAgICAgcmV2aXNpb25zOiB0aGlzLmR1bW15UmV2aXNpb25zLFxuICAgICAgbGF0ZXN0UmV2aXNpb246IHRoaXMuZHVtbXlSZXZpc2lvbnMsXG4gICAgICBvbGRlc3RSZXZpc2lvbjogdGhpcy5kdW1teVJldmlzaW9ucyxcbiAgICAgIGRpZmZPcGVuZWQ6IHt9LFxuXG4gICAgICB0b3RhbFBhZ2VzOiAwLFxuICAgICAgYWN0aXZlUGFnZTogMSxcbiAgICAgIHBhZ2luZ0xpbWl0OiAxMCxcbiAgICB9O1xuXG4gICAgdGhpcy5yZXRyaWV2ZVJldmlzaW9ucyA9IHRoaXMucmV0cmlldmVSZXZpc2lvbnMuYmluZCh0aGlzKTtcbiAgICB0aGlzLmdldFByZXZpb3VzUmV2aXNpb24gPSB0aGlzLmdldFByZXZpb3VzUmV2aXNpb24uYmluZCh0aGlzKTtcbiAgICB0aGlzLmZldGNoUGFnZVJldmlzaW9uQm9keSA9IHRoaXMuZmV0Y2hQYWdlUmV2aXNpb25Cb2R5LmJpbmQodGhpcyk7XG4gIH1cblxuICAvKipcbiAgICogV29ya2Fyb3VuZCBmb3IgdGhlIG1hbmdsaW5nIGluIHByb2R1Y3Rpb24gYnVpbGQgdG8gYnJlYWsgY29uc3RydWN0b3IubmFtZVxuICAgKi9cbiAgc3RhdGljIGdldENsYXNzTmFtZSgpIHtcbiAgICByZXR1cm4gJ1BhZ2VIaXN0b3J5Q29udGFpbmVyJztcbiAgfVxuXG4gIC8qKlxuICAgKiBzeW5jUmV2aXNpb25zIG9mIHNlbGVjdGVkUGFnZVxuICAgKiBAcGFyYW0ge251bWJlcn0gc2VsZWN0ZWRQYWdlXG4gICAqL1xuICBhc3luYyByZXRyaWV2ZVJldmlzaW9ucyhzZWxlY3RlZFBhZ2UpIHtcbiAgICBjb25zdCB7IHBhZ2VJZCwgc2hhcmVMaW5rSWQgfSA9IHRoaXMucGFnZUNvbnRhaW5lci5zdGF0ZTtcbiAgICBjb25zdCB7IHBhZ2luZ0xpbWl0IH0gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IHBhZ2UgPSBzZWxlY3RlZFBhZ2U7XG4gICAgY29uc3QgcGFnaW5nTGltaXRGb3JBcGlQYXJhbSA9IHBhZ2luZ0xpbWl0ICsgMTtcblxuICAgIGlmICghcGFnZUlkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gR2V0IG9uZSBtb3JlIGZvciB0aGUgYm90dG9tIGRpc3BsYXlcbiAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmFwcENvbnRhaW5lci5hcGl2M0dldCgnL3JldmlzaW9ucy9saXN0Jywge1xuICAgICAgcGFnZUlkLCBzaGFyZUxpbmtJZCwgcGFnZSwgbGltaXQ6IHBhZ2luZ0xpbWl0Rm9yQXBpUGFyYW0sXG4gICAgfSk7XG4gICAgY29uc3QgcmV2ID0gcmVzLmRhdGEuZG9jcztcbiAgICAvLyBzZXQgUGFnaW5hdGlvbiBzdGF0ZVxuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgYWN0aXZlUGFnZTogc2VsZWN0ZWRQYWdlLFxuICAgICAgdG90YWxQYWdlczogcmVzLmRhdGEudG90YWxEb2NzLFxuICAgICAgcGFnaW5nTGltaXQsXG4gICAgfSk7XG5cbiAgICBjb25zdCBkaWZmT3BlbmVkID0ge307XG5cbiAgICBsZXQgbGFzdElkID0gcmV2Lmxlbmd0aCAtIDE7XG5cbiAgICAvLyBJZiB0aGUgbnVtYmVyIG9mIHJldiBjb3VudCBpcyB0aGUgc2FtZSwgdGhlIGxhc3QgcmV2IGlzIGZvciBkaWZmIGRpc3BsYXksIHNvIGV4Y2x1ZGUgaXQuXG4gICAgaWYgKHJldi5sZW5ndGggPiBwYWdpbmdMaW1pdCkge1xuICAgICAgbGFzdElkID0gcmV2Lmxlbmd0aCAtIDI7XG4gICAgfVxuXG4gICAgcmVzLmRhdGEuZG9jcy5mb3JFYWNoKChyZXZpc2lvbiwgaSkgPT4ge1xuICAgICAgY29uc3QgdXNlciA9IHJldmlzaW9uLmF1dGhvcjtcbiAgICAgIGlmICh1c2VyKSB7XG4gICAgICAgIHJldltpXS5hdXRob3IgPSB1c2VyO1xuICAgICAgfVxuXG4gICAgICBpZiAoaSA9PT0gMCB8fCBpID09PSBsYXN0SWQpIHtcbiAgICAgICAgZGlmZk9wZW5lZFtyZXZpc2lvbi5faWRdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBkaWZmT3BlbmVkW3JldmlzaW9uLl9pZF0gPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuc2V0U3RhdGUoeyByZXZpc2lvbnM6IHJldiB9KTtcbiAgICB0aGlzLnNldFN0YXRlKHsgZGlmZk9wZW5lZCB9KTtcblxuICAgIGlmIChzZWxlY3RlZFBhZ2UgPT09IDEpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBsYXRlc3RSZXZpc2lvbjogcmV2WzBdIH0pO1xuICAgIH1cblxuICAgIGlmIChzZWxlY3RlZFBhZ2UgPT09IHJlcy5kYXRhLnRvdGFsUGFnZXMpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBvbGRlc3RSZXZpc2lvbjogcmV2W2xhc3RJZF0gfSk7XG4gICAgfVxuXG4gICAgLy8gbG9hZCAwLCBhbmQgbGFzdCBkZWZhdWx0XG4gICAgaWYgKHJldlswXSkge1xuICAgICAgdGhpcy5mZXRjaFBhZ2VSZXZpc2lvbkJvZHkocmV2WzBdKTtcbiAgICB9XG4gICAgaWYgKHJldlsxXSkge1xuICAgICAgdGhpcy5mZXRjaFBhZ2VSZXZpc2lvbkJvZHkocmV2WzFdKTtcbiAgICB9XG4gICAgaWYgKGxhc3RJZCAhPT0gMCAmJiBsYXN0SWQgIT09IDEgJiYgcmV2W2xhc3RJZF0pIHtcbiAgICAgIHRoaXMuZmV0Y2hQYWdlUmV2aXNpb25Cb2R5KHJldltsYXN0SWRdKTtcbiAgICB9XG5cbiAgICByZXR1cm47XG4gIH1cblxuICBnZXRQcmV2aW91c1JldmlzaW9uKGN1cnJlbnRSZXZpc2lvbikge1xuICAgIGxldCBjdXJzb3IgPSBudWxsO1xuICAgIGZvciAoY29uc3QgcmV2aXNpb24gb2YgdGhpcy5zdGF0ZS5yZXZpc2lvbnMpIHtcbiAgICAgIC8vIGNvbXBhcmluZyBPYmplY3RJZFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuICAgICAgaWYgKGN1cnNvciAmJiBjdXJzb3IuX2lkID09IGN1cnJlbnRSZXZpc2lvbi5faWQpIHtcbiAgICAgICAgY3Vyc29yID0gcmV2aXNpb247XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjdXJzb3IgPSByZXZpc2lvbjtcbiAgICB9XG5cbiAgICByZXR1cm4gY3Vyc29yO1xuICB9XG5cbiAgLyoqXG4gICAqIGZldGNoIHBhZ2UgcmV2aXNpb24gYm9keSBieSByZXZpc2lvbiBpbiBhcmd1bWVudFxuICAgKiBAcGFyYW0ge29iamVjdH0gcmV2aXNpb25cbiAgICovXG4gIGFzeW5jIGZldGNoUGFnZVJldmlzaW9uQm9keShyZXZpc2lvbikge1xuICAgIGNvbnN0IHsgcGFnZUlkLCBzaGFyZUxpbmtJZCB9ID0gdGhpcy5wYWdlQ29udGFpbmVyLnN0YXRlO1xuXG4gICAgaWYgKHJldmlzaW9uLmJvZHkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5hcHBDb250YWluZXIuYXBpdjNHZXQoYC9yZXZpc2lvbnMvJHtyZXZpc2lvbi5faWR9YCwgeyBwYWdlSWQsIHNoYXJlTGlua0lkIH0pO1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHJldmlzaW9uczogdGhpcy5zdGF0ZS5yZXZpc2lvbnMubWFwKChyZXYpID0+IHtcbiAgICAgICAgICAvLyBjb21wYXJpbmcgT2JqZWN0SWRcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG4gICAgICAgICAgaWYgKHJldi5faWQgPT0gcmVzLmRhdGEucmV2aXNpb24uX2lkKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzLmRhdGEucmV2aXNpb247XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHJldjtcbiAgICAgICAgfSksXG4gICAgICB9KTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgdG9hc3RFcnJvcihlcnIpO1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IGVycm9yTWVzc2FnZTogZXJyLm1lc3NhZ2UgfSk7XG4gICAgICBsb2dnZXIuZXJyb3IoZXJyKTtcbiAgICB9XG4gIH1cblxuXG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFFQTtBQUVBO0FBRUE7Ozs7O0FBSUE7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFYQTtBQWNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7O0FBR0E7QUFDQTtBQUNBO0FBRUE7Ozs7OztBQUlBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFNQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7OztBQUlBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBVEE7QUFXQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUE1SkEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/client/js/services/PageHistoryContainer.js\n");
/***/ }),
/***/ "./src/client/js/services/PersonalContainer.js":
/*!*****************************************************!*\
!*** ./src/client/js/services/PersonalContainer.js ***!
\*****************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return PersonalContainer; });\n/* harmony import */ var unstated__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! unstated */ \"./node_modules/unstated/lib/unstated.es.js\");\n/* harmony import */ var _alias_logger__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @alias/logger */ \"./src/lib/service/logger/index.js\");\n/* harmony import */ var _alias_logger__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_alias_logger__WEBPACK_IMPORTED_MODULE_1__);\n\n // eslint-disable-next-line no-unused-vars\n\nconst logger = _alias_logger__WEBPACK_IMPORTED_MODULE_1___default()('growi:services:PersonalContainer');\nconst DEFAULT_IMAGE = '/images/icons/user.svg';\n/**\n * Service container for personal settings page (PersonalSettings.jsx)\n * @extends {Container} unstated Container\n */\n\nclass PersonalContainer extends unstated__WEBPACK_IMPORTED_MODULE_0__[\"Container\"] {\n constructor(appContainer) {\n super();\n this.appContainer = appContainer;\n this.state = {\n retrieveError: null,\n name: '',\n email: '',\n registrationWhiteList: this.appContainer.getConfig().registrationWhiteList,\n isEmailPublished: false,\n lang: 'en_US',\n isGravatarEnabled: false,\n isUploadedPicture: false,\n uploadedPictureSrc: this.getUploadedPictureSrc(this.appContainer.currentUser),\n externalAccounts: [],\n apiToken: ''\n };\n }\n /**\n * Workaround for the mangling in production build to break constructor.name\n */\n\n\n static getClassName() {\n return 'PersonalContainer';\n }\n /**\n * retrieve personal data\n */\n\n\n async retrievePersonalData() {\n try {\n const response = await this.appContainer.apiv3.get('/personal-setting/');\n const {\n currentUser\n } = response.data;\n this.setState({\n name: currentUser.name,\n email: currentUser.email,\n isEmailPublished: currentUser.isEmailPublished,\n lang: currentUser.lang,\n isGravatarEnabled: currentUser.isGravatarEnabled,\n apiToken: currentUser.apiToken\n });\n } catch (err) {\n this.setState({\n retrieveError: err\n });\n logger.error(err);\n throw new Error('Failed to fetch personal data');\n }\n }\n /**\n * define a function for uploaded picture\n */\n\n\n getUploadedPictureSrc(user) {\n if (user == null) {\n return DEFAULT_IMAGE;\n }\n\n if (user.image) {\n this.setState({\n isUploadedPicture: true\n });\n return user.image;\n }\n\n if (user.imageAttachment != null) {\n this.setState({\n isUploadedPicture: true\n });\n return user.imageAttachment.filePathProxied;\n }\n\n return DEFAULT_IMAGE;\n }\n /**\n * retrieve external accounts that linked me\n */\n\n\n async retrieveExternalAccounts() {\n try {\n const response = await this.appContainer.apiv3.get('/personal-setting/external-accounts');\n const {\n externalAccounts\n } = response.data;\n this.setState({\n externalAccounts\n });\n } catch (err) {\n this.setState({\n retrieveError: err\n });\n logger.error(err);\n throw new Error('Failed to fetch external accounts');\n }\n }\n /**\n * Change name\n */\n\n\n changeName(inputValue) {\n this.setState({\n name: inputValue\n });\n }\n /**\n * Change email\n */\n\n\n changeEmail(inputValue) {\n this.setState({\n email: inputValue\n });\n }\n /**\n * Change isEmailPublished\n */\n\n\n changeIsEmailPublished(boolean) {\n this.setState({\n isEmailPublished: boolean\n });\n }\n /**\n * Change lang\n */\n\n\n changeLang(lang) {\n this.setState({\n lang\n });\n }\n /**\n * Change isGravatarEnabled\n */\n\n\n changeIsGravatarEnabled(boolean) {\n this.setState({\n isGravatarEnabled: boolean\n });\n }\n /**\n * Update basic info\n * @memberOf PersonalContainer\n * @return {Array} basic info\n */\n\n\n async updateBasicInfo() {\n try {\n const response = await this.appContainer.apiv3.put('/personal-setting/', {\n name: this.state.name,\n email: this.state.email,\n isEmailPublished: this.state.isEmailPublished,\n lang: this.state.lang\n });\n const {\n updatedUser\n } = response.data;\n this.setState({\n name: updatedUser.name,\n email: updatedUser.email,\n isEmailPublished: updatedUser.isEmailPublished,\n lang: updatedUser.lang\n });\n } catch (err) {\n this.setState({\n retrieveError: err\n });\n logger.error(err);\n throw new Error('Failed to update personal data');\n }\n }\n /**\n * Update profile image\n * @memberOf PersonalContainer\n */\n\n\n async updateProfileImage() {\n try {\n const response = await this.appContainer.apiv3.put('/personal-setting/image-type', {\n isGravatarEnabled: this.state.isGravatarEnabled\n });\n const {\n userData\n } = response.data;\n this.setState({\n isGravatarEnabled: userData.isGravatarEnabled\n });\n } catch (err) {\n this.setState({\n retrieveError: err\n });\n logger.error(err);\n throw new Error('Failed to update profile image');\n }\n }\n /**\n * Upload image\n */\n\n\n async uploadAttachment(file) {\n try {\n const formData = new FormData();\n formData.append('file', file);\n formData.append('_csrf', this.appContainer.csrfToken);\n const response = await this.appContainer.apiPost('/attachments.uploadProfileImage', formData);\n this.setState({\n isUploadedPicture: true,\n uploadedPictureSrc: response.attachment.filePathProxied\n });\n } catch (err) {\n this.setState({\n retrieveError: err\n });\n logger.error(err);\n throw new Error('Failed to upload profile image');\n }\n }\n /**\n * Delete image\n */\n\n\n async deleteProfileImage() {\n try {\n await this.appContainer.apiPost('/attachments.removeProfileImage', {\n _csrf: this.appContainer.csrfToken\n });\n this.setState({\n isUploadedPicture: false,\n uploadedPictureSrc: DEFAULT_IMAGE\n });\n } catch (err) {\n this.setState({\n retrieveError: err\n });\n logger.error(err);\n throw new Error('Failed to delete profile image');\n }\n }\n /**\n * Associate LDAP account\n */\n\n\n async associateLdapAccount(account) {\n try {\n await this.appContainer.apiv3.put('/personal-setting/associate-ldap', account);\n } catch (err) {\n this.setState({\n retrieveError: err\n });\n logger.error(err);\n throw new Error('Failed to associate ldap account');\n }\n }\n /**\n * Disassociate LDAP account\n */\n\n\n async disassociateLdapAccount(account) {\n try {\n await this.appContainer.apiv3.put('/personal-setting/disassociate-ldap', account);\n } catch (err) {\n this.setState({\n retrieveError: err\n });\n logger.error(err);\n throw new Error('Failed to disassociate ldap account');\n }\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvY2xpZW50L2pzL3NlcnZpY2VzL1BlcnNvbmFsQ29udGFpbmVyLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL2NsaWVudC9qcy9zZXJ2aWNlcy9QZXJzb25hbENvbnRhaW5lci5qcz83ZDhlIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnRhaW5lciB9IGZyb20gJ3Vuc3RhdGVkJztcblxuaW1wb3J0IGxvZ2dlckZhY3RvcnkgZnJvbSAnQGFsaWFzL2xvZ2dlcic7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuY29uc3QgbG9nZ2VyID0gbG9nZ2VyRmFjdG9yeSgnZ3Jvd2k6c2VydmljZXM6UGVyc29uYWxDb250YWluZXInKTtcblxuY29uc3QgREVGQVVMVF9JTUFHRSA9ICcvaW1hZ2VzL2ljb25zL3VzZXIuc3ZnJztcblxuLyoqXG4gKiBTZXJ2aWNlIGNvbnRhaW5lciBmb3IgcGVyc29uYWwgc2V0dGluZ3MgcGFnZSAoUGVyc29uYWxTZXR0aW5ncy5qc3gpXG4gKiBAZXh0ZW5kcyB7Q29udGFpbmVyfSB1bnN0YXRlZCBDb250YWluZXJcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGVyc29uYWxDb250YWluZXIgZXh0ZW5kcyBDb250YWluZXIge1xuXG4gIGNvbnN0cnVjdG9yKGFwcENvbnRhaW5lcikge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLmFwcENvbnRhaW5lciA9IGFwcENvbnRhaW5lcjtcblxuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICByZXRyaWV2ZUVycm9yOiBudWxsLFxuICAgICAgbmFtZTogJycsXG4gICAgICBlbWFpbDogJycsXG4gICAgICByZWdpc3RyYXRpb25XaGl0ZUxpc3Q6IHRoaXMuYXBwQ29udGFpbmVyLmdldENvbmZpZygpLnJlZ2lzdHJhdGlvbldoaXRlTGlzdCxcbiAgICAgIGlzRW1haWxQdWJsaXNoZWQ6IGZhbHNlLFxuICAgICAgbGFuZzogJ2VuX1VTJyxcbiAgICAgIGlzR3JhdmF0YXJFbmFibGVkOiBmYWxzZSxcbiAgICAgIGlzVXBsb2FkZWRQaWN0dXJlOiBmYWxzZSxcbiAgICAgIHVwbG9hZGVkUGljdHVyZVNyYzogdGhpcy5nZXRVcGxvYWRlZFBpY3R1cmVTcmModGhpcy5hcHBDb250YWluZXIuY3VycmVudFVzZXIpLFxuICAgICAgZXh0ZXJuYWxBY2NvdW50czogW10sXG4gICAgICBhcGlUb2tlbjogJycsXG4gICAgfTtcblxuICB9XG5cbiAgLyoqXG4gICAqIFdvcmthcm91bmQgZm9yIHRoZSBtYW5nbGluZyBpbiBwcm9kdWN0aW9uIGJ1aWxkIHRvIGJyZWFrIGNvbnN0cnVjdG9yLm5hbWVcbiAgICovXG4gIHN0YXRpYyBnZXRDbGFzc05hbWUoKSB7XG4gICAgcmV0dXJuICdQZXJzb25hbENvbnRhaW5lcic7XG4gIH1cblxuICAvKipcbiAgICogcmV0cmlldmUgcGVyc29uYWwgZGF0YVxuICAgKi9cbiAgYXN5bmMgcmV0cmlldmVQZXJzb25hbERhdGEoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5hcHBDb250YWluZXIuYXBpdjMuZ2V0KCcvcGVyc29uYWwtc2V0dGluZy8nKTtcbiAgICAgIGNvbnN0IHsgY3VycmVudFVzZXIgfSA9IHJlc3BvbnNlLmRhdGE7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgbmFtZTogY3VycmVudFVzZXIubmFtZSxcbiAgICAgICAgZW1haWw6IGN1cnJlbnRVc2VyLmVtYWlsLFxuICAgICAgICBpc0VtYWlsUHVibGlzaGVkOiBjdXJyZW50VXNlci5pc0VtYWlsUHVibGlzaGVkLFxuICAgICAgICBsYW5nOiBjdXJyZW50VXNlci5sYW5nLFxuICAgICAgICBpc0dyYXZhdGFyRW5hYmxlZDogY3VycmVudFVzZXIuaXNHcmF2YXRhckVuYWJsZWQsXG4gICAgICAgIGFwaVRva2VuOiBjdXJyZW50VXNlci5hcGlUb2tlbixcbiAgICAgIH0pO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgcmV0cmlldmVFcnJvcjogZXJyIH0pO1xuICAgICAgbG9nZ2VyLmVycm9yKGVycik7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBmZXRjaCBwZXJzb25hbCBkYXRhJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGRlZmluZSBhIGZ1bmN0aW9uIGZvciB1cGxvYWRlZCBwaWN0dXJlXG4gICAqL1xuICBnZXRVcGxvYWRlZFBpY3R1cmVTcmModXNlcikge1xuICAgIGlmICh1c2VyID09IG51bGwpIHtcbiAgICAgIHJldHVybiBERUZBVUxUX0lNQUdFO1xuICAgIH1cbiAgICBpZiAodXNlci5pbWFnZSkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IGlzVXBsb2FkZWRQaWN0dXJlOiB0cnVlIH0pO1xuICAgICAgcmV0dXJuIHVzZXIuaW1hZ2U7XG4gICAgfVxuICAgIGlmICh1c2VyLmltYWdlQXR0YWNobWVudCAhPSBudWxsKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgaXNVcGxvYWRlZFBpY3R1cmU6IHRydWUgfSk7XG4gICAgICByZXR1cm4gdXNlci5pbWFnZUF0dGFjaG1lbnQuZmlsZVBhdGhQcm94aWVkO1xuICAgIH1cblxuICAgIHJldHVybiBERUZBVUxUX0lNQUdFO1xuICB9XG5cbiAgLyoqXG4gICAqIHJldHJpZXZlIGV4dGVybmFsIGFjY291bnRzIHRoYXQgbGlua2VkIG1lXG4gICAqL1xuICBhc3luYyByZXRyaWV2ZUV4dGVybmFsQWNjb3VudHMoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5hcHBDb250YWluZXIuYXBpdjMuZ2V0KCcvcGVyc29uYWwtc2V0dGluZy9leHRlcm5hbC1hY2NvdW50cycpO1xuICAgICAgY29uc3QgeyBleHRlcm5hbEFjY291bnRzIH0gPSByZXNwb25zZS5kYXRhO1xuXG4gICAgICB0aGlzLnNldFN0YXRlKHsgZXh0ZXJuYWxBY2NvdW50cyB9KTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IHJldHJpZXZlRXJyb3I6IGVyciB9KTtcbiAgICAgIGxvZ2dlci5lcnJvcihlcnIpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gZmV0Y2ggZXh0ZXJuYWwgYWNjb3VudHMnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hhbmdlIG5hbWVcbiAgICovXG4gIGNoYW5nZU5hbWUoaW5wdXRWYWx1ZSkge1xuICAgIHRoaXMuc2V0U3RhdGUoeyBuYW1lOiBpbnB1dFZhbHVlIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENoYW5nZSBlbWFpbFxuICAgKi9cbiAgY2hhbmdlRW1haWwoaW5wdXRWYWx1ZSkge1xuICAgIHRoaXMuc2V0U3RhdGUoeyBlbWFpbDogaW5wdXRWYWx1ZSB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGFuZ2UgaXNFbWFpbFB1Ymxpc2hlZFxuICAgKi9cbiAgY2hhbmdlSXNFbWFpbFB1Ymxpc2hlZChib29sZWFuKSB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IGlzRW1haWxQdWJsaXNoZWQ6IGJvb2xlYW4gfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hhbmdlIGxhbmdcbiAgICovXG4gIGNoYW5nZUxhbmcobGFuZykge1xuICAgIHRoaXMuc2V0U3RhdGUoeyBsYW5nIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENoYW5nZSBpc0dyYXZhdGFyRW5hYmxlZFxuICAgKi9cbiAgY2hhbmdlSXNHcmF2YXRhckVuYWJsZWQoYm9vbGVhbikge1xuICAgIHRoaXMuc2V0U3RhdGUoeyBpc0dyYXZhdGFyRW5hYmxlZDogYm9vbGVhbiB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgYmFzaWMgaW5mb1xuICAgKiBAbWVtYmVyT2YgUGVyc29uYWxDb250YWluZXJcbiAgICogQHJldHVybiB7QXJyYXl9IGJhc2ljIGluZm9cbiAgICovXG4gIGFzeW5jIHVwZGF0ZUJhc2ljSW5mbygpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmFwcENvbnRhaW5lci5hcGl2My5wdXQoJy9wZXJzb25hbC1zZXR0aW5nLycsIHtcbiAgICAgICAgbmFtZTogdGhpcy5zdGF0ZS5uYW1lLFxuICAgICAgICBlbWFpbDogdGhpcy5zdGF0ZS5lbWFpbCxcbiAgICAgICAgaXNFbWFpbFB1Ymxpc2hlZDogdGhpcy5zdGF0ZS5pc0VtYWlsUHVibGlzaGVkLFxuICAgICAgICBsYW5nOiB0aGlzLnN0YXRlLmxhbmcsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHsgdXBkYXRlZFVzZXIgfSA9IHJlc3BvbnNlLmRhdGE7XG5cbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBuYW1lOiB1cGRhdGVkVXNlci5uYW1lLFxuICAgICAgICBlbWFpbDogdXBkYXRlZFVzZXIuZW1haWwsXG4gICAgICAgIGlzRW1haWxQdWJsaXNoZWQ6IHVwZGF0ZWRVc2VyLmlzRW1haWxQdWJsaXNoZWQsXG4gICAgICAgIGxhbmc6IHVwZGF0ZWRVc2VyLmxhbmcsXG4gICAgICB9KTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IHJldHJpZXZlRXJyb3I6IGVyciB9KTtcbiAgICAgIGxvZ2dlci5lcnJvcihlcnIpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gdXBkYXRlIHBlcnNvbmFsIGRhdGEnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHByb2ZpbGUgaW1hZ2VcbiAgICogQG1lbWJlck9mIFBlcnNvbmFsQ29udGFpbmVyXG4gICAqL1xuICBhc3luYyB1cGRhdGVQcm9maWxlSW1hZ2UoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5hcHBDb250YWluZXIuYXBpdjMucHV0KCcvcGVyc29uYWwtc2V0dGluZy9pbWFnZS10eXBlJywge1xuICAgICAgICBpc0dyYXZhdGFyRW5hYmxlZDogdGhpcy5zdGF0ZS5pc0dyYXZhdGFyRW5hYmxlZCxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgeyB1c2VyRGF0YSB9ID0gcmVzcG9uc2UuZGF0YTtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBpc0dyYXZhdGFyRW5hYmxlZDogdXNlckRhdGEuaXNHcmF2YXRhckVuYWJsZWQsXG4gICAgICB9KTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IHJldHJpZXZlRXJyb3I6IGVyciB9KTtcbiAgICAgIGxvZ2dlci5lcnJvcihlcnIpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gdXBkYXRlIHByb2ZpbGUgaW1hZ2UnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVXBsb2FkIGltYWdlXG4gICAqL1xuICBhc3luYyB1cGxvYWRBdHRhY2htZW50KGZpbGUpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnZmlsZScsIGZpbGUpO1xuICAgICAgZm9ybURhdGEuYXBwZW5kKCdfY3NyZicsIHRoaXMuYXBwQ29udGFpbmVyLmNzcmZUb2tlbik7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuYXBwQ29udGFpbmVyLmFwaVBvc3QoJy9hdHRhY2htZW50cy51cGxvYWRQcm9maWxlSW1hZ2UnLCBmb3JtRGF0YSk7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgaXNVcGxvYWRlZFBpY3R1cmU6IHRydWUsIHVwbG9hZGVkUGljdHVyZVNyYzogcmVzcG9uc2UuYXR0YWNobWVudC5maWxlUGF0aFByb3hpZWQgfSk7XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyByZXRyaWV2ZUVycm9yOiBlcnIgfSk7XG4gICAgICBsb2dnZXIuZXJyb3IoZXJyKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIHVwbG9hZCBwcm9maWxlIGltYWdlJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZSBpbWFnZVxuICAgKi9cbiAgYXN5bmMgZGVsZXRlUHJvZmlsZUltYWdlKCkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmFwcENvbnRhaW5lci5hcGlQb3N0KCcvYXR0YWNobWVudHMucmVtb3ZlUHJvZmlsZUltYWdlJywgeyBfY3NyZjogdGhpcy5hcHBDb250YWluZXIuY3NyZlRva2VuIH0pO1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IGlzVXBsb2FkZWRQaWN0dXJlOiBmYWxzZSwgdXBsb2FkZWRQaWN0dXJlU3JjOiBERUZBVUxUX0lNQUdFIH0pO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgcmV0cmlldmVFcnJvcjogZXJyIH0pO1xuICAgICAgbG9nZ2VyLmVycm9yKGVycik7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBkZWxldGUgcHJvZmlsZSBpbWFnZScpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBc3NvY2lhdGUgTERBUCBhY2NvdW50XG4gICAqL1xuICBhc3luYyBhc3NvY2lhdGVMZGFwQWNjb3VudChhY2NvdW50KSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuYXBwQ29udGFpbmVyLmFwaXYzLnB1dCgnL3BlcnNvbmFsLXNldHRpbmcvYXNzb2NpYXRlLWxkYXAnLCBhY2NvdW50KTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IHJldHJpZXZlRXJyb3I6IGVyciB9KTtcbiAgICAgIGxvZ2dlci5lcnJvcihlcnIpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gYXNzb2NpYXRlIGxkYXAgYWNjb3VudCcpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNhc3NvY2lhdGUgTERBUCBhY2NvdW50XG4gICAqL1xuICBhc3luYyBkaXNhc3NvY2lhdGVMZGFwQWNjb3VudChhY2NvdW50KSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuYXBwQ29udGFpbmVyLmFwaXYzLnB1dCgnL3BlcnNvbmFsLXNldHRpbmcvZGlzYXNzb2NpYXRlLWxkYXAnLCBhY2NvdW50KTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IHJldHJpZXZlRXJyb3I6IGVyciB9KTtcbiAgICAgIGxvZ2dlci5lcnJvcihlcnIpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gZGlzYXNzb2NpYXRlIGxkYXAgYWNjb3VudCcpO1xuICAgIH1cbiAgfVxuXG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFFQTtBQUVBO0FBRUE7Ozs7O0FBSUE7QUFFQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFYQTtBQWNBO0FBRUE7Ozs7O0FBR0E7QUFDQTtBQUNBO0FBRUE7Ozs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFOQTtBQVFBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7O0FBR0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUVBOzs7OztBQUdBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFFQTs7Ozs7QUFHQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBRUE7Ozs7O0FBR0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUVBOzs7OztBQUdBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFFQTs7Ozs7OztBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFNQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFNQTtBQUVBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUVBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7O0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUExT0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/client/js/services/PersonalContainer.js\n");
/***/ }),
/***/ "./src/client/js/services/RevisionComparerContainer.js":
/*!*************************************************************!*\
!*** ./src/client/js/services/RevisionComparerContainer.js ***!
\*************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return RevisionComparerContainer; });\n/* harmony import */ var unstated__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! unstated */ \"./node_modules/unstated/lib/unstated.es.js\");\n/* harmony import */ var _alias_logger__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @alias/logger */ \"./src/lib/service/logger/index.js\");\n/* harmony import */ var _alias_logger__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_alias_logger__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _util_apiNotification__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../util/apiNotification */ \"./src/client/js/util/apiNotification.js\");\n\n\n\nconst logger = _alias_logger__WEBPACK_IMPORTED_MODULE_1___default()('growi:PageHistoryContainer');\n/**\n * Service container for personal settings page (RevisionCompare.jsx)\n * @extends {Container} unstated Container\n */\n\nclass RevisionComparerContainer extends unstated__WEBPACK_IMPORTED_MODULE_0__[\"Container\"] {\n constructor(appContainer, pageContainer) {\n super();\n this.appContainer = appContainer;\n this.pageContainer = pageContainer;\n this.state = {\n errMessage: null,\n sourceRevision: null,\n targetRevision: null,\n latestRevision: null\n };\n this.initRevisions = this.initRevisions.bind(this);\n }\n /**\n * Workaround for the mangling in production build to break constructor.name\n */\n\n\n static getClassName() {\n return 'RevisionComparerContainer';\n }\n /**\n * Initialize the revisions\n */\n\n\n async initRevisions() {\n const latestRevision = await this.fetchLatestRevision();\n const [sourceRevisionId, targetRevisionId] = this.getRevisionIDsToCompareAsParam();\n const sourceRevision = sourceRevisionId ? await this.fetchRevision(sourceRevisionId) : latestRevision;\n const targetRevision = targetRevisionId ? await this.fetchRevision(targetRevisionId) : latestRevision;\n const compareWithLatest = targetRevisionId ? false : this.state.compareWithLatest;\n this.setState({\n sourceRevision,\n targetRevision,\n latestRevision,\n compareWithLatest\n });\n }\n /**\n * Get the IDs of the comparison source and target from \"window.location\" as an array\n */\n\n\n getRevisionIDsToCompareAsParam() {\n const searchParams = {};\n\n for (const param of (_window$location$sear = window.location.search) === null || _window$location$sear === void 0 ? void 0 : (_window$location$sear2 = _window$location$sear.substr(1)) === null || _window$location$sear2 === void 0 ? void 0 : _window$location$sear2.split('&')) {\n var _window$location$sear, _window$location$sear2;\n\n const [k, v] = param.split('=');\n searchParams[k] = v;\n }\n\n if (!searchParams.compare) {\n return [];\n }\n\n return searchParams.compare.split('...') || [];\n }\n /**\n * Fetch the latest revision\n */\n\n\n async fetchLatestRevision() {\n const {\n pageId,\n shareLinkId\n } = this.pageContainer.state;\n\n try {\n const res = await this.appContainer.apiv3Get('/revisions/list', {\n pageId,\n shareLinkId,\n page: 1,\n limit: 1\n });\n return res.data.docs[0];\n } catch (err) {\n Object(_util_apiNotification__WEBPACK_IMPORTED_MODULE_2__[\"toastError\"])(err);\n this.setState({\n errorMessage: err.message\n });\n logger.error(err);\n }\n\n return null;\n }\n /**\n * Fetch the revision of the specified ID\n * @param {string} revision ID\n */\n\n\n async fetchRevision(revisionId) {\n const {\n pageId,\n shareLinkId\n } = this.pageContainer.state;\n\n try {\n const res = await this.appContainer.apiv3Get(`/revisions/${revisionId}`, {\n pageId,\n shareLinkId\n });\n return res.data.revision;\n } catch (err) {\n Object(_util_apiNotification__WEBPACK_IMPORTED_MODULE_2__[\"toastError\"])(err);\n this.setState({\n errorMessage: err.message\n });\n logger.error(err);\n }\n\n return null;\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvY2xpZW50L2pzL3NlcnZpY2VzL1JldmlzaW9uQ29tcGFyZXJDb250YWluZXIuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY2xpZW50L2pzL3NlcnZpY2VzL1JldmlzaW9uQ29tcGFyZXJDb250YWluZXIuanM/Njk0ZSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb250YWluZXIgfSBmcm9tICd1bnN0YXRlZCc7XG5cbmltcG9ydCBsb2dnZXJGYWN0b3J5IGZyb20gJ0BhbGlhcy9sb2dnZXInO1xuXG5pbXBvcnQgeyB0b2FzdEVycm9yIH0gZnJvbSAnLi4vdXRpbC9hcGlOb3RpZmljYXRpb24nO1xuXG5jb25zdCBsb2dnZXIgPSBsb2dnZXJGYWN0b3J5KCdncm93aTpQYWdlSGlzdG9yeUNvbnRhaW5lcicpO1xuXG4vKipcbiAqIFNlcnZpY2UgY29udGFpbmVyIGZvciBwZXJzb25hbCBzZXR0aW5ncyBwYWdlIChSZXZpc2lvbkNvbXBhcmUuanN4KVxuICogQGV4dGVuZHMge0NvbnRhaW5lcn0gdW5zdGF0ZWQgQ29udGFpbmVyXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJldmlzaW9uQ29tcGFyZXJDb250YWluZXIgZXh0ZW5kcyBDb250YWluZXIge1xuXG4gIGNvbnN0cnVjdG9yKGFwcENvbnRhaW5lciwgcGFnZUNvbnRhaW5lcikge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLmFwcENvbnRhaW5lciA9IGFwcENvbnRhaW5lcjtcbiAgICB0aGlzLnBhZ2VDb250YWluZXIgPSBwYWdlQ29udGFpbmVyO1xuXG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGVyck1lc3NhZ2U6IG51bGwsXG5cbiAgICAgIHNvdXJjZVJldmlzaW9uOiBudWxsLFxuICAgICAgdGFyZ2V0UmV2aXNpb246IG51bGwsXG4gICAgICBsYXRlc3RSZXZpc2lvbjogbnVsbCxcbiAgICB9O1xuXG4gICAgdGhpcy5pbml0UmV2aXNpb25zID0gdGhpcy5pbml0UmV2aXNpb25zLmJpbmQodGhpcyk7XG4gIH1cblxuICAvKipcbiAgICogV29ya2Fyb3VuZCBmb3IgdGhlIG1hbmdsaW5nIGluIHByb2R1Y3Rpb24gYnVpbGQgdG8gYnJlYWsgY29uc3RydWN0b3IubmFtZVxuICAgKi9cbiAgc3RhdGljIGdldENsYXNzTmFtZSgpIHtcbiAgICByZXR1cm4gJ1JldmlzaW9uQ29tcGFyZXJDb250YWluZXInO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgdGhlIHJldmlzaW9uc1xuICAgKi9cbiAgYXN5bmMgaW5pdFJldmlzaW9ucygpIHtcbiAgICBjb25zdCBsYXRlc3RSZXZpc2lvbiA9IGF3YWl0IHRoaXMuZmV0Y2hMYXRlc3RSZXZpc2lvbigpO1xuXG4gICAgY29uc3QgW3NvdXJjZVJldmlzaW9uSWQsIHRhcmdldFJldmlzaW9uSWRdID0gdGhpcy5nZXRSZXZpc2lvbklEc1RvQ29tcGFyZUFzUGFyYW0oKTtcbiAgICBjb25zdCBzb3VyY2VSZXZpc2lvbiA9IHNvdXJjZVJldmlzaW9uSWQgPyBhd2FpdCB0aGlzLmZldGNoUmV2aXNpb24oc291cmNlUmV2aXNpb25JZCkgOiBsYXRlc3RSZXZpc2lvbjtcbiAgICBjb25zdCB0YXJnZXRSZXZpc2lvbiA9IHRhcmdldFJldmlzaW9uSWQgPyBhd2FpdCB0aGlzLmZldGNoUmV2aXNpb24odGFyZ2V0UmV2aXNpb25JZCkgOiBsYXRlc3RSZXZpc2lvbjtcbiAgICBjb25zdCBjb21wYXJlV2l0aExhdGVzdCA9IHRhcmdldFJldmlzaW9uSWQgPyBmYWxzZSA6IHRoaXMuc3RhdGUuY29tcGFyZVdpdGhMYXRlc3Q7XG5cbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIHNvdXJjZVJldmlzaW9uLCB0YXJnZXRSZXZpc2lvbiwgbGF0ZXN0UmV2aXNpb24sIGNvbXBhcmVXaXRoTGF0ZXN0LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgSURzIG9mIHRoZSBjb21wYXJpc29uIHNvdXJjZSBhbmQgdGFyZ2V0IGZyb20gXCJ3aW5kb3cubG9jYXRpb25cIiBhcyBhbiBhcnJheVxuICAgKi9cbiAgZ2V0UmV2aXNpb25JRHNUb0NvbXBhcmVBc1BhcmFtKCkge1xuICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IHt9O1xuICAgIGZvciAoY29uc3QgcGFyYW0gb2Ygd2luZG93LmxvY2F0aW9uLnNlYXJjaD8uc3Vic3RyKDEpPy5zcGxpdCgnJicpKSB7XG4gICAgICBjb25zdCBbaywgdl0gPSBwYXJhbS5zcGxpdCgnPScpO1xuICAgICAgc2VhcmNoUGFyYW1zW2tdID0gdjtcbiAgICB9XG4gICAgaWYgKCFzZWFyY2hQYXJhbXMuY29tcGFyZSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHJldHVybiBzZWFyY2hQYXJhbXMuY29tcGFyZS5zcGxpdCgnLi4uJykgfHwgW107XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2ggdGhlIGxhdGVzdCByZXZpc2lvblxuICAgKi9cbiAgYXN5bmMgZmV0Y2hMYXRlc3RSZXZpc2lvbigpIHtcbiAgICBjb25zdCB7IHBhZ2VJZCwgc2hhcmVMaW5rSWQgfSA9IHRoaXMucGFnZUNvbnRhaW5lci5zdGF0ZTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmFwcENvbnRhaW5lci5hcGl2M0dldCgnL3JldmlzaW9ucy9saXN0Jywge1xuICAgICAgICBwYWdlSWQsIHNoYXJlTGlua0lkLCBwYWdlOiAxLCBsaW1pdDogMSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlcy5kYXRhLmRvY3NbMF07XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgIHRvYXN0RXJyb3IoZXJyKTtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBlcnJvck1lc3NhZ2U6IGVyci5tZXNzYWdlIH0pO1xuICAgICAgbG9nZ2VyLmVycm9yKGVycik7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoIHRoZSByZXZpc2lvbiBvZiB0aGUgc3BlY2lmaWVkIElEXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZXZpc2lvbiBJRFxuICAgKi9cbiAgYXN5bmMgZmV0Y2hSZXZpc2lvbihyZXZpc2lvbklkKSB7XG4gICAgY29uc3QgeyBwYWdlSWQsIHNoYXJlTGlua0lkIH0gPSB0aGlzLnBhZ2VDb250YWluZXIuc3RhdGU7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5hcHBDb250YWluZXIuYXBpdjNHZXQoYC9yZXZpc2lvbnMvJHtyZXZpc2lvbklkfWAsIHtcbiAgICAgICAgcGFnZUlkLCBzaGFyZUxpbmtJZCxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlcy5kYXRhLnJldmlzaW9uO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyKSB7XG4gICAgICB0b2FzdEVycm9yKGVycik7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgZXJyb3JNZXNzYWdlOiBlcnIubWVzc2FnZSB9KTtcbiAgICAgIGxvZ2dlci5lcnJvcihlcnIpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFFQTtBQUVBO0FBRUE7Ozs7O0FBSUE7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFMQTtBQVFBO0FBQ0E7QUFFQTs7Ozs7QUFHQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7QUFHQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBREE7QUFHQTtBQUVBOzs7OztBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7O0FBR0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBREE7QUFHQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7Ozs7OztBQUlBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBREE7QUFHQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFsR0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/client/js/services/RevisionComparerContainer.js\n");
/***/ }),
/***/ "./src/client/js/services/TagContainer.js":
/*!************************************************!*\
!*** ./src/client/js/services/TagContainer.js ***!
\************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return TagContainer; });\n/* harmony import */ var unstated__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! unstated */ \"./node_modules/unstated/lib/unstated.es.js\");\n/* harmony import */ var _alias_logger__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @alias/logger */ \"./src/lib/service/logger/index.js\");\n/* harmony import */ var _alias_logger__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_alias_logger__WEBPACK_IMPORTED_MODULE_1__);\n\n\nconst logger = _alias_logger__WEBPACK_IMPORTED_MODULE_1___default()('growi:services:TagContainer');\n/**\n * Service container related to Tag\n * @extends {Container} unstated Container\n */\n\nclass TagContainer extends unstated__WEBPACK_IMPORTED_MODULE_0__[\"Container\"] {\n constructor(appContainer) {\n super();\n this.appContainer = appContainer;\n this.appContainer.registerContainer(this);\n this.init();\n }\n /**\n * Workaround for the mangling in production build to break constructor.name\n */\n\n\n static getClassName() {\n return 'TagContainer';\n }\n /**\n * retrieve tags data\n * !! This method should be invoked after PageContainer and EditorContainer has been initialized !!\n */\n\n\n async init() {\n const pageContainer = this.appContainer.getContainer('PageContainer');\n const editorContainer = this.appContainer.getContainer('EditorContainer');\n\n if (Object.keys(pageContainer.state).length === 0) {\n logger.debug('There is no need to initialize TagContainer because this is not a Page');\n return;\n }\n\n const {\n pageId,\n templateTagData,\n shareLinkId\n } = pageContainer.state;\n\n if (shareLinkId != null) {\n return;\n }\n\n let tags = []; // when the page exists or shared page\n\n if (pageId != null && shareLinkId == null) {\n const res = await this.appContainer.apiGet('/pages.getPageTag', {\n pageId\n });\n tags = res.tags;\n } // when the page not exist\n else if (templateTagData != null) {\n tags = templateTagData.split(',').filter(str => {\n return str !== ''; // filter empty values\n });\n }\n\n logger.debug('tags data has been initialized');\n pageContainer.setState({\n tags\n });\n editorContainer.setState({\n tags\n });\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvY2xpZW50L2pzL3NlcnZpY2VzL1RhZ0NvbnRhaW5lci5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9jbGllbnQvanMvc2VydmljZXMvVGFnQ29udGFpbmVyLmpzP2FjYzkiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29udGFpbmVyIH0gZnJvbSAndW5zdGF0ZWQnO1xuXG5pbXBvcnQgbG9nZ2VyRmFjdG9yeSBmcm9tICdAYWxpYXMvbG9nZ2VyJztcblxuY29uc3QgbG9nZ2VyID0gbG9nZ2VyRmFjdG9yeSgnZ3Jvd2k6c2VydmljZXM6VGFnQ29udGFpbmVyJyk7XG5cbi8qKlxuICogU2VydmljZSBjb250YWluZXIgcmVsYXRlZCB0byBUYWdcbiAqIEBleHRlbmRzIHtDb250YWluZXJ9IHVuc3RhdGVkIENvbnRhaW5lclxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUYWdDb250YWluZXIgZXh0ZW5kcyBDb250YWluZXIge1xuXG4gIGNvbnN0cnVjdG9yKGFwcENvbnRhaW5lcikge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLmFwcENvbnRhaW5lciA9IGFwcENvbnRhaW5lcjtcbiAgICB0aGlzLmFwcENvbnRhaW5lci5yZWdpc3RlckNvbnRhaW5lcih0aGlzKTtcblxuICAgIHRoaXMuaW5pdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdvcmthcm91bmQgZm9yIHRoZSBtYW5nbGluZyBpbiBwcm9kdWN0aW9uIGJ1aWxkIHRvIGJyZWFrIGNvbnN0cnVjdG9yLm5hbWVcbiAgICovXG4gIHN0YXRpYyBnZXRDbGFzc05hbWUoKSB7XG4gICAgcmV0dXJuICdUYWdDb250YWluZXInO1xuICB9XG5cbiAgLyoqXG4gICAqIHJldHJpZXZlIHRhZ3MgZGF0YVxuICAgKiAhISBUaGlzIG1ldGhvZCBzaG91bGQgYmUgaW52b2tlZCBhZnRlciBQYWdlQ29udGFpbmVyIGFuZCBFZGl0b3JDb250YWluZXIgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgISFcbiAgICovXG4gIGFzeW5jIGluaXQoKSB7XG4gICAgY29uc3QgcGFnZUNvbnRhaW5lciA9IHRoaXMuYXBwQ29udGFpbmVyLmdldENvbnRhaW5lcignUGFnZUNvbnRhaW5lcicpO1xuICAgIGNvbnN0IGVkaXRvckNvbnRhaW5lciA9IHRoaXMuYXBwQ29udGFpbmVyLmdldENvbnRhaW5lcignRWRpdG9yQ29udGFpbmVyJyk7XG5cbiAgICBpZiAoT2JqZWN0LmtleXMocGFnZUNvbnRhaW5lci5zdGF0ZSkubGVuZ3RoID09PSAwKSB7XG4gICAgICBsb2dnZXIuZGVidWcoJ1RoZXJlIGlzIG5vIG5lZWQgdG8gaW5pdGlhbGl6ZSBUYWdDb250YWluZXIgYmVjYXVzZSB0aGlzIGlzIG5vdCBhIFBhZ2UnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB7IHBhZ2VJZCwgdGVtcGxhdGVUYWdEYXRhLCBzaGFyZUxpbmtJZCB9ID0gcGFnZUNvbnRhaW5lci5zdGF0ZTtcblxuICAgIGlmIChzaGFyZUxpbmtJZCAhPSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IHRhZ3MgPSBbXTtcbiAgICAvLyB3aGVuIHRoZSBwYWdlIGV4aXN0cyBvciBzaGFyZWQgcGFnZVxuICAgIGlmIChwYWdlSWQgIT0gbnVsbCAmJiBzaGFyZUxpbmtJZCA9PSBudWxsKSB7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmFwcENvbnRhaW5lci5hcGlHZXQoJy9wYWdlcy5nZXRQYWdlVGFnJywgeyBwYWdlSWQgfSk7XG4gICAgICB0YWdzID0gcmVzLnRhZ3M7XG4gICAgfVxuICAgIC8vIHdoZW4gdGhlIHBhZ2Ugbm90IGV4aXN0XG4gICAgZWxzZSBpZiAodGVtcGxhdGVUYWdEYXRhICE9IG51bGwpIHtcbiAgICAgIHRhZ3MgPSB0ZW1wbGF0ZVRhZ0RhdGEuc3BsaXQoJywnKS5maWx0ZXIoKHN0cikgPT4ge1xuICAgICAgICByZXR1cm4gc3RyICE9PSAnJzsgLy8gZmlsdGVyIGVtcHR5IHZhbHVlc1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgbG9nZ2VyLmRlYnVnKCd0YWdzIGRhdGEgaGFzIGJlZW4gaW5pdGlhbGl6ZWQnKTtcblxuICAgIHBhZ2VDb250YWluZXIuc2V0U3RhdGUoeyB0YWdzIH0pO1xuICAgIGVkaXRvckNvbnRhaW5lci5zZXRTdGF0ZSh7IHRhZ3MgfSk7XG4gIH1cblxufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUVBO0FBRUE7Ozs7O0FBSUE7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTs7Ozs7QUFHQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBSEE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBdkRBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/client/js/services/TagContainer.js\n");
/***/ }),
/***/ "./src/client/js/util/codemirror/gfm-growi.mode.js":
/*!*********************************************************!*\
!*** ./src/client/js/util/codemirror/gfm-growi.mode.js ***!
\*********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("// https://discuss.codemirror.net/t/cm-header-margin-padding-height/75/5\nwindow.CodeMirror.defineMode('gfm-growi', (cmConfig, modeCfg) => {\n // based on Markdown (GitHub-flavour) mode\n // https://codemirror.net/doc/manual.html#option_mode\n // https://codemirror.net/mode/index.html\n modeCfg.name = 'gfm';\n modeCfg.highlightFormatting = true;\n const mode = window.CodeMirror.getMode(cmConfig, modeCfg);\n const origToken = mode.token;\n\n mode.token = function (stream, state) {\n let classes = origToken(stream, state) || ''; // https://regex101.com/r/Fep0w2/1\n\n classes = classes.replace(/(^| )header(\\S*)/g, '$1header$2 line-grw-cm-header-line');\n return /^\\s*$/.test(classes) ? null : classes;\n };\n\n return mode;\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvY2xpZW50L2pzL3V0aWwvY29kZW1pcnJvci9nZm0tZ3Jvd2kubW9kZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9jbGllbnQvanMvdXRpbC9jb2RlbWlycm9yL2dmbS1ncm93aS5tb2RlLmpzP2E1ZWQiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9kaXNjdXNzLmNvZGVtaXJyb3IubmV0L3QvY20taGVhZGVyLW1hcmdpbi1wYWRkaW5nLWhlaWdodC83NS81XG53aW5kb3cuQ29kZU1pcnJvci5kZWZpbmVNb2RlKCdnZm0tZ3Jvd2knLCAoY21Db25maWcsIG1vZGVDZmcpID0+IHtcbiAgLy8gYmFzZWQgb24gTWFya2Rvd24gKEdpdEh1Yi1mbGF2b3VyKSBtb2RlXG4gIC8vIGh0dHBzOi8vY29kZW1pcnJvci5uZXQvZG9jL21hbnVhbC5odG1sI29wdGlvbl9tb2RlXG4gIC8vIGh0dHBzOi8vY29kZW1pcnJvci5uZXQvbW9kZS9pbmRleC5odG1sXG4gIG1vZGVDZmcubmFtZSA9ICdnZm0nO1xuICBtb2RlQ2ZnLmhpZ2hsaWdodEZvcm1hdHRpbmcgPSB0cnVlO1xuICBjb25zdCBtb2RlID0gd2luZG93LkNvZGVNaXJyb3IuZ2V0TW9kZShjbUNvbmZpZywgbW9kZUNmZyk7XG5cbiAgY29uc3Qgb3JpZ1Rva2VuID0gbW9kZS50b2tlbjtcbiAgbW9kZS50b2tlbiA9IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHtcbiAgICBsZXQgY2xhc3NlcyA9IG9yaWdUb2tlbihzdHJlYW0sIHN0YXRlKSB8fCAnJztcbiAgICAvLyBodHRwczovL3JlZ2V4MTAxLmNvbS9yL0ZlcDB3Mi8xXG4gICAgY2xhc3NlcyA9IGNsYXNzZXMucmVwbGFjZSgvKF58ICloZWFkZXIoXFxTKikvZywgJyQxaGVhZGVyJDIgbGluZS1ncnctY20taGVhZGVyLWxpbmUnKTtcbiAgICByZXR1cm4gL15cXHMqJC8udGVzdChjbGFzc2VzKSA/IG51bGwgOiBjbGFzc2VzO1xuICB9O1xuXG4gIHJldHVybiBtb2RlO1xufSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/client/js/util/codemirror/gfm-growi.mode.js\n");
/***/ }),
/***/ "./src/client/js/util/codemirror/update-display-util.ext.js":
/*!******************************************************************!*\
!*** ./src/client/js/util/codemirror/update-display-util.ext.js ***!
\******************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var codemirror_src_line_saw_special_spans__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! codemirror/src/line/saw_special_spans */ \"./node_modules/codemirror/src/line/saw_special_spans.js\");\n/* harmony import */ var codemirror_src_line_utils_line__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! codemirror/src/line/utils_line */ \"./node_modules/codemirror/src/line/utils_line.js\");\n/* harmony import */ var codemirror_src_line_spans__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! codemirror/src/line/spans */ \"./node_modules/codemirror/src/line/spans.js\");\n/* harmony import */ var codemirror_src_display_update_display__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! codemirror/src/display/update_display */ \"./node_modules/codemirror/src/display/update_display.js\");\n/* harmony import */ var codemirror_src_display_view_tracking__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! codemirror/src/display/view_tracking */ \"./node_modules/codemirror/src/display/view_tracking.js\");\n\n\n\n\n\n\nclass UpdateDisplayUtil {\n /**\n * Transplant 'updateDisplayIfNeeded' method to fix weseek/growi#703\n *\n * @see https://github.com/weseek/growi/issues/703\n * @see https://github.com/codemirror/CodeMirror/blob/5.42.0/src/display/update_display.js#L125\n *\n * @param {CodeMirror} cm\n */\n static forceUpdateViewOffset(cm) {\n const doc = cm.doc;\n const display = cm.display;\n const update = new codemirror_src_display_update_display__WEBPACK_IMPORTED_MODULE_3__[\"DisplayUpdate\"](cm, cm.getViewport()); // Compute a suitable new viewport (from & to)\n\n const end = doc.first + doc.size;\n let from = Math.max(update.visible.from - cm.options.viewportMargin, doc.first);\n let to = Math.min(end, update.visible.to + cm.options.viewportMargin);\n if (display.viewFrom < from && from - display.viewFrom < 20) from = Math.max(doc.first, display.viewFrom);\n if (display.viewTo > to && display.viewTo - to < 20) to = Math.min(end, display.viewTo);\n\n if (codemirror_src_line_saw_special_spans__WEBPACK_IMPORTED_MODULE_0__[\"sawCollapsedSpans\"]) {\n from = Object(codemirror_src_line_spans__WEBPACK_IMPORTED_MODULE_2__[\"visualLineNo\"])(cm.doc, from);\n to = Object(codemirror_src_line_spans__WEBPACK_IMPORTED_MODULE_2__[\"visualLineEndNo\"])(cm.doc, to);\n }\n\n Object(codemirror_src_display_view_tracking__WEBPACK_IMPORTED_MODULE_4__[\"adjustView\"])(cm, from, to);\n display.viewOffset = Object(codemirror_src_line_spans__WEBPACK_IMPORTED_MODULE_2__[\"heightAtLine\"])(Object(codemirror_src_line_utils_line__WEBPACK_IMPORTED_MODULE_1__[\"getLine\"])(doc, display.viewFrom));\n }\n\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (UpdateDisplayUtil);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvY2xpZW50L2pzL3V0aWwvY29kZW1pcnJvci91cGRhdGUtZGlzcGxheS11dGlsLmV4dC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9jbGllbnQvanMvdXRpbC9jb2RlbWlycm9yL3VwZGF0ZS1kaXNwbGF5LXV0aWwuZXh0LmpzP2RjNjEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc2F3Q29sbGFwc2VkU3BhbnMgfSBmcm9tICdjb2RlbWlycm9yL3NyYy9saW5lL3Nhd19zcGVjaWFsX3NwYW5zJztcbmltcG9ydCB7IGdldExpbmUgfSBmcm9tICdjb2RlbWlycm9yL3NyYy9saW5lL3V0aWxzX2xpbmUnO1xuaW1wb3J0IHsgaGVpZ2h0QXRMaW5lLCB2aXN1YWxMaW5lRW5kTm8sIHZpc3VhbExpbmVObyB9IGZyb20gJ2NvZGVtaXJyb3Ivc3JjL2xpbmUvc3BhbnMnO1xuaW1wb3J0IHsgRGlzcGxheVVwZGF0ZSB9IGZyb20gJ2NvZGVtaXJyb3Ivc3JjL2Rpc3BsYXkvdXBkYXRlX2Rpc3BsYXknO1xuaW1wb3J0IHsgYWRqdXN0VmlldyB9IGZyb20gJ2NvZGVtaXJyb3Ivc3JjL2Rpc3BsYXkvdmlld190cmFja2luZyc7XG5cbmNsYXNzIFVwZGF0ZURpc3BsYXlVdGlsIHtcblxuICAvKipcbiAgICogVHJhbnNwbGFudCAndXBkYXRlRGlzcGxheUlmTmVlZGVkJyBtZXRob2QgdG8gZml4IHdlc2Vlay9ncm93aSM3MDNcbiAgICpcbiAgICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vd2VzZWVrL2dyb3dpL2lzc3Vlcy83MDNcbiAgICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vY29kZW1pcnJvci9Db2RlTWlycm9yL2Jsb2IvNS40Mi4wL3NyYy9kaXNwbGF5L3VwZGF0ZV9kaXNwbGF5LmpzI0wxMjVcbiAgICpcbiAgICogQHBhcmFtIHtDb2RlTWlycm9yfSBjbVxuICAgKi9cbiAgc3RhdGljIGZvcmNlVXBkYXRlVmlld09mZnNldChjbSkge1xuICAgIGNvbnN0IGRvYyA9IGNtLmRvYztcbiAgICBjb25zdCBkaXNwbGF5ID0gY20uZGlzcGxheTtcblxuICAgIGNvbnN0IHVwZGF0ZSA9IG5ldyBEaXNwbGF5VXBkYXRlKGNtLCBjbS5nZXRWaWV3cG9ydCgpKTtcblxuICAgIC8vIENvbXB1dGUgYSBzdWl0YWJsZSBuZXcgdmlld3BvcnQgKGZyb20gJiB0bylcbiAgICBjb25zdCBlbmQgPSBkb2MuZmlyc3QgKyBkb2Muc2l6ZTtcbiAgICBsZXQgZnJvbSA9IE1hdGgubWF4KHVwZGF0ZS52aXNpYmxlLmZyb20gLSBjbS5vcHRpb25zLnZpZXdwb3J0TWFyZ2luLCBkb2MuZmlyc3QpO1xuICAgIGxldCB0byA9IE1hdGgubWluKGVuZCwgdXBkYXRlLnZpc2libGUudG8gKyBjbS5vcHRpb25zLnZpZXdwb3J0TWFyZ2luKTtcbiAgICBpZiAoZGlzcGxheS52aWV3RnJvbSA8IGZyb20gJiYgZnJvbSAtIGRpc3BsYXkudmlld0Zyb20gPCAyMCkgZnJvbSA9IE1hdGgubWF4KGRvYy5maXJzdCwgZGlzcGxheS52aWV3RnJvbSk7XG4gICAgaWYgKGRpc3BsYXkudmlld1RvID4gdG8gJiYgZGlzcGxheS52aWV3VG8gLSB0byA8IDIwKSB0byA9IE1hdGgubWluKGVuZCwgZGlzcGxheS52aWV3VG8pO1xuICAgIGlmIChzYXdDb2xsYXBzZWRTcGFucykge1xuICAgICAgZnJvbSA9IHZpc3VhbExpbmVObyhjbS5kb2MsIGZyb20pO1xuICAgICAgdG8gPSB2aXN1YWxMaW5lRW5kTm8oY20uZG9jLCB0byk7XG4gICAgfVxuICAgIGFkanVzdFZpZXcoY20sIGZyb20sIHRvKTtcblxuICAgIGRpc3BsYXkudmlld09mZnNldCA9IGhlaWdodEF0TGluZShnZXRMaW5lKGRvYywgZGlzcGxheS52aWV3RnJvbSkpO1xuICB9XG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBVcGRhdGVEaXNwbGF5VXRpbDtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7Ozs7QUFRQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBOUJBO0FBQ0E7QUFpQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/client/js/util/codemirror/update-display-util.ext.js\n");
/***/ }),
/***/ "./src/client/js/util/interceptor/detach-code-blocks.js":
/*!**************************************************************!*\
!*** ./src/client/js/util/interceptor/detach-code-blocks.js ***!
\**************************************************************/
/*! exports provided: DetachCodeBlockInterceptor, RestoreCodeBlockInterceptor */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DetachCodeBlockInterceptor\", function() { return DetachCodeBlockInterceptor; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"RestoreCodeBlockInterceptor\", function() { return RestoreCodeBlockInterceptor; });\n/* harmony import */ var growi_commons__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! growi-commons */ \"./node_modules/growi-commons/src/index.js\");\n/* harmony import */ var growi_commons__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(growi_commons__WEBPACK_IMPORTED_MODULE_0__);\n\n\nclass DetachCodeBlockUtil {\n static createReplaceStr(replaceId) {\n return `${replaceId}`;\n }\n\n}\n/**\n * The interceptor that detach code blocks\n */\n\n\nclass DetachCodeBlockInterceptor extends growi_commons__WEBPACK_IMPORTED_MODULE_0__[\"BasicInterceptor\"] {\n constructor(crowi) {\n super();\n this.logger = __webpack_require__(/*! @alias/logger */ \"./src/lib/service/logger/index.js\")('growi:DetachCodeBlockInterceptor');\n this.crowi = crowi;\n this.crowiForJquery = crowi.getCrowiForJquery();\n }\n /**\n * @inheritdoc\n */\n\n\n isInterceptWhen(contextName) {\n return /^prePreProcess|prePostProcess$/.test(contextName);\n }\n\n getTargetKey(contextName) {\n if (contextName === 'prePreProcess') {\n return 'markdown';\n }\n\n if (contextName === 'prePostProcess') {\n return 'parsedHTML';\n }\n }\n /**\n * @inheritdoc\n */\n\n\n process(contextName, ...args) {\n this.logger.debug(`processing: 'contextName'=${contextName}`);\n const context = Object.assign(args[0]); // clone\n\n const targetKey = this.getTargetKey(contextName);\n const currentPagePath = context.currentPagePath; // eslint-disable-line no-unused-vars\n\n context.dcbContextMap = {}; // see: https://regex101.com/r/8PAEcC/5\n // eslint-disable-next-line max-len\n\n context[targetKey] = context[targetKey].replace(/(^(```|~~~)(.|[\\r\\n])*?(```|~~~)$)|(`[^\\r\\n]*?`)|((.|[\\r\\n])*?<\\/pre>)|(]*>(.|[\\r\\n])*?<\\/pre>)/gm, all => {\n // create ID\n const replaceId = `dcb-${this.createRandomStr(8)}`;\n this.logger.debug(`'replaceId'=${replaceId} : `, all); // register to context\n\n const dcbContext = {};\n dcbContext.content = all;\n dcbContext.substituteContent = DetachCodeBlockUtil.createReplaceStr(replaceId);\n context.dcbContextMap[replaceId] = dcbContext; // return substituteContent\n\n return dcbContext.substituteContent;\n }); // resolve\n\n return Promise.resolve(context);\n }\n /**\n * @see http://qiita.com/ryounagaoka/items/4736c225bdd86a74d59c\n *\n * @param {number} length\n * @return random strings\n */\n\n\n createRandomStr(length) {\n const bag = 'abcdefghijklmnopqrstuvwxyz0123456789';\n let generated = '';\n\n for (let i = 0; i < length; i++) {\n generated += bag[Math.floor(Math.random() * bag.length)];\n }\n\n return generated;\n }\n\n}\n/**\n * The interceptor that restore detached code blocks\n */\n\nclass RestoreCodeBlockInterceptor extends growi_commons__WEBPACK_IMPORTED_MODULE_0__[\"BasicInterceptor\"] {\n constructor(crowi) {\n super();\n this.logger = __webpack_require__(/*! @alias/logger */ \"./src/lib/service/logger/index.js\")('growi:DetachCodeBlockInterceptor');\n this.crowi = crowi;\n this.crowiForJquery = crowi.getCrowiForJquery();\n }\n /**\n * @inheritdoc\n */\n\n\n isInterceptWhen(contextName) {\n return /^postPreProcess|preRenderHtml|preRenderPreviewHtml|preRenderCommentHtml|preRenderCommentPreviewHtml$/.test(contextName);\n }\n\n getTargetKey(contextName) {\n if (contextName === 'postPreProcess') {\n return 'markdown';\n }\n\n if (contextName === 'preRenderHtml' || contextName === 'preRenderPreviewHtml' || contextName === 'preRenderCommentHtml' || contextName === 'preRenderCommentPreviewHtml') {\n return 'parsedHTML';\n }\n }\n /**\n * @inheritdoc\n */\n\n\n process(contextName, ...args) {\n this.logger.debug(`processing: 'contextName'=${contextName}`);\n const context = Object.assign(args[0]); // clone\n\n const targetKey = this.getTargetKey(contextName); // forEach keys of dcbContextMap\n\n Object.keys(context.dcbContextMap).forEach(replaceId => {\n // get context object from context\n const dcbContext = context.dcbContextMap[replaceId]; // replace it with content by using getter function so that the doller sign does not work\n // see: https://github.com/weseek/growi/issues/285\n\n context[targetKey] = context[targetKey].replace(dcbContext.substituteContent, () => {\n return dcbContext.content;\n });\n }); // resolve\n\n return Promise.resolve(context);\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvY2xpZW50L2pzL3V0aWwvaW50ZXJjZXB0b3IvZGV0YWNoLWNvZGUtYmxvY2tzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL2NsaWVudC9qcy91dGlsL2ludGVyY2VwdG9yL2RldGFjaC1jb2RlLWJsb2Nrcy5qcz9jNjViIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2ljSW50ZXJjZXB0b3IgfSBmcm9tICdncm93aS1jb21tb25zJztcblxuY2xhc3MgRGV0YWNoQ29kZUJsb2NrVXRpbCB7XG5cbiAgc3RhdGljIGNyZWF0ZVJlcGxhY2VTdHIocmVwbGFjZUlkKSB7XG4gICAgcmV0dXJuIGA8cHJlIGNsYXNzPVwiZGV0YWNoZWQtY29kZS1ibG9ja1wiPiR7cmVwbGFjZUlkfTwvcHJlPmA7XG4gIH1cblxufVxuXG4vKipcbiAqIFRoZSBpbnRlcmNlcHRvciB0aGF0IGRldGFjaCBjb2RlIGJsb2Nrc1xuICovXG5leHBvcnQgY2xhc3MgRGV0YWNoQ29kZUJsb2NrSW50ZXJjZXB0b3IgZXh0ZW5kcyBCYXNpY0ludGVyY2VwdG9yIHtcblxuICBjb25zdHJ1Y3Rvcihjcm93aSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5sb2dnZXIgPSByZXF1aXJlKCdAYWxpYXMvbG9nZ2VyJykoJ2dyb3dpOkRldGFjaENvZGVCbG9ja0ludGVyY2VwdG9yJyk7XG5cbiAgICB0aGlzLmNyb3dpID0gY3Jvd2k7XG4gICAgdGhpcy5jcm93aUZvckpxdWVyeSA9IGNyb3dpLmdldENyb3dpRm9ySnF1ZXJ5KCk7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXRkb2NcbiAgICovXG4gIGlzSW50ZXJjZXB0V2hlbihjb250ZXh0TmFtZSkge1xuICAgIHJldHVybiAvXnByZVByZVByb2Nlc3N8cHJlUG9zdFByb2Nlc3MkLy50ZXN0KGNvbnRleHROYW1lKTtcbiAgfVxuXG4gIGdldFRhcmdldEtleShjb250ZXh0TmFtZSkge1xuICAgIGlmIChjb250ZXh0TmFtZSA9PT0gJ3ByZVByZVByb2Nlc3MnKSB7XG4gICAgICByZXR1cm4gJ21hcmtkb3duJztcbiAgICB9XG4gICAgaWYgKGNvbnRleHROYW1lID09PSAncHJlUG9zdFByb2Nlc3MnKSB7XG4gICAgICByZXR1cm4gJ3BhcnNlZEhUTUwnO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdGRvY1xuICAgKi9cbiAgcHJvY2Vzcyhjb250ZXh0TmFtZSwgLi4uYXJncykge1xuICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBwcm9jZXNzaW5nOiAnY29udGV4dE5hbWUnPSR7Y29udGV4dE5hbWV9YCk7XG5cbiAgICBjb25zdCBjb250ZXh0ID0gT2JqZWN0LmFzc2lnbihhcmdzWzBdKTsgLy8gY2xvbmVcbiAgICBjb25zdCB0YXJnZXRLZXkgPSB0aGlzLmdldFRhcmdldEtleShjb250ZXh0TmFtZSk7XG4gICAgY29uc3QgY3VycmVudFBhZ2VQYXRoID0gY29udGV4dC5jdXJyZW50UGFnZVBhdGg7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcblxuICAgIGNvbnRleHQuZGNiQ29udGV4dE1hcCA9IHt9O1xuXG4gICAgLy8gc2VlOiBodHRwczovL3JlZ2V4MTAxLmNvbS9yLzhQQUVjQy81XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW5cbiAgICBjb250ZXh0W3RhcmdldEtleV0gPSBjb250ZXh0W3RhcmdldEtleV0ucmVwbGFjZSgvKF4oYGBgfH5+fikoLnxbXFxyXFxuXSkqPyhgYGB8fn5+KSQpfChgW15cXHJcXG5dKj9gKXwoPHByZT4oLnxbXFxyXFxuXSkqPzxcXC9wcmU+KXwoPHByZVxcc1tePl0qPigufFtcXHJcXG5dKSo/PFxcL3ByZT4pL2dtLCAoYWxsKSA9PiB7XG4gICAgICAvLyBjcmVhdGUgSURcbiAgICAgIGNvbnN0IHJlcGxhY2VJZCA9IGBkY2ItJHt0aGlzLmNyZWF0ZVJhbmRvbVN0cig4KX1gO1xuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoYCdyZXBsYWNlSWQnPSR7cmVwbGFjZUlkfSA6IGAsIGFsbCk7XG5cbiAgICAgIC8vIHJlZ2lzdGVyIHRvIGNvbnRleHRcbiAgICAgIGNvbnN0IGRjYkNvbnRleHQgPSB7fTtcbiAgICAgIGRjYkNvbnRleHQuY29udGVudCA9IGFsbDtcbiAgICAgIGRjYkNvbnRleHQuc3Vic3RpdHV0ZUNvbnRlbnQgPSBEZXRhY2hDb2RlQmxvY2tVdGlsLmNyZWF0ZVJlcGxhY2VTdHIocmVwbGFjZUlkKTtcbiAgICAgIGNvbnRleHQuZGNiQ29udGV4dE1hcFtyZXBsYWNlSWRdID0gZGNiQ29udGV4dDtcblxuICAgICAgLy8gcmV0dXJuIHN1YnN0aXR1dGVDb250ZW50XG4gICAgICByZXR1cm4gZGNiQ29udGV4dC5zdWJzdGl0dXRlQ29udGVudDtcbiAgICB9KTtcblxuICAgIC8vIHJlc29sdmVcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGNvbnRleHQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cDovL3FpaXRhLmNvbS9yeW91bmFnYW9rYS9pdGVtcy80NzM2YzIyNWJkZDg2YTc0ZDU5Y1xuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gbGVuZ3RoXG4gICAqIEByZXR1cm4gcmFuZG9tIHN0cmluZ3NcbiAgICovXG4gIGNyZWF0ZVJhbmRvbVN0cihsZW5ndGgpIHtcbiAgICBjb25zdCBiYWcgPSAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5JztcbiAgICBsZXQgZ2VuZXJhdGVkID0gJyc7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgZ2VuZXJhdGVkICs9IGJhZ1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBiYWcubGVuZ3RoKV07XG4gICAgfVxuICAgIHJldHVybiBnZW5lcmF0ZWQ7XG4gIH1cblxufVxuXG5cbi8qKlxuICogVGhlIGludGVyY2VwdG9yIHRoYXQgcmVzdG9yZSBkZXRhY2hlZCBjb2RlIGJsb2Nrc1xuICovXG5leHBvcnQgY2xhc3MgUmVzdG9yZUNvZGVCbG9ja0ludGVyY2VwdG9yIGV4dGVuZHMgQmFzaWNJbnRlcmNlcHRvciB7XG5cbiAgY29uc3RydWN0b3IoY3Jvd2kpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMubG9nZ2VyID0gcmVxdWlyZSgnQGFsaWFzL2xvZ2dlcicpKCdncm93aTpEZXRhY2hDb2RlQmxvY2tJbnRlcmNlcHRvcicpO1xuXG4gICAgdGhpcy5jcm93aSA9IGNyb3dpO1xuICAgIHRoaXMuY3Jvd2lGb3JKcXVlcnkgPSBjcm93aS5nZXRDcm93aUZvckpxdWVyeSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0ZG9jXG4gICAqL1xuICBpc0ludGVyY2VwdFdoZW4oY29udGV4dE5hbWUpIHtcbiAgICByZXR1cm4gL15wb3N0UHJlUHJvY2Vzc3xwcmVSZW5kZXJIdG1sfHByZVJlbmRlclByZXZpZXdIdG1sfHByZVJlbmRlckNvbW1lbnRIdG1sfHByZVJlbmRlckNvbW1lbnRQcmV2aWV3SHRtbCQvLnRlc3QoY29udGV4dE5hbWUpO1xuICB9XG5cbiAgZ2V0VGFyZ2V0S2V5KGNvbnRleHROYW1lKSB7XG4gICAgaWYgKGNvbnRleHROYW1lID09PSAncG9zdFByZVByb2Nlc3MnKSB7XG4gICAgICByZXR1cm4gJ21hcmtkb3duJztcbiAgICB9XG4gICAgaWYgKGNvbnRleHROYW1lID09PSAncHJlUmVuZGVySHRtbCcgfHwgY29udGV4dE5hbWUgPT09ICdwcmVSZW5kZXJQcmV2aWV3SHRtbCdcbiAgICAgICAgfHwgY29udGV4dE5hbWUgPT09ICdwcmVSZW5kZXJDb21tZW50SHRtbCcgfHwgY29udGV4dE5hbWUgPT09ICdwcmVSZW5kZXJDb21tZW50UHJldmlld0h0bWwnKSB7XG4gICAgICByZXR1cm4gJ3BhcnNlZEhUTUwnO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdGRvY1xuICAgKi9cbiAgcHJvY2Vzcyhjb250ZXh0TmFtZSwgLi4uYXJncykge1xuICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBwcm9jZXNzaW5nOiAnY29udGV4dE5hbWUnPSR7Y29udGV4dE5hbWV9YCk7XG5cbiAgICBjb25zdCBjb250ZXh0ID0gT2JqZWN0LmFzc2lnbihhcmdzWzBdKTsgLy8gY2xvbmVcbiAgICBjb25zdCB0YXJnZXRLZXkgPSB0aGlzLmdldFRhcmdldEtleShjb250ZXh0TmFtZSk7XG5cbiAgICAvLyBmb3JFYWNoIGtleXMgb2YgZGNiQ29udGV4dE1hcFxuICAgIE9iamVjdC5rZXlzKGNvbnRleHQuZGNiQ29udGV4dE1hcCkuZm9yRWFjaCgocmVwbGFjZUlkKSA9PiB7XG4gICAgICAvLyBnZXQgY29udGV4dCBvYmplY3QgZnJvbSBjb250ZXh0XG4gICAgICBjb25zdCBkY2JDb250ZXh0ID0gY29udGV4dC5kY2JDb250ZXh0TWFwW3JlcGxhY2VJZF07XG5cbiAgICAgIC8vIHJlcGxhY2UgaXQgd2l0aCBjb250ZW50IGJ5IHVzaW5nIGdldHRlciBmdW5jdGlvbiBzbyB0aGF0IHRoZSBkb2xsZXIgc2lnbiBkb2VzIG5vdCB3b3JrXG4gICAgICAvLyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS93ZXNlZWsvZ3Jvd2kvaXNzdWVzLzI4NVxuICAgICAgY29udGV4dFt0YXJnZXRLZXldID0gY29udGV4dFt0YXJnZXRLZXldLnJlcGxhY2UoZGNiQ29udGV4dC5zdWJzdGl0dXRlQ29udGVudCwgKCkgPT4geyByZXR1cm4gZGNiQ29udGV4dC5jb250ZW50IH0pO1xuICAgIH0pO1xuXG4gICAgLy8gcmVzb2x2ZVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoY29udGV4dCk7XG4gIH1cblxufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQVFBOzs7OztBQUdBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7Ozs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7QUFHQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBOzs7Ozs7OztBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUF6RUE7QUE2RUE7Ozs7QUFHQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBOzs7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBRUE7Ozs7O0FBR0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFqREEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/client/js/util/interceptor/detach-code-blocks.js\n");
/***/ }),
/***/ "./src/client/js/util/interceptor/drawio-interceptor.js":
/*!**************************************************************!*\
!*** ./src/client/js/util/interceptor/drawio-interceptor.js ***!
\**************************************************************/
/*! exports provided: DrawioInterceptor */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DrawioInterceptor\", function() { return DrawioInterceptor; });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-dom */ \"./node_modules/react-dom/index.js\");\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_dom__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var unstated__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! unstated */ \"./node_modules/unstated/lib/unstated.es.js\");\n/* harmony import */ var growi_commons__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! growi-commons */ \"./node_modules/growi-commons/src/index.js\");\n/* harmony import */ var growi_commons__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(growi_commons__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _components_Drawio__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../components/Drawio */ \"./src/client/js/components/Drawio.jsx\");\n/* eslint-disable import/prefer-default-export */\n\n\n\n\n\n/**\n * The interceptor for draw.io\n *\n * replace draw.io tag (render by markdown-it-drawio-viewer) to a React target element\n */\n\nclass DrawioInterceptor extends growi_commons__WEBPACK_IMPORTED_MODULE_3__[\"BasicInterceptor\"] {\n constructor(appContainer) {\n super();\n this.previousPreviewContext = null;\n this.appContainer = appContainer;\n }\n /**\n * @inheritdoc\n */\n\n\n isInterceptWhen(contextName) {\n return contextName === 'preRenderHtml' || contextName === 'preRenderPreviewHtml' || contextName === 'postRenderHtml' || contextName === 'postRenderPreviewHtml';\n }\n /**\n * @inheritdoc\n */\n\n\n isProcessableParallel() {\n return false;\n }\n /**\n * @inheritdoc\n */\n\n\n async process(contextName, ...args) {\n const context = Object.assign(args[0]); // clone\n\n if (contextName === 'preRenderHtml' || contextName === 'preRenderPreviewHtml') {\n return this.drawioPreRender(contextName, context);\n }\n\n if (contextName === 'postRenderHtml' || contextName === 'postRenderPreviewHtml') {\n this.drawioPostRender(contextName, context);\n return;\n }\n }\n /**\n * @inheritdoc\n */\n\n\n createRandomStr(length) {\n const bag = 'abcdefghijklmnopqrstuvwxyz0123456789';\n let generated = '';\n\n for (let i = 0; i < length; i++) {\n generated += bag[Math.floor(Math.random() * bag.length)];\n }\n\n return generated;\n }\n /**\n * @inheritdoc\n */\n\n\n drawioPreRender(contextName, context) {\n const div = document.createElement('div');\n div.innerHTML = context.parsedHTML;\n context.DrawioMap = {};\n Array.from(div.querySelectorAll('.mxgraph')).forEach(element => {\n const domId = `mxgraph-${this.createRandomStr(8)}`;\n context.DrawioMap[domId] = {\n rangeLineNumberOfMarkdown: {\n beginLineNumber: element.parentNode.dataset.beginLineNumberOfMarkdown,\n endLineNumber: element.parentNode.dataset.endLineNumberOfMarkdown\n },\n contentHtml: element.outerHTML\n };\n element.outerHTML = ``;\n });\n context.parsedHTML = div.innerHTML; // unmount\n\n if (contextName === 'preRenderPreviewHtml') {\n this.unmountPreviousReactDOMs(context);\n } // resolve\n\n\n return context;\n }\n /**\n * @inheritdoc\n */\n\n\n drawioPostRender(contextName, context) {\n const isPreview = contextName === 'postRenderPreviewHtml';\n Object.keys(context.DrawioMap).forEach(domId => {\n const elem = document.getElementById(domId);\n\n if (elem) {\n this.renderReactDOM(context.DrawioMap[domId], elem, isPreview);\n }\n });\n }\n /**\n * @inheritdoc\n */\n\n\n renderReactDOM(drawioMapEntry, elem, isPreview) {\n react_dom__WEBPACK_IMPORTED_MODULE_1___default.a.render( // eslint-disable-next-line react/jsx-filename-extension\n react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(unstated__WEBPACK_IMPORTED_MODULE_2__[\"Provider\"], {\n inject: [this.appContainer]\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_components_Drawio__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n drawioContent: drawioMapEntry.contentHtml,\n isPreview: isPreview,\n rangeLineNumberOfMarkdown: drawioMapEntry.rangeLineNumberOfMarkdown\n })), elem);\n }\n /**\n * @inheritdoc\n */\n\n\n unmountPreviousReactDOMs(newContext) {\n if (this.previousPreviewContext != null) {\n Array.from(document.querySelectorAll('.mxgraph')).forEach(element => {\n react_dom__WEBPACK_IMPORTED_MODULE_1___default.a.unmountComponentAtNode(element);\n });\n }\n\n this.previousPreviewContext = newContext;\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvY2xpZW50L2pzL3V0aWwvaW50ZXJjZXB0b3IvZHJhd2lvLWludGVyY2VwdG9yLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL2NsaWVudC9qcy91dGlsL2ludGVyY2VwdG9yL2RyYXdpby1pbnRlcmNlcHRvci5qcz85MTczIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGltcG9ydC9wcmVmZXItZGVmYXVsdC1leHBvcnQgKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUmVhY3RET00gZnJvbSAncmVhY3QtZG9tJztcbmltcG9ydCB7IFByb3ZpZGVyIH0gZnJvbSAndW5zdGF0ZWQnO1xuaW1wb3J0IHsgQmFzaWNJbnRlcmNlcHRvciB9IGZyb20gJ2dyb3dpLWNvbW1vbnMnO1xuXG5pbXBvcnQgRHJhd2lvIGZyb20gJy4uLy4uL2NvbXBvbmVudHMvRHJhd2lvJztcblxuLyoqXG4gKiBUaGUgaW50ZXJjZXB0b3IgZm9yIGRyYXcuaW9cbiAqXG4gKiAgcmVwbGFjZSBkcmF3LmlvIHRhZyAocmVuZGVyIGJ5IG1hcmtkb3duLWl0LWRyYXdpby12aWV3ZXIpIHRvIGEgUmVhY3QgdGFyZ2V0IGVsZW1lbnRcbiAqL1xuZXhwb3J0IGNsYXNzIERyYXdpb0ludGVyY2VwdG9yIGV4dGVuZHMgQmFzaWNJbnRlcmNlcHRvciB7XG5cbiAgY29uc3RydWN0b3IoYXBwQ29udGFpbmVyKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMucHJldmlvdXNQcmV2aWV3Q29udGV4dCA9IG51bGw7XG4gICAgdGhpcy5hcHBDb250YWluZXIgPSBhcHBDb250YWluZXI7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXRkb2NcbiAgICovXG4gIGlzSW50ZXJjZXB0V2hlbihjb250ZXh0TmFtZSkge1xuICAgIHJldHVybiAoXG4gICAgICBjb250ZXh0TmFtZSA9PT0gJ3ByZVJlbmRlckh0bWwnXG4gICAgICB8fCBjb250ZXh0TmFtZSA9PT0gJ3ByZVJlbmRlclByZXZpZXdIdG1sJ1xuICAgICAgfHwgY29udGV4dE5hbWUgPT09ICdwb3N0UmVuZGVySHRtbCdcbiAgICAgIHx8IGNvbnRleHROYW1lID09PSAncG9zdFJlbmRlclByZXZpZXdIdG1sJ1xuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXRkb2NcbiAgICovXG4gIGlzUHJvY2Vzc2FibGVQYXJhbGxlbCgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXRkb2NcbiAgICovXG4gIGFzeW5jIHByb2Nlc3MoY29udGV4dE5hbWUsIC4uLmFyZ3MpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gT2JqZWN0LmFzc2lnbihhcmdzWzBdKTsgLy8gY2xvbmVcblxuICAgIGlmIChjb250ZXh0TmFtZSA9PT0gJ3ByZVJlbmRlckh0bWwnIHx8IGNvbnRleHROYW1lID09PSAncHJlUmVuZGVyUHJldmlld0h0bWwnKSB7XG4gICAgICByZXR1cm4gdGhpcy5kcmF3aW9QcmVSZW5kZXIoY29udGV4dE5hbWUsIGNvbnRleHQpO1xuICAgIH1cblxuICAgIGlmIChjb250ZXh0TmFtZSA9PT0gJ3Bvc3RSZW5kZXJIdG1sJyB8fCBjb250ZXh0TmFtZSA9PT0gJ3Bvc3RSZW5kZXJQcmV2aWV3SHRtbCcpIHtcbiAgICAgIHRoaXMuZHJhd2lvUG9zdFJlbmRlcihjb250ZXh0TmFtZSwgY29udGV4dCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0ZG9jXG4gICAqL1xuICBjcmVhdGVSYW5kb21TdHIobGVuZ3RoKSB7XG4gICAgY29uc3QgYmFnID0gJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSc7XG4gICAgbGV0IGdlbmVyYXRlZCA9ICcnO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGdlbmVyYXRlZCArPSBiYWdbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogYmFnLmxlbmd0aCldO1xuICAgIH1cbiAgICByZXR1cm4gZ2VuZXJhdGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0ZG9jXG4gICAqL1xuICBkcmF3aW9QcmVSZW5kZXIoY29udGV4dE5hbWUsIGNvbnRleHQpIHtcbiAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBkaXYuaW5uZXJIVE1MID0gY29udGV4dC5wYXJzZWRIVE1MO1xuXG4gICAgY29udGV4dC5EcmF3aW9NYXAgPSB7fTtcbiAgICBBcnJheS5mcm9tKGRpdi5xdWVyeVNlbGVjdG9yQWxsKCcubXhncmFwaCcpKS5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICBjb25zdCBkb21JZCA9IGBteGdyYXBoLSR7dGhpcy5jcmVhdGVSYW5kb21TdHIoOCl9YDtcblxuICAgICAgY29udGV4dC5EcmF3aW9NYXBbZG9tSWRdID0ge1xuICAgICAgICByYW5nZUxpbmVOdW1iZXJPZk1hcmtkb3duOiB7XG4gICAgICAgICAgYmVnaW5MaW5lTnVtYmVyOiBlbGVtZW50LnBhcmVudE5vZGUuZGF0YXNldC5iZWdpbkxpbmVOdW1iZXJPZk1hcmtkb3duLFxuICAgICAgICAgIGVuZExpbmVOdW1iZXI6IGVsZW1lbnQucGFyZW50Tm9kZS5kYXRhc2V0LmVuZExpbmVOdW1iZXJPZk1hcmtkb3duLFxuICAgICAgICB9LFxuICAgICAgICBjb250ZW50SHRtbDogZWxlbWVudC5vdXRlckhUTUwsXG4gICAgICB9O1xuICAgICAgZWxlbWVudC5vdXRlckhUTUwgPSBgPGRpdiBpZD1cIiR7ZG9tSWR9XCI+PC9kaXY+YDtcbiAgICB9KTtcbiAgICBjb250ZXh0LnBhcnNlZEhUTUwgPSBkaXYuaW5uZXJIVE1MO1xuXG4gICAgLy8gdW5tb3VudFxuICAgIGlmIChjb250ZXh0TmFtZSA9PT0gJ3ByZVJlbmRlclByZXZpZXdIdG1sJykge1xuICAgICAgdGhpcy51bm1vdW50UHJldmlvdXNSZWFjdERPTXMoY29udGV4dCk7XG4gICAgfVxuXG4gICAgLy8gcmVzb2x2ZVxuICAgIHJldHVybiBjb250ZXh0O1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0ZG9jXG4gICAqL1xuICBkcmF3aW9Qb3N0UmVuZGVyKGNvbnRleHROYW1lLCBjb250ZXh0KSB7XG4gICAgY29uc3QgaXNQcmV2aWV3ID0gKGNvbnRleHROYW1lID09PSAncG9zdFJlbmRlclByZXZpZXdIdG1sJyk7XG5cbiAgICBPYmplY3Qua2V5cyhjb250ZXh0LkRyYXdpb01hcCkuZm9yRWFjaCgoZG9tSWQpID0+IHtcbiAgICAgIGNvbnN0IGVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChkb21JZCk7XG4gICAgICBpZiAoZWxlbSkge1xuICAgICAgICB0aGlzLnJlbmRlclJlYWN0RE9NKGNvbnRleHQuRHJhd2lvTWFwW2RvbUlkXSwgZWxlbSwgaXNQcmV2aWV3KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdGRvY1xuICAgKi9cbiAgcmVuZGVyUmVhY3RET00oZHJhd2lvTWFwRW50cnksIGVsZW0sIGlzUHJldmlldykge1xuICAgIFJlYWN0RE9NLnJlbmRlcihcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9qc3gtZmlsZW5hbWUtZXh0ZW5zaW9uXG4gICAgICA8UHJvdmlkZXIgaW5qZWN0PXtbdGhpcy5hcHBDb250YWluZXJdfT5cbiAgICAgICAgPERyYXdpb1xuICAgICAgICAgIGRyYXdpb0NvbnRlbnQ9e2RyYXdpb01hcEVudHJ5LmNvbnRlbnRIdG1sfVxuICAgICAgICAgIGlzUHJldmlldz17aXNQcmV2aWV3fVxuICAgICAgICAgIHJhbmdlTGluZU51bWJlck9mTWFya2Rvd249e2RyYXdpb01hcEVudHJ5LnJhbmdlTGluZU51bWJlck9mTWFya2Rvd259XG4gICAgICAgIC8+XG4gICAgICA8L1Byb3ZpZGVyPixcbiAgICAgIGVsZW0sXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdGRvY1xuICAgKi9cbiAgdW5tb3VudFByZXZpb3VzUmVhY3RET01zKG5ld0NvbnRleHQpIHtcbiAgICBpZiAodGhpcy5wcmV2aW91c1ByZXZpZXdDb250ZXh0ICE9IG51bGwpIHtcbiAgICAgIEFycmF5LmZyb20oZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLm14Z3JhcGgnKSkuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgICBSZWFjdERPTS51bm1vdW50Q29tcG9uZW50QXROb2RlKGVsZW1lbnQpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5wcmV2aW91c1ByZXZpZXdDb250ZXh0ID0gbmV3Q29udGV4dDtcbiAgfVxuXG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7Ozs7OztBQUtBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBOzs7OztBQUdBO0FBQ0E7QUFNQTtBQUVBOzs7OztBQUdBO0FBQ0E7QUFDQTtBQUVBOzs7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7Ozs7O0FBR0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBTEE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7O0FBR0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7QUFHQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBSEE7QUFRQTtBQUVBOzs7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBbElBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/client/js/util/interceptor/drawio-interceptor.js\n");
/***/ }),
/***/ "./src/client/js/util/locale-utils.js":
/*!********************************************!*\
!*** ./src/client/js/util/locale-utils.js ***!
\********************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("// https://docs.google.com/spreadsheets/d/1FoYdyEraEQuWofzbYCDPKN7EdKgS_2ZrsDrOA8scgwQ\nconst DIAGRAMS_NET_LANG_MAP = {\n ja_JP: 'ja',\n zh_CN: 'zh'\n};\n\nconst getDiagramsNetLangCode = lang => {\n return DIAGRAMS_NET_LANG_MAP[lang];\n};\n\nmodule.exports = {\n getDiagramsNetLangCode\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvY2xpZW50L2pzL3V0aWwvbG9jYWxlLXV0aWxzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL2NsaWVudC9qcy91dGlsL2xvY2FsZS11dGlscy5qcz8wNDY4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZG9jcy5nb29nbGUuY29tL3NwcmVhZHNoZWV0cy9kLzFGb1lkeUVyYUVRdVdvZnpiWUNEUEtON0VkS2dTXzJacnNEck9BOHNjZ3dRXG5jb25zdCBESUFHUkFNU19ORVRfTEFOR19NQVAgPSB7XG4gIGphX0pQOiAnamEnLFxuICB6aF9DTjogJ3poJyxcbn07XG5cbmNvbnN0IGdldERpYWdyYW1zTmV0TGFuZ0NvZGUgPSAobGFuZykgPT4ge1xuICByZXR1cm4gRElBR1JBTVNfTkVUX0xBTkdfTUFQW2xhbmddO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldERpYWdyYW1zTmV0TGFuZ0NvZGUsXG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/client/js/util/locale-utils.js\n");
/***/ }),
/***/ "./src/lib/components/PagePathHierarchicalLink.jsx":
/*!*********************************************************!*\
!*** ./src/lib/components/PagePathHierarchicalLink.jsx ***!
\*********************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var url_join__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! url-join */ \"./node_modules/url-join/lib/url-join.js\");\n/* harmony import */ var url_join__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(url_join__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _models_linked_page_path__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../models/linked-page-path */ \"./src/lib/models/linked-page-path.js\");\n/* harmony import */ var _models_linked_page_path__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_models_linked_page_path__WEBPACK_IMPORTED_MODULE_3__);\n\n\n\n\n\nconst PagePathHierarchicalLink = props => {\n var _linkedPagePath$paren;\n\n const {\n linkedPagePath,\n basePath,\n isInTrash\n } = props; // render root element\n\n if (linkedPagePath.isRoot) {\n if (basePath != null) {\n return null;\n }\n\n return isInTrash ? react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", {\n className: \"path-segment\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"a\", {\n href: \"/trash\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"i\", {\n className: \"icon-trash\"\n }))), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", {\n className: \"separator\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"a\", {\n href: \"/\"\n }, \"/\"))) : react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", {\n className: \"path-segment\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"a\", {\n href: \"/\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"i\", {\n className: \"icon-home\"\n }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", {\n className: \"separator\"\n }, \"/\"))));\n }\n\n const isParentExists = linkedPagePath.parent != null;\n const isParentRoot = (_linkedPagePath$paren = linkedPagePath.parent) === null || _linkedPagePath$paren === void 0 ? void 0 : _linkedPagePath$paren.isRoot;\n const isSeparatorRequired = isParentExists && !isParentRoot;\n const href = encodeURI(url_join__WEBPACK_IMPORTED_MODULE_2___default()(basePath || '/', linkedPagePath.href)); // eslint-disable-next-line react/prop-types\n\n const RootElm = ({\n children\n }) => {\n return props.isInnerElem ? react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, children) : react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", {\n className: \"grw-page-path-hierarchical-link d-inline-block text-break\"\n }, children);\n };\n\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(RootElm, null, isParentExists && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(PagePathHierarchicalLink, {\n linkedPagePath: linkedPagePath.parent,\n basePath: basePath,\n isInTrash: isInTrash || linkedPagePath.isInTrash,\n isInnerElem: true\n }), isSeparatorRequired && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", {\n className: \"separator\"\n }, \"/\"), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"a\", {\n className: \"page-segment\",\n href: href\n }, linkedPagePath.pathName));\n};\n\nPagePathHierarchicalLink.propTypes = {\n linkedPagePath: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.instanceOf(_models_linked_page_path__WEBPACK_IMPORTED_MODULE_3___default.a).isRequired,\n basePath: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n isInTrash: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n // !!INTERNAL USE ONLY!!\n isInnerElem: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (PagePathHierarchicalLink);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvbGliL2NvbXBvbmVudHMvUGFnZVBhdGhIaWVyYXJjaGljYWxMaW5rLmpzeC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9saWIvY29tcG9uZW50cy9QYWdlUGF0aEhpZXJhcmNoaWNhbExpbmsuanN4P2RlZDAiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5cbmltcG9ydCB1cmxqb2luIGZyb20gJ3VybC1qb2luJztcblxuaW1wb3J0IExpbmtlZFBhZ2VQYXRoIGZyb20gJy4uL21vZGVscy9saW5rZWQtcGFnZS1wYXRoJztcblxuXG5jb25zdCBQYWdlUGF0aEhpZXJhcmNoaWNhbExpbmsgPSAocHJvcHMpID0+IHtcbiAgY29uc3QgeyBsaW5rZWRQYWdlUGF0aCwgYmFzZVBhdGgsIGlzSW5UcmFzaCB9ID0gcHJvcHM7XG5cbiAgLy8gcmVuZGVyIHJvb3QgZWxlbWVudFxuICBpZiAobGlua2VkUGFnZVBhdGguaXNSb290KSB7XG4gICAgaWYgKGJhc2VQYXRoICE9IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBpc0luVHJhc2hcbiAgICAgID8gKFxuICAgICAgICA8PlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInBhdGgtc2VnbWVudFwiPlxuICAgICAgICAgICAgPGEgaHJlZj1cIi90cmFzaFwiPjxpIGNsYXNzTmFtZT1cImljb24tdHJhc2hcIj48L2k+PC9hPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJzZXBhcmF0b3JcIj48YSBocmVmPVwiL1wiPi88L2E+PC9zcGFuPlxuICAgICAgICA8Lz5cbiAgICAgIClcbiAgICAgIDogKFxuICAgICAgICA8PlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInBhdGgtc2VnbWVudFwiPlxuICAgICAgICAgICAgPGEgaHJlZj1cIi9cIj5cbiAgICAgICAgICAgICAgPGkgY2xhc3NOYW1lPVwiaWNvbi1ob21lXCI+PC9pPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJzZXBhcmF0b3JcIj4vPC9zcGFuPlxuICAgICAgICAgICAgPC9hPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC8+XG4gICAgICApO1xuICB9XG5cbiAgY29uc3QgaXNQYXJlbnRFeGlzdHMgPSBsaW5rZWRQYWdlUGF0aC5wYXJlbnQgIT0gbnVsbDtcbiAgY29uc3QgaXNQYXJlbnRSb290ID0gbGlua2VkUGFnZVBhdGgucGFyZW50Py5pc1Jvb3Q7XG4gIGNvbnN0IGlzU2VwYXJhdG9yUmVxdWlyZWQgPSBpc1BhcmVudEV4aXN0cyAmJiAhaXNQYXJlbnRSb290O1xuXG4gIGNvbnN0IGhyZWYgPSBlbmNvZGVVUkkodXJsam9pbihiYXNlUGF0aCB8fCAnLycsIGxpbmtlZFBhZ2VQYXRoLmhyZWYpKTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvcHJvcC10eXBlc1xuICBjb25zdCBSb290RWxtID0gKHsgY2hpbGRyZW4gfSkgPT4ge1xuICAgIHJldHVybiBwcm9wcy5pc0lubmVyRWxlbVxuICAgICAgPyA8PntjaGlsZHJlbn08Lz5cbiAgICAgIDogPHNwYW4gY2xhc3NOYW1lPVwiZ3J3LXBhZ2UtcGF0aC1oaWVyYXJjaGljYWwtbGluayBkLWlubGluZS1ibG9jayB0ZXh0LWJyZWFrXCI+e2NoaWxkcmVufTwvc3Bhbj47XG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8Um9vdEVsbT5cbiAgICAgIHsgaXNQYXJlbnRFeGlzdHMgJiYgKFxuICAgICAgICA8UGFnZVBhdGhIaWVyYXJjaGljYWxMaW5rIGxpbmtlZFBhZ2VQYXRoPXtsaW5rZWRQYWdlUGF0aC5wYXJlbnR9IGJhc2VQYXRoPXtiYXNlUGF0aH0gaXNJblRyYXNoPXtpc0luVHJhc2ggfHwgbGlua2VkUGFnZVBhdGguaXNJblRyYXNofSBpc0lubmVyRWxlbSAvPlxuICAgICAgKSB9XG4gICAgICB7IGlzU2VwYXJhdG9yUmVxdWlyZWQgJiYgKFxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJzZXBhcmF0b3JcIj4vPC9zcGFuPlxuICAgICAgKSB9XG5cbiAgICAgIDxhIGNsYXNzTmFtZT1cInBhZ2Utc2VnbWVudFwiIGhyZWY9e2hyZWZ9PntsaW5rZWRQYWdlUGF0aC5wYXRoTmFtZX08L2E+XG4gICAgPC9Sb290RWxtPlxuICApO1xufTtcblxuUGFnZVBhdGhIaWVyYXJjaGljYWxMaW5rLnByb3BUeXBlcyA9IHtcbiAgbGlua2VkUGFnZVBhdGg6IFByb3BUeXBlcy5pbnN0YW5jZU9mKExpbmtlZFBhZ2VQYXRoKS5pc1JlcXVpcmVkLFxuICBiYXNlUGF0aDogUHJvcFR5cGVzLnN0cmluZyxcbiAgaXNJblRyYXNoOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvLyAhIUlOVEVSTkFMIFVTRSBPTkxZISFcbiAgaXNJbm5lckVsZW06IFByb3BUeXBlcy5ib29sLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgUGFnZVBhdGhIaWVyYXJjaGljYWxMaW5rO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBRUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFLQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUVBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFBQTtBQUdBO0FBQUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFOQTtBQVNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/lib/components/PagePathHierarchicalLink.jsx\n");
/***/ }),
/***/ "./src/lib/models/linked-page-path.js":
/*!********************************************!*\
!*** ./src/lib/models/linked-page-path.js ***!
\********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
eval("const {\n pathUtils\n} = __webpack_require__(/*! growi-commons */ \"./node_modules/growi-commons/src/index.js\");\n\nconst {\n isTrashPage\n} = __webpack_require__(/*! @commons/util/path-utils */ \"./src/lib/util/path-utils.js\");\n\nconst DevidedPagePath = __webpack_require__(/*! ./devided-page-path */ \"./src/lib/models/devided-page-path.js\");\n/**\n * Linked Array Structured PagePath Model\n */\n\n\nclass LinkedPagePath {\n constructor(path, skipNormalize = false) {\n const pagePath = new DevidedPagePath(path, skipNormalize);\n this.path = path;\n this.pathName = pagePath.latter;\n this.isRoot = pagePath.isRoot;\n this.parent = pagePath.isRoot ? null : new LinkedPagePath(pagePath.former, true);\n }\n\n get href() {\n if (this.isRoot) {\n return '';\n }\n\n return pathUtils.normalizePath(`${this.parent.href}/${this.pathName}`);\n }\n\n get isInTrash() {\n return isTrashPage(this.path);\n }\n\n}\n\nmodule.exports = LinkedPagePath;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvbGliL21vZGVscy9saW5rZWQtcGFnZS1wYXRoLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL2xpYi9tb2RlbHMvbGlua2VkLXBhZ2UtcGF0aC5qcz9jNjg5Il0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IHsgcGF0aFV0aWxzIH0gPSByZXF1aXJlKCdncm93aS1jb21tb25zJyk7XG5jb25zdCB7IGlzVHJhc2hQYWdlIH0gPSByZXF1aXJlKCdAY29tbW9ucy91dGlsL3BhdGgtdXRpbHMnKTtcblxuY29uc3QgRGV2aWRlZFBhZ2VQYXRoID0gcmVxdWlyZSgnLi9kZXZpZGVkLXBhZ2UtcGF0aCcpO1xuXG4vKipcbiAqIExpbmtlZCBBcnJheSBTdHJ1Y3R1cmVkIFBhZ2VQYXRoIE1vZGVsXG4gKi9cbmNsYXNzIExpbmtlZFBhZ2VQYXRoIHtcblxuICBjb25zdHJ1Y3RvcihwYXRoLCBza2lwTm9ybWFsaXplID0gZmFsc2UpIHtcblxuICAgIGNvbnN0IHBhZ2VQYXRoID0gbmV3IERldmlkZWRQYWdlUGF0aChwYXRoLCBza2lwTm9ybWFsaXplKTtcblxuICAgIHRoaXMucGF0aCA9IHBhdGg7XG4gICAgdGhpcy5wYXRoTmFtZSA9IHBhZ2VQYXRoLmxhdHRlcjtcbiAgICB0aGlzLmlzUm9vdCA9IHBhZ2VQYXRoLmlzUm9vdDtcbiAgICB0aGlzLnBhcmVudCA9IHBhZ2VQYXRoLmlzUm9vdFxuICAgICAgPyBudWxsXG4gICAgICA6IG5ldyBMaW5rZWRQYWdlUGF0aChwYWdlUGF0aC5mb3JtZXIsIHRydWUpO1xuXG4gIH1cblxuICBnZXQgaHJlZigpIHtcbiAgICBpZiAodGhpcy5pc1Jvb3QpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICByZXR1cm4gcGF0aFV0aWxzLm5vcm1hbGl6ZVBhdGgoYCR7dGhpcy5wYXJlbnQuaHJlZn0vJHt0aGlzLnBhdGhOYW1lfWApO1xuICB9XG5cbiAgZ2V0IGlzSW5UcmFzaCgpIHtcbiAgICByZXR1cm4gaXNUcmFzaFBhZ2UodGhpcy5wYXRoKTtcbiAgfVxuXG59XG5cbm1vZHVsZS5leHBvcnRzID0gTGlua2VkUGFnZVBhdGg7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUVBOzs7OztBQUdBO0FBRUE7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQTFCQTtBQUNBO0FBNEJBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/lib/models/linked-page-path.js\n");
/***/ }),
/***/ 0:
/*!**********************!*\
!*** util (ignored) ***!
\**********************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/* (ignored) *///# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy91dGlsIChpZ25vcmVkKT9lZjdjIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIChpZ25vcmVkKSAqLyJdLCJtYXBwaW5ncyI6IkFBQUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///0\n");
/***/ }),
/***/ 1:
/*!********************!*\
!*** ws (ignored) ***!
\********************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("/* (ignored) *///# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMS5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy93cyAoaWdub3JlZCk/OTIwYiJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiAoaWdub3JlZCkgKi8iXSwibWFwcGluZ3MiOiJBQUFBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1\n");
/***/ }),
/***/ "jquery":
/*!*************************!*\
!*** external "jQuery" ***!
\*************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("module.exports = jQuery;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianF1ZXJ5LmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwialF1ZXJ5XCI/Y2QwYyJdLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IGpRdWVyeTsiXSwibWFwcGluZ3MiOiJBQUFBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///jquery\n");
/***/ })
/******/ });