@kookaat/strapi-plugin-tinymce 2.0.2 → 2.0.3

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.
@@ -3,9 +3,9 @@ import { useState, useEffect, useCallback } from "react";
3
3
  import { Box, Flex, Typography, Button } from "@strapi/design-system";
4
4
  import { Earth, Image } from "@strapi/icons";
5
5
  import { Editor } from "@tinymce/tinymce-react";
6
- import { P as PLUGIN_ID } from "./index-C2RU5wAS.mjs";
6
+ import { P as PLUGIN_ID } from "./index-Bc87VSN0.mjs";
7
7
  import { useFetchClient, useStrapiApp } from "@strapi/strapi/admin";
8
- const prefixFileUrlWithBackendUrl = (path, url = process.env.STRAPI_ADMIN_BACKEND_URL || process.env.BACKEND_URL || "http://localhost:1337") => {
8
+ const prefixFileUrlWithBackendUrl = (path, url = window.strapi.backendURL || "http://localhost:1337") => {
9
9
  if (path?.startsWith("http")) {
10
10
  return path;
11
11
  }
@@ -127,4 +127,4 @@ const Wysiwyg = ({ name, onChange, value, label, disabled, error, required, hint
127
127
  export {
128
128
  Wysiwyg as default
129
129
  };
130
- //# sourceMappingURL=Wysiwyg-BJxwboVA.mjs.map
130
+ //# sourceMappingURL=Wysiwyg-Bo6uIgVq.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Wysiwyg-Bo6uIgVq.mjs","sources":["../../admin/src/utils/prefixFileUrlWithBackendUrl.ts","../../admin/src/components/Editor.tsx","../../admin/src/components/MediaLib.tsx","../../admin/src/components/Wysiwyg.tsx"],"sourcesContent":["export const prefixFileUrlWithBackendUrl = (\r\n path: string,\r\n url = window.strapi.backendURL || 'http://localhost:1337',\r\n) => {\r\n if (path?.startsWith('http')) {\r\n // Path is already a full URL. No prefix possible.\r\n return path;\r\n }\r\n\r\n if (url) {\r\n return url + path;\r\n } else {\r\n return path;\r\n }\r\n};\r\n","import { useCallback, useEffect, useState } from 'react';\r\nimport { Editor, IAllProps } from '@tinymce/tinymce-react';\r\nimport { PLUGIN_ID } from '../pluginId';\r\nimport taskRequests from '../api/settings';\r\nimport { useFetchClient } from '@strapi/strapi/admin';\r\nimport { prefixFileUrlWithBackendUrl } from '../utils/prefixFileUrlWithBackendUrl';\r\n\r\ninterface TinyEditorProps {\r\n onChange: (e: any) => void;\r\n name: string;\r\n value?: string;\r\n disabled?: boolean;\r\n}\r\n\r\ntype InitOptions = NonNullable<IAllProps['init']>;\r\n\r\nconst TinyEditor = ({ onChange, name, value, disabled }: TinyEditorProps) => {\r\n const { get, post } = useFetchClient();\r\n\r\n const [pluginConfig, setPluginConfig] = useState<any>(null);\r\n const uploadUrl = prefixFileUrlWithBackendUrl('/api/upload', pluginConfig?.data?.defaultAdminDomain || '');\r\n\r\n useEffect(() => {\r\n const getPluginConfig = async () => {\r\n const editor = await get(`/${PLUGIN_ID}/config/editor`);\r\n if (editor) {\r\n setPluginConfig(editor);\r\n }\r\n };\r\n getPluginConfig();\r\n }, []);\r\n\r\n const imageUploadHandler = useCallback<NonNullable<InitOptions['images_upload_handler']>>(\r\n async (blobInfo) => {\r\n const data = new FormData();\r\n\r\n data.append('files', blobInfo.blob(), blobInfo.filename());\r\n\r\n try {\r\n const res = await post<{ location: string }>(`/${PLUGIN_ID}/uploadImage`, data);\r\n\r\n return res.data.location;\r\n } catch (error) {\r\n console.error('Image upload failed:', error);\r\n\r\n throw error;\r\n }\r\n },\r\n [post],\r\n );\r\n\r\n return pluginConfig?.data ? (\r\n <Editor\r\n tinymceScriptSrc={pluginConfig?.data?.tinymceSrc || undefined}\r\n value={value}\r\n tagName={name}\r\n onEditorChange={(editorContent) => {\r\n onChange({ target: { name, value: editorContent } });\r\n }}\r\n init={{\r\n images_upload_handler: imageUploadHandler,\r\n ...pluginConfig?.data?.editorConfig,\r\n }}\r\n />\r\n ) : (\r\n <></>\r\n );\r\n};\r\n\r\nexport default TinyEditor;\r\n","import React from 'react';\r\nimport { prefixFileUrlWithBackendUrl } from '../utils/prefixFileUrlWithBackendUrl';\r\nimport { useStrapiApp } from '@strapi/strapi/admin';\r\n\r\ninterface MediaLibProps {\r\n isOpen?: boolean;\r\n onChange?: (e: any) => void;\r\n onToggle?: () => void;\r\n}\r\n\r\nconst MediaLib = ({ isOpen, onChange, onToggle }: MediaLibProps) => {\r\n const mediaLibraryDialog = useStrapiApp('mediaLibrary', (state: any) => state.components);\r\n const MediaDialog = mediaLibraryDialog['media-library'];\r\n\r\n\r\n const handleSelectAssets = (files: any) => {\r\n const formattedFiles = files.map((f: any) => ({\r\n alt: f.alternativeText || f.name,\r\n url: prefixFileUrlWithBackendUrl(f.url),\r\n mime: f.mime,\r\n }));\r\n\r\n if (onChange) onChange(formattedFiles);\r\n };\r\n\r\n if (!isOpen) {\r\n return null;\r\n }\r\n\r\n return <MediaDialog onClose={onToggle} onSelectAssets={handleSelectAssets} />;\r\n};\r\n\r\nexport default MediaLib;\r\n","import React, { useState } from 'react';\r\nimport { Box, Button, Flex, Typography } from '@strapi/design-system';\r\nimport { Earth, Image } from '@strapi/icons';\r\nimport TinyEditor from './Editor';\r\nimport MediaLib from './MediaLib';\r\n\r\ninterface WysiwygProps {\r\n disabled?: boolean;\r\n error?: string;\r\n name: string;\r\n onChange: (e: any) => void;\r\n required?: boolean;\r\n label?: string;\r\n placeholder?: string;\r\n hint?: string;\r\n value?: any;\r\n attribute?: any;\r\n}\r\n\r\nconst Wysiwyg = ({ name, onChange, value, label, disabled, error, required, hint, attribute }: WysiwygProps) => {\r\n const localized = Boolean(attribute?.pluginOptions?.i18n?.localized || false);\r\n const [mediaLibVisible, setMediaLibVisible] = useState(false);\r\n\r\n const handleToggleMediaLib = () => setMediaLibVisible((prev) => !prev);\r\n\r\n const handleChangeAssets = (assets: any) => {\r\n let newValue = value ? value : \"\";\r\n\r\n assets.map((asset: any) => {\r\n if (asset.mime.includes(\"image\")) {\r\n const imgTag = `<p><img src=\"${asset.url}\" alt=\"${asset.alt}\"></img></p>`;\r\n newValue = `${newValue}${imgTag}`;\r\n }\r\n if (asset.mime.includes(\"video\")) {\r\n const videoTag = `<video><source src=\"${asset.url}\" alt=\"${asset.alt}\"</source></video>`;\r\n newValue = `${newValue}${videoTag}`;\r\n }\r\n });\r\n\r\n onChange({ target: {name, value: newValue } });\r\n handleToggleMediaLib();\r\n };\r\n\r\n return (\r\n <>\r\n <Box>\r\n {label && (\r\n <Flex paddingBottom={1}>\r\n <Typography variant=\"pi\" fontWeight=\"bold\" textColor=\"neutral800\">\r\n {label}\r\n </Typography>\r\n {required && (\r\n <Typography variant=\"omega\" fontWeight=\"bold\" textColor=\"danger600\">\r\n *\r\n </Typography>\r\n )}\r\n {localized && (\r\n <Flex paddingLeft={1}>\r\n <Earth width={12} height={12}/>\r\n </Flex>\r\n )}\r\n </Flex>\r\n )}\r\n <Button\r\n startIcon={<Image/>}\r\n variant=\"secondary\"\r\n fullWidth\r\n onClick={handleToggleMediaLib}\r\n >\r\n Media library\r\n </Button>\r\n <TinyEditor disabled={Boolean(disabled)} name={name} onChange={onChange} value={value}/>\r\n {(error || hint) && (\r\n <Box paddingTop={1}>\r\n {error ? (\r\n <Typography variant=\"pi\" textColor=\"danger600\">\r\n {error}\r\n </Typography>\r\n ) : (\r\n <Typography variant=\"pi\" textColor=\"neutral600\">\r\n {hint}\r\n </Typography>\r\n )}\r\n </Box>\r\n )}\r\n </Box>\r\n <MediaLib\r\n isOpen={mediaLibVisible}\r\n onChange={handleChangeAssets}\r\n onToggle={handleToggleMediaLib}\r\n />\r\n </>\r\n );\r\n};\r\n\r\nexport default Wysiwyg;\r\n"],"names":[],"mappings":"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"}
@@ -5,9 +5,9 @@ const react = require("react");
5
5
  const designSystem = require("@strapi/design-system");
6
6
  const icons = require("@strapi/icons");
7
7
  const tinymceReact = require("@tinymce/tinymce-react");
8
- const index = require("./index-BKKEJ9ZG.js");
8
+ const index = require("./index-4S82exqN.js");
9
9
  const admin = require("@strapi/strapi/admin");
10
- const prefixFileUrlWithBackendUrl = (path, url = process.env.STRAPI_ADMIN_BACKEND_URL || process.env.BACKEND_URL || "http://localhost:1337") => {
10
+ const prefixFileUrlWithBackendUrl = (path, url = window.strapi.backendURL || "http://localhost:1337") => {
11
11
  if (path?.startsWith("http")) {
12
12
  return path;
13
13
  }
@@ -127,4 +127,4 @@ const Wysiwyg = ({ name, onChange, value, label, disabled, error, required, hint
127
127
  ] });
128
128
  };
129
129
  exports.default = Wysiwyg;
130
- //# sourceMappingURL=Wysiwyg-B5f8_FHm.js.map
130
+ //# sourceMappingURL=Wysiwyg-C1NARvA-.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Wysiwyg-C1NARvA-.js","sources":["../../admin/src/utils/prefixFileUrlWithBackendUrl.ts","../../admin/src/components/Editor.tsx","../../admin/src/components/MediaLib.tsx","../../admin/src/components/Wysiwyg.tsx"],"sourcesContent":["export const prefixFileUrlWithBackendUrl = (\r\n path: string,\r\n url = window.strapi.backendURL || 'http://localhost:1337',\r\n) => {\r\n if (path?.startsWith('http')) {\r\n // Path is already a full URL. No prefix possible.\r\n return path;\r\n }\r\n\r\n if (url) {\r\n return url + path;\r\n } else {\r\n return path;\r\n }\r\n};\r\n","import { useCallback, useEffect, useState } from 'react';\r\nimport { Editor, IAllProps } from '@tinymce/tinymce-react';\r\nimport { PLUGIN_ID } from '../pluginId';\r\nimport taskRequests from '../api/settings';\r\nimport { useFetchClient } from '@strapi/strapi/admin';\r\nimport { prefixFileUrlWithBackendUrl } from '../utils/prefixFileUrlWithBackendUrl';\r\n\r\ninterface TinyEditorProps {\r\n onChange: (e: any) => void;\r\n name: string;\r\n value?: string;\r\n disabled?: boolean;\r\n}\r\n\r\ntype InitOptions = NonNullable<IAllProps['init']>;\r\n\r\nconst TinyEditor = ({ onChange, name, value, disabled }: TinyEditorProps) => {\r\n const { get, post } = useFetchClient();\r\n\r\n const [pluginConfig, setPluginConfig] = useState<any>(null);\r\n const uploadUrl = prefixFileUrlWithBackendUrl('/api/upload', pluginConfig?.data?.defaultAdminDomain || '');\r\n\r\n useEffect(() => {\r\n const getPluginConfig = async () => {\r\n const editor = await get(`/${PLUGIN_ID}/config/editor`);\r\n if (editor) {\r\n setPluginConfig(editor);\r\n }\r\n };\r\n getPluginConfig();\r\n }, []);\r\n\r\n const imageUploadHandler = useCallback<NonNullable<InitOptions['images_upload_handler']>>(\r\n async (blobInfo) => {\r\n const data = new FormData();\r\n\r\n data.append('files', blobInfo.blob(), blobInfo.filename());\r\n\r\n try {\r\n const res = await post<{ location: string }>(`/${PLUGIN_ID}/uploadImage`, data);\r\n\r\n return res.data.location;\r\n } catch (error) {\r\n console.error('Image upload failed:', error);\r\n\r\n throw error;\r\n }\r\n },\r\n [post],\r\n );\r\n\r\n return pluginConfig?.data ? (\r\n <Editor\r\n tinymceScriptSrc={pluginConfig?.data?.tinymceSrc || undefined}\r\n value={value}\r\n tagName={name}\r\n onEditorChange={(editorContent) => {\r\n onChange({ target: { name, value: editorContent } });\r\n }}\r\n init={{\r\n images_upload_handler: imageUploadHandler,\r\n ...pluginConfig?.data?.editorConfig,\r\n }}\r\n />\r\n ) : (\r\n <></>\r\n );\r\n};\r\n\r\nexport default TinyEditor;\r\n","import React from 'react';\r\nimport { prefixFileUrlWithBackendUrl } from '../utils/prefixFileUrlWithBackendUrl';\r\nimport { useStrapiApp } from '@strapi/strapi/admin';\r\n\r\ninterface MediaLibProps {\r\n isOpen?: boolean;\r\n onChange?: (e: any) => void;\r\n onToggle?: () => void;\r\n}\r\n\r\nconst MediaLib = ({ isOpen, onChange, onToggle }: MediaLibProps) => {\r\n const mediaLibraryDialog = useStrapiApp('mediaLibrary', (state: any) => state.components);\r\n const MediaDialog = mediaLibraryDialog['media-library'];\r\n\r\n\r\n const handleSelectAssets = (files: any) => {\r\n const formattedFiles = files.map((f: any) => ({\r\n alt: f.alternativeText || f.name,\r\n url: prefixFileUrlWithBackendUrl(f.url),\r\n mime: f.mime,\r\n }));\r\n\r\n if (onChange) onChange(formattedFiles);\r\n };\r\n\r\n if (!isOpen) {\r\n return null;\r\n }\r\n\r\n return <MediaDialog onClose={onToggle} onSelectAssets={handleSelectAssets} />;\r\n};\r\n\r\nexport default MediaLib;\r\n","import React, { useState } from 'react';\r\nimport { Box, Button, Flex, Typography } from '@strapi/design-system';\r\nimport { Earth, Image } from '@strapi/icons';\r\nimport TinyEditor from './Editor';\r\nimport MediaLib from './MediaLib';\r\n\r\ninterface WysiwygProps {\r\n disabled?: boolean;\r\n error?: string;\r\n name: string;\r\n onChange: (e: any) => void;\r\n required?: boolean;\r\n label?: string;\r\n placeholder?: string;\r\n hint?: string;\r\n value?: any;\r\n attribute?: any;\r\n}\r\n\r\nconst Wysiwyg = ({ name, onChange, value, label, disabled, error, required, hint, attribute }: WysiwygProps) => {\r\n const localized = Boolean(attribute?.pluginOptions?.i18n?.localized || false);\r\n const [mediaLibVisible, setMediaLibVisible] = useState(false);\r\n\r\n const handleToggleMediaLib = () => setMediaLibVisible((prev) => !prev);\r\n\r\n const handleChangeAssets = (assets: any) => {\r\n let newValue = value ? value : \"\";\r\n\r\n assets.map((asset: any) => {\r\n if (asset.mime.includes(\"image\")) {\r\n const imgTag = `<p><img src=\"${asset.url}\" alt=\"${asset.alt}\"></img></p>`;\r\n newValue = `${newValue}${imgTag}`;\r\n }\r\n if (asset.mime.includes(\"video\")) {\r\n const videoTag = `<video><source src=\"${asset.url}\" alt=\"${asset.alt}\"</source></video>`;\r\n newValue = `${newValue}${videoTag}`;\r\n }\r\n });\r\n\r\n onChange({ target: {name, value: newValue } });\r\n handleToggleMediaLib();\r\n };\r\n\r\n return (\r\n <>\r\n <Box>\r\n {label && (\r\n <Flex paddingBottom={1}>\r\n <Typography variant=\"pi\" fontWeight=\"bold\" textColor=\"neutral800\">\r\n {label}\r\n </Typography>\r\n {required && (\r\n <Typography variant=\"omega\" fontWeight=\"bold\" textColor=\"danger600\">\r\n *\r\n </Typography>\r\n )}\r\n {localized && (\r\n <Flex paddingLeft={1}>\r\n <Earth width={12} height={12}/>\r\n </Flex>\r\n )}\r\n </Flex>\r\n )}\r\n <Button\r\n startIcon={<Image/>}\r\n variant=\"secondary\"\r\n fullWidth\r\n onClick={handleToggleMediaLib}\r\n >\r\n Media library\r\n </Button>\r\n <TinyEditor disabled={Boolean(disabled)} name={name} onChange={onChange} value={value}/>\r\n {(error || hint) && (\r\n <Box paddingTop={1}>\r\n {error ? (\r\n <Typography variant=\"pi\" textColor=\"danger600\">\r\n {error}\r\n </Typography>\r\n ) : (\r\n <Typography variant=\"pi\" textColor=\"neutral600\">\r\n {hint}\r\n </Typography>\r\n )}\r\n </Box>\r\n )}\r\n </Box>\r\n <MediaLib\r\n isOpen={mediaLibVisible}\r\n onChange={handleChangeAssets}\r\n onToggle={handleToggleMediaLib}\r\n />\r\n </>\r\n );\r\n};\r\n\r\nexport default Wysiwyg;\r\n"],"names":["useFetchClient","useState","useEffect","PLUGIN_ID","useCallback","jsx","Editor","Fragment","useStrapiApp","jsxs","Box","Flex","Typography","Earth","Button","Image"],"mappings":"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"}
@@ -16,7 +16,7 @@ const __variableDynamicImportRuntimeHelper = (glob, path) => {
16
16
  });
17
17
  };
18
18
  const name$1 = "@kookaat/strapi-plugin-tinymce";
19
- const version = "2.0.1";
19
+ const version = "2.0.3";
20
20
  const description = "Strapi custom field with a customized build of TinyMCE richtext editor.";
21
21
  const keywords = [
22
22
  "strapi",
@@ -94,6 +94,10 @@ const strapi = {
94
94
  description: "Strapi custom field with a customized build of TinyMCE richtext editor.",
95
95
  kind: "plugin"
96
96
  };
97
+ const repository = {
98
+ type: "git",
99
+ url: "https://github.com/mhzendehpey/strapi-plugin-tinymce"
100
+ };
97
101
  const pluginPkg = {
98
102
  name: name$1,
99
103
  version,
@@ -108,7 +112,8 @@ const pluginPkg = {
108
112
  dependencies,
109
113
  devDependencies,
110
114
  peerDependencies,
111
- strapi
115
+ strapi,
116
+ repository
112
117
  };
113
118
  const PLUGIN_ID = pluginPkg.name.replace(/^(@kookaat\/strapi-)plugin-/i, "");
114
119
  const getTranslation = (id) => `${PLUGIN_ID}.${id}`;
@@ -181,7 +186,7 @@ const index = {
181
186
  components: {
182
187
  Input: async () => Promise.resolve().then(() => require(
183
188
  /* webpackChunkName: "video-field-input-component" */
184
- "./Wysiwyg-B5f8_FHm.js"
189
+ "./Wysiwyg-C1NARvA-.js"
185
190
  ))
186
191
  }
187
192
  });
@@ -202,7 +207,7 @@ const index = {
202
207
  id: "settings",
203
208
  to: `/settings/${PLUGIN_ID}`,
204
209
  Component: async () => {
205
- return Promise.resolve().then(() => require("./Settings-DDGJdgMB.js"));
210
+ return Promise.resolve().then(() => require("./Settings-Cht7TW_m.js"));
206
211
  },
207
212
  permissions: pluginPermissions["settings"]
208
213
  }
@@ -240,4 +245,4 @@ const index = {
240
245
  exports.PLUGIN_ID = PLUGIN_ID;
241
246
  exports.getTranslation = getTranslation;
242
247
  exports.index = index;
243
- //# sourceMappingURL=index-BKKEJ9ZG.js.map
248
+ //# sourceMappingURL=index-4S82exqN.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index-BKKEJ9ZG.js","sources":["../../admin/src/pluginId.ts","../../admin/src/utils/getTranslation.ts","../../admin/src/components/Initializer.tsx","../../admin/src/utils/prefixPluginTranslations.ts","../../admin/src/permissions.ts","../../admin/src/components/PluginIcon.tsx","../../admin/src/index.ts"],"sourcesContent":["import pluginPkg from '../../package.json';\r\n\r\nexport const PLUGIN_ID = pluginPkg.name.replace(/^(@kookaat\\/strapi-)plugin-/i, '');\r\n","import { PLUGIN_ID } from '../pluginId';\r\n\r\nconst getTranslation = (id: string) => `${PLUGIN_ID}.${id}`;\r\n\r\nexport { getTranslation };\r\n","import { useEffect, useRef } from 'react';\r\n\r\nimport { PLUGIN_ID } from '../pluginId';\r\n\r\ntype InitializerProps = {\r\n setPlugin: (id: string) => void;\r\n};\r\n\r\nconst Initializer = ({ setPlugin }: InitializerProps) => {\r\n const ref = useRef(setPlugin);\r\n\r\n useEffect(() => {\r\n ref.current(PLUGIN_ID);\r\n }, []);\r\n\r\n return null;\r\n};\r\n\r\nexport { Initializer };\r\n","type TradOptions = Record<string, string>;\r\n\r\nexport const prefixPluginTranslations = (trad: TradOptions, pluginId: string): TradOptions => {\r\n if (!pluginId) {\r\n throw new TypeError(\"pluginId can't be empty\");\r\n }\r\n return Object.keys(trad).reduce((acc, current) => {\r\n acc[`${pluginId}.${current}`] = trad[current];\r\n return acc;\r\n }, {} as TradOptions);\r\n};\r\n","const pluginPermissions = {\r\n // This permission regards the main component (App) and is used to tell\r\n // If the plugin link should be displayed in the menu\r\n // And also if the plugin is accessible. This use case is found when a user types the url of the\r\n // plugin directly in the browser\r\n 'menu-link': [{ action: 'plugin::tinymce.menu-link', subject: null }],\r\n settings: [{ action: 'plugin::tinymce.settings.read', subject: null }],\r\n};\r\n\r\nexport default pluginPermissions;\r\n","import React from 'react';\r\nimport styled from 'styled-components';\r\nimport { Flex } from '@strapi/design-system';\r\nimport { Paragraph } from '@strapi/icons';\r\n\r\nconst IconBox = styled(Flex)`\r\n background-color: #f0f0ff; /* primary100 */\r\n border: 1px solid #d9d8ff; /* primary200 */\r\n\r\n svg > path {\r\n fill: #4945ff; /* primary600 */\r\n }\r\n`;\r\n\r\nconst PluginIcon = () => {\r\n return (\r\n <IconBox justifyContent=\"center\" alignItems=\"center\" width={7} height={6} hasRadius aria-hidden>\r\n <Paragraph />\r\n </IconBox>\r\n );\r\n};\r\n\r\nexport { PluginIcon };\r\n","import pluginPkg from '../../package.json';\r\nimport { getTranslation } from './utils/getTranslation';\r\nimport { PLUGIN_ID } from './pluginId';\r\nimport { Initializer } from './components/Initializer';\r\nimport { prefixPluginTranslations } from './utils/prefixPluginTranslations';\r\nimport pluginPermissions from './permissions';\r\nimport { PluginIcon } from './components/PluginIcon';\r\n\r\nconst name = pluginPkg.strapi.name;\r\n\r\nexport default {\r\n register(app: any) {\r\n app.customFields.register({\r\n name: 'tinymce',\r\n pluginId: PLUGIN_ID,\r\n type: 'richtext',\r\n icon: PluginIcon,\r\n intlLabel: {\r\n id: getTranslation('settings.title'),\r\n defaultMessage: 'TinyMCE',\r\n },\r\n intlDescription: {\r\n id: getTranslation('settings.description'),\r\n defaultMessage: 'TinyMCE rich text editor',\r\n },\r\n isResizable: false,\r\n default: 12,\r\n options: {\r\n advanced: [\r\n {\r\n type: 'checkbox',\r\n name: 'required',\r\n intlLabel: {\r\n id: getTranslation('settings.required-field'),\r\n defaultMessage: 'Required field',\r\n },\r\n description: \"You won't be able to create an entry if this field is empty\",\r\n },\r\n ],\r\n },\r\n components: {\r\n Input: async () => import(/* webpackChunkName: \"video-field-input-component\" */ './components/Wysiwyg'),\r\n },\r\n });\r\n\r\n app.createSettingSection(\r\n {\r\n id: PLUGIN_ID,\r\n intlLabel: {\r\n id: `${PLUGIN_ID}.plugin.name`,\r\n defaultMessage: 'TinyMCE',\r\n },\r\n },\r\n [\r\n {\r\n intlLabel: {\r\n id: getTranslation('settings.page-title'),\r\n defaultMessage: 'Configuration',\r\n },\r\n id: 'settings',\r\n to: `/settings/${PLUGIN_ID}`,\r\n Component: async () => {\r\n return import('./pages/Settings');\r\n },\r\n permissions: pluginPermissions['settings'],\r\n },\r\n ],\r\n );\r\n\r\n app.registerPlugin({\r\n id: PLUGIN_ID,\r\n initializer: Initializer,\r\n isReady: false,\r\n name: name,\r\n });\r\n },\r\n\r\n bootstrap(app: any) {},\r\n async registerTrads(app: any) {\r\n const { locales } = app;\r\n\r\n const importedTranslations = await Promise.all(\r\n (locales as string[]).map((locale) => {\r\n return import(/* webpackChunkName: \"translation-[request]\" */ `./translations/${locale}.json`)\r\n .then(({ default: data }) => {\r\n return {\r\n data: prefixPluginTranslations(data, PLUGIN_ID),\r\n locale,\r\n };\r\n })\r\n .catch(() => {\r\n return {\r\n data: {},\r\n locale,\r\n };\r\n });\r\n }),\r\n );\r\n\r\n return importedTranslations;\r\n },\r\n};\r\n"],"names":["useRef","useEffect","styled","Flex","jsx","Paragraph"],"mappings":"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"}
1
+ {"version":3,"file":"index-4S82exqN.js","sources":["../../admin/src/pluginId.ts","../../admin/src/utils/getTranslation.ts","../../admin/src/components/Initializer.tsx","../../admin/src/utils/prefixPluginTranslations.ts","../../admin/src/permissions.ts","../../admin/src/components/PluginIcon.tsx","../../admin/src/index.ts"],"sourcesContent":["import pluginPkg from '../../package.json';\r\n\r\nexport const PLUGIN_ID = pluginPkg.name.replace(/^(@kookaat\\/strapi-)plugin-/i, '');\r\n","import { PLUGIN_ID } from '../pluginId';\r\n\r\nconst getTranslation = (id: string) => `${PLUGIN_ID}.${id}`;\r\n\r\nexport { getTranslation };\r\n","import { useEffect, useRef } from 'react';\r\n\r\nimport { PLUGIN_ID } from '../pluginId';\r\n\r\ntype InitializerProps = {\r\n setPlugin: (id: string) => void;\r\n};\r\n\r\nconst Initializer = ({ setPlugin }: InitializerProps) => {\r\n const ref = useRef(setPlugin);\r\n\r\n useEffect(() => {\r\n ref.current(PLUGIN_ID);\r\n }, []);\r\n\r\n return null;\r\n};\r\n\r\nexport { Initializer };\r\n","type TradOptions = Record<string, string>;\r\n\r\nexport const prefixPluginTranslations = (trad: TradOptions, pluginId: string): TradOptions => {\r\n if (!pluginId) {\r\n throw new TypeError(\"pluginId can't be empty\");\r\n }\r\n return Object.keys(trad).reduce((acc, current) => {\r\n acc[`${pluginId}.${current}`] = trad[current];\r\n return acc;\r\n }, {} as TradOptions);\r\n};\r\n","const pluginPermissions = {\r\n // This permission regards the main component (App) and is used to tell\r\n // If the plugin link should be displayed in the menu\r\n // And also if the plugin is accessible. This use case is found when a user types the url of the\r\n // plugin directly in the browser\r\n 'menu-link': [{ action: 'plugin::tinymce.menu-link', subject: null }],\r\n settings: [{ action: 'plugin::tinymce.settings.read', subject: null }],\r\n};\r\n\r\nexport default pluginPermissions;\r\n","import React from 'react';\r\nimport styled from 'styled-components';\r\nimport { Flex } from '@strapi/design-system';\r\nimport { Paragraph } from '@strapi/icons';\r\n\r\nconst IconBox = styled(Flex)`\r\n background-color: #f0f0ff; /* primary100 */\r\n border: 1px solid #d9d8ff; /* primary200 */\r\n\r\n svg > path {\r\n fill: #4945ff; /* primary600 */\r\n }\r\n`;\r\n\r\nconst PluginIcon = () => {\r\n return (\r\n <IconBox justifyContent=\"center\" alignItems=\"center\" width={7} height={6} hasRadius aria-hidden>\r\n <Paragraph />\r\n </IconBox>\r\n );\r\n};\r\n\r\nexport { PluginIcon };\r\n","import pluginPkg from '../../package.json';\r\nimport { getTranslation } from './utils/getTranslation';\r\nimport { PLUGIN_ID } from './pluginId';\r\nimport { Initializer } from './components/Initializer';\r\nimport { prefixPluginTranslations } from './utils/prefixPluginTranslations';\r\nimport pluginPermissions from './permissions';\r\nimport { PluginIcon } from './components/PluginIcon';\r\n\r\nconst name = pluginPkg.strapi.name;\r\n\r\nexport default {\r\n register(app: any) {\r\n app.customFields.register({\r\n name: 'tinymce',\r\n pluginId: PLUGIN_ID,\r\n type: 'richtext',\r\n icon: PluginIcon,\r\n intlLabel: {\r\n id: getTranslation('settings.title'),\r\n defaultMessage: 'TinyMCE',\r\n },\r\n intlDescription: {\r\n id: getTranslation('settings.description'),\r\n defaultMessage: 'TinyMCE rich text editor',\r\n },\r\n isResizable: false,\r\n default: 12,\r\n options: {\r\n advanced: [\r\n {\r\n type: 'checkbox',\r\n name: 'required',\r\n intlLabel: {\r\n id: getTranslation('settings.required-field'),\r\n defaultMessage: 'Required field',\r\n },\r\n description: \"You won't be able to create an entry if this field is empty\",\r\n },\r\n ],\r\n },\r\n components: {\r\n Input: async () => import(/* webpackChunkName: \"video-field-input-component\" */ './components/Wysiwyg'),\r\n },\r\n });\r\n\r\n app.createSettingSection(\r\n {\r\n id: PLUGIN_ID,\r\n intlLabel: {\r\n id: `${PLUGIN_ID}.plugin.name`,\r\n defaultMessage: 'TinyMCE',\r\n },\r\n },\r\n [\r\n {\r\n intlLabel: {\r\n id: getTranslation('settings.page-title'),\r\n defaultMessage: 'Configuration',\r\n },\r\n id: 'settings',\r\n to: `/settings/${PLUGIN_ID}`,\r\n Component: async () => {\r\n return import('./pages/Settings');\r\n },\r\n permissions: pluginPermissions['settings'],\r\n },\r\n ],\r\n );\r\n\r\n app.registerPlugin({\r\n id: PLUGIN_ID,\r\n initializer: Initializer,\r\n isReady: false,\r\n name: name,\r\n });\r\n },\r\n\r\n bootstrap(app: any) {},\r\n async registerTrads(app: any) {\r\n const { locales } = app;\r\n\r\n const importedTranslations = await Promise.all(\r\n (locales as string[]).map((locale) => {\r\n return import(/* webpackChunkName: \"translation-[request]\" */ `./translations/${locale}.json`)\r\n .then(({ default: data }) => {\r\n return {\r\n data: prefixPluginTranslations(data, PLUGIN_ID),\r\n locale,\r\n };\r\n })\r\n .catch(() => {\r\n return {\r\n data: {},\r\n locale,\r\n };\r\n });\r\n }),\r\n );\r\n\r\n return importedTranslations;\r\n },\r\n};\r\n"],"names":["useRef","useEffect","styled","Flex","jsx","Paragraph"],"mappings":"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"}
@@ -13,7 +13,7 @@ const __variableDynamicImportRuntimeHelper = (glob, path) => {
13
13
  });
14
14
  };
15
15
  const name$1 = "@kookaat/strapi-plugin-tinymce";
16
- const version = "2.0.1";
16
+ const version = "2.0.3";
17
17
  const description = "Strapi custom field with a customized build of TinyMCE richtext editor.";
18
18
  const keywords = [
19
19
  "strapi",
@@ -91,6 +91,10 @@ const strapi = {
91
91
  description: "Strapi custom field with a customized build of TinyMCE richtext editor.",
92
92
  kind: "plugin"
93
93
  };
94
+ const repository = {
95
+ type: "git",
96
+ url: "https://github.com/mhzendehpey/strapi-plugin-tinymce"
97
+ };
94
98
  const pluginPkg = {
95
99
  name: name$1,
96
100
  version,
@@ -105,7 +109,8 @@ const pluginPkg = {
105
109
  dependencies,
106
110
  devDependencies,
107
111
  peerDependencies,
108
- strapi
112
+ strapi,
113
+ repository
109
114
  };
110
115
  const PLUGIN_ID = pluginPkg.name.replace(/^(@kookaat\/strapi-)plugin-/i, "");
111
116
  const getTranslation = (id) => `${PLUGIN_ID}.${id}`;
@@ -178,7 +183,7 @@ const index = {
178
183
  components: {
179
184
  Input: async () => import(
180
185
  /* webpackChunkName: "video-field-input-component" */
181
- "./Wysiwyg-BJxwboVA.mjs"
186
+ "./Wysiwyg-Bo6uIgVq.mjs"
182
187
  )
183
188
  }
184
189
  });
@@ -199,7 +204,7 @@ const index = {
199
204
  id: "settings",
200
205
  to: `/settings/${PLUGIN_ID}`,
201
206
  Component: async () => {
202
- return import("./Settings-omg6NZQb.mjs");
207
+ return import("./Settings-CqdUA2s3.mjs");
203
208
  },
204
209
  permissions: pluginPermissions["settings"]
205
210
  }
@@ -239,4 +244,4 @@ export {
239
244
  getTranslation as g,
240
245
  index as i
241
246
  };
242
- //# sourceMappingURL=index-C2RU5wAS.mjs.map
247
+ //# sourceMappingURL=index-Bc87VSN0.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index-C2RU5wAS.mjs","sources":["../../admin/src/pluginId.ts","../../admin/src/utils/getTranslation.ts","../../admin/src/components/Initializer.tsx","../../admin/src/utils/prefixPluginTranslations.ts","../../admin/src/permissions.ts","../../admin/src/components/PluginIcon.tsx","../../admin/src/index.ts"],"sourcesContent":["import pluginPkg from '../../package.json';\r\n\r\nexport const PLUGIN_ID = pluginPkg.name.replace(/^(@kookaat\\/strapi-)plugin-/i, '');\r\n","import { PLUGIN_ID } from '../pluginId';\r\n\r\nconst getTranslation = (id: string) => `${PLUGIN_ID}.${id}`;\r\n\r\nexport { getTranslation };\r\n","import { useEffect, useRef } from 'react';\r\n\r\nimport { PLUGIN_ID } from '../pluginId';\r\n\r\ntype InitializerProps = {\r\n setPlugin: (id: string) => void;\r\n};\r\n\r\nconst Initializer = ({ setPlugin }: InitializerProps) => {\r\n const ref = useRef(setPlugin);\r\n\r\n useEffect(() => {\r\n ref.current(PLUGIN_ID);\r\n }, []);\r\n\r\n return null;\r\n};\r\n\r\nexport { Initializer };\r\n","type TradOptions = Record<string, string>;\r\n\r\nexport const prefixPluginTranslations = (trad: TradOptions, pluginId: string): TradOptions => {\r\n if (!pluginId) {\r\n throw new TypeError(\"pluginId can't be empty\");\r\n }\r\n return Object.keys(trad).reduce((acc, current) => {\r\n acc[`${pluginId}.${current}`] = trad[current];\r\n return acc;\r\n }, {} as TradOptions);\r\n};\r\n","const pluginPermissions = {\r\n // This permission regards the main component (App) and is used to tell\r\n // If the plugin link should be displayed in the menu\r\n // And also if the plugin is accessible. This use case is found when a user types the url of the\r\n // plugin directly in the browser\r\n 'menu-link': [{ action: 'plugin::tinymce.menu-link', subject: null }],\r\n settings: [{ action: 'plugin::tinymce.settings.read', subject: null }],\r\n};\r\n\r\nexport default pluginPermissions;\r\n","import React from 'react';\r\nimport styled from 'styled-components';\r\nimport { Flex } from '@strapi/design-system';\r\nimport { Paragraph } from '@strapi/icons';\r\n\r\nconst IconBox = styled(Flex)`\r\n background-color: #f0f0ff; /* primary100 */\r\n border: 1px solid #d9d8ff; /* primary200 */\r\n\r\n svg > path {\r\n fill: #4945ff; /* primary600 */\r\n }\r\n`;\r\n\r\nconst PluginIcon = () => {\r\n return (\r\n <IconBox justifyContent=\"center\" alignItems=\"center\" width={7} height={6} hasRadius aria-hidden>\r\n <Paragraph />\r\n </IconBox>\r\n );\r\n};\r\n\r\nexport { PluginIcon };\r\n","import pluginPkg from '../../package.json';\r\nimport { getTranslation } from './utils/getTranslation';\r\nimport { PLUGIN_ID } from './pluginId';\r\nimport { Initializer } from './components/Initializer';\r\nimport { prefixPluginTranslations } from './utils/prefixPluginTranslations';\r\nimport pluginPermissions from './permissions';\r\nimport { PluginIcon } from './components/PluginIcon';\r\n\r\nconst name = pluginPkg.strapi.name;\r\n\r\nexport default {\r\n register(app: any) {\r\n app.customFields.register({\r\n name: 'tinymce',\r\n pluginId: PLUGIN_ID,\r\n type: 'richtext',\r\n icon: PluginIcon,\r\n intlLabel: {\r\n id: getTranslation('settings.title'),\r\n defaultMessage: 'TinyMCE',\r\n },\r\n intlDescription: {\r\n id: getTranslation('settings.description'),\r\n defaultMessage: 'TinyMCE rich text editor',\r\n },\r\n isResizable: false,\r\n default: 12,\r\n options: {\r\n advanced: [\r\n {\r\n type: 'checkbox',\r\n name: 'required',\r\n intlLabel: {\r\n id: getTranslation('settings.required-field'),\r\n defaultMessage: 'Required field',\r\n },\r\n description: \"You won't be able to create an entry if this field is empty\",\r\n },\r\n ],\r\n },\r\n components: {\r\n Input: async () => import(/* webpackChunkName: \"video-field-input-component\" */ './components/Wysiwyg'),\r\n },\r\n });\r\n\r\n app.createSettingSection(\r\n {\r\n id: PLUGIN_ID,\r\n intlLabel: {\r\n id: `${PLUGIN_ID}.plugin.name`,\r\n defaultMessage: 'TinyMCE',\r\n },\r\n },\r\n [\r\n {\r\n intlLabel: {\r\n id: getTranslation('settings.page-title'),\r\n defaultMessage: 'Configuration',\r\n },\r\n id: 'settings',\r\n to: `/settings/${PLUGIN_ID}`,\r\n Component: async () => {\r\n return import('./pages/Settings');\r\n },\r\n permissions: pluginPermissions['settings'],\r\n },\r\n ],\r\n );\r\n\r\n app.registerPlugin({\r\n id: PLUGIN_ID,\r\n initializer: Initializer,\r\n isReady: false,\r\n name: name,\r\n });\r\n },\r\n\r\n bootstrap(app: any) {},\r\n async registerTrads(app: any) {\r\n const { locales } = app;\r\n\r\n const importedTranslations = await Promise.all(\r\n (locales as string[]).map((locale) => {\r\n return import(/* webpackChunkName: \"translation-[request]\" */ `./translations/${locale}.json`)\r\n .then(({ default: data }) => {\r\n return {\r\n data: prefixPluginTranslations(data, PLUGIN_ID),\r\n locale,\r\n };\r\n })\r\n .catch(() => {\r\n return {\r\n data: {},\r\n locale,\r\n };\r\n });\r\n }),\r\n );\r\n\r\n return importedTranslations;\r\n },\r\n};\r\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEO,MAAM,YAAY,UAAU,KAAK,QAAQ,gCAAgC,EAAE;ACAlF,MAAM,iBAAiB,CAAC,OAAe,GAAG,SAAS,IAAI,EAAE;ACMzD,MAAM,cAAc,CAAC,EAAE,gBAAkC;AAC/C,QAAA,MAAM,OAAO,SAAS;AAE5B,YAAU,MAAM;AACZ,QAAI,QAAQ,SAAS;AAAA,EACzB,GAAG,CAAE,CAAA;AAEE,SAAA;AACX;ACda,MAAA,2BAA2B,CAAC,MAAmB,aAAkC;AAC5F,MAAI,CAAC,UAAU;AACP,UAAA,IAAI,UAAU,yBAAyB;AAAA,EAC/C;AACA,SAAO,OAAO,KAAK,IAAI,EAAE,OAAO,CAAC,KAAK,YAAY;AAChD,QAAI,GAAG,QAAQ,IAAI,OAAO,EAAE,IAAI,KAAK,OAAO;AACrC,WAAA;AAAA,EACT,GAAG,CAAiB,CAAA;AACtB;ACVA,MAAM,oBAAoB;AAAA;AAAA;AAAA;AAAA;AAAA,EAKtB,aAAa,CAAC,EAAE,QAAQ,6BAA6B,SAAS,MAAM;AAAA,EACpE,UAAU,CAAC,EAAE,QAAQ,iCAAiC,SAAS,MAAM;AACzE;ACFA,MAAM,UAAU,OAAO,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAS3B,MAAM,aAAa,MAAM;AACrB,6BACK,SAAQ,EAAA,gBAAe,UAAS,YAAW,UAAS,OAAO,GAAG,QAAQ,GAAG,WAAS,MAAC,eAAW,MAC3F,UAAA,oBAAC,aAAU,EACf,CAAA;AAER;ACZA,MAAM,OAAO,UAAU,OAAO;AAE9B,MAAe,QAAA;AAAA,EACX,SAAS,KAAU;AACf,QAAI,aAAa,SAAS;AAAA,MACtB,MAAM;AAAA,MACN,UAAU;AAAA,MACV,MAAM;AAAA,MACN,MAAM;AAAA,MACN,WAAW;AAAA,QACP,IAAI,eAAe,gBAAgB;AAAA,QACnC,gBAAgB;AAAA,MACpB;AAAA,MACA,iBAAiB;AAAA,QACb,IAAI,eAAe,sBAAsB;AAAA,QACzC,gBAAgB;AAAA,MACpB;AAAA,MACA,aAAa;AAAA,MACb,SAAS;AAAA,MACT,SAAS;AAAA,QACL,UAAU;AAAA,UACN;AAAA,YACI,MAAM;AAAA,YACN,MAAM;AAAA,YACN,WAAW;AAAA,cACP,IAAI,eAAe,yBAAyB;AAAA,cAC5C,gBAAgB;AAAA,YACpB;AAAA,YACA,aAAa;AAAA,UACjB;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,YAAY;AAAA,QACR,OAAO,YAAY;AAAA;AAAA,UAA6D;AAAA,QAAsB;AAAA,MAC1G;AAAA,IAAA,CACH;AAEG,QAAA;AAAA,MACA;AAAA,QACI,IAAI;AAAA,QACJ,WAAW;AAAA,UACP,IAAI,GAAG,SAAS;AAAA,UAChB,gBAAgB;AAAA,QACpB;AAAA,MACJ;AAAA,MACA;AAAA,QACI;AAAA,UACI,WAAW;AAAA,YACP,IAAI,eAAe,qBAAqB;AAAA,YACxC,gBAAgB;AAAA,UACpB;AAAA,UACA,IAAI;AAAA,UACJ,IAAI,aAAa,SAAS;AAAA,UAC1B,WAAW,YAAY;AACnB,mBAAO,OAAO,yBAAkB;AAAA,UACpC;AAAA,UACA,aAAa,kBAAkB,UAAU;AAAA,QAC7C;AAAA,MACJ;AAAA,IAAA;AAGJ,QAAI,eAAe;AAAA,MACf,IAAI;AAAA,MACJ,aAAa;AAAA,MACb,SAAS;AAAA,MACT;AAAA,IAAA,CACH;AAAA,EACL;AAAA,EAEA,UAAU,KAAU;AAAA,EAAC;AAAA,EACrB,MAAM,cAAc,KAAU;AACpB,UAAA,EAAE,QAAY,IAAA;AAEd,UAAA,uBAAuB,MAAM,QAAQ;AAAA,MACtC,QAAqB,IAAI,CAAC,WAAW;AAC3B,eAAA,qCAA+E,uBAAA,OAAA,EAAA,0BAAA,MAAA,OAAA,mBAAA,GAAA,0BAAA,MAAA,OAAA,mBAAA,GAAA,0BAAA,MAAA,OAAA,mBAAA,EAAA,CAAA,GAAA,kBAAA,MAAA,OAAA,EACjF,KAAK,CAAC,EAAE,SAAS,WAAW;AAClB,iBAAA;AAAA,YACH,MAAM,yBAAyB,MAAM,SAAS;AAAA,YAC9C;AAAA,UAAA;AAAA,QACJ,CACH,EACA,MAAM,MAAM;AACF,iBAAA;AAAA,YACH,MAAM,CAAC;AAAA,YACP;AAAA,UAAA;AAAA,QACJ,CACH;AAAA,MAAA,CACR;AAAA,IAAA;AAGE,WAAA;AAAA,EACX;AACJ;"}
1
+ {"version":3,"file":"index-Bc87VSN0.mjs","sources":["../../admin/src/pluginId.ts","../../admin/src/utils/getTranslation.ts","../../admin/src/components/Initializer.tsx","../../admin/src/utils/prefixPluginTranslations.ts","../../admin/src/permissions.ts","../../admin/src/components/PluginIcon.tsx","../../admin/src/index.ts"],"sourcesContent":["import pluginPkg from '../../package.json';\r\n\r\nexport const PLUGIN_ID = pluginPkg.name.replace(/^(@kookaat\\/strapi-)plugin-/i, '');\r\n","import { PLUGIN_ID } from '../pluginId';\r\n\r\nconst getTranslation = (id: string) => `${PLUGIN_ID}.${id}`;\r\n\r\nexport { getTranslation };\r\n","import { useEffect, useRef } from 'react';\r\n\r\nimport { PLUGIN_ID } from '../pluginId';\r\n\r\ntype InitializerProps = {\r\n setPlugin: (id: string) => void;\r\n};\r\n\r\nconst Initializer = ({ setPlugin }: InitializerProps) => {\r\n const ref = useRef(setPlugin);\r\n\r\n useEffect(() => {\r\n ref.current(PLUGIN_ID);\r\n }, []);\r\n\r\n return null;\r\n};\r\n\r\nexport { Initializer };\r\n","type TradOptions = Record<string, string>;\r\n\r\nexport const prefixPluginTranslations = (trad: TradOptions, pluginId: string): TradOptions => {\r\n if (!pluginId) {\r\n throw new TypeError(\"pluginId can't be empty\");\r\n }\r\n return Object.keys(trad).reduce((acc, current) => {\r\n acc[`${pluginId}.${current}`] = trad[current];\r\n return acc;\r\n }, {} as TradOptions);\r\n};\r\n","const pluginPermissions = {\r\n // This permission regards the main component (App) and is used to tell\r\n // If the plugin link should be displayed in the menu\r\n // And also if the plugin is accessible. This use case is found when a user types the url of the\r\n // plugin directly in the browser\r\n 'menu-link': [{ action: 'plugin::tinymce.menu-link', subject: null }],\r\n settings: [{ action: 'plugin::tinymce.settings.read', subject: null }],\r\n};\r\n\r\nexport default pluginPermissions;\r\n","import React from 'react';\r\nimport styled from 'styled-components';\r\nimport { Flex } from '@strapi/design-system';\r\nimport { Paragraph } from '@strapi/icons';\r\n\r\nconst IconBox = styled(Flex)`\r\n background-color: #f0f0ff; /* primary100 */\r\n border: 1px solid #d9d8ff; /* primary200 */\r\n\r\n svg > path {\r\n fill: #4945ff; /* primary600 */\r\n }\r\n`;\r\n\r\nconst PluginIcon = () => {\r\n return (\r\n <IconBox justifyContent=\"center\" alignItems=\"center\" width={7} height={6} hasRadius aria-hidden>\r\n <Paragraph />\r\n </IconBox>\r\n );\r\n};\r\n\r\nexport { PluginIcon };\r\n","import pluginPkg from '../../package.json';\r\nimport { getTranslation } from './utils/getTranslation';\r\nimport { PLUGIN_ID } from './pluginId';\r\nimport { Initializer } from './components/Initializer';\r\nimport { prefixPluginTranslations } from './utils/prefixPluginTranslations';\r\nimport pluginPermissions from './permissions';\r\nimport { PluginIcon } from './components/PluginIcon';\r\n\r\nconst name = pluginPkg.strapi.name;\r\n\r\nexport default {\r\n register(app: any) {\r\n app.customFields.register({\r\n name: 'tinymce',\r\n pluginId: PLUGIN_ID,\r\n type: 'richtext',\r\n icon: PluginIcon,\r\n intlLabel: {\r\n id: getTranslation('settings.title'),\r\n defaultMessage: 'TinyMCE',\r\n },\r\n intlDescription: {\r\n id: getTranslation('settings.description'),\r\n defaultMessage: 'TinyMCE rich text editor',\r\n },\r\n isResizable: false,\r\n default: 12,\r\n options: {\r\n advanced: [\r\n {\r\n type: 'checkbox',\r\n name: 'required',\r\n intlLabel: {\r\n id: getTranslation('settings.required-field'),\r\n defaultMessage: 'Required field',\r\n },\r\n description: \"You won't be able to create an entry if this field is empty\",\r\n },\r\n ],\r\n },\r\n components: {\r\n Input: async () => import(/* webpackChunkName: \"video-field-input-component\" */ './components/Wysiwyg'),\r\n },\r\n });\r\n\r\n app.createSettingSection(\r\n {\r\n id: PLUGIN_ID,\r\n intlLabel: {\r\n id: `${PLUGIN_ID}.plugin.name`,\r\n defaultMessage: 'TinyMCE',\r\n },\r\n },\r\n [\r\n {\r\n intlLabel: {\r\n id: getTranslation('settings.page-title'),\r\n defaultMessage: 'Configuration',\r\n },\r\n id: 'settings',\r\n to: `/settings/${PLUGIN_ID}`,\r\n Component: async () => {\r\n return import('./pages/Settings');\r\n },\r\n permissions: pluginPermissions['settings'],\r\n },\r\n ],\r\n );\r\n\r\n app.registerPlugin({\r\n id: PLUGIN_ID,\r\n initializer: Initializer,\r\n isReady: false,\r\n name: name,\r\n });\r\n },\r\n\r\n bootstrap(app: any) {},\r\n async registerTrads(app: any) {\r\n const { locales } = app;\r\n\r\n const importedTranslations = await Promise.all(\r\n (locales as string[]).map((locale) => {\r\n return import(/* webpackChunkName: \"translation-[request]\" */ `./translations/${locale}.json`)\r\n .then(({ default: data }) => {\r\n return {\r\n data: prefixPluginTranslations(data, PLUGIN_ID),\r\n locale,\r\n };\r\n })\r\n .catch(() => {\r\n return {\r\n data: {},\r\n locale,\r\n };\r\n });\r\n }),\r\n );\r\n\r\n return importedTranslations;\r\n },\r\n};\r\n"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
1
  "use strict";
2
- const index = require("../_chunks/index-BKKEJ9ZG.js");
2
+ const index = require("../_chunks/index-4S82exqN.js");
3
3
  module.exports = index.index;
4
4
  //# sourceMappingURL=index.js.map
@@ -1,4 +1,4 @@
1
- import { i } from "../_chunks/index-C2RU5wAS.mjs";
1
+ import { i } from "../_chunks/index-Bc87VSN0.mjs";
2
2
  export {
3
3
  i as default
4
4
  };
@@ -19,7 +19,7 @@ const bootstrap = async ({ strapi: strapi2 }) => {
19
19
  const destroy = ({ strapi: strapi2 }) => {
20
20
  };
21
21
  const name = "@kookaat/strapi-plugin-tinymce";
22
- const version = "2.0.1";
22
+ const version = "2.0.3";
23
23
  const description = "Strapi custom field with a customized build of TinyMCE richtext editor.";
24
24
  const keywords = [
25
25
  "strapi",
@@ -97,6 +97,10 @@ const strapi$1 = {
97
97
  description: "Strapi custom field with a customized build of TinyMCE richtext editor.",
98
98
  kind: "plugin"
99
99
  };
100
+ const repository = {
101
+ type: "git",
102
+ url: "https://github.com/mhzendehpey/strapi-plugin-tinymce"
103
+ };
100
104
  const pluginPkg = {
101
105
  name,
102
106
  version,
@@ -111,7 +115,8 @@ const pluginPkg = {
111
115
  dependencies,
112
116
  devDependencies,
113
117
  peerDependencies,
114
- strapi: strapi$1
118
+ strapi: strapi$1,
119
+ repository
115
120
  };
116
121
  const PLUGIN_ID = pluginPkg.name.replace(/^(@kookaat\/strapi-)plugin-/i, "");
117
122
  const register = ({ strapi: strapi2 }) => {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../server/src/bootstrap.ts","../../server/src/destroy.ts","../../admin/src/pluginId.ts","../../server/src/register.ts","../../server/src/config/index.ts","../../server/src/content-types/index.ts","../../server/src/controllers/admin.ts","../../server/src/controllers/config.ts","../../server/src/controllers/settings.ts","../../server/src/controllers/index.ts","../../server/src/middlewares/index.ts","../../server/src/policies/index.ts","../../server/src/routes/admin.ts","../../server/src/routes/config.ts","../../server/src/routes/settings.ts","../../server/src/routes/index.ts","../../server/src/services/config.ts","../../server/src/services/settings.ts","../../server/src/services/index.ts","../../server/src/index.ts"],"sourcesContent":["\"use strict\";\r\n\r\nimport type { Core } from '@strapi/strapi';\r\n\r\nconst bootstrap = async ({ strapi }: { strapi: Core.Strapi }) => {\r\n const actions = [\r\n {\r\n section: 'plugins',\r\n displayName: 'Access the plugin settings',\r\n uid: 'settings.read',\r\n pluginName: 'tinymce',\r\n },\r\n {\r\n section: 'plugins',\r\n displayName: 'Menu link to plugin settings',\r\n uid: 'menu-link',\r\n pluginName: 'tinymce',\r\n },\r\n ];\r\n await strapi.admin.services.permission.actionProvider.registerMany(actions);\r\n};\r\n\r\nexport default bootstrap;\r\n","\"use strict\";\r\n\r\nimport type { Core } from '@strapi/strapi';\r\n\r\nconst destroy = ({ strapi }: { strapi: Core.Strapi }) => {\r\n // destroy phase\r\n};\r\n\r\nexport default destroy;\r\n","import pluginPkg from '../../package.json';\r\n\r\nexport const PLUGIN_ID = pluginPkg.name.replace(/^(@kookaat\\/strapi-)plugin-/i, '');\r\n","\"use strict\";\r\n\r\nimport type { Core } from '@strapi/strapi';\r\nimport { PLUGIN_ID } from '../../admin/src/pluginId';\r\n\r\nconst register = ({ strapi }: { strapi: Core.Strapi }) => {\r\n strapi.customFields.register({\r\n name: 'tinymce',\r\n plugin: PLUGIN_ID,\r\n type: 'richtext',\r\n });\r\n};\r\n\r\nexport default register;\r\n","\"use strict\";\r\n\r\nexport default {\r\n default: {},\r\n validator() {},\r\n};\r\n","\"use strict\";\r\n\r\nexport default {};\r\n","import { Context } from 'koa';\r\n\r\nexport default {\r\n async uploadImage(ctx: Context) {\r\n const file = Array.isArray(ctx.request.files.files) ? ctx.request.files.files[0] : ctx.request.files.files;\r\n\r\n if (!file) {\r\n return ctx.badRequest('No file uploaded');\r\n }\r\n\r\n try {\r\n const [createdFile] = await strapi.plugins.upload.services.upload.upload({\r\n data: {\r\n fileInfo: {\r\n name: file.originalFilename,\r\n caption: '',\r\n alternativeText: '',\r\n },\r\n },\r\n files: file,\r\n });\r\n\r\n ctx.body = { location: createdFile.url };\r\n } catch (error) {\r\n ctx.internalServerError(`Image upload failed ${error?.message || error?.toString()}`);\r\n }\r\n },\r\n};\r\n","\"use strict\";\r\n\r\nexport default {\r\n getConfig: async (ctx) => {\r\n const { configKey } = ctx.params;\r\n const config = await strapi.plugin('tinymce').service('config').getConfig(configKey);\r\n ctx.send(config);\r\n },\r\n};\r\n","\"use strict\";\r\n\r\nexport default {\r\n getSettings: async (ctx) => {\r\n try {\r\n ctx.body = await strapi.plugin('tinymce').service('settings').getSettings();\r\n } catch (err) {\r\n ctx.body = err;\r\n ctx.throw(500, err);\r\n }\r\n },\r\n setSettings: async (ctx) => {\r\n const { body } = ctx.request;\r\n try {\r\n await strapi.plugin('tinymce').service('settings').setSettings(body);\r\n ctx.body = await strapi.plugin('tinymce').service('settings').getSettings();\r\n } catch (err) {\r\n ctx.throw(500, err);\r\n }\r\n },\r\n};\r\n","'use strict';\r\n\r\nimport admin from './admin';\r\nimport config from './config';\r\nimport settings from './settings';\r\n\r\nexport default {\r\n admin,\r\n config,\r\n settings,\r\n};\r\n","\"use strict\";\r\n\r\nexport default {};\r\n","\"use strict\";\r\n\r\nexport default {};\r\n","import { Route } from '@strapi/types/dist/core';\r\n\r\nexport default {\r\n routes: [\r\n {\r\n method: 'POST',\r\n path: '/uploadImage',\r\n handler: 'admin.uploadImage',\r\n // Enforce admin authentication\r\n config: { auth: { scope: ['admin::isAuthenticatedAdmin'] } },\r\n },\r\n ] as Route[],\r\n};\r\n","\"use strict\";\r\n\r\nexport default {\r\n type: 'admin',\r\n routes: [\r\n {\r\n method: 'GET',\r\n path: '/config/:configKey',\r\n handler: 'config.getConfig',\r\n config: { policies: [] },\r\n },\r\n ],\r\n};\r\n","export default {\r\n type: 'admin',\r\n routes: [\r\n {\r\n method: 'GET',\r\n path: '/settings',\r\n handler: 'settings.getSettings',\r\n config: {\r\n policies: [],\r\n auth: false,\r\n },\r\n },\r\n {\r\n method: 'POST',\r\n path: '/settings',\r\n handler: 'settings.setSettings',\r\n config: {\r\n policies: [],\r\n auth: false,\r\n },\r\n },\r\n ],\r\n};\r\n","import admin from './admin';\r\nimport config from './config';\r\nimport settings from './settings';\r\n\r\nexport default {\r\n admin,\r\n config,\r\n settings,\r\n};\r\n","\"use strict\";\r\n\r\nexport default ({ strapi }) => {\r\n return {\r\n getConfig(key = 'editor') {\r\n return strapi.plugin('tinymce').config(key) ?? {};\r\n },\r\n };\r\n};\r\n","\"use strict\";\r\n\r\nfunction getPluginStore() {\r\n return strapi.store({\r\n environment: '',\r\n type: 'plugin',\r\n name: 'tinymce',\r\n });\r\n}\r\nasync function createDefaultConfig() {\r\n const pluginStore = getPluginStore();\r\n const value = {\r\n apiKey: '',\r\n };\r\n await pluginStore.set({ key: 'settings', value });\r\n return pluginStore.get({ key: 'settings' });\r\n}\r\n\r\nexport default () => {\r\n return {\r\n async getSettings() {\r\n const pluginStore = getPluginStore();\r\n let config = await pluginStore.get({ key: 'settings' });\r\n if (!config) {\r\n config = await createDefaultConfig();\r\n }\r\n return config;\r\n },\r\n async setSettings(settings) {\r\n const value = settings;\r\n const pluginStore = getPluginStore();\r\n await pluginStore.set({ key: 'settings', value });\r\n return pluginStore.get({ key: 'settings' });\r\n },\r\n };\r\n};\r\n","\"use strict\";\r\n\r\nimport config from './config';\r\nimport settings from './settings';\r\n\r\nexport default {\r\n config,\r\n settings,\r\n};\r\n","\"use strict\";\r\n\r\n/**\r\n * Application methods\r\n */\r\nimport bootstrap from './bootstrap';\r\nimport destroy from './destroy';\r\nimport register from './register';\r\n\r\n/**\r\n * Plugin server methods\r\n */\r\nimport config from './config';\r\nimport contentTypes from './content-types';\r\nimport controllers from './controllers';\r\nimport middlewares from './middlewares';\r\nimport policies from './policies';\r\nimport routes from './routes';\r\nimport services from './services';\r\n\r\nexport default {\r\n register,\r\n bootstrap,\r\n destroy,\r\n config,\r\n controllers,\r\n routes,\r\n services,\r\n contentTypes,\r\n policies,\r\n middlewares,\r\n};\r\n"],"names":["strapi","config","admin","settings"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../server/src/bootstrap.ts","../../server/src/destroy.ts","../../admin/src/pluginId.ts","../../server/src/register.ts","../../server/src/config/index.ts","../../server/src/content-types/index.ts","../../server/src/controllers/admin.ts","../../server/src/controllers/config.ts","../../server/src/controllers/settings.ts","../../server/src/controllers/index.ts","../../server/src/middlewares/index.ts","../../server/src/policies/index.ts","../../server/src/routes/admin.ts","../../server/src/routes/config.ts","../../server/src/routes/settings.ts","../../server/src/routes/index.ts","../../server/src/services/config.ts","../../server/src/services/settings.ts","../../server/src/services/index.ts","../../server/src/index.ts"],"sourcesContent":["\"use strict\";\r\n\r\nimport type { Core } from '@strapi/strapi';\r\n\r\nconst bootstrap = async ({ strapi }: { strapi: Core.Strapi }) => {\r\n const actions = [\r\n {\r\n section: 'plugins',\r\n displayName: 'Access the plugin settings',\r\n uid: 'settings.read',\r\n pluginName: 'tinymce',\r\n },\r\n {\r\n section: 'plugins',\r\n displayName: 'Menu link to plugin settings',\r\n uid: 'menu-link',\r\n pluginName: 'tinymce',\r\n },\r\n ];\r\n await strapi.admin.services.permission.actionProvider.registerMany(actions);\r\n};\r\n\r\nexport default bootstrap;\r\n","\"use strict\";\r\n\r\nimport type { Core } from '@strapi/strapi';\r\n\r\nconst destroy = ({ strapi }: { strapi: Core.Strapi }) => {\r\n // destroy phase\r\n};\r\n\r\nexport default destroy;\r\n","import pluginPkg from '../../package.json';\r\n\r\nexport const PLUGIN_ID = pluginPkg.name.replace(/^(@kookaat\\/strapi-)plugin-/i, '');\r\n","\"use strict\";\r\n\r\nimport type { Core } from '@strapi/strapi';\r\nimport { PLUGIN_ID } from '../../admin/src/pluginId';\r\n\r\nconst register = ({ strapi }: { strapi: Core.Strapi }) => {\r\n strapi.customFields.register({\r\n name: 'tinymce',\r\n plugin: PLUGIN_ID,\r\n type: 'richtext',\r\n });\r\n};\r\n\r\nexport default register;\r\n","\"use strict\";\r\n\r\nexport default {\r\n default: {},\r\n validator() {},\r\n};\r\n","\"use strict\";\r\n\r\nexport default {};\r\n","import { Context } from 'koa';\r\n\r\nexport default {\r\n async uploadImage(ctx: Context) {\r\n const file = Array.isArray(ctx.request.files.files) ? ctx.request.files.files[0] : ctx.request.files.files;\r\n\r\n if (!file) {\r\n return ctx.badRequest('No file uploaded');\r\n }\r\n\r\n try {\r\n const [createdFile] = await strapi.plugins.upload.services.upload.upload({\r\n data: {\r\n fileInfo: {\r\n name: file.originalFilename,\r\n caption: '',\r\n alternativeText: '',\r\n },\r\n },\r\n files: file,\r\n });\r\n\r\n ctx.body = { location: createdFile.url };\r\n } catch (error) {\r\n ctx.internalServerError(`Image upload failed ${error?.message || error?.toString()}`);\r\n }\r\n },\r\n};\r\n","\"use strict\";\r\n\r\nexport default {\r\n getConfig: async (ctx) => {\r\n const { configKey } = ctx.params;\r\n const config = await strapi.plugin('tinymce').service('config').getConfig(configKey);\r\n ctx.send(config);\r\n },\r\n};\r\n","\"use strict\";\r\n\r\nexport default {\r\n getSettings: async (ctx) => {\r\n try {\r\n ctx.body = await strapi.plugin('tinymce').service('settings').getSettings();\r\n } catch (err) {\r\n ctx.body = err;\r\n ctx.throw(500, err);\r\n }\r\n },\r\n setSettings: async (ctx) => {\r\n const { body } = ctx.request;\r\n try {\r\n await strapi.plugin('tinymce').service('settings').setSettings(body);\r\n ctx.body = await strapi.plugin('tinymce').service('settings').getSettings();\r\n } catch (err) {\r\n ctx.throw(500, err);\r\n }\r\n },\r\n};\r\n","'use strict';\r\n\r\nimport admin from './admin';\r\nimport config from './config';\r\nimport settings from './settings';\r\n\r\nexport default {\r\n admin,\r\n config,\r\n settings,\r\n};\r\n","\"use strict\";\r\n\r\nexport default {};\r\n","\"use strict\";\r\n\r\nexport default {};\r\n","import { Route } from '@strapi/types/dist/core';\r\n\r\nexport default {\r\n routes: [\r\n {\r\n method: 'POST',\r\n path: '/uploadImage',\r\n handler: 'admin.uploadImage',\r\n // Enforce admin authentication\r\n config: { auth: { scope: ['admin::isAuthenticatedAdmin'] } },\r\n },\r\n ] as Route[],\r\n};\r\n","\"use strict\";\r\n\r\nexport default {\r\n type: 'admin',\r\n routes: [\r\n {\r\n method: 'GET',\r\n path: '/config/:configKey',\r\n handler: 'config.getConfig',\r\n config: { policies: [] },\r\n },\r\n ],\r\n};\r\n","export default {\r\n type: 'admin',\r\n routes: [\r\n {\r\n method: 'GET',\r\n path: '/settings',\r\n handler: 'settings.getSettings',\r\n config: {\r\n policies: [],\r\n auth: false,\r\n },\r\n },\r\n {\r\n method: 'POST',\r\n path: '/settings',\r\n handler: 'settings.setSettings',\r\n config: {\r\n policies: [],\r\n auth: false,\r\n },\r\n },\r\n ],\r\n};\r\n","import admin from './admin';\r\nimport config from './config';\r\nimport settings from './settings';\r\n\r\nexport default {\r\n admin,\r\n config,\r\n settings,\r\n};\r\n","\"use strict\";\r\n\r\nexport default ({ strapi }) => {\r\n return {\r\n getConfig(key = 'editor') {\r\n return strapi.plugin('tinymce').config(key) ?? {};\r\n },\r\n };\r\n};\r\n","\"use strict\";\r\n\r\nfunction getPluginStore() {\r\n return strapi.store({\r\n environment: '',\r\n type: 'plugin',\r\n name: 'tinymce',\r\n });\r\n}\r\nasync function createDefaultConfig() {\r\n const pluginStore = getPluginStore();\r\n const value = {\r\n apiKey: '',\r\n };\r\n await pluginStore.set({ key: 'settings', value });\r\n return pluginStore.get({ key: 'settings' });\r\n}\r\n\r\nexport default () => {\r\n return {\r\n async getSettings() {\r\n const pluginStore = getPluginStore();\r\n let config = await pluginStore.get({ key: 'settings' });\r\n if (!config) {\r\n config = await createDefaultConfig();\r\n }\r\n return config;\r\n },\r\n async setSettings(settings) {\r\n const value = settings;\r\n const pluginStore = getPluginStore();\r\n await pluginStore.set({ key: 'settings', value });\r\n return pluginStore.get({ key: 'settings' });\r\n },\r\n };\r\n};\r\n","\"use strict\";\r\n\r\nimport config from './config';\r\nimport settings from './settings';\r\n\r\nexport default {\r\n config,\r\n settings,\r\n};\r\n","\"use strict\";\r\n\r\n/**\r\n * Application methods\r\n */\r\nimport bootstrap from './bootstrap';\r\nimport destroy from './destroy';\r\nimport register from './register';\r\n\r\n/**\r\n * Plugin server methods\r\n */\r\nimport config from './config';\r\nimport contentTypes from './content-types';\r\nimport controllers from './controllers';\r\nimport middlewares from './middlewares';\r\nimport policies from './policies';\r\nimport routes from './routes';\r\nimport services from './services';\r\n\r\nexport default {\r\n register,\r\n bootstrap,\r\n destroy,\r\n config,\r\n controllers,\r\n routes,\r\n services,\r\n contentTypes,\r\n policies,\r\n middlewares,\r\n};\r\n"],"names":["strapi","config","admin","settings"],"mappings":"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"}
@@ -18,7 +18,7 @@ const bootstrap = async ({ strapi: strapi2 }) => {
18
18
  const destroy = ({ strapi: strapi2 }) => {
19
19
  };
20
20
  const name = "@kookaat/strapi-plugin-tinymce";
21
- const version = "2.0.1";
21
+ const version = "2.0.3";
22
22
  const description = "Strapi custom field with a customized build of TinyMCE richtext editor.";
23
23
  const keywords = [
24
24
  "strapi",
@@ -96,6 +96,10 @@ const strapi$1 = {
96
96
  description: "Strapi custom field with a customized build of TinyMCE richtext editor.",
97
97
  kind: "plugin"
98
98
  };
99
+ const repository = {
100
+ type: "git",
101
+ url: "https://github.com/mhzendehpey/strapi-plugin-tinymce"
102
+ };
99
103
  const pluginPkg = {
100
104
  name,
101
105
  version,
@@ -110,7 +114,8 @@ const pluginPkg = {
110
114
  dependencies,
111
115
  devDependencies,
112
116
  peerDependencies,
113
- strapi: strapi$1
117
+ strapi: strapi$1,
118
+ repository
114
119
  };
115
120
  const PLUGIN_ID = pluginPkg.name.replace(/^(@kookaat\/strapi-)plugin-/i, "");
116
121
  const register = ({ strapi: strapi2 }) => {
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../server/src/bootstrap.ts","../../server/src/destroy.ts","../../admin/src/pluginId.ts","../../server/src/register.ts","../../server/src/config/index.ts","../../server/src/content-types/index.ts","../../server/src/controllers/admin.ts","../../server/src/controllers/config.ts","../../server/src/controllers/settings.ts","../../server/src/controllers/index.ts","../../server/src/middlewares/index.ts","../../server/src/policies/index.ts","../../server/src/routes/admin.ts","../../server/src/routes/config.ts","../../server/src/routes/settings.ts","../../server/src/routes/index.ts","../../server/src/services/config.ts","../../server/src/services/settings.ts","../../server/src/services/index.ts","../../server/src/index.ts"],"sourcesContent":["\"use strict\";\r\n\r\nimport type { Core } from '@strapi/strapi';\r\n\r\nconst bootstrap = async ({ strapi }: { strapi: Core.Strapi }) => {\r\n const actions = [\r\n {\r\n section: 'plugins',\r\n displayName: 'Access the plugin settings',\r\n uid: 'settings.read',\r\n pluginName: 'tinymce',\r\n },\r\n {\r\n section: 'plugins',\r\n displayName: 'Menu link to plugin settings',\r\n uid: 'menu-link',\r\n pluginName: 'tinymce',\r\n },\r\n ];\r\n await strapi.admin.services.permission.actionProvider.registerMany(actions);\r\n};\r\n\r\nexport default bootstrap;\r\n","\"use strict\";\r\n\r\nimport type { Core } from '@strapi/strapi';\r\n\r\nconst destroy = ({ strapi }: { strapi: Core.Strapi }) => {\r\n // destroy phase\r\n};\r\n\r\nexport default destroy;\r\n","import pluginPkg from '../../package.json';\r\n\r\nexport const PLUGIN_ID = pluginPkg.name.replace(/^(@kookaat\\/strapi-)plugin-/i, '');\r\n","\"use strict\";\r\n\r\nimport type { Core } from '@strapi/strapi';\r\nimport { PLUGIN_ID } from '../../admin/src/pluginId';\r\n\r\nconst register = ({ strapi }: { strapi: Core.Strapi }) => {\r\n strapi.customFields.register({\r\n name: 'tinymce',\r\n plugin: PLUGIN_ID,\r\n type: 'richtext',\r\n });\r\n};\r\n\r\nexport default register;\r\n","\"use strict\";\r\n\r\nexport default {\r\n default: {},\r\n validator() {},\r\n};\r\n","\"use strict\";\r\n\r\nexport default {};\r\n","import { Context } from 'koa';\r\n\r\nexport default {\r\n async uploadImage(ctx: Context) {\r\n const file = Array.isArray(ctx.request.files.files) ? ctx.request.files.files[0] : ctx.request.files.files;\r\n\r\n if (!file) {\r\n return ctx.badRequest('No file uploaded');\r\n }\r\n\r\n try {\r\n const [createdFile] = await strapi.plugins.upload.services.upload.upload({\r\n data: {\r\n fileInfo: {\r\n name: file.originalFilename,\r\n caption: '',\r\n alternativeText: '',\r\n },\r\n },\r\n files: file,\r\n });\r\n\r\n ctx.body = { location: createdFile.url };\r\n } catch (error) {\r\n ctx.internalServerError(`Image upload failed ${error?.message || error?.toString()}`);\r\n }\r\n },\r\n};\r\n","\"use strict\";\r\n\r\nexport default {\r\n getConfig: async (ctx) => {\r\n const { configKey } = ctx.params;\r\n const config = await strapi.plugin('tinymce').service('config').getConfig(configKey);\r\n ctx.send(config);\r\n },\r\n};\r\n","\"use strict\";\r\n\r\nexport default {\r\n getSettings: async (ctx) => {\r\n try {\r\n ctx.body = await strapi.plugin('tinymce').service('settings').getSettings();\r\n } catch (err) {\r\n ctx.body = err;\r\n ctx.throw(500, err);\r\n }\r\n },\r\n setSettings: async (ctx) => {\r\n const { body } = ctx.request;\r\n try {\r\n await strapi.plugin('tinymce').service('settings').setSettings(body);\r\n ctx.body = await strapi.plugin('tinymce').service('settings').getSettings();\r\n } catch (err) {\r\n ctx.throw(500, err);\r\n }\r\n },\r\n};\r\n","'use strict';\r\n\r\nimport admin from './admin';\r\nimport config from './config';\r\nimport settings from './settings';\r\n\r\nexport default {\r\n admin,\r\n config,\r\n settings,\r\n};\r\n","\"use strict\";\r\n\r\nexport default {};\r\n","\"use strict\";\r\n\r\nexport default {};\r\n","import { Route } from '@strapi/types/dist/core';\r\n\r\nexport default {\r\n routes: [\r\n {\r\n method: 'POST',\r\n path: '/uploadImage',\r\n handler: 'admin.uploadImage',\r\n // Enforce admin authentication\r\n config: { auth: { scope: ['admin::isAuthenticatedAdmin'] } },\r\n },\r\n ] as Route[],\r\n};\r\n","\"use strict\";\r\n\r\nexport default {\r\n type: 'admin',\r\n routes: [\r\n {\r\n method: 'GET',\r\n path: '/config/:configKey',\r\n handler: 'config.getConfig',\r\n config: { policies: [] },\r\n },\r\n ],\r\n};\r\n","export default {\r\n type: 'admin',\r\n routes: [\r\n {\r\n method: 'GET',\r\n path: '/settings',\r\n handler: 'settings.getSettings',\r\n config: {\r\n policies: [],\r\n auth: false,\r\n },\r\n },\r\n {\r\n method: 'POST',\r\n path: '/settings',\r\n handler: 'settings.setSettings',\r\n config: {\r\n policies: [],\r\n auth: false,\r\n },\r\n },\r\n ],\r\n};\r\n","import admin from './admin';\r\nimport config from './config';\r\nimport settings from './settings';\r\n\r\nexport default {\r\n admin,\r\n config,\r\n settings,\r\n};\r\n","\"use strict\";\r\n\r\nexport default ({ strapi }) => {\r\n return {\r\n getConfig(key = 'editor') {\r\n return strapi.plugin('tinymce').config(key) ?? {};\r\n },\r\n };\r\n};\r\n","\"use strict\";\r\n\r\nfunction getPluginStore() {\r\n return strapi.store({\r\n environment: '',\r\n type: 'plugin',\r\n name: 'tinymce',\r\n });\r\n}\r\nasync function createDefaultConfig() {\r\n const pluginStore = getPluginStore();\r\n const value = {\r\n apiKey: '',\r\n };\r\n await pluginStore.set({ key: 'settings', value });\r\n return pluginStore.get({ key: 'settings' });\r\n}\r\n\r\nexport default () => {\r\n return {\r\n async getSettings() {\r\n const pluginStore = getPluginStore();\r\n let config = await pluginStore.get({ key: 'settings' });\r\n if (!config) {\r\n config = await createDefaultConfig();\r\n }\r\n return config;\r\n },\r\n async setSettings(settings) {\r\n const value = settings;\r\n const pluginStore = getPluginStore();\r\n await pluginStore.set({ key: 'settings', value });\r\n return pluginStore.get({ key: 'settings' });\r\n },\r\n };\r\n};\r\n","\"use strict\";\r\n\r\nimport config from './config';\r\nimport settings from './settings';\r\n\r\nexport default {\r\n config,\r\n settings,\r\n};\r\n","\"use strict\";\r\n\r\n/**\r\n * Application methods\r\n */\r\nimport bootstrap from './bootstrap';\r\nimport destroy from './destroy';\r\nimport register from './register';\r\n\r\n/**\r\n * Plugin server methods\r\n */\r\nimport config from './config';\r\nimport contentTypes from './content-types';\r\nimport controllers from './controllers';\r\nimport middlewares from './middlewares';\r\nimport policies from './policies';\r\nimport routes from './routes';\r\nimport services from './services';\r\n\r\nexport default {\r\n register,\r\n bootstrap,\r\n destroy,\r\n config,\r\n controllers,\r\n routes,\r\n services,\r\n contentTypes,\r\n policies,\r\n middlewares,\r\n};\r\n"],"names":["strapi","config","admin","settings"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","sources":["../../server/src/bootstrap.ts","../../server/src/destroy.ts","../../admin/src/pluginId.ts","../../server/src/register.ts","../../server/src/config/index.ts","../../server/src/content-types/index.ts","../../server/src/controllers/admin.ts","../../server/src/controllers/config.ts","../../server/src/controllers/settings.ts","../../server/src/controllers/index.ts","../../server/src/middlewares/index.ts","../../server/src/policies/index.ts","../../server/src/routes/admin.ts","../../server/src/routes/config.ts","../../server/src/routes/settings.ts","../../server/src/routes/index.ts","../../server/src/services/config.ts","../../server/src/services/settings.ts","../../server/src/services/index.ts","../../server/src/index.ts"],"sourcesContent":["\"use strict\";\r\n\r\nimport type { Core } from '@strapi/strapi';\r\n\r\nconst bootstrap = async ({ strapi }: { strapi: Core.Strapi }) => {\r\n const actions = [\r\n {\r\n section: 'plugins',\r\n displayName: 'Access the plugin settings',\r\n uid: 'settings.read',\r\n pluginName: 'tinymce',\r\n },\r\n {\r\n section: 'plugins',\r\n displayName: 'Menu link to plugin settings',\r\n uid: 'menu-link',\r\n pluginName: 'tinymce',\r\n },\r\n ];\r\n await strapi.admin.services.permission.actionProvider.registerMany(actions);\r\n};\r\n\r\nexport default bootstrap;\r\n","\"use strict\";\r\n\r\nimport type { Core } from '@strapi/strapi';\r\n\r\nconst destroy = ({ strapi }: { strapi: Core.Strapi }) => {\r\n // destroy phase\r\n};\r\n\r\nexport default destroy;\r\n","import pluginPkg from '../../package.json';\r\n\r\nexport const PLUGIN_ID = pluginPkg.name.replace(/^(@kookaat\\/strapi-)plugin-/i, '');\r\n","\"use strict\";\r\n\r\nimport type { Core } from '@strapi/strapi';\r\nimport { PLUGIN_ID } from '../../admin/src/pluginId';\r\n\r\nconst register = ({ strapi }: { strapi: Core.Strapi }) => {\r\n strapi.customFields.register({\r\n name: 'tinymce',\r\n plugin: PLUGIN_ID,\r\n type: 'richtext',\r\n });\r\n};\r\n\r\nexport default register;\r\n","\"use strict\";\r\n\r\nexport default {\r\n default: {},\r\n validator() {},\r\n};\r\n","\"use strict\";\r\n\r\nexport default {};\r\n","import { Context } from 'koa';\r\n\r\nexport default {\r\n async uploadImage(ctx: Context) {\r\n const file = Array.isArray(ctx.request.files.files) ? ctx.request.files.files[0] : ctx.request.files.files;\r\n\r\n if (!file) {\r\n return ctx.badRequest('No file uploaded');\r\n }\r\n\r\n try {\r\n const [createdFile] = await strapi.plugins.upload.services.upload.upload({\r\n data: {\r\n fileInfo: {\r\n name: file.originalFilename,\r\n caption: '',\r\n alternativeText: '',\r\n },\r\n },\r\n files: file,\r\n });\r\n\r\n ctx.body = { location: createdFile.url };\r\n } catch (error) {\r\n ctx.internalServerError(`Image upload failed ${error?.message || error?.toString()}`);\r\n }\r\n },\r\n};\r\n","\"use strict\";\r\n\r\nexport default {\r\n getConfig: async (ctx) => {\r\n const { configKey } = ctx.params;\r\n const config = await strapi.plugin('tinymce').service('config').getConfig(configKey);\r\n ctx.send(config);\r\n },\r\n};\r\n","\"use strict\";\r\n\r\nexport default {\r\n getSettings: async (ctx) => {\r\n try {\r\n ctx.body = await strapi.plugin('tinymce').service('settings').getSettings();\r\n } catch (err) {\r\n ctx.body = err;\r\n ctx.throw(500, err);\r\n }\r\n },\r\n setSettings: async (ctx) => {\r\n const { body } = ctx.request;\r\n try {\r\n await strapi.plugin('tinymce').service('settings').setSettings(body);\r\n ctx.body = await strapi.plugin('tinymce').service('settings').getSettings();\r\n } catch (err) {\r\n ctx.throw(500, err);\r\n }\r\n },\r\n};\r\n","'use strict';\r\n\r\nimport admin from './admin';\r\nimport config from './config';\r\nimport settings from './settings';\r\n\r\nexport default {\r\n admin,\r\n config,\r\n settings,\r\n};\r\n","\"use strict\";\r\n\r\nexport default {};\r\n","\"use strict\";\r\n\r\nexport default {};\r\n","import { Route } from '@strapi/types/dist/core';\r\n\r\nexport default {\r\n routes: [\r\n {\r\n method: 'POST',\r\n path: '/uploadImage',\r\n handler: 'admin.uploadImage',\r\n // Enforce admin authentication\r\n config: { auth: { scope: ['admin::isAuthenticatedAdmin'] } },\r\n },\r\n ] as Route[],\r\n};\r\n","\"use strict\";\r\n\r\nexport default {\r\n type: 'admin',\r\n routes: [\r\n {\r\n method: 'GET',\r\n path: '/config/:configKey',\r\n handler: 'config.getConfig',\r\n config: { policies: [] },\r\n },\r\n ],\r\n};\r\n","export default {\r\n type: 'admin',\r\n routes: [\r\n {\r\n method: 'GET',\r\n path: '/settings',\r\n handler: 'settings.getSettings',\r\n config: {\r\n policies: [],\r\n auth: false,\r\n },\r\n },\r\n {\r\n method: 'POST',\r\n path: '/settings',\r\n handler: 'settings.setSettings',\r\n config: {\r\n policies: [],\r\n auth: false,\r\n },\r\n },\r\n ],\r\n};\r\n","import admin from './admin';\r\nimport config from './config';\r\nimport settings from './settings';\r\n\r\nexport default {\r\n admin,\r\n config,\r\n settings,\r\n};\r\n","\"use strict\";\r\n\r\nexport default ({ strapi }) => {\r\n return {\r\n getConfig(key = 'editor') {\r\n return strapi.plugin('tinymce').config(key) ?? {};\r\n },\r\n };\r\n};\r\n","\"use strict\";\r\n\r\nfunction getPluginStore() {\r\n return strapi.store({\r\n environment: '',\r\n type: 'plugin',\r\n name: 'tinymce',\r\n });\r\n}\r\nasync function createDefaultConfig() {\r\n const pluginStore = getPluginStore();\r\n const value = {\r\n apiKey: '',\r\n };\r\n await pluginStore.set({ key: 'settings', value });\r\n return pluginStore.get({ key: 'settings' });\r\n}\r\n\r\nexport default () => {\r\n return {\r\n async getSettings() {\r\n const pluginStore = getPluginStore();\r\n let config = await pluginStore.get({ key: 'settings' });\r\n if (!config) {\r\n config = await createDefaultConfig();\r\n }\r\n return config;\r\n },\r\n async setSettings(settings) {\r\n const value = settings;\r\n const pluginStore = getPluginStore();\r\n await pluginStore.set({ key: 'settings', value });\r\n return pluginStore.get({ key: 'settings' });\r\n },\r\n };\r\n};\r\n","\"use strict\";\r\n\r\nimport config from './config';\r\nimport settings from './settings';\r\n\r\nexport default {\r\n config,\r\n settings,\r\n};\r\n","\"use strict\";\r\n\r\n/**\r\n * Application methods\r\n */\r\nimport bootstrap from './bootstrap';\r\nimport destroy from './destroy';\r\nimport register from './register';\r\n\r\n/**\r\n * Plugin server methods\r\n */\r\nimport config from './config';\r\nimport contentTypes from './content-types';\r\nimport controllers from './controllers';\r\nimport middlewares from './middlewares';\r\nimport policies from './policies';\r\nimport routes from './routes';\r\nimport services from './services';\r\n\r\nexport default {\r\n register,\r\n bootstrap,\r\n destroy,\r\n config,\r\n controllers,\r\n routes,\r\n services,\r\n contentTypes,\r\n policies,\r\n middlewares,\r\n};\r\n"],"names":["strapi","config","admin","settings"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kookaat/strapi-plugin-tinymce",
3
- "version": "2.0.2",
3
+ "version": "2.0.3",
4
4
  "description": "Strapi custom field with a customized build of TinyMCE richtext editor.",
5
5
  "keywords": [
6
6
  "strapi",
@@ -77,5 +77,9 @@
77
77
  "name": "tinymce",
78
78
  "description": "Strapi custom field with a customized build of TinyMCE richtext editor.",
79
79
  "kind": "plugin"
80
+ },
81
+ "repository": {
82
+ "type": "git",
83
+ "url": "https://github.com/mhzendehpey/strapi-plugin-tinymce"
80
84
  }
81
85
  }
@@ -1 +0,0 @@
1
- {"version":3,"file":"Wysiwyg-B5f8_FHm.js","sources":["../../admin/src/utils/prefixFileUrlWithBackendUrl.ts","../../admin/src/components/Editor.tsx","../../admin/src/components/MediaLib.tsx","../../admin/src/components/Wysiwyg.tsx"],"sourcesContent":["export const prefixFileUrlWithBackendUrl = (\r\n path: string,\r\n url = process.env.STRAPI_ADMIN_BACKEND_URL || process.env.BACKEND_URL || 'http://localhost:1337',\r\n) => {\r\n if (path?.startsWith('http')) {\r\n // Path is already a full URL. No prefix possible.\r\n return path;\r\n }\r\n\r\n if (url) {\r\n return url + path;\r\n } else {\r\n return path;\r\n }\r\n};\r\n","import { useCallback, useEffect, useState } from 'react';\r\nimport { Editor, IAllProps } from '@tinymce/tinymce-react';\r\nimport { PLUGIN_ID } from '../pluginId';\r\nimport taskRequests from '../api/settings';\r\nimport { useFetchClient } from '@strapi/strapi/admin';\r\nimport { prefixFileUrlWithBackendUrl } from '../utils/prefixFileUrlWithBackendUrl';\r\n\r\ninterface TinyEditorProps {\r\n onChange: (e: any) => void;\r\n name: string;\r\n value?: string;\r\n disabled?: boolean;\r\n}\r\n\r\ntype InitOptions = NonNullable<IAllProps['init']>;\r\n\r\nconst TinyEditor = ({ onChange, name, value, disabled }: TinyEditorProps) => {\r\n const { get, post } = useFetchClient();\r\n\r\n const [pluginConfig, setPluginConfig] = useState<any>(null);\r\n const uploadUrl = prefixFileUrlWithBackendUrl('/api/upload', pluginConfig?.data?.defaultAdminDomain || '');\r\n\r\n useEffect(() => {\r\n const getPluginConfig = async () => {\r\n const editor = await get(`/${PLUGIN_ID}/config/editor`);\r\n if (editor) {\r\n setPluginConfig(editor);\r\n }\r\n };\r\n getPluginConfig();\r\n }, []);\r\n\r\n const imageUploadHandler = useCallback<NonNullable<InitOptions['images_upload_handler']>>(\r\n async (blobInfo) => {\r\n const data = new FormData();\r\n\r\n data.append('files', blobInfo.blob(), blobInfo.filename());\r\n\r\n try {\r\n const res = await post<{ location: string }>(`/${PLUGIN_ID}/uploadImage`, data);\r\n\r\n return res.data.location;\r\n } catch (error) {\r\n console.error('Image upload failed:', error);\r\n\r\n throw error;\r\n }\r\n },\r\n [post],\r\n );\r\n\r\n return pluginConfig?.data ? (\r\n <Editor\r\n tinymceScriptSrc={pluginConfig?.data?.tinymceSrc || undefined}\r\n value={value}\r\n tagName={name}\r\n onEditorChange={(editorContent) => {\r\n onChange({ target: { name, value: editorContent } });\r\n }}\r\n init={{\r\n images_upload_handler: imageUploadHandler,\r\n ...pluginConfig?.data?.editorConfig,\r\n }}\r\n />\r\n ) : (\r\n <></>\r\n );\r\n};\r\n\r\nexport default TinyEditor;\r\n","import React from 'react';\r\nimport { prefixFileUrlWithBackendUrl } from '../utils/prefixFileUrlWithBackendUrl';\r\nimport { useStrapiApp } from '@strapi/strapi/admin';\r\n\r\ninterface MediaLibProps {\r\n isOpen?: boolean;\r\n onChange?: (e: any) => void;\r\n onToggle?: () => void;\r\n}\r\n\r\nconst MediaLib = ({ isOpen, onChange, onToggle }: MediaLibProps) => {\r\n const mediaLibraryDialog = useStrapiApp('mediaLibrary', (state: any) => state.components);\r\n const MediaDialog = mediaLibraryDialog['media-library'];\r\n\r\n\r\n const handleSelectAssets = (files: any) => {\r\n const formattedFiles = files.map((f: any) => ({\r\n alt: f.alternativeText || f.name,\r\n url: prefixFileUrlWithBackendUrl(f.url),\r\n mime: f.mime,\r\n }));\r\n\r\n if (onChange) onChange(formattedFiles);\r\n };\r\n\r\n if (!isOpen) {\r\n return null;\r\n }\r\n\r\n return <MediaDialog onClose={onToggle} onSelectAssets={handleSelectAssets} />;\r\n};\r\n\r\nexport default MediaLib;\r\n","import React, { useState } from 'react';\r\nimport { Box, Button, Flex, Typography } from '@strapi/design-system';\r\nimport { Earth, Image } from '@strapi/icons';\r\nimport TinyEditor from './Editor';\r\nimport MediaLib from './MediaLib';\r\n\r\ninterface WysiwygProps {\r\n disabled?: boolean;\r\n error?: string;\r\n name: string;\r\n onChange: (e: any) => void;\r\n required?: boolean;\r\n label?: string;\r\n placeholder?: string;\r\n hint?: string;\r\n value?: any;\r\n attribute?: any;\r\n}\r\n\r\nconst Wysiwyg = ({ name, onChange, value, label, disabled, error, required, hint, attribute }: WysiwygProps) => {\r\n const localized = Boolean(attribute?.pluginOptions?.i18n?.localized || false);\r\n const [mediaLibVisible, setMediaLibVisible] = useState(false);\r\n\r\n const handleToggleMediaLib = () => setMediaLibVisible((prev) => !prev);\r\n\r\n const handleChangeAssets = (assets: any) => {\r\n let newValue = value ? value : \"\";\r\n\r\n assets.map((asset: any) => {\r\n if (asset.mime.includes(\"image\")) {\r\n const imgTag = `<p><img src=\"${asset.url}\" alt=\"${asset.alt}\"></img></p>`;\r\n newValue = `${newValue}${imgTag}`;\r\n }\r\n if (asset.mime.includes(\"video\")) {\r\n const videoTag = `<video><source src=\"${asset.url}\" alt=\"${asset.alt}\"</source></video>`;\r\n newValue = `${newValue}${videoTag}`;\r\n }\r\n });\r\n\r\n onChange({ target: {name, value: newValue } });\r\n handleToggleMediaLib();\r\n };\r\n\r\n return (\r\n <>\r\n <Box>\r\n {label && (\r\n <Flex paddingBottom={1}>\r\n <Typography variant=\"pi\" fontWeight=\"bold\" textColor=\"neutral800\">\r\n {label}\r\n </Typography>\r\n {required && (\r\n <Typography variant=\"omega\" fontWeight=\"bold\" textColor=\"danger600\">\r\n *\r\n </Typography>\r\n )}\r\n {localized && (\r\n <Flex paddingLeft={1}>\r\n <Earth width={12} height={12}/>\r\n </Flex>\r\n )}\r\n </Flex>\r\n )}\r\n <Button\r\n startIcon={<Image/>}\r\n variant=\"secondary\"\r\n fullWidth\r\n onClick={handleToggleMediaLib}\r\n >\r\n Media library\r\n </Button>\r\n <TinyEditor disabled={Boolean(disabled)} name={name} onChange={onChange} value={value}/>\r\n {(error || hint) && (\r\n <Box paddingTop={1}>\r\n {error ? (\r\n <Typography variant=\"pi\" textColor=\"danger600\">\r\n {error}\r\n </Typography>\r\n ) : (\r\n <Typography variant=\"pi\" textColor=\"neutral600\">\r\n {hint}\r\n </Typography>\r\n )}\r\n </Box>\r\n )}\r\n </Box>\r\n <MediaLib\r\n isOpen={mediaLibVisible}\r\n onChange={handleChangeAssets}\r\n onToggle={handleToggleMediaLib}\r\n />\r\n </>\r\n );\r\n};\r\n\r\nexport default Wysiwyg;\r\n"],"names":["useFetchClient","useState","useEffect","PLUGIN_ID","useCallback","jsx","Editor","Fragment","useStrapiApp","jsxs","Box","Flex","Typography","Earth","Button","Image"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Wysiwyg-BJxwboVA.mjs","sources":["../../admin/src/utils/prefixFileUrlWithBackendUrl.ts","../../admin/src/components/Editor.tsx","../../admin/src/components/MediaLib.tsx","../../admin/src/components/Wysiwyg.tsx"],"sourcesContent":["export const prefixFileUrlWithBackendUrl = (\r\n path: string,\r\n url = process.env.STRAPI_ADMIN_BACKEND_URL || process.env.BACKEND_URL || 'http://localhost:1337',\r\n) => {\r\n if (path?.startsWith('http')) {\r\n // Path is already a full URL. No prefix possible.\r\n return path;\r\n }\r\n\r\n if (url) {\r\n return url + path;\r\n } else {\r\n return path;\r\n }\r\n};\r\n","import { useCallback, useEffect, useState } from 'react';\r\nimport { Editor, IAllProps } from '@tinymce/tinymce-react';\r\nimport { PLUGIN_ID } from '../pluginId';\r\nimport taskRequests from '../api/settings';\r\nimport { useFetchClient } from '@strapi/strapi/admin';\r\nimport { prefixFileUrlWithBackendUrl } from '../utils/prefixFileUrlWithBackendUrl';\r\n\r\ninterface TinyEditorProps {\r\n onChange: (e: any) => void;\r\n name: string;\r\n value?: string;\r\n disabled?: boolean;\r\n}\r\n\r\ntype InitOptions = NonNullable<IAllProps['init']>;\r\n\r\nconst TinyEditor = ({ onChange, name, value, disabled }: TinyEditorProps) => {\r\n const { get, post } = useFetchClient();\r\n\r\n const [pluginConfig, setPluginConfig] = useState<any>(null);\r\n const uploadUrl = prefixFileUrlWithBackendUrl('/api/upload', pluginConfig?.data?.defaultAdminDomain || '');\r\n\r\n useEffect(() => {\r\n const getPluginConfig = async () => {\r\n const editor = await get(`/${PLUGIN_ID}/config/editor`);\r\n if (editor) {\r\n setPluginConfig(editor);\r\n }\r\n };\r\n getPluginConfig();\r\n }, []);\r\n\r\n const imageUploadHandler = useCallback<NonNullable<InitOptions['images_upload_handler']>>(\r\n async (blobInfo) => {\r\n const data = new FormData();\r\n\r\n data.append('files', blobInfo.blob(), blobInfo.filename());\r\n\r\n try {\r\n const res = await post<{ location: string }>(`/${PLUGIN_ID}/uploadImage`, data);\r\n\r\n return res.data.location;\r\n } catch (error) {\r\n console.error('Image upload failed:', error);\r\n\r\n throw error;\r\n }\r\n },\r\n [post],\r\n );\r\n\r\n return pluginConfig?.data ? (\r\n <Editor\r\n tinymceScriptSrc={pluginConfig?.data?.tinymceSrc || undefined}\r\n value={value}\r\n tagName={name}\r\n onEditorChange={(editorContent) => {\r\n onChange({ target: { name, value: editorContent } });\r\n }}\r\n init={{\r\n images_upload_handler: imageUploadHandler,\r\n ...pluginConfig?.data?.editorConfig,\r\n }}\r\n />\r\n ) : (\r\n <></>\r\n );\r\n};\r\n\r\nexport default TinyEditor;\r\n","import React from 'react';\r\nimport { prefixFileUrlWithBackendUrl } from '../utils/prefixFileUrlWithBackendUrl';\r\nimport { useStrapiApp } from '@strapi/strapi/admin';\r\n\r\ninterface MediaLibProps {\r\n isOpen?: boolean;\r\n onChange?: (e: any) => void;\r\n onToggle?: () => void;\r\n}\r\n\r\nconst MediaLib = ({ isOpen, onChange, onToggle }: MediaLibProps) => {\r\n const mediaLibraryDialog = useStrapiApp('mediaLibrary', (state: any) => state.components);\r\n const MediaDialog = mediaLibraryDialog['media-library'];\r\n\r\n\r\n const handleSelectAssets = (files: any) => {\r\n const formattedFiles = files.map((f: any) => ({\r\n alt: f.alternativeText || f.name,\r\n url: prefixFileUrlWithBackendUrl(f.url),\r\n mime: f.mime,\r\n }));\r\n\r\n if (onChange) onChange(formattedFiles);\r\n };\r\n\r\n if (!isOpen) {\r\n return null;\r\n }\r\n\r\n return <MediaDialog onClose={onToggle} onSelectAssets={handleSelectAssets} />;\r\n};\r\n\r\nexport default MediaLib;\r\n","import React, { useState } from 'react';\r\nimport { Box, Button, Flex, Typography } from '@strapi/design-system';\r\nimport { Earth, Image } from '@strapi/icons';\r\nimport TinyEditor from './Editor';\r\nimport MediaLib from './MediaLib';\r\n\r\ninterface WysiwygProps {\r\n disabled?: boolean;\r\n error?: string;\r\n name: string;\r\n onChange: (e: any) => void;\r\n required?: boolean;\r\n label?: string;\r\n placeholder?: string;\r\n hint?: string;\r\n value?: any;\r\n attribute?: any;\r\n}\r\n\r\nconst Wysiwyg = ({ name, onChange, value, label, disabled, error, required, hint, attribute }: WysiwygProps) => {\r\n const localized = Boolean(attribute?.pluginOptions?.i18n?.localized || false);\r\n const [mediaLibVisible, setMediaLibVisible] = useState(false);\r\n\r\n const handleToggleMediaLib = () => setMediaLibVisible((prev) => !prev);\r\n\r\n const handleChangeAssets = (assets: any) => {\r\n let newValue = value ? value : \"\";\r\n\r\n assets.map((asset: any) => {\r\n if (asset.mime.includes(\"image\")) {\r\n const imgTag = `<p><img src=\"${asset.url}\" alt=\"${asset.alt}\"></img></p>`;\r\n newValue = `${newValue}${imgTag}`;\r\n }\r\n if (asset.mime.includes(\"video\")) {\r\n const videoTag = `<video><source src=\"${asset.url}\" alt=\"${asset.alt}\"</source></video>`;\r\n newValue = `${newValue}${videoTag}`;\r\n }\r\n });\r\n\r\n onChange({ target: {name, value: newValue } });\r\n handleToggleMediaLib();\r\n };\r\n\r\n return (\r\n <>\r\n <Box>\r\n {label && (\r\n <Flex paddingBottom={1}>\r\n <Typography variant=\"pi\" fontWeight=\"bold\" textColor=\"neutral800\">\r\n {label}\r\n </Typography>\r\n {required && (\r\n <Typography variant=\"omega\" fontWeight=\"bold\" textColor=\"danger600\">\r\n *\r\n </Typography>\r\n )}\r\n {localized && (\r\n <Flex paddingLeft={1}>\r\n <Earth width={12} height={12}/>\r\n </Flex>\r\n )}\r\n </Flex>\r\n )}\r\n <Button\r\n startIcon={<Image/>}\r\n variant=\"secondary\"\r\n fullWidth\r\n onClick={handleToggleMediaLib}\r\n >\r\n Media library\r\n </Button>\r\n <TinyEditor disabled={Boolean(disabled)} name={name} onChange={onChange} value={value}/>\r\n {(error || hint) && (\r\n <Box paddingTop={1}>\r\n {error ? (\r\n <Typography variant=\"pi\" textColor=\"danger600\">\r\n {error}\r\n </Typography>\r\n ) : (\r\n <Typography variant=\"pi\" textColor=\"neutral600\">\r\n {hint}\r\n </Typography>\r\n )}\r\n </Box>\r\n )}\r\n </Box>\r\n <MediaLib\r\n isOpen={mediaLibVisible}\r\n onChange={handleChangeAssets}\r\n onToggle={handleToggleMediaLib}\r\n />\r\n </>\r\n );\r\n};\r\n\r\nexport default Wysiwyg;\r\n"],"names":[],"mappings":"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"}