suneditor 3.0.0-alpha.9 → 3.0.0-beta.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 (315) hide show
  1. package/CONTRIBUTING.md +170 -22
  2. package/{LICENSE.txt → LICENSE} +9 -9
  3. package/README.md +168 -30
  4. package/dist/suneditor.min.css +1 -1
  5. package/dist/suneditor.min.js +1 -1
  6. package/package.json +47 -21
  7. package/src/assets/design/color.css +121 -0
  8. package/src/assets/design/index.css +3 -0
  9. package/src/assets/design/size.css +35 -0
  10. package/src/assets/design/typography.css +37 -0
  11. package/src/assets/icons/defaultIcons.js +232 -0
  12. package/src/assets/suneditor-contents.css +181 -46
  13. package/src/assets/suneditor.css +1403 -650
  14. package/src/core/base/eventHandlers/handler_toolbar.js +35 -14
  15. package/src/core/base/eventHandlers/handler_ww_clipboard.js +23 -4
  16. package/src/core/base/eventHandlers/handler_ww_dragDrop.js +49 -10
  17. package/src/core/base/eventHandlers/handler_ww_key_input.js +422 -224
  18. package/src/core/base/eventHandlers/handler_ww_mouse.js +83 -36
  19. package/src/core/base/eventManager.js +520 -179
  20. package/src/core/base/history.js +95 -41
  21. package/src/core/class/char.js +26 -11
  22. package/src/core/class/component.js +345 -137
  23. package/src/core/class/format.js +683 -519
  24. package/src/core/class/html.js +485 -305
  25. package/src/core/class/menu.js +133 -47
  26. package/src/core/class/nodeTransform.js +90 -71
  27. package/src/core/class/offset.js +408 -92
  28. package/src/core/class/selection.js +216 -106
  29. package/src/core/class/shortcuts.js +68 -8
  30. package/src/core/class/toolbar.js +106 -116
  31. package/src/core/class/ui.js +422 -0
  32. package/src/core/class/viewer.js +178 -74
  33. package/src/core/editor.js +496 -389
  34. package/src/core/section/actives.js +123 -27
  35. package/src/core/section/constructor.js +615 -206
  36. package/src/core/section/context.js +28 -23
  37. package/src/core/section/documentType.js +561 -0
  38. package/src/editorInjector/_classes.js +19 -5
  39. package/src/editorInjector/_core.js +71 -7
  40. package/src/editorInjector/index.js +63 -1
  41. package/src/events.js +622 -0
  42. package/src/helper/clipboard.js +59 -0
  43. package/src/helper/converter.js +202 -26
  44. package/src/helper/dom/domCheck.js +304 -0
  45. package/src/helper/dom/domQuery.js +669 -0
  46. package/src/helper/dom/domUtils.js +557 -0
  47. package/src/helper/dom/index.js +12 -0
  48. package/src/helper/env.js +46 -56
  49. package/src/helper/index.js +10 -4
  50. package/src/helper/keyCodeMap.js +183 -0
  51. package/src/helper/numbers.js +12 -8
  52. package/src/helper/unicode.js +9 -5
  53. package/src/langs/ckb.js +74 -4
  54. package/src/langs/cs.js +72 -2
  55. package/src/langs/da.js +73 -3
  56. package/src/langs/de.js +73 -4
  57. package/src/langs/en.js +23 -3
  58. package/src/langs/es.js +73 -4
  59. package/src/langs/fa.js +75 -3
  60. package/src/langs/fr.js +73 -3
  61. package/src/langs/he.js +73 -4
  62. package/src/langs/hu.js +230 -0
  63. package/src/langs/index.js +7 -3
  64. package/src/langs/it.js +70 -1
  65. package/src/langs/ja.js +72 -4
  66. package/src/langs/km.js +230 -0
  67. package/src/langs/ko.js +22 -2
  68. package/src/langs/lv.js +74 -5
  69. package/src/langs/nl.js +73 -4
  70. package/src/langs/pl.js +73 -4
  71. package/src/langs/pt_br.js +70 -1
  72. package/src/langs/ro.js +74 -5
  73. package/src/langs/ru.js +73 -4
  74. package/src/langs/se.js +73 -4
  75. package/src/langs/tr.js +73 -1
  76. package/src/langs/{ua.js → uk.js} +75 -6
  77. package/src/langs/ur.js +77 -8
  78. package/src/langs/zh_cn.js +74 -5
  79. package/src/modules/ApiManager.js +77 -54
  80. package/src/modules/Browser.js +667 -0
  81. package/src/modules/ColorPicker.js +162 -102
  82. package/src/modules/Controller.js +273 -142
  83. package/src/modules/Figure.js +925 -484
  84. package/src/modules/FileManager.js +121 -69
  85. package/src/modules/HueSlider.js +113 -61
  86. package/src/modules/Modal.js +291 -122
  87. package/src/modules/ModalAnchorEditor.js +383 -234
  88. package/src/modules/SelectMenu.js +270 -168
  89. package/src/modules/_DragHandle.js +2 -1
  90. package/src/modules/index.js +3 -3
  91. package/src/plugins/browser/audioGallery.js +83 -0
  92. package/src/plugins/browser/fileBrowser.js +103 -0
  93. package/src/plugins/browser/fileGallery.js +83 -0
  94. package/src/plugins/browser/imageGallery.js +81 -0
  95. package/src/plugins/browser/videoGallery.js +103 -0
  96. package/src/plugins/command/blockquote.js +40 -27
  97. package/src/plugins/command/exportPDF.js +134 -0
  98. package/src/plugins/command/fileUpload.js +229 -162
  99. package/src/plugins/command/list_bulleted.js +83 -47
  100. package/src/plugins/command/list_numbered.js +83 -47
  101. package/src/plugins/dropdown/align.js +66 -54
  102. package/src/plugins/dropdown/backgroundColor.js +63 -49
  103. package/src/plugins/dropdown/font.js +71 -47
  104. package/src/plugins/dropdown/fontColor.js +63 -48
  105. package/src/plugins/dropdown/formatBlock.js +70 -33
  106. package/src/plugins/dropdown/hr.js +92 -51
  107. package/src/plugins/dropdown/layout.js +37 -26
  108. package/src/plugins/dropdown/lineHeight.js +54 -38
  109. package/src/plugins/dropdown/list.js +60 -45
  110. package/src/plugins/dropdown/paragraphStyle.js +51 -30
  111. package/src/plugins/dropdown/table.js +2003 -813
  112. package/src/plugins/dropdown/template.js +38 -26
  113. package/src/plugins/dropdown/textStyle.js +43 -31
  114. package/src/plugins/field/mention.js +147 -86
  115. package/src/plugins/index.js +32 -6
  116. package/src/plugins/input/fontSize.js +161 -108
  117. package/src/plugins/input/pageNavigator.js +70 -0
  118. package/src/plugins/modal/audio.js +358 -173
  119. package/src/plugins/modal/drawing.js +531 -0
  120. package/src/plugins/modal/embed.js +886 -0
  121. package/src/plugins/modal/image.js +674 -362
  122. package/src/plugins/modal/link.js +100 -71
  123. package/src/plugins/modal/math.js +367 -167
  124. package/src/plugins/modal/video.js +691 -335
  125. package/src/plugins/popup/anchor.js +222 -0
  126. package/src/suneditor.js +50 -13
  127. package/src/themes/dark.css +122 -0
  128. package/src/typedef.js +130 -0
  129. package/types/assets/icons/defaultIcons.d.ts +153 -0
  130. package/types/core/base/eventHandlers/handler_toolbar.d.ts +41 -0
  131. package/types/core/base/eventHandlers/handler_ww_clipboard.d.ts +40 -0
  132. package/types/core/base/eventHandlers/handler_ww_dragDrop.d.ts +35 -0
  133. package/types/core/base/eventHandlers/handler_ww_key_input.d.ts +45 -0
  134. package/types/core/base/eventHandlers/handler_ww_mouse.d.ts +39 -0
  135. package/types/core/base/eventManager.d.ts +385 -0
  136. package/types/core/base/history.d.ts +81 -0
  137. package/types/core/class/char.d.ts +60 -0
  138. package/types/core/class/component.d.ts +212 -0
  139. package/types/core/class/format.d.ts +616 -0
  140. package/types/core/class/html.d.ts +422 -0
  141. package/types/core/class/menu.d.ts +126 -0
  142. package/types/core/class/nodeTransform.d.ts +93 -0
  143. package/types/core/class/offset.d.ts +522 -0
  144. package/types/core/class/selection.d.ts +188 -0
  145. package/types/core/class/shortcuts.d.ts +142 -0
  146. package/types/core/class/toolbar.d.ts +189 -0
  147. package/types/core/class/ui.d.ts +164 -0
  148. package/types/core/class/viewer.d.ts +140 -0
  149. package/types/core/editor.d.ts +610 -0
  150. package/types/core/section/actives.d.ts +46 -0
  151. package/types/core/section/constructor.d.ts +777 -0
  152. package/types/core/section/context.d.ts +45 -0
  153. package/types/core/section/documentType.d.ts +178 -0
  154. package/types/editorInjector/_classes.d.ts +41 -0
  155. package/types/editorInjector/_core.d.ts +92 -0
  156. package/types/editorInjector/index.d.ts +71 -0
  157. package/types/events.d.ts +273 -0
  158. package/types/helper/clipboard.d.ts +12 -0
  159. package/types/helper/converter.d.ts +197 -0
  160. package/types/helper/dom/domCheck.d.ts +189 -0
  161. package/types/helper/dom/domQuery.d.ts +223 -0
  162. package/types/helper/dom/domUtils.d.ts +226 -0
  163. package/types/helper/dom/index.d.ts +9 -0
  164. package/types/helper/env.d.ts +132 -0
  165. package/types/helper/index.d.ts +174 -0
  166. package/types/helper/keyCodeMap.d.ts +110 -0
  167. package/types/helper/numbers.d.ts +46 -0
  168. package/types/helper/unicode.d.ts +28 -0
  169. package/types/index.d.ts +120 -0
  170. package/{typings/Lang.d.ts → types/langs/_Lang.d.ts} +173 -103
  171. package/types/langs/ckb.d.ts +3 -0
  172. package/types/langs/cs.d.ts +3 -0
  173. package/types/langs/da.d.ts +3 -0
  174. package/types/langs/de.d.ts +3 -0
  175. package/types/langs/en.d.ts +3 -0
  176. package/types/langs/es.d.ts +3 -0
  177. package/types/langs/fa.d.ts +3 -0
  178. package/types/langs/fr.d.ts +3 -0
  179. package/types/langs/he.d.ts +3 -0
  180. package/types/langs/hu.d.ts +3 -0
  181. package/types/langs/index.d.ts +54 -0
  182. package/types/langs/it.d.ts +3 -0
  183. package/types/langs/ja.d.ts +3 -0
  184. package/types/langs/km.d.ts +3 -0
  185. package/types/langs/ko.d.ts +3 -0
  186. package/types/langs/lv.d.ts +3 -0
  187. package/types/langs/nl.d.ts +3 -0
  188. package/types/langs/pl.d.ts +3 -0
  189. package/types/langs/pt_br.d.ts +3 -0
  190. package/types/langs/ro.d.ts +3 -0
  191. package/types/langs/ru.d.ts +3 -0
  192. package/types/langs/se.d.ts +3 -0
  193. package/types/langs/tr.d.ts +3 -0
  194. package/types/langs/uk.d.ts +3 -0
  195. package/types/langs/ur.d.ts +3 -0
  196. package/types/langs/zh_cn.d.ts +3 -0
  197. package/types/modules/ApiManager.d.ts +125 -0
  198. package/types/modules/Browser.d.ts +326 -0
  199. package/types/modules/ColorPicker.d.ts +131 -0
  200. package/types/modules/Controller.d.ts +251 -0
  201. package/types/modules/Figure.d.ts +517 -0
  202. package/types/modules/FileManager.d.ts +202 -0
  203. package/types/modules/HueSlider.d.ts +136 -0
  204. package/types/modules/Modal.d.ts +111 -0
  205. package/types/modules/ModalAnchorEditor.d.ts +236 -0
  206. package/types/modules/SelectMenu.d.ts +194 -0
  207. package/types/modules/_DragHandle.d.ts +7 -0
  208. package/types/modules/index.d.ts +26 -0
  209. package/types/plugins/browser/audioGallery.d.ts +55 -0
  210. package/types/plugins/browser/fileBrowser.d.ts +64 -0
  211. package/types/plugins/browser/fileGallery.d.ts +55 -0
  212. package/types/plugins/browser/imageGallery.d.ts +51 -0
  213. package/types/plugins/browser/videoGallery.d.ts +57 -0
  214. package/types/plugins/command/blockquote.d.ts +28 -0
  215. package/types/plugins/command/exportPDF.d.ts +46 -0
  216. package/types/plugins/command/fileUpload.d.ts +156 -0
  217. package/types/plugins/command/list_bulleted.d.ts +46 -0
  218. package/types/plugins/command/list_numbered.d.ts +46 -0
  219. package/types/plugins/dropdown/align.d.ts +60 -0
  220. package/types/plugins/dropdown/backgroundColor.d.ts +63 -0
  221. package/types/plugins/dropdown/font.d.ts +54 -0
  222. package/types/plugins/dropdown/fontColor.d.ts +63 -0
  223. package/types/plugins/dropdown/formatBlock.d.ts +54 -0
  224. package/types/plugins/dropdown/hr.d.ts +71 -0
  225. package/types/plugins/dropdown/layout.d.ts +40 -0
  226. package/types/plugins/dropdown/lineHeight.d.ts +50 -0
  227. package/types/plugins/dropdown/list.d.ts +39 -0
  228. package/types/plugins/dropdown/paragraphStyle.d.ts +54 -0
  229. package/types/plugins/dropdown/table.d.ts +627 -0
  230. package/types/plugins/dropdown/template.d.ts +40 -0
  231. package/types/plugins/dropdown/textStyle.d.ts +41 -0
  232. package/types/plugins/field/mention.d.ts +102 -0
  233. package/types/plugins/index.d.ts +107 -0
  234. package/types/plugins/input/fontSize.d.ts +170 -0
  235. package/types/plugins/input/pageNavigator.d.ts +28 -0
  236. package/types/plugins/modal/audio.d.ts +269 -0
  237. package/types/plugins/modal/drawing.d.ts +246 -0
  238. package/types/plugins/modal/embed.d.ts +387 -0
  239. package/types/plugins/modal/image.d.ts +451 -0
  240. package/types/plugins/modal/link.d.ts +128 -0
  241. package/types/plugins/modal/math.d.ts +193 -0
  242. package/types/plugins/modal/video.d.ts +485 -0
  243. package/types/plugins/popup/anchor.d.ts +56 -0
  244. package/types/suneditor.d.ts +51 -0
  245. package/types/typedef.d.ts +233 -0
  246. package/.eslintignore +0 -7
  247. package/.eslintrc.json +0 -64
  248. package/src/assets/icons/_default.js +0 -194
  249. package/src/core/base/events.js +0 -320
  250. package/src/core/class/notice.js +0 -42
  251. package/src/helper/domUtils.js +0 -1177
  252. package/src/modules/FileBrowser.js +0 -271
  253. package/src/plugins/command/exportPdf.js +0 -168
  254. package/src/plugins/fileBrowser/imageGallery.js +0 -81
  255. package/src/themes/test.css +0 -61
  256. package/typings/CommandPlugin.d.ts +0 -8
  257. package/typings/DialogPlugin.d.ts +0 -20
  258. package/typings/FileBrowserPlugin.d.ts +0 -30
  259. package/typings/Module.d.ts +0 -15
  260. package/typings/Plugin.d.ts +0 -42
  261. package/typings/SubmenuPlugin.d.ts +0 -8
  262. package/typings/_classes.d.ts +0 -17
  263. package/typings/_colorPicker.d.ts +0 -60
  264. package/typings/_core.d.ts +0 -55
  265. package/typings/align.d.ts +0 -5
  266. package/typings/audio.d.ts +0 -5
  267. package/typings/backgroundColor.d.ts +0 -5
  268. package/typings/blockquote.d.ts +0 -5
  269. package/typings/char.d.ts +0 -39
  270. package/typings/component.d.ts +0 -38
  271. package/typings/context.d.ts +0 -39
  272. package/typings/converter.d.ts +0 -33
  273. package/typings/dialog.d.ts +0 -28
  274. package/typings/domUtils.d.ts +0 -361
  275. package/typings/editor.d.ts +0 -7
  276. package/typings/editor.ts +0 -542
  277. package/typings/env.d.ts +0 -70
  278. package/typings/eventManager.d.ts +0 -37
  279. package/typings/events.d.ts +0 -262
  280. package/typings/fileBrowser.d.ts +0 -42
  281. package/typings/fileManager.d.ts +0 -67
  282. package/typings/font.d.ts +0 -5
  283. package/typings/fontColor.d.ts +0 -5
  284. package/typings/fontSize.d.ts +0 -5
  285. package/typings/format.d.ts +0 -191
  286. package/typings/formatBlock.d.ts +0 -5
  287. package/typings/history.d.ts +0 -48
  288. package/typings/horizontalRule.d.ts +0 -5
  289. package/typings/image.d.ts +0 -5
  290. package/typings/imageGallery.d.ts +0 -5
  291. package/typings/index.d.ts +0 -21
  292. package/typings/index.modules.d.ts +0 -11
  293. package/typings/index.plugins.d.ts +0 -58
  294. package/typings/lineHeight.d.ts +0 -5
  295. package/typings/link.d.ts +0 -5
  296. package/typings/list.d.ts +0 -5
  297. package/typings/math.d.ts +0 -5
  298. package/typings/mediaContainer.d.ts +0 -25
  299. package/typings/mention.d.ts +0 -5
  300. package/typings/node.d.ts +0 -57
  301. package/typings/notice.d.ts +0 -16
  302. package/typings/numbers.d.ts +0 -29
  303. package/typings/offset.d.ts +0 -24
  304. package/typings/options.d.ts +0 -589
  305. package/typings/paragraphStyle.d.ts +0 -5
  306. package/typings/resizing.d.ts +0 -141
  307. package/typings/selection.d.ts +0 -94
  308. package/typings/shortcuts.d.ts +0 -13
  309. package/typings/suneditor.d.ts +0 -9
  310. package/typings/table.d.ts +0 -5
  311. package/typings/template.d.ts +0 -5
  312. package/typings/textStyle.d.ts +0 -5
  313. package/typings/toolbar.d.ts +0 -32
  314. package/typings/unicode.d.ts +0 -25
  315. package/typings/video.d.ts +0 -5
package/src/helper/env.js CHANGED
@@ -1,56 +1,29 @@
1
+ /**
2
+ * @fileoverview Environment helper functions
3
+ */
4
+
5
+ /** @type {Window} */
1
6
  export const _w = window;
7
+ /** @type {Document} */
2
8
  export const _d = document;
3
9
 
4
- export const NO_EVENT = Symbol('noEventHandler');
5
- export const ON_OVER_COMPONENT = Symbol('onOverComponent');
6
-
7
- const userAgent = _w.navigator.userAgent.toLowerCase();
8
-
9
10
  /**
10
- * @description Object.values
11
- * @param {Object.<any>} obj Object parameter.
12
- * @returns {Array.<any>}
11
+ * @description No event symbol
12
+ * @type {Symbol}
13
13
  */
14
- export function getValues(obj) {
15
- return !obj
16
- ? []
17
- : Object.keys(obj).map(function (i) {
18
- return obj[i];
19
- });
20
- }
14
+ export const NO_EVENT = Symbol('noEventHandler');
21
15
 
22
16
  /**
23
- * @description Convert the CamelCase To the KebabCase.
24
- * @param {string|Array.<string>} param [Camel string]
17
+ * @description On over component symbol
18
+ * @type {Symbol}
25
19
  */
26
- export function camelToKebabCase(param) {
27
- if (typeof param === 'string') {
28
- return param.replace(/[A-Z]/g, (letter) => '-' + letter.toLowerCase());
29
- } else {
30
- return param.map(function (str) {
31
- return camelToKebabCase(str);
32
- });
33
- }
34
- }
20
+ export const ON_OVER_COMPONENT = Symbol('onOverComponent');
35
21
 
36
- /**
37
- * @description Convert the KebabCase To the CamelCase.
38
- * @param {String|Array} param [KebabCase string]
39
- * @returns {String|Array}
40
- */
41
- export function kebabToCamelCase(param) {
42
- if (typeof param === 'string') {
43
- return param.replace(/-[a-zA-Z]/g, (letter) => letter.replace('-', '').toUpperCase());
44
- } else {
45
- return param.map(function (str) {
46
- return camelToKebabCase(str);
47
- });
48
- }
49
- }
22
+ const userAgent = navigator.userAgent.toLowerCase();
50
23
 
51
24
  /**
52
25
  * @description Gets XMLHttpRequest object
53
- * @returns {XMLHttpRequest|ActiveXObject}
26
+ * @returns {XMLHttpRequest}
54
27
  */
55
28
  export function getXMLHttpRequest() {
56
29
  return new XMLHttpRequest();
@@ -67,11 +40,13 @@ export function getPageStyle(doc) {
67
40
  const sheets = (doc || _d).styleSheets;
68
41
 
69
42
  for (let i = 0, len = sheets.length, rules; i < len; i++) {
43
+ /* eslint-disable @typescript-eslint/no-unused-vars */
70
44
  try {
71
45
  rules = sheets[i].cssRules;
72
46
  } catch (e) {
73
47
  continue;
74
48
  }
49
+ /* eslint-disable @typescript-eslint/no-unused-vars */
75
50
 
76
51
  if (rules) {
77
52
  for (let c = 0, cLen = rules.length; c < cLen; c++) {
@@ -86,10 +61,9 @@ export function getPageStyle(doc) {
86
61
  /**
87
62
  * @deprecated
88
63
  * @description Get the the tag path of the arguments value
89
- * If not found, return the first found value
90
- * @param {Array.<string>} nameArray File name array
64
+ * @param {Array<string>} nameArray File name array
91
65
  * @param {string} extension js, css
92
- * @returns {string}
66
+ * @returns {string} If not found, return the first found value
93
67
  */
94
68
  export function getIncludePath(nameArray, extension) {
95
69
  let path = '';
@@ -122,7 +96,7 @@ export function getIncludePath(nameArray, extension) {
122
96
  if (path === '') path = pathList.length > 0 ? pathList[0][src] : '';
123
97
 
124
98
  if (!path.includes(':/') && '//' !== path.slice(0, 2)) {
125
- path = 0 === path.includes('/') ? location.href.match(/^.*?:\/\/[^/]*/)[0] + path : location.href.match(/^[^?]*\/(?:)/)[0] + path;
99
+ path = false === path.includes('/') ? location.href.match(/^.*?:\/\/[^/]*/)[0] + path : location.href.match(/^[^?]*\/(?:)/)[0] + path;
126
100
  }
127
101
 
128
102
  if (!path) {
@@ -141,20 +115,29 @@ export const isResizeObserverSupported = (() => {
141
115
  return typeof ResizeObserver === 'function';
142
116
  })();
143
117
 
118
+ /**
119
+ * @description Check if support navigator.clipboard
120
+ * @returns {boolean} Whether support navigator.clipboard or not.
121
+ */
122
+ export const isClipboardSupported = (() => {
123
+ /* eslint-disable-next-line compat/compat */
124
+ return typeof navigator.clipboard?.write === 'function';
125
+ })();
126
+
144
127
  /**
145
128
  * @description Check if User Agent is Edge
146
129
  * @returns {boolean} Whether User Agent is Edge or not.
147
130
  */
148
131
  export const isEdge = (() => {
149
- return navigator.appVersion.includes('Edge');
132
+ return /Edg/.test(navigator.userAgent);
150
133
  })();
151
134
 
152
135
  /**
153
- * @description Check if platform is OSX or IOS
136
+ * @description Check if User Agent is OSX or IOS
154
137
  * @type {boolean}
155
138
  */
156
139
  export const isOSX_IOS = (() => {
157
- return /(Mac|iPhone|iPod|iPad)/.test(navigator.platform);
140
+ return /(Mac|iPhone|iPod|iPad)/.test(navigator.userAgent);
158
141
  })();
159
142
 
160
143
  /**
@@ -178,7 +161,7 @@ export const isGecko = (() => {
178
161
  * @type {boolean}
179
162
  */
180
163
  export const isChromium = (() => {
181
- return !!window.chrome;
164
+ return !!(/** @type {Window & { chrome: any }} */ (_w).chrome);
182
165
  })();
183
166
 
184
167
  /**
@@ -191,11 +174,12 @@ export const isSafari = (() => {
191
174
 
192
175
  /**
193
176
  * @description Check if User Agent is Mobile device.
194
- * when the device is touchable, it is judged as a mobile device.
177
+ * - when the device is touchable, it is judged as a mobile device.
195
178
  * @type {boolean}
196
179
  */
197
180
  export const isMobile = (() => {
198
- return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(userAgent) || 'ontouchstart' in window || navigator.maxTouchPoints > 0 || navigator.msMaxTouchPoints > 0;
181
+ /* eslint-disable-next-line compat/compat */
182
+ return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(userAgent) || (navigator.maxTouchPoints > 0 && 'ontouchstart' in _w);
199
183
  })();
200
184
 
201
185
  /**
@@ -218,22 +202,26 @@ export const cmdIcon = isOSX_IOS ? '⌘' : 'CTRL';
218
202
  */
219
203
  export const shiftIcon = isOSX_IOS ? '⇧' : '+SHIFT';
220
204
 
205
+ /**
206
+ * @description Device pixel ratio
207
+ * @type {number}
208
+ */
209
+ export const DPI = _w.devicePixelRatio;
210
+
221
211
  /** --- editor env --- */
222
- export const _allowedEmptyNodeList = '.se-component, pre, blockquote, hr, li, table, img, iframe, video, audio, canvas, details';
223
212
  export const KATEX_WEBSITE = 'https://katex.org/docs/supported.html';
213
+ export const MATHJAX_WEBSITE = 'https://www.mathjax.org/';
224
214
 
225
215
  const env = {
226
216
  _w,
227
217
  _d,
228
218
  NO_EVENT,
229
219
  ON_OVER_COMPONENT,
230
- getValues,
231
- camelToKebabCase,
232
- kebabToCamelCase,
233
220
  getXMLHttpRequest,
234
221
  getPageStyle,
235
222
  getIncludePath,
236
223
  isResizeObserverSupported,
224
+ isClipboardSupported,
237
225
  isEdge,
238
226
  isBlink,
239
227
  isGecko,
@@ -244,7 +232,9 @@ const env = {
244
232
  isMobile,
245
233
  cmdIcon,
246
234
  shiftIcon,
247
- _allowedEmptyNodeList
235
+ DPI,
236
+ KATEX_WEBSITE,
237
+ MATHJAX_WEBSITE
248
238
  };
249
239
 
250
240
  export default env;
@@ -1,19 +1,25 @@
1
1
  import Env from './env';
2
2
  import Unicode from './unicode';
3
3
  import Converter from './converter';
4
- import DomUtils from './domUtils';
4
+ import Dom from './dom';
5
5
  import Numbers from './numbers';
6
+ import KeyCodeMap from './keyCodeMap';
7
+ import Clipboard from './clipboard';
6
8
 
7
9
  export const env = Env;
8
10
  export const unicode = Unicode;
9
11
  export const converter = Converter;
10
- export const domUtils = DomUtils;
12
+ export const dom = Dom;
11
13
  export const numbers = Numbers;
14
+ export const keyCodeMap = KeyCodeMap;
15
+ export const clipboard = Clipboard;
12
16
 
13
17
  export default {
14
18
  env,
15
19
  unicode,
16
20
  converter,
17
- domUtils,
18
- numbers
21
+ dom,
22
+ numbers,
23
+ keyCodeMap,
24
+ clipboard
19
25
  };
@@ -0,0 +1,183 @@
1
+ /**
2
+ * @fileoverview keyCode helper
3
+ */
4
+
5
+ const _arrow = 'ArrowLeft|ArrowUp|ArrowRight|ArrowDown';
6
+ const _fN = 'F1|F2|F3|F4|F5|F6|F7|F8|F9|F10|F11|F12';
7
+ // const DIR_KEYCODE = /^(3[7-9]|40)$/;
8
+ const DIR_KEYCODE = _arrow.split('|');
9
+ // const DELETE_KEYCODE = /^(8|46)$/;
10
+ const DELETE_KEYCODE = 'Backspace|Delete'.split('|');
11
+ // const NON_TEXT_KEYCODE = /^(8|9|13|1[6-9]|20|27|3[3-9]|40|45|46|11[2-9]|12[0-3]|144|145|229)$/;
12
+ const NON_TEXT_KEYCODE = `Backspace|Tab|Enter|ShiftLeft|ShiftRight|ControlLeft|ControlRight|AltLeft|AltRight|Pause|CapsLock|Escape|PageUp|PageDown|End|Home|${_arrow}|Insert|Delete|${_fN}|NumLock|ScrollLock`.split('|');
13
+ // const HISTORY_RELEVANT_KEYS = /^(9|13|46)$/;
14
+ const HISTORY_RELEVANT_KEYS = `Backspace|Enter|Delete`.split('|');
15
+ // const DOCUMENT_TYPE_OBSERVER_KEYCODE = /^(8|13|46)$/;
16
+ const DOCUMENT_TYPE_OBSERVER_KEYCODE = 'Backspace|Enter|Delete'.split('|');
17
+ // const NON_RESPONSE_KEYCODE = /^(1[7-9]|20|27|45|11[2-9]|12[0-3]|144|145)$/;
18
+ const NON_RESPONSE_CODE = `ControlLeft|ControlRight|AltLeft|AltRight|Pause|CapsLock|Escape|Insert|${_fN}|NumLock|ScrollLock`.split('|');
19
+
20
+ /** ------------------------------------------------------- [meta] ------------------------------------------------------- */
21
+ /**
22
+ * @description Shift check
23
+ * @param {KeyboardEvent} e Event object
24
+ * @returns {boolean}
25
+ */
26
+ export function isShift(e) {
27
+ return e.shiftKey || e.keyCode === 16;
28
+ }
29
+
30
+ /**
31
+ * @description [Ctrl|Meta] check
32
+ * @param {KeyboardEvent} e Event object
33
+ * @returns {boolean}
34
+ */
35
+ export function isCtrl(e) {
36
+ const keyCode = e.code;
37
+ // return e.ctrlKey || e.metaKey || keyCode === 91 || keyCode === 92 || keyCode === 224;
38
+ return e.ctrlKey || e.metaKey || keyCode === 'MetaLeft' || keyCode === 'MetaRight';
39
+ }
40
+
41
+ /**
42
+ * @description Alt check
43
+ * @param {KeyboardEvent} e Event object
44
+ * @returns {boolean}
45
+ */
46
+ export function isAlt(e) {
47
+ return e.altKey;
48
+ }
49
+
50
+ /**
51
+ * @description event.isComposing check
52
+ * @param {KeyboardEvent} e Event object
53
+ * @returns {boolean}
54
+ */
55
+ export function isComposing(e) {
56
+ return e.isComposing || e.keyCode === 229;
57
+ }
58
+
59
+ /**
60
+ * @description Backspace key check
61
+ * @param {string} code Event.code
62
+ * @returns {boolean}
63
+ */
64
+ export function isBackspace(code) {
65
+ // return code === 8;
66
+ return code === 'Backspace';
67
+ }
68
+
69
+ /**
70
+ * @description Tab key check
71
+ * @param {string} code Event.code
72
+ * @returns {boolean}
73
+ */
74
+ export function isTab(code) {
75
+ // return code === 9;
76
+ return code === 'Tab';
77
+ }
78
+
79
+ /**
80
+ * @description Enter key check
81
+ * @param {string} code Event.code
82
+ * @returns {boolean}
83
+ */
84
+ export function isEnter(code) {
85
+ // return code === 13;
86
+ return code === 'Enter';
87
+ }
88
+
89
+ /**
90
+ * @description ESC key check
91
+ * @param {string} code Event.code
92
+ * @returns {boolean}
93
+ */
94
+ export function isEsc(code) {
95
+ // return code === 27;
96
+ return code === 'Escape';
97
+ }
98
+
99
+ /**
100
+ * @description Space key check
101
+ * @param {string} code Event.code
102
+ * @returns {boolean}
103
+ */
104
+ export function isSpace(code) {
105
+ // return code === 32;
106
+ return code === 'Space';
107
+ }
108
+
109
+ /** ------------------------------------------------------- [key] ------------------------------------------------------- */
110
+
111
+ /**
112
+ * @description Direction key check
113
+ * @param {string} code Event.code
114
+ * @returns {boolean}
115
+ */
116
+ export function isDirectionKey(code) {
117
+ return DIR_KEYCODE.includes(code);
118
+ }
119
+
120
+ /**
121
+ * @description [delete, backspace] key check
122
+ * @param {string} code Event.code
123
+ * @returns {boolean}
124
+ */
125
+ export function isRemoveKey(code) {
126
+ return DELETE_KEYCODE.includes(code);
127
+ }
128
+
129
+ /**
130
+ * @description Non-text key check
131
+ * @param {string} code Event.code
132
+ * @returns {boolean}
133
+ */
134
+ export function isNonTextKey(code) {
135
+ return NON_TEXT_KEYCODE.includes(code);
136
+ }
137
+
138
+ /**
139
+ * @description Check if the given key is relevant for history push
140
+ * @param {string} code - Event.code
141
+ * @returns {boolean}
142
+ */
143
+ export function isHistoryRelevantKey(code) {
144
+ return HISTORY_RELEVANT_KEYS.includes(code);
145
+ }
146
+
147
+ /**
148
+ * @description Document type observer key check
149
+ * @param {string} code Event.code
150
+ * @returns {boolean}
151
+ */
152
+ export function isDocumentTypeObserverKey(code) {
153
+ return DOCUMENT_TYPE_OBSERVER_KEYCODE.includes(code);
154
+ }
155
+
156
+ /**
157
+ * @description Non-response key check
158
+ * @param {string} code Event.code
159
+ * @returns {boolean}
160
+ */
161
+ export function isNonResponseKey(code) {
162
+ return NON_RESPONSE_CODE.includes(code);
163
+ }
164
+
165
+ const keyCodeMap = {
166
+ isShift,
167
+ isCtrl,
168
+ isAlt,
169
+ isComposing,
170
+ isBackspace,
171
+ isTab,
172
+ isEnter,
173
+ isEsc,
174
+ isSpace,
175
+ isDirectionKey,
176
+ isRemoveKey,
177
+ isNonTextKey,
178
+ isHistoryRelevantKey,
179
+ isDocumentTypeObserverKey,
180
+ isNonResponseKey
181
+ };
182
+
183
+ export default keyCodeMap;
@@ -1,6 +1,10 @@
1
+ /**
2
+ * @fileoverview Number-related helper functions
3
+ */
4
+
1
5
  /**
2
6
  * @description Checks for numeric (with decimal point).
3
- * @param {string|number} text Text string or number
7
+ * @param {*} text Text string or number
4
8
  * @returns {boolean}
5
9
  */
6
10
  export function is(text) {
@@ -10,22 +14,22 @@ export function is(text) {
10
14
  /**
11
15
  * @description Get a number.
12
16
  * @param {string|number} value Text string or number
13
- * @param {number} maxDec Maximum number of decimal places (-1 : Infinity)
17
+ * @param {number} [maxDec=0] Maximum number of decimal places (-1 : Infinity)
14
18
  * @returns {number}
15
19
  */
16
- export function get(value, maxDec) {
20
+ export function get(value, maxDec = 0) {
17
21
  if (!value) return 0;
18
22
 
19
- let number = (value + '').match(/-?\d+(\.\d+)?/);
20
- if (!number || !number[0]) return 0;
23
+ const matched = (value + '').match(/-?\d+(\.\d+)?/);
24
+ if (!matched || !matched[0]) return 0;
21
25
 
22
- number = number[0];
23
- return maxDec < 0 ? number * 1 : maxDec === 0 ? Math.round(number * 1) : (number * 1).toFixed(maxDec) * 1;
26
+ const number = Number(matched[0]);
27
+ return maxDec < 0 ? number : maxDec === 0 ? Math.round(number) : Number(number.toFixed(maxDec));
24
28
  }
25
29
 
26
30
  /**
27
31
  * @description It compares the start and end indexes of 'a' and 'b' and returns the number of overlapping indexes in the range.
28
- * ex) 1, 5, 4, 6 => '2' (4,5)
32
+ * - e.g.) 1, 5, 4, 6 => '2' (4,5)
29
33
  * @param {number} aStart Start index of 'a'
30
34
  * @param {number} aEnd End index of 'a'
31
35
  * @param {number} bStart Start index of 'b'
@@ -1,27 +1,31 @@
1
+ /**
2
+ * @fileoverview Unicode helper functions
3
+ */
4
+
1
5
  const zwsp = 8203;
2
6
 
3
7
  /**
4
8
  * @description Unicode Character 'ZERO WIDTH SPACE' (\u200B)
5
- * @type string
9
+ * @type {string}
6
10
  */
7
11
  export const zeroWidthSpace = String.fromCharCode(zwsp);
8
12
 
9
13
  /**
10
14
  * @description Regular expression to find 'zero width space' (/\u200B/g)
11
- * @type RegExp
15
+ * @type {RegExp}
12
16
  */
13
17
  export const zeroWidthRegExp = new RegExp(String.fromCharCode(zwsp), 'g');
14
18
 
15
19
  /**
16
20
  * @description Regular expression to find only 'zero width space' (/\u200B/g)
17
- * @type RegExp
21
+ * @type {RegExp}
18
22
  */
19
23
  export const onlyZeroWidthRegExp = new RegExp('^' + String.fromCharCode(zwsp) + '+$');
20
24
 
21
25
  /**
22
26
  * @description Escape a string for safe use in regular expressions.
23
- * @param {String} string String to escape
24
- * @returns {String}
27
+ * @param {string} string String to escape
28
+ * @returns {string}
25
29
  */
26
30
  export function escapeStringRegexp(string) {
27
31
  if (typeof string !== 'string') {
package/src/langs/ckb.js CHANGED
@@ -1,3 +1,5 @@
1
+ // Central Kurdish (Sorani) (کوردیی ناوەندی)
2
+ // 쿠르드어 (소라니)
1
3
  (function (global, factory) {
2
4
  if (typeof module === 'object' && typeof module.exports === 'object') {
3
5
  module.exports = global.document
@@ -15,34 +17,80 @@
15
17
  const lang = {
16
18
  code: 'ckb',
17
19
  align: 'ئاراسته‌',
20
+ alignBottom: 'خوارەوە ڕێکبخە',
18
21
  alignCenter: 'ناوه‌ند',
19
22
  alignJustify: 'به‌رێكی دابه‌ش بكه‌',
20
23
  alignLeft: 'لای چه‌پ',
24
+ alignMiddle: 'ناوەڕاست ڕێکبخە',
21
25
  alignRight: 'لای راست',
26
+ alignTop: 'سەرەوە ڕێکبخە',
27
+ anchor: 'لەنگەر',
28
+ asBlock: 'وەک بلۆکێک',
29
+ asInline: 'وەکو ئینلاینێک',
30
+ asLink: 'وەک بەستەرێک',
22
31
  audio: 'ده‌نگ',
32
+ audioGallery: 'گەلەری دەنگی',
23
33
  audio_modal_file: 'فایلێك هه‌ڵبژێره‌',
24
34
  audio_modal_title: 'ده‌نگێك دابنێ',
25
35
  audio_modal_url: 'به‌سته‌ری ده‌نگ',
26
36
  autoSize: 'قه‌باره‌ی خۆكارانه‌',
27
37
  backgroundColor: 'ره‌نگی دیاركراو',
28
38
  basic: 'سه‌ره‌تایی',
39
+ blockStyle: 'شێوازی بلۆک',
29
40
  bold: 'تۆخكردن',
41
+ border: 'سنوور',
42
+ border_all: 'سنووری هەموو',
43
+ border_inside: 'سنوور لە ناوەوە',
44
+ border_horizontal: 'سنوور ئاسۆیی',
45
+ border_vertical: 'سنووری ڕاست',
46
+ border_outside: 'سنوور لە دەرەوە',
47
+ border_left: 'سنوور چەپ',
48
+ border_top: 'سەرەوەی سنوور',
49
+ border_right: 'سنووری ڕاست',
50
+ border_bottom: 'بنی سنوور',
51
+ border_none: 'سنوور هیچ',
30
52
  bulletedList: 'لیستی ریزنه‌كراو',
53
+ cancel: 'ڕەتکردنەوە',
31
54
  caption: 'پێناسه‌یه‌ك دابنێ',
55
+ cellProperties: 'تایبەتمەندی خانەکان',
32
56
  center: 'ناوەڕاست',
33
57
  close: 'داخستن',
34
58
  codeView: 'بینینی كۆده‌كان',
59
+ color: 'ڕەنگ',
60
+ colorPicker: 'ڕەنگ هەڵگر',
61
+ column: 'ستوون',
62
+ comment: 'کۆمێنتەکان',
63
+ commentAdd: 'کۆمێنت زیاد بکە',
64
+ commentShow: 'کۆمێنتەکان پیشان بدە',
65
+ copy: 'کۆپی بکە',
66
+ copyFormat: 'فۆرماتکردنی بۆیاخ',
67
+ cut: 'بڕین',
35
68
  default: 'بنه‌ڕه‌ت',
36
69
  deleteColumn: 'ستونێك بسره‌وه‌',
37
70
  deleteRow: 'ریز بسره‌وه‌',
38
71
  dir_ltr: 'من اليسار إلى اليمين',
39
72
  dir_rtl: 'من اليمين الى اليسار',
73
+ download: 'دابەزاندن',
74
+ drag: 'ڕاکێشان',
75
+ drawing: 'وێنە کێشان',
76
+ drawing_modal_title: 'وێنە کێشان',
40
77
  edit: 'دەسکاریکردن',
78
+ embed: 'جێگیرکردن',
79
+ embed_modal_title: 'جێگیرکردن',
80
+ embed_modal_source: 'سەرچاوە / URL جێگیرکردن',
81
+ exportPDF: 'هەناردەکردن بۆ PDF',
82
+ exportWord: 'هەناردەکردن بۆ Word',
83
+ find: 'دۆزینەوە',
84
+ decrease: 'کەم کردنەوە',
85
+ increase: 'زیادکردن',
86
+ fileBrowser: 'وێبگەڕی فایلەکان',
87
+ fileGallery: 'گەلەری فایلەکان',
88
+ fileUpload: 'بارکردنی فایل',
41
89
  fixedColumnWidth: 'پانی ستون نه‌گۆربكه‌',
42
90
  font: 'فۆنت',
43
91
  fontColor: 'ره‌نگی فۆنت',
44
92
  fontSize: 'قه‌باره‌',
45
- formats: 'Formats',
93
+ formats: 'فۆرماتەکان',
46
94
  fullScreen: 'پڕ به‌ شاشه‌',
47
95
  height: 'به‌رزی',
48
96
  horizontalLine: 'هێڵی ئاسۆیی',
@@ -50,19 +98,23 @@
50
98
  hr_dashed: 'داش داش',
51
99
  hr_dotted: 'نوكته‌ نوكته‌',
52
100
  hr_solid: 'پته‌و',
101
+ id: 'ناسنامە',
53
102
  image: 'وێنه‌',
54
103
  imageGallery: 'گاله‌ری وێنه‌كان',
55
104
  image_modal_altText: 'نوسینی جێگره‌وه‌',
56
105
  image_modal_file: 'فایلێك هه‌ڵبژێره‌',
57
106
  image_modal_title: 'وێنه‌یه‌ك دابنێ',
58
107
  image_modal_url: 'به‌سته‌ری وێنه‌',
108
+ importWord: 'هاوردەکردن لە وۆردەوە',
59
109
  indent: 'بۆشایی بەجێهێشتن',
110
+ inlineStyle: 'شێوازی ناو هێڵ',
60
111
  insertColumnAfter: 'ستونێك له‌ دواوه‌ زیادبكه‌',
61
112
  insertColumnBefore: 'ستونێك له‌ پێشه‌وه‌ زیادبكه‌',
62
113
  insertRowAbove: 'ریزك له‌ سه‌ره‌وه‌ زیادبكه‌',
63
114
  insertRowBelow: 'ریزێك له‌ خواره‌وه‌ زیادبكه‌',
115
+ insertLine: 'هێڵ بخەرە ناوەوە',
64
116
  italic: 'لار',
65
- layout: 'Layout',
117
+ layout: 'ڕیزبەست',
66
118
  left: 'چه‌پ',
67
119
  lineHeight: 'بڵندی دێر',
68
120
  link: 'به‌سته‌ر',
@@ -72,6 +124,7 @@
72
124
  link_modal_text: 'تێكستی به‌سته‌ر',
73
125
  link_modal_title: 'به‌سته‌ر دابنێ',
74
126
  link_modal_url: 'به‌سته‌ر',
127
+ link_modal_relAttribute: 'سیفەتی Rel',
75
128
  list: 'لیست',
76
129
  math: 'بیركاری',
77
130
  math_modal_fontSizeLabel: 'قه‌باره‌ی فۆنت',
@@ -79,6 +132,7 @@
79
132
  math_modal_previewLabel: 'پێشبینین',
80
133
  math_modal_title: 'بیركاری',
81
134
  maxSize: 'گه‌وره‌ترین قه‌باره‌',
135
+ mediaGallery: 'گەلەری میدیا',
82
136
  mention: 'تنويه ب',
83
137
  menu_bordered: 'لێواری هه‌بێت',
84
138
  menu_code: 'كۆد',
@@ -90,8 +144,13 @@
90
144
  minSize: 'بچوكترین قه‌باره‌',
91
145
  mirrorHorizontal: 'هه‌ڵگه‌رێنه‌وه‌ به‌ده‌وری ته‌وه‌ره‌ی ئاسۆیی',
92
146
  mirrorVertical: 'هه‌ڵگه‌رێنه‌وه‌ به‌ده‌وری ته‌وه‌ره‌ی ستونی',
147
+ newDocument: 'بەڵگەنامەی نوێ',
93
148
  numberedList: 'لیستی ریزكراو',
94
149
  outdent: 'لابردنی بۆشایی',
150
+ pageBreak: 'پەیج شکاندن',
151
+ pageDown: 'لاپەڕە بۆ خوارەوە',
152
+ pageNumber: 'ژمارەی لاپەڕە',
153
+ pageUp: 'پەیج بەرەو سەرەوە',
95
154
  paragraphStyle: 'ستایلی په‌ره‌گراف',
96
155
  preview: 'پێشبینین',
97
156
  print: 'پرینت',
@@ -100,17 +159,22 @@
100
159
  redo: 'هەڵگەڕاندنەوە',
101
160
  remove: 'سڕینه‌وه‌',
102
161
  removeFormat: 'لابردنی فۆرمات',
162
+ replace: 'شوێن گرتنەوە',
163
+ replaceAll: 'هەمووی بگۆڕە',
103
164
  resize100: 'قه‌باره‌ بگۆره‌ بۆ ١٠٠%',
104
165
  resize25: 'قه‌باره‌ بگۆره‌ بۆ ٢٥%',
105
166
  resize50: 'قه‌باره‌ بگۆره‌ بۆ ٥٠%',
106
167
  resize75: 'قه‌باره‌ بگۆره‌ بۆ ٧٥%',
107
- resize: 'Resize',
168
+ resize: 'گۆڕینی قەبارە',
108
169
  revert: 'بیگەڕێنەوە سەر باری سەرەتایی',
170
+ revisionHistory: 'مێژووی پێداچوونەوە',
109
171
  right: 'راست',
110
172
  rotateLeft: 'بسوڕێنه‌ به‌لای چه‌پدا',
111
173
  rotateRight: 'بسورێنه‌ به‌لای راستدا',
174
+ row: 'ڕیز',
112
175
  save: 'پاشه‌كه‌وتكردن',
113
176
  search: 'گه‌ران',
177
+ selectAll: 'هەموو هەڵبژێرە',
114
178
  showBlocks: 'بڵۆك نیشانبده',
115
179
  size: 'قه‌باره‌',
116
180
  splitCells: 'خانه‌كان لێك جیابكه‌وه‌',
@@ -120,6 +184,7 @@
120
184
  superscript: 'سەرنووس',
121
185
  table: 'خشته‌',
122
186
  tableHeader: 'سه‌ردێری خشته‌ك',
187
+ tableProperties: 'تایبەتمەندیەکانی خشتەکان',
123
188
  tags: 'تاگه‌كان',
124
189
  tag_blockquote: 'ده‌ق',
125
190
  tag_div: 'ی ئاسایی (DIV)',
@@ -128,15 +193,20 @@
128
193
  tag_pre: 'كۆد',
129
194
  template: 'قاڵب',
130
195
  textStyle: 'ستایلی نوسین',
196
+ title: 'ناونیشان',
131
197
  underline: 'هێڵ به‌ژێردا بێنه‌',
132
198
  undo: 'وەک خۆی لێ بکەوە',
199
+ unmergeCells: 'خانەکان یەکبخەنەوە',
133
200
  unlink: 'سڕینەوەی بەستەر',
134
201
  verticalSplit: 'جیاكردنه‌وه‌ی ستونی',
135
202
  video: 'ڤیدیۆ',
203
+ videoGallery: 'گەلەری ڤیدیۆ',
136
204
  video_modal_file: 'فایلێك هه‌ڵبژێره‌',
137
205
  video_modal_title: 'ڤیدیۆیه‌ك دابنێ',
138
206
  video_modal_url: 'YouTube/Vimeo به‌سته‌ری له‌ناودانان وه‌ك ',
139
- width: 'پانی'
207
+ width: 'پانی',
208
+ message_copy_success: 'لە پەڕگەی لەبەرگرتووەدا هاوپەڕ کرا',
209
+ message_copy_fail: 'هاوپەڕکردن سەرکەوتوو نەبوو. تکایە بەدەست هاوپەڕ بکە.'
140
210
  };
141
211
 
142
212
  if (typeof noGlobal === typeof undefined) {