@kookaat/strapi-plugin-tinymce 2.0.0 → 2.0.2

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.
Files changed (72) hide show
  1. package/README.md +52 -84
  2. package/dist/_chunks/Settings-DDGJdgMB.js +2606 -0
  3. package/dist/_chunks/Settings-DDGJdgMB.js.map +1 -0
  4. package/dist/_chunks/Settings-omg6NZQb.mjs +2606 -0
  5. package/dist/_chunks/Settings-omg6NZQb.mjs.map +1 -0
  6. package/dist/_chunks/Wysiwyg-B5f8_FHm.js +130 -0
  7. package/dist/_chunks/Wysiwyg-B5f8_FHm.js.map +1 -0
  8. package/dist/_chunks/Wysiwyg-BJxwboVA.mjs +130 -0
  9. package/dist/_chunks/Wysiwyg-BJxwboVA.mjs.map +1 -0
  10. package/dist/_chunks/cs-4ldo0hfI.js +15 -0
  11. package/dist/_chunks/cs-4ldo0hfI.js.map +1 -0
  12. package/dist/_chunks/cs-D-gwbfRH.mjs +15 -0
  13. package/dist/_chunks/cs-D-gwbfRH.mjs.map +1 -0
  14. package/dist/_chunks/en-BILT6xrd.mjs +15 -0
  15. package/dist/_chunks/en-BILT6xrd.mjs.map +1 -0
  16. package/dist/_chunks/en-usAdfkfH.js +15 -0
  17. package/dist/_chunks/en-usAdfkfH.js.map +1 -0
  18. package/dist/_chunks/index-BKKEJ9ZG.js +243 -0
  19. package/dist/_chunks/index-BKKEJ9ZG.js.map +1 -0
  20. package/dist/_chunks/index-C2RU5wAS.mjs +242 -0
  21. package/dist/_chunks/index-C2RU5wAS.mjs.map +1 -0
  22. package/dist/_chunks/sk-BcD0BjAU.js +15 -0
  23. package/dist/_chunks/sk-BcD0BjAU.js.map +1 -0
  24. package/dist/_chunks/sk-D3I3bI3P.mjs +15 -0
  25. package/dist/_chunks/sk-D3I3bI3P.mjs.map +1 -0
  26. package/dist/admin/index.js +4 -0
  27. package/dist/admin/index.js.map +1 -0
  28. package/dist/admin/index.mjs +5 -0
  29. package/dist/admin/index.mjs.map +1 -0
  30. package/dist/server/index.js +293 -0
  31. package/dist/server/index.js.map +1 -0
  32. package/dist/server/index.mjs +294 -0
  33. package/dist/server/index.mjs.map +1 -0
  34. package/package.json +65 -20
  35. package/.github/stale.yml +0 -17
  36. package/admin/src/api/settings.js +0 -14
  37. package/admin/src/components/Editor/index.js +0 -60
  38. package/admin/src/components/Initializer/index.js +0 -26
  39. package/admin/src/components/MediaLib/index.js +0 -43
  40. package/admin/src/components/PluginIcon/index.js +0 -12
  41. package/admin/src/components/Wysiwyg/index.js +0 -122
  42. package/admin/src/index.js +0 -78
  43. package/admin/src/pages/App/index.js +0 -25
  44. package/admin/src/pages/HomePage/index.js +0 -7
  45. package/admin/src/pages/Settings/index.js +0 -134
  46. package/admin/src/permissions.js +0 -11
  47. package/admin/src/pluginId.js +0 -5
  48. package/admin/src/translations/cs.json +0 -10
  49. package/admin/src/translations/en.json +0 -10
  50. package/admin/src/translations/sk.json +0 -10
  51. package/admin/src/utils/axiosInstance.js +0 -40
  52. package/admin/src/utils/get-trad.js +0 -5
  53. package/admin/src/utils/index.js +0 -2
  54. package/server/bootstrap.js +0 -19
  55. package/server/config/index.js +0 -6
  56. package/server/content-types/index.js +0 -3
  57. package/server/controllers/config.js +0 -12
  58. package/server/controllers/index.js +0 -9
  59. package/server/controllers/settings.js +0 -30
  60. package/server/destroy.js +0 -5
  61. package/server/index.js +0 -25
  62. package/server/middlewares/index.js +0 -3
  63. package/server/policies/index.js +0 -3
  64. package/server/register.js +0 -5
  65. package/server/routes/config.js +0 -13
  66. package/server/routes/index.js +0 -7
  67. package/server/routes/settings.js +0 -23
  68. package/server/services/config.js +0 -9
  69. package/server/services/index.js +0 -9
  70. package/server/services/settings.js +0 -36
  71. package/strapi-admin.js +0 -3
  72. package/strapi-server.js +0 -3
@@ -0,0 +1,294 @@
1
+ const bootstrap = async ({ strapi: strapi2 }) => {
2
+ const actions = [
3
+ {
4
+ section: "plugins",
5
+ displayName: "Access the plugin settings",
6
+ uid: "settings.read",
7
+ pluginName: "tinymce"
8
+ },
9
+ {
10
+ section: "plugins",
11
+ displayName: "Menu link to plugin settings",
12
+ uid: "menu-link",
13
+ pluginName: "tinymce"
14
+ }
15
+ ];
16
+ await strapi2.admin.services.permission.actionProvider.registerMany(actions);
17
+ };
18
+ const destroy = ({ strapi: strapi2 }) => {
19
+ };
20
+ const name = "@kookaat/strapi-plugin-tinymce";
21
+ const version = "2.0.1";
22
+ const description = "Strapi custom field with a customized build of TinyMCE richtext editor.";
23
+ const keywords = [
24
+ "strapi",
25
+ "tinymce",
26
+ "tinymce 7",
27
+ "wysiwyg",
28
+ "rich text",
29
+ "editor"
30
+ ];
31
+ const license = "MIT";
32
+ const author = {
33
+ name: "M.Hossein Zendehpey (forked from SKLINET s.r.o.)",
34
+ url: "https://github.com/mhzendehpey"
35
+ };
36
+ const type = "commonjs";
37
+ const exports = {
38
+ "./package.json": "./package.json",
39
+ "./strapi-admin": {
40
+ types: "./dist/admin/src/index.d.ts",
41
+ source: "./admin/src/index.ts",
42
+ "import": "./dist/admin/index.mjs",
43
+ require: "./dist/admin/index.js",
44
+ "default": "./dist/admin/index.js"
45
+ },
46
+ "./strapi-server": {
47
+ types: "./dist/server/src/index.d.ts",
48
+ source: "./server/src/index.ts",
49
+ "import": "./dist/server/index.mjs",
50
+ require: "./dist/server/index.js",
51
+ "default": "./dist/server/index.js"
52
+ }
53
+ };
54
+ const files = [
55
+ "dist"
56
+ ];
57
+ const scripts = {
58
+ build: "strapi-plugin build",
59
+ "test:ts:back": "run -T tsc -p server/tsconfig.json",
60
+ "test:ts:front": "run -T tsc -p admin/tsconfig.json",
61
+ verify: "strapi-plugin verify",
62
+ watch: "strapi-plugin watch",
63
+ "watch:link": "strapi-plugin watch:link"
64
+ };
65
+ const dependencies = {
66
+ "@strapi/design-system": "^2.0.0-rc.11",
67
+ "@strapi/icons": "^2.0.0-rc.11",
68
+ "@tinymce/tinymce-react": "^5.1.1",
69
+ "react-intl": "^6.8.4",
70
+ "tinymce-i18n": "^24.10.28"
71
+ };
72
+ const devDependencies = {
73
+ "@strapi/sdk-plugin": "^5.2.7",
74
+ "@strapi/strapi": "^5.33.1",
75
+ "@strapi/typescript-utils": "5.1.1",
76
+ "@types/react": "^18.3.10",
77
+ "@types/react-dom": "^18.3.0",
78
+ prettier: "^3.3.3",
79
+ react: "^18.3.1",
80
+ "react-dom": "^18.3.1",
81
+ "react-router-dom": "^6.26.2",
82
+ "styled-components": "^6.1.13",
83
+ typescript: "^5.6.2"
84
+ };
85
+ const peerDependencies = {
86
+ "@strapi/sdk-plugin": "^5.2.7",
87
+ "@strapi/strapi": "^5.1.1",
88
+ react: "^18.3.1",
89
+ "react-dom": "^18.3.1",
90
+ "react-router-dom": "^6.27.0",
91
+ "styled-components": "^6.1.13"
92
+ };
93
+ const strapi$1 = {
94
+ displayName: "TinyMCE",
95
+ name: "tinymce",
96
+ description: "Strapi custom field with a customized build of TinyMCE richtext editor.",
97
+ kind: "plugin"
98
+ };
99
+ const pluginPkg = {
100
+ name,
101
+ version,
102
+ description,
103
+ keywords,
104
+ license,
105
+ author,
106
+ type,
107
+ exports,
108
+ files,
109
+ scripts,
110
+ dependencies,
111
+ devDependencies,
112
+ peerDependencies,
113
+ strapi: strapi$1
114
+ };
115
+ const PLUGIN_ID = pluginPkg.name.replace(/^(@kookaat\/strapi-)plugin-/i, "");
116
+ const register = ({ strapi: strapi2 }) => {
117
+ strapi2.customFields.register({
118
+ name: "tinymce",
119
+ plugin: PLUGIN_ID,
120
+ type: "richtext"
121
+ });
122
+ };
123
+ const config$3 = {
124
+ default: {},
125
+ validator() {
126
+ }
127
+ };
128
+ const contentTypes = {};
129
+ const admin$1 = {
130
+ async uploadImage(ctx) {
131
+ const file = Array.isArray(ctx.request.files.files) ? ctx.request.files.files[0] : ctx.request.files.files;
132
+ if (!file) {
133
+ return ctx.badRequest("No file uploaded");
134
+ }
135
+ try {
136
+ const [createdFile] = await strapi.plugins.upload.services.upload.upload({
137
+ data: {
138
+ fileInfo: {
139
+ name: file.originalFilename,
140
+ caption: "",
141
+ alternativeText: ""
142
+ }
143
+ },
144
+ files: file
145
+ });
146
+ ctx.body = { location: createdFile.url };
147
+ } catch (error) {
148
+ ctx.internalServerError(`Image upload failed ${error?.message || error?.toString()}`);
149
+ }
150
+ }
151
+ };
152
+ const config$2 = {
153
+ getConfig: async (ctx) => {
154
+ const { configKey } = ctx.params;
155
+ const config2 = await strapi.plugin("tinymce").service("config").getConfig(configKey);
156
+ ctx.send(config2);
157
+ }
158
+ };
159
+ const settings$2 = {
160
+ getSettings: async (ctx) => {
161
+ try {
162
+ ctx.body = await strapi.plugin("tinymce").service("settings").getSettings();
163
+ } catch (err) {
164
+ ctx.body = err;
165
+ ctx.throw(500, err);
166
+ }
167
+ },
168
+ setSettings: async (ctx) => {
169
+ const { body } = ctx.request;
170
+ try {
171
+ await strapi.plugin("tinymce").service("settings").setSettings(body);
172
+ ctx.body = await strapi.plugin("tinymce").service("settings").getSettings();
173
+ } catch (err) {
174
+ ctx.throw(500, err);
175
+ }
176
+ }
177
+ };
178
+ const controllers = {
179
+ admin: admin$1,
180
+ config: config$2,
181
+ settings: settings$2
182
+ };
183
+ const middlewares = {};
184
+ const policies = {};
185
+ const admin = {
186
+ routes: [
187
+ {
188
+ method: "POST",
189
+ path: "/uploadImage",
190
+ handler: "admin.uploadImage",
191
+ // Enforce admin authentication
192
+ config: { auth: { scope: ["admin::isAuthenticatedAdmin"] } }
193
+ }
194
+ ]
195
+ };
196
+ const config$1 = {
197
+ type: "admin",
198
+ routes: [
199
+ {
200
+ method: "GET",
201
+ path: "/config/:configKey",
202
+ handler: "config.getConfig",
203
+ config: { policies: [] }
204
+ }
205
+ ]
206
+ };
207
+ const settings$1 = {
208
+ type: "admin",
209
+ routes: [
210
+ {
211
+ method: "GET",
212
+ path: "/settings",
213
+ handler: "settings.getSettings",
214
+ config: {
215
+ policies: [],
216
+ auth: false
217
+ }
218
+ },
219
+ {
220
+ method: "POST",
221
+ path: "/settings",
222
+ handler: "settings.setSettings",
223
+ config: {
224
+ policies: [],
225
+ auth: false
226
+ }
227
+ }
228
+ ]
229
+ };
230
+ const routes = {
231
+ admin,
232
+ config: config$1,
233
+ settings: settings$1
234
+ };
235
+ const config = ({ strapi: strapi2 }) => {
236
+ return {
237
+ getConfig(key = "editor") {
238
+ return strapi2.plugin("tinymce").config(key) ?? {};
239
+ }
240
+ };
241
+ };
242
+ function getPluginStore() {
243
+ return strapi.store({
244
+ environment: "",
245
+ type: "plugin",
246
+ name: "tinymce"
247
+ });
248
+ }
249
+ async function createDefaultConfig() {
250
+ const pluginStore = getPluginStore();
251
+ const value = {
252
+ apiKey: ""
253
+ };
254
+ await pluginStore.set({ key: "settings", value });
255
+ return pluginStore.get({ key: "settings" });
256
+ }
257
+ const settings = () => {
258
+ return {
259
+ async getSettings() {
260
+ const pluginStore = getPluginStore();
261
+ let config2 = await pluginStore.get({ key: "settings" });
262
+ if (!config2) {
263
+ config2 = await createDefaultConfig();
264
+ }
265
+ return config2;
266
+ },
267
+ async setSettings(settings2) {
268
+ const value = settings2;
269
+ const pluginStore = getPluginStore();
270
+ await pluginStore.set({ key: "settings", value });
271
+ return pluginStore.get({ key: "settings" });
272
+ }
273
+ };
274
+ };
275
+ const services = {
276
+ config,
277
+ settings
278
+ };
279
+ const index = {
280
+ register,
281
+ bootstrap,
282
+ destroy,
283
+ config: config$3,
284
+ controllers,
285
+ routes,
286
+ services,
287
+ contentTypes,
288
+ policies,
289
+ middlewares
290
+ };
291
+ export {
292
+ index as default
293
+ };
294
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +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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"}
package/package.json CHANGED
@@ -1,36 +1,81 @@
1
1
  {
2
2
  "name": "@kookaat/strapi-plugin-tinymce",
3
- "version": "2.0.0",
4
- "description": "Replaces the default Strapi WYSIWYG editor with a customized build of TinyMCE editor.",
5
- "private": false,
3
+ "version": "2.0.2",
4
+ "description": "Strapi custom field with a customized build of TinyMCE richtext editor.",
6
5
  "keywords": [
7
6
  "strapi",
8
7
  "tinymce",
9
- "tinymce 6",
8
+ "tinymce 7",
10
9
  "wysiwyg",
11
10
  "rich text",
12
11
  "editor"
13
12
  ],
14
- "strapi": {
15
- "displayName": "TinyMCE",
16
- "name": "tinymce",
17
- "description": "Replaces the default Strapi WYSIWYG editor with a customized build of TinyMCE editor.",
18
- "kind": "plugin"
19
- },
20
- "dependencies": {
21
- "@strapi/helper-plugin": "^4.26.0",
22
- "@tinymce/tinymce-react": "4.3.2"
23
- },
13
+ "license": "MIT",
24
14
  "author": {
25
15
  "name": "M.Hossein Zendehpey (forked from SKLINET s.r.o.)",
26
16
  "url": "https://github.com/mhzendehpey"
27
17
  },
28
- "repository": {
29
- "url": "git+https://github.com/mhzendehpey/strapi-plugin-tinymce"
18
+ "type": "commonjs",
19
+ "exports": {
20
+ "./package.json": "./package.json",
21
+ "./strapi-admin": {
22
+ "types": "./dist/admin/src/index.d.ts",
23
+ "source": "./admin/src/index.ts",
24
+ "import": "./dist/admin/index.mjs",
25
+ "require": "./dist/admin/index.js",
26
+ "default": "./dist/admin/index.js"
27
+ },
28
+ "./strapi-server": {
29
+ "types": "./dist/server/src/index.d.ts",
30
+ "source": "./server/src/index.ts",
31
+ "import": "./dist/server/index.mjs",
32
+ "require": "./dist/server/index.js",
33
+ "default": "./dist/server/index.js"
34
+ }
35
+ },
36
+ "files": [
37
+ "dist"
38
+ ],
39
+ "scripts": {
40
+ "build": "strapi-plugin build",
41
+ "test:ts:back": "run -T tsc -p server/tsconfig.json",
42
+ "test:ts:front": "run -T tsc -p admin/tsconfig.json",
43
+ "verify": "strapi-plugin verify",
44
+ "watch": "strapi-plugin watch",
45
+ "watch:link": "strapi-plugin watch:link"
46
+ },
47
+ "dependencies": {
48
+ "@strapi/design-system": "^2.0.0-rc.11",
49
+ "@strapi/icons": "^2.0.0-rc.11",
50
+ "@tinymce/tinymce-react": "^5.1.1",
51
+ "react-intl": "^6.8.4",
52
+ "tinymce-i18n": "^24.10.28"
53
+ },
54
+ "devDependencies": {
55
+ "@strapi/sdk-plugin": "^5.2.7",
56
+ "@strapi/strapi": "^5.33.1",
57
+ "@strapi/typescript-utils": "5.1.1",
58
+ "@types/react": "^18.3.10",
59
+ "@types/react-dom": "^18.3.0",
60
+ "prettier": "^3.3.3",
61
+ "react": "^18.3.1",
62
+ "react-dom": "^18.3.1",
63
+ "react-router-dom": "^6.26.2",
64
+ "styled-components": "^6.1.13",
65
+ "typescript": "^5.6.2"
30
66
  },
31
- "engines": {
32
- "node": ">=14.19.1 <=24.x.x",
33
- "npm": ">=6.0.0"
67
+ "peerDependencies": {
68
+ "@strapi/sdk-plugin": "^5.2.7",
69
+ "@strapi/strapi": "^5.1.1",
70
+ "react": "^18.3.1",
71
+ "react-dom": "^18.3.1",
72
+ "react-router-dom": "^6.27.0",
73
+ "styled-components": "^6.1.13"
34
74
  },
35
- "license": "MIT"
75
+ "strapi": {
76
+ "displayName": "TinyMCE",
77
+ "name": "tinymce",
78
+ "description": "Strapi custom field with a customized build of TinyMCE richtext editor.",
79
+ "kind": "plugin"
80
+ }
36
81
  }
package/.github/stale.yml DELETED
@@ -1,17 +0,0 @@
1
- # Number of days of inactivity before an issue becomes stale
2
- daysUntilStale: 30
3
- # Number of days of inactivity before a stale issue is closed
4
- daysUntilClose: 7
5
- # Issues with these labels will never be considered stale
6
- exemptLabels:
7
- - pinned
8
- - security
9
- # Label to use when marking an issue as stale
10
- staleLabel: wontfix
11
- # Comment to post when marking an issue as stale. Set to `false` to disable
12
- markComment: >
13
- This issue has been automatically marked as stale because it has not had
14
- recent activity. It will be closed if no further activity occurs. Thank you
15
- for your contributions.
16
- # Comment to post when closing a stale issue. Set to `false` to disable
17
- closeComment: false
@@ -1,14 +0,0 @@
1
- import { axiosInstance } from "../utils";
2
-
3
- const taskRequests = {
4
- getSettings: async () => {
5
- const data = await axiosInstance.get(`/tinymce/settings`);
6
- return data;
7
- },
8
- setSettings: async (data) => {
9
- return await axiosInstance.post(`/tinymce/settings`, {
10
- apiKey: data,
11
- });
12
- },
13
- };
14
- export default taskRequests;
@@ -1,60 +0,0 @@
1
- import React, { useEffect, useState } from "react";
2
- import PropTypes from "prop-types";
3
- import { Editor } from "@tinymce/tinymce-react";
4
- import { useFetchClient } from "@strapi/helper-plugin";
5
- import pluginId from "../../pluginId";
6
-
7
- const TinyEditor = ({ onChange, name, value }) => {
8
- const [pluginConfig, setPluginConfig] = useState();
9
- const uploadUrl = `${window.strapi.backendURL}/api/upload`;
10
- const { get } = useFetchClient();
11
-
12
- useEffect(() => {
13
- const getPluginConfig = async () => {
14
- const editor = await get(`/${pluginId}/config/editor`);
15
- if (editor) {
16
- setPluginConfig(editor);
17
- }
18
- };
19
- getPluginConfig();
20
- }, []);
21
-
22
- return (
23
- pluginConfig ?
24
- <Editor
25
- tinymceScriptSrc={pluginConfig?.tinymceScriptSrc}
26
- value={value}
27
- tagName={name}
28
- onEditorChange={(editorContent) => {
29
- onChange({ target: { name, value: editorContent } });
30
- }}
31
- outputFormat={pluginConfig?.outputFormat || "html"}
32
- init={{
33
- ...pluginConfig?.editorConfig,
34
- images_upload_handler: async (blobInfo) => {
35
- const formData = new FormData();
36
- formData.append("files", blobInfo.blob());
37
- const response = await fetch(uploadUrl, {
38
- method: "POST",
39
- headers: {
40
- Authorization: "Bearer ",
41
- },
42
- body: formData,
43
- })
44
- .then((response) => response.json())
45
- .catch(function (err) {
46
- console.log("error:", err);
47
- });
48
- return response?.[0]?.url || '';
49
- },
50
- }}
51
- />
52
- : <></>
53
- );
54
- };
55
- TinyEditor.propTypes = {
56
- onChange: PropTypes.func.isRequired,
57
- name: PropTypes.string.isRequired,
58
- value: PropTypes.string,
59
- };
60
- export default TinyEditor;
@@ -1,26 +0,0 @@
1
- /**
2
- *
3
- * Initializer
4
- *
5
- */
6
-
7
- import { useEffect, useRef } from 'react';
8
- import PropTypes from 'prop-types';
9
- import pluginId from '../../pluginId';
10
-
11
- const Initializer = ({ setPlugin }) => {
12
- const ref = useRef();
13
- ref.current = setPlugin;
14
-
15
- useEffect(() => {
16
- ref.current(pluginId);
17
- }, []);
18
-
19
- return null;
20
- };
21
-
22
- Initializer.propTypes = {
23
- setPlugin: PropTypes.func.isRequired,
24
- };
25
-
26
- export default Initializer;
@@ -1,43 +0,0 @@
1
- import React from "react";
2
- import { useLibrary } from "@strapi/helper-plugin";
3
- import PropTypes from "prop-types";
4
-
5
- const MediaLib = ({ isOpen, onChange, onToggle }) => {
6
- const { components } = useLibrary();
7
- const MediaLibraryDialog = components["media-library"];
8
-
9
- const handleSelectAssets = (files) => {
10
- const formattedFiles = files.map((f) => ({
11
- alt: f.alternativeText || f.name,
12
- url: window.strapi.backendURL + f.url,
13
- mime: f.mime,
14
- }));
15
-
16
- onChange(formattedFiles);
17
- };
18
-
19
- if (!isOpen) {
20
- return null;
21
- }
22
-
23
- return (
24
- <MediaLibraryDialog
25
- onClose={onToggle}
26
- onSelectAssets={handleSelectAssets}
27
- />
28
- );
29
- };
30
-
31
- MediaLib.defaultProps = {
32
- isOpen: false,
33
- onChange: () => {},
34
- onToggle: () => {},
35
- };
36
-
37
- MediaLib.propTypes = {
38
- isOpen: PropTypes.bool,
39
- onChange: PropTypes.func,
40
- onToggle: PropTypes.func,
41
- };
42
-
43
- export default MediaLib;
@@ -1,12 +0,0 @@
1
- /**
2
- *
3
- * PluginIcon
4
- *
5
- */
6
-
7
- import React from "react";
8
- import Pencil from "@strapi/icons/Pencil";
9
-
10
- const PluginIcon = () => <Pencil />;
11
-
12
- export default PluginIcon;