@webiny/app-admin 5.34.8 → 5.35.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/icons/add-18px.svg +1 -1
- package/assets/icons/arrow_drop_down-24px.svg +1 -1
- package/assets/icons/filter-24px.svg +1 -1
- package/assets/icons/highlight-24px.svg +1 -1
- package/assets/icons/info.svg +1 -1
- package/assets/icons/insert_drive_file-24px.svg +1 -1
- package/assets/icons/insert_photo-24px.svg +1 -1
- package/assets/icons/label-24px.svg +1 -1
- package/assets/icons/round-account_circle-24px.svg +1 -1
- package/assets/icons/round-arrow_drop_down-24px.svg +1 -1
- package/assets/icons/round-help-24px.svg +1 -1
- package/assets/icons/round-settings-24px.svg +1 -1
- package/assets/icons/today-24px.svg +1 -1
- package/assets/icons/touch_app.svg +1 -1
- package/base/Admin.js +1 -15
- package/base/Admin.js.map +1 -1
- package/base/Base.js +6 -44
- package/base/Base.js.map +1 -1
- package/base/plugins/AddGraphQLQuerySelection.js +5 -9
- package/base/plugins/AddGraphQLQuerySelection.js.map +1 -1
- package/base/providers/ApolloProvider.js +0 -5
- package/base/providers/ApolloProvider.js.map +1 -1
- package/base/providers/TelemetryProvider.js +1 -7
- package/base/providers/TelemetryProvider.js.map +1 -1
- package/base/providers/UiStateProvider.js +0 -5
- package/base/providers/UiStateProvider.js.map +1 -1
- package/base/providers/ViewCompositionProvider.js +3 -16
- package/base/providers/ViewCompositionProvider.js.map +1 -1
- package/base/ui/Brand.js +0 -4
- package/base/ui/Brand.js.map +1 -1
- package/base/ui/CenteredView.js +2 -7
- package/base/ui/CenteredView.js.map +1 -1
- package/base/ui/Dashboard.js +0 -4
- package/base/ui/Dashboard.js.map +1 -1
- package/base/ui/FileManager.d.ts +67 -0
- package/base/ui/FileManager.js +61 -0
- package/base/ui/FileManager.js.map +1 -0
- package/base/ui/Layout.js +1 -6
- package/base/ui/Layout.js.map +1 -1
- package/base/ui/LocaleSelector.js +0 -4
- package/base/ui/LocaleSelector.js.map +1 -1
- package/base/ui/LoginScreen.js +0 -6
- package/base/ui/LoginScreen.js.map +1 -1
- package/base/ui/Logo.js +0 -6
- package/base/ui/Logo.js.map +1 -1
- package/base/ui/Menu.js +2 -31
- package/base/ui/Menu.js.map +1 -1
- package/base/ui/Navigation.js +11 -44
- package/base/ui/Navigation.js.map +1 -1
- package/base/ui/NotFound.js +0 -4
- package/base/ui/NotFound.js.map +1 -1
- package/base/ui/Search.js +5 -23
- package/base/ui/Search.js.map +1 -1
- package/base/ui/Tags.js +1 -8
- package/base/ui/Tags.js.map +1 -1
- package/base/ui/UserMenu.js +5 -29
- package/base/ui/UserMenu.js.map +1 -1
- package/components/AdminLayout.js +1 -6
- package/components/AdminLayout.js.map +1 -1
- package/components/AppInstaller/AppInstaller.js +18 -84
- package/components/AppInstaller/AppInstaller.js.map +1 -1
- package/components/AppInstaller/Sidebar.js +11 -44
- package/components/AppInstaller/Sidebar.js.map +1 -1
- package/components/AppInstaller/index.js +0 -7
- package/components/AppInstaller/index.js.map +1 -1
- package/components/AppInstaller/styled.d.ts +17 -5
- package/components/AppInstaller/styled.js +0 -4
- package/components/AppInstaller/styled.js.map +1 -1
- package/components/AppInstaller/useInstaller.d.ts +1 -7
- package/components/AppInstaller/useInstaller.js +72 -183
- package/components/AppInstaller/useInstaller.js.map +1 -1
- package/components/EmptyView.js +4 -12
- package/components/EmptyView.js.map +1 -1
- package/components/FloatingActionButton.js +2 -8
- package/components/FloatingActionButton.js.map +1 -1
- package/components/MultiImageUpload.js +1 -10
- package/components/MultiImageUpload.js.map +1 -1
- package/components/OverlayLayout/OverlayLayout.js +9 -38
- package/components/OverlayLayout/OverlayLayout.js.map +1 -1
- package/components/OverlayLayout/index.js +0 -2
- package/components/OverlayLayout/index.js.map +1 -1
- package/components/Permissions/Permissions.d.ts +2 -0
- package/components/Permissions/Permissions.js +25 -27
- package/components/Permissions/Permissions.js.map +1 -1
- package/components/Permissions/StyledComponents.js +0 -7
- package/components/Permissions/StyledComponents.js.map +1 -1
- package/components/Permissions/index.js +0 -3
- package/components/Permissions/index.js.map +1 -1
- package/components/RichTextEditor/RichTextEditor.js +0 -7
- package/components/RichTextEditor/RichTextEditor.js.map +1 -1
- package/components/RichTextEditor/index.js +0 -2
- package/components/RichTextEditor/index.js.map +1 -1
- package/components/RichTextEditor/tools/header/index.js +62 -102
- package/components/RichTextEditor/tools/header/index.js.map +1 -1
- package/components/RichTextEditor/tools/image/index.js +15 -36
- package/components/RichTextEditor/tools/image/index.js.map +1 -1
- package/components/RichTextEditor/tools/image/svgs.js.map +1 -1
- package/components/RichTextEditor/tools/image/tunes.js +5 -22
- package/components/RichTextEditor/tools/image/tunes.js.map +1 -1
- package/components/RichTextEditor/tools/image/ui.js +16 -39
- package/components/RichTextEditor/tools/image/ui.js.map +1 -1
- package/components/RichTextEditor/tools/paragraph/index.js +55 -81
- package/components/RichTextEditor/tools/paragraph/index.js.map +1 -1
- package/components/RichTextEditor/tools/textColor/index.js +15 -41
- package/components/RichTextEditor/tools/textColor/index.js.map +1 -1
- package/components/RichTextEditor/tools/utils.js +0 -2
- package/components/RichTextEditor/tools/utils.js.map +1 -1
- package/components/Routes.js +6 -13
- package/components/Routes.js.map +1 -1
- package/components/SearchUI.d.ts +1 -0
- package/components/SearchUI.js +14 -14
- package/components/SearchUI.js.map +1 -1
- package/components/SimpleForm/SimpleForm.js +3 -32
- package/components/SimpleForm/SimpleForm.js.map +1 -1
- package/components/SimpleForm/index.js +0 -1
- package/components/SimpleForm/index.js.map +1 -1
- package/components/SimpleUI/InputField.d.ts +2 -0
- package/components/SimpleUI/InputField.js +16 -30
- package/components/SimpleUI/InputField.js.map +1 -1
- package/components/SingleImageUpload.d.ts +1 -1
- package/components/SingleImageUpload.js +14 -30
- package/components/SingleImageUpload.js.map +1 -1
- package/components/SplitView/SplitView.js +1 -20
- package/components/SplitView/SplitView.js.map +1 -1
- package/components/SplitView/index.js +0 -1
- package/components/SplitView/index.js.map +1 -1
- package/components/index.d.ts +1 -1
- package/components/index.js +1 -2
- package/components/index.js.map +1 -1
- package/hooks/useConfirmationDialog.js +6 -18
- package/hooks/useConfirmationDialog.js.map +1 -1
- package/hooks/useDialog.js +0 -5
- package/hooks/useDialog.js.map +1 -1
- package/hooks/useSnackbar.js +0 -5
- package/hooks/useSnackbar.js.map +1 -1
- package/index.d.ts +2 -3
- package/index.js +1 -61
- package/index.js.map +1 -1
- package/package.json +22 -32
- package/plugins/MenuPlugin.js +0 -15
- package/plugins/MenuPlugin.js.map +1 -1
- package/plugins/PermissionRendererPlugin.js +0 -15
- package/plugins/PermissionRendererPlugin.js.map +1 -1
- package/plugins/globalSearch/SearchBar.js +5 -53
- package/plugins/globalSearch/SearchBar.js.map +1 -1
- package/plugins/globalSearch/SearchBarDropdown.js +15 -33
- package/plugins/globalSearch/SearchBarDropdown.js.map +1 -1
- package/plugins/globalSearch/index.js.map +1 -1
- package/plugins/globalSearch/styled.d.ts +13 -4
- package/plugins/globalSearch/styled.js +1 -5
- package/plugins/globalSearch/styled.js.map +1 -1
- package/plugins/uiLayoutRenderer/index.js +2 -16
- package/plugins/uiLayoutRenderer/index.js.map +1 -1
- package/styles/theme.scss +31 -1
- package/types.d.ts +23 -27
- package/types.js.map +1 -1
- package/ui/UIElement.js +0 -1
- package/ui/UIElement.js.map +1 -1
- package/ui/UILayout.js +0 -1
- package/ui/UILayout.js.map +1 -1
- package/ui/UIRenderer.js +0 -1
- package/ui/UIRenderer.js.map +1 -1
- package/ui/UIView.js +0 -1
- package/ui/UIView.js.map +1 -1
- package/ui/elements/AccordionElement.js +2 -28
- package/ui/elements/AccordionElement.js.map +1 -1
- package/ui/elements/ButtonElement.js +0 -19
- package/ui/elements/ButtonElement.js.map +1 -1
- package/ui/elements/ButtonGroupElement.js +0 -19
- package/ui/elements/ButtonGroupElement.js.map +1 -1
- package/ui/elements/GenericElement.js +0 -2
- package/ui/elements/GenericElement.js.map +1 -1
- package/ui/elements/LabelElement.js +0 -14
- package/ui/elements/LabelElement.js.map +1 -1
- package/ui/elements/NavigationMenuElement.js +3 -36
- package/ui/elements/NavigationMenuElement.js.map +1 -1
- package/ui/elements/PanelElement.js +0 -11
- package/ui/elements/PanelElement.js.map +1 -1
- package/ui/elements/PlaceholderElement.js +0 -11
- package/ui/elements/PlaceholderElement.js.map +1 -1
- package/ui/elements/SmallButtonElement.js +0 -19
- package/ui/elements/SmallButtonElement.js.map +1 -1
- package/ui/elements/TypographyElement.js +0 -19
- package/ui/elements/TypographyElement.js.map +1 -1
- package/ui/elements/ViewElement.js +0 -2
- package/ui/elements/ViewElement.js.map +1 -1
- package/ui/elements/form/DynamicFieldsetElement/DynamicFieldsetRowElement.js +0 -16
- package/ui/elements/form/DynamicFieldsetElement/DynamicFieldsetRowElement.js.map +1 -1
- package/ui/elements/form/DynamicFieldsetElement.js +11 -34
- package/ui/elements/form/DynamicFieldsetElement.js.map +1 -1
- package/ui/elements/form/FileManagerElement/EmptyStateElement.js +0 -15
- package/ui/elements/form/FileManagerElement/EmptyStateElement.js.map +1 -1
- package/ui/elements/form/FileManagerElement/EmptyStateElementRenderer.js +5 -27
- package/ui/elements/form/FileManagerElement/EmptyStateElementRenderer.js.map +1 -1
- package/ui/elements/form/FileManagerElement/FileManagerElementRenderer.js +4 -23
- package/ui/elements/form/FileManagerElement/FileManagerElementRenderer.js.map +1 -1
- package/ui/elements/form/FileManagerElement/styled.d.ts +23 -16
- package/ui/elements/form/FileManagerElement/styled.js +0 -5
- package/ui/elements/form/FileManagerElement/styled.js.map +1 -1
- package/ui/elements/form/FileManagerElement.js +0 -20
- package/ui/elements/form/FileManagerElement.js.map +1 -1
- package/ui/elements/form/FormElement.js +0 -21
- package/ui/elements/form/FormElement.js.map +1 -1
- package/ui/elements/form/FormFieldElement.js +0 -33
- package/ui/elements/form/FormFieldElement.js.map +1 -1
- package/ui/elements/form/HiddenElement.js +0 -17
- package/ui/elements/form/HiddenElement.js.map +1 -1
- package/ui/elements/form/InputElement.js +0 -18
- package/ui/elements/form/InputElement.js.map +1 -1
- package/ui/elements/form/PasswordElement.js +0 -15
- package/ui/elements/form/PasswordElement.js.map +1 -1
- package/ui/elements/form/SelectElement.js +1 -19
- package/ui/elements/form/SelectElement.js.map +1 -1
- package/ui/elements/form/TextareaElement.js +0 -17
- package/ui/elements/form/TextareaElement.js.map +1 -1
- package/ui/views/AdminView/ContentElement.js +1 -25
- package/ui/views/AdminView/ContentElement.js.map +1 -1
- package/ui/views/AdminView/HeaderElement.js +0 -40
- package/ui/views/AdminView/HeaderElement.js.map +1 -1
- package/ui/views/AdminView/HeaderSectionCenterElement.js +0 -20
- package/ui/views/AdminView/HeaderSectionCenterElement.js.map +1 -1
- package/ui/views/AdminView/HeaderSectionLeftElement.js +0 -20
- package/ui/views/AdminView/HeaderSectionLeftElement.js.map +1 -1
- package/ui/views/AdminView/HeaderSectionRightElement.js +0 -20
- package/ui/views/AdminView/HeaderSectionRightElement.js.map +1 -1
- package/ui/views/AdminView/components/Dialog.js +10 -21
- package/ui/views/AdminView/components/Dialog.js.map +1 -1
- package/ui/views/AdminView/components/Hamburger.js +2 -10
- package/ui/views/AdminView/components/Hamburger.js.map +1 -1
- package/ui/views/AdminView/components/Snackbar.js +0 -9
- package/ui/views/AdminView/components/Snackbar.js.map +1 -1
- package/ui/views/FormView/FormContainerElement.js +0 -21
- package/ui/views/FormView/FormContainerElement.js.map +1 -1
- package/ui/views/FormView/FormContentElement.js +0 -11
- package/ui/views/FormView/FormContentElement.js.map +1 -1
- package/ui/views/FormView/FormFooterElement.js +0 -19
- package/ui/views/FormView/FormFooterElement.js.map +1 -1
- package/ui/views/FormView/FormHeaderElement.js +2 -24
- package/ui/views/FormView/FormHeaderElement.js.map +1 -1
- package/ui/views/FormView.js +0 -41
- package/ui/views/FormView.js.map +1 -1
- package/ui/views/OverlayView/ContentElement.js +0 -19
- package/ui/views/OverlayView/ContentElement.js.map +1 -1
- package/ui/views/OverlayView/HeaderElement.js +4 -26
- package/ui/views/OverlayView/HeaderElement.js.map +1 -1
- package/ui/views/OverlayView/HeaderTitleElement.js +0 -22
- package/ui/views/OverlayView/HeaderTitleElement.js.map +1 -1
- package/ui/views/OverlayView/useOverlayView.js +3 -13
- package/ui/views/OverlayView/useOverlayView.js.map +1 -1
- package/ui/views/OverlayView.js +4 -38
- package/ui/views/OverlayView.js.map +1 -1
- package/ui/views/SplitView/SplitViewPanelElement.js +2 -22
- package/ui/views/SplitView/SplitViewPanelElement.js.map +1 -1
- package/ui/views/SplitView.js +0 -40
- package/ui/views/SplitView.js.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Tunes","api","actions","onChange","buttons","wrapper","buttonBase","styles","settingsButton","button","buttonActive","settingsButtonActive","toolData","make","CSS","tunes","concat","forEach","tune","title","i18n","t","el","innerHTML","icon","addEventListener","tuneClicked","name","action","dataset","classList","toggle","push","tooltip","onHover","placement","appendChild","tuneName","customFunction","find","contains","svgs","stretched"],"sources":["tunes.ts"],"sourcesContent":["import { API } from \"@editorjs/editorjs\";\nimport { make } from \"./ui\";\nimport svgs from \"./svgs\";\nimport { ImageToolData, Tune, TuneOnChangeCallable } from \"./types\";\n\ninterface TunesParams {\n api: API;\n actions: Tune[];\n onChange: TuneOnChangeCallable;\n}\n/**\n * Working with Block Tunes\n */\nexport default class Tunes {\n private api: API;\n private readonly actions: Tune[];\n private readonly onChange: TuneOnChangeCallable;\n private buttons: Array<HTMLElement>;\n /**\n * @param {object} tune - image tool Tunes managers\n * @param {object} tune.api - Editor API\n * @param {object} tune.actions - list of user defined tunes\n * @param {Function} tune.onChange - tune toggling callback\n */\n constructor({ api, actions, onChange }: TunesParams) {\n this.api = api;\n this.actions = actions;\n this.onChange = onChange;\n this.buttons = [];\n }\n\n /**\n * Available Image tunes\n *\n * @returns {{name: string, icon: string, title: string}[]}\n */\n static get tunes(): Tune[] {\n return [\n {\n name: \"stretched\",\n icon: svgs.stretched,\n title: \"Stretch image\"\n }\n ];\n }\n\n /**\n * Styles\n *\n * @returns {{wrapper: string, buttonBase: *, button: string, buttonActive: *}}\n */\n get CSS() {\n return {\n wrapper: \"\",\n buttonBase: this.api.styles.settingsButton,\n button: \"image-tool__tune\",\n buttonActive: this.api.styles.settingsButtonActive\n };\n }\n\n /**\n * Makes buttons with tunes: stretch image\n *\n * @param {ImageToolData} toolData - generate Elements of tunes\n * @returns {Element}\n */\n render(toolData: ImageToolData): HTMLElement {\n const wrapper = make(\"div\", this.CSS.wrapper);\n\n this.buttons = [];\n\n const tunes = Tunes.tunes.concat(this.actions);\n\n tunes.forEach(tune => {\n const title = this.api.i18n.t(tune.title);\n const el = make(\"div\", [this.CSS.buttonBase, this.CSS.button], {\n innerHTML: tune.icon,\n title\n });\n\n el.addEventListener(\"click\", () => {\n this.tuneClicked(tune.name, tune.action);\n });\n\n el.dataset[\"tune\"] = tune.name;\n const name = tune.name as keyof ImageToolData;\n el.classList.toggle(this.CSS.buttonActive, !!toolData[name]);\n\n this.buttons.push(el);\n\n this.api.tooltip.onHover(el, title, {\n placement: \"top\"\n });\n\n wrapper.appendChild(el);\n });\n\n return wrapper;\n }\n\n /**\n * Clicks to one of the tunes\n *\n * @param {string} tuneName - clicked tune name\n * @param {Function} customFunction - function to execute on click\n */\n tuneClicked(tuneName: string, customFunction?: TuneOnChangeCallable): boolean {\n if (typeof customFunction === \"function\") {\n if (!customFunction(tuneName)) {\n return false;\n }\n }\n\n const button = this.buttons.find(el => el.dataset[\"tune\"] === tuneName);\n\n if (button) {\n button.classList.toggle(\n this.CSS.buttonActive,\n !button.classList.contains(this.CSS.buttonActive)\n );\n }\n\n this.onChange(tuneName);\n return true;\n }\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"names":["Tunes","api","actions","onChange","buttons","wrapper","buttonBase","styles","settingsButton","button","buttonActive","settingsButtonActive","toolData","make","CSS","tunes","concat","forEach","tune","title","i18n","t","el","innerHTML","icon","addEventListener","tuneClicked","name","action","dataset","classList","toggle","push","tooltip","onHover","placement","appendChild","tuneName","customFunction","find","contains","svgs","stretched"],"sources":["tunes.ts"],"sourcesContent":["import { API } from \"@editorjs/editorjs\";\nimport { make } from \"./ui\";\nimport svgs from \"./svgs\";\nimport { ImageToolData, Tune, TuneOnChangeCallable } from \"./types\";\n\ninterface TunesParams {\n api: API;\n actions: Tune[];\n onChange: TuneOnChangeCallable;\n}\n/**\n * Working with Block Tunes\n */\nexport default class Tunes {\n private api: API;\n private readonly actions: Tune[];\n private readonly onChange: TuneOnChangeCallable;\n private buttons: Array<HTMLElement>;\n /**\n * @param {object} tune - image tool Tunes managers\n * @param {object} tune.api - Editor API\n * @param {object} tune.actions - list of user defined tunes\n * @param {Function} tune.onChange - tune toggling callback\n */\n constructor({ api, actions, onChange }: TunesParams) {\n this.api = api;\n this.actions = actions;\n this.onChange = onChange;\n this.buttons = [];\n }\n\n /**\n * Available Image tunes\n *\n * @returns {{name: string, icon: string, title: string}[]}\n */\n static get tunes(): Tune[] {\n return [\n {\n name: \"stretched\",\n icon: svgs.stretched,\n title: \"Stretch image\"\n }\n ];\n }\n\n /**\n * Styles\n *\n * @returns {{wrapper: string, buttonBase: *, button: string, buttonActive: *}}\n */\n get CSS() {\n return {\n wrapper: \"\",\n buttonBase: this.api.styles.settingsButton,\n button: \"image-tool__tune\",\n buttonActive: this.api.styles.settingsButtonActive\n };\n }\n\n /**\n * Makes buttons with tunes: stretch image\n *\n * @param {ImageToolData} toolData - generate Elements of tunes\n * @returns {Element}\n */\n render(toolData: ImageToolData): HTMLElement {\n const wrapper = make(\"div\", this.CSS.wrapper);\n\n this.buttons = [];\n\n const tunes = Tunes.tunes.concat(this.actions);\n\n tunes.forEach(tune => {\n const title = this.api.i18n.t(tune.title);\n const el = make(\"div\", [this.CSS.buttonBase, this.CSS.button], {\n innerHTML: tune.icon,\n title\n });\n\n el.addEventListener(\"click\", () => {\n this.tuneClicked(tune.name, tune.action);\n });\n\n el.dataset[\"tune\"] = tune.name;\n const name = tune.name as keyof ImageToolData;\n el.classList.toggle(this.CSS.buttonActive, !!toolData[name]);\n\n this.buttons.push(el);\n\n this.api.tooltip.onHover(el, title, {\n placement: \"top\"\n });\n\n wrapper.appendChild(el);\n });\n\n return wrapper;\n }\n\n /**\n * Clicks to one of the tunes\n *\n * @param {string} tuneName - clicked tune name\n * @param {Function} customFunction - function to execute on click\n */\n tuneClicked(tuneName: string, customFunction?: TuneOnChangeCallable): boolean {\n if (typeof customFunction === \"function\") {\n if (!customFunction(tuneName)) {\n return false;\n }\n }\n\n const button = this.buttons.find(el => el.dataset[\"tune\"] === tuneName);\n\n if (button) {\n button.classList.toggle(\n this.CSS.buttonActive,\n !button.classList.contains(this.CSS.buttonActive)\n );\n }\n\n this.onChange(tuneName);\n return true;\n }\n}\n"],"mappings":";;;;;;;;;;AACA;AACA;AAQA;AACA;AACA;AAFA,IAGqBA,KAAK;EAKtB;AACJ;AACA;AACA;AACA;AACA;EACI,qBAAqD;IAAA,IAAvCC,GAAG,QAAHA,GAAG;MAAEC,OAAO,QAAPA,OAAO;MAAEC,QAAQ,QAARA,QAAQ;IAAA;IAAA;IAAA;IAAA;IAAA;IAChC,IAAI,CAACF,GAAG,GAAGA,GAAG;IACd,IAAI,CAACC,OAAO,GAAGA,OAAO;IACtB,IAAI,CAACC,QAAQ,GAAGA,QAAQ;IACxB,IAAI,CAACC,OAAO,GAAG,EAAE;EACrB;;EAEA;AACJ;AACA;AACA;AACA;EAJI;IAAA;IAAA;IAeA;AACJ;AACA;AACA;AACA;IACI,eAAU;MACN,OAAO;QACHC,OAAO,EAAE,EAAE;QACXC,UAAU,EAAE,IAAI,CAACL,GAAG,CAACM,MAAM,CAACC,cAAc;QAC1CC,MAAM,EAAE,kBAAkB;QAC1BC,YAAY,EAAE,IAAI,CAACT,GAAG,CAACM,MAAM,CAACI;MAClC,CAAC;IACL;;IAEA;AACJ;AACA;AACA;AACA;AACA;EALI;IAAA;IAAA,OAMA,gBAAOC,QAAuB,EAAe;MAAA;MACzC,IAAMP,OAAO,GAAG,IAAAQ,QAAI,EAAC,KAAK,EAAE,IAAI,CAACC,GAAG,CAACT,OAAO,CAAC;MAE7C,IAAI,CAACD,OAAO,GAAG,EAAE;MAEjB,IAAMW,KAAK,GAAGf,KAAK,CAACe,KAAK,CAACC,MAAM,CAAC,IAAI,CAACd,OAAO,CAAC;MAE9Ca,KAAK,CAACE,OAAO,CAAC,UAAAC,IAAI,EAAI;QAClB,IAAMC,KAAK,GAAG,KAAI,CAAClB,GAAG,CAACmB,IAAI,CAACC,CAAC,CAACH,IAAI,CAACC,KAAK,CAAC;QACzC,IAAMG,EAAE,GAAG,IAAAT,QAAI,EAAC,KAAK,EAAE,CAAC,KAAI,CAACC,GAAG,CAACR,UAAU,EAAE,KAAI,CAACQ,GAAG,CAACL,MAAM,CAAC,EAAE;UAC3Dc,SAAS,EAAEL,IAAI,CAACM,IAAI;UACpBL,KAAK,EAALA;QACJ,CAAC,CAAC;QAEFG,EAAE,CAACG,gBAAgB,CAAC,OAAO,EAAE,YAAM;UAC/B,KAAI,CAACC,WAAW,CAACR,IAAI,CAACS,IAAI,EAAET,IAAI,CAACU,MAAM,CAAC;QAC5C,CAAC,CAAC;QAEFN,EAAE,CAACO,OAAO,CAAC,MAAM,CAAC,GAAGX,IAAI,CAACS,IAAI;QAC9B,IAAMA,IAAI,GAAGT,IAAI,CAACS,IAA2B;QAC7CL,EAAE,CAACQ,SAAS,CAACC,MAAM,CAAC,KAAI,CAACjB,GAAG,CAACJ,YAAY,EAAE,CAAC,CAACE,QAAQ,CAACe,IAAI,CAAC,CAAC;QAE5D,KAAI,CAACvB,OAAO,CAAC4B,IAAI,CAACV,EAAE,CAAC;QAErB,KAAI,CAACrB,GAAG,CAACgC,OAAO,CAACC,OAAO,CAACZ,EAAE,EAAEH,KAAK,EAAE;UAChCgB,SAAS,EAAE;QACf,CAAC,CAAC;QAEF9B,OAAO,CAAC+B,WAAW,CAACd,EAAE,CAAC;MAC3B,CAAC,CAAC;MAEF,OAAOjB,OAAO;IAClB;;IAEA;AACJ;AACA;AACA;AACA;AACA;EALI;IAAA;IAAA,OAMA,qBAAYgC,QAAgB,EAAEC,cAAqC,EAAW;MAC1E,IAAI,OAAOA,cAAc,KAAK,UAAU,EAAE;QACtC,IAAI,CAACA,cAAc,CAACD,QAAQ,CAAC,EAAE;UAC3B,OAAO,KAAK;QAChB;MACJ;MAEA,IAAM5B,MAAM,GAAG,IAAI,CAACL,OAAO,CAACmC,IAAI,CAAC,UAAAjB,EAAE;QAAA,OAAIA,EAAE,CAACO,OAAO,CAAC,MAAM,CAAC,KAAKQ,QAAQ;MAAA,EAAC;MAEvE,IAAI5B,MAAM,EAAE;QACRA,MAAM,CAACqB,SAAS,CAACC,MAAM,CACnB,IAAI,CAACjB,GAAG,CAACJ,YAAY,EACrB,CAACD,MAAM,CAACqB,SAAS,CAACU,QAAQ,CAAC,IAAI,CAAC1B,GAAG,CAACJ,YAAY,CAAC,CACpD;MACL;MAEA,IAAI,CAACP,QAAQ,CAACkC,QAAQ,CAAC;MACvB,OAAO,IAAI;IACf;EAAC;IAAA;IAAA,KAxFD,eAA2B;MACvB,OAAO,CACH;QACIV,IAAI,EAAE,WAAW;QACjBH,IAAI,EAAEiB,aAAI,CAACC,SAAS;QACpBvB,KAAK,EAAE;MACX,CAAC,CACJ;IACL;EAAC;EAAA;AAAA;AAAA"}
|
|
@@ -1,20 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
-
|
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
7
6
|
});
|
|
8
7
|
exports.make = exports.default = void 0;
|
|
9
|
-
|
|
10
8
|
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
11
|
-
|
|
12
9
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
13
|
-
|
|
14
10
|
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
15
|
-
|
|
16
11
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
17
|
-
|
|
18
12
|
/**
|
|
19
13
|
* Class for working with UI:
|
|
20
14
|
* - rendering base structure
|
|
@@ -31,9 +25,9 @@ var Ui = /*#__PURE__*/function () {
|
|
|
31
25
|
*/
|
|
32
26
|
function Ui(_ref) {
|
|
33
27
|
var api = _ref.api,
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
28
|
+
config = _ref.config,
|
|
29
|
+
onSelectFile = _ref.onSelectFile,
|
|
30
|
+
readOnly = _ref.readOnly;
|
|
37
31
|
(0, _classCallCheck2.default)(this, Ui);
|
|
38
32
|
(0, _defineProperty2.default)(this, "api", void 0);
|
|
39
33
|
(0, _defineProperty2.default)(this, "config", void 0);
|
|
@@ -53,6 +47,7 @@ var Ui = /*#__PURE__*/function () {
|
|
|
53
47
|
contentEditable: !this.readOnly
|
|
54
48
|
})
|
|
55
49
|
};
|
|
50
|
+
|
|
56
51
|
/**
|
|
57
52
|
* Create base structure
|
|
58
53
|
* <wrapper>
|
|
@@ -60,19 +55,17 @@ var Ui = /*#__PURE__*/function () {
|
|
|
60
55
|
* <caption />
|
|
61
56
|
* </wrapper>
|
|
62
57
|
*/
|
|
63
|
-
|
|
64
58
|
this.nodes.caption.dataset["placeholder"] = this.config.captionPlaceholder;
|
|
65
59
|
this.nodes.wrapper.appendChild(this.nodes.imageContainer);
|
|
66
60
|
this.nodes.wrapper.appendChild(this.nodes.caption);
|
|
67
61
|
this.nodes.wrapper.appendChild(this.nodes.fileButton);
|
|
68
62
|
}
|
|
63
|
+
|
|
69
64
|
/**
|
|
70
65
|
* CSS classes
|
|
71
66
|
*
|
|
72
67
|
* @returns {object}
|
|
73
68
|
*/
|
|
74
|
-
|
|
75
|
-
|
|
76
69
|
(0, _createClass2.default)(Ui, [{
|
|
77
70
|
key: "CSS",
|
|
78
71
|
get: function get() {
|
|
@@ -80,7 +73,6 @@ var Ui = /*#__PURE__*/function () {
|
|
|
80
73
|
baseClass: this.api.styles.block,
|
|
81
74
|
input: this.api.styles.input,
|
|
82
75
|
button: this.api.styles.button,
|
|
83
|
-
|
|
84
76
|
/**
|
|
85
77
|
* Tool's classes
|
|
86
78
|
*/
|
|
@@ -90,6 +82,7 @@ var Ui = /*#__PURE__*/function () {
|
|
|
90
82
|
caption: "image-tool__caption"
|
|
91
83
|
};
|
|
92
84
|
}
|
|
85
|
+
|
|
93
86
|
/**
|
|
94
87
|
* Ui statuses:
|
|
95
88
|
* - empty
|
|
@@ -97,7 +90,6 @@ var Ui = /*#__PURE__*/function () {
|
|
|
97
90
|
*
|
|
98
91
|
* @returns {{EMPTY: string, UPLOADING: string, FILLED: string}}
|
|
99
92
|
*/
|
|
100
|
-
|
|
101
93
|
}, {
|
|
102
94
|
key: "render",
|
|
103
95
|
value:
|
|
@@ -111,20 +103,18 @@ var Ui = /*#__PURE__*/function () {
|
|
|
111
103
|
if (!toolData.file || Object.keys(toolData.file).length === 0) {
|
|
112
104
|
this.toggleStatus(Ui.status.EMPTY);
|
|
113
105
|
}
|
|
114
|
-
|
|
115
106
|
return this.nodes.wrapper;
|
|
116
107
|
}
|
|
108
|
+
|
|
117
109
|
/**
|
|
118
110
|
* Creates upload-file button
|
|
119
111
|
*
|
|
120
112
|
* @returns {Element}
|
|
121
113
|
*/
|
|
122
|
-
|
|
123
114
|
}, {
|
|
124
115
|
key: "createFileButton",
|
|
125
116
|
value: function createFileButton() {
|
|
126
117
|
var _this = this;
|
|
127
|
-
|
|
128
118
|
var button = make("div", [this.CSS.button]);
|
|
129
119
|
button.innerHTML = this.api.i18n.t("Select an Image");
|
|
130
120
|
button.addEventListener("click", function () {
|
|
@@ -132,18 +122,17 @@ var Ui = /*#__PURE__*/function () {
|
|
|
132
122
|
});
|
|
133
123
|
return button;
|
|
134
124
|
}
|
|
125
|
+
|
|
135
126
|
/**
|
|
136
127
|
* Shows an image
|
|
137
128
|
*
|
|
138
129
|
* @param {string} url - image source
|
|
139
130
|
* @returns {void}
|
|
140
131
|
*/
|
|
141
|
-
|
|
142
132
|
}, {
|
|
143
133
|
key: "fillImage",
|
|
144
134
|
value: function fillImage(url) {
|
|
145
135
|
var _this2 = this;
|
|
146
|
-
|
|
147
136
|
/**
|
|
148
137
|
* Check for a source extension to compose element correctly: video tag for mp4, img — for others
|
|
149
138
|
*/
|
|
@@ -151,6 +140,7 @@ var Ui = /*#__PURE__*/function () {
|
|
|
151
140
|
var attributes = {
|
|
152
141
|
src: url
|
|
153
142
|
};
|
|
143
|
+
|
|
154
144
|
/**
|
|
155
145
|
* We use eventName variable because IMG and VIDEO tags have different event to be called on source load
|
|
156
146
|
* - IMG: load
|
|
@@ -158,12 +148,11 @@ var Ui = /*#__PURE__*/function () {
|
|
|
158
148
|
*
|
|
159
149
|
* @type {string}
|
|
160
150
|
*/
|
|
161
|
-
|
|
162
151
|
var eventName = "load";
|
|
152
|
+
|
|
163
153
|
/**
|
|
164
154
|
* Update attributes and eventName if source is a mp4 video
|
|
165
155
|
*/
|
|
166
|
-
|
|
167
156
|
if (tag === "VIDEO") {
|
|
168
157
|
/**
|
|
169
158
|
* Add attributes for playing muted mp4 as a gif
|
|
@@ -174,54 +163,52 @@ var Ui = /*#__PURE__*/function () {
|
|
|
174
163
|
attributes.loop = true;
|
|
175
164
|
attributes.muted = true;
|
|
176
165
|
attributes.playsinline = true;
|
|
166
|
+
|
|
177
167
|
/**
|
|
178
168
|
* Change event to be listened
|
|
179
169
|
*
|
|
180
170
|
* @type {string}
|
|
181
171
|
*/
|
|
182
|
-
|
|
183
172
|
eventName = "loadeddata";
|
|
184
173
|
}
|
|
174
|
+
|
|
185
175
|
/**
|
|
186
176
|
* Compose tag with defined attributes
|
|
187
177
|
*
|
|
188
178
|
* @type {Element}
|
|
189
179
|
*/
|
|
190
|
-
|
|
191
|
-
|
|
192
180
|
this.nodes.imageEl = make(tag, this.CSS.imageEl, attributes);
|
|
181
|
+
|
|
193
182
|
/**
|
|
194
183
|
* Add load event listener
|
|
195
184
|
*/
|
|
196
|
-
|
|
197
185
|
this.nodes.imageEl.addEventListener(eventName, function () {
|
|
198
186
|
_this2.toggleStatus(Ui.status.FILLED);
|
|
199
187
|
});
|
|
200
188
|
this.nodes.imageContainer.appendChild(this.nodes.imageEl);
|
|
201
189
|
}
|
|
190
|
+
|
|
202
191
|
/**
|
|
203
192
|
* Shows caption input
|
|
204
193
|
*
|
|
205
194
|
* @param {string} text - caption text
|
|
206
195
|
* @returns {void}
|
|
207
196
|
*/
|
|
208
|
-
|
|
209
197
|
}, {
|
|
210
198
|
key: "fillCaption",
|
|
211
199
|
value: function fillCaption(text) {
|
|
212
200
|
if (!this.nodes.caption) {
|
|
213
201
|
return;
|
|
214
202
|
}
|
|
215
|
-
|
|
216
203
|
this.nodes.caption.innerHTML = text;
|
|
217
204
|
}
|
|
205
|
+
|
|
218
206
|
/**
|
|
219
207
|
* Changes UI status
|
|
220
208
|
*
|
|
221
209
|
* @param {string} status - see {@link Ui.status} constants
|
|
222
210
|
* @returns {void}
|
|
223
211
|
*/
|
|
224
|
-
|
|
225
212
|
}, {
|
|
226
213
|
key: "toggleStatus",
|
|
227
214
|
value: function toggleStatus(status) {
|
|
@@ -229,11 +216,11 @@ var Ui = /*#__PURE__*/function () {
|
|
|
229
216
|
if (Object.prototype.hasOwnProperty.call(Ui.status, statusType) === false) {
|
|
230
217
|
continue;
|
|
231
218
|
}
|
|
232
|
-
|
|
233
219
|
var newStatus = Ui.status[statusType];
|
|
234
220
|
this.nodes.wrapper.classList.toggle("".concat(this.CSS.wrapper, "--").concat(newStatus), status === newStatus);
|
|
235
221
|
}
|
|
236
222
|
}
|
|
223
|
+
|
|
237
224
|
/**
|
|
238
225
|
* Apply visual representation of activated tune
|
|
239
226
|
*
|
|
@@ -241,7 +228,6 @@ var Ui = /*#__PURE__*/function () {
|
|
|
241
228
|
* @param {boolean} status - true for enable, false for disable
|
|
242
229
|
* @returns {void}
|
|
243
230
|
*/
|
|
244
|
-
|
|
245
231
|
}, {
|
|
246
232
|
key: "applyTune",
|
|
247
233
|
value: function applyTune(tuneName, status) {
|
|
@@ -266,27 +252,20 @@ var Ui = /*#__PURE__*/function () {
|
|
|
266
252
|
* @param {object} attributes - any attributes
|
|
267
253
|
* @returns {HTMLElement}
|
|
268
254
|
*/
|
|
269
|
-
|
|
270
|
-
|
|
271
255
|
exports.default = Ui;
|
|
272
|
-
|
|
273
256
|
var make = function make(tagName) {
|
|
274
257
|
var classNames = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
|
|
275
258
|
var attributes = arguments.length > 2 ? arguments[2] : undefined;
|
|
276
259
|
var el = document.createElement(tagName);
|
|
277
|
-
|
|
278
260
|
if (Array.isArray(classNames)) {
|
|
279
261
|
var _el$classList;
|
|
280
|
-
|
|
281
262
|
(_el$classList = el.classList).add.apply(_el$classList, (0, _toConsumableArray2.default)(classNames));
|
|
282
263
|
} else if (classNames) {
|
|
283
264
|
el.classList.add(classNames);
|
|
284
265
|
}
|
|
285
|
-
|
|
286
266
|
if (!attributes) {
|
|
287
267
|
return el;
|
|
288
268
|
}
|
|
289
|
-
|
|
290
269
|
for (var attrName in attributes) {
|
|
291
270
|
/**
|
|
292
271
|
* Unfortunately it is a problem to map attributes to element because element is complaining
|
|
@@ -294,8 +273,6 @@ var make = function make(tagName) {
|
|
|
294
273
|
*/
|
|
295
274
|
el[attrName] = attributes[attrName];
|
|
296
275
|
}
|
|
297
|
-
|
|
298
276
|
return el;
|
|
299
277
|
};
|
|
300
|
-
|
|
301
278
|
exports.make = make;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Ui","api","config","onSelectFile","readOnly","nodes","wrapper","make","CSS","baseClass","imageContainer","fileButton","createFileButton","imageEl","undefined","caption","input","contentEditable","dataset","captionPlaceholder","appendChild","styles","block","button","toolData","file","Object","keys","length","toggleStatus","status","EMPTY","innerHTML","i18n","t","addEventListener","url","tag","test","attributes","src","eventName","autoplay","loop","muted","playsinline","FILLED","text","statusType","prototype","hasOwnProperty","call","newStatus","classList","toggle","tuneName","tagName","classNames","el","document","createElement","Array","isArray","add","attrName"],"sources":["ui.ts"],"sourcesContent":["import { API } from \"@editorjs/editorjs\";\nimport { ImageToolConfig, ImageToolData } from \"./types\";\n\ninterface OnSelectFileCallable {\n (): void;\n}\ninterface UiStatus {\n EMPTY: \"empty\";\n FILLED: \"filled\";\n [key: string]: string;\n}\ninterface UiParams {\n api: API;\n config: ImageToolConfig;\n onSelectFile: OnSelectFileCallable;\n readOnly: boolean;\n}\n/**\n * Class for working with UI:\n * - rendering base structure\n * - show/hide preview\n * - apply tune view\n */\nexport default class Ui {\n private api: API;\n private config: ImageToolConfig;\n private readonly readOnly: boolean;\n private readonly onSelectFile: OnSelectFileCallable;\n\n public readonly nodes: {\n wrapper: HTMLElement;\n imageContainer: HTMLElement;\n fileButton: HTMLElement;\n imageEl?: HTMLElement;\n caption: HTMLElement;\n };\n\n /**\n * @param ui - image tool Ui module\n * @param ui.api - Editor.js API\n * @param ui.config - user config\n * @param ui.onSelectFile - callback for clicks on Select file button\n * @param ui.readOnly - read-only mode flag\n */\n constructor({ api, config, onSelectFile, readOnly }: UiParams) {\n this.api = api;\n this.config = config;\n this.onSelectFile = onSelectFile;\n this.readOnly = readOnly;\n this.nodes = {\n wrapper: make(\"div\", [this.CSS.baseClass, this.CSS.wrapper]),\n imageContainer: make(\"div\", [this.CSS.imageContainer]),\n fileButton: this.createFileButton(),\n imageEl: undefined,\n caption: make(\"div\", [this.CSS.input, this.CSS.caption], {\n contentEditable: !this.readOnly\n })\n };\n\n /**\n * Create base structure\n * <wrapper>\n * <image-container/>\n * <caption />\n * </wrapper>\n */\n this.nodes.caption.dataset[\"placeholder\"] = this.config.captionPlaceholder;\n this.nodes.wrapper.appendChild(this.nodes.imageContainer);\n this.nodes.wrapper.appendChild(this.nodes.caption);\n this.nodes.wrapper.appendChild(this.nodes.fileButton);\n }\n\n /**\n * CSS classes\n *\n * @returns {object}\n */\n get CSS() {\n return {\n baseClass: this.api.styles.block,\n input: this.api.styles.input,\n button: this.api.styles.button,\n\n /**\n * Tool's classes\n */\n wrapper: \"image-tool\",\n imageContainer: \"image-tool__image\",\n imageEl: \"image-tool__image-picture\",\n caption: \"image-tool__caption\"\n };\n }\n\n /**\n * Ui statuses:\n * - empty\n * - filled\n *\n * @returns {{EMPTY: string, UPLOADING: string, FILLED: string}}\n */\n static get status(): UiStatus {\n return {\n EMPTY: \"empty\",\n FILLED: \"filled\"\n };\n }\n\n /**\n * Renders tool UI\n *\n * @param {ImageToolData} toolData - saved tool data\n * @returns {Element}\n */\n render(toolData: ImageToolData) {\n if (!toolData.file || Object.keys(toolData.file).length === 0) {\n this.toggleStatus(Ui.status.EMPTY);\n }\n\n return this.nodes.wrapper;\n }\n\n /**\n * Creates upload-file button\n *\n * @returns {Element}\n */\n createFileButton() {\n const button = make(\"div\", [this.CSS.button]);\n\n button.innerHTML = this.api.i18n.t(\"Select an Image\");\n\n button.addEventListener(\"click\", () => {\n this.onSelectFile();\n });\n\n return button;\n }\n\n /**\n * Shows an image\n *\n * @param {string} url - image source\n * @returns {void}\n */\n public fillImage(url: string): void {\n /**\n * Check for a source extension to compose element correctly: video tag for mp4, img — for others\n */\n const tag = /\\.mp4$/.test(url) ? \"VIDEO\" : \"IMG\";\n\n const attributes: any = {\n src: url\n };\n\n /**\n * We use eventName variable because IMG and VIDEO tags have different event to be called on source load\n * - IMG: load\n * - VIDEO: loadeddata\n *\n * @type {string}\n */\n let eventName = \"load\";\n\n /**\n * Update attributes and eventName if source is a mp4 video\n */\n if (tag === \"VIDEO\") {\n /**\n * Add attributes for playing muted mp4 as a gif\n *\n * @type {boolean}\n */\n attributes.autoplay = true;\n attributes.loop = true;\n attributes.muted = true;\n attributes.playsinline = true;\n\n /**\n * Change event to be listened\n *\n * @type {string}\n */\n eventName = \"loadeddata\";\n }\n\n /**\n * Compose tag with defined attributes\n *\n * @type {Element}\n */\n this.nodes.imageEl = make(tag, this.CSS.imageEl, attributes);\n\n /**\n * Add load event listener\n */\n this.nodes.imageEl.addEventListener(eventName, () => {\n this.toggleStatus(Ui.status.FILLED);\n });\n\n this.nodes.imageContainer.appendChild(this.nodes.imageEl);\n }\n\n /**\n * Shows caption input\n *\n * @param {string} text - caption text\n * @returns {void}\n */\n public fillCaption(text: string): void {\n if (!this.nodes.caption) {\n return;\n }\n this.nodes.caption.innerHTML = text;\n }\n\n /**\n * Changes UI status\n *\n * @param {string} status - see {@link Ui.status} constants\n * @returns {void}\n */\n public toggleStatus(status: string): void {\n for (const statusType in Ui.status) {\n if (Object.prototype.hasOwnProperty.call(Ui.status, statusType) === false) {\n continue;\n }\n const newStatus = Ui.status[statusType];\n this.nodes.wrapper.classList.toggle(\n `${this.CSS.wrapper}--${newStatus}`,\n status === newStatus\n );\n }\n }\n\n /**\n * Apply visual representation of activated tune\n *\n * @param {string} tuneName - one of available tunes {@link Tunes.tunes}\n * @param {boolean} status - true for enable, false for disable\n * @returns {void}\n */\n public applyTune(tuneName: string, status: boolean) {\n this.nodes.wrapper.classList.toggle(`${this.CSS.wrapper}--${tuneName}`, status);\n }\n}\n\n/**\n * Helper for making Elements with attributes\n *\n * @param {string} tagName - new Element tag name\n * @param {Array|string} classNames - list or name of CSS class\n * @param {object} attributes - any attributes\n * @returns {HTMLElement}\n */\nexport const make = function make(\n tagName: string,\n classNames: string[] | string | null = null,\n attributes?: Record<string, string | number | boolean>\n): HTMLElement {\n const el: HTMLElement = document.createElement(tagName);\n\n if (Array.isArray(classNames)) {\n el.classList.add(...classNames);\n } else if (classNames) {\n el.classList.add(classNames);\n }\n\n if (!attributes) {\n return el;\n }\n for (const attrName in attributes) {\n /**\n * Unfortunately it is a problem to map attributes to element because element is complaining\n * that attrName is a string, which cannot index the HTMLElement\n */\n (el as any)[attrName] = (attributes as any)[attrName];\n }\n\n return el;\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["Ui","api","config","onSelectFile","readOnly","nodes","wrapper","make","CSS","baseClass","imageContainer","fileButton","createFileButton","imageEl","undefined","caption","input","contentEditable","dataset","captionPlaceholder","appendChild","styles","block","button","toolData","file","Object","keys","length","toggleStatus","status","EMPTY","innerHTML","i18n","t","addEventListener","url","tag","test","attributes","src","eventName","autoplay","loop","muted","playsinline","FILLED","text","statusType","prototype","hasOwnProperty","call","newStatus","classList","toggle","tuneName","tagName","classNames","el","document","createElement","Array","isArray","add","attrName"],"sources":["ui.ts"],"sourcesContent":["import { API } from \"@editorjs/editorjs\";\nimport { ImageToolConfig, ImageToolData } from \"./types\";\n\ninterface OnSelectFileCallable {\n (): void;\n}\ninterface UiStatus {\n EMPTY: \"empty\";\n FILLED: \"filled\";\n [key: string]: string;\n}\ninterface UiParams {\n api: API;\n config: ImageToolConfig;\n onSelectFile: OnSelectFileCallable;\n readOnly: boolean;\n}\n/**\n * Class for working with UI:\n * - rendering base structure\n * - show/hide preview\n * - apply tune view\n */\nexport default class Ui {\n private api: API;\n private config: ImageToolConfig;\n private readonly readOnly: boolean;\n private readonly onSelectFile: OnSelectFileCallable;\n\n public readonly nodes: {\n wrapper: HTMLElement;\n imageContainer: HTMLElement;\n fileButton: HTMLElement;\n imageEl?: HTMLElement;\n caption: HTMLElement;\n };\n\n /**\n * @param ui - image tool Ui module\n * @param ui.api - Editor.js API\n * @param ui.config - user config\n * @param ui.onSelectFile - callback for clicks on Select file button\n * @param ui.readOnly - read-only mode flag\n */\n constructor({ api, config, onSelectFile, readOnly }: UiParams) {\n this.api = api;\n this.config = config;\n this.onSelectFile = onSelectFile;\n this.readOnly = readOnly;\n this.nodes = {\n wrapper: make(\"div\", [this.CSS.baseClass, this.CSS.wrapper]),\n imageContainer: make(\"div\", [this.CSS.imageContainer]),\n fileButton: this.createFileButton(),\n imageEl: undefined,\n caption: make(\"div\", [this.CSS.input, this.CSS.caption], {\n contentEditable: !this.readOnly\n })\n };\n\n /**\n * Create base structure\n * <wrapper>\n * <image-container/>\n * <caption />\n * </wrapper>\n */\n this.nodes.caption.dataset[\"placeholder\"] = this.config.captionPlaceholder;\n this.nodes.wrapper.appendChild(this.nodes.imageContainer);\n this.nodes.wrapper.appendChild(this.nodes.caption);\n this.nodes.wrapper.appendChild(this.nodes.fileButton);\n }\n\n /**\n * CSS classes\n *\n * @returns {object}\n */\n get CSS() {\n return {\n baseClass: this.api.styles.block,\n input: this.api.styles.input,\n button: this.api.styles.button,\n\n /**\n * Tool's classes\n */\n wrapper: \"image-tool\",\n imageContainer: \"image-tool__image\",\n imageEl: \"image-tool__image-picture\",\n caption: \"image-tool__caption\"\n };\n }\n\n /**\n * Ui statuses:\n * - empty\n * - filled\n *\n * @returns {{EMPTY: string, UPLOADING: string, FILLED: string}}\n */\n static get status(): UiStatus {\n return {\n EMPTY: \"empty\",\n FILLED: \"filled\"\n };\n }\n\n /**\n * Renders tool UI\n *\n * @param {ImageToolData} toolData - saved tool data\n * @returns {Element}\n */\n render(toolData: ImageToolData) {\n if (!toolData.file || Object.keys(toolData.file).length === 0) {\n this.toggleStatus(Ui.status.EMPTY);\n }\n\n return this.nodes.wrapper;\n }\n\n /**\n * Creates upload-file button\n *\n * @returns {Element}\n */\n createFileButton() {\n const button = make(\"div\", [this.CSS.button]);\n\n button.innerHTML = this.api.i18n.t(\"Select an Image\");\n\n button.addEventListener(\"click\", () => {\n this.onSelectFile();\n });\n\n return button;\n }\n\n /**\n * Shows an image\n *\n * @param {string} url - image source\n * @returns {void}\n */\n public fillImage(url: string): void {\n /**\n * Check for a source extension to compose element correctly: video tag for mp4, img — for others\n */\n const tag = /\\.mp4$/.test(url) ? \"VIDEO\" : \"IMG\";\n\n const attributes: any = {\n src: url\n };\n\n /**\n * We use eventName variable because IMG and VIDEO tags have different event to be called on source load\n * - IMG: load\n * - VIDEO: loadeddata\n *\n * @type {string}\n */\n let eventName = \"load\";\n\n /**\n * Update attributes and eventName if source is a mp4 video\n */\n if (tag === \"VIDEO\") {\n /**\n * Add attributes for playing muted mp4 as a gif\n *\n * @type {boolean}\n */\n attributes.autoplay = true;\n attributes.loop = true;\n attributes.muted = true;\n attributes.playsinline = true;\n\n /**\n * Change event to be listened\n *\n * @type {string}\n */\n eventName = \"loadeddata\";\n }\n\n /**\n * Compose tag with defined attributes\n *\n * @type {Element}\n */\n this.nodes.imageEl = make(tag, this.CSS.imageEl, attributes);\n\n /**\n * Add load event listener\n */\n this.nodes.imageEl.addEventListener(eventName, () => {\n this.toggleStatus(Ui.status.FILLED);\n });\n\n this.nodes.imageContainer.appendChild(this.nodes.imageEl);\n }\n\n /**\n * Shows caption input\n *\n * @param {string} text - caption text\n * @returns {void}\n */\n public fillCaption(text: string): void {\n if (!this.nodes.caption) {\n return;\n }\n this.nodes.caption.innerHTML = text;\n }\n\n /**\n * Changes UI status\n *\n * @param {string} status - see {@link Ui.status} constants\n * @returns {void}\n */\n public toggleStatus(status: string): void {\n for (const statusType in Ui.status) {\n if (Object.prototype.hasOwnProperty.call(Ui.status, statusType) === false) {\n continue;\n }\n const newStatus = Ui.status[statusType];\n this.nodes.wrapper.classList.toggle(\n `${this.CSS.wrapper}--${newStatus}`,\n status === newStatus\n );\n }\n }\n\n /**\n * Apply visual representation of activated tune\n *\n * @param {string} tuneName - one of available tunes {@link Tunes.tunes}\n * @param {boolean} status - true for enable, false for disable\n * @returns {void}\n */\n public applyTune(tuneName: string, status: boolean) {\n this.nodes.wrapper.classList.toggle(`${this.CSS.wrapper}--${tuneName}`, status);\n }\n}\n\n/**\n * Helper for making Elements with attributes\n *\n * @param {string} tagName - new Element tag name\n * @param {Array|string} classNames - list or name of CSS class\n * @param {object} attributes - any attributes\n * @returns {HTMLElement}\n */\nexport const make = function make(\n tagName: string,\n classNames: string[] | string | null = null,\n attributes?: Record<string, string | number | boolean>\n): HTMLElement {\n const el: HTMLElement = document.createElement(tagName);\n\n if (Array.isArray(classNames)) {\n el.classList.add(...classNames);\n } else if (classNames) {\n el.classList.add(classNames);\n }\n\n if (!attributes) {\n return el;\n }\n for (const attrName in attributes) {\n /**\n * Unfortunately it is a problem to map attributes to element because element is complaining\n * that attrName is a string, which cannot index the HTMLElement\n */\n (el as any)[attrName] = (attributes as any)[attrName];\n }\n\n return el;\n};\n"],"mappings":"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"}
|