@ckeditor/ckeditor5-autosave 41.3.1 → 41.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (195) hide show
  1. package/dist/index-content.css +4 -0
  2. package/dist/index-editor.css +4 -0
  3. package/dist/index.css +4 -0
  4. package/dist/index.js +186 -0
  5. package/dist/index.js.map +1 -0
  6. package/dist/translations/af.d.ts +8 -0
  7. package/dist/translations/af.js +5 -0
  8. package/dist/translations/af.umd.js +11 -0
  9. package/dist/translations/ar.d.ts +8 -0
  10. package/dist/translations/ar.js +5 -0
  11. package/dist/translations/ar.umd.js +11 -0
  12. package/dist/translations/az.d.ts +8 -0
  13. package/dist/translations/az.js +5 -0
  14. package/dist/translations/az.umd.js +11 -0
  15. package/dist/translations/bg.d.ts +8 -0
  16. package/dist/translations/bg.js +5 -0
  17. package/dist/translations/bg.umd.js +11 -0
  18. package/dist/translations/bn.d.ts +8 -0
  19. package/dist/translations/bn.js +5 -0
  20. package/dist/translations/bn.umd.js +11 -0
  21. package/dist/translations/bs.d.ts +8 -0
  22. package/dist/translations/bs.js +5 -0
  23. package/dist/translations/bs.umd.js +11 -0
  24. package/dist/translations/ca.d.ts +8 -0
  25. package/dist/translations/ca.js +5 -0
  26. package/dist/translations/ca.umd.js +11 -0
  27. package/dist/translations/cs.d.ts +8 -0
  28. package/dist/translations/cs.js +5 -0
  29. package/dist/translations/cs.umd.js +11 -0
  30. package/dist/translations/da.d.ts +8 -0
  31. package/dist/translations/da.js +5 -0
  32. package/dist/translations/da.umd.js +11 -0
  33. package/dist/translations/de-ch.d.ts +8 -0
  34. package/dist/translations/de-ch.js +5 -0
  35. package/dist/translations/de-ch.umd.js +11 -0
  36. package/dist/translations/de.d.ts +8 -0
  37. package/dist/translations/de.js +5 -0
  38. package/dist/translations/de.umd.js +11 -0
  39. package/dist/translations/el.d.ts +8 -0
  40. package/dist/translations/el.js +5 -0
  41. package/dist/translations/el.umd.js +11 -0
  42. package/dist/translations/en-au.d.ts +8 -0
  43. package/dist/translations/en-au.js +5 -0
  44. package/dist/translations/en-au.umd.js +11 -0
  45. package/dist/translations/en-gb.d.ts +8 -0
  46. package/dist/translations/en-gb.js +5 -0
  47. package/dist/translations/en-gb.umd.js +11 -0
  48. package/dist/translations/en.d.ts +8 -0
  49. package/dist/translations/en.js +5 -0
  50. package/dist/translations/en.umd.js +11 -0
  51. package/dist/translations/es-co.d.ts +8 -0
  52. package/dist/translations/es-co.js +5 -0
  53. package/dist/translations/es-co.umd.js +11 -0
  54. package/dist/translations/es.d.ts +8 -0
  55. package/dist/translations/es.js +5 -0
  56. package/dist/translations/es.umd.js +11 -0
  57. package/dist/translations/et.d.ts +8 -0
  58. package/dist/translations/et.js +5 -0
  59. package/dist/translations/et.umd.js +11 -0
  60. package/dist/translations/fa.d.ts +8 -0
  61. package/dist/translations/fa.js +5 -0
  62. package/dist/translations/fa.umd.js +11 -0
  63. package/dist/translations/fi.d.ts +8 -0
  64. package/dist/translations/fi.js +5 -0
  65. package/dist/translations/fi.umd.js +11 -0
  66. package/dist/translations/fr.d.ts +8 -0
  67. package/dist/translations/fr.js +5 -0
  68. package/dist/translations/fr.umd.js +11 -0
  69. package/dist/translations/gl.d.ts +8 -0
  70. package/dist/translations/gl.js +5 -0
  71. package/dist/translations/gl.umd.js +11 -0
  72. package/dist/translations/he.d.ts +8 -0
  73. package/dist/translations/he.js +5 -0
  74. package/dist/translations/he.umd.js +11 -0
  75. package/dist/translations/hi.d.ts +8 -0
  76. package/dist/translations/hi.js +5 -0
  77. package/dist/translations/hi.umd.js +11 -0
  78. package/dist/translations/hr.d.ts +8 -0
  79. package/dist/translations/hr.js +5 -0
  80. package/dist/translations/hr.umd.js +11 -0
  81. package/dist/translations/hu.d.ts +8 -0
  82. package/dist/translations/hu.js +5 -0
  83. package/dist/translations/hu.umd.js +11 -0
  84. package/dist/translations/hy.d.ts +8 -0
  85. package/dist/translations/hy.js +5 -0
  86. package/dist/translations/hy.umd.js +11 -0
  87. package/dist/translations/id.d.ts +8 -0
  88. package/dist/translations/id.js +5 -0
  89. package/dist/translations/id.umd.js +11 -0
  90. package/dist/translations/it.d.ts +8 -0
  91. package/dist/translations/it.js +5 -0
  92. package/dist/translations/it.umd.js +11 -0
  93. package/dist/translations/ja.d.ts +8 -0
  94. package/dist/translations/ja.js +5 -0
  95. package/dist/translations/ja.umd.js +11 -0
  96. package/dist/translations/jv.d.ts +8 -0
  97. package/dist/translations/jv.js +5 -0
  98. package/dist/translations/jv.umd.js +11 -0
  99. package/dist/translations/km.d.ts +8 -0
  100. package/dist/translations/km.js +5 -0
  101. package/dist/translations/km.umd.js +11 -0
  102. package/dist/translations/ko.d.ts +8 -0
  103. package/dist/translations/ko.js +5 -0
  104. package/dist/translations/ko.umd.js +11 -0
  105. package/dist/translations/ku.d.ts +8 -0
  106. package/dist/translations/ku.js +5 -0
  107. package/dist/translations/ku.umd.js +11 -0
  108. package/dist/translations/lt.d.ts +8 -0
  109. package/dist/translations/lt.js +5 -0
  110. package/dist/translations/lt.umd.js +11 -0
  111. package/dist/translations/lv.d.ts +8 -0
  112. package/dist/translations/lv.js +5 -0
  113. package/dist/translations/lv.umd.js +11 -0
  114. package/dist/translations/ms.d.ts +8 -0
  115. package/dist/translations/ms.js +5 -0
  116. package/dist/translations/ms.umd.js +11 -0
  117. package/dist/translations/ne.d.ts +8 -0
  118. package/dist/translations/ne.js +5 -0
  119. package/dist/translations/ne.umd.js +11 -0
  120. package/dist/translations/nl.d.ts +8 -0
  121. package/dist/translations/nl.js +5 -0
  122. package/dist/translations/nl.umd.js +11 -0
  123. package/dist/translations/no.d.ts +8 -0
  124. package/dist/translations/no.js +5 -0
  125. package/dist/translations/no.umd.js +11 -0
  126. package/dist/translations/pl.d.ts +8 -0
  127. package/dist/translations/pl.js +5 -0
  128. package/dist/translations/pl.umd.js +11 -0
  129. package/dist/translations/pt-br.d.ts +8 -0
  130. package/dist/translations/pt-br.js +5 -0
  131. package/dist/translations/pt-br.umd.js +11 -0
  132. package/dist/translations/pt.d.ts +8 -0
  133. package/dist/translations/pt.js +5 -0
  134. package/dist/translations/pt.umd.js +11 -0
  135. package/dist/translations/ro.d.ts +8 -0
  136. package/dist/translations/ro.js +5 -0
  137. package/dist/translations/ro.umd.js +11 -0
  138. package/dist/translations/ru.d.ts +8 -0
  139. package/dist/translations/ru.js +5 -0
  140. package/dist/translations/ru.umd.js +11 -0
  141. package/dist/translations/sk.d.ts +8 -0
  142. package/dist/translations/sk.js +5 -0
  143. package/dist/translations/sk.umd.js +11 -0
  144. package/dist/translations/sl.d.ts +8 -0
  145. package/dist/translations/sl.js +5 -0
  146. package/dist/translations/sl.umd.js +11 -0
  147. package/dist/translations/sq.d.ts +8 -0
  148. package/dist/translations/sq.js +5 -0
  149. package/dist/translations/sq.umd.js +11 -0
  150. package/dist/translations/sr-latn.d.ts +8 -0
  151. package/dist/translations/sr-latn.js +5 -0
  152. package/dist/translations/sr-latn.umd.js +11 -0
  153. package/dist/translations/sr.d.ts +8 -0
  154. package/dist/translations/sr.js +5 -0
  155. package/dist/translations/sr.umd.js +11 -0
  156. package/dist/translations/sv.d.ts +8 -0
  157. package/dist/translations/sv.js +5 -0
  158. package/dist/translations/sv.umd.js +11 -0
  159. package/dist/translations/th.d.ts +8 -0
  160. package/dist/translations/th.js +5 -0
  161. package/dist/translations/th.umd.js +11 -0
  162. package/dist/translations/tk.d.ts +8 -0
  163. package/dist/translations/tk.js +5 -0
  164. package/dist/translations/tk.umd.js +11 -0
  165. package/dist/translations/tr.d.ts +8 -0
  166. package/dist/translations/tr.js +5 -0
  167. package/dist/translations/tr.umd.js +11 -0
  168. package/dist/translations/tt.d.ts +8 -0
  169. package/dist/translations/tt.js +5 -0
  170. package/dist/translations/tt.umd.js +11 -0
  171. package/dist/translations/ug.d.ts +8 -0
  172. package/dist/translations/ug.js +5 -0
  173. package/dist/translations/ug.umd.js +11 -0
  174. package/dist/translations/uk.d.ts +8 -0
  175. package/dist/translations/uk.js +5 -0
  176. package/dist/translations/uk.umd.js +11 -0
  177. package/dist/translations/ur.d.ts +8 -0
  178. package/dist/translations/ur.js +5 -0
  179. package/dist/translations/ur.umd.js +11 -0
  180. package/dist/translations/uz.d.ts +8 -0
  181. package/dist/translations/uz.js +5 -0
  182. package/dist/translations/uz.umd.js +11 -0
  183. package/dist/translations/vi.d.ts +8 -0
  184. package/dist/translations/vi.js +5 -0
  185. package/dist/translations/vi.umd.js +11 -0
  186. package/dist/translations/zh-cn.d.ts +8 -0
  187. package/dist/translations/zh-cn.js +5 -0
  188. package/dist/translations/zh-cn.umd.js +11 -0
  189. package/dist/translations/zh.d.ts +8 -0
  190. package/dist/translations/zh.js +5 -0
  191. package/dist/translations/zh.umd.js +11 -0
  192. package/dist/types/augmentation.d.ts +22 -0
  193. package/dist/types/autosave.d.ts +223 -0
  194. package/dist/types/index.d.ts +13 -0
  195. package/package.json +3 -2
@@ -0,0 +1,4 @@
1
+ /**
2
+ * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
4
+ */
@@ -0,0 +1,4 @@
1
+ /**
2
+ * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
4
+ */
package/dist/index.css ADDED
@@ -0,0 +1,4 @@
1
+ /**
2
+ * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
4
+ */
package/dist/index.js ADDED
@@ -0,0 +1,186 @@
1
+ /**
2
+ * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
4
+ */
5
+ import { Plugin, PendingActions } from '@ckeditor/ckeditor5-core/dist/index.js';
6
+ import { DomEmitterMixin } from '@ckeditor/ckeditor5-utils/dist/index.js';
7
+ import { debounce } from 'lodash-es';
8
+
9
+ class Autosave extends Plugin {
10
+ /**
11
+ * @inheritDoc
12
+ */ static get pluginName() {
13
+ return 'Autosave';
14
+ }
15
+ /**
16
+ * @inheritDoc
17
+ */ static get requires() {
18
+ return [
19
+ PendingActions
20
+ ];
21
+ }
22
+ /**
23
+ * @inheritDoc
24
+ */ init() {
25
+ const editor = this.editor;
26
+ const doc = editor.model.document;
27
+ // Add the listener only after the editor is initialized to prevent firing save callback on data init.
28
+ this.listenTo(editor, 'ready', ()=>{
29
+ this.listenTo(doc, 'change:data', (evt, batch)=>{
30
+ if (!this._saveCallbacks.length) {
31
+ return;
32
+ }
33
+ if (!batch.isLocal) {
34
+ return;
35
+ }
36
+ if (this.state === 'synchronized') {
37
+ this.state = 'waiting';
38
+ // Set pending action already when we are waiting for the autosave callback.
39
+ this._setPendingAction();
40
+ }
41
+ if (this.state === 'waiting') {
42
+ this._debouncedSave();
43
+ }
44
+ // If the plugin is in `saving` state, it will change its state later basing on the `document.version`.
45
+ // If the `document.version` will be higher than stored `#_lastDocumentVersion`, then it means, that some `change:data`
46
+ // event has fired in the meantime.
47
+ });
48
+ });
49
+ // Flush on the editor's destroy listener with the highest priority to ensure that
50
+ // `editor.getData()` will be called before plugins are destroyed.
51
+ this.listenTo(editor, 'destroy', ()=>this._flush(), {
52
+ priority: 'highest'
53
+ });
54
+ // It's not possible to easy test it because karma uses `beforeunload` event
55
+ // to warn before full page reload and this event cannot be dispatched manually.
56
+ /* istanbul ignore next -- @preserve */ this._domEmitter.listenTo(window, 'beforeunload', (evtInfo, domEvt)=>{
57
+ if (this._pendingActions.hasAny) {
58
+ domEvt.returnValue = this._pendingActions.first.message;
59
+ }
60
+ });
61
+ }
62
+ /**
63
+ * @inheritDoc
64
+ */ destroy() {
65
+ // There's no need for canceling or flushing the throttled save, as
66
+ // it's done on the editor's destroy event with the highest priority.
67
+ this._domEmitter.stopListening();
68
+ super.destroy();
69
+ }
70
+ /**
71
+ * Immediately calls autosave callback. All previously queued (debounced) callbacks are cleared. If there is already an autosave
72
+ * callback in progress, then the requested save will be performed immediately after the current callback finishes.
73
+ *
74
+ * @returns A promise that will be resolved when the autosave callback is finished.
75
+ */ save() {
76
+ this._debouncedSave.cancel();
77
+ return this._save();
78
+ }
79
+ /**
80
+ * Invokes the remaining `_save()` method call.
81
+ */ _flush() {
82
+ this._debouncedSave.flush();
83
+ }
84
+ /**
85
+ * If the adapter is set and a new document version exists,
86
+ * the `_save()` method creates a pending action and calls the `adapter.save()` method.
87
+ * It waits for the result and then removes the created pending action.
88
+ *
89
+ * @returns A promise that will be resolved when the autosave callback is finished.
90
+ */ _save() {
91
+ if (this._savePromise) {
92
+ this._makeImmediateSave = this.editor.model.document.version > this._lastDocumentVersion;
93
+ return this._savePromise;
94
+ }
95
+ // Make sure there is a pending action (in case if `_save()` was called through manual `save()` call).
96
+ this._setPendingAction();
97
+ this.state = 'saving';
98
+ this._lastDocumentVersion = this.editor.model.document.version;
99
+ // Wait one promise cycle to be sure that save callbacks are not called inside a conversion or when the editor's state changes.
100
+ this._savePromise = Promise.resolve()// Make autosave callback.
101
+ .then(()=>Promise.all(this._saveCallbacks.map((cb)=>cb(this.editor))))// When the autosave callback is finished, always clear `this._savePromise`, no matter if it was successful or not.
102
+ .finally(()=>{
103
+ this._savePromise = null;
104
+ })// If the save was successful, we have three scenarios:
105
+ //
106
+ // 1. If a save was requested when an autosave callback was already processed, we need to immediately call
107
+ // another autosave callback. In this case, `this._savePromise` will not be resolved until the next callback is done.
108
+ // 2. Otherwise, if changes happened to the model, make a delayed autosave callback (like the change just happened).
109
+ // 3. If no changes happened to the model, return to the `synchronized` state.
110
+ .then(()=>{
111
+ if (this._makeImmediateSave) {
112
+ this._makeImmediateSave = false;
113
+ // Start another autosave callback. Return a promise that will be resolved after the new autosave callback.
114
+ // This way promises returned by `_save()` will not be resolved until all changes are saved.
115
+ //
116
+ // If `save()` was called when another (most often automatic) autosave callback was already processed,
117
+ // the promise returned by `save()` call will be resolved only after new changes have been saved.
118
+ //
119
+ // Note that it would not work correctly if `this._savePromise` is not cleared.
120
+ return this._save();
121
+ } else {
122
+ if (this.editor.model.document.version > this._lastDocumentVersion) {
123
+ this.state = 'waiting';
124
+ this._debouncedSave();
125
+ } else {
126
+ this.state = 'synchronized';
127
+ this._pendingActions.remove(this._action);
128
+ this._action = null;
129
+ }
130
+ }
131
+ })// In case of an error, retry the autosave callback after a delay (and also throw the original error).
132
+ .catch((err)=>{
133
+ // Change state to `error` so that listeners handling autosave error can be called.
134
+ this.state = 'error';
135
+ // Then, immediately change to the `saving` state as described above.
136
+ // Being in the `saving` state ensures that the autosave callback won't be delayed further by the `change:data` listener.
137
+ this.state = 'saving';
138
+ this._debouncedSave();
139
+ throw err;
140
+ });
141
+ return this._savePromise;
142
+ }
143
+ /**
144
+ * Creates a pending action if it is not set already.
145
+ */ _setPendingAction() {
146
+ const t = this.editor.t;
147
+ if (!this._action) {
148
+ this._action = this._pendingActions.add(t('Saving changes'));
149
+ }
150
+ }
151
+ /**
152
+ * Saves callbacks.
153
+ */ get _saveCallbacks() {
154
+ const saveCallbacks = [];
155
+ if (this.adapter && this.adapter.save) {
156
+ saveCallbacks.push(this.adapter.save);
157
+ }
158
+ if (this._config.save) {
159
+ saveCallbacks.push(this._config.save);
160
+ }
161
+ return saveCallbacks;
162
+ }
163
+ /**
164
+ * @inheritDoc
165
+ */ constructor(editor){
166
+ super(editor);
167
+ /**
168
+ * An action that will be added to the pending action manager for actions happening in that plugin.
169
+ */ this._action = null;
170
+ const config = editor.config.get('autosave') || {};
171
+ // A minimum amount of time that needs to pass after the last action.
172
+ // After that time the provided save callbacks are being called.
173
+ const waitingTime = config.waitingTime || 1000;
174
+ this.set('state', 'synchronized');
175
+ this._debouncedSave = debounce(this._save.bind(this), waitingTime);
176
+ this._lastDocumentVersion = editor.model.document.version;
177
+ this._savePromise = null;
178
+ this._domEmitter = new (DomEmitterMixin())();
179
+ this._config = config;
180
+ this._pendingActions = editor.plugins.get(PendingActions);
181
+ this._makeImmediateSave = false;
182
+ }
183
+ }
184
+
185
+ export { Autosave };
186
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["index.js","../src/autosave.ts"],"names":["Autosave","Plugin","pluginName","requires","PendingActions","init","editor","doc","model","document","listenTo","evt","batch","_saveCallbacks","length","isLocal","state","_setPendingAction","_debouncedSave","_flush","priority","_domEmitter","window","evtInfo","domEvt","_pendingActions","hasAny","returnValue","first","message","destroy","stopListening","save","cancel","_save","flush","_savePromise","_makeImmediateSave","version","_lastDocumentVersion","Promise","resolve","then","all","map","cb","finally","remove","_action","catch","err","t","add","saveCallbacks","adapter","push","_config","constructor","config","get","waitingTime","set","debounce","bind","DomEmitterMixin","plugins"],"mappings":"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","file":"index.js.map","sourcesContent":["import { Plugin, PendingActions } from '@ckeditor/ckeditor5-core/dist/index.js';\nimport { DomEmitterMixin } from '@ckeditor/ckeditor5-utils/dist/index.js';\nimport { debounce } from 'lodash-es';\n\nclass Autosave extends Plugin {\n /**\n * @inheritDoc\n */ static get pluginName() {\n return 'Autosave';\n }\n /**\n * @inheritDoc\n */ static get requires() {\n return [\n PendingActions\n ];\n }\n /**\n * @inheritDoc\n */ init() {\n const editor = this.editor;\n const doc = editor.model.document;\n // Add the listener only after the editor is initialized to prevent firing save callback on data init.\n this.listenTo(editor, 'ready', ()=>{\n this.listenTo(doc, 'change:data', (evt, batch)=>{\n if (!this._saveCallbacks.length) {\n return;\n }\n if (!batch.isLocal) {\n return;\n }\n if (this.state === 'synchronized') {\n this.state = 'waiting';\n // Set pending action already when we are waiting for the autosave callback.\n this._setPendingAction();\n }\n if (this.state === 'waiting') {\n this._debouncedSave();\n }\n // If the plugin is in `saving` state, it will change its state later basing on the `document.version`.\n // If the `document.version` will be higher than stored `#_lastDocumentVersion`, then it means, that some `change:data`\n // event has fired in the meantime.\n });\n });\n // Flush on the editor's destroy listener with the highest priority to ensure that\n // `editor.getData()` will be called before plugins are destroyed.\n this.listenTo(editor, 'destroy', ()=>this._flush(), {\n priority: 'highest'\n });\n // It's not possible to easy test it because karma uses `beforeunload` event\n // to warn before full page reload and this event cannot be dispatched manually.\n /* istanbul ignore next -- @preserve */ this._domEmitter.listenTo(window, 'beforeunload', (evtInfo, domEvt)=>{\n if (this._pendingActions.hasAny) {\n domEvt.returnValue = this._pendingActions.first.message;\n }\n });\n }\n /**\n * @inheritDoc\n */ destroy() {\n // There's no need for canceling or flushing the throttled save, as\n // it's done on the editor's destroy event with the highest priority.\n this._domEmitter.stopListening();\n super.destroy();\n }\n /**\n * Immediately calls autosave callback. All previously queued (debounced) callbacks are cleared. If there is already an autosave\n * callback in progress, then the requested save will be performed immediately after the current callback finishes.\n *\n * @returns A promise that will be resolved when the autosave callback is finished.\n */ save() {\n this._debouncedSave.cancel();\n return this._save();\n }\n /**\n * Invokes the remaining `_save()` method call.\n */ _flush() {\n this._debouncedSave.flush();\n }\n /**\n * If the adapter is set and a new document version exists,\n * the `_save()` method creates a pending action and calls the `adapter.save()` method.\n * It waits for the result and then removes the created pending action.\n *\n * @returns A promise that will be resolved when the autosave callback is finished.\n */ _save() {\n if (this._savePromise) {\n this._makeImmediateSave = this.editor.model.document.version > this._lastDocumentVersion;\n return this._savePromise;\n }\n // Make sure there is a pending action (in case if `_save()` was called through manual `save()` call).\n this._setPendingAction();\n this.state = 'saving';\n this._lastDocumentVersion = this.editor.model.document.version;\n // Wait one promise cycle to be sure that save callbacks are not called inside a conversion or when the editor's state changes.\n this._savePromise = Promise.resolve()// Make autosave callback.\n .then(()=>Promise.all(this._saveCallbacks.map((cb)=>cb(this.editor))))// When the autosave callback is finished, always clear `this._savePromise`, no matter if it was successful or not.\n .finally(()=>{\n this._savePromise = null;\n })// If the save was successful, we have three scenarios:\n //\n // 1. If a save was requested when an autosave callback was already processed, we need to immediately call\n // another autosave callback. In this case, `this._savePromise` will not be resolved until the next callback is done.\n // 2. Otherwise, if changes happened to the model, make a delayed autosave callback (like the change just happened).\n // 3. If no changes happened to the model, return to the `synchronized` state.\n .then(()=>{\n if (this._makeImmediateSave) {\n this._makeImmediateSave = false;\n // Start another autosave callback. Return a promise that will be resolved after the new autosave callback.\n // This way promises returned by `_save()` will not be resolved until all changes are saved.\n //\n // If `save()` was called when another (most often automatic) autosave callback was already processed,\n // the promise returned by `save()` call will be resolved only after new changes have been saved.\n //\n // Note that it would not work correctly if `this._savePromise` is not cleared.\n return this._save();\n } else {\n if (this.editor.model.document.version > this._lastDocumentVersion) {\n this.state = 'waiting';\n this._debouncedSave();\n } else {\n this.state = 'synchronized';\n this._pendingActions.remove(this._action);\n this._action = null;\n }\n }\n })// In case of an error, retry the autosave callback after a delay (and also throw the original error).\n .catch((err)=>{\n // Change state to `error` so that listeners handling autosave error can be called.\n this.state = 'error';\n // Then, immediately change to the `saving` state as described above.\n // Being in the `saving` state ensures that the autosave callback won't be delayed further by the `change:data` listener.\n this.state = 'saving';\n this._debouncedSave();\n throw err;\n });\n return this._savePromise;\n }\n /**\n * Creates a pending action if it is not set already.\n */ _setPendingAction() {\n const t = this.editor.t;\n if (!this._action) {\n this._action = this._pendingActions.add(t('Saving changes'));\n }\n }\n /**\n * Saves callbacks.\n */ get _saveCallbacks() {\n const saveCallbacks = [];\n if (this.adapter && this.adapter.save) {\n saveCallbacks.push(this.adapter.save);\n }\n if (this._config.save) {\n saveCallbacks.push(this._config.save);\n }\n return saveCallbacks;\n }\n /**\n * @inheritDoc\n */ constructor(editor){\n super(editor);\n /**\n * An action that will be added to the pending action manager for actions happening in that plugin.\n */ this._action = null;\n const config = editor.config.get('autosave') || {};\n // A minimum amount of time that needs to pass after the last action.\n // After that time the provided save callbacks are being called.\n const waitingTime = config.waitingTime || 1000;\n this.set('state', 'synchronized');\n this._debouncedSave = debounce(this._save.bind(this), waitingTime);\n this._lastDocumentVersion = editor.model.document.version;\n this._savePromise = null;\n this._domEmitter = new (DomEmitterMixin())();\n this._config = config;\n this._pendingActions = editor.plugins.get(PendingActions);\n this._makeImmediateSave = false;\n }\n}\n\nexport { Autosave };\n//# sourceMappingURL=index.js.map\n","/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module autosave/autosave\n */\n\nimport {\n\tPlugin,\n\tPendingActions,\n\ttype Editor,\n\ttype PendingAction,\n\ttype EditorDestroyEvent,\n\ttype EditorReadyEvent\n} from 'ckeditor5/src/core.js';\n\nimport { DomEmitterMixin, type DomEmitter } from 'ckeditor5/src/utils.js';\n\nimport type { DocumentChangeEvent } from 'ckeditor5/src/engine.js';\n\nimport { debounce, type DebouncedFunc } from 'lodash-es';\n\n/* globals window */\n\n/**\n * The {@link module:autosave/autosave~Autosave} plugin allows you to automatically save the data (e.g. send it to the server)\n * when needed (when the user changed the content).\n *\n * It listens to the {@link module:engine/model/document~Document#event:change:data `editor.model.document#change:data`}\n * and `window#beforeunload` events and calls the\n * {@link module:autosave/autosave~AutosaveAdapter#save `config.autosave.save()`} function.\n *\n * ```ts\n * ClassicEditor\n * \t.create( document.querySelector( '#editor' ), {\n * \t\tplugins: [ ArticlePluginSet, Autosave ],\n * \t\ttoolbar: [ 'heading', '|', 'bold', 'italic', 'link', 'bulletedList', 'numberedList', 'blockQuote', 'undo', 'redo' ],\n * \t\timage: {\n * \t\t\ttoolbar: [ 'imageStyle:block', 'imageStyle:side', '|', 'toggleImageCaption', 'imageTextAlternative' ],\n * \t\t},\n * \t\tautosave: {\n * \t\t\tsave( editor: Editor ) {\n * \t\t\t\t// The saveData() function must return a promise\n * \t\t\t\t// which should be resolved when the data is successfully saved.\n * \t\t\t\treturn saveData( editor.getData() );\n * \t\t\t}\n * \t\t}\n * \t} );\n * ```\n *\n * Read more about this feature in the {@glink features/autosave Autosave} feature guide.\n */\nexport default class Autosave extends Plugin {\n\t/**\n\t * The adapter is an object with a `save()` method. That method will be called whenever\n\t * the data changes. It might be called some time after the change,\n\t * since the event is throttled for performance reasons.\n\t */\n\n\tpublic adapter?: AutosaveAdapter;\n\n\t/**\n\t * The state of this plugin.\n\t *\n\t * The plugin can be in the following states:\n\t *\n\t * * synchronized &ndash; When all changes are saved.\n\t * * waiting &ndash; When the plugin is waiting for other changes before calling `adapter#save()` and `config.autosave.save()`.\n\t * * saving &ndash; When the provided save method is called and the plugin waits for the response.\n\t * * error &ndash When the provided save method will throw an error. This state immediately changes to the `saving` state and\n\t * the save method will be called again in the short period of time.\n\t *\n\t * @observable\n\t * @readonly\n\t */\n\tdeclare public state: 'synchronized' | 'waiting' | 'saving' | 'error';\n\n\t/**\n\t * Debounced save method. The `save()` method is called the specified `waitingTime` after `debouncedSave()` is called,\n\t * unless a new action happens in the meantime.\n\t */\n\tprivate _debouncedSave: DebouncedFunc<( () => void )>;\n\n\t/**\n\t * The last saved document version.\n\t */\n\tprivate _lastDocumentVersion: number;\n\n\t/**\n\t * Promise used for asynchronous save calls.\n\t *\n\t * Created to handle the autosave call to an external data source. It resolves when that call is finished. It is re-used if\n\t * save is called before the promise has been resolved. It is set to `null` if there is no call in progress.\n\t */\n\tprivate _savePromise: Promise<void> | null;\n\n\t/**\n\t * DOM emitter.\n\t */\n\tprivate _domEmitter: DomEmitter;\n\n\t/**\n\t * The configuration of this plugins.\n\t */\n\tprivate _config: AutosaveConfig;\n\n\t/**\n\t * Editor's pending actions manager.\n\t */\n\tprivate _pendingActions: PendingActions;\n\n\t/**\n\t * Informs whether there should be another autosave callback performed, immediately after current autosave callback finishes.\n\t *\n\t * This is set to `true` when there is a save request while autosave callback is already being processed\n\t * and the model has changed since the last save.\n\t */\n\tprivate _makeImmediateSave: boolean;\n\n\t/**\n\t * An action that will be added to the pending action manager for actions happening in that plugin.\n\t */\n\tprivate _action: PendingAction | null = null;\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static get pluginName() {\n\t\treturn 'Autosave' as const;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static get requires() {\n\t\treturn [ PendingActions ] as const;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tconstructor( editor: Editor ) {\n\t\tsuper( editor );\n\n\t\tconst config: AutosaveConfig = editor.config.get( 'autosave' ) || {};\n\n\t\t// A minimum amount of time that needs to pass after the last action.\n\t\t// After that time the provided save callbacks are being called.\n\t\tconst waitingTime = config.waitingTime || 1000;\n\n\t\tthis.set( 'state', 'synchronized' );\n\n\t\tthis._debouncedSave = debounce( this._save.bind( this ), waitingTime );\n\t\tthis._lastDocumentVersion = editor.model.document.version;\n\t\tthis._savePromise = null;\n\t\tthis._domEmitter = new ( DomEmitterMixin() )();\n\t\tthis._config = config;\n\t\tthis._pendingActions = editor.plugins.get( PendingActions );\n\t\tthis._makeImmediateSave = false;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic init(): void {\n\t\tconst editor = this.editor;\n\t\tconst doc = editor.model.document;\n\n\t\t// Add the listener only after the editor is initialized to prevent firing save callback on data init.\n\t\tthis.listenTo<EditorReadyEvent>( editor, 'ready', () => {\n\t\t\tthis.listenTo<DocumentChangeEvent>( doc, 'change:data', ( evt, batch ) => {\n\t\t\t\tif ( !this._saveCallbacks.length ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif ( !batch.isLocal ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif ( this.state === 'synchronized' ) {\n\t\t\t\t\tthis.state = 'waiting';\n\t\t\t\t\t// Set pending action already when we are waiting for the autosave callback.\n\t\t\t\t\tthis._setPendingAction();\n\t\t\t\t}\n\n\t\t\t\tif ( this.state === 'waiting' ) {\n\t\t\t\t\tthis._debouncedSave();\n\t\t\t\t}\n\n\t\t\t\t// If the plugin is in `saving` state, it will change its state later basing on the `document.version`.\n\t\t\t\t// If the `document.version` will be higher than stored `#_lastDocumentVersion`, then it means, that some `change:data`\n\t\t\t\t// event has fired in the meantime.\n\t\t\t} );\n\t\t} );\n\n\t\t// Flush on the editor's destroy listener with the highest priority to ensure that\n\t\t// `editor.getData()` will be called before plugins are destroyed.\n\t\tthis.listenTo<EditorDestroyEvent>( editor, 'destroy', () => this._flush(), { priority: 'highest' } );\n\n\t\t// It's not possible to easy test it because karma uses `beforeunload` event\n\t\t// to warn before full page reload and this event cannot be dispatched manually.\n\t\t/* istanbul ignore next -- @preserve */\n\t\tthis._domEmitter.listenTo( window, 'beforeunload', ( evtInfo, domEvt ) => {\n\t\t\tif ( this._pendingActions.hasAny ) {\n\t\t\t\tdomEvt.returnValue = this._pendingActions.first!.message;\n\t\t\t}\n\t\t} );\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic override destroy(): void {\n\t\t// There's no need for canceling or flushing the throttled save, as\n\t\t// it's done on the editor's destroy event with the highest priority.\n\n\t\tthis._domEmitter.stopListening();\n\t\tsuper.destroy();\n\t}\n\n\t/**\n\t * Immediately calls autosave callback. All previously queued (debounced) callbacks are cleared. If there is already an autosave\n\t * callback in progress, then the requested save will be performed immediately after the current callback finishes.\n\t *\n\t * @returns A promise that will be resolved when the autosave callback is finished.\n\t */\n\tpublic save(): Promise<void> {\n\t\tthis._debouncedSave.cancel();\n\n\t\treturn this._save();\n\t}\n\n\t/**\n\t * Invokes the remaining `_save()` method call.\n\t */\n\tprivate _flush(): void {\n\t\tthis._debouncedSave.flush();\n\t}\n\n\t/**\n\t * If the adapter is set and a new document version exists,\n\t * the `_save()` method creates a pending action and calls the `adapter.save()` method.\n\t * It waits for the result and then removes the created pending action.\n\t *\n\t * @returns A promise that will be resolved when the autosave callback is finished.\n\t */\n\tprivate _save(): Promise<void> {\n\t\tif ( this._savePromise ) {\n\t\t\tthis._makeImmediateSave = this.editor.model.document.version > this._lastDocumentVersion;\n\n\t\t\treturn this._savePromise;\n\t\t}\n\n\t\t// Make sure there is a pending action (in case if `_save()` was called through manual `save()` call).\n\t\tthis._setPendingAction();\n\n\t\tthis.state = 'saving';\n\t\tthis._lastDocumentVersion = this.editor.model.document.version;\n\n\t\t// Wait one promise cycle to be sure that save callbacks are not called inside a conversion or when the editor's state changes.\n\t\tthis._savePromise = Promise.resolve()\n\t\t\t// Make autosave callback.\n\t\t\t.then( () => Promise.all(\n\t\t\t\tthis._saveCallbacks.map( cb => cb( this.editor ) )\n\t\t\t) )\n\t\t\t// When the autosave callback is finished, always clear `this._savePromise`, no matter if it was successful or not.\n\t\t\t.finally( () => {\n\t\t\t\tthis._savePromise = null;\n\t\t\t} )\n\t\t\t// If the save was successful, we have three scenarios:\n\t\t\t//\n\t\t\t// 1. If a save was requested when an autosave callback was already processed, we need to immediately call\n\t\t\t// another autosave callback. In this case, `this._savePromise` will not be resolved until the next callback is done.\n\t\t\t// 2. Otherwise, if changes happened to the model, make a delayed autosave callback (like the change just happened).\n\t\t\t// 3. If no changes happened to the model, return to the `synchronized` state.\n\t\t\t.then( () => {\n\t\t\t\tif ( this._makeImmediateSave ) {\n\t\t\t\t\tthis._makeImmediateSave = false;\n\n\t\t\t\t\t// Start another autosave callback. Return a promise that will be resolved after the new autosave callback.\n\t\t\t\t\t// This way promises returned by `_save()` will not be resolved until all changes are saved.\n\t\t\t\t\t//\n\t\t\t\t\t// If `save()` was called when another (most often automatic) autosave callback was already processed,\n\t\t\t\t\t// the promise returned by `save()` call will be resolved only after new changes have been saved.\n\t\t\t\t\t//\n\t\t\t\t\t// Note that it would not work correctly if `this._savePromise` is not cleared.\n\t\t\t\t\treturn this._save();\n\t\t\t\t} else {\n\t\t\t\t\tif ( this.editor.model.document.version > this._lastDocumentVersion ) {\n\t\t\t\t\t\tthis.state = 'waiting';\n\t\t\t\t\t\tthis._debouncedSave();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.state = 'synchronized';\n\t\t\t\t\t\tthis._pendingActions.remove( this._action! );\n\t\t\t\t\t\tthis._action = null;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} )\n\t\t\t// In case of an error, retry the autosave callback after a delay (and also throw the original error).\n\t\t\t.catch( err => {\n\t\t\t\t// Change state to `error` so that listeners handling autosave error can be called.\n\t\t\t\tthis.state = 'error';\n\t\t\t\t// Then, immediately change to the `saving` state as described above.\n\t\t\t\t// Being in the `saving` state ensures that the autosave callback won't be delayed further by the `change:data` listener.\n\t\t\t\tthis.state = 'saving';\n\n\t\t\t\tthis._debouncedSave();\n\n\t\t\t\tthrow err;\n\t\t\t} );\n\n\t\treturn this._savePromise;\n\t}\n\n\t/**\n\t * Creates a pending action if it is not set already.\n\t */\n\tprivate _setPendingAction(): void {\n\t\tconst t = this.editor.t;\n\n\t\tif ( !this._action ) {\n\t\t\tthis._action = this._pendingActions.add( t( 'Saving changes' ) );\n\t\t}\n\t}\n\n\t/**\n\t * Saves callbacks.\n\t */\n\tprivate get _saveCallbacks(): Array<( editor: Editor ) => Promise<unknown>> {\n\t\tconst saveCallbacks: Array<( editor: Editor ) => Promise<unknown>> = [];\n\n\t\tif ( this.adapter && this.adapter.save ) {\n\t\t\tsaveCallbacks.push( this.adapter.save );\n\t\t}\n\n\t\tif ( this._config.save ) {\n\t\t\tsaveCallbacks.push( this._config.save );\n\t\t}\n\n\t\treturn saveCallbacks;\n\t}\n}\n\n/**\n * An interface that requires the `save()` method.\n *\n * Used by {@link module:autosave/autosave~Autosave#adapter}.\n */\nexport interface AutosaveAdapter {\n\n\t/**\n\t * The method that will be called when the data changes. It should return a promise (e.g. in case of saving content to the database),\n\t * so the autosave plugin will wait for that action before removing it from pending actions.\n\t */\n\tsave( editor: Editor ): Promise<unknown>;\n}\n\n/**\n * The configuration of the {@link module:autosave/autosave~Autosave autosave feature}.\n *\n * ```ts\n * ClassicEditor\n * \t.create( editorElement, {\n * \t\tautosave: {\n * \t\t\tsave( editor: Editor ) {\n * \t\t\t\t// The saveData() function must return a promise\n * \t\t\t\t// which should be resolved when the data is successfully saved.\n * \t\t\t\treturn saveData( editor.getData() );\n * \t\t\t}\n * \t\t}\n * \t} );\n * \t.then( ... )\n * \t.catch( ... );\n * ```\n *\n * See {@link module:core/editor/editorconfig~EditorConfig all editor configuration options}.\n *\n * See also the demo of the {@glink features/autosave autosave feature}.\n */\nexport interface AutosaveConfig {\n\n\t/**\n\t * The callback to be executed when the data needs to be saved.\n\t *\n\t * This function must return a promise which should be resolved when the data is successfully saved.\n\t *\n\t * ```ts\n\t * ClassicEditor\n\t * \t.create( editorElement, {\n\t * \t\tautosave: {\n\t * \t\t\tsave( editor: Editor ) {\n\t * \t\t\t\treturn saveData( editor.getData() );\n\t * \t\t\t}\n\t * \t\t}\n\t * \t} );\n\t * \t.then( ... )\n\t * \t.catch( ... );\n\t * ```\n\t */\n\tsave?: ( editor: Editor ) => Promise<unknown>;\n\n\t/**\n\t * The minimum amount of time that needs to pass after the last action to call the provided callback.\n\t * By default it is 1000 ms.\n\t *\n\t * ```ts\n\t * ClassicEditor\n\t * \t.create( editorElement, {\n\t * \t\tautosave: {\n\t * \t\t\tsave( editor: Editor ) {\n\t * \t\t\t\treturn saveData( editor.getData() );\n\t * \t\t\t},\n\t * \t\t\twaitingTime: 2000\n\t * \t\t}\n\t * \t} );\n\t * \t.then( ... )\n\t * \t.catch( ... );\n\t * ```\n\t */\n\twaitingTime?: number;\n}\n"]}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
4
+ */
5
+
6
+ import type { Translations } from 'ckeditor5';
7
+ declare const translations: Translations;
8
+ export default translations;
@@ -0,0 +1,5 @@
1
+ /**
2
+ * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
4
+ */
5
+ export default {"af":{"dictionary":{"Saving changes":"Veranderinge word gestoor"},getPluralForm(n){return (n != 1);}}}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
4
+ */
5
+
6
+ ( e => {
7
+ const { [ 'af' ]: { dictionary, getPluralForm } } = {"af":{"dictionary":{"Saving changes":"Veranderinge word gestoor"},getPluralForm(n){return (n != 1);}}};
8
+ e[ 'af' ] ||= { dictionary: {}, getPluralForm: null };
9
+ e[ 'af' ].dictionary = Object.assign( e[ 'af' ].dictionary, dictionary );
10
+ e[ 'af' ].getPluralForm = getPluralForm;
11
+ } )( window.CKEDITOR_TRANSLATIONS ||= {} );
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
4
+ */
5
+
6
+ import type { Translations } from 'ckeditor5';
7
+ declare const translations: Translations;
8
+ export default translations;
@@ -0,0 +1,5 @@
1
+ /**
2
+ * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
4
+ */
5
+ export default {"ar":{"dictionary":{"Saving changes":"جاري حفظ التعديلات"},getPluralForm(n){return n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;}}}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
4
+ */
5
+
6
+ ( e => {
7
+ const { [ 'ar' ]: { dictionary, getPluralForm } } = {"ar":{"dictionary":{"Saving changes":"جاري حفظ التعديلات"},getPluralForm(n){return n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;}}};
8
+ e[ 'ar' ] ||= { dictionary: {}, getPluralForm: null };
9
+ e[ 'ar' ].dictionary = Object.assign( e[ 'ar' ].dictionary, dictionary );
10
+ e[ 'ar' ].getPluralForm = getPluralForm;
11
+ } )( window.CKEDITOR_TRANSLATIONS ||= {} );
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
4
+ */
5
+
6
+ import type { Translations } from 'ckeditor5';
7
+ declare const translations: Translations;
8
+ export default translations;
@@ -0,0 +1,5 @@
1
+ /**
2
+ * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
4
+ */
5
+ export default {"az":{"dictionary":{"Saving changes":"Dəyişikliklər saxlanılır"},getPluralForm(n){return (n != 1);}}}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
4
+ */
5
+
6
+ ( e => {
7
+ const { [ 'az' ]: { dictionary, getPluralForm } } = {"az":{"dictionary":{"Saving changes":"Dəyişikliklər saxlanılır"},getPluralForm(n){return (n != 1);}}};
8
+ e[ 'az' ] ||= { dictionary: {}, getPluralForm: null };
9
+ e[ 'az' ].dictionary = Object.assign( e[ 'az' ].dictionary, dictionary );
10
+ e[ 'az' ].getPluralForm = getPluralForm;
11
+ } )( window.CKEDITOR_TRANSLATIONS ||= {} );
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
4
+ */
5
+
6
+ import type { Translations } from 'ckeditor5';
7
+ declare const translations: Translations;
8
+ export default translations;
@@ -0,0 +1,5 @@
1
+ /**
2
+ * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
4
+ */
5
+ export default {"bg":{"dictionary":{"Saving changes":"Запазване на промените"},getPluralForm(n){return (n != 1);}}}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
4
+ */
5
+
6
+ ( e => {
7
+ const { [ 'bg' ]: { dictionary, getPluralForm } } = {"bg":{"dictionary":{"Saving changes":"Запазване на промените"},getPluralForm(n){return (n != 1);}}};
8
+ e[ 'bg' ] ||= { dictionary: {}, getPluralForm: null };
9
+ e[ 'bg' ].dictionary = Object.assign( e[ 'bg' ].dictionary, dictionary );
10
+ e[ 'bg' ].getPluralForm = getPluralForm;
11
+ } )( window.CKEDITOR_TRANSLATIONS ||= {} );
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
4
+ */
5
+
6
+ import type { Translations } from 'ckeditor5';
7
+ declare const translations: Translations;
8
+ export default translations;
@@ -0,0 +1,5 @@
1
+ /**
2
+ * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
4
+ */
5
+ export default {"bn":{"dictionary":{"Saving changes":"পরিবর্তনগুলো সংরক্ষণ করা হচ্ছে"},getPluralForm(n){return (n != 1);}}}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
4
+ */
5
+
6
+ ( e => {
7
+ const { [ 'bn' ]: { dictionary, getPluralForm } } = {"bn":{"dictionary":{"Saving changes":"পরিবর্তনগুলো সংরক্ষণ করা হচ্ছে"},getPluralForm(n){return (n != 1);}}};
8
+ e[ 'bn' ] ||= { dictionary: {}, getPluralForm: null };
9
+ e[ 'bn' ].dictionary = Object.assign( e[ 'bn' ].dictionary, dictionary );
10
+ e[ 'bn' ].getPluralForm = getPluralForm;
11
+ } )( window.CKEDITOR_TRANSLATIONS ||= {} );
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
4
+ */
5
+
6
+ import type { Translations } from 'ckeditor5';
7
+ declare const translations: Translations;
8
+ export default translations;
@@ -0,0 +1,5 @@
1
+ /**
2
+ * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
4
+ */
5
+ export default {"bs":{"dictionary":{"Saving changes":"Spremanje izmjena"},getPluralForm(n){return (n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);}}}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
4
+ */
5
+
6
+ ( e => {
7
+ const { [ 'bs' ]: { dictionary, getPluralForm } } = {"bs":{"dictionary":{"Saving changes":"Spremanje izmjena"},getPluralForm(n){return (n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);}}};
8
+ e[ 'bs' ] ||= { dictionary: {}, getPluralForm: null };
9
+ e[ 'bs' ].dictionary = Object.assign( e[ 'bs' ].dictionary, dictionary );
10
+ e[ 'bs' ].getPluralForm = getPluralForm;
11
+ } )( window.CKEDITOR_TRANSLATIONS ||= {} );
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
4
+ */
5
+
6
+ import type { Translations } from 'ckeditor5';
7
+ declare const translations: Translations;
8
+ export default translations;
@@ -0,0 +1,5 @@
1
+ /**
2
+ * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
4
+ */
5
+ export default {"ca":{"dictionary":{"Saving changes":"S'estan desant els canvis"},getPluralForm(n){return (n != 1);}}}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
4
+ */
5
+
6
+ ( e => {
7
+ const { [ 'ca' ]: { dictionary, getPluralForm } } = {"ca":{"dictionary":{"Saving changes":"S'estan desant els canvis"},getPluralForm(n){return (n != 1);}}};
8
+ e[ 'ca' ] ||= { dictionary: {}, getPluralForm: null };
9
+ e[ 'ca' ].dictionary = Object.assign( e[ 'ca' ].dictionary, dictionary );
10
+ e[ 'ca' ].getPluralForm = getPluralForm;
11
+ } )( window.CKEDITOR_TRANSLATIONS ||= {} );
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
4
+ */
5
+
6
+ import type { Translations } from 'ckeditor5';
7
+ declare const translations: Translations;
8
+ export default translations;
@@ -0,0 +1,5 @@
1
+ /**
2
+ * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
4
+ */
5
+ export default {"cs":{"dictionary":{"Saving changes":"Ukládání změn"},getPluralForm(n){return (n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;}}}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
4
+ */
5
+
6
+ ( e => {
7
+ const { [ 'cs' ]: { dictionary, getPluralForm } } = {"cs":{"dictionary":{"Saving changes":"Ukládání změn"},getPluralForm(n){return (n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;}}};
8
+ e[ 'cs' ] ||= { dictionary: {}, getPluralForm: null };
9
+ e[ 'cs' ].dictionary = Object.assign( e[ 'cs' ].dictionary, dictionary );
10
+ e[ 'cs' ].getPluralForm = getPluralForm;
11
+ } )( window.CKEDITOR_TRANSLATIONS ||= {} );
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
4
+ */
5
+
6
+ import type { Translations } from 'ckeditor5';
7
+ declare const translations: Translations;
8
+ export default translations;
@@ -0,0 +1,5 @@
1
+ /**
2
+ * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
4
+ */
5
+ export default {"da":{"dictionary":{"Saving changes":"Gemmer ændringer"},getPluralForm(n){return (n != 1);}}}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
4
+ */
5
+
6
+ ( e => {
7
+ const { [ 'da' ]: { dictionary, getPluralForm } } = {"da":{"dictionary":{"Saving changes":"Gemmer ændringer"},getPluralForm(n){return (n != 1);}}};
8
+ e[ 'da' ] ||= { dictionary: {}, getPluralForm: null };
9
+ e[ 'da' ].dictionary = Object.assign( e[ 'da' ].dictionary, dictionary );
10
+ e[ 'da' ].getPluralForm = getPluralForm;
11
+ } )( window.CKEDITOR_TRANSLATIONS ||= {} );
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
4
+ */
5
+
6
+ import type { Translations } from 'ckeditor5';
7
+ declare const translations: Translations;
8
+ export default translations;
@@ -0,0 +1,5 @@
1
+ /**
2
+ * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
4
+ */
5
+ export default {"de-ch":{"dictionary":{"Saving changes":"Änderungen werden gespeichert"},getPluralForm(n){return (n != 1);}}}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
4
+ */
5
+
6
+ ( e => {
7
+ const { [ 'de-ch' ]: { dictionary, getPluralForm } } = {"de-ch":{"dictionary":{"Saving changes":"Änderungen werden gespeichert"},getPluralForm(n){return (n != 1);}}};
8
+ e[ 'de-ch' ] ||= { dictionary: {}, getPluralForm: null };
9
+ e[ 'de-ch' ].dictionary = Object.assign( e[ 'de-ch' ].dictionary, dictionary );
10
+ e[ 'de-ch' ].getPluralForm = getPluralForm;
11
+ } )( window.CKEDITOR_TRANSLATIONS ||= {} );
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
4
+ */
5
+
6
+ import type { Translations } from 'ckeditor5';
7
+ declare const translations: Translations;
8
+ export default translations;