diff --git a/css/main.css b/css/main.css index 111e9e53..7902795c 100644 --- a/css/main.css +++ b/css/main.css @@ -156,6 +156,12 @@ +.floating-window-content #bd-editor-panel { + display: flex; + flex-direction: column; + flex: 1; +} + .floating-window-content { display: flex; flex-direction: column; diff --git a/js/main.js b/js/main.js index 60fd0e03..de26d96e 100644 --- a/js/main.js +++ b/js/main.js @@ -143,7 +143,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _str /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _structs_builtin__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../structs/builtin */ \"./src/structs/builtin.js\");\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n/* harmony import */ var _ui_customcss_editor__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../ui/customcss/editor */ \"./src/ui/customcss/editor.jsx\");\n/* harmony import */ var _ui_customcss_detached__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../ui/customcss/detached */ \"./src/ui/customcss/detached.jsx\");\n/* harmony import */ var _ui_settings_title__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../ui/settings/title */ \"./src/ui/settings/title.jsx\");\n\n\n\n\n\n\nconst electron = __webpack_require__(/*! electron */ \"electron\");\n\nconst PopoutStack = modules__WEBPACK_IMPORTED_MODULE_1__[\"WebpackModules\"].getByProps(\"open\", \"closeAll\");\nconst PopoutOpener = modules__WEBPACK_IMPORTED_MODULE_1__[\"WebpackModules\"].getByProps(\"openPopout\");\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class CustomCSS extends _structs_builtin__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n get name() {\n return \"Custom CSS\";\n }\n\n get category() {\n return \"customcss\";\n }\n\n get id() {\n return \"customcss\";\n }\n\n get startDetached() {\n return modules__WEBPACK_IMPORTED_MODULE_1__[\"Settings\"].get(this.collection, this.category, \"startDetached\");\n }\n\n get nativeOpen() {\n return modules__WEBPACK_IMPORTED_MODULE_1__[\"Settings\"].get(this.collection, this.category, \"nativeOpen\");\n }\n\n constructor() {\n super();\n this.css = \"\";\n }\n\n async enabled() {\n if (!window.ace) {\n modules__WEBPACK_IMPORTED_MODULE_1__[\"Utilities\"].injectJs(\"https://cdnjs.cloudflare.com/ajax/libs/ace/1.2.9/ace.js\").then(() => {\n if (window.require.original) window.require = window.require.original;\n });\n }\n\n modules__WEBPACK_IMPORTED_MODULE_1__[\"Settings\"].registerPanel(this.id, this.name, {\n order: 2,\n element: () => [modules__WEBPACK_IMPORTED_MODULE_1__[\"React\"].createElement(_ui_settings_title__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n text: \"Custom CSS Editor\"\n }), modules__WEBPACK_IMPORTED_MODULE_1__[\"React\"].createElement(_ui_customcss_editor__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n css: this.css,\n save: this.saveCSS.bind(this),\n update: this.insertCSS.bind(this),\n openNative: this.openNative.bind(this),\n openDetached: this.openDetached.bind(this)\n })],\n onClick: thisObject => {\n if (this.nativeOpen) this.openNative();else if (this.startDetached) this.openDetached();else thisObject._reactInternalFiber.child.memoizedProps.children.props.onSetSection(this.name);\n }\n });\n this.loadCSS();\n this.insertCSS();\n }\n\n disabled() {\n modules__WEBPACK_IMPORTED_MODULE_1__[\"Settings\"].removePanel(this.id);\n }\n\n loadCSS() {\n this.css = modules__WEBPACK_IMPORTED_MODULE_1__[\"DataStore\"].loadCustomCSS();\n }\n\n insertCSS(newCss) {\n if (typeof newCss === \"undefined\") newCss = this.css;\n\n if ($(\"#customcss\").length == 0) {\n $(\"head\").append(\"\");\n }\n\n $(\"#customcss\").text(newCss).detach().appendTo(document.head);\n }\n\n saveCSS(newCss) {\n if (typeof newCss !== \"undefined\") this.css = newCss;\n modules__WEBPACK_IMPORTED_MODULE_1__[\"DataStore\"].saveCustomCSS(this.css);\n }\n\n openNative() {\n electron.shell.openExternal(`file://${modules__WEBPACK_IMPORTED_MODULE_1__[\"DataStore\"].customCSS}`);\n }\n\n openDetached() {\n this.log(\"Should open detached\");\n PopoutStack.open({\n animationType: \"none\",\n arrowAlignment: \"top\",\n backdrop: false,\n closeOnScroll: false,\n key: this.id,\n forceTheme: \"no-transform\",\n position: \"top\",\n preventCloseFromModal: true,\n preventClickPropagation: true,\n preventCloseOnUnmount: true,\n preventInvert: false,\n render: props => {\n return modules__WEBPACK_IMPORTED_MODULE_1__[\"React\"].createElement(_ui_customcss_detached__WEBPACK_IMPORTED_MODULE_3__[\"default\"], Object.assign({}, props, {\n close: () => {\n PopoutStack.close(this.id);\n },\n isPopout: true,\n title: \"Custom CSS Editor\",\n className: \"testme\",\n id: \"test\",\n height: 400,\n width: 500,\n center: true\n }), modules__WEBPACK_IMPORTED_MODULE_1__[\"React\"].createElement(_ui_customcss_editor__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n editorId: \"bd-floating-editor\",\n css: this.css,\n save: this.saveCSS.bind(this),\n update: this.insertCSS.bind(this),\n openNative: this.openNative.bind(this)\n }));\n },\n shadow: false,\n showArrow: false,\n zIndexBoost: 0\n });\n }\n\n}()); // const test = {\n// animationType: \"default\",\n// arrowAlignment: \"top\",\n// backdrop: false,\n// clickPos: 74,\n// closeOnScroll: false,\n// containerClass: undefined,\n// dependsOn: undefined,\n// forceTheme: undefined,\n// key: \"floating-window\",\n// offsetX: 15,\n// offsetY: 0,\n// position: \"left\",\n// preventCloseFromModal: false,\n// preventClickPropagation: true,\n// preventInvert: false,\n// render: function() {\n// console.log(arguments);\n// return DiscordModules.React.createElement(\"div\", Object.assign({}, arguments[0], {className: \"testme\", id: \"test\"}));\n// },\n// shadow: false,\n// showArrow: false,\n// target: $(\"div.memberOnline-1CIh-0.member-3W1lQa.da-memberOnline.da-member\")[0],\n// targetHeight: 40,\n// targetWidth: 224,\n// x: 1211,\n// y: 357,\n// zIndexBoost: 0\n// }//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2J1aWx0aW5zL2N1c3RvbWNzcy5qcz9jM2YyIl0sIm5hbWVzIjpbImVsZWN0cm9uIiwicmVxdWlyZSIsIlBvcG91dFN0YWNrIiwiV2VicGFja01vZHVsZXMiLCJnZXRCeVByb3BzIiwiUG9wb3V0T3BlbmVyIiwiQ3VzdG9tQ1NTIiwiQnVpbHRpbiIsIm5hbWUiLCJjYXRlZ29yeSIsImlkIiwic3RhcnREZXRhY2hlZCIsIlNldHRpbmdzIiwiZ2V0IiwiY29sbGVjdGlvbiIsIm5hdGl2ZU9wZW4iLCJjb25zdHJ1Y3RvciIsImNzcyIsImVuYWJsZWQiLCJ3aW5kb3ciLCJhY2UiLCJVdGlsaXRpZXMiLCJpbmplY3RKcyIsInRoZW4iLCJvcmlnaW5hbCIsInJlZ2lzdGVyUGFuZWwiLCJvcmRlciIsImVsZW1lbnQiLCJSZWFjdCIsImNyZWF0ZUVsZW1lbnQiLCJDU1NFZGl0b3IiLCJzYXZlIiwic2F2ZUNTUyIsImJpbmQiLCJ1cGRhdGUiLCJpbnNlcnRDU1MiLCJvcGVuTmF0aXZlIiwib3BlbkRldGFjaGVkIiwib25DbGljayIsInRoaXNPYmplY3QiLCJfcmVhY3RJbnRlcm5hbEZpYmVyIiwiY2hpbGQiLCJtZW1vaXplZFByb3BzIiwiY2hpbGRyZW4iLCJwcm9wcyIsIm9uU2V0U2VjdGlvbiIsImxvYWRDU1MiLCJkaXNhYmxlZCIsInJlbW92ZVBhbmVsIiwiRGF0YVN0b3JlIiwibG9hZEN1c3RvbUNTUyIsIm5ld0NzcyIsIiQiLCJsZW5ndGgiLCJhcHBlbmQiLCJ0ZXh0IiwiZGV0YWNoIiwiYXBwZW5kVG8iLCJkb2N1bWVudCIsImhlYWQiLCJzYXZlQ3VzdG9tQ1NTIiwic2hlbGwiLCJvcGVuRXh0ZXJuYWwiLCJjdXN0b21DU1MiLCJsb2ciLCJvcGVuIiwiYW5pbWF0aW9uVHlwZSIsImFycm93QWxpZ25tZW50IiwiYmFja2Ryb3AiLCJjbG9zZU9uU2Nyb2xsIiwia2V5IiwiZm9yY2VUaGVtZSIsInBvc2l0aW9uIiwicHJldmVudENsb3NlRnJvbU1vZGFsIiwicHJldmVudENsaWNrUHJvcGFnYXRpb24iLCJwcmV2ZW50Q2xvc2VPblVubW91bnQiLCJwcmV2ZW50SW52ZXJ0IiwicmVuZGVyIiwiRmxvYXRpbmdXaW5kb3ciLCJPYmplY3QiLCJhc3NpZ24iLCJjbG9zZSIsImlzUG9wb3V0IiwidGl0bGUiLCJjbGFzc05hbWUiLCJoZWlnaHQiLCJ3aWR0aCIsImNlbnRlciIsImVkaXRvcklkIiwic2hhZG93Iiwic2hvd0Fycm93IiwiekluZGV4Qm9vc3QiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7O0FBRUEsTUFBTUEsUUFBUSxHQUFHQyxtQkFBTyxDQUFDLDBCQUFELENBQXhCOztBQUNBLE1BQU1DLFdBQVcsR0FBR0Msc0RBQWMsQ0FBQ0MsVUFBZixDQUEwQixNQUExQixFQUFrQyxVQUFsQyxDQUFwQjtBQUNBLE1BQU1DLFlBQVksR0FBR0Ysc0RBQWMsQ0FBQ0MsVUFBZixDQUEwQixZQUExQixDQUFyQjtBQUllLG1FQUFJLE1BQU1FLFNBQU4sU0FBd0JDLHdEQUF4QixDQUFnQztBQUMvQyxNQUFJQyxJQUFKLEdBQVc7QUFBQyxXQUFPLFlBQVA7QUFBcUI7O0FBQ2pDLE1BQUlDLFFBQUosR0FBZTtBQUFDLFdBQU8sV0FBUDtBQUFvQjs7QUFDcEMsTUFBSUMsRUFBSixHQUFTO0FBQUMsV0FBTyxXQUFQO0FBQW9COztBQUM5QixNQUFJQyxhQUFKLEdBQW9CO0FBQUMsV0FBT0MsZ0RBQVEsQ0FBQ0MsR0FBVCxDQUFhLEtBQUtDLFVBQWxCLEVBQThCLEtBQUtMLFFBQW5DLEVBQTZDLGVBQTdDLENBQVA7QUFBc0U7O0FBQzNGLE1BQUlNLFVBQUosR0FBaUI7QUFBQyxXQUFPSCxnREFBUSxDQUFDQyxHQUFULENBQWEsS0FBS0MsVUFBbEIsRUFBOEIsS0FBS0wsUUFBbkMsRUFBNkMsWUFBN0MsQ0FBUDtBQUFtRTs7QUFFckZPLGFBQVcsR0FBRztBQUNWO0FBQ0Es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QUFMbUIsU0FBL0IsQ0FURyxDQUFQO0FBZ0JILE9BN0JZO0FBOEJid0QsWUFBTSxFQUFFLEtBOUJLO0FBK0JiQyxlQUFTLEVBQUUsS0EvQkU7QUFnQ2JDLGlCQUFXLEVBQUU7QUFoQ0EsS0FBakI7QUFrQ0g7O0FBbEc4QyxDQUFwQyxFQUFmLEUsQ0FxR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL3NyYy9idWlsdGlucy9jdXN0b21jc3MuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQnVpbHRpbiBmcm9tIFwiLi4vc3RydWN0cy9idWlsdGluXCI7XHJcbmltcG9ydCB7U2V0dGluZ3MsIERhdGFTdG9yZSwgUmVhY3QsIFV0aWxpdGllcywgV2VicGFja01vZHVsZXN9IGZyb20gXCJtb2R1bGVzXCI7XHJcbmltcG9ydCBDU1NFZGl0b3IgZnJvbSBcIi4uL3VpL2N1c3RvbWNzcy9lZGl0b3JcIjtcclxuaW1wb3J0IEZsb2F0aW5nV2luZG93IGZyb20gXCIuLi91aS9jdXN0b21jc3MvZGV0YWNoZWRcIjtcclxuXHJcbmltcG9ydCBTZXR0aW5nc1RpdGxlIGZyb20gXCIuLi91aS9zZXR0aW5ncy90aXRsZVwiO1xyXG5cclxuY29uc3QgZWxlY3Ryb24gPSByZXF1aXJlKFwiZWxlY3Ryb25cIik7XHJcbmNvbnN0IFBvcG91dFN0YWNrID0gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcIm9wZW5cIiwgXCJjbG9zZUFsbFwiKTtcclxuY29uc3QgUG9wb3V0T3BlbmVyID0gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcIm9wZW5Qb3BvdXRcIik7XHJcblxyXG5cclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBDdXN0b21DU1MgZXh0ZW5kcyBCdWlsdGluIHtcclxuICAgIGdldCBuYW1lKCkge3JldHVybiBcIkN1c3RvbSBDU1NcIjt9XHJcbiAgICBnZXQgY2F0ZWdvcnkoKSB7cmV0dXJuIFwiY3VzdG9tY3NzXCI7fVxyXG4gICAgZ2V0IGlkKCkge3JldHVybiBcImN1c3RvbWNzc1wiO31cclxuICAgIGdldCBzdGFydERldGFjaGVkKCkge3JldHVybiBTZXR0aW5ncy5nZXQodGhpcy5jb2xsZWN0aW9uLCB0aGlzLmNhdGVnb3J5LCBcInN0YXJ0RGV0YWNoZWRcIik7fVxyXG4gICAgZ2V0IG5hdGl2ZU9wZW4oKSB7cmV0dXJuIFNldHRpbmdzLmdldCh0aGlzLmNvbGxlY3Rpb24sIHRoaXMuY2F0ZWdvcnksIFwibmF0aXZlT3BlblwiKTt9XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICB0aGlzLmNzcyA9IFwiXCI7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZW5hYmxlZCgpIHtcclxuICAgICAgICBpZiAoIXdpbmRvdy5hY2UpIHtcclxuICAgICAgICAgICAgVXRpbGl0aWVzLmluamVjdEpzKFwiaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvYWNlLzEuMi45L2FjZS5qc1wiKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh3aW5kb3cucmVxdWlyZS5vcmlnaW5hbCkgd2luZG93LnJlcXVpcmUgPSB3aW5kb3cucmVxdWlyZS5vcmlnaW5hbDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFNldHRpbmdzLnJlZ2lzdGVyUGFuZWwodGhpcy5pZCwgdGhpcy5uYW1lLCB7XHJcbiAgICAgICAgICAgIG9yZGVyOiAyLFxyXG4gICAgICAgICAgICBlbGVtZW50OiAoKSA9PiBbPFNldHRpbmdzVGl0bGUgdGV4dD1cIkN1c3RvbSBDU1MgRWRpdG9yXCIgLz4sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ1NTRWRpdG9yLCB7XHJcbiAgICAgICAgICAgICAgICBjc3M6IHRoaXMuY3NzLFxyXG4gICAgICAgICAgICAgICAgc2F2ZTogdGhpcy5zYXZlQ1NTLmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgICAgICB1cGRhdGU6IHRoaXMuaW5zZXJ0Q1NTLmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgICAgICBvcGVuTmF0aXZlOiB0aGlzLm9wZW5OYXRpdmUuYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgICAgIG9wZW5EZXRhY2hlZDogdGhpcy5vcGVuRGV0YWNoZWQuYmluZCh0aGlzKVxyXG4gICAgICAgICAgICB9KV0sXHJcbiAgICAgICAgICAgIG9uQ2xpY2s6ICh0aGlzT2JqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5uYXRpdmVPcGVuKSB0aGlzLm9wZW5OYXRpdmUoKTtcclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuc3RhcnREZXRhY2hlZCkgdGhpcy5vcGVuRGV0YWNoZWQoKTtcclxuICAgICAgICAgICAgICAgIGVsc2UgdGhpc09iamVjdC5fcmVhY3RJbnRlcm5hbEZpYmVyLmNoaWxkLm1lbW9pemVkUHJvcHMuY2hpbGRyZW4ucHJvcHMub25TZXRTZWN0aW9uKHRoaXMubmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmxvYWRDU1MoKTtcclxuICAgICAgICB0aGlzLmluc2VydENTUygpO1xyXG4gICAgfVxyXG5cclxuICAgIGRpc2FibGVkKCkge1xyXG4gICAgICAgIFNldHRpbmdzLnJlbW92ZVBhbmVsKHRoaXMuaWQpO1xyXG4gICAgfVxyXG5cclxuICAgIGxvYWRDU1MoKSB7XHJcbiAgICAgICAgdGhpcy5jc3MgPSBEYXRhU3RvcmUubG9hZEN1c3RvbUNTUygpO1xyXG4gICAgfVxyXG5cclxuICAgIGluc2VydENTUyhuZXdDc3MpIHtcclxuICAgICAgICBpZiAodHlwZW9mKG5ld0NzcykgPT09IFwidW5kZWZpbmVkXCIpIG5ld0NzcyA9IHRoaXMuY3NzO1xyXG4gICAgICAgIGlmICgkKFwiI2N1c3RvbWNzc1wiKS5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICAkKFwiaGVhZFwiKS5hcHBlbmQoXCI8c3R5bGUgaWQ9XFxcImN1c3RvbWNzc1xcXCI+PC9zdHlsZT5cIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICQoXCIjY3VzdG9tY3NzXCIpLnRleHQobmV3Q3NzKS5kZXRhY2goKS5hcHBlbmRUbyhkb2N1bWVudC5oZWFkKTtcclxuICAgIH1cclxuXHJcbiAgICBzYXZlQ1NTKG5ld0Nzcykge1xyXG4gICAgICAgIGlmICh0eXBlb2YobmV3Q3NzKSAhPT0gXCJ1bmRlZmluZWRcIikgdGhpcy5jc3MgPSBuZXdDc3M7XHJcbiAgICAgICAgRGF0YVN0b3JlLnNhdmVDdXN0b21DU1ModGhpcy5jc3MpO1xyXG4gICAgfVxyXG5cclxuICAgIG9wZW5OYXRpdmUoKSB7XHJcbiAgICAgICAgZWxlY3Ryb24uc2hlbGwub3BlbkV4dGVybmFsKGBmaWxlOi8vJHtEYXRhU3RvcmUuY3VzdG9tQ1NTfWApO1xyXG4gICAgfVxyXG5cclxuICAgIG9wZW5EZXRhY2hlZCgpIHtcclxuICAgICAgICB0aGlzLmxvZyhcIlNob3VsZCBvcGVuIGRldGFjaGVkXCIpO1xyXG4gICAgICAgIFBvcG91dFN0YWNrLm9wZW4oe1xyXG4gICAgICAgICAgICBhbmltYXRpb25UeXBlOiBcIm5vbmVcIixcclxuICAgICAgICAgICAgYXJyb3dBbGlnbm1lbnQ6IFwidG9wXCIsXHJcbiAgICAgICAgICAgIGJhY2tkcm9wOiBmYWxzZSxcclxuICAgICAgICAgICAgY2xvc2VPblNjcm9sbDogZmFsc2UsXHJcbiAgICAgICAgICAgIGtleTogdGhpcy5pZCxcclxuICAgICAgICAgICAgZm9yY2VUaGVtZTogXCJuby10cmFuc2Zvcm1cIixcclxuICAgICAgICAgICAgcG9zaXRpb246IFwidG9wXCIsXHJcbiAgICAgICAgICAgIHByZXZlbnRDbG9zZUZyb21Nb2RhbDogdHJ1ZSxcclxuICAgICAgICAgICAgcHJldmVudENsaWNrUHJvcGFnYXRpb246IHRydWUsXHJcbiAgICAgICAgICAgIHByZXZlbnRDbG9zZU9uVW5tb3VudDogdHJ1ZSxcclxuICAgICAgICAgICAgcHJldmVudEludmVydDogZmFsc2UsXHJcbiAgICAgICAgICAgIHJlbmRlcjogKHByb3BzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChGbG9hdGluZ1dpbmRvdywgT2JqZWN0LmFzc2lnbih7fSwgcHJvcHMsIHtcclxuICAgICAgICAgICAgICAgICAgICBjbG9zZTogKCkgPT4ge1BvcG91dFN0YWNrLmNsb3NlKHRoaXMuaWQpO30sXHJcbiAgICAgICAgICAgICAgICAgICAgaXNQb3BvdXQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFwiQ3VzdG9tIENTUyBFZGl0b3JcIixcclxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwidGVzdG1lXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgaWQ6IFwidGVzdFwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogNDAwLFxyXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiA1MDAsXHJcbiAgICAgICAgICAgICAgICAgICAgY2VudGVyOiB0cnVlXHJcbiAgICAgICAgICAgICAgICB9KSwgUmVhY3QuY3JlYXRlRWxlbWVudChDU1NFZGl0b3IsIHtcclxuICAgICAgICAgICAgICAgICAgICBlZGl0b3JJZDogXCJiZC1mbG9hdGluZy1lZGl0b3JcIixcclxuICAgICAgICAgICAgICAgICAgICBjc3M6IHRoaXMuY3NzLFxyXG4gICAgICAgICAgICAgICAgICAgIHNhdmU6IHRoaXMuc2F2ZUNTUy5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZTogdGhpcy5pbnNlcnRDU1MuYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgICAgICAgICBvcGVuTmF0aXZlOiB0aGlzLm9wZW5OYXRpdmUuYmluZCh0aGlzKVxyXG4gICAgICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzaGFkb3c6IGZhbHNlLFxyXG4gICAgICAgICAgICBzaG93QXJyb3c6IGZhbHNlLFxyXG4gICAgICAgICAgICB6SW5kZXhCb29zdDogMFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59O1xyXG5cclxuLy8gY29uc3QgdGVzdCA9IHtcclxuLy8gYW5pbWF0aW9uVHlwZTogXCJkZWZhdWx0XCIsXHJcbi8vIGFycm93QWxpZ25tZW50OiBcInRvcFwiLFxyXG4vLyBiYWNrZHJvcDogZmFsc2UsXHJcbi8vIGNsaWNrUG9zOiA3NCxcclxuLy8gY2xvc2VPblNjcm9sbDogZmFsc2UsXHJcbi8vIGNvbnRhaW5lckNsYXNzOiB1bmRlZmluZWQsXHJcbi8vIGRlcGVuZHNPbjogdW5kZWZpbmVkLFxyXG4vLyBmb3JjZVRoZW1lOiB1bmRlZmluZWQsXHJcbi8vIGtleTogXCJmbG9hdGluZy13aW5kb3dcIixcclxuLy8gb2Zmc2V0WDogMTUsXHJcbi8vIG9mZnNldFk6IDAsXHJcbi8vIHBvc2l0aW9uOiBcImxlZnRcIixcclxuLy8gcHJldmVudENsb3NlRnJvbU1vZGFsOiBmYWxzZSxcclxuLy8gcHJldmVudENsaWNrUHJvcGFnYXRpb246IHRydWUsXHJcbi8vIHByZXZlbnRJbnZlcnQ6IGZhbHNlLFxyXG4vLyByZW5kZXI6IGZ1bmN0aW9uKCkge1xyXG4vLyAgICAgY29uc29sZS5sb2coYXJndW1lbnRzKTtcclxuLy8gICAgIHJldHVybiBEaXNjb3JkTW9kdWxlcy5SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIE9iamVjdC5hc3NpZ24oe30sIGFyZ3VtZW50c1swXSwge2NsYXNzTmFtZTogXCJ0ZXN0bWVcIiwgaWQ6IFwidGVzdFwifSkpO1xyXG4vLyB9LFxyXG4vLyBzaGFkb3c6IGZhbHNlLFxyXG4vLyBzaG93QXJyb3c6IGZhbHNlLFxyXG4vLyB0YXJnZXQ6ICQoXCJkaXYubWVtYmVyT25saW5lLTFDSWgtMC5tZW1iZXItM1cxbFFhLmRhLW1lbWJlck9ubGluZS5kYS1tZW1iZXJcIilbMF0sXHJcbi8vIHRhcmdldEhlaWdodDogNDAsXHJcbi8vIHRhcmdldFdpZHRoOiAyMjQsXHJcbi8vIHg6IDEyMTEsXHJcbi8vIHk6IDM1NyxcclxuLy8gekluZGV4Qm9vc3Q6IDBcclxuLy8gfSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/builtins/customcss.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _structs_builtin__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../structs/builtin */ \"./src/structs/builtin.js\");\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n/* harmony import */ var _ui_customcss_csseditor__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../ui/customcss/csseditor */ \"./src/ui/customcss/csseditor.jsx\");\n/* harmony import */ var _ui_customcss_detached__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../ui/customcss/detached */ \"./src/ui/customcss/detached.jsx\");\n/* harmony import */ var _ui_settings_title__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../ui/settings/title */ \"./src/ui/settings/title.jsx\");\n\n\n\n\n\n\nconst electron = __webpack_require__(/*! electron */ \"electron\");\n\nconst PopoutStack = modules__WEBPACK_IMPORTED_MODULE_1__[\"WebpackModules\"].getByProps(\"open\", \"closeAll\");\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class CustomCSS extends _structs_builtin__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n get name() {\n return \"Custom CSS\";\n }\n\n get category() {\n return \"customcss\";\n }\n\n get id() {\n return \"customcss\";\n }\n\n get startDetached() {\n return modules__WEBPACK_IMPORTED_MODULE_1__[\"Settings\"].get(this.collection, this.category, \"startDetached\");\n }\n\n get nativeOpen() {\n return modules__WEBPACK_IMPORTED_MODULE_1__[\"Settings\"].get(this.collection, this.category, \"nativeOpen\");\n }\n\n constructor() {\n super();\n this.savedCss = \"\";\n this.insertedCss = \"\";\n }\n\n async enabled() {\n if (!window.ace) {\n modules__WEBPACK_IMPORTED_MODULE_1__[\"Utilities\"].injectJs(\"https://cdnjs.cloudflare.com/ajax/libs/ace/1.2.9/ace.js\").then(() => {\n if (window.require.original) window.require = window.require.original;\n });\n }\n\n modules__WEBPACK_IMPORTED_MODULE_1__[\"Settings\"].registerPanel(this.id, this.name, {\n order: 2,\n element: () => [modules__WEBPACK_IMPORTED_MODULE_1__[\"React\"].createElement(_ui_settings_title__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n text: \"Custom CSS Editor\"\n }), modules__WEBPACK_IMPORTED_MODULE_1__[\"React\"].createElement(_ui_customcss_csseditor__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n css: this.savedCss,\n save: this.saveCSS.bind(this),\n update: this.insertCSS.bind(this),\n openNative: this.openNative.bind(this),\n openDetached: this.openDetached.bind(this)\n })],\n onClick: thisObject => {\n if (this.nativeOpen) this.openNative();else if (this.startDetached) this.openDetached();else thisObject._reactInternalFiber.child.memoizedProps.children.props.onSetSection(this.name);\n }\n });\n this.loadCSS();\n this.insertCSS(this.savedCss);\n }\n\n disabled() {\n modules__WEBPACK_IMPORTED_MODULE_1__[\"Settings\"].removePanel(this.id);\n }\n\n loadCSS() {\n this.savedCss = modules__WEBPACK_IMPORTED_MODULE_1__[\"DataStore\"].loadCustomCSS();\n }\n\n insertCSS(newCss) {\n if (typeof newCss === \"undefined\") newCss = this.insertedCss;else this.insertedCss = newCss;\n\n if ($(\"#customcss\").length == 0) {\n $(\"head\").append(\"\");\n }\n\n $(\"#customcss\").text(newCss).detach().appendTo(document.head);\n }\n\n saveCSS(newCss) {\n if (typeof newCss !== \"undefined\") this.savedCss = newCss;\n modules__WEBPACK_IMPORTED_MODULE_1__[\"DataStore\"].saveCustomCSS(this.savedCss);\n }\n\n openNative() {\n electron.shell.openExternal(`file://${modules__WEBPACK_IMPORTED_MODULE_1__[\"DataStore\"].customCSS}`);\n }\n\n openDetached() {\n this.log(\"Should open detached\");\n PopoutStack.open({\n animationType: \"none\",\n arrowAlignment: \"top\",\n backdrop: false,\n closeOnScroll: false,\n key: this.id,\n forceTheme: \"no-transform\",\n position: \"top\",\n preventCloseFromModal: true,\n preventClickPropagation: true,\n preventCloseOnUnmount: true,\n preventInvert: false,\n render: props => {\n return modules__WEBPACK_IMPORTED_MODULE_1__[\"React\"].createElement(_ui_customcss_detached__WEBPACK_IMPORTED_MODULE_3__[\"default\"], Object.assign({}, props, {\n close: () => {\n PopoutStack.close(this.id);\n },\n isPopout: true,\n title: \"Custom CSS Editor\",\n className: \"testme\",\n id: \"test\",\n height: 400,\n width: 500,\n center: true\n }), modules__WEBPACK_IMPORTED_MODULE_1__[\"React\"].createElement(_ui_customcss_csseditor__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n id: \"bd-floating-editor\",\n css: this.savedCss,\n save: this.saveCSS.bind(this),\n update: this.insertCSS.bind(this),\n openNative: this.openNative.bind(this)\n }));\n },\n shadow: false,\n showArrow: false,\n zIndexBoost: 0\n });\n }\n\n}()); // const test = {\n// animationType: \"default\",\n// arrowAlignment: \"top\",\n// backdrop: false,\n// clickPos: 74,\n// closeOnScroll: false,\n// containerClass: undefined,\n// dependsOn: undefined,\n// forceTheme: undefined,\n// key: \"floating-window\",\n// offsetX: 15,\n// offsetY: 0,\n// position: \"left\",\n// preventCloseFromModal: false,\n// preventClickPropagation: true,\n// preventInvert: false,\n// render: function() {\n// console.log(arguments);\n// return DiscordModules.React.createElement(\"div\", Object.assign({}, arguments[0], {className: \"testme\", id: \"test\"}));\n// },\n// shadow: false,\n// showArrow: false,\n// target: $(\"div.memberOnline-1CIh-0.member-3W1lQa.da-memberOnline.da-member\")[0],\n// targetHeight: 40,\n// targetWidth: 224,\n// x: 1211,\n// y: 357,\n// zIndexBoost: 0\n// }//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2J1aWx0aW5zL2N1c3RvbWNzcy5qcz9jM2YyIl0sIm5hbWVzIjpbImVsZWN0cm9uIiwicmVxdWlyZSIsIlBvcG91dFN0YWNrIiwiV2VicGFja01vZHVsZXMiLCJnZXRCeVByb3BzIiwiQ3VzdG9tQ1NTIiwiQnVpbHRpbiIsIm5hbWUiLCJjYXRlZ29yeSIsImlkIiwic3RhcnREZXRhY2hlZCIsIlNldHRpbmdzIiwiZ2V0IiwiY29sbGVjdGlvbiIsIm5hdGl2ZU9wZW4iLCJjb25zdHJ1Y3RvciIsInNhdmVkQ3NzIiwiaW5zZXJ0ZWRDc3MiLCJlbmFibGVkIiwid2luZG93IiwiYWNlIiwiVXRpbGl0aWVzIiwiaW5qZWN0SnMiLCJ0aGVuIiwib3JpZ2luYWwiLCJyZWdpc3RlclBhbmVsIiwib3JkZXIiLCJlbGVtZW50IiwiUmVhY3QiLCJjcmVhdGVFbGVtZW50IiwiQ1NTRWRpdG9yIiwiY3NzIiwic2F2ZSIsInNhdmVDU1MiLCJiaW5kIiwidXBkYXRlIiwiaW5zZXJ0Q1NTIiwib3Blbk5hdGl2ZSIsIm9wZW5EZXRhY2hlZCIsIm9uQ2xpY2siLCJ0aGlzT2JqZWN0IiwiX3JlYWN0SW50ZXJuYWxGaWJlciIsImNoaWxkIiwibWVtb2l6ZWRQcm9wcyIsImNoaWxkcmVuIiwicHJvcHMiLCJvblNldFNlY3Rpb24iLCJsb2FkQ1NTIiwiZGlzYWJsZWQiLCJyZW1vdmVQYW5lbCIsIkRhdGFTdG9yZSIsImxvYWRDdXN0b21DU1MiLCJuZXdDc3MiLCIkIiwibGVuZ3RoIiwiYXBwZW5kIiwidGV4dCIsImRldGFjaCIsImFwcGVuZFRvIiwiZG9jdW1lbnQiLCJoZWFkIiwic2F2ZUN1c3RvbUNTUyIsInNoZWxsIiwib3BlbkV4dGVybmFsIiwiY3VzdG9tQ1NTIiwibG9nIiwib3BlbiIsImFuaW1hdGlvblR5cGUiLCJhcnJvd0FsaWdubWVudCIsImJhY2tkcm9wIiwiY2xvc2VPblNjcm9sbCIsImtleSIsImZvcmNlVGhlbWUiLCJwb3NpdGlvbiIsInByZXZlbnRDbG9zZUZyb21Nb2RhbCIsInByZXZlbnRDbGlja1Byb3BhZ2F0aW9uIiwicHJldmVudENsb3NlT25Vbm1vdW50IiwicHJldmVudEludmVydCIsInJlbmRlciIsIkZsb2F0aW5nV2luZG93IiwiT2JqZWN0IiwiYXNzaWduIiwiY2xvc2UiLCJpc1BvcG91dCIsInRpdGxlIiwiY2xhc3NOYW1lIiwiaGVpZ2h0Iiwid2lkdGgiLCJjZW50ZXIiLCJzaGFkb3ciLCJzaG93QXJyb3ciLCJ6SW5kZXhCb29zdCJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7QUFFQSxNQUFNQSxRQUFRLEdBQUdDLG1CQUFPLENBQUMsMEJBQUQsQ0FBeEI7O0FBQ0EsTUFBTUMsV0FBVyxHQUFHQyxzREFBYyxDQUFDQyxVQUFmLENBQTBCLE1BQTFCLEVBQWtDLFVBQWxDLENBQXBCO0FBRWUsbUVBQUksTUFBTUMsU0FBTixTQUF3QkMsd0RBQXhCLENBQWdDO0FBQy9DLE1BQUlDLElBQUosR0FBVztBQUFDLFdBQU8sWUFBUDtBQUFxQjs7QUFDakMsTUFBSUMsUUFBSixHQUFlO0FBQUMsV0FBTyxXQUFQO0FBQW9COztBQUNwQyxNQUFJQyxFQUFKLEdBQVM7QUFBQyxXQUFPLFdBQVA7QUFBb0I7O0FBQzlCLE1BQUlDLGFBQUosR0FBb0I7QUFBQyxXQUFPQyxnREFBUSxDQUFDQyxHQUFULENBQWEsS0FBS0MsVUFBbEIsRUFBOEIsS0FBS0wsUUFBbkMsRUFBNkMsZUFBN0MsQ0FBUDtBQUFzRTs7QUFDM0YsTUFBSU0sVUFBSixHQUFpQjtBQUFDLFdBQU9ILGdEQUFRLENBQUNDLEdBQVQsQ0FBYSxLQUFLQyxVQUFsQixFQUE4QixLQUFLTCxRQUFuQyxFQUE2QyxZQUE3QyxDQUFQO0FBQW1FOztBQUVyRk8sYUFBVyxHQUFHO0FBQ1Y7QUFDQSxTQUFLQyxRQUFMLEdBQWdCLEVBQWhCO0FBQ0EsU0FBS0MsV0FBTCxHQUFtQixFQUFuQjtBQUNIOztB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LFVBQUwsQ0FBZ0JILElBQWhCLENBQXFCLElBQXJCO0FBTG1CLFNBQS9CLENBVEcsQ0FBUDtBQWdCSCxPQTdCWTtBQThCYnVELFlBQU0sRUFBRSxLQTlCSztBQStCYkMsZUFBUyxFQUFFLEtBL0JFO0FBZ0NiQyxpQkFBVyxFQUFFO0FBaENBLEtBQWpCO0FBa0NIOztBQXBHOEMsQ0FBcEMsRUFBZixFLENBdUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9zcmMvYnVpbHRpbnMvY3VzdG9tY3NzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJ1aWx0aW4gZnJvbSBcIi4uL3N0cnVjdHMvYnVpbHRpblwiO1xyXG5pbXBvcnQge1NldHRpbmdzLCBEYXRhU3RvcmUsIFJlYWN0LCBVdGlsaXRpZXMsIFdlYnBhY2tNb2R1bGVzfSBmcm9tIFwibW9kdWxlc1wiO1xyXG5pbXBvcnQgQ1NTRWRpdG9yIGZyb20gXCIuLi91aS9jdXN0b21jc3MvY3NzZWRpdG9yXCI7XHJcbmltcG9ydCBGbG9hdGluZ1dpbmRvdyBmcm9tIFwiLi4vdWkvY3VzdG9tY3NzL2RldGFjaGVkXCI7XHJcblxyXG5pbXBvcnQgU2V0dGluZ3NUaXRsZSBmcm9tIFwiLi4vdWkvc2V0dGluZ3MvdGl0bGVcIjtcclxuXHJcbmNvbnN0IGVsZWN0cm9uID0gcmVxdWlyZShcImVsZWN0cm9uXCIpO1xyXG5jb25zdCBQb3BvdXRTdGFjayA9IFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJvcGVuXCIsIFwiY2xvc2VBbGxcIik7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgQ3VzdG9tQ1NTIGV4dGVuZHMgQnVpbHRpbiB7XHJcbiAgICBnZXQgbmFtZSgpIHtyZXR1cm4gXCJDdXN0b20gQ1NTXCI7fVxyXG4gICAgZ2V0IGNhdGVnb3J5KCkge3JldHVybiBcImN1c3RvbWNzc1wiO31cclxuICAgIGdldCBpZCgpIHtyZXR1cm4gXCJjdXN0b21jc3NcIjt9XHJcbiAgICBnZXQgc3RhcnREZXRhY2hlZCgpIHtyZXR1cm4gU2V0dGluZ3MuZ2V0KHRoaXMuY29sbGVjdGlvbiwgdGhpcy5jYXRlZ29yeSwgXCJzdGFydERldGFjaGVkXCIpO31cclxuICAgIGdldCBuYXRpdmVPcGVuKCkge3JldHVybiBTZXR0aW5ncy5nZXQodGhpcy5jb2xsZWN0aW9uLCB0aGlzLmNhdGVnb3J5LCBcIm5hdGl2ZU9wZW5cIik7fVxyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgdGhpcy5zYXZlZENzcyA9IFwiXCI7XHJcbiAgICAgICAgdGhpcy5pbnNlcnRlZENzcyA9IFwiXCI7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZW5hYmxlZCgpIHtcclxuICAgICAgICBpZiAoIXdpbmRvdy5hY2UpIHtcclxuICAgICAgICAgICAgVXRpbGl0aWVzLmluamVjdEpzKFwiaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvYWNlLzEuMi45L2FjZS5qc1wiKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh3aW5kb3cucmVxdWlyZS5vcmlnaW5hbCkgd2luZG93LnJlcXVpcmUgPSB3aW5kb3cucmVxdWlyZS5vcmlnaW5hbDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFNldHRpbmdzLnJlZ2lzdGVyUGFuZWwodGhpcy5pZCwgdGhpcy5uYW1lLCB7XHJcbiAgICAgICAgICAgIG9yZGVyOiAyLFxyXG4gICAgICAgICAgICBlbGVtZW50OiAoKSA9PiBbPFNldHRpbmdzVGl0bGUgdGV4dD1cIkN1c3RvbSBDU1MgRWRpdG9yXCIgLz4sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ1NTRWRpdG9yLCB7XHJcbiAgICAgICAgICAgICAgICBjc3M6IHRoaXMuc2F2ZWRDc3MsXHJcbiAgICAgICAgICAgICAgICBzYXZlOiB0aGlzLnNhdmVDU1MuYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgICAgIHVwZGF0ZTogdGhpcy5pbnNlcnRDU1MuYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgICAgIG9wZW5OYXRpdmU6IHRoaXMub3Blbk5hdGl2ZS5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICAgICAgb3BlbkRldGFjaGVkOiB0aGlzLm9wZW5EZXRhY2hlZC5iaW5kKHRoaXMpXHJcbiAgICAgICAgICAgIH0pXSxcclxuICAgICAgICAgICAgb25DbGljazogKHRoaXNPYmplY3QpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLm5hdGl2ZU9wZW4pIHRoaXMub3Blbk5hdGl2ZSgpO1xyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5zdGFydERldGFjaGVkKSB0aGlzLm9wZW5EZXRhY2hlZCgpO1xyXG4gICAgICAgICAgICAgICAgZWxzZSB0aGlzT2JqZWN0Ll9yZWFjdEludGVybmFsRmliZXIuY2hpbGQubWVtb2l6ZWRQcm9wcy5jaGlsZHJlbi5wcm9wcy5vblNldFNlY3Rpb24odGhpcy5uYW1lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMubG9hZENTUygpO1xyXG4gICAgICAgIHRoaXMuaW5zZXJ0Q1NTKHRoaXMuc2F2ZWRDc3MpO1xyXG4gICAgfVxyXG5cclxuICAgIGRpc2FibGVkKCkge1xyXG4gICAgICAgIFNldHRpbmdzLnJlbW92ZVBhbmVsKHRoaXMuaWQpO1xyXG4gICAgfVxyXG5cclxuICAgIGxvYWRDU1MoKSB7XHJcbiAgICAgICAgdGhpcy5zYXZlZENzcyA9IERhdGFTdG9yZS5sb2FkQ3VzdG9tQ1NTKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaW5zZXJ0Q1NTKG5ld0Nzcykge1xyXG4gICAgICAgIGlmICh0eXBlb2YobmV3Q3NzKSA9PT0gXCJ1bmRlZmluZWRcIikgbmV3Q3NzID0gdGhpcy5pbnNlcnRlZENzcztcclxuICAgICAgICBlbHNlIHRoaXMuaW5zZXJ0ZWRDc3MgPSBuZXdDc3M7XHJcbiAgICAgICAgaWYgKCQoXCIjY3VzdG9tY3NzXCIpLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgICQoXCJoZWFkXCIpLmFwcGVuZChcIjxzdHlsZSBpZD1cXFwiY3VzdG9tY3NzXFxcIj48L3N0eWxlPlwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgJChcIiNjdXN0b21jc3NcIikudGV4dChuZXdDc3MpLmRldGFjaCgpLmFwcGVuZFRvKGRvY3VtZW50LmhlYWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHNhdmVDU1MobmV3Q3NzKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZihuZXdDc3MpICE9PSBcInVuZGVmaW5lZFwiKSB0aGlzLnNhdmVkQ3NzID0gbmV3Q3NzO1xyXG4gICAgICAgIERhdGFTdG9yZS5zYXZlQ3VzdG9tQ1NTKHRoaXMuc2F2ZWRDc3MpO1xyXG4gICAgfVxyXG5cclxuICAgIG9wZW5OYXRpdmUoKSB7XHJcbiAgICAgICAgZWxlY3Ryb24uc2hlbGwub3BlbkV4dGVybmFsKGBmaWxlOi8vJHtEYXRhU3RvcmUuY3VzdG9tQ1NTfWApO1xyXG4gICAgfVxyXG5cclxuICAgIG9wZW5EZXRhY2hlZCgpIHtcclxuICAgICAgICB0aGlzLmxvZyhcIlNob3VsZCBvcGVuIGRldGFjaGVkXCIpO1xyXG4gICAgICAgIFBvcG91dFN0YWNrLm9wZW4oe1xyXG4gICAgICAgICAgICBhbmltYXRpb25UeXBlOiBcIm5vbmVcIixcclxuICAgICAgICAgICAgYXJyb3dBbGlnbm1lbnQ6IFwidG9wXCIsXHJcbiAgICAgICAgICAgIGJhY2tkcm9wOiBmYWxzZSxcclxuICAgICAgICAgICAgY2xvc2VPblNjcm9sbDogZmFsc2UsXHJcbiAgICAgICAgICAgIGtleTogdGhpcy5pZCxcclxuICAgICAgICAgICAgZm9yY2VUaGVtZTogXCJuby10cmFuc2Zvcm1cIixcclxuICAgICAgICAgICAgcG9zaXRpb246IFwidG9wXCIsXHJcbiAgICAgICAgICAgIHByZXZlbnRDbG9zZUZyb21Nb2RhbDogdHJ1ZSxcclxuICAgICAgICAgICAgcHJldmVudENsaWNrUHJvcGFnYXRpb246IHRydWUsXHJcbiAgICAgICAgICAgIHByZXZlbnRDbG9zZU9uVW5tb3VudDogdHJ1ZSxcclxuICAgICAgICAgICAgcHJldmVudEludmVydDogZmFsc2UsXHJcbiAgICAgICAgICAgIHJlbmRlcjogKHByb3BzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChGbG9hdGluZ1dpbmRvdywgT2JqZWN0LmFzc2lnbih7fSwgcHJvcHMsIHtcclxuICAgICAgICAgICAgICAgICAgICBjbG9zZTogKCkgPT4ge1BvcG91dFN0YWNrLmNsb3NlKHRoaXMuaWQpO30sXHJcbiAgICAgICAgICAgICAgICAgICAgaXNQb3BvdXQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFwiQ3VzdG9tIENTUyBFZGl0b3JcIixcclxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwidGVzdG1lXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgaWQ6IFwidGVzdFwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogNDAwLFxyXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiA1MDAsXHJcbiAgICAgICAgICAgICAgICAgICAgY2VudGVyOiB0cnVlXHJcbiAgICAgICAgICAgICAgICB9KSwgUmVhY3QuY3JlYXRlRWxlbWVudChDU1NFZGl0b3IsIHtcclxuICAgICAgICAgICAgICAgICAgICBpZDogXCJiZC1mbG9hdGluZy1lZGl0b3JcIixcclxuICAgICAgICAgICAgICAgICAgICBjc3M6IHRoaXMuc2F2ZWRDc3MsXHJcbiAgICAgICAgICAgICAgICAgICAgc2F2ZTogdGhpcy5zYXZlQ1NTLmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlOiB0aGlzLmluc2VydENTUy5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICAgICAgICAgIG9wZW5OYXRpdmU6IHRoaXMub3Blbk5hdGl2ZS5iaW5kKHRoaXMpXHJcbiAgICAgICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNoYWRvdzogZmFsc2UsXHJcbiAgICAgICAgICAgIHNob3dBcnJvdzogZmFsc2UsXHJcbiAgICAgICAgICAgIHpJbmRleEJvb3N0OiAwXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG4vLyBjb25zdCB0ZXN0ID0ge1xyXG4vLyBhbmltYXRpb25UeXBlOiBcImRlZmF1bHRcIixcclxuLy8gYXJyb3dBbGlnbm1lbnQ6IFwidG9wXCIsXHJcbi8vIGJhY2tkcm9wOiBmYWxzZSxcclxuLy8gY2xpY2tQb3M6IDc0LFxyXG4vLyBjbG9zZU9uU2Nyb2xsOiBmYWxzZSxcclxuLy8gY29udGFpbmVyQ2xhc3M6IHVuZGVmaW5lZCxcclxuLy8gZGVwZW5kc09uOiB1bmRlZmluZWQsXHJcbi8vIGZvcmNlVGhlbWU6IHVuZGVmaW5lZCxcclxuLy8ga2V5OiBcImZsb2F0aW5nLXdpbmRvd1wiLFxyXG4vLyBvZmZzZXRYOiAxNSxcclxuLy8gb2Zmc2V0WTogMCxcclxuLy8gcG9zaXRpb246IFwibGVmdFwiLFxyXG4vLyBwcmV2ZW50Q2xvc2VGcm9tTW9kYWw6IGZhbHNlLFxyXG4vLyBwcmV2ZW50Q2xpY2tQcm9wYWdhdGlvbjogdHJ1ZSxcclxuLy8gcHJldmVudEludmVydDogZmFsc2UsXHJcbi8vIHJlbmRlcjogZnVuY3Rpb24oKSB7XHJcbi8vICAgICBjb25zb2xlLmxvZyhhcmd1bWVudHMpO1xyXG4vLyAgICAgcmV0dXJuIERpc2NvcmRNb2R1bGVzLlJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgT2JqZWN0LmFzc2lnbih7fSwgYXJndW1lbnRzWzBdLCB7Y2xhc3NOYW1lOiBcInRlc3RtZVwiLCBpZDogXCJ0ZXN0XCJ9KSk7XHJcbi8vIH0sXHJcbi8vIHNoYWRvdzogZmFsc2UsXHJcbi8vIHNob3dBcnJvdzogZmFsc2UsXHJcbi8vIHRhcmdldDogJChcImRpdi5tZW1iZXJPbmxpbmUtMUNJaC0wLm1lbWJlci0zVzFsUWEuZGEtbWVtYmVyT25saW5lLmRhLW1lbWJlclwiKVswXSxcclxuLy8gdGFyZ2V0SGVpZ2h0OiA0MCxcclxuLy8gdGFyZ2V0V2lkdGg6IDIyNCxcclxuLy8geDogMTIxMSxcclxuLy8geTogMzU3LFxyXG4vLyB6SW5kZXhCb29zdDogMFxyXG4vLyB9Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/builtins/customcss.js\n"); /***/ }), @@ -543,6 +543,18 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) * /***/ }), +/***/ "./src/ui/customcss/csseditor.jsx": +/*!****************************************!*\ + !*** ./src/ui/customcss/csseditor.jsx ***! + \****************************************/ +/*! 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 CssEditor; });\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n/* harmony import */ var _editor__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./editor */ \"./src/ui/customcss/editor.jsx\");\n\n // import Checkbox from \"./checkbox\";\n\nclass CssEditor extends modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].Component {\n constructor(props) {\n super(props);\n this.toggleLiveUpdate = this.toggleLiveUpdate.bind(this);\n this.updateCss = this.updateCss.bind(this);\n this.saveCss = this.saveCss.bind(this);\n this.openDetached = this.props.openDetached ? this.openDetached.bind(this) : null;\n this.openNative = this.openNative.bind(this);\n this.checkboxes = [{\n label: \"Live Update\",\n onChange: this.toggleLiveUpdate,\n checked: modules__WEBPACK_IMPORTED_MODULE_0__[\"Settings\"].get(\"settings\", \"customcss\", \"liveUpdate\")\n }];\n this.buttons = [{\n label: \"Update\",\n onClick: this.updateCss\n }, {\n label: \"Save\",\n onClick: this.saveCss\n }, {\n label: \"Open Natively\",\n onClick: this.openNative\n }, {\n label: \"Settings\",\n onClick: \"showSettings\"\n }];\n if (this.openDetached) this.buttons.push({\n label: \"Detach\",\n onClick: this.openDetached\n });\n this.notice = this.openDetached ? \"Unsaved changes are lost on detach\" : null;\n }\n\n render() {\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_editor__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n id: this.props.id || \"bd-customcss-editor\",\n notice: this.openDetached ? this.notice : null,\n checkboxes: this.checkboxes,\n buttons: this.buttons,\n showHelp: true,\n value: this.props.css\n });\n }\n\n toggleLiveUpdate(checked) {\n modules__WEBPACK_IMPORTED_MODULE_0__[\"Settings\"].set(\"settings\", \"customcss\", \"liveUpdate\", checked);\n }\n\n updateCss() {\n const newCss = this.editor.session.getValue();\n if (this.props.update) this.props.update(newCss);\n }\n\n saveCss() {\n const newCss = this.editor.session.getValue();\n if (this.props.save) this.props.save(newCss);\n }\n\n openDetached() {\n if (this.props.openDetached) this.props.openDetached();\n }\n\n openNative() {\n if (this.props.openNative) this.props.openNative();\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL3VpL2N1c3RvbWNzcy9jc3NlZGl0b3IuanN4PzQyMzAiXSwibmFtZXMiOlsiQ3NzRWRpdG9yIiwiUmVhY3QiLCJDb21wb25lbnQiLCJjb25zdHJ1Y3RvciIsInByb3BzIiwidG9nZ2xlTGl2ZVVwZGF0ZSIsImJpbmQiLCJ1cGRhdGVDc3MiLCJzYXZlQ3NzIiwib3BlbkRldGFjaGVkIiwib3Blbk5hdGl2ZSIsImNoZWNrYm94ZXMiLCJsYWJlbCIsIm9uQ2hhbmdlIiwiY2hlY2tlZCIsIlNldHRpbmdzIiwiZ2V0IiwiYnV0dG9ucyIsIm9uQ2xpY2siLCJwdXNoIiwibm90aWNlIiwicmVuZGVyIiwiaWQiLCJjc3MiLCJzZXQiLCJuZXdDc3MiLCJlZGl0b3IiLCJzZXNzaW9uIiwiZ2V0VmFsdWUiLCJ1cGRhdGUiLCJzYXZlIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0NBR0E7O0FBRWUsTUFBTUEsU0FBTixTQUF3QkMsNkNBQUssQ0FBQ0MsU0FBOUIsQ0FBd0M7QUFFbkRDLGFBQVcsQ0FBQ0MsS0FBRCxFQUFRO0FBQ2YsVUFBTUEsS0FBTjtBQUVBLFNBQUtDLGdCQUFMLEdBQXdCLEtBQUtBLGdCQUFMLENBQXNCQyxJQUF0QixDQUEyQixJQUEzQixDQUF4QjtBQUNBLFNBQUtDLFNBQUwsR0FBaUIsS0FBS0EsU0FBTCxDQUFlRCxJQUFmLENBQW9CLElBQXBCLENBQWpCO0FBQ0EsU0FBS0UsT0FBTCxHQUFlLEtBQUtBLE9BQUwsQ0FBYUYsSUFBYixDQUFrQixJQUFsQixDQUFmO0FBQ0EsU0FBS0csWUFBTCxHQUFvQixLQUFLTCxLQUFMLENBQVdLLFlBQVgsR0FBMEIsS0FBS0EsWUFBTCxDQUFrQkgsSUFBbEIsQ0FBdUIsSUFBdkIsQ0FBMUIsR0FBeUQsSUFBN0U7QUFDQSxTQUFLSSxVQUFMLEdBQWtCLEtBQUtBLFVBQUwsQ0FBZ0JKLElBQWhCLENBQXFCLElBQXJCLENBQWxCO0FBRUEsU0FBS0ssVUFBTCxHQUFrQixDQUFDO0FBQUNDLFdBQUssRUFBRSxhQUFSO0FBQXVCQyxjQUFRLEVBQUUsS0FBS1IsZ0JBQXRDO0FBQXdEUyxhQUFPLEVBQUVDLGdEQUFRLENBQUNDLEdBQVQsQ0FBYSxVQUFiLEVBQXlCLFdBQXpCLEVBQXNDLFlBQXRDO0FBQWpFLEtBQUQsQ0FBbEI7QUFDQSxTQUFLQyxPQUFMLEdBQWUsQ0FDWDtBQUFDTCxXQUFLLEVBQUUsUUFBUjtBQUFrQk0sYUFBTyxFQUFFLEtBQUtYO0FBQWhDLEtBRFcsRUFFWDtBQUFDSyxXQUFLLEVBQUUsTUFBUjtBQUFnQk0sYUFBTyxFQUFFLEtBQUtWO0FBQTlCLEtBRlcsRUFHWDtBQUFDSSxXQUFLLEVBQUUsZUFBUjtBQUF5Qk0sYUFBTyxFQUFFLEtBQUtSO0FBQXZDLEtBSFcsRUFJWDtBQUFDRSxXQUFLLEVBQUUsVUFBUjtBQUFvQk0sYUFBTyxFQUFFO0FBQTdCLEtBSlcsQ0FBZjtBQU1BLFFBQUksS0FBS1QsWUFBVCxFQUF1QixLQUFLUSxPQUFMLENBQWFFLElBQWIsQ0FBa0I7QUFBQ1AsV0FBSyxFQUFFLFFBQVI7QUFBa0JNLGFBQU8sRUFBRSxLQUFLVDtBQUFoQyxLQUFsQjtBQUN2QixTQUFLVyxNQUFMLEdBQWMsS0FBS1gsWUFBTCxHQUFvQixvQ0FBcEIsR0FBMkQsSUFBekU7QUFDSDs7QUFFRFksUUFBTSxHQUFHO0FBQ0wsV0FBTyw0REFBQywrQ0FBRDtBQUFRLFFBQUUsRUFBRSxLQUFLakIsS0FBTCxDQUFXa0IsRUFBWCxJQUFpQixxQkFBN0I7QUFBb0QsWUFBTSxFQUFFLEtBQUtiLFlBQUwsR0FBb0IsS0FBS1csTUFBekIsR0FBa0MsSUFBOUY7QUFBb0csZ0JBQVUsRUFBRSxLQUFLVCxVQUFySDtBQUFpSSxhQUFPLEVBQUUsS0FBS00sT0FBL0k7QUFBd0osY0FBUSxFQUFFLElBQWxLO0FBQXdLLFdBQUssRUFBRSxLQUFLYixLQUFMLENBQVdtQjtBQUExTCxNQUFQO0FBQ0g7O0FBRURsQixrQkFBZ0IsQ0FBQ1MsT0FBRCxFQUFVO0FBQ3RCQyxvREFBUSxDQUFDUyxHQUFULENBQWEsVUFBYixFQUF5QixXQUF6QixFQUFzQyxZQUF0QyxFQUFvRFYsT0FBcEQ7QUFDSDs7QUFFRFAsV0FBUyxHQUFHO0FBQ1IsVUFBTWtCLE1BQU0sR0FBRyxLQUFLQyxNQUFMLENBQVlDLE9BQVosQ0FBb0JDLFFBQXBCLEVBQWY7QUFDQSxRQUFJLEtBQUt4QixLQUFMLENBQVd5QixNQUFmLEVBQXVCLEtBQUt6QixLQUFMLENBQVd5QixNQUFYLENBQWtCSixNQUFsQjtBQUMxQjs7QUFFRGpCLFNBQU8sR0FBRztBQUNOLFVBQU1pQixNQUFNLEdBQUcsS0FBS0MsTUFBTCxDQUFZQyxPQUFaLENBQW9CQyxRQUFwQixFQUFmO0FBQ0EsUUFBSSxLQUFLeEIsS0FBTCxDQUFXMEIsSUFBZixFQUFxQixLQUFLMUIsS0FBTCxDQUFXMEIsSUFBWCxDQUFnQkwsTUFBaEI7QUFDeEI7O0FBRURoQixjQUFZLEdBQUc7QUFDWCxRQUFJLEtBQUtMLEtBQUwsQ0FBV0ssWUFBZixFQUE2QixLQUFLTCxLQUFMLENBQVdLLFlBQVg7QUFDaEM7O0FBRURDLFlBQVUsR0FBRztBQUNULFFBQUksS0FBS04sS0FBTCxDQUFXTSxVQUFmLEVBQTJCLEtBQUtOLEtBQUwsQ0FBV00sVUFBWDtBQUM5Qjs7QUE5Q2tEIiwiZmlsZSI6Ii4vc3JjL3VpL2N1c3RvbWNzcy9jc3NlZGl0b3IuanN4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtSZWFjdCwgU2V0dGluZ3N9IGZyb20gXCJtb2R1bGVzXCI7XHJcblxyXG5pbXBvcnQgRWRpdG9yIGZyb20gXCIuL2VkaXRvclwiO1xyXG4vLyBpbXBvcnQgQ2hlY2tib3ggZnJvbSBcIi4vY2hlY2tib3hcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENzc0VkaXRvciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcblxyXG4gICAgICAgIHRoaXMudG9nZ2xlTGl2ZVVwZGF0ZSA9IHRoaXMudG9nZ2xlTGl2ZVVwZGF0ZS5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlQ3NzID0gdGhpcy51cGRhdGVDc3MuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLnNhdmVDc3MgPSB0aGlzLnNhdmVDc3MuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLm9wZW5EZXRhY2hlZCA9IHRoaXMucHJvcHMub3BlbkRldGFjaGVkID8gdGhpcy5vcGVuRGV0YWNoZWQuYmluZCh0aGlzKSA6IG51bGw7XHJcbiAgICAgICAgdGhpcy5vcGVuTmF0aXZlID0gdGhpcy5vcGVuTmF0aXZlLmJpbmQodGhpcyk7XHJcblxyXG4gICAgICAgIHRoaXMuY2hlY2tib3hlcyA9IFt7bGFiZWw6IFwiTGl2ZSBVcGRhdGVcIiwgb25DaGFuZ2U6IHRoaXMudG9nZ2xlTGl2ZVVwZGF0ZSwgY2hlY2tlZDogU2V0dGluZ3MuZ2V0KFwic2V0dGluZ3NcIiwgXCJjdXN0b21jc3NcIiwgXCJsaXZlVXBkYXRlXCIpfV07XHJcbiAgICAgICAgdGhpcy5idXR0b25zID0gW1xyXG4gICAgICAgICAgICB7bGFiZWw6IFwiVXBkYXRlXCIsIG9uQ2xpY2s6IHRoaXMudXBkYXRlQ3NzfSxcclxuICAgICAgICAgICAge2xhYmVsOiBcIlNhdmVcIiwgb25DbGljazogdGhpcy5zYXZlQ3NzfSxcclxuICAgICAgICAgICAge2xhYmVsOiBcIk9wZW4gTmF0aXZlbHlcIiwgb25DbGljazogdGhpcy5vcGVuTmF0aXZlfSxcclxuICAgICAgICAgICAge2xhYmVsOiBcIlNldHRpbmdzXCIsIG9uQ2xpY2s6IFwic2hvd1NldHRpbmdzXCJ9XHJcbiAgICAgICAgXTtcclxuICAgICAgICBpZiAodGhpcy5vcGVuRGV0YWNoZWQpIHRoaXMuYnV0dG9ucy5wdXNoKHtsYWJlbDogXCJEZXRhY2hcIiwgb25DbGljazogdGhpcy5vcGVuRGV0YWNoZWR9KTtcclxuICAgICAgICB0aGlzLm5vdGljZSA9IHRoaXMub3BlbkRldGFjaGVkID8gXCJVbnNhdmVkIGNoYW5nZXMgYXJlIGxvc3Qgb24gZGV0YWNoXCIgOiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICByZXR1cm4gPEVkaXRvciBpZD17dGhpcy5wcm9wcy5pZCB8fCBcImJkLWN1c3RvbWNzcy1lZGl0b3JcIn0gbm90aWNlPXt0aGlzLm9wZW5EZXRhY2hlZCA/IHRoaXMubm90aWNlIDogbnVsbH0gY2hlY2tib3hlcz17dGhpcy5jaGVja2JveGVzfSBidXR0b25zPXt0aGlzLmJ1dHRvbnN9IHNob3dIZWxwPXt0cnVlfSB2YWx1ZT17dGhpcy5wcm9wcy5jc3N9IC8+O1xyXG4gICAgfVxyXG5cclxuICAgIHRvZ2dsZUxpdmVVcGRhdGUoY2hlY2tlZCkge1xyXG4gICAgICAgIFNldHRpbmdzLnNldChcInNldHRpbmdzXCIsIFwiY3VzdG9tY3NzXCIsIFwibGl2ZVVwZGF0ZVwiLCBjaGVja2VkKTtcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVDc3MoKSB7XHJcbiAgICAgICAgY29uc3QgbmV3Q3NzID0gdGhpcy5lZGl0b3Iuc2Vzc2lvbi5nZXRWYWx1ZSgpO1xyXG4gICAgICAgIGlmICh0aGlzLnByb3BzLnVwZGF0ZSkgdGhpcy5wcm9wcy51cGRhdGUobmV3Q3NzKTtcclxuICAgIH1cclxuXHJcbiAgICBzYXZlQ3NzKCkge1xyXG4gICAgICAgIGNvbnN0IG5ld0NzcyA9IHRoaXMuZWRpdG9yLnNlc3Npb24uZ2V0VmFsdWUoKTtcclxuICAgICAgICBpZiAodGhpcy5wcm9wcy5zYXZlKSB0aGlzLnByb3BzLnNhdmUobmV3Q3NzKTtcclxuICAgIH1cclxuXHJcbiAgICBvcGVuRGV0YWNoZWQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMucHJvcHMub3BlbkRldGFjaGVkKSB0aGlzLnByb3BzLm9wZW5EZXRhY2hlZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIG9wZW5OYXRpdmUoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMucHJvcHMub3Blbk5hdGl2ZSkgdGhpcy5wcm9wcy5vcGVuTmF0aXZlKCk7XHJcbiAgICB9XHJcbn0iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/ui/customcss/csseditor.jsx\n"); + +/***/ }), + /***/ "./src/ui/customcss/detached.jsx": /*!***************************************!*\ !*** ./src/ui/customcss/detached.jsx ***! @@ -563,7 +575,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 CssEditor; });\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n/* harmony import */ var _checkbox__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./checkbox */ \"./src/ui/customcss/checkbox.jsx\");\n/* harmony import */ var _settings_title__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../settings/title */ \"./src/ui/settings/title.jsx\");\n\n\n\nclass CssEditor extends modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].Component {\n constructor(props) {\n super(props);\n this.toggleLiveUpdate = this.toggleLiveUpdate.bind(this);\n this.updateCss = this.updateCss.bind(this);\n this.saveCss = this.saveCss.bind(this);\n this.openDetached = this.props.openDetached ? this.openDetached.bind(this) : null;\n this.openNative = this.openNative.bind(this);\n }\n\n componentDidMount() {\n this.editor = ace.edit(this.props.editorId || \"bd-customcss-editor\"); // Add id to the ace menu container\n\n const originalShow = this.editor.keyBinding.$defaultHandler.commands.showSettingsMenu.exec;\n\n this.editor.keyBinding.$defaultHandler.commands.showSettingsMenu.exec = function () {\n originalShow.apply(this, arguments);\n const observer = new MutationObserver(mutations => {\n for (const mutation of mutations) {\n if (!mutation.addedNodes.length || !(mutation.addedNodes[0] instanceof Element)) continue;\n const node = mutation.addedNodes[0];\n if (node.parentElement !== document.body || !node.querySelector(\"#ace_settingsmenu\")) continue;\n node.id = \"ace_settingsmenu_container\";\n observer.disconnect();\n }\n });\n observer.observe(document.body, {\n childList: true\n });\n };\n\n this.editor.setTheme(\"ace/theme/monokai\");\n this.editor.session.setMode(\"ace/mode/css\");\n this.editor.setShowPrintMargin(false);\n this.editor.setFontSize(14);\n this.editor.on(\"change\", () => {\n if (!modules__WEBPACK_IMPORTED_MODULE_0__[\"Settings\"].get(\"settings\", \"customcss\", \"liveUpdate\")) return;\n this.saveCss();\n this.updateCss();\n });\n }\n\n componentWillUnmount() {\n this.editor.destroy();\n }\n\n render() {\n return [modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"editor-wrapper\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n id: this.props.editorId || \"bd-customcss-editor\",\n className: \"editor\"\n }, this.props.css)), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n id: \"bd-customcss-attach-controls\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"checkbox-group\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_checkbox__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n text: \"Live Update\",\n onChange: this.toggleLiveUpdate,\n checked: modules__WEBPACK_IMPORTED_MODULE_0__[\"Settings\"].get(\"settings\", \"customcss\", \"liveUpdate\")\n })), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n id: \"bd-customcss-detach-controls-button\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"button\", {\n className: \"btn btn-primary\",\n onClick: this.updateCss\n }, \"Update\"), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"button\", {\n className: \"btn btn-primary\",\n onClick: this.saveCss\n }, \"Save\"), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"button\", {\n className: \"btn btn-primary\",\n onClick: this.openNative\n }, \"Open Natively\"), this.openDetached && [modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"button\", {\n className: \"btn btn-primary\",\n onClick: this.openDetached\n }, \"Detach\"), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"span\", {\n className: \"small-notice\"\n }, \"Unsaved changes are lost on detach\")], modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"help-text\"\n }, \"Press \", modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"code\", {\n className: \"inline\"\n }, \"ctrl\"), \"+\", modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"code\", {\n className: \"inline\"\n }, \",\"), \" with the editor focused to access the editor's settings.\")))];\n }\n\n toggleLiveUpdate(checked) {\n modules__WEBPACK_IMPORTED_MODULE_0__[\"Settings\"].set(\"settings\", \"customcss\", \"liveUpdate\", checked);\n }\n\n updateCss() {\n const newCss = this.editor.session.getValue();\n if (this.props.update) this.props.update(newCss);\n }\n\n saveCss() {\n const newCss = this.editor.session.getValue();\n if (this.props.save) this.props.save(newCss);\n }\n\n openDetached() {\n if (this.props.openDetached) this.props.openDetached();\n }\n\n openNative() {\n if (this.props.openNative) this.props.openNative();\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL3VpL2N1c3RvbWNzcy9lZGl0b3IuanN4P2ZmZTIiXSwibmFtZXMiOlsiQ3NzRWRpdG9yIiwiUmVhY3QiLCJDb21wb25lbnQiLCJjb25zdHJ1Y3RvciIsInByb3BzIiwidG9nZ2xlTGl2ZVVwZGF0ZSIsImJpbmQiLCJ1cGRhdGVDc3MiLCJzYXZlQ3NzIiwib3BlbkRldGFjaGVkIiwib3Blbk5hdGl2ZSIsImNvbXBvbmVudERpZE1vdW50IiwiZWRpdG9yIiwiYWNlIiwiZWRpdCIsImVkaXRvcklkIiwib3JpZ2luYWxTaG93Iiwia2V5QmluZGluZyIsIiRkZWZhdWx0SGFuZGxlciIsImNvbW1hbmRzIiwic2hvd1NldHRpbmdzTWVudSIsImV4ZWMiLCJhcHBseSIsImFyZ3VtZW50cyIsIm9ic2VydmVyIiwiTXV0YXRpb25PYnNlcnZlciIsIm11dGF0aW9ucyIsIm11dGF0aW9uIiwiYWRkZWROb2RlcyIsImxlbmd0aCIsIkVsZW1lbnQiLCJub2RlIiwicGFyZW50RWxlbWVudCIsImRvY3VtZW50IiwiYm9keSIsInF1ZXJ5U2VsZWN0b3IiLCJpZCIsImRpc2Nvbm5lY3QiLCJvYnNlcnZlIiwiY2hpbGRMaXN0Iiwic2V0VGhlbWUiLCJzZXNzaW9uIiwic2V0TW9kZSIsInNldFNob3dQcmludE1hcmdpbiIsInNldEZvbnRTaXplIiwib24iLCJTZXR0aW5ncyIsImdldCIsImNvbXBvbmVudFdpbGxVbm1vdW50IiwiZGVzdHJveSIsInJlbmRlciIsImNzcyIsImNoZWNrZWQiLCJzZXQiLCJuZXdDc3MiLCJnZXRWYWx1ZSIsInVwZGF0ZSIsInNhdmUiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFFZSxNQUFNQSxTQUFOLFNBQXdCQyw2Q0FBSyxDQUFDQyxTQUE5QixDQUF3QztBQUVuREMsYUFBVyxDQUFDQyxLQUFELEVBQVE7QUFDZixVQUFNQSxLQUFOO0FBRUEsU0FBS0MsZ0JBQUwsR0FBd0IsS0FBS0EsZ0JBQUwsQ0FBc0JDLElBQXRCLENBQTJCLElBQTNCLENBQXhCO0FBQ0EsU0FBS0MsU0FBTCxHQUFpQixLQUFLQSxTQUFMLENBQWVELElBQWYsQ0FBb0IsSUFBcEIsQ0FBakI7QUFDQSxTQUFLRSxPQUFMLEdBQWUsS0FBS0EsT0FBTCxDQUFhRixJQUFiLENBQWtCLElBQWxCLENBQWY7QUFDQSxTQUFLRyxZQUFMLEdBQW9CLEtBQUtMLEtBQUwsQ0FBV0ssWUFBWCxHQUEwQixLQUFLQSxZQUFMLENBQWtCSCxJQUFsQixDQUF1QixJQUF2QixDQUExQixHQUF5RCxJQUE3RTtBQUNBLFNBQUtJLFVBQUwsR0FBa0IsS0FBS0EsVUFBTCxDQUFnQkosSUFBaEIsQ0FBcUIsSUFBckIsQ0FBbEI7QUFDSDs7QUFFREssbUJBQWlCLEdBQUc7QUFDaEIsU0FBS0MsTUFBTCxHQUFjQyxHQUFHLENBQUNDLElBQUosQ0FBUyxLQUFLVixLQUFMLENBQVdXLFFBQVgsSUFBdUIscUJBQWhDLENBQWQsQ0FEZ0IsQ0FHaEI7O0FBQ0EsVUFBTUMsWUFBWSxHQUFHLEtBQUtKLE1BQUwsQ0FBWUssVUFBWixDQUF1QkMsZUFBdkIsQ0FBdUNDLFFBQXZDLENBQWdEQyxnQkFBaEQsQ0FBaUVDLElBQXRGOztBQUNBLFNBQUtULE1BQUwsQ0FBWUssVUFBWixDQUF1QkMsZUFBdkIsQ0FBdUNDLFFBQXZDLENBQWdEQyxnQkFBaEQsQ0FBaUVDLElBQWpFLEdBQXdFLFlBQVc7QUFDL0VMLGtCQUFZLENBQUNNLEtBQWIsQ0FBbUIsSUFBbkIsRUFBeUJDLFNBQXpCO0FBQ0EsWUFBTUMsUUFBUSxHQUFHLElBQUlDLGdCQUFKLENBQXFCQyxTQUFTLElBQUk7QUFDL0MsYUFBSyxNQUFNQyxRQUFYLElBQXVCRCxTQUF2QixFQUFrQztBQUM5QixjQUFJLENBQUNDLFFBQVEsQ0FBQ0MsVUFBVCxDQUFvQkMsTUFBckIsSUFBK0IsRUFBRUYsUUFBUSxDQUFDQyxVQUFULENBQW9CLENBQXBCLGFBQWtDRSxPQUFwQyxDQUFuQyxFQUFpRjtBQUNqRixnQkFBTUMsSUFBSSxHQUFHSixRQUFRLENBQUNDLFVBQVQsQ0FBb0IsQ0FBcEIsQ0FBYjtBQUNBLGNBQUlHLElBQUksQ0FBQ0MsYUFBTCxLQUF1QkMsUUFBUSxDQUFDQyxJQUFoQyxJQUF3QyxDQUFDSCxJQUFJLENBQUNJLGFBQUwsQ0FBbUIsbUJBQW5CLENBQTdDLEVBQXNGO0FBQ3RGSixjQUFJLENBQUNLLEVBQUwsR0FBVSw0QkFBVjtBQUNBWixrQkFBUSxDQUFDYSxVQUFUO0FBQ0g7QUFDSixPQVJnQixDQUFqQjtBQVNBYixjQUFRLENBQUNjLE9BQVQsQ0FBaUJMLFFBQVEsQ0FBQ0MsSUFBMUIsRUFBZ0M7QUFBQ0ssaUJBQVMsRUFBRTtBQUFaLE9BQWhDO0FBQ0gsS0FaRDs7QUFjQSxTQUFLM0IsTUFBTCxDQUFZNEIsUUFBWixDQUFxQixtQkFBckI7QUFDQSxTQUFLNUIsTUFBTCxDQUFZNkIsT0FBWixDQUFvQkMsT0FBcEIsQ0FBNEIsY0FBNUI7QUFDQSxTQUFLOUIsTUFBTCxDQUFZK0Isa0JBQVosQ0FBK0IsS0FBL0I7QUFDQSxTQUFLL0IsTUFBTCxDQUFZZ0MsV0FBWixDQUF3QixFQUF4QjtBQUNBLFNBQUtoQyxNQUFMLENBQVlpQyxFQUFaLENBQWUsUUFBZixFQUF5QixNQUFNO0FBQzNCLFVBQUksQ0FBQ0MsZ0RBQVEsQ0FBQ0MsR0FBVCxDQUFhLFVBQWIsRUFBeUIsV0FBekIsRUFBc0MsWUFBdEMsQ0FBTCxFQUEwRDtBQUMxRCxXQUFLdkMsT0FBTDtBQUNBLFdBQUtELFNBQUw7QUFDSCxLQUpEO0FBS0g7O0FBRUR5QyxzQkFBb0IsR0FBRztBQUNuQixTQUFLcEMsTUFBTCxDQUFZcUMsT0FBWjtBQUNIOztBQUVEQyxRQUFNLEdBQUc7QUFFTCxXQUFPLENBQ0g7QUFBSyxlQUFTLEVBQUM7QUFBZixPQUNJO0FBQUssUUFBRSxFQUFFLEtBQUs5QyxLQUFMLENBQVdXLFFBQVgsSUFBdUIscUJBQWhDO0FBQXVELGVBQVMsRUFBQztBQUFqRSxPQUEyRSxLQUFLWCxLQUFMLENBQVcrQyxHQUF0RixDQURKLENBREcsRUFJSDtBQUFLLFFBQUUsRUFBQztBQUFSLE9BQ0k7QUFBSyxlQUFTLEVBQUM7QUFBZixPQUNJLDREQUFDLGlEQUFEO0FBQVUsVUFBSSxFQUFDLGFBQWY7QUFBNkIsY0FBUSxFQUFFLEtBQUs5QyxnQkFBNUM7QUFBOEQsYUFBTyxFQUFFeUMsZ0RBQVEsQ0FBQ0MsR0FBVCxDQUFhLFVBQWIsRUFBeUIsV0FBekIsRUFBc0MsWUFBdEM7QUFBdkUsTUFESixDQURKLEVBSUk7QUFBSyxRQUFFLEVBQUM7QUFBUixPQUNJO0FBQVEsZUFBUyxFQUFDLGlCQUFsQjtBQUFvQyxhQUFPLEVBQUUsS0FBS3hDO0FBQWxELGdCQURKLEVBRUk7QUFBUSxlQUFTLEVBQUMsaUJBQWxCO0FBQW9DLGFBQU8sRUFBRSxLQUFLQztBQUFsRCxjQUZKLEVBR0k7QUFBUSxlQUFTLEVBQUMsaUJBQWxCO0FBQW9DLGFBQU8sRUFBRSxLQUFLRTtBQUFsRCx1QkFISixFQUlLLEtBQUtELFlBQUwsSUFBcUIsQ0FBQztBQUFRLGVBQVMsRUFBQyxpQkFBbEI7QUFBb0MsYUFBTyxFQUFFLEtBQUtBO0FBQWxELGdCQUFELEVBQWtGO0FBQU0sZUFBUyxFQUFDO0FBQWhCLDRDQUFsRixDQUoxQixFQUtJO0FBQUssZUFBUyxFQUFDO0FBQWYsaUJBQ1U7QUFBTSxlQUFTLEVBQUM7QUFBaEIsY0FEVixPQUMrQztBQUFNLGVBQVMsRUFBQztBQUFoQixXQUQvQyw4REFMSixDQUpKLENBSkcsQ0FBUDtBQW1CSDs7QUFFREosa0JBQWdCLENBQUMrQyxPQUFELEVBQVU7QUFDdEJOLG9EQUFRLENBQUNPLEdBQVQsQ0FBYSxVQUFiLEVBQXlCLFdBQXpCLEVBQXNDLFlBQXRDLEVBQW9ERCxPQUFwRDtBQUNIOztBQUVEN0MsV0FBUyxHQUFHO0FBQ1IsVUFBTStDLE1BQU0sR0FBRyxLQUFLMUMsTUFBTCxDQUFZNkIsT0FBWixDQUFvQmMsUUFBcEIsRUFBZjtBQUNBLFFBQUksS0FBS25ELEtBQUwsQ0FBV29ELE1BQWYsRUFBdUIsS0FBS3BELEtBQUwsQ0FBV29ELE1BQVgsQ0FBa0JGLE1BQWxCO0FBQzFCOztBQUVEOUMsU0FBTyxHQUFHO0FBQ04sVUFBTThDLE1BQU0sR0FBRyxLQUFLMUMsTUFBTCxDQUFZNkIsT0FBWixDQUFvQmMsUUFBcEIsRUFBZjtBQUNBLFFBQUksS0FBS25ELEtBQUwsQ0FBV3FELElBQWYsRUFBcUIsS0FBS3JELEtBQUwsQ0FBV3FELElBQVgsQ0FBZ0JILE1BQWhCO0FBQ3hCOztBQUVEN0MsY0FBWSxHQUFHO0FBQ1gsUUFBSSxLQUFLTCxLQUFMLENBQVdLLFlBQWYsRUFBNkIsS0FBS0wsS0FBTCxDQUFXSyxZQUFYO0FBQ2hDOztBQUVEQyxZQUFVLEdBQUc7QUFDVCxRQUFJLEtBQUtOLEtBQUwsQ0FBV00sVUFBZixFQUEyQixLQUFLTixLQUFMLENBQVdNLFVBQVg7QUFDOUI7O0FBekZrRCIsImZpbGUiOiIuL3NyYy91aS9jdXN0b21jc3MvZWRpdG9yLmpzeC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7UmVhY3QsIFNldHRpbmdzfSBmcm9tIFwibW9kdWxlc1wiO1xyXG5cclxuaW1wb3J0IENoZWNrYm94IGZyb20gXCIuL2NoZWNrYm94XCI7XHJcbmltcG9ydCBTZXR0aW5nc1RpdGxlIGZyb20gXCIuLi9zZXR0aW5ncy90aXRsZVwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ3NzRWRpdG9yIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuXHJcbiAgICAgICAgdGhpcy50b2dnbGVMaXZlVXBkYXRlID0gdGhpcy50b2dnbGVMaXZlVXBkYXRlLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVDc3MgPSB0aGlzLnVwZGF0ZUNzcy5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuc2F2ZUNzcyA9IHRoaXMuc2F2ZUNzcy5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMub3BlbkRldGFjaGVkID0gdGhpcy5wcm9wcy5vcGVuRGV0YWNoZWQgPyB0aGlzLm9wZW5EZXRhY2hlZC5iaW5kKHRoaXMpIDogbnVsbDtcclxuICAgICAgICB0aGlzLm9wZW5OYXRpdmUgPSB0aGlzLm9wZW5OYXRpdmUuYmluZCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnREaWRNb3VudCgpIHtcclxuICAgICAgICB0aGlzLmVkaXRvciA9IGFjZS5lZGl0KHRoaXMucHJvcHMuZWRpdG9ySWQgfHwgXCJiZC1jdXN0b21jc3MtZWRpdG9yXCIpO1xyXG5cclxuICAgICAgICAvLyBBZGQgaWQgdG8gdGhlIGFjZSBtZW51IGNvbnRhaW5lclxyXG4gICAgICAgIGNvbnN0IG9yaWdpbmFsU2hvdyA9IHRoaXMuZWRpdG9yLmtleUJpbmRpbmcuJGRlZmF1bHRIYW5kbGVyLmNvbW1hbmRzLnNob3dTZXR0aW5nc01lbnUuZXhlYztcclxuICAgICAgICB0aGlzLmVkaXRvci5rZXlCaW5kaW5nLiRkZWZhdWx0SGFuZGxlci5jb21tYW5kcy5zaG93U2V0dGluZ3NNZW51LmV4ZWMgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgb3JpZ2luYWxTaG93LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XHJcbiAgICAgICAgICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIobXV0YXRpb25zID0+IHtcclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgbXV0YXRpb24gb2YgbXV0YXRpb25zKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFtdXRhdGlvbi5hZGRlZE5vZGVzLmxlbmd0aCB8fCAhKG11dGF0aW9uLmFkZGVkTm9kZXNbMF0gaW5zdGFuY2VvZiBFbGVtZW50KSkgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgbm9kZSA9IG11dGF0aW9uLmFkZGVkTm9kZXNbMF07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUucGFyZW50RWxlbWVudCAhPT0gZG9jdW1lbnQuYm9keSB8fCAhbm9kZS5xdWVyeVNlbGVjdG9yKFwiI2FjZV9zZXR0aW5nc21lbnVcIikpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIG5vZGUuaWQgPSBcImFjZV9zZXR0aW5nc21lbnVfY29udGFpbmVyXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShkb2N1bWVudC5ib2R5LCB7Y2hpbGRMaXN0OiB0cnVlfSk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5lZGl0b3Iuc2V0VGhlbWUoXCJhY2UvdGhlbWUvbW9ub2thaVwiKTtcclxuICAgICAgICB0aGlzLmVkaXRvci5zZXNzaW9uLnNldE1vZGUoXCJhY2UvbW9kZS9jc3NcIik7XHJcbiAgICAgICAgdGhpcy5lZGl0b3Iuc2V0U2hvd1ByaW50TWFyZ2luKGZhbHNlKTtcclxuICAgICAgICB0aGlzLmVkaXRvci5zZXRGb250U2l6ZSgxNCk7XHJcbiAgICAgICAgdGhpcy5lZGl0b3Iub24oXCJjaGFuZ2VcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIVNldHRpbmdzLmdldChcInNldHRpbmdzXCIsIFwiY3VzdG9tY3NzXCIsIFwibGl2ZVVwZGF0ZVwiKSkgcmV0dXJuO1xyXG4gICAgICAgICAgICB0aGlzLnNhdmVDc3MoKTtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVDc3MoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcclxuICAgICAgICB0aGlzLmVkaXRvci5kZXN0cm95KCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG5cclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImVkaXRvci13cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGlkPXt0aGlzLnByb3BzLmVkaXRvcklkIHx8IFwiYmQtY3VzdG9tY3NzLWVkaXRvclwifSBjbGFzc05hbWU9XCJlZGl0b3JcIj57dGhpcy5wcm9wcy5jc3N9PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PixcclxuICAgICAgICAgICAgPGRpdiBpZD1cImJkLWN1c3RvbWNzcy1hdHRhY2gtY29udHJvbHNcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY2hlY2tib3gtZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8Q2hlY2tib3ggdGV4dD1cIkxpdmUgVXBkYXRlXCIgb25DaGFuZ2U9e3RoaXMudG9nZ2xlTGl2ZVVwZGF0ZX0gY2hlY2tlZD17U2V0dGluZ3MuZ2V0KFwic2V0dGluZ3NcIiwgXCJjdXN0b21jc3NcIiwgXCJsaXZlVXBkYXRlXCIpfSAvPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGlkPVwiYmQtY3VzdG9tY3NzLWRldGFjaC1jb250cm9scy1idXR0b25cIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzTmFtZT1cImJ0biBidG4tcHJpbWFyeVwiIG9uQ2xpY2s9e3RoaXMudXBkYXRlQ3NzfT5VcGRhdGU8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzTmFtZT1cImJ0biBidG4tcHJpbWFyeVwiIG9uQ2xpY2s9e3RoaXMuc2F2ZUNzc30+U2F2ZTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3NOYW1lPVwiYnRuIGJ0bi1wcmltYXJ5XCIgb25DbGljaz17dGhpcy5vcGVuTmF0aXZlfT5PcGVuIE5hdGl2ZWx5PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAge3RoaXMub3BlbkRldGFjaGVkICYmIFs8YnV0dG9uIGNsYXNzTmFtZT1cImJ0biBidG4tcHJpbWFyeVwiIG9uQ2xpY2s9e3RoaXMub3BlbkRldGFjaGVkfT5EZXRhY2g8L2J1dHRvbj4sIDxzcGFuIGNsYXNzTmFtZT1cInNtYWxsLW5vdGljZVwiPlVuc2F2ZWQgY2hhbmdlcyBhcmUgbG9zdCBvbiBkZXRhY2g8L3NwYW4+XX1cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImhlbHAtdGV4dFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBQcmVzcyA8Y29kZSBjbGFzc05hbWU9XCJpbmxpbmVcIj5jdHJsPC9jb2RlPis8Y29kZSBjbGFzc05hbWU9XCJpbmxpbmVcIj4sPC9jb2RlPiB3aXRoIHRoZSBlZGl0b3IgZm9jdXNlZCB0byBhY2Nlc3MgdGhlIGVkaXRvciZhcG9zO3Mgc2V0dGluZ3MuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgXTtcclxuICAgIH1cclxuXHJcbiAgICB0b2dnbGVMaXZlVXBkYXRlKGNoZWNrZWQpIHtcclxuICAgICAgICBTZXR0aW5ncy5zZXQoXCJzZXR0aW5nc1wiLCBcImN1c3RvbWNzc1wiLCBcImxpdmVVcGRhdGVcIiwgY2hlY2tlZCk7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlQ3NzKCkge1xyXG4gICAgICAgIGNvbnN0IG5ld0NzcyA9IHRoaXMuZWRpdG9yLnNlc3Npb24uZ2V0VmFsdWUoKTtcclxuICAgICAgICBpZiAodGhpcy5wcm9wcy51cGRhdGUpIHRoaXMucHJvcHMudXBkYXRlKG5ld0Nzcyk7XHJcbiAgICB9XHJcblxyXG4gICAgc2F2ZUNzcygpIHtcclxuICAgICAgICBjb25zdCBuZXdDc3MgPSB0aGlzLmVkaXRvci5zZXNzaW9uLmdldFZhbHVlKCk7XHJcbiAgICAgICAgaWYgKHRoaXMucHJvcHMuc2F2ZSkgdGhpcy5wcm9wcy5zYXZlKG5ld0Nzcyk7XHJcbiAgICB9XHJcblxyXG4gICAgb3BlbkRldGFjaGVkKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnByb3BzLm9wZW5EZXRhY2hlZCkgdGhpcy5wcm9wcy5vcGVuRGV0YWNoZWQoKTtcclxuICAgIH1cclxuXHJcbiAgICBvcGVuTmF0aXZlKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnByb3BzLm9wZW5OYXRpdmUpIHRoaXMucHJvcHMub3Blbk5hdGl2ZSgpO1xyXG4gICAgfVxyXG59Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/ui/customcss/editor.jsx\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return CodeEditor; });\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n/* harmony import */ var _checkbox__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./checkbox */ \"./src/ui/customcss/checkbox.jsx\");\n\n\nconst languages = [\"abap\", \"abc\", \"actionscript\", \"ada\", \"apache_conf\", \"asciidoc\", \"assembly_x86\", \"autohotkey\", \"batchfile\", \"bro\", \"c_cpp\", \"c9search\", \"cirru\", \"clojure\", \"cobol\", \"coffee\", \"coldfusion\", \"csharp\", \"csound_document\", \"csound_orchestra\", \"csound_score\", \"css\", \"curly\", \"d\", \"dart\", \"diff\", \"dockerfile\", \"dot\", \"drools\", \"dummy\", \"dummysyntax\", \"eiffel\", \"ejs\", \"elixir\", \"elm\", \"erlang\", \"forth\", \"fortran\", \"ftl\", \"gcode\", \"gherkin\", \"gitignore\", \"glsl\", \"gobstones\", \"golang\", \"graphqlschema\", \"groovy\", \"haml\", \"handlebars\", \"haskell\", \"haskell_cabal\", \"haxe\", \"hjson\", \"html\", \"html_elixir\", \"html_ruby\", \"ini\", \"io\", \"jack\", \"jade\", \"java\", \"javascript\", \"json\", \"jsoniq\", \"jsp\", \"jssm\", \"jsx\", \"julia\", \"kotlin\", \"latex\", \"less\", \"liquid\", \"lisp\", \"livescript\", \"logiql\", \"lsl\", \"lua\", \"luapage\", \"lucene\", \"makefile\", \"markdown\", \"mask\", \"matlab\", \"maze\", \"mel\", \"mushcode\", \"mysql\", \"nix\", \"nsis\", \"objectivec\", \"ocaml\", \"pascal\", \"perl\", \"pgsql\", \"php\", \"pig\", \"powershell\", \"praat\", \"prolog\", \"properties\", \"protobuf\", \"python\", \"r\", \"razor\", \"rdoc\", \"red\", \"rhtml\", \"rst\", \"ruby\", \"rust\", \"sass\", \"scad\", \"scala\", \"scheme\", \"scss\", \"sh\", \"sjs\", \"smarty\", \"snippets\", \"soy_template\", \"space\", \"sql\", \"sqlserver\", \"stylus\", \"svg\", \"swift\", \"tcl\", \"tex\", \"text\", \"textile\", \"toml\", \"tsx\", \"twig\", \"typescript\", \"vala\", \"vbscript\", \"velocity\", \"verilog\", \"vhdl\", \"wollok\", \"xml\", \"xquery\", \"yaml\", \"django\"];\nconst themes = [\"chrome\", \"clouds\", \"crimson_editor\", \"dawn\", \"dreamweaver\", \"eclipse\", \"github\", \"iplastic\", \"solarized_light\", \"textmate\", \"tomorrow\", \"xcode\", \"kuroir\", \"katzenmilch\", \"sqlserver\", \"ambiance\", \"chaos\", \"clouds_midnight\", \"cobalt\", \"gruvbox\", \"gob\", \"idle_fingers\", \"kr_theme\", \"merbivore\", \"merbivore_soft\", \"mono_industrial\", \"monokai\", \"pastel_on_dark\", \"solarized_dark\", \"terminal\", \"tomorrow_night\", \"tomorrow_night_blue\", \"tomorrow_night_bright\", \"tomorrow_night_eighties\", \"twilight\", \"vibrant_ink\"];\nclass CodeEditor extends modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].Component {\n static get defaultId() {\n return \"bd-editor\";\n }\n\n constructor(props) {\n super(props);\n\n for (const button of this.props.buttons) {\n if (button.onClick == \"showSettings\") button.onClick = this.showSettings.bind(this);\n }\n\n this.props.theme = this.props.theme.toLowerCase().replace(/ /g, \"_\");\n if (!themes.includes(this.props.theme)) this.props.theme = this.defaultProps.theme;\n this.props.language = this.props.language.toLowerCase().replace(/ /g, \"_\");\n if (!languages.includes(this.props.language)) this.props.language = this.defaultProps.language;\n }\n\n static get defaultProps() {\n return {\n buttons: [],\n checkboxes: [],\n theme: \"monokai\",\n language: \"css\",\n id: this.defaultId,\n fontSize: 14\n };\n }\n\n static get themes() {\n return themes;\n }\n\n componentDidMount() {\n this.editor = ace.edit(this.props.id); // Add id to the ace menu container\n\n const originalShow = this.editor.keyBinding.$defaultHandler.commands.showSettingsMenu.exec;\n\n this.editor.keyBinding.$defaultHandler.commands.showSettingsMenu.exec = function () {\n originalShow.apply(this, arguments);\n const observer = new MutationObserver(mutations => {\n for (const mutation of mutations) {\n if (!mutation.addedNodes.length || !(mutation.addedNodes[0] instanceof Element)) continue;\n const node = mutation.addedNodes[0];\n if (node.parentElement !== document.body || !node.querySelector(\"#ace_settingsmenu\")) continue;\n node.id = \"ace_settingsmenu_container\";\n observer.disconnect();\n }\n });\n observer.observe(document.body, {\n childList: true\n });\n };\n\n this.editor.setTheme(`ace/theme/${this.props.theme}`);\n this.editor.session.setMode(`ace/mode/${this.props.language}`);\n this.editor.setShowPrintMargin(false);\n this.editor.setFontSize(this.props.fontSize);\n\n if (this.props.onChange) {\n this.editor.on(\"change\", () => {\n this.props.onChange(this.value);\n });\n }\n }\n\n componentWillUnmount() {\n this.editor.destroy();\n }\n\n get value() {\n return this.editor.session.getValue();\n }\n\n showSettings() {\n return this.editor.keyBinding.$defaultHandler.commands.showSettingsMenu.exec(this.editor);\n }\n\n render() {\n const buttons = this.props.buttons.map(button => modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"button\", {\n className: \"btn btn-primary\",\n onClick: event => {\n button.onClick(event, this.value);\n }\n }, button.label));\n const checkboxes = this.props.checkboxes.map(checkbox => modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_checkbox__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n text: checkbox.label,\n onChange: checkbox.onChange,\n checked: checkbox.checked\n }));\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n id: \"bd-editor-panel\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"editor-wrapper\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n id: this.props.id,\n className: \"editor\"\n }, this.props.value)), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n id: \"bd-editor-controls\"\n }, checkboxes.length && modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"checkbox-group\"\n }, checkboxes), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n id: \"bd-editor-buttons\"\n }, buttons, this.props.notice && modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"span\", {\n className: \"small-notice\"\n }, this.props.notice)), this.props.showHelp && modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"help-text\"\n }, \"Press \", modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"code\", {\n className: \"inline\"\n }, \"ctrl\"), \"+\", modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"code\", {\n className: \"inline\"\n }, \",\"), \" with the editor focused to access the editor's settings.\")));\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL3VpL2N1c3RvbWNzcy9lZGl0b3IuanN4P2ZmZTIiXSwibmFtZXMiOlsibGFuZ3VhZ2VzIiwidGhlbWVzIiwiQ29kZUVkaXRvciIsIlJlYWN0IiwiQ29tcG9uZW50IiwiZGVmYXVsdElkIiwiY29uc3RydWN0b3IiLCJwcm9wcyIsImJ1dHRvbiIsImJ1dHRvbnMiLCJvbkNsaWNrIiwic2hvd1NldHRpbmdzIiwiYmluZCIsInRoZW1lIiwidG9Mb3dlckNhc2UiLCJyZXBsYWNlIiwiaW5jbHVkZXMiLCJkZWZhdWx0UHJvcHMiLCJsYW5ndWFnZSIsImNoZWNrYm94ZXMiLCJpZCIsImZvbnRTaXplIiwiY29tcG9uZW50RGlkTW91bnQiLCJlZGl0b3IiLCJhY2UiLCJlZGl0Iiwib3JpZ2luYWxTaG93Iiwia2V5QmluZGluZyIsIiRkZWZhdWx0SGFuZGxlciIsImNvbW1hbmRzIiwic2hvd1NldHRpbmdzTWVudSIsImV4ZWMiLCJhcHBseSIsImFyZ3VtZW50cyIsIm9ic2VydmVyIiwiTXV0YXRpb25PYnNlcnZlciIsIm11dGF0aW9ucyIsIm11dGF0aW9uIiwiYWRkZWROb2RlcyIsImxlbmd0aCIsIkVsZW1lbnQiLCJub2RlIiwicGFyZW50RWxlbWVudCIsImRvY3VtZW50IiwiYm9keSIsInF1ZXJ5U2VsZWN0b3IiLCJkaXNjb25uZWN0Iiwib2JzZXJ2ZSIsImNoaWxkTGlzdCIsInNldFRoZW1lIiwic2Vzc2lvbiIsInNldE1vZGUiLCJzZXRTaG93UHJpbnRNYXJnaW4iLCJzZXRGb250U2l6ZSIsIm9uQ2hhbmdlIiwib24iLCJ2YWx1ZSIsImNvbXBvbmVudFdpbGxVbm1vdW50IiwiZGVzdHJveSIsImdldFZhbHVlIiwicmVuZGVyIiwibWFwIiwiZXZlbnQiLCJsYWJlbCIsImNoZWNrYm94IiwiY2hlY2tlZCIsIm5vdGljZSIsInNob3dIZWxwIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFFQSxN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O0FBQS9FLE1BREQsQ0FBbkI7QUFJQSxXQUFPO0FBQUssUUFBRSxFQUFDO0FBQVIsT0FDSztBQUFLLGVBQVMsRUFBQztBQUFmLE9BQ0k7QUFBSyxRQUFFLEVBQUUsS0FBSzFELEtBQUwsQ0FBV2EsRUFBcEI7QUFBd0IsZUFBUyxFQUFDO0FBQWxDLE9BQTRDLEtBQUtiLEtBQUwsQ0FBV2lELEtBQXZELENBREosQ0FETCxFQUlLO0FBQUssUUFBRSxFQUFDO0FBQVIsT0FDS3JDLFVBQVUsQ0FBQ29CLE1BQVgsSUFBcUI7QUFBSyxlQUFTLEVBQUM7QUFBZixPQUFpQ3BCLFVBQWpDLENBRDFCLEVBRUk7QUFBSyxRQUFFLEVBQUM7QUFBUixPQUNLVixPQURMLEVBRUssS0FBS0YsS0FBTCxDQUFXMkQsTUFBWCxJQUFxQjtBQUFNLGVBQVMsRUFBQztBQUFoQixPQUFnQyxLQUFLM0QsS0FBTCxDQUFXMkQsTUFBM0MsQ0FGMUIsQ0FGSixFQU1LLEtBQUszRCxLQUFMLENBQVc0RCxRQUFYLElBQXVCO0FBQUssZUFBUyxFQUFDO0FBQWYsaUJBQ1Y7QUFBTSxlQUFTLEVBQUM7QUFBaEIsY0FEVSxPQUMyQjtBQUFNLGVBQVMsRUFBQztBQUFoQixXQUQzQiw4REFONUIsQ0FKTCxDQUFQO0FBZUg7O0FBN0ZtRCIsImZpbGUiOiIuL3NyYy91aS9jdXN0b21jc3MvZWRpdG9yLmpzeC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7UmVhY3R9IGZyb20gXCJtb2R1bGVzXCI7XHJcblxyXG5pbXBvcnQgQ2hlY2tib3ggZnJvbSBcIi4vY2hlY2tib3hcIjtcclxuXHJcbmNvbnN0IGxhbmd1YWdlcyA9IFtcImFiYXBcIiwgXCJhYmNcIiwgXCJhY3Rpb25zY3JpcHRcIiwgXCJhZGFcIiwgXCJhcGFjaGVfY29uZlwiLCBcImFzY2lpZG9jXCIsIFwiYXNzZW1ibHlfeDg2XCIsIFwiYXV0b2hvdGtleVwiLCBcImJhdGNoZmlsZVwiLCBcImJyb1wiLCBcImNfY3BwXCIsIFwiYzlzZWFyY2hcIiwgXCJjaXJydVwiLCBcImNsb2p1cmVcIiwgXCJjb2JvbFwiLCBcImNvZmZlZVwiLCBcImNvbGRmdXNpb25cIiwgXCJjc2hhcnBcIiwgXCJjc291bmRfZG9jdW1lbnRcIiwgXCJjc291bmRfb3JjaGVzdHJhXCIsIFwiY3NvdW5kX3Njb3JlXCIsIFwiY3NzXCIsIFwiY3VybHlcIiwgXCJkXCIsIFwiZGFydFwiLCBcImRpZmZcIiwgXCJkb2NrZXJmaWxlXCIsIFwiZG90XCIsIFwiZHJvb2xzXCIsIFwiZHVtbXlcIiwgXCJkdW1teXN5bnRheFwiLCBcImVpZmZlbFwiLCBcImVqc1wiLCBcImVsaXhpclwiLCBcImVsbVwiLCBcImVybGFuZ1wiLCBcImZvcnRoXCIsIFwiZm9ydHJhblwiLCBcImZ0bFwiLCBcImdjb2RlXCIsIFwiZ2hlcmtpblwiLCBcImdpdGlnbm9yZVwiLCBcImdsc2xcIiwgXCJnb2JzdG9uZXNcIiwgXCJnb2xhbmdcIiwgXCJncmFwaHFsc2NoZW1hXCIsIFwiZ3Jvb3Z5XCIsIFwiaGFtbFwiLCBcImhhbmRsZWJhcnNcIiwgXCJoYXNrZWxsXCIsIFwiaGFza2VsbF9jYWJhbFwiLCBcImhheGVcIiwgXCJoanNvblwiLCBcImh0bWxcIiwgXCJodG1sX2VsaXhpclwiLCBcImh0bWxfcnVieVwiLCBcImluaVwiLCBcImlvXCIsIFwiamFja1wiLCBcImphZGVcIiwgXCJqYXZhXCIsIFwiamF2YXNjcmlwdFwiLCBcImpzb25cIiwgXCJqc29uaXFcIiwgXCJqc3BcIiwgXCJqc3NtXCIsIFwianN4XCIsIFwianVsaWFcIiwgXCJrb3RsaW5cIiwgXCJsYXRleFwiLCBcImxlc3NcIiwgXCJsaXF1aWRcIiwgXCJsaXNwXCIsIFwibGl2ZXNjcmlwdFwiLCBcImxvZ2lxbFwiLCBcImxzbFwiLCBcImx1YVwiLCBcImx1YXBhZ2VcIiwgXCJsdWNlbmVcIiwgXCJtYWtlZmlsZVwiLCBcIm1hcmtkb3duXCIsIFwibWFza1wiLCBcIm1hdGxhYlwiLCBcIm1hemVcIiwgXCJtZWxcIiwgXCJtdXNoY29kZVwiLCBcIm15c3FsXCIsIFwibml4XCIsIFwibnNpc1wiLCBcIm9iamVjdGl2ZWNcIiwgXCJvY2FtbFwiLCBcInBhc2NhbFwiLCBcInBlcmxcIiwgXCJwZ3NxbFwiLCBcInBocFwiLCBcInBpZ1wiLCBcInBvd2Vyc2hlbGxcIiwgXCJwcmFhdFwiLCBcInByb2xvZ1wiLCBcInByb3BlcnRpZXNcIiwgXCJwcm90b2J1ZlwiLCBcInB5dGhvblwiLCBcInJcIiwgXCJyYXpvclwiLCBcInJkb2NcIiwgXCJyZWRcIiwgXCJyaHRtbFwiLCBcInJzdFwiLCBcInJ1YnlcIiwgXCJydXN0XCIsIFwic2Fzc1wiLCBcInNjYWRcIiwgXCJzY2FsYVwiLCBcInNjaGVtZVwiLCBcInNjc3NcIiwgXCJzaFwiLCBcInNqc1wiLCBcInNtYXJ0eVwiLCBcInNuaXBwZXRzXCIsIFwic295X3RlbXBsYXRlXCIsIFwic3BhY2VcIiwgXCJzcWxcIiwgXCJzcWxzZXJ2ZXJcIiwgXCJzdHlsdXNcIiwgXCJzdmdcIiwgXCJzd2lmdFwiLCBcInRjbFwiLCBcInRleFwiLCBcInRleHRcIiwgXCJ0ZXh0aWxlXCIsIFwidG9tbFwiLCBcInRzeFwiLCBcInR3aWdcIiwgXCJ0eXBlc2NyaXB0XCIsIFwidmFsYVwiLCBcInZic2NyaXB0XCIsIFwidmVsb2NpdHlcIiwgXCJ2ZXJpbG9nXCIsIFwidmhkbFwiLCBcIndvbGxva1wiLCBcInhtbFwiLCBcInhxdWVyeVwiLCBcInlhbWxcIiwgXCJkamFuZ29cIl07XHJcbmNvbnN0IHRoZW1lcyA9IFtcImNocm9tZVwiLCBcImNsb3Vkc1wiLCBcImNyaW1zb25fZWRpdG9yXCIsIFwiZGF3blwiLCBcImRyZWFtd2VhdmVyXCIsIFwiZWNsaXBzZVwiLCBcImdpdGh1YlwiLCBcImlwbGFzdGljXCIsIFwic29sYXJpemVkX2xpZ2h0XCIsIFwidGV4dG1hdGVcIiwgXCJ0b21vcnJvd1wiLCBcInhjb2RlXCIsIFwia3Vyb2lyXCIsIFwia2F0emVubWlsY2hcIiwgXCJzcWxzZXJ2ZXJcIiwgXCJhbWJpYW5jZVwiLCBcImNoYW9zXCIsIFwiY2xvdWRzX21pZG5pZ2h0XCIsIFwiY29iYWx0XCIsIFwiZ3J1dmJveFwiLCBcImdvYlwiLCBcImlkbGVfZmluZ2Vyc1wiLCBcImtyX3RoZW1lXCIsIFwibWVyYml2b3JlXCIsIFwibWVyYml2b3JlX3NvZnRcIiwgXCJtb25vX2luZHVzdHJpYWxcIiwgXCJtb25va2FpXCIsIFwicGFzdGVsX29uX2RhcmtcIiwgXCJzb2xhcml6ZWRfZGFya1wiLCBcInRlcm1pbmFsXCIsIFwidG9tb3Jyb3dfbmlnaHRcIiwgXCJ0b21vcnJvd19uaWdodF9ibHVlXCIsIFwidG9tb3Jyb3dfbmlnaHRfYnJpZ2h0XCIsIFwidG9tb3Jyb3dfbmlnaHRfZWlnaHRpZXNcIiwgXCJ0d2lsaWdodFwiLCBcInZpYnJhbnRfaW5rXCJdO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29kZUVkaXRvciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICBzdGF0aWMgZ2V0IGRlZmF1bHRJZCgpIHtyZXR1cm4gXCJiZC1lZGl0b3JcIjt9XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgZm9yIChjb25zdCBidXR0b24gb2YgdGhpcy5wcm9wcy5idXR0b25zKSB7XHJcbiAgICAgICAgICAgIGlmIChidXR0b24ub25DbGljayA9PSBcInNob3dTZXR0aW5nc1wiKSBidXR0b24ub25DbGljayA9IHRoaXMuc2hvd1NldHRpbmdzLmJpbmQodGhpcyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnByb3BzLnRoZW1lID0gdGhpcy5wcm9wcy50aGVtZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLyAvZywgXCJfXCIpO1xyXG4gICAgICAgIGlmICghdGhlbWVzLmluY2x1ZGVzKHRoaXMucHJvcHMudGhlbWUpKSB0aGlzLnByb3BzLnRoZW1lID0gdGhpcy5kZWZhdWx0UHJvcHMudGhlbWU7XHJcblxyXG4gICAgICAgIHRoaXMucHJvcHMubGFuZ3VhZ2UgPSB0aGlzLnByb3BzLmxhbmd1YWdlLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvIC9nLCBcIl9cIik7XHJcbiAgICAgICAgaWYgKCFsYW5ndWFnZXMuaW5jbHVkZXModGhpcy5wcm9wcy5sYW5ndWFnZSkpIHRoaXMucHJvcHMubGFuZ3VhZ2UgPSB0aGlzLmRlZmF1bHRQcm9wcy5sYW5ndWFnZTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0IGRlZmF1bHRQcm9wcygpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBidXR0b25zOiBbXSxcclxuICAgICAgICAgICAgY2hlY2tib3hlczogW10sXHJcbiAgICAgICAgICAgIHRoZW1lOiBcIm1vbm9rYWlcIixcclxuICAgICAgICAgICAgbGFuZ3VhZ2U6IFwiY3NzXCIsXHJcbiAgICAgICAgICAgIGlkOiB0aGlzLmRlZmF1bHRJZCxcclxuICAgICAgICAgICAgZm9udFNpemU6IDE0XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0IHRoZW1lcygpIHtyZXR1cm4gdGhlbWVzO31cclxuXHJcbiAgICBjb21wb25lbnREaWRNb3VudCgpIHtcclxuICAgICAgICB0aGlzLmVkaXRvciA9IGFjZS5lZGl0KHRoaXMucHJvcHMuaWQpO1xyXG5cclxuICAgICAgICAvLyBBZGQgaWQgdG8gdGhlIGFjZSBtZW51IGNvbnRhaW5lclxyXG4gICAgICAgIGNvbnN0IG9yaWdpbmFsU2hvdyA9IHRoaXMuZWRpdG9yLmtleUJpbmRpbmcuJGRlZmF1bHRIYW5kbGVyLmNvbW1hbmRzLnNob3dTZXR0aW5nc01lbnUuZXhlYztcclxuICAgICAgICB0aGlzLmVkaXRvci5rZXlCaW5kaW5nLiRkZWZhdWx0SGFuZGxlci5jb21tYW5kcy5zaG93U2V0dGluZ3NNZW51LmV4ZWMgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgb3JpZ2luYWxTaG93LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XHJcbiAgICAgICAgICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIobXV0YXRpb25zID0+IHtcclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgbXV0YXRpb24gb2YgbXV0YXRpb25zKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFtdXRhdGlvbi5hZGRlZE5vZGVzLmxlbmd0aCB8fCAhKG11dGF0aW9uLmFkZGVkTm9kZXNbMF0gaW5zdGFuY2VvZiBFbGVtZW50KSkgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgbm9kZSA9IG11dGF0aW9uLmFkZGVkTm9kZXNbMF07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUucGFyZW50RWxlbWVudCAhPT0gZG9jdW1lbnQuYm9keSB8fCAhbm9kZS5xdWVyeVNlbGVjdG9yKFwiI2FjZV9zZXR0aW5nc21lbnVcIikpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIG5vZGUuaWQgPSBcImFjZV9zZXR0aW5nc21lbnVfY29udGFpbmVyXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShkb2N1bWVudC5ib2R5LCB7Y2hpbGRMaXN0OiB0cnVlfSk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5lZGl0b3Iuc2V0VGhlbWUoYGFjZS90aGVtZS8ke3RoaXMucHJvcHMudGhlbWV9YCk7XHJcbiAgICAgICAgdGhpcy5lZGl0b3Iuc2Vzc2lvbi5zZXRNb2RlKGBhY2UvbW9kZS8ke3RoaXMucHJvcHMubGFuZ3VhZ2V9YCk7XHJcbiAgICAgICAgdGhpcy5lZGl0b3Iuc2V0U2hvd1ByaW50TWFyZ2luKGZhbHNlKTtcclxuICAgICAgICB0aGlzLmVkaXRvci5zZXRGb250U2l6ZSh0aGlzLnByb3BzLmZvbnRTaXplKTtcclxuICAgICAgICBpZiAodGhpcy5wcm9wcy5vbkNoYW5nZSkge1xyXG4gICAgICAgICAgICB0aGlzLmVkaXRvci5vbihcImNoYW5nZVwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKHRoaXMudmFsdWUpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XHJcbiAgICAgICAgdGhpcy5lZGl0b3IuZGVzdHJveSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCB2YWx1ZSgpIHtyZXR1cm4gdGhpcy5lZGl0b3Iuc2Vzc2lvbi5nZXRWYWx1ZSgpO31cclxuXHJcbiAgICBzaG93U2V0dGluZ3MoKSB7cmV0dXJuIHRoaXMuZWRpdG9yLmtleUJpbmRpbmcuJGRlZmF1bHRIYW5kbGVyLmNvbW1hbmRzLnNob3dTZXR0aW5nc01lbnUuZXhlYyh0aGlzLmVkaXRvcik7fVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuXHJcbiAgICAgICAgY29uc3QgYnV0dG9ucyA9IHRoaXMucHJvcHMuYnV0dG9ucy5tYXAoYnV0dG9uID0+IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzc05hbWU9XCJidG4gYnRuLXByaW1hcnlcIiBvbkNsaWNrPXsoZXZlbnQpID0+IHtidXR0b24ub25DbGljayhldmVudCwgdGhpcy52YWx1ZSk7fX0+e2J1dHRvbi5sYWJlbH08L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgY29uc3QgY2hlY2tib3hlcyA9IHRoaXMucHJvcHMuY2hlY2tib3hlcy5tYXAoY2hlY2tib3ggPT4gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Q2hlY2tib3ggdGV4dD17Y2hlY2tib3gubGFiZWx9IG9uQ2hhbmdlPXtjaGVja2JveC5vbkNoYW5nZX0gY2hlY2tlZD17Y2hlY2tib3guY2hlY2tlZH0gLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIDxkaXYgaWQ9XCJiZC1lZGl0b3ItcGFuZWxcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImVkaXRvci13cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9e3RoaXMucHJvcHMuaWR9IGNsYXNzTmFtZT1cImVkaXRvclwiPnt0aGlzLnByb3BzLnZhbHVlfTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJiZC1lZGl0b3ItY29udHJvbHNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge2NoZWNrYm94ZXMubGVuZ3RoICYmIDxkaXYgY2xhc3NOYW1lPVwiY2hlY2tib3gtZ3JvdXBcIj57Y2hlY2tib3hlc308L2Rpdj59XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJiZC1lZGl0b3ItYnV0dG9uc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2J1dHRvbnN9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dGhpcy5wcm9wcy5ub3RpY2UgJiYgPHNwYW4gY2xhc3NOYW1lPVwic21hbGwtbm90aWNlXCI+e3RoaXMucHJvcHMubm90aWNlfTwvc3Bhbj59XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7dGhpcy5wcm9wcy5zaG93SGVscCAmJiA8ZGl2IGNsYXNzTmFtZT1cImhlbHAtdGV4dFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByZXNzIDxjb2RlIGNsYXNzTmFtZT1cImlubGluZVwiPmN0cmw8L2NvZGU+Kzxjb2RlIGNsYXNzTmFtZT1cImlubGluZVwiPiw8L2NvZGU+IHdpdGggdGhlIGVkaXRvciBmb2N1c2VkIHRvIGFjY2VzcyB0aGUgZWRpdG9yJmFwb3M7cyBzZXR0aW5ncy5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2Pn1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PjtcclxuICAgIH1cclxufSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/ui/customcss/editor.jsx\n"); /***/ }), diff --git a/src/builtins/customcss.js b/src/builtins/customcss.js index 2fb98c8b..a63afabe 100644 --- a/src/builtins/customcss.js +++ b/src/builtins/customcss.js @@ -1,15 +1,12 @@ import Builtin from "../structs/builtin"; import {Settings, DataStore, React, Utilities, WebpackModules} from "modules"; -import CSSEditor from "../ui/customcss/editor"; +import CSSEditor from "../ui/customcss/csseditor"; import FloatingWindow from "../ui/customcss/detached"; import SettingsTitle from "../ui/settings/title"; const electron = require("electron"); const PopoutStack = WebpackModules.getByProps("open", "closeAll"); -const PopoutOpener = WebpackModules.getByProps("openPopout"); - - export default new class CustomCSS extends Builtin { get name() {return "Custom CSS";} @@ -20,7 +17,8 @@ export default new class CustomCSS extends Builtin { constructor() { super(); - this.css = ""; + this.savedCss = ""; + this.insertedCss = ""; } async enabled() { @@ -32,7 +30,7 @@ export default new class CustomCSS extends Builtin { Settings.registerPanel(this.id, this.name, { order: 2, element: () => [, React.createElement(CSSEditor, { - css: this.css, + css: this.savedCss, save: this.saveCSS.bind(this), update: this.insertCSS.bind(this), openNative: this.openNative.bind(this), @@ -45,7 +43,7 @@ export default new class CustomCSS extends Builtin { } }); this.loadCSS(); - this.insertCSS(); + this.insertCSS(this.savedCss); } disabled() { @@ -53,11 +51,12 @@ export default new class CustomCSS extends Builtin { } loadCSS() { - this.css = DataStore.loadCustomCSS(); + this.savedCss = DataStore.loadCustomCSS(); } insertCSS(newCss) { - if (typeof(newCss) === "undefined") newCss = this.css; + if (typeof(newCss) === "undefined") newCss = this.insertedCss; + else this.insertedCss = newCss; if ($("#customcss").length == 0) { $("head").append(""); } @@ -65,8 +64,8 @@ export default new class CustomCSS extends Builtin { } saveCSS(newCss) { - if (typeof(newCss) !== "undefined") this.css = newCss; - DataStore.saveCustomCSS(this.css); + if (typeof(newCss) !== "undefined") this.savedCss = newCss; + DataStore.saveCustomCSS(this.savedCss); } openNative() { @@ -98,8 +97,8 @@ export default new class CustomCSS extends Builtin { width: 500, center: true }), React.createElement(CSSEditor, { - editorId: "bd-floating-editor", - css: this.css, + id: "bd-floating-editor", + css: this.savedCss, save: this.saveCSS.bind(this), update: this.insertCSS.bind(this), openNative: this.openNative.bind(this) diff --git a/src/ui/customcss/csseditor.jsx b/src/ui/customcss/csseditor.jsx new file mode 100644 index 00000000..05d0e3bf --- /dev/null +++ b/src/ui/customcss/csseditor.jsx @@ -0,0 +1,53 @@ +import {React, Settings} from "modules"; + +import Editor from "./editor"; +// import Checkbox from "./checkbox"; + +export default class CssEditor extends React.Component { + + constructor(props) { + super(props); + + this.toggleLiveUpdate = this.toggleLiveUpdate.bind(this); + this.updateCss = this.updateCss.bind(this); + this.saveCss = this.saveCss.bind(this); + this.openDetached = this.props.openDetached ? this.openDetached.bind(this) : null; + this.openNative = this.openNative.bind(this); + + this.checkboxes = [{label: "Live Update", onChange: this.toggleLiveUpdate, checked: Settings.get("settings", "customcss", "liveUpdate")}]; + this.buttons = [ + {label: "Update", onClick: this.updateCss}, + {label: "Save", onClick: this.saveCss}, + {label: "Open Natively", onClick: this.openNative}, + {label: "Settings", onClick: "showSettings"} + ]; + if (this.openDetached) this.buttons.push({label: "Detach", onClick: this.openDetached}); + this.notice = this.openDetached ? "Unsaved changes are lost on detach" : null; + } + + render() { + return ; + } + + toggleLiveUpdate(checked) { + Settings.set("settings", "customcss", "liveUpdate", checked); + } + + updateCss() { + const newCss = this.editor.session.getValue(); + if (this.props.update) this.props.update(newCss); + } + + saveCss() { + const newCss = this.editor.session.getValue(); + if (this.props.save) this.props.save(newCss); + } + + openDetached() { + if (this.props.openDetached) this.props.openDetached(); + } + + openNative() { + if (this.props.openNative) this.props.openNative(); + } +} \ No newline at end of file diff --git a/src/ui/customcss/editor.jsx b/src/ui/customcss/editor.jsx index d58f2998..32f95ee6 100644 --- a/src/ui/customcss/editor.jsx +++ b/src/ui/customcss/editor.jsx @@ -1,22 +1,42 @@ -import {React, Settings} from "modules"; +import {React} from "modules"; import Checkbox from "./checkbox"; -import SettingsTitle from "../settings/title"; -export default class CssEditor extends React.Component { +const languages = ["abap", "abc", "actionscript", "ada", "apache_conf", "asciidoc", "assembly_x86", "autohotkey", "batchfile", "bro", "c_cpp", "c9search", "cirru", "clojure", "cobol", "coffee", "coldfusion", "csharp", "csound_document", "csound_orchestra", "csound_score", "css", "curly", "d", "dart", "diff", "dockerfile", "dot", "drools", "dummy", "dummysyntax", "eiffel", "ejs", "elixir", "elm", "erlang", "forth", "fortran", "ftl", "gcode", "gherkin", "gitignore", "glsl", "gobstones", "golang", "graphqlschema", "groovy", "haml", "handlebars", "haskell", "haskell_cabal", "haxe", "hjson", "html", "html_elixir", "html_ruby", "ini", "io", "jack", "jade", "java", "javascript", "json", "jsoniq", "jsp", "jssm", "jsx", "julia", "kotlin", "latex", "less", "liquid", "lisp", "livescript", "logiql", "lsl", "lua", "luapage", "lucene", "makefile", "markdown", "mask", "matlab", "maze", "mel", "mushcode", "mysql", "nix", "nsis", "objectivec", "ocaml", "pascal", "perl", "pgsql", "php", "pig", "powershell", "praat", "prolog", "properties", "protobuf", "python", "r", "razor", "rdoc", "red", "rhtml", "rst", "ruby", "rust", "sass", "scad", "scala", "scheme", "scss", "sh", "sjs", "smarty", "snippets", "soy_template", "space", "sql", "sqlserver", "stylus", "svg", "swift", "tcl", "tex", "text", "textile", "toml", "tsx", "twig", "typescript", "vala", "vbscript", "velocity", "verilog", "vhdl", "wollok", "xml", "xquery", "yaml", "django"]; +const themes = ["chrome", "clouds", "crimson_editor", "dawn", "dreamweaver", "eclipse", "github", "iplastic", "solarized_light", "textmate", "tomorrow", "xcode", "kuroir", "katzenmilch", "sqlserver", "ambiance", "chaos", "clouds_midnight", "cobalt", "gruvbox", "gob", "idle_fingers", "kr_theme", "merbivore", "merbivore_soft", "mono_industrial", "monokai", "pastel_on_dark", "solarized_dark", "terminal", "tomorrow_night", "tomorrow_night_blue", "tomorrow_night_bright", "tomorrow_night_eighties", "twilight", "vibrant_ink"]; + +export default class CodeEditor extends React.Component { + static get defaultId() {return "bd-editor";} constructor(props) { super(props); + + for (const button of this.props.buttons) { + if (button.onClick == "showSettings") button.onClick = this.showSettings.bind(this); + } - this.toggleLiveUpdate = this.toggleLiveUpdate.bind(this); - this.updateCss = this.updateCss.bind(this); - this.saveCss = this.saveCss.bind(this); - this.openDetached = this.props.openDetached ? this.openDetached.bind(this) : null; - this.openNative = this.openNative.bind(this); + this.props.theme = this.props.theme.toLowerCase().replace(/ /g, "_"); + if (!themes.includes(this.props.theme)) this.props.theme = this.defaultProps.theme; + + this.props.language = this.props.language.toLowerCase().replace(/ /g, "_"); + if (!languages.includes(this.props.language)) this.props.language = this.defaultProps.language; } + static get defaultProps() { + return { + buttons: [], + checkboxes: [], + theme: "monokai", + language: "css", + id: this.defaultId, + fontSize: 14 + }; + } + + static get themes() {return themes;} + componentDidMount() { - this.editor = ace.edit(this.props.editorId || "bd-customcss-editor"); + this.editor = ace.edit(this.props.id); // Add id to the ace menu container const originalShow = this.editor.keyBinding.$defaultHandler.commands.showSettingsMenu.exec; @@ -34,63 +54,49 @@ export default class CssEditor extends React.Component { observer.observe(document.body, {childList: true}); }; - this.editor.setTheme("ace/theme/monokai"); - this.editor.session.setMode("ace/mode/css"); + this.editor.setTheme(`ace/theme/${this.props.theme}`); + this.editor.session.setMode(`ace/mode/${this.props.language}`); this.editor.setShowPrintMargin(false); - this.editor.setFontSize(14); - this.editor.on("change", () => { - if (!Settings.get("settings", "customcss", "liveUpdate")) return; - this.saveCss(); - this.updateCss(); - }); + this.editor.setFontSize(this.props.fontSize); + if (this.props.onChange) { + this.editor.on("change", () => { + this.props.onChange(this.value); + }); + } } componentWillUnmount() { this.editor.destroy(); } + get value() {return this.editor.session.getValue();} + + showSettings() {return this.editor.keyBinding.$defaultHandler.commands.showSettingsMenu.exec(this.editor);} + render() { - return [ -
-
{this.props.css}
-
, -
-
- -
-
- - - - {this.openDetached && [, Unsaved changes are lost on detach]} -
- Press ctrl+, with the editor focused to access the editor's settings. + const buttons = this.props.buttons.map(button => + + ); + + const checkboxes = this.props.checkboxes.map(checkbox => + + ); + + return
+
+
{this.props.value}
-
-
- ]; - } - - toggleLiveUpdate(checked) { - Settings.set("settings", "customcss", "liveUpdate", checked); - } - - updateCss() { - const newCss = this.editor.session.getValue(); - if (this.props.update) this.props.update(newCss); - } - - saveCss() { - const newCss = this.editor.session.getValue(); - if (this.props.save) this.props.save(newCss); - } - - openDetached() { - if (this.props.openDetached) this.props.openDetached(); - } - - openNative() { - if (this.props.openNative) this.props.openNative(); +
+ {checkboxes.length &&
{checkboxes}
} +
+ {buttons} + {this.props.notice && {this.props.notice}} +
+ {this.props.showHelp &&
+ Press ctrl+, with the editor focused to access the editor's settings. +
} +
+
; } } \ No newline at end of file