diff --git a/css/main.css b/css/main.css index 45fada6e..f29453c9 100644 --- a/css/main.css +++ b/css/main.css @@ -178,7 +178,10 @@ padding: 2px 10px; } - +.settings-open .bd-close { + cursor: pointer; + float: right; +} diff --git a/js/main.js b/js/main.js index bed2cefd..5a15ea3a 100644 --- a/js/main.js +++ b/js/main.js @@ -911,7 +911,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) * /***/ (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 PluginCard; });\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n/* harmony import */ var _icons_close__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../icons/close */ \"./src/ui/icons/close.jsx\");\n/* harmony import */ var _icons_reload__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../icons/reload */ \"./src/ui/icons/reload.jsx\");\n// import {SettingsCookie, PluginCookie, Plugins} from \"data\";\n\n\n\nclass PluginCard extends modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].Component {\n constructor(props) {\n super(props);\n this.onChange = this.onChange.bind(this);\n this.showSettings = this.showSettings.bind(this);\n this.state = {\n checked: this.props.enabled,\n //PluginManager.isEnabled(this.props.content.id),\n settingsOpen: false\n };\n this.hasSettings = typeof this.props.content.plugin.getSettingsPanel === \"function\";\n this.settingsPanel = \"\";\n this.panelRef = modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createRef();\n this.reload = this.reload.bind(this); // this.onReload = this.onReload.bind(this);\n }\n\n reload() {\n if (!this.props.reload) return;\n this.props.content = this.props.reload(this.props.content.id);\n this.forceUpdate();\n }\n\n componentDidUpdate() {\n if (this.state.settingsOpen) {\n if (this.settingsPanel instanceof Node) {\n this.panelRef.current.appendChild(this.settingsPanel);\n } // if (!SettingsCookie[\"fork-ps-3\"]) return;\n\n\n const isHidden = (container, element) => {\n const cTop = container.scrollTop;\n const cBottom = cTop + container.clientHeight;\n const eTop = element.offsetTop;\n const eBottom = eTop + element.clientHeight;\n return eTop < cTop || eBottom > cBottom;\n };\n\n const panel = $(this.panelRef.current);\n const container = panel.parents(\".scroller-2FKFPG\");\n if (!isHidden(container[0], panel[0])) return;\n container.animate({\n scrollTop: panel.offset().top - container.offset().top + container.scrollTop() - 30\n }, 300);\n }\n }\n\n getString(value) {\n return typeof value == \"string\" ? value : value.toString();\n }\n\n buildTitle(name, version, author) {\n const title = modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons.title.split(/({{[A-Za-z]+}})/);\n const nameIndex = title.findIndex(s => s == \"{{name}}\");\n if (nameIndex) title[nameIndex] = modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"span\", {\n className: \"bda-name\"\n }, name);\n const versionIndex = title.findIndex(s => s == \"{{version}}\");\n if (nameIndex) title[versionIndex] = modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"span\", {\n className: \"bda-version\"\n }, version);\n const authorIndex = title.findIndex(s => s == \"{{author}}\");\n if (nameIndex) title[authorIndex] = modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"span\", {\n className: \"bda-author\"\n }, author);\n return title.flat();\n }\n\n render() {\n const {\n content\n } = this.props;\n const name = this.getString(content.name);\n const author = this.getString(content.author);\n const description = this.getString(content.description);\n const version = this.getString(content.version);\n const website = content.website;\n const source = content.source;\n\n if (this.state.settingsOpen) {\n try {\n this.settingsPanel = content.plugin.getSettingsPanel();\n } catch (err) {\n modules__WEBPACK_IMPORTED_MODULE_0__[\"Logger\"].stacktrace(\"Plugin Settings\", \"Unable to get settings panel for \" + content.name + \".\", err);\n }\n\n const props = {\n id: `plugin-settings-${name}`,\n className: \"plugin-settings\",\n ref: this.panelRef\n };\n if (typeof this.settingsPanel == \"string\") props.dangerouslySetInnerHTML = this.settingsPanel;\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"li\", {\n className: \"settings-open ui-switch-item\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n style: {\n \"float\": \"right\",\n \"cursor\": \"pointer\"\n },\n onClick: () => {\n this.panelRef.current.innerHTML = \"\";\n this.setState({\n settingsOpen: false\n });\n }\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_icons_close__WEBPACK_IMPORTED_MODULE_1__[\"default\"], null)), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", props, this.settingsPanel instanceof modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].Component ? this.settingsPanel : null));\n }\n\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"li\", {\n \"data-name\": name,\n \"data-version\": version,\n \"className\": \"settings-closed ui-switch-item\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bda-header\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"span\", {\n className: \"bda-header-title\"\n }, this.buildTitle(name, version, author)), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bda-controls\"\n }, !modules__WEBPACK_IMPORTED_MODULE_0__[\"Settings\"].get(\"settings\", \"addons\", \"autoReload\") && modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_icons_reload__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n className: \"bd-reload bd-reload-card\",\n onClick: this.reload\n }), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"label\", {\n className: \"ui-switch-wrapper ui-flex-child\",\n style: {\n flex: \"0 0 auto\"\n }\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"input\", {\n checked: this.state.checked,\n onChange: this.onChange,\n className: \"ui-switch-checkbox\",\n type: \"checkbox\"\n }), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: this.state.checked ? \"ui-switch checked\" : \"ui-switch\"\n })))), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bda-description-wrap scroller-wrap fade\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bda-description scroller\"\n }, description)), (website || source || this.hasSettings) && modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bda-footer\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"span\", {\n className: \"bda-links\"\n }, website && modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"a\", {\n className: \"bda-link bda-link-website\",\n href: website,\n target: \"_blank\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons.website), website && source && \" | \", source && modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"a\", {\n className: \"bda-link bda-link-source\",\n href: source,\n target: \"_blank\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons.source)), this.hasSettings && modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"button\", {\n onClick: this.showSettings,\n className: \"bd-button bd-button-plugin-settings\",\n disabled: !this.state.checked\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons.pluginSettings)));\n }\n\n onChange() {\n this.setState({\n checked: !this.state.checked\n });\n this.props.onChange && this.props.onChange(this.props.content.id);\n }\n\n showSettings() {\n if (!this.hasSettings) return;\n this.setState({\n settingsOpen: true\n });\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL3VpL3NldHRpbmdzL3BsdWdpbmNhcmQuanM/NzczZCJdLCJuYW1lcyI6WyJQbHVnaW5DYXJkIiwiUmVhY3QiLCJDb21wb25lbnQiLCJjb25zdHJ1Y3RvciIsInByb3BzIiwib25DaGFuZ2UiLCJiaW5kIiwic2hvd1NldHRpbmdzIiwic3RhdGUiLCJjaGVja2VkIiwiZW5hYmxlZCIsInNldHRpbmdzT3BlbiIsImhhc1NldHRpbmdzIiwiY29udGVudCIsInBsdWdpbiIsImdldFNldHRpbmdzUGFuZWwiLCJzZXR0aW5nc1BhbmVsIiwicGFuZWxSZWYiLCJjcmVhdGVSZWYiLCJyZWxvYWQiLCJpZCIsImZvcmNlVXBkYXRlIiwiY29tcG9uZW50RGlkVXBkYXRlIiwiTm9kZSIsImN1cnJlbnQiLCJhcHBlbmRDaGlsZCIsImlzSGlkZGVuIiwiY29udGFpbmVyIiwiZWxlbWVudCIsImNUb3AiLCJzY3JvbGxUb3AiLCJjQm90dG9tIiwiY2xpZW50SGVpZ2h0IiwiZVRvcCIsIm9mZnNldFRvcCIsImVCb3R0b20iLCJwYW5lbCIsIiQiLCJwYXJlbnRzIiwiYW5pbWF0ZSIsIm9mZnNldCIsInRvcCIsImdldFN0cmluZyIsInZhbHVlIiwidG9TdHJpbmciLCJidWlsZFRpdGxlIiwibmFtZSIsInZlcnNpb24iLCJhdXRob3IiLCJ0aXRsZSIsIlN0cmluZ3MiLCJBZGRvbnMiLCJzcGxpdCIsIm5hbWVJbmRleCIsImZpbmRJbmRleCIsInMiLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NOYW1lIiwidmVyc2lvbkluZGV4IiwiYXV0aG9ySW5kZXgiLCJmbGF0IiwicmVuZGVyIiwiZGVzY3JpcHRpb24iLCJ3ZWJzaXRlIiwic291cmNlIiwiZXJyIiwiTG9nZ2VyIiwic3RhY2t0cmFjZSIsInJlZiIsImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIiwic3R5bGUiLCJvbkNsaWNrIiwiaW5uZXJIVE1MIiwic2V0U3RhdGUiLCJDbG9zZUJ1dHRvbiIsIlNldHRpbmdzIiwiZ2V0IiwiUmVsb2FkSWNvbiIsImZsZXgiLCJ0eXBlIiwiaHJlZiIsInRhcmdldCIsImRpc2FibGVkIiwicGx1Z2luU2V0dGluZ3MiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVlLE1BQU1BLFVBQU4sU0FBeUJDLDZDQUFLLENBQUNDLFNBQS9CLENBQXlDO0FBRXBEQyxhQUFXLENBQUNDLEtBQUQsRUFBUTtBQUNmLFVBQU1BLEtBQU47QUFDQSxTQUFLQyxRQUFMLEdBQWdCLEtBQUtBLFFBQUwsQ0FBY0MsSUFBZCxDQUFtQixJQUFuQixDQUFoQjtBQUNBLFNBQUtDLFlBQUwsR0FBb0IsS0FBS0EsWUFBTCxDQUFrQkQsSUFBbEIsQ0FBdUIsSUFBdkIsQ0FBcEI7QUFDQSxTQUFLRSxLQUFMLEdBQWE7QUFDVEMsYUFBTyxFQUFFLEtBQUtMLEtBQUwsQ0FBV00sT0FEWDtBQUNtQjtBQUM1QkMsa0JBQVksRUFBRTtBQUZMLEtBQWI7QUFJQSxTQUFLQyxXQUFMLEdBQW1CLE9BQU8sS0FBS1IsS0FBTCxDQUFXUyxPQUFYLENBQW1CQyxNQUFuQixDQUEwQkMsZ0JBQWpDLEtBQXNELFVBQXpFO0FBQ0EsU0FBS0MsYUFBTCxHQUFxQixFQUFyQjtBQUNBLFNBQUtDLFFBQUwsR0FBZ0JoQiw2Q0FBSyxDQUFDaUIsU0FBTixFQUFoQjtBQUVBLFNBQUtDLE1BQUwsR0FBYyxLQUFLQSxNQUFMLENBQVliLElBQVosQ0FBaUIsSUFBakIsQ0FBZCxDQVplLENBYWY7QUFDSDs7QUFFRGEsUUFBTSxHQUFHO0FBQ0wsUUFBSSxDQUFDLEtBQUtmLEtBQUwsQ0FBV2UsTUFBaEIsRUFBd0I7QUFDeEIsU0FBS2YsS0FBTCxDQUFXUyxPQUFYLEdBQXFCLEtBQUtULEtBQUwsQ0FBV2UsTUFBWCxDQUFrQixLQUFLZixLQUFMLENBQVdTLE9BQVgsQ0FBbUJPLEVBQXJDLENBQXJCO0FBQ0EsU0FBS0MsV0FBTDtBQUNIOztBQUVEQyxvQkFBa0IsR0FBRztBQUNq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Q29udGVudCI6WyIvLyBpbXBvcnQge1NldHRpbmdzQ29va2llLCBQbHVnaW5Db29raWUsIFBsdWdpbnN9IGZyb20gXCJkYXRhXCI7XHJcbmltcG9ydCB7UmVhY3QsIExvZ2dlciwgU2V0dGluZ3MsIFN0cmluZ3N9IGZyb20gXCJtb2R1bGVzXCI7XHJcbmltcG9ydCBDbG9zZUJ1dHRvbiBmcm9tIFwiLi4vaWNvbnMvY2xvc2VcIjtcclxuaW1wb3J0IFJlbG9hZEljb24gZnJvbSBcIi4uL2ljb25zL3JlbG9hZFwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGx1Z2luQ2FyZCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IHRoaXMub25DaGFuZ2UuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLnNob3dTZXR0aW5ncyA9IHRoaXMuc2hvd1NldHRpbmdzLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgICAgICAgY2hlY2tlZDogdGhpcy5wcm9wcy5lbmFibGVkLC8vUGx1Z2luTWFuYWdlci5pc0VuYWJsZWQodGhpcy5wcm9wcy5jb250ZW50LmlkKSxcclxuICAgICAgICAgICAgc2V0dGluZ3NPcGVuOiBmYWxzZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5oYXNTZXR0aW5ncyA9IHR5cGVvZiB0aGlzLnByb3BzLmNvbnRlbnQucGx1Z2luLmdldFNldHRpbmdzUGFuZWwgPT09IFwiZnVuY3Rpb25cIjtcclxuICAgICAgICB0aGlzLnNldHRpbmdzUGFuZWwgPSBcIlwiO1xyXG4gICAgICAgIHRoaXMucGFuZWxSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcclxuXHJcbiAgICAgICAgdGhpcy5yZWxvYWQgPSB0aGlzLnJlbG9hZC5iaW5kKHRoaXMpO1xyXG4gICAgICAgIC8vIHRoaXMub25SZWxvYWQgPSB0aGlzLm9uUmVsb2FkLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVsb2FkKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5wcm9wcy5yZWxvYWQpIHJldHVybjtcclxuICAgICAgICB0aGlzLnByb3BzLmNvbnRlbnQgPSB0aGlzLnByb3BzLnJlbG9hZCh0aGlzLnByb3BzLmNvbnRlbnQuaWQpO1xyXG4gICAgICAgIHRoaXMuZm9yY2VVcGRhdGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnREaWRVcGRhdGUoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUuc2V0dGluZ3NPcGVuKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNldHRpbmdzUGFuZWwgaW5zdGFuY2VvZiBOb2RlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBhbmVsUmVmLmN1cnJlbnQuYXBwZW5kQ2hpbGQodGhpcy5zZXR0aW5nc1BhbmVsKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gaWYgKCFTZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtM1wiXSkgcmV0dXJuO1xyXG4gICAgICAgICAgICBjb25zdCBpc0hpZGRlbiA9IChjb250YWluZXIsIGVsZW1lbnQpID0+IHtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBjVG9wID0gY29udGFpbmVyLnNjcm9sbFRvcDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNCb3R0b20gPSBjVG9wICsgY29udGFpbmVyLmNsaWVudEhlaWdodDtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBlVG9wID0gZWxlbWVudC5vZmZzZXRUb3A7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlQm90dG9tID0gZVRvcCArIGVsZW1lbnQuY2xpZW50SGVpZ2h0O1xyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiAgKGVUb3AgPCBjVG9wIHx8IGVCb3R0b20gPiBjQm90dG9tKTtcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHBhbmVsID0gJCh0aGlzLnBhbmVsUmVmLmN1cnJlbnQpO1xyXG4gICAgICAgICAgICBjb25zdCBjb250YWluZXIgPSBwYW5lbC5wYXJlbnRzKFwiLnNjcm9sbGVyLTJGS0ZQR1wiKTtcclxuICAgICAgICAgICAgaWYgKCFpc0hpZGRlbihjb250YWluZXJbMF0sIHBhbmVsWzBdKSkgcmV0dXJuO1xyXG4gICAgICAgICAgICBjb250YWluZXIuYW5pbWF0ZSh7XHJcbiAgICAgICAgICAgICAgICBzY3JvbGxUb3A6IHBhbmVsLm9mZnNldCgpLnRvcCAtIGNvbnRhaW5lci5vZmZzZXQoKS50b3AgKyBjb250YWluZXIuc2Nyb2xsVG9wKCkgLSAzMFxyXG4gICAgICAgICAgICB9LCAzMDApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXRTdHJpbmcodmFsdWUpIHtcclxuICAgICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09IFwic3RyaW5nXCIgPyB2YWx1ZSA6IHZhbHVlLnRvU3RyaW5nKCk7XHJcbiAgICB9XHJcblxyXG4gICAgYnVpbGRUaXRsZShuYW1lLCB2ZXJzaW9uLCBhdXRob3IpIHtcclxuICAgICAgICBjb25zdCB0aXRsZSA9IFN0cmluZ3MuQWRkb25zLnRpdGxlLnNwbGl0KC8oe3tbQS1aYS16XSt9fSkvKTtcclxuICAgICAgICBjb25zdCBuYW1lSW5kZXggPSB0aXRsZS5maW5kSW5kZXgocyA9PiBzID09IFwie3tuYW1lfX1cIik7XHJcbiAgICAgICAgaWYgKG5hbWVJbmRleCkgdGl0bGVbbmFtZUluZGV4XSA9IFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtjbGFzc05hbWU6IFwiYmRhLW5hbWVcIn0sIG5hbWUpO1xyXG4gICAgICAgIGNvbnN0IHZlcnNpb25JbmRleCA9IHRpdGxlLmZpbmRJbmRleChzID0+IHMgPT0gXCJ7e3ZlcnNpb259fVwiKTtcclxuICAgICAgICBpZiAobmFtZUluZGV4KSB0aXRsZVt2ZXJzaW9uSW5kZXhdID0gUmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge2NsYXNzTmFtZTogXCJiZGEtdmVyc2lvblwifSwgdmVyc2lvbik7XHJcbiAgICAgICAgY29uc3QgYXV0aG9ySW5kZXggPSB0aXRsZS5maW5kSW5kZXgocyA9PiBzID09IFwie3thdXRob3J9fVwiKTtcclxuICAgICAgICBpZiAobmFtZUluZGV4KSB0aXRsZVthdXRob3JJbmRleF0gPSBSZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7Y2xhc3NOYW1lOiBcImJkYS1hdXRob3JcIn0sIGF1dGhvcik7XHJcbiAgICAgICAgcmV0dXJuIHRpdGxlLmZsYXQoKTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgY29uc3Qge2NvbnRlbnR9ID0gdGhpcy5wcm9wcztcclxuICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5nZXRTdHJpbmcoY29udGVudC5uYW1lKTtcclxuICAgICAgICBjb25zdCBhdXRob3IgPSB0aGlzLmdldFN0cmluZyhjb250ZW50LmF1dGhvcik7XHJcbiAgICAgICAgY29uc3QgZGVzY3JpcHRpb24gPSB0aGlzLmdldFN0cmluZyhjb250ZW50LmRlc2NyaXB0aW9uKTtcclxuICAgICAgICBjb25zdCB2ZXJzaW9uID0gdGhpcy5nZXRTdHJpbmcoY29udGVudC52ZXJzaW9uKTtcclxuICAgICAgICBjb25zdCB3ZWJzaXRlID0gY29udGVudC53ZWJzaXRlO1xyXG4gICAgICAgIGNvbnN0IHNvdXJjZSA9IGNvbnRlbnQuc291cmNlO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5zdGF0ZS5zZXR0aW5nc09wZW4pIHtcclxuICAgICAgICAgICAgdHJ5IHsgdGhpcy5zZXR0aW5nc1BhbmVsID0gY29udGVudC5wbHVnaW4uZ2V0U2V0dGluZ3NQYW5lbCgpOyB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlcnIpIHsgTG9nZ2VyLnN0YWNrdHJhY2UoXCJQbHVnaW4gU2V0dGluZ3NcIiwgXCJVbmFibGUgdG8gZ2V0IHNldHRpbmdzIHBhbmVsIGZvciBcIiArIGNvbnRlbnQubmFtZSArIFwiLlwiLCBlcnIpOyB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCBwcm9wcyA9IHtpZDogYHBsdWdpbi1zZXR0aW5ncy0ke25hbWV9YCwgY2xhc3NOYW1lOiBcInBsdWdpbi1zZXR0aW5nc1wiLCByZWY6IHRoaXMucGFuZWxSZWZ9O1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mKHRoaXMuc2V0dGluZ3NQYW5lbCkgPT0gXCJzdHJpbmdcIikgcHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgPSB0aGlzLnNldHRpbmdzUGFuZWw7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcImxpXCIsIHtjbGFzc05hbWU6IFwic2V0dGluZ3Mtb3BlbiB1aS1zd2l0Y2gtaXRlbVwifSxcclxuICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtzdHlsZToge1wiZmxvYXRcIjogXCJyaWdodFwiLCBcImN1cnNvclwiOiBcInBvaW50ZXJcIn0sIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFuZWxSZWYuY3VycmVudC5pbm5lckhUTUwgPSBcIlwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7c2V0dGluZ3NPcGVuOiBmYWxzZX0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9fSxcclxuICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KENsb3NlQnV0dG9uLCBudWxsKVxyXG4gICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgcHJvcHMsIHRoaXMuc2V0dGluZ3NQYW5lbCBpbnN0YW5jZW9mIFJlYWN0LkNvbXBvbmVudCA/IHRoaXMuc2V0dGluZ3NQYW5lbCA6IG51bGwpLFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFwibGlcIiwge1wiZGF0YS1uYW1lXCI6IG5hbWUsIFwiZGF0YS12ZXJzaW9uXCI6IHZlcnNpb24sIFwiY2xhc3NOYW1lXCI6IFwic2V0dGluZ3MtY2xvc2VkIHVpLXN3aXRjaC1pdGVtXCJ9LFxyXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwiYmRhLWhlYWRlclwifSxcclxuICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7Y2xhc3NOYW1lOiBcImJkYS1oZWFkZXItdGl0bGVcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVpbGRUaXRsZShuYW1lLCB2ZXJzaW9uLCBhdXRob3IpXHJcbiAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwiYmRhLWNvbnRyb2xzXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAhU2V0dGluZ3MuZ2V0KFwic2V0dGluZ3NcIiwgXCJhZGRvbnNcIiwgXCJhdXRvUmVsb2FkXCIpICYmIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUmVsb2FkSWNvbiwge2NsYXNzTmFtZTogXCJiZC1yZWxvYWQgYmQtcmVsb2FkLWNhcmRcIiwgb25DbGljazogdGhpcy5yZWxvYWR9KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImxhYmVsXCIsIHtjbGFzc05hbWU6IFwidWktc3dpdGNoLXdyYXBwZXIgdWktZmxleC1jaGlsZFwiLCBzdHlsZToge2ZsZXg6IFwiMCAwIGF1dG9cIn19LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImlucHV0XCIsIHtjaGVja2VkOiB0aGlzLnN0YXRlLmNoZWNrZWQsIG9uQ2hhbmdlOiB0aGlzLm9uQ2hhbmdlLCBjbGFzc05hbWU6IFwidWktc3dpdGNoLWNoZWNrYm94XCIsIHR5cGU6IFwiY2hlY2tib3hcIn0pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiB0aGlzLnN0YXRlLmNoZWNrZWQgPyBcInVpLXN3aXRjaCBjaGVja2VkXCIgOiBcInVpLXN3aXRjaFwifSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImJkYS1kZXNjcmlwdGlvbi13cmFwIHNjcm9sbGVyLXdyYXAgZmFkZVwifSxcclxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJiZGEtZGVzY3JpcHRpb24gc2Nyb2xsZXJcIn0sIGRlc2NyaXB0aW9uKVxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAod2Vic2l0ZSB8fCBzb3VyY2UgfHwgdGhpcy5oYXNTZXR0aW5ncykgJiYgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImJkYS1mb290ZXJcIn0sXHJcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7Y2xhc3NOYW1lOiBcImJkYS1saW5rc1wifSxcclxuICAgICAgICAgICAgICAgICAgICB3ZWJzaXRlICYmIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJhXCIsIHtjbGFzc05hbWU6IFwiYmRhLWxpbmsgYmRhLWxpbmstd2Vic2l0ZVwiLCBocmVmOiB3ZWJzaXRlLCB0YXJnZXQ6IFwiX2JsYW5rXCJ9LCBTdHJpbmdzLkFkZG9ucy53ZWJzaXRlKSxcclxuICAgICAgICAgICAgICAgICAgICB3ZWJzaXRlICYmIHNvdXJjZSAmJiBcIiB8IFwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZSAmJiBSZWFjdC5jcmVhdGVFbGVtZW50KFwiYVwiLCB7Y2xhc3NOYW1lOiBcImJkYS1saW5rIGJkYS1saW5rLXNvdXJjZVwiLCBocmVmOiBzb3VyY2UsIHRhcmdldDogXCJfYmxhbmtcIn0sIFN0cmluZ3MuQWRkb25zLnNvdXJjZSlcclxuICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICB0aGlzLmhhc1NldHRpbmdzICYmIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIiwge29uQ2xpY2s6IHRoaXMuc2hvd1NldHRpbmdzLCBjbGFzc05hbWU6IFwiYmQtYnV0dG9uIGJkLWJ1dHRvbi1wbHVnaW4tc2V0dGluZ3NcIiwgZGlzYWJsZWQ6ICF0aGlzLnN0YXRlLmNoZWNrZWR9LCBTdHJpbmdzLkFkZG9ucy5wbHVnaW5TZXR0aW5ncylcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgb25DaGFuZ2UoKSB7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7Y2hlY2tlZDogIXRoaXMuc3RhdGUuY2hlY2tlZH0pO1xyXG4gICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UgJiYgdGhpcy5wcm9wcy5vbkNoYW5nZSh0aGlzLnByb3BzLmNvbnRlbnQuaWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHNob3dTZXR0aW5ncygpIHtcclxuICAgICAgICBpZiAoIXRoaXMuaGFzU2V0dGluZ3MpIHJldHVybjtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtzZXR0aW5nc09wZW46IHRydWV9KTtcclxuICAgIH1cclxufSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/ui/settings/plugincard.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return PluginCard; });\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n/* harmony import */ var _icons_close__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../icons/close */ \"./src/ui/icons/close.jsx\");\n/* harmony import */ var _icons_reload__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../icons/reload */ \"./src/ui/icons/reload.jsx\");\n\n\n\nclass PluginCard extends modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].Component {\n constructor(props) {\n super(props);\n this.onChange = this.onChange.bind(this);\n this.showSettings = this.showSettings.bind(this);\n this.state = {\n checked: this.props.enabled,\n settingsOpen: false\n };\n this.hasSettings = typeof this.props.content.plugin.getSettingsPanel === \"function\";\n this.settingsPanel = \"\";\n this.panelRef = modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createRef();\n this.reload = this.reload.bind(this); // this.onReload = this.onReload.bind(this);\n\n this.closeSettings = this.closeSettings.bind(this);\n }\n\n reload() {\n if (!this.props.reload) return;\n this.props.content = this.props.reload(this.props.content.id);\n this.forceUpdate();\n }\n\n componentDidUpdate() {\n if (!this.state.settingsOpen) return;\n if (this.settingsPanel instanceof Node) this.panelRef.current.appendChild(this.settingsPanel); // if (!SettingsCookie[\"fork-ps-3\"]) return;\n\n const isHidden = (container, element) => {\n const cTop = container.scrollTop;\n const cBottom = cTop + container.clientHeight;\n const eTop = element.offsetTop;\n const eBottom = eTop + element.clientHeight;\n return eTop < cTop || eBottom > cBottom;\n };\n\n const panel = $(this.panelRef.current);\n const container = panel.parents(\".scroller-2FKFPG\");\n if (!isHidden(container[0], panel[0])) return;\n container.animate({\n scrollTop: panel.offset().top - container.offset().top + container.scrollTop() - 30\n }, 300);\n }\n\n getString(value) {\n return typeof value == \"string\" ? value : value.toString();\n }\n\n closeSettings() {\n this.panelRef.current.innerHTML = \"\";\n this.setState({\n settingsOpen: false\n });\n }\n\n buildTitle(name, version, author) {\n const title = modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons.title.split(/({{[A-Za-z]+}})/);\n const nameIndex = title.findIndex(s => s == \"{{name}}\");\n if (nameIndex) title[nameIndex] = modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"span\", {\n className: \"bda-name\"\n }, name);\n const versionIndex = title.findIndex(s => s == \"{{version}}\");\n if (nameIndex) title[versionIndex] = modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"span\", {\n className: \"bda-version\"\n }, version);\n const authorIndex = title.findIndex(s => s == \"{{author}}\");\n if (nameIndex) title[authorIndex] = modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"span\", {\n className: \"bda-author\"\n }, author);\n return title.flat();\n }\n\n get settingsComponent() {\n const content = this.props.content;\n const name = this.getString(content.name);\n\n try {\n this.settingsPanel = content.plugin.getSettingsPanel();\n } catch (err) {\n modules__WEBPACK_IMPORTED_MODULE_0__[\"Logger\"].stacktrace(\"Plugin Settings\", \"Unable to get settings panel for \" + name + \".\", err);\n }\n\n const props = {\n id: `plugin-settings-${name}`,\n className: \"plugin-settings\",\n ref: this.panelRef\n };\n if (typeof settingsPanel == \"string\") props.dangerouslySetInnerHTML = this.settingsPanel;\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"li\", {\n className: \"settings-open ui-switch-item\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bd-close\",\n onClick: this.closeSettings\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_icons_close__WEBPACK_IMPORTED_MODULE_1__[\"default\"], null)), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", props, this.settingsPanel instanceof modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].Component ? this.settingsPanel : null));\n }\n\n buildLink(which) {\n const url = this.props.content[which];\n if (!url) return null;\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"a\", {\n className: \"bda-link bda-link-website\",\n href: url,\n target: \"_blank\",\n rel: \"noopener noreferrer\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons[which]);\n }\n\n get footer() {\n const links = [\"website\", \"source\"];\n if (!links.some(l => this.props.content[l]) && !this.hasSettings) return null;\n const linkComponents = links.map(this.buildLink.bind(this)).filter(c => c);\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bda-footer\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"span\", {\n className: \"bda-links\"\n }, linkComponents.map((comp, i) => i < linkComponents.length - 1 ? [comp, \" | \"] : [comp]).flat()), this.hasSettings && modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"button\", {\n onClick: this.showSettings,\n className: \"bd-button bd-button-plugin-settings\",\n disabled: !this.state.checked\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons.pluginSettings));\n }\n\n render() {\n if (this.state.settingsOpen) return this.settingsComponent;\n const {\n content\n } = this.props;\n const name = this.getString(content.name);\n const author = this.getString(content.author);\n const description = this.getString(content.description);\n const version = this.getString(content.version);\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"li\", {\n dataName: name,\n dataVersion: version,\n className: \"settings-closed ui-switch-item\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bda-header\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"span\", {\n className: \"bda-header-title\"\n }, this.buildTitle(name, version, author)), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bda-controls\"\n }, this.props.showReloadIcon && modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_icons_reload__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n className: \"bd-reload bd-reload-card\",\n onClick: this.reload\n }), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"label\", {\n className: \"ui-switch-wrapper ui-flex-child\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"input\", {\n className: \"ui-switch-checkbox\",\n checked: this.state.checked,\n onChange: this.onChange,\n type: \"checkbox\"\n }), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: this.state.checked ? \"ui-switch checked\" : \"ui-switch\"\n })))), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bda-description-wrap scroller-wrap fade\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bda-description scroller\"\n }, description)), this.footer);\n }\n\n onChange() {\n this.setState({\n checked: !this.state.checked\n });\n this.props.onChange && this.props.onChange(this.props.content.id);\n }\n\n showSettings() {\n if (!this.hasSettings) return;\n this.setState({\n settingsOpen: true\n });\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL3VpL3NldHRpbmdzL3BsdWdpbmNhcmQuanM/NzczZCJdLCJuYW1lcyI6WyJQbHVnaW5DYXJkIiwiUmVhY3QiLCJDb21wb25lbnQiLCJjb25zdHJ1Y3RvciIsInByb3BzIiwib25DaGFuZ2UiLCJiaW5kIiwic2hvd1NldHRpbmdzIiwic3RhdGUiLCJjaGVja2VkIiwiZW5hYmxlZCIsInNldHRpbmdzT3BlbiIsImhhc1NldHRpbmdzIiwiY29udGVudCIsInBsdWdpbiIsImdldFNldHRpbmdzUGFuZWwiLCJzZXR0aW5nc1BhbmVsIiwicGFuZWxSZWYiLCJjcmVhdGVSZWYiLCJyZWxvYWQiLCJjbG9zZVNldHRpbmdzIiwiaWQiLCJmb3JjZVVwZGF0ZSIsImNvbXBvbmVudERpZFVwZGF0ZSIsIk5vZGUiLCJjdXJyZW50IiwiYXBwZW5kQ2hpbGQiLCJpc0hpZGRlbiIsImNvbnRhaW5lciIsImVsZW1lbnQiLCJjVG9wIiwic2Nyb2xsVG9wIiwiY0JvdHRvbSIsImNsaWVudEhlaWdodCIsImVUb3AiLCJvZmZzZXRUb3AiLCJlQm90dG9tIiwicGFuZWwiLCIkIiwicGFyZW50cyIsImFuaW1hdGUiLCJvZmZzZXQiLCJ0b3AiLCJnZXRTdHJpbmciLCJ2YWx1ZSIsInRvU3RyaW5nIiwiaW5uZXJIVE1MIiwic2V0U3RhdGUiLCJidWlsZFRpdGxlIiwibmFtZSIsInZlcnNpb24iLCJhdXRob3IiLCJ0aXRsZSIsIlN0cmluZ3MiLCJBZGRvbnMiLCJzcGxpdCIsIm5hbWVJbmRleCIsImZpbmRJbmRleCIsInMiLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NOYW1lIiwidmVyc2lvbkluZGV4IiwiYXV0aG9ySW5kZXgiLCJmbGF0Iiwic2V0dGluZ3NDb21wb25lbnQiLCJlcnIiLCJMb2dnZXIiLCJzdGFja3RyYWNlIiwicmVmIiwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiLCJidWlsZExpbmsiLCJ3aGljaCIsInVybCIsImZvb3RlciIsImxpbmtzIiwic29tZSIsImwiLCJsaW5rQ29tcG9uZW50cyIsIm1hcCIsImZpbHRlciIsImMiLCJjb21wIiwiaSIsImxlbmd0aCIsInBsdWdpblNldHRpbmdzIiwicmVuZGVyIiwiZGVzY3JpcHRpb24iLCJzaG93UmVsb2FkSWNvbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUVlLE1BQU1BLFVBQU4sU0FBeUJDLDZDQUFLLENBQUNDLFNBQS9CLENBQXlDO0FBRXBEQyxhQUFXLENBQUNDLEtBQUQsRUFBUTtBQUNmLFVBQU1BLEtBQU47QUFDQSxTQUFLQyxRQUFMLEdBQWdCLEtBQUtBLFFBQUwsQ0FBY0MsSUFBZCxDQUFtQixJQUFuQixDQUFoQjtBQUNBLFNBQUtDLFlBQUwsR0FBb0IsS0FBS0EsWUFBTCxDQUFrQkQsSUFBbEIsQ0FBdUIsSUFBdkIsQ0FBcEI7QUFDQSxTQUFLRSxLQUFMLEdBQWE7QUFDVEMsYUFBTyxFQUFFLEtBQUtMLEtBQUwsQ0FBV00sT0FEWDtBQUVUQyxrQkFBWSxFQUFFO0FBRkwsS0FBYjtBQUlBLFNBQUtDLFdBQUwsR0FBbUIsT0FBTyxLQUFLUixLQUFMLENBQVdTLE9BQVgsQ0FBbUJDLE1BQW5CLENBQTBCQyxnQkFBakMsS0FBc0QsVUFBekU7QUFDQSxTQUFLQyxhQUFMLEdBQXFCLEVBQXJCO0FBQ0EsU0FBS0MsUUFBTCxHQUFnQmhCLDZDQUFLLENBQUNpQixTQUFOLEVBQWhCO0FBRUEsU0FBS0MsTUFBTCxHQUFjLEtBQUtBLE1BQUwsQ0FBWWIsSUFBWixDQUFpQixJQUFqQixDQUFkLENBWmUsQ0FhZjs7QUFDQSxTQUFLYyxhQUFMLEdBQXFCLEtBQUtBLGFBQUwsQ0FBbUJkLElBQW5CLENBQXdCLElBQXhCLENBQXJCO0FBQ0g7O0FBRURhLFFBQU0sR0FBRztBQUNMLFFBQUksQ0FBQyxLQUFLZixLQUFMLENBQVdlLE1BQWhCLEVBQXdCO0FBQ3hCLFNBQUtmLEtBQUwsQ0FBV1MsT0FBWCxHQUFxQixLQUFLVCxLQUFMLENBQVdlLE1B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QUFLSixRQUFsRjtBQUE0RixVQUFJLEVBQUM7QUFBakcsTUFESixFQUVJO0FBQUssZUFBUyxFQUFFLEtBQUtHLEtBQUwsQ0FBV0MsT0FBWCxHQUFxQixtQkFBckIsR0FBMkM7QUFBM0QsTUFGSixDQUZKLENBRlIsQ0FETCxFQVdLO0FBQUssZUFBUyxFQUFDO0FBQWYsT0FBeUQ7QUFBSyxlQUFTLEVBQUM7QUFBZixPQUEyQzZFLFdBQTNDLENBQXpELENBWEwsRUFZTSxLQUFLYixNQVpYLENBQVA7QUFjSDs7QUFFRHBFLFVBQVEsR0FBRztBQUNQLFNBQUswQyxRQUFMLENBQWM7QUFBQ3RDLGFBQU8sRUFBRSxDQUFDLEtBQUtELEtBQUwsQ0FBV0M7QUFBdEIsS0FBZDtBQUNBLFNBQUtMLEtBQUwsQ0FBV0MsUUFBWCxJQUF1QixLQUFLRCxLQUFMLENBQVdDLFFBQVgsQ0FBb0IsS0FBS0QsS0FBTCxDQUFXUyxPQUFYLENBQW1CUSxFQUF2QyxDQUF2QjtBQUNIOztBQUVEZCxjQUFZLEdBQUc7QUFDWCxRQUFJLENBQUMsS0FBS0ssV0FBVixFQUF1QjtBQUN2QixTQUFLbUMsUUFBTCxDQUFjO0FBQUNwQyxrQkFBWSxFQUFFO0FBQWYsS0FBZDtBQUNIOztBQWhJbUQiLCJmaWxlIjoiLi9zcmMvdWkvc2V0dGluZ3MvcGx1Z2luY2FyZC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7UmVhY3QsIExvZ2dlciwgU3RyaW5nc30gZnJvbSBcIm1vZHVsZXNcIjtcclxuaW1wb3J0IENsb3NlQnV0dG9uIGZyb20gXCIuLi9pY29ucy9jbG9zZVwiO1xyXG5pbXBvcnQgUmVsb2FkSWNvbiBmcm9tIFwiLi4vaWNvbnMvcmVsb2FkXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQbHVnaW5DYXJkIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gdGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuc2hvd1NldHRpbmdzID0gdGhpcy5zaG93U2V0dGluZ3MuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICAgICAgICBjaGVja2VkOiB0aGlzLnByb3BzLmVuYWJsZWQsXHJcbiAgICAgICAgICAgIHNldHRpbmdzT3BlbjogZmFsc2VcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuaGFzU2V0dGluZ3MgPSB0eXBlb2YgdGhpcy5wcm9wcy5jb250ZW50LnBsdWdpbi5nZXRTZXR0aW5nc1BhbmVsID09PSBcImZ1bmN0aW9uXCI7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nc1BhbmVsID0gXCJcIjtcclxuICAgICAgICB0aGlzLnBhbmVsUmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XHJcblxyXG4gICAgICAgIHRoaXMucmVsb2FkID0gdGhpcy5yZWxvYWQuYmluZCh0aGlzKTtcclxuICAgICAgICAvLyB0aGlzLm9uUmVsb2FkID0gdGhpcy5vblJlbG9hZC5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuY2xvc2VTZXR0aW5ncyA9IHRoaXMuY2xvc2VTZXR0aW5ncy5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbG9hZCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMucHJvcHMucmVsb2FkKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5wcm9wcy5jb250ZW50ID0gdGhpcy5wcm9wcy5yZWxvYWQodGhpcy5wcm9wcy5jb250ZW50LmlkKTtcclxuICAgICAgICB0aGlzLmZvcmNlVXBkYXRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29tcG9uZW50RGlkVXBkYXRlKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5zdGF0ZS5zZXR0aW5nc09wZW4pIHJldHVybjtcclxuICAgICAgICBpZiAodGhpcy5zZXR0aW5nc1BhbmVsIGluc3RhbmNlb2YgTm9kZSkgdGhpcy5wYW5lbFJlZi5jdXJyZW50LmFwcGVuZENoaWxkKHRoaXMuc2V0dGluZ3NQYW5lbCk7XHJcblxyXG4gICAgICAgIC8vIGlmICghU2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTNcIl0pIHJldHVybjtcclxuICAgICAgICBjb25zdCBpc0hpZGRlbiA9IChjb250YWluZXIsIGVsZW1lbnQpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgY1RvcCA9IGNvbnRhaW5lci5zY3JvbGxUb3A7XHJcbiAgICAgICAgICAgIGNvbnN0IGNCb3R0b20gPSBjVG9wICsgY29udGFpbmVyLmNsaWVudEhlaWdodDtcclxuICAgICAgICAgICAgY29uc3QgZVRvcCA9IGVsZW1lbnQub2Zmc2V0VG9wO1xyXG4gICAgICAgICAgICBjb25zdCBlQm90dG9tID0gZVRvcCArIGVsZW1lbnQuY2xpZW50SGVpZ2h0O1xyXG4gICAgICAgICAgICByZXR1cm4gIChlVG9wIDwgY1RvcCB8fCBlQm90dG9tID4gY0JvdHRvbSk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgY29uc3QgcGFuZWwgPSAkKHRoaXMucGFuZWxSZWYuY3VycmVudCk7XHJcbiAgICAgICAgY29uc3QgY29udGFpbmVyID0gcGFuZWwucGFyZW50cyhcIi5zY3JvbGxlci0yRktGUEdcIik7XHJcbiAgICAgICAgaWYgKCFpc0hpZGRlbihjb250YWluZXJbMF0sIHBhbmVsWzBdKSkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnRhaW5lci5hbmltYXRlKHtcclxuICAgICAgICAgICAgc2Nyb2xsVG9wOiBwYW5lbC5vZmZzZXQoKS50b3AgLSBjb250YWluZXIub2Zmc2V0KCkudG9wICsgY29udGFpbmVyLnNjcm9sbFRvcCgpIC0gMzBcclxuICAgICAgICB9LCAzMDApO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFN0cmluZyh2YWx1ZSkge3JldHVybiB0eXBlb2YgdmFsdWUgPT0gXCJzdHJpbmdcIiA/IHZhbHVlIDogdmFsdWUudG9TdHJpbmcoKTt9XHJcblxyXG4gICAgY2xvc2VTZXR0aW5ncygpIHtcclxuICAgICAgICB0aGlzLnBhbmVsUmVmLmN1cnJlbnQuaW5uZXJIVE1MID0gXCJcIjtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtzZXR0aW5nc09wZW46IGZhbHNlfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYnVpbGRUaXRsZShuYW1lLCB2ZXJzaW9uLCBhdXRob3IpIHtcclxuICAgICAgICBjb25zdCB0aXRsZSA9IFN0cmluZ3MuQWRkb25zLnRpdGxlLnNwbGl0KC8oe3tbQS1aYS16XSt9fSkvKTtcclxuICAgICAgICBjb25zdCBuYW1lSW5kZXggPSB0aXRsZS5maW5kSW5kZXgocyA9PiBzID09IFwie3tuYW1lfX1cIik7XHJcbiAgICAgICAgaWYgKG5hbWVJbmRleCkgdGl0bGVbbmFtZUluZGV4XSA9IFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtjbGFzc05hbWU6IFwiYmRhLW5hbWVcIn0sIG5hbWUpO1xyXG4gICAgICAgIGNvbnN0IHZlcnNpb25JbmRleCA9IHRpdGxlLmZpbmRJbmRleChzID0+IHMgPT0gXCJ7e3ZlcnNpb259fVwiKTtcclxuICAgICAgICBpZiAobmFtZUluZGV4KSB0aXRsZVt2ZXJzaW9uSW5kZXhdID0gUmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge2NsYXNzTmFtZTogXCJiZGEtdmVyc2lvblwifSwgdmVyc2lvbik7XHJcbiAgICAgICAgY29uc3QgYXV0aG9ySW5kZXggPSB0aXRsZS5maW5kSW5kZXgocyA9PiBzID09IFwie3thdXRob3J9fVwiKTtcclxuICAgICAgICBpZiAobmFtZUluZGV4KSB0aXRsZVthdXRob3JJbmRleF0gPSBSZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7Y2xhc3NOYW1lOiBcImJkYS1hdXRob3JcIn0sIGF1dGhvcik7XHJcbiAgICAgICAgcmV0dXJuIHRpdGxlLmZsYXQoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgc2V0dGluZ3NDb21wb25lbnQoKSB7XHJcbiAgICAgICAgY29uc3QgY29udGVudCA9IHRoaXMucHJvcHMuY29udGVudDtcclxuICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5nZXRTdHJpbmcoY29udGVudC5uYW1lKTtcclxuICAgICAgICB0cnkgeyB0aGlzLnNldHRpbmdzUGFuZWwgPSBjb250ZW50LnBsdWdpbi5nZXRTZXR0aW5nc1BhbmVsKCk7IH1cclxuICAgICAgICBjYXRjaCAoZXJyKSB7IExvZ2dlci5zdGFja3RyYWNlKFwiUGx1Z2luIFNldHRpbmdzXCIsIFwiVW5hYmxlIHRvIGdldCBzZXR0aW5ncyBwYW5lbCBmb3IgXCIgKyBuYW1lICsgXCIuXCIsIGVycik7IH1cclxuXHJcbiAgICAgICAgY29uc3QgcHJvcHMgPSB7aWQ6IGBwbHVnaW4tc2V0dGluZ3MtJHtuYW1lfWAsIGNsYXNzTmFtZTogXCJwbHVnaW4tc2V0dGluZ3NcIiwgcmVmOiB0aGlzLnBhbmVsUmVmfTtcclxuICAgICAgICBpZiAodHlwZW9mKHNldHRpbmdzUGFuZWwpID09IFwic3RyaW5nXCIpIHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MID0gdGhpcy5zZXR0aW5nc1BhbmVsO1xyXG5cclxuICAgICAgICByZXR1cm4gPGxpIGNsYXNzTmFtZT1cInNldHRpbmdzLW9wZW4gdWktc3dpdGNoLWl0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJkLWNsb3NlXCIgb25DbGljaz17dGhpcy5jbG9zZVNldHRpbmdzfT48Q2xvc2VCdXR0b24gLz48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHsuLi5wcm9wc30+e3RoaXMuc2V0dGluZ3NQYW5lbCBpbnN0YW5jZW9mIFJlYWN0LkNvbXBvbmVudCA/IHRoaXMuc2V0dGluZ3NQYW5lbCA6IG51bGx9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2xpPjtcclxuICAgIH1cclxuXHJcbiAgICBidWlsZExpbmsod2hpY2gpIHtcclxuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLnByb3BzLmNvbnRlbnRbd2hpY2hdO1xyXG4gICAgICAgIGlmICghdXJsKSByZXR1cm4gbnVsbDtcclxuICAgICAgICByZXR1cm4gPGEgY2xhc3NOYW1lPVwiYmRhLWxpbmsgYmRhLWxpbmstd2Vic2l0ZVwiIGhyZWY9e3VybH0gdGFyZ2V0PVwiX2JsYW5rXCIgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiPntTdHJpbmdzLkFkZG9uc1t3aGljaF19PC9hPjtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgZm9vdGVyKCkge1xyXG4gICAgICAgIGNvbnN0IGxpbmtzID0gW1wid2Vic2l0ZVwiLCBcInNvdXJjZVwiXTtcclxuICAgICAgICBpZiAoIWxpbmtzLnNvbWUobCA9PiB0aGlzLnByb3BzLmNvbnRlbnRbbF0pICYmICF0aGlzLmhhc1NldHRpbmdzKSByZXR1cm4gbnVsbDtcclxuICAgICAgICBjb25zdCBsaW5rQ29tcG9uZW50cyA9IGxpbmtzLm1hcCh0aGlzLmJ1aWxkTGluay5iaW5kKHRoaXMpKS5maWx0ZXIoYyA9PiBjKTtcclxuICAgICAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJiZGEtZm9vdGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiYmRhLWxpbmtzXCI+e2xpbmtDb21wb25lbnRzLm1hcCgoY29tcCwgaSkgPT4gaSA8IGxpbmtDb21wb25lbnRzLmxlbmd0aCAtIDEgPyBbY29tcCwgXCIgfCBcIl0gOiBbY29tcF0pLmZsYXQoKX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAge3RoaXMuaGFzU2V0dGluZ3MgJiYgPGJ1dHRvbiBvbkNsaWNrPXt0aGlzLnNob3dTZXR0aW5nc30gY2xhc3NOYW1lPVwiYmQtYnV0dG9uIGJkLWJ1dHRvbi1wbHVnaW4tc2V0dGluZ3NcIiBkaXNhYmxlZD17IXRoaXMuc3RhdGUuY2hlY2tlZH0+e1N0cmluZ3MuQWRkb25zLnBsdWdpblNldHRpbmdzfTwvYnV0dG9uPn1cclxuICAgICAgICAgICAgICAgIDwvZGl2PjtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUuc2V0dGluZ3NPcGVuKSByZXR1cm4gdGhpcy5zZXR0aW5nc0NvbXBvbmVudDtcclxuXHJcbiAgICAgICAgY29uc3Qge2NvbnRlbnR9ID0gdGhpcy5wcm9wcztcclxuICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5nZXRTdHJpbmcoY29udGVudC5uYW1lKTtcclxuICAgICAgICBjb25zdCBhdXRob3IgPSB0aGlzLmdldFN0cmluZyhjb250ZW50LmF1dGhvcik7XHJcbiAgICAgICAgY29uc3QgZGVzY3JpcHRpb24gPSB0aGlzLmdldFN0cmluZyhjb250ZW50LmRlc2NyaXB0aW9uKTtcclxuICAgICAgICBjb25zdCB2ZXJzaW9uID0gdGhpcy5nZXRTdHJpbmcoY29udGVudC52ZXJzaW9uKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIDxsaSBkYXRhTmFtZT17bmFtZX0gZGF0YVZlcnNpb249e3ZlcnNpb259IGNsYXNzTmFtZT1cInNldHRpbmdzLWNsb3NlZCB1aS1zd2l0Y2gtaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmRhLWhlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiYmRhLWhlYWRlci10aXRsZVwiPnt0aGlzLmJ1aWxkVGl0bGUobmFtZSwgdmVyc2lvbiwgYXV0aG9yKX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJkYS1jb250cm9sc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt0aGlzLnByb3BzLnNob3dSZWxvYWRJY29uICYmIDxSZWxvYWRJY29uIGNsYXNzTmFtZT1cImJkLXJlbG9hZCBiZC1yZWxvYWQtY2FyZFwiIG9uQ2xpY2s9e3RoaXMucmVsb2FkfSAvPn1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPVwidWktc3dpdGNoLXdyYXBwZXIgdWktZmxleC1jaGlsZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3NOYW1lPVwidWktc3dpdGNoLWNoZWNrYm94XCIgY2hlY2tlZD17dGhpcy5zdGF0ZS5jaGVja2VkfSBvbkNoYW5nZT17dGhpcy5vbkNoYW5nZX0gdHlwZT1cImNoZWNrYm94XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMuc3RhdGUuY2hlY2tlZCA/IFwidWktc3dpdGNoIGNoZWNrZWRcIiA6IFwidWktc3dpdGNoXCJ9IC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmRhLWRlc2NyaXB0aW9uLXdyYXAgc2Nyb2xsZXItd3JhcCBmYWRlXCI+PGRpdiBjbGFzc05hbWU9XCJiZGEtZGVzY3JpcHRpb24gc2Nyb2xsZXJcIj57ZGVzY3JpcHRpb259PC9kaXY+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAge3RoaXMuZm9vdGVyfVxyXG4gICAgICAgICAgICAgICAgPC9saT47XHJcbiAgICB9XHJcblxyXG4gICAgb25DaGFuZ2UoKSB7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7Y2hlY2tlZDogIXRoaXMuc3RhdGUuY2hlY2tlZH0pO1xyXG4gICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UgJiYgdGhpcy5wcm9wcy5vbkNoYW5nZSh0aGlzLnByb3BzLmNvbnRlbnQuaWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHNob3dTZXR0aW5ncygpIHtcclxuICAgICAgICBpZiAoIXRoaXMuaGFzU2V0dGluZ3MpIHJldHVybjtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtzZXR0aW5nc09wZW46IHRydWV9KTtcclxuICAgIH1cclxufSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/ui/settings/plugincard.js\n"); /***/ }), @@ -935,7 +935,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) * /***/ (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 ThemeCard; });\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n/* harmony import */ var _icons_reload__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../icons/reload */ \"./src/ui/icons/reload.jsx\");\n\n // import Toasts from \"../toasts\";\n\nclass ThemeCard extends modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].Component {\n constructor(props) {\n super(props);\n this.state = {\n checked: this.props.enabled,\n //ThemeManager.isEnabled(this.props.content.id),\n reloads: 0\n };\n this.onChange = this.onChange.bind(this);\n this.reload = this.reload.bind(this);\n }\n\n reload() {\n if (!this.props.reload) return;\n this.props.content = this.props.reload(this.props.content.id);\n this.forceUpdate();\n }\n\n buildTitle(name, version, author) {\n const title = modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons.title.split(/({{[A-Za-z]+}})/);\n const nameIndex = title.findIndex(s => s == \"{{name}}\");\n if (nameIndex) title[nameIndex] = modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"span\", {\n className: \"bda-name\"\n }, name);\n const versionIndex = title.findIndex(s => s == \"{{version}}\");\n if (nameIndex) title[versionIndex] = modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"span\", {\n className: \"bda-version\"\n }, version);\n const authorIndex = title.findIndex(s => s == \"{{author}}\");\n if (nameIndex) title[authorIndex] = modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"span\", {\n className: \"bda-author\"\n }, author);\n return title.flat();\n }\n\n render() {\n const {\n content\n } = this.props;\n const name = content.name;\n const description = content.description;\n const version = content.version;\n const author = content.author;\n const website = content.website;\n const source = content.source;\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"li\", {\n \"data-name\": name,\n \"data-version\": version,\n \"className\": \"settings-closed ui-switch-item\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bda-header\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"span\", {\n className: \"bda-header-title\"\n }, this.buildTitle(name, version, author)), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bda-controls\"\n }, !modules__WEBPACK_IMPORTED_MODULE_0__[\"Settings\"].get(\"settings\", \"addons\", \"autoReload\") && modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_icons_reload__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n className: \"bd-reload bd-reload-card\",\n onClick: this.reload\n }), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"label\", {\n className: \"ui-switch-wrapper ui-flex-child\",\n style: {\n flex: \"0 0 auto\"\n }\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"input\", {\n checked: this.state.checked,\n onChange: this.onChange,\n className: \"ui-switch-checkbox\",\n type: \"checkbox\"\n }), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: this.state.checked ? \"ui-switch checked\" : \"ui-switch\"\n })))), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bda-description-wrap scroller-wrap fade\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bda-description scroller\"\n }, description)), (website || source) && modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bda-footer\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"span\", {\n className: \"bda-links\"\n }, website && modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"a\", {\n className: \"bda-link\",\n href: website,\n target: \"_blank\"\n }, \"Website\"), website && source && \" | \", source && modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"a\", {\n className: \"bda-link\",\n href: source,\n target: \"_blank\"\n }, \"Source\"))));\n }\n\n onChange() {\n this.setState({\n checked: !this.state.checked\n });\n this.props.onChange && this.props.onChange(this.props.content.id);\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL3VpL3NldHRpbmdzL3RoZW1lY2FyZC5qcz9jMDVjIl0sIm5hbWVzIjpbIlRoZW1lQ2FyZCIsIlJlYWN0IiwiQ29tcG9uZW50IiwiY29uc3RydWN0b3IiLCJwcm9wcyIsInN0YXRlIiwiY2hlY2tlZCIsImVuYWJsZWQiLCJyZWxvYWRzIiwib25DaGFuZ2UiLCJiaW5kIiwicmVsb2FkIiwiY29udGVudCIsImlkIiwiZm9yY2VVcGRhdGUiLCJidWlsZFRpdGxlIiwibmFtZSIsInZlcnNpb24iLCJhdXRob3IiLCJ0aXRsZSIsIlN0cmluZ3MiLCJBZGRvbnMiLCJzcGxpdCIsIm5hbWVJbmRleCIsImZpbmRJbmRleCIsInMiLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NOYW1lIiwidmVyc2lvbkluZGV4IiwiYXV0aG9ySW5kZXgiLCJmbGF0IiwicmVuZGVyIiwiZGVzY3JpcHRpb24iLCJ3ZWJzaXRlIiwic291cmNlIiwiU2V0dGluZ3MiLCJnZXQiLCJSZWxvYWRJY29uIiwib25DbGljayIsInN0eWxlIiwiZmxleCIsInR5cGUiLCJocmVmIiwidGFyZ2V0Iiwic2V0U3RhdGUiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7Q0FFQTs7QUFFZSxNQUFNQSxTQUFOLFNBQXdCQyw2Q0FBSyxDQUFDQyxTQUE5QixDQUF3QztBQUVuREMsYUFBVyxDQUFDQyxLQUFELEVBQVE7QUFDZixVQUFNQSxLQUFOO0FBQ0EsU0FBS0MsS0FBTCxHQUFhO0FBQ1RDLGFBQU8sRUFBRSxLQUFLRixLQUFMLENBQVdHLE9BRFg7QUFDb0I7QUFDN0JDLGFBQU8sRUFBRTtBQUZBLEtBQWI7QUFJQSxTQUFLQyxRQUFMLEdBQWdCLEtBQUtBLFFBQUwsQ0FBY0MsSUFBZCxDQUFtQixJQUFuQixDQUFoQjtBQUNBLFNBQUtDLE1BQUwsR0FBYyxLQUFLQSxNQUFMLENBQVlELElBQVosQ0FBaUIsSUFBakIsQ0FBZDtBQUNIOztBQUVEQyxRQUFNLEdB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QUFBL0MsS0FBekIsRUFBbUYsU0FBbkYsQ0FEZixFQUVJVixPQUFPLElBQUlDLE1BQVgsSUFBcUIsS0FGekIsRUFHSUEsTUFBTSxJQUFJakMsNkNBQUssQ0FBQ3lCLGFBQU4sQ0FBb0IsR0FBcEIsRUFBeUI7QUFBQ0MsZUFBUyxFQUFFLFVBQVo7QUFBd0JlLFVBQUksRUFBRVIsTUFBOUI7QUFBc0NTLFlBQU0sRUFBRTtBQUE5QyxLQUF6QixFQUFrRixRQUFsRixDQUhkLENBRG1CLENBaEJwQixDQUFQO0FBd0JIOztBQUVEbEMsVUFBUSxHQUFHO0FBQ1AsU0FBS21DLFFBQUwsQ0FBYztBQUFDdEMsYUFBTyxFQUFFLENBQUMsS0FBS0QsS0FBTCxDQUFXQztBQUF0QixLQUFkO0FBQ0EsU0FBS0YsS0FBTCxDQUFXSyxRQUFYLElBQXVCLEtBQUtMLEtBQUwsQ0FBV0ssUUFBWCxDQUFvQixLQUFLTCxLQUFMLENBQVdRLE9BQVgsQ0FBbUJDLEVBQXZDLENBQXZCO0FBQ0g7O0FBbkVrRCIsImZpbGUiOiIuL3NyYy91aS9zZXR0aW5ncy90aGVtZWNhcmQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1JlYWN0LCBTZXR0aW5ncywgU3RyaW5nc30gZnJvbSBcIm1vZHVsZXNcIjtcclxuaW1wb3J0IFJlbG9hZEljb24gZnJvbSBcIi4uL2ljb25zL3JlbG9hZFwiO1xyXG4vLyBpbXBvcnQgVG9hc3RzIGZyb20gXCIuLi90b2FzdHNcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRoZW1lQ2FyZCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgICAgICAgY2hlY2tlZDogdGhpcy5wcm9wcy5lbmFibGVkLCAvL1RoZW1lTWFuYWdlci5pc0VuYWJsZWQodGhpcy5wcm9wcy5jb250ZW50LmlkKSxcclxuICAgICAgICAgICAgcmVsb2FkczogMFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IHRoaXMub25DaGFuZ2UuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLnJlbG9hZCA9IHRoaXMucmVsb2FkLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVsb2FkKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5wcm9wcy5yZWxvYWQpIHJldHVybjtcclxuICAgICAgICB0aGlzLnByb3BzLmNvbnRlbnQgPSB0aGlzLnByb3BzLnJlbG9hZCh0aGlzLnByb3BzLmNvbnRlbnQuaWQpO1xyXG4gICAgICAgIHRoaXMuZm9yY2VVcGRhdGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBidWlsZFRpdGxlKG5hbWUsIHZlcnNpb24sIGF1dGhvcikge1xyXG4gICAgICAgIGNvbnN0IHRpdGxlID0gU3RyaW5ncy5BZGRvbnMudGl0bGUuc3BsaXQoLyh7e1tBLVphLXpdK319KS8pO1xyXG4gICAgICAgIGNvbnN0IG5hbWVJbmRleCA9IHRpdGxlLmZpbmRJbmRleChzID0+IHMgPT0gXCJ7e25hbWV9fVwiKTtcclxuICAgICAgICBpZiAobmFtZUluZGV4KSB0aXRsZVtuYW1lSW5kZXhdID0gUmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge2NsYXNzTmFtZTogXCJiZGEtbmFtZVwifSwgbmFtZSk7XHJcbiAgICAgICAgY29uc3QgdmVyc2lvbkluZGV4ID0gdGl0bGUuZmluZEluZGV4KHMgPT4gcyA9PSBcInt7dmVyc2lvbn19XCIpO1xyXG4gICAgICAgIGlmIChuYW1lSW5kZXgpIHRpdGxlW3ZlcnNpb25JbmRleF0gPSBSZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7Y2xhc3NOYW1lOiBcImJkYS12ZXJzaW9uXCJ9LCB2ZXJzaW9uKTtcclxuICAgICAgICBjb25zdCBhdXRob3JJbmRleCA9IHRpdGxlLmZpbmRJbmRleChzID0+IHMgPT0gXCJ7e2F1dGhvcn19XCIpO1xyXG4gICAgICAgIGlmIChuYW1lSW5kZXgpIHRpdGxlW2F1dGhvckluZGV4XSA9IFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtjbGFzc05hbWU6IFwiYmRhLWF1dGhvclwifSwgYXV0aG9yKTtcclxuICAgICAgICByZXR1cm4gdGl0bGUuZmxhdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBjb25zdCB7Y29udGVudH0gPSB0aGlzLnByb3BzO1xyXG4gICAgICAgIGNvbnN0IG5hbWUgPSBjb250ZW50Lm5hbWU7XHJcbiAgICAgICAgY29uc3QgZGVzY3JpcHRpb24gPSBjb250ZW50LmRlc2NyaXB0aW9uO1xyXG4gICAgICAgIGNvbnN0IHZlcnNpb24gPSBjb250ZW50LnZlcnNpb247XHJcbiAgICAgICAgY29uc3QgYXV0aG9yID0gY29udGVudC5hdXRob3I7XHJcbiAgICAgICAgY29uc3Qgd2Vic2l0ZSA9IGNvbnRlbnQud2Vic2l0ZTtcclxuICAgICAgICBjb25zdCBzb3VyY2UgPSBjb250ZW50LnNvdXJjZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaVwiLCB7XCJkYXRhLW5hbWVcIjogbmFtZSwgXCJkYXRhLXZlcnNpb25cIjogdmVyc2lvbiwgXCJjbGFzc05hbWVcIjogXCJzZXR0aW5ncy1jbG9zZWQgdWktc3dpdGNoLWl0ZW1cIn0sXHJcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJiZGEtaGVhZGVyXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtjbGFzc05hbWU6IFwiYmRhLWhlYWRlci10aXRsZVwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idWlsZFRpdGxlKG5hbWUsIHZlcnNpb24sIGF1dGhvcilcclxuICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJiZGEtY29udHJvbHNcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICFTZXR0aW5ncy5nZXQoXCJzZXR0aW5nc1wiLCBcImFkZG9uc1wiLCBcImF1dG9SZWxvYWRcIikgJiYgUmVhY3QuY3JlYXRlRWxlbWVudChSZWxvYWRJY29uLCB7Y2xhc3NOYW1lOiBcImJkLXJlbG9hZCBiZC1yZWxvYWQtY2FyZFwiLCBvbkNsaWNrOiB0aGlzLnJlbG9hZH0pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwibGFiZWxcIiwge2NsYXNzTmFtZTogXCJ1aS1zd2l0Y2gtd3JhcHBlciB1aS1mbGV4LWNoaWxkXCIsIHN0eWxlOiB7ZmxleDogXCIwIDAgYXV0b1wifX0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIiwge2NoZWNrZWQ6IHRoaXMuc3RhdGUuY2hlY2tlZCwgb25DaGFuZ2U6IHRoaXMub25DaGFuZ2UsIGNsYXNzTmFtZTogXCJ1aS1zd2l0Y2gtY2hlY2tib3hcIiwgdHlwZTogXCJjaGVja2JveFwifSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IHRoaXMuc3RhdGUuY2hlY2tlZCA/IFwidWktc3dpdGNoIGNoZWNrZWRcIiA6IFwidWktc3dpdGNoXCJ9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwiYmRhLWRlc2NyaXB0aW9uLXdyYXAgc2Nyb2xsZXItd3JhcCBmYWRlXCJ9LFxyXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImJkYS1kZXNjcmlwdGlvbiBzY3JvbGxlclwifSwgZGVzY3JpcHRpb24pXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICh3ZWJzaXRlIHx8IHNvdXJjZSkgJiYgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImJkYS1mb290ZXJcIn0sXHJcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7Y2xhc3NOYW1lOiBcImJkYS1saW5rc1wifSxcclxuICAgICAgICAgICAgICAgICAgICB3ZWJzaXRlICYmIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJhXCIsIHtjbGFzc05hbWU6IFwiYmRhLWxpbmtcIiwgaHJlZjogd2Vic2l0ZSwgdGFyZ2V0OiBcIl9ibGFua1wifSwgXCJXZWJzaXRlXCIpLFxyXG4gICAgICAgICAgICAgICAgICAgIHdlYnNpdGUgJiYgc291cmNlICYmIFwiIHwgXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgc291cmNlICYmIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJhXCIsIHtjbGFzc05hbWU6IFwiYmRhLWxpbmtcIiwgaHJlZjogc291cmNlLCB0YXJnZXQ6IFwiX2JsYW5rXCJ9LCBcIlNvdXJjZVwiKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkNoYW5nZSgpIHtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtjaGVja2VkOiAhdGhpcy5zdGF0ZS5jaGVja2VkfSk7XHJcbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZSAmJiB0aGlzLnByb3BzLm9uQ2hhbmdlKHRoaXMucHJvcHMuY29udGVudC5pZCk7XHJcbiAgICB9XHJcbn0iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/ui/settings/themecard.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return ThemeCard; });\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n/* harmony import */ var _icons_reload__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../icons/reload */ \"./src/ui/icons/reload.jsx\");\n\n // import Toasts from \"../toasts\";\n\nclass ThemeCard extends modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].Component {\n constructor(props) {\n super(props);\n this.state = {\n checked: this.props.enabled,\n //ThemeManager.isEnabled(this.props.content.id),\n reloads: 0\n };\n this.onChange = this.onChange.bind(this);\n this.reload = this.reload.bind(this);\n }\n\n reload() {\n if (!this.props.reload) return;\n this.props.content = this.props.reload(this.props.content.id);\n this.forceUpdate();\n }\n\n buildTitle(name, version, author) {\n const title = modules__WEBPACK_IMPORTED_MODULE_0__[\"Strings\"].Addons.title.split(/({{[A-Za-z]+}})/);\n const nameIndex = title.findIndex(s => s == \"{{name}}\");\n if (nameIndex) title[nameIndex] = modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"span\", {\n className: \"bda-name\"\n }, name);\n const versionIndex = title.findIndex(s => s == \"{{version}}\");\n if (nameIndex) title[versionIndex] = modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"span\", {\n className: \"bda-version\"\n }, version);\n const authorIndex = title.findIndex(s => s == \"{{author}}\");\n if (nameIndex) title[authorIndex] = modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"span\", {\n className: \"bda-author\"\n }, author);\n return title.flat();\n }\n\n render() {\n const {\n content\n } = this.props;\n const name = content.name;\n const description = content.description;\n const version = content.version;\n const author = content.author;\n const website = content.website;\n const source = content.source;\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"li\", {\n \"data-name\": name,\n \"data-version\": version,\n \"className\": \"settings-closed ui-switch-item\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bda-header\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"span\", {\n className: \"bda-header-title\"\n }, this.buildTitle(name, version, author)), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bda-controls\"\n }, this.props.showReloadIcon && modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_icons_reload__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n className: \"bd-reload bd-reload-card\",\n onClick: this.reload\n }), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"label\", {\n className: \"ui-switch-wrapper ui-flex-child\",\n style: {\n flex: \"0 0 auto\"\n }\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"input\", {\n checked: this.state.checked,\n onChange: this.onChange,\n className: \"ui-switch-checkbox\",\n type: \"checkbox\"\n }), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: this.state.checked ? \"ui-switch checked\" : \"ui-switch\"\n })))), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bda-description-wrap scroller-wrap fade\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bda-description scroller\"\n }, description)), (website || source) && modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bda-footer\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"span\", {\n className: \"bda-links\"\n }, website && modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"a\", {\n className: \"bda-link\",\n href: website,\n target: \"_blank\"\n }, \"Website\"), website && source && \" | \", source && modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"a\", {\n className: \"bda-link\",\n href: source,\n target: \"_blank\"\n }, \"Source\"))));\n }\n\n onChange() {\n this.setState({\n checked: !this.state.checked\n });\n this.props.onChange && this.props.onChange(this.props.content.id);\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL3VpL3NldHRpbmdzL3RoZW1lY2FyZC5qcz9jMDVjIl0sIm5hbWVzIjpbIlRoZW1lQ2FyZCIsIlJlYWN0IiwiQ29tcG9uZW50IiwiY29uc3RydWN0b3IiLCJwcm9wcyIsInN0YXRlIiwiY2hlY2tlZCIsImVuYWJsZWQiLCJyZWxvYWRzIiwib25DaGFuZ2UiLCJiaW5kIiwicmVsb2FkIiwiY29udGVudCIsImlkIiwiZm9yY2VVcGRhdGUiLCJidWlsZFRpdGxlIiwibmFtZSIsInZlcnNpb24iLCJhdXRob3IiLCJ0aXRsZSIsIlN0cmluZ3MiLCJBZGRvbnMiLCJzcGxpdCIsIm5hbWVJbmRleCIsImZpbmRJbmRleCIsInMiLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NOYW1lIiwidmVyc2lvbkluZGV4IiwiYXV0aG9ySW5kZXgiLCJmbGF0IiwicmVuZGVyIiwiZGVzY3JpcHRpb24iLCJ3ZWJzaXRlIiwic291cmNlIiwic2hvd1JlbG9hZEljb24iLCJSZWxvYWRJY29uIiwib25DbGljayIsInN0eWxlIiwiZmxleCIsInR5cGUiLCJocmVmIiwidGFyZ2V0Iiwic2V0U3RhdGUiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7Q0FFQTs7QUFFZSxNQUFNQSxTQUFOLFNBQXdCQyw2Q0FBSyxDQUFDQyxTQUE5QixDQUF3QztBQUVuREMsYUFBVyxDQUFDQyxLQUFELEVBQVE7QUFDZixVQUFNQSxLQUFOO0FBQ0EsU0FBS0MsS0FBTCxHQUFhO0FBQ1RDLGFBQU8sRUFBRSxLQUFLRixLQUFMLENBQVdHLE9BRFg7QUFDb0I7QUFDN0JDLGFBQU8sRUFBRTtBQUZBLEtBQWI7QUFJQSxTQUFLQyxRQUFMLEdBQWdCLEtBQUtBLFFBQUwsQ0FBY0MsSUFBZCxDQUFtQixJQUFuQixDQUFoQjtBQUNBLFNBQUtDLE1BQUwsR0FBYyxLQUFLQSxNQUFMLENBQVlELElBQVosQ0FBaUIsSUFBakIsQ0FBZDtBQUNIOztBQUVEQyxRQUFNLEdBQUc7QUFDTCxRQUFJLENBQUMsS0FBS1AsS0FBTCxDQUFXTyxNQUFoQixFQUF3QjtBQUN4QixTQUFLUCxLQUFMLENBQVdRLE9BQVgsR0FBcUIsS0FBS1IsS0FBTCxDQUFXTyxNQUFYLENBQWtCLEtBQUtQLEtBQUwsQ0FBV1EsT0FBWCxDQUFtQkMsRUFBckMsQ0FBckI7QUFDQSxTQUFLQyxXQUFMO0FBQ0g7O0FBRURDLFlBQVUsQ0FBQ0MsSUFBRCxFQUFPQyxPQUFQLEVBQWdCQyxNQUFoQixFQUF3QjtBQUM5QixVQUFNQyxLQUFLLEdBQUdDLCtDQUFPLENBQUNDLE1BQVIsQ0FBZUYsS0FBZixDQUFxQkcsS0FBckIsQ0FBMkIsaUJBQTNCLENBQWQ7QUFDQSxVQUFNQyxTQUFTLEdBQUdKLEtBQUssQ0FBQ0ssU0FBTixDQUFnQkMsQ0FBQyxJQUFJQSxDQUFDLElBQUksVUFBMUIsQ0FBbEI7QUFDQSxRQUFJRixTQUFKLEVBQWVKLEtBQUssQ0FBQ0ksU0FBRCxDQUFMLEdBQW1CdEIsNkNBQUssQ0FBQ3lCLGFBQU4sQ0FBb0IsTUFBcEIsRUFBNEI7QUFBQ0MsZUFBUyxFQUFFO0FBQVosS0FBNUIsRUFBcURYLElBQXJELENBQW5CO0FBQ2YsVUFBTVksWUFBWSxHQUFHVCxLQUFLLENBQUNLLFNBQU4sQ0FBZ0JDLENBQUMsSUFBSUEsQ0FBQyxJQUFJLGFBQTFCLENBQXJCO0FBQ0EsUUFBSUYsU0FBSixFQUFlSixLQUFLLENBQUNTLFlBQUQsQ0FBTCxHQUFzQjNCLDZDQUFLLENBQUN5QixhQUFOLENBQW9CLE1BQXBCLEVBQTRCO0FBQUNDLGVBQVMsRUFBRTtBQUFaLEtBQTVCLEVBQXdEVixPQUF4RCxDQUF0QjtBQUNmLFVBQU1ZLFdBQVcsR0FBR1YsS0FBSyxDQUFDSyxTQUFOLENBQWdCQyxDQUFDLElBQUlBLENBQUMsSUFBSSxZQUExQixDQUFwQjtBQUNBLFFBQUlGLFNBQUosRUFBZUosS0FBSyxDQUFDVSxXQUFELENBQUwsR0FBcUI1Qiw2Q0FBSyxDQUFDeUIsYUFBTixDQUFvQixNQUFwQixFQUE0QjtBQUFDQyxlQUFTLEVBQUU7QUFBWixLQUE1QixFQUF1RFQsTUFBdkQsQ0FBckI7QUFDZixXQUFPQyxLQUFLLENBQUNXLElBQU4sRUFBUDtBQUNIOztBQUVEQyxRQUFNLEdBQUc7QUFDTCxVQUFNO0FBQUNuQjtBQUFELFFBQVksS0FBS1IsS0FBdkI7QUFDQSxVQUFNWSxJQUFJLEdBQUdKLE9BQU8sQ0FBQ0ksSUFBckI7QUFDQSxVQUFNZ0IsV0FBVyxHQUFHcEIsT0FBTyxDQUFDb0IsV0FBNUI7QUFDQSxVQUFNZixPQUFPLEdBQUdMLE9BQU8sQ0FBQ0ssT0FBeEI7QUFDQSxVQUFNQyxNQUFNLEdBQUdOLE9BQU8sQ0FBQ00sTUFBdkI7QUFDQSxVQUFNZSxPQUFPLEdBQUdyQixPQUFPLENBQUNxQixPQUF4QjtBQUNBLFVBQU1DLE1BQU0sR0FBR3RCLE9BQU8sQ0FBQ3NCLE1BQXZCO0FBRUEsV0FBT2pDLDZDQUFLLENBQUN5QixhQUFOLENBQW9CLElBQXBCLEVBQTBCO0FBQUMsbUJBQWFWLElBQWQ7QUFBb0Isc0JBQWdCQyxPQUFwQztBQUE2QyxtQkFBYTtBQUExRCxLQUExQixFQUNIaEIsNkNBQUssQ0FBQ3lCLGFBQU4sQ0FBb0IsS0FBcEIsRUFBMkI7QUFBQ0MsZUFBUyxFQUFFO0FBQVosS0FBM0IsRUFDUTFCLDZDQUFLLENBQUN5QixhQUFOLENBQW9CLE1BQXBCLEVBQTRCO0FBQUNDLGVBQVMsRUFBRTtBQUFaLEtBQTVCLEVBQ0ksS0FBS1osVUFBTCxDQUFnQkMsSUFBaEIsRUFBc0JDLE9BQXRCLEVBQStCQyxNQUEvQixDQURKLENBRFIsRUFJUWpCLDZDQUFLLENBQUN5QixhQUFOLENBQW9CLEtBQXBCLEVBQTJCO0FBQUNDLGVBQVMsRUFBRTtBQUFaLEtBQTNCLEVBQ0EsS0FBS3ZCLEtBQUwsQ0FBVytCLGNBQVgsSUFBNkJsQyw2Q0FBSyxDQUFDeUIsYUFBTixDQUFvQlUscURBQXBCLEVBQWdDO0FBQUNULGVBQVMsRUFBRSwwQkFBWjtBQUF3Q1UsYUFBTyxFQUFFLEtBQUsxQjtBQUF0RCxLQUFoQyxDQUQ3QixFQUVJViw2Q0FBSyxDQUFDeUIsYUFBTixDQUFvQixPQUFwQixFQUE2QjtBQUFDQyxlQUFTLEVBQUUsaUNBQVo7QUFBK0NXLFdBQUssRUFBRTtBQUFDQyxZQUFJLEVBQUU7QUFBUDtBQUF0RCxLQUE3QixFQUNJdEMsNkNBQUssQ0FBQ3lCLGFBQU4sQ0FBb0IsT0FBcEIsRUFBNkI7QUFBQ3BCLGFBQU8sRUFBRSxLQUFLRCxLQUFMLENBQVdDLE9BQXJCO0FBQThCRyxjQUFRLEVBQUUsS0FBS0EsUUFBN0M7QUFBdURrQixlQUFTLEVBQUUsb0JBQWxFO0FBQXdGYSxVQUFJLEVBQUU7QUFBOUYsS0FBN0IsQ0FESixFQUVJdkMsNkNBQUssQ0FBQ3lCLGFBQU4sQ0FBb0IsS0FBcEIsRUFBMkI7QUFBQ0MsZUFBUyxFQUFFLEtBQUt0QixLQUFMLENBQVdDLE9BQVgsR0FBcUIsbUJBQXJCLEdBQTJDO0FBQXZELEtBQTNCLENBRkosQ0FGSixDQUpSLENBREcsRUFhSEwsNkNBQUssQ0FBQ3lCLGFBQU4sQ0FBb0IsS0FBcEIsRUFBMkI7QUFBQ0MsZUFBUyxFQUFFO0FBQVosS0FBM0IsRUFDSTFCLDZDQUFLLENBQUN5QixhQUFOLENBQW9CLEtBQXBCLEVBQTJCO0FBQUNDLGVBQVMsRUFBRTtBQUFaLEtBQTNCLEVBQW9FSyxXQUFwRSxDQURKLENBYkcsRUFnQkgsQ0FBQ0MsT0FBTyxJQUFJQyxNQUFaLEtBQXVCakMsNkNBQUssQ0FBQ3lCLGFBQU4sQ0FBb0IsS0FBcEIsRUFBMkI7QUFBQ0MsZUFBUyxFQUFFO0FBQVosS0FBM0IsRUFDbkIxQiw2Q0FBSyxDQUFDeUIsYUFBTixDQUFvQixNQUFwQixFQUE0QjtBQUFDQyxlQUFTLEVBQUU7QUFBWixLQUE1QixFQUNJTSxPQUFPLElBQUloQyw2Q0FBSyxDQUFDeUIsYUFBTixDQUFvQixHQUFwQixFQUF5QjtBQUFDQyxlQUFTLEVBQUUsVUFBWjtBQUF3QmMsVUFBSSxFQUFFUixPQUE5QjtBQUF1Q1MsWUFBTSxFQUFFO0FBQS9DLEtBQXpCLEVBQW1GLFNBQW5GLENBRGYsRUFFSVQsT0FBTyxJQUFJQyxNQUFYLElBQXFCLEtBRnpCLEVBR0lBLE1BQU0sSUFBSWpDLDZDQUFLLENBQUN5QixhQUFOLENBQW9CLEdBQXBCLEVBQXlCO0FBQUNDLGVBQVMsRUFBRSxVQUFaO0FBQXdCYyxVQUFJLEVBQUVQLE1BQTlCO0FBQXNDUSxZQUFNLEVBQUU7QUFBOUMsS0FBekIsRUFBa0YsUUFBbEYsQ0FIZCxDQURtQixDQWhCcEIsQ0FBUDtBQXdCSDs7QUFFRGpDLFVBQVEsR0FBRztBQUNQLFNBQUtrQyxRQUFMLENBQWM7QUFBQ3JDLGFBQU8sRUFBRSxDQUFDLEtBQUtELEtBQUwsQ0FBV0M7QUFBdEIsS0FBZDtBQUNBLFNBQUtGLEtBQUwsQ0FBV0ssUUFBWCxJQUF1QixLQUFLTCxLQUFMLENBQVdLLFFBQVgsQ0FBb0IsS0FBS0wsS0FBTCxDQUFXUSxPQUFYLENBQW1CQyxFQUF2QyxDQUF2QjtBQUNIOztBQW5Fa0QiLCJmaWxlIjoiLi9zcmMvdWkvc2V0dGluZ3MvdGhlbWVjYXJkLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtSZWFjdCwgU3RyaW5nc30gZnJvbSBcIm1vZHVsZXNcIjtcclxuaW1wb3J0IFJlbG9hZEljb24gZnJvbSBcIi4uL2ljb25zL3JlbG9hZFwiO1xyXG4vLyBpbXBvcnQgVG9hc3RzIGZyb20gXCIuLi90b2FzdHNcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRoZW1lQ2FyZCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgICAgICAgY2hlY2tlZDogdGhpcy5wcm9wcy5lbmFibGVkLCAvL1RoZW1lTWFuYWdlci5pc0VuYWJsZWQodGhpcy5wcm9wcy5jb250ZW50LmlkKSxcclxuICAgICAgICAgICAgcmVsb2FkczogMFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IHRoaXMub25DaGFuZ2UuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLnJlbG9hZCA9IHRoaXMucmVsb2FkLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVsb2FkKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5wcm9wcy5yZWxvYWQpIHJldHVybjtcclxuICAgICAgICB0aGlzLnByb3BzLmNvbnRlbnQgPSB0aGlzLnByb3BzLnJlbG9hZCh0aGlzLnByb3BzLmNvbnRlbnQuaWQpO1xyXG4gICAgICAgIHRoaXMuZm9yY2VVcGRhdGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBidWlsZFRpdGxlKG5hbWUsIHZlcnNpb24sIGF1dGhvcikge1xyXG4gICAgICAgIGNvbnN0IHRpdGxlID0gU3RyaW5ncy5BZGRvbnMudGl0bGUuc3BsaXQoLyh7e1tBLVphLXpdK319KS8pO1xyXG4gICAgICAgIGNvbnN0IG5hbWVJbmRleCA9IHRpdGxlLmZpbmRJbmRleChzID0+IHMgPT0gXCJ7e25hbWV9fVwiKTtcclxuICAgICAgICBpZiAobmFtZUluZGV4KSB0aXRsZVtuYW1lSW5kZXhdID0gUmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge2NsYXNzTmFtZTogXCJiZGEtbmFtZVwifSwgbmFtZSk7XHJcbiAgICAgICAgY29uc3QgdmVyc2lvbkluZGV4ID0gdGl0bGUuZmluZEluZGV4KHMgPT4gcyA9PSBcInt7dmVyc2lvbn19XCIpO1xyXG4gICAgICAgIGlmIChuYW1lSW5kZXgpIHRpdGxlW3ZlcnNpb25JbmRleF0gPSBSZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7Y2xhc3NOYW1lOiBcImJkYS12ZXJzaW9uXCJ9LCB2ZXJzaW9uKTtcclxuICAgICAgICBjb25zdCBhdXRob3JJbmRleCA9IHRpdGxlLmZpbmRJbmRleChzID0+IHMgPT0gXCJ7e2F1dGhvcn19XCIpO1xyXG4gICAgICAgIGlmIChuYW1lSW5kZXgpIHRpdGxlW2F1dGhvckluZGV4XSA9IFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtjbGFzc05hbWU6IFwiYmRhLWF1dGhvclwifSwgYXV0aG9yKTtcclxuICAgICAgICByZXR1cm4gdGl0bGUuZmxhdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBjb25zdCB7Y29udGVudH0gPSB0aGlzLnByb3BzO1xyXG4gICAgICAgIGNvbnN0IG5hbWUgPSBjb250ZW50Lm5hbWU7XHJcbiAgICAgICAgY29uc3QgZGVzY3JpcHRpb24gPSBjb250ZW50LmRlc2NyaXB0aW9uO1xyXG4gICAgICAgIGNvbnN0IHZlcnNpb24gPSBjb250ZW50LnZlcnNpb247XHJcbiAgICAgICAgY29uc3QgYXV0aG9yID0gY29udGVudC5hdXRob3I7XHJcbiAgICAgICAgY29uc3Qgd2Vic2l0ZSA9IGNvbnRlbnQud2Vic2l0ZTtcclxuICAgICAgICBjb25zdCBzb3VyY2UgPSBjb250ZW50LnNvdXJjZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaVwiLCB7XCJkYXRhLW5hbWVcIjogbmFtZSwgXCJkYXRhLXZlcnNpb25cIjogdmVyc2lvbiwgXCJjbGFzc05hbWVcIjogXCJzZXR0aW5ncy1jbG9zZWQgdWktc3dpdGNoLWl0ZW1cIn0sXHJcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJiZGEtaGVhZGVyXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtjbGFzc05hbWU6IFwiYmRhLWhlYWRlci10aXRsZVwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idWlsZFRpdGxlKG5hbWUsIHZlcnNpb24sIGF1dGhvcilcclxuICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJiZGEtY29udHJvbHNcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5zaG93UmVsb2FkSWNvbiAmJiBSZWFjdC5jcmVhdGVFbGVtZW50KFJlbG9hZEljb24sIHtjbGFzc05hbWU6IFwiYmQtcmVsb2FkIGJkLXJlbG9hZC1jYXJkXCIsIG9uQ2xpY2s6IHRoaXMucmVsb2FkfSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsYWJlbFwiLCB7Y2xhc3NOYW1lOiBcInVpLXN3aXRjaC13cmFwcGVyIHVpLWZsZXgtY2hpbGRcIiwgc3R5bGU6IHtmbGV4OiBcIjAgMCBhdXRvXCJ9fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiLCB7Y2hlY2tlZDogdGhpcy5zdGF0ZS5jaGVja2VkLCBvbkNoYW5nZTogdGhpcy5vbkNoYW5nZSwgY2xhc3NOYW1lOiBcInVpLXN3aXRjaC1jaGVja2JveFwiLCB0eXBlOiBcImNoZWNrYm94XCJ9KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogdGhpcy5zdGF0ZS5jaGVja2VkID8gXCJ1aS1zd2l0Y2ggY2hlY2tlZFwiIDogXCJ1aS1zd2l0Y2hcIn0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJiZGEtZGVzY3JpcHRpb24td3JhcCBzY3JvbGxlci13cmFwIGZhZGVcIn0sXHJcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwiYmRhLWRlc2NyaXB0aW9uIHNjcm9sbGVyXCJ9LCBkZXNjcmlwdGlvbilcclxuICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgKHdlYnNpdGUgfHwgc291cmNlKSAmJiBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwiYmRhLWZvb3RlclwifSxcclxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtjbGFzc05hbWU6IFwiYmRhLWxpbmtzXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgIHdlYnNpdGUgJiYgUmVhY3QuY3JlYXRlRWxlbWVudChcImFcIiwge2NsYXNzTmFtZTogXCJiZGEtbGlua1wiLCBocmVmOiB3ZWJzaXRlLCB0YXJnZXQ6IFwiX2JsYW5rXCJ9LCBcIldlYnNpdGVcIiksXHJcbiAgICAgICAgICAgICAgICAgICAgd2Vic2l0ZSAmJiBzb3VyY2UgJiYgXCIgfCBcIixcclxuICAgICAgICAgICAgICAgICAgICBzb3VyY2UgJiYgUmVhY3QuY3JlYXRlRWxlbWVudChcImFcIiwge2NsYXNzTmFtZTogXCJiZGEtbGlua1wiLCBocmVmOiBzb3VyY2UsIHRhcmdldDogXCJfYmxhbmtcIn0sIFwiU291cmNlXCIpXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2hhbmdlKCkge1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe2NoZWNrZWQ6ICF0aGlzLnN0YXRlLmNoZWNrZWR9KTtcclxuICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlICYmIHRoaXMucHJvcHMub25DaGFuZ2UodGhpcy5wcm9wcy5jb250ZW50LmlkKTtcclxuICAgIH1cclxufSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/ui/settings/themecard.js\n"); /***/ }), diff --git a/src/ui/settings/plugincard.js b/src/ui/settings/plugincard.js index 98081b61..2175c8bf 100644 --- a/src/ui/settings/plugincard.js +++ b/src/ui/settings/plugincard.js @@ -1,5 +1,4 @@ -// import {SettingsCookie, PluginCookie, Plugins} from "data"; -import {React, Logger, Settings, Strings} from "modules"; +import {React, Logger, Strings} from "modules"; import CloseButton from "../icons/close"; import ReloadIcon from "../icons/reload"; @@ -10,7 +9,7 @@ export default class PluginCard extends React.Component { this.onChange = this.onChange.bind(this); this.showSettings = this.showSettings.bind(this); this.state = { - checked: this.props.enabled,//PluginManager.isEnabled(this.props.content.id), + checked: this.props.enabled, settingsOpen: false }; this.hasSettings = typeof this.props.content.plugin.getSettingsPanel === "function"; @@ -19,6 +18,7 @@ export default class PluginCard extends React.Component { this.reload = this.reload.bind(this); // this.onReload = this.onReload.bind(this); + this.closeSettings = this.closeSettings.bind(this); } reload() { @@ -28,34 +28,31 @@ export default class PluginCard extends React.Component { } componentDidUpdate() { - if (this.state.settingsOpen) { - if (this.settingsPanel instanceof Node) { - this.panelRef.current.appendChild(this.settingsPanel); - } + if (!this.state.settingsOpen) return; + if (this.settingsPanel instanceof Node) this.panelRef.current.appendChild(this.settingsPanel); - // if (!SettingsCookie["fork-ps-3"]) return; - const isHidden = (container, element) => { + // if (!SettingsCookie["fork-ps-3"]) return; + const isHidden = (container, element) => { + const cTop = container.scrollTop; + const cBottom = cTop + container.clientHeight; + const eTop = element.offsetTop; + const eBottom = eTop + element.clientHeight; + return (eTop < cTop || eBottom > cBottom); + }; - const cTop = container.scrollTop; - const cBottom = cTop + container.clientHeight; - - const eTop = element.offsetTop; - const eBottom = eTop + element.clientHeight; - - return (eTop < cTop || eBottom > cBottom); - }; - - const panel = $(this.panelRef.current); - const container = panel.parents(".scroller-2FKFPG"); - if (!isHidden(container[0], panel[0])) return; - container.animate({ - scrollTop: panel.offset().top - container.offset().top + container.scrollTop() - 30 - }, 300); - } + const panel = $(this.panelRef.current); + const container = panel.parents(".scroller-2FKFPG"); + if (!isHidden(container[0], panel[0])) return; + container.animate({ + scrollTop: panel.offset().top - container.offset().top + container.scrollTop() - 30 + }, 300); } - getString(value) { - return typeof value == "string" ? value : value.toString(); + getString(value) {return typeof value == "string" ? value : value.toString();} + + closeSettings() { + this.panelRef.current.innerHTML = ""; + this.setState({settingsOpen: false}); } buildTitle(name, version, author) { @@ -69,58 +66,60 @@ export default class PluginCard extends React.Component { return title.flat(); } + get settingsComponent() { + const content = this.props.content; + const name = this.getString(content.name); + try { this.settingsPanel = content.plugin.getSettingsPanel(); } + catch (err) { Logger.stacktrace("Plugin Settings", "Unable to get settings panel for " + name + ".", err); } + + const props = {id: `plugin-settings-${name}`, className: "plugin-settings", ref: this.panelRef}; + if (typeof(settingsPanel) == "string") props.dangerouslySetInnerHTML = this.settingsPanel; + + return
  • +
    +
    {this.settingsPanel instanceof React.Component ? this.settingsPanel : null}
    +
  • ; + } + + buildLink(which) { + const url = this.props.content[which]; + if (!url) return null; + return {Strings.Addons[which]}; + } + + get footer() { + const links = ["website", "source"]; + if (!links.some(l => this.props.content[l]) && !this.hasSettings) return null; + const linkComponents = links.map(this.buildLink.bind(this)).filter(c => c); + return
    + {linkComponents.map((comp, i) => i < linkComponents.length - 1 ? [comp, " | "] : [comp]).flat()} + {this.hasSettings && } +
    ; + } + render() { + if (this.state.settingsOpen) return this.settingsComponent; + const {content} = this.props; const name = this.getString(content.name); const author = this.getString(content.author); const description = this.getString(content.description); const version = this.getString(content.version); - const website = content.website; - const source = content.source; - if (this.state.settingsOpen) { - try { this.settingsPanel = content.plugin.getSettingsPanel(); } - catch (err) { Logger.stacktrace("Plugin Settings", "Unable to get settings panel for " + content.name + ".", err); } - - const props = {id: `plugin-settings-${name}`, className: "plugin-settings", ref: this.panelRef}; - if (typeof(this.settingsPanel) == "string") props.dangerouslySetInnerHTML = this.settingsPanel; - - return React.createElement("li", {className: "settings-open ui-switch-item"}, - React.createElement("div", {style: {"float": "right", "cursor": "pointer"}, onClick: () => { - this.panelRef.current.innerHTML = ""; - this.setState({settingsOpen: false}); - }}, - React.createElement(CloseButton, null) - ), - React.createElement("div", props, this.settingsPanel instanceof React.Component ? this.settingsPanel : null), - ); - } - - return React.createElement("li", {"data-name": name, "data-version": version, "className": "settings-closed ui-switch-item"}, - React.createElement("div", {className: "bda-header"}, - React.createElement("span", {className: "bda-header-title"}, - this.buildTitle(name, version, author) - ), - React.createElement("div", {className: "bda-controls"}, - !Settings.get("settings", "addons", "autoReload") && React.createElement(ReloadIcon, {className: "bd-reload bd-reload-card", onClick: this.reload}), - React.createElement("label", {className: "ui-switch-wrapper ui-flex-child", style: {flex: "0 0 auto"}}, - React.createElement("input", {checked: this.state.checked, onChange: this.onChange, className: "ui-switch-checkbox", type: "checkbox"}), - React.createElement("div", {className: this.state.checked ? "ui-switch checked" : "ui-switch"}) - ) - ) - ), - React.createElement("div", {className: "bda-description-wrap scroller-wrap fade"}, - React.createElement("div", {className: "bda-description scroller"}, description) - ), - (website || source || this.hasSettings) && React.createElement("div", {className: "bda-footer"}, - React.createElement("span", {className: "bda-links"}, - website && React.createElement("a", {className: "bda-link bda-link-website", href: website, target: "_blank"}, Strings.Addons.website), - website && source && " | ", - source && React.createElement("a", {className: "bda-link bda-link-source", href: source, target: "_blank"}, Strings.Addons.source) - ), - this.hasSettings && React.createElement("button", {onClick: this.showSettings, className: "bd-button bd-button-plugin-settings", disabled: !this.state.checked}, Strings.Addons.pluginSettings) - ) - ); + return
  • +
    + {this.buildTitle(name, version, author)} +
    + {this.props.showReloadIcon && } +
    +
    {description}
    + {this.footer} +
  • ; } onChange() { diff --git a/src/ui/settings/themecard.js b/src/ui/settings/themecard.js index 743d30e7..43b4a020 100644 --- a/src/ui/settings/themecard.js +++ b/src/ui/settings/themecard.js @@ -1,4 +1,4 @@ -import {React, Settings, Strings} from "modules"; +import {React, Strings} from "modules"; import ReloadIcon from "../icons/reload"; // import Toasts from "../toasts"; @@ -46,7 +46,7 @@ export default class ThemeCard extends React.Component { this.buildTitle(name, version, author) ), React.createElement("div", {className: "bda-controls"}, - !Settings.get("settings", "addons", "autoReload") && React.createElement(ReloadIcon, {className: "bd-reload bd-reload-card", onClick: this.reload}), + this.props.showReloadIcon && React.createElement(ReloadIcon, {className: "bd-reload bd-reload-card", onClick: this.reload}), React.createElement("label", {className: "ui-switch-wrapper ui-flex-child", style: {flex: "0 0 auto"}}, React.createElement("input", {checked: this.state.checked, onChange: this.onChange, className: "ui-switch-checkbox", type: "checkbox"}), React.createElement("div", {className: this.state.checked ? "ui-switch checked" : "ui-switch"})