@ckeditor/ckeditor5-special-characters 35.3.2 → 36.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (113) hide show
  1. package/LICENSE.md +1 -1
  2. package/build/special-characters.js +3 -3
  3. package/build/translations/ar.js +1 -1
  4. package/build/translations/az.js +1 -1
  5. package/build/translations/bg.js +1 -1
  6. package/build/translations/bn.js +1 -1
  7. package/build/translations/ca.js +1 -1
  8. package/build/translations/cs.js +1 -1
  9. package/build/translations/da.js +1 -1
  10. package/build/translations/de.js +1 -1
  11. package/build/translations/el.js +1 -1
  12. package/build/translations/en-au.js +1 -1
  13. package/build/translations/es.js +1 -1
  14. package/build/translations/et.js +1 -1
  15. package/build/translations/fa.js +1 -1
  16. package/build/translations/fi.js +1 -1
  17. package/build/translations/fr.js +1 -1
  18. package/build/translations/gl.js +1 -1
  19. package/build/translations/he.js +1 -1
  20. package/build/translations/hi.js +1 -1
  21. package/build/translations/hu.js +1 -1
  22. package/build/translations/id.js +1 -1
  23. package/build/translations/it.js +1 -1
  24. package/build/translations/ja.js +1 -1
  25. package/build/translations/ko.js +1 -1
  26. package/build/translations/lt.js +1 -1
  27. package/build/translations/lv.js +1 -1
  28. package/build/translations/ms.js +1 -1
  29. package/build/translations/nl.js +1 -1
  30. package/build/translations/no.js +1 -1
  31. package/build/translations/pl.js +1 -1
  32. package/build/translations/pt-br.js +1 -1
  33. package/build/translations/pt.js +1 -1
  34. package/build/translations/ro.js +1 -1
  35. package/build/translations/ru.js +1 -1
  36. package/build/translations/sk.js +1 -1
  37. package/build/translations/sr-latn.js +1 -1
  38. package/build/translations/sr.js +1 -1
  39. package/build/translations/sv.js +1 -1
  40. package/build/translations/th.js +1 -1
  41. package/build/translations/tk.js +1 -1
  42. package/build/translations/tr.js +1 -1
  43. package/build/translations/uk.js +1 -1
  44. package/build/translations/ur.js +1 -1
  45. package/build/translations/uz.js +1 -1
  46. package/build/translations/vi.js +1 -1
  47. package/build/translations/zh-cn.js +1 -1
  48. package/build/translations/zh.js +1 -1
  49. package/lang/contexts.json +6 -0
  50. package/lang/translations/ar.po +25 -1
  51. package/lang/translations/az.po +25 -1
  52. package/lang/translations/bg.po +25 -1
  53. package/lang/translations/bn.po +25 -1
  54. package/lang/translations/ca.po +25 -1
  55. package/lang/translations/cs.po +25 -1
  56. package/lang/translations/da.po +25 -1
  57. package/lang/translations/de.po +25 -1
  58. package/lang/translations/el.po +25 -1
  59. package/lang/translations/en-au.po +25 -1
  60. package/lang/translations/en.po +25 -1
  61. package/lang/translations/es.po +25 -1
  62. package/lang/translations/et.po +25 -1
  63. package/lang/translations/fa.po +25 -1
  64. package/lang/translations/fi.po +25 -1
  65. package/lang/translations/fr.po +25 -1
  66. package/lang/translations/gl.po +25 -1
  67. package/lang/translations/he.po +25 -1
  68. package/lang/translations/hi.po +25 -1
  69. package/lang/translations/hu.po +25 -1
  70. package/lang/translations/id.po +25 -1
  71. package/lang/translations/it.po +25 -1
  72. package/lang/translations/ja.po +25 -1
  73. package/lang/translations/ko.po +25 -1
  74. package/lang/translations/lt.po +25 -1
  75. package/lang/translations/lv.po +25 -1
  76. package/lang/translations/ms.po +25 -1
  77. package/lang/translations/nl.po +25 -1
  78. package/lang/translations/no.po +25 -1
  79. package/lang/translations/pl.po +25 -1
  80. package/lang/translations/pt-br.po +25 -1
  81. package/lang/translations/pt.po +25 -1
  82. package/lang/translations/ro.po +25 -1
  83. package/lang/translations/ru.po +25 -1
  84. package/lang/translations/sk.po +25 -1
  85. package/lang/translations/sr-latn.po +29 -5
  86. package/lang/translations/sr.po +29 -5
  87. package/lang/translations/sv.po +25 -1
  88. package/lang/translations/th.po +25 -1
  89. package/lang/translations/tk.po +25 -1
  90. package/lang/translations/tr.po +25 -1
  91. package/lang/translations/uk.po +25 -1
  92. package/lang/translations/ur.po +25 -1
  93. package/lang/translations/uz.po +25 -1
  94. package/lang/translations/vi.po +25 -1
  95. package/lang/translations/zh-cn.po +25 -1
  96. package/lang/translations/zh.po +25 -1
  97. package/package.json +12 -12
  98. package/src/index.js +1 -1
  99. package/src/specialcharacters.js +112 -17
  100. package/src/specialcharactersarrows.js +2 -2
  101. package/src/specialcharacterscurrency.js +2 -2
  102. package/src/specialcharactersessentials.js +1 -1
  103. package/src/specialcharacterslatin.js +2 -2
  104. package/src/specialcharactersmathematical.js +2 -2
  105. package/src/specialcharacterstext.js +2 -2
  106. package/src/ui/charactergridview.js +18 -3
  107. package/src/ui/characterinfoview.js +1 -1
  108. package/src/ui/specialcharactersnavigationview.js +11 -10
  109. package/src/ui/specialcharactersview.js +1 -1
  110. package/theme/charactergrid.css +1 -1
  111. package/theme/characterinfo.css +1 -1
  112. package/theme/specialcharacters.css +1 -1
  113. package/build/special-characters.js.map +0 -1
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
1
+ # Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.
2
2
  #
3
3
  # !!! IMPORTANT !!!
4
4
  #
@@ -20,6 +20,30 @@ msgctxt "Name of the special characters plugins, visible in a dropdown and as a
20
20
  msgid "Special characters"
21
21
  msgstr "Ýörite nyşanlar"
22
22
 
23
+ msgctxt "A category name is displayed in a special characters dropdown representing all available symbols."
24
+ msgid "All"
25
+ msgstr ""
26
+
27
+ msgctxt "A category name is displayed in a special characters dropdown representing arrow symbols."
28
+ msgid "Arrows"
29
+ msgstr ""
30
+
31
+ msgctxt "A category name is displayed in a special characters dropdown representing currency symbols."
32
+ msgid "Currency"
33
+ msgstr ""
34
+
35
+ msgctxt "A category name is displayed in a special characters dropdown representing latin symbols."
36
+ msgid "Latin"
37
+ msgstr ""
38
+
39
+ msgctxt "A category name is displayed in a special characters dropdown representing mathematical symbols."
40
+ msgid "Mathematical"
41
+ msgstr ""
42
+
43
+ msgctxt "A category name is displayed in a special characters dropdown representing text symbols."
44
+ msgid "Text"
45
+ msgstr ""
46
+
23
47
  msgctxt "A label for the \"leftwards simple arrow\" symbol."
24
48
  msgid "leftwards simple arrow"
25
49
  msgstr ""
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
1
+ # Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.
2
2
  #
3
3
  # !!! IMPORTANT !!!
4
4
  #
@@ -20,6 +20,30 @@ msgctxt "Name of the special characters plugins, visible in a dropdown and as a
20
20
  msgid "Special characters"
21
21
  msgstr "Özel karakterler"
22
22
 
23
+ msgctxt "A category name is displayed in a special characters dropdown representing all available symbols."
24
+ msgid "All"
25
+ msgstr "Tümü"
26
+
27
+ msgctxt "A category name is displayed in a special characters dropdown representing arrow symbols."
28
+ msgid "Arrows"
29
+ msgstr "Oklar"
30
+
31
+ msgctxt "A category name is displayed in a special characters dropdown representing currency symbols."
32
+ msgid "Currency"
33
+ msgstr "Para Birimi"
34
+
35
+ msgctxt "A category name is displayed in a special characters dropdown representing latin symbols."
36
+ msgid "Latin"
37
+ msgstr "Latince"
38
+
39
+ msgctxt "A category name is displayed in a special characters dropdown representing mathematical symbols."
40
+ msgid "Mathematical"
41
+ msgstr "Matematiksel"
42
+
43
+ msgctxt "A category name is displayed in a special characters dropdown representing text symbols."
44
+ msgid "Text"
45
+ msgstr "Metin"
46
+
23
47
  msgctxt "A label for the \"leftwards simple arrow\" symbol."
24
48
  msgid "leftwards simple arrow"
25
49
  msgstr "sola doğru basit ok"
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
1
+ # Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.
2
2
  #
3
3
  # !!! IMPORTANT !!!
4
4
  #
@@ -20,6 +20,30 @@ msgctxt "Name of the special characters plugins, visible in a dropdown and as a
20
20
  msgid "Special characters"
21
21
  msgstr "Спеціальні символи"
22
22
 
23
+ msgctxt "A category name is displayed in a special characters dropdown representing all available symbols."
24
+ msgid "All"
25
+ msgstr "Усі"
26
+
27
+ msgctxt "A category name is displayed in a special characters dropdown representing arrow symbols."
28
+ msgid "Arrows"
29
+ msgstr "Стрілки"
30
+
31
+ msgctxt "A category name is displayed in a special characters dropdown representing currency symbols."
32
+ msgid "Currency"
33
+ msgstr "Валюта"
34
+
35
+ msgctxt "A category name is displayed in a special characters dropdown representing latin symbols."
36
+ msgid "Latin"
37
+ msgstr "Латинські"
38
+
39
+ msgctxt "A category name is displayed in a special characters dropdown representing mathematical symbols."
40
+ msgid "Mathematical"
41
+ msgstr "Математичні"
42
+
43
+ msgctxt "A category name is displayed in a special characters dropdown representing text symbols."
44
+ msgid "Text"
45
+ msgstr "Текст"
46
+
23
47
  msgctxt "A label for the \"leftwards simple arrow\" symbol."
24
48
  msgid "leftwards simple arrow"
25
49
  msgstr "проста стрілка вліво"
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
1
+ # Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.
2
2
  #
3
3
  # !!! IMPORTANT !!!
4
4
  #
@@ -20,6 +20,30 @@ msgctxt "Name of the special characters plugins, visible in a dropdown and as a
20
20
  msgid "Special characters"
21
21
  msgstr ""
22
22
 
23
+ msgctxt "A category name is displayed in a special characters dropdown representing all available symbols."
24
+ msgid "All"
25
+ msgstr ""
26
+
27
+ msgctxt "A category name is displayed in a special characters dropdown representing arrow symbols."
28
+ msgid "Arrows"
29
+ msgstr ""
30
+
31
+ msgctxt "A category name is displayed in a special characters dropdown representing currency symbols."
32
+ msgid "Currency"
33
+ msgstr ""
34
+
35
+ msgctxt "A category name is displayed in a special characters dropdown representing latin symbols."
36
+ msgid "Latin"
37
+ msgstr ""
38
+
39
+ msgctxt "A category name is displayed in a special characters dropdown representing mathematical symbols."
40
+ msgid "Mathematical"
41
+ msgstr ""
42
+
43
+ msgctxt "A category name is displayed in a special characters dropdown representing text symbols."
44
+ msgid "Text"
45
+ msgstr ""
46
+
23
47
  msgctxt "A label for the \"leftwards simple arrow\" symbol."
24
48
  msgid "leftwards simple arrow"
25
49
  msgstr ""
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
1
+ # Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.
2
2
  #
3
3
  # !!! IMPORTANT !!!
4
4
  #
@@ -20,6 +20,30 @@ msgctxt "Name of the special characters plugins, visible in a dropdown and as a
20
20
  msgid "Special characters"
21
21
  msgstr "Maxsus belgilar"
22
22
 
23
+ msgctxt "A category name is displayed in a special characters dropdown representing all available symbols."
24
+ msgid "All"
25
+ msgstr ""
26
+
27
+ msgctxt "A category name is displayed in a special characters dropdown representing arrow symbols."
28
+ msgid "Arrows"
29
+ msgstr ""
30
+
31
+ msgctxt "A category name is displayed in a special characters dropdown representing currency symbols."
32
+ msgid "Currency"
33
+ msgstr ""
34
+
35
+ msgctxt "A category name is displayed in a special characters dropdown representing latin symbols."
36
+ msgid "Latin"
37
+ msgstr ""
38
+
39
+ msgctxt "A category name is displayed in a special characters dropdown representing mathematical symbols."
40
+ msgid "Mathematical"
41
+ msgstr ""
42
+
43
+ msgctxt "A category name is displayed in a special characters dropdown representing text symbols."
44
+ msgid "Text"
45
+ msgstr ""
46
+
23
47
  msgctxt "A label for the \"leftwards simple arrow\" symbol."
24
48
  msgid "leftwards simple arrow"
25
49
  msgstr ""
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
1
+ # Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.
2
2
  #
3
3
  # !!! IMPORTANT !!!
4
4
  #
@@ -20,6 +20,30 @@ msgctxt "Name of the special characters plugins, visible in a dropdown and as a
20
20
  msgid "Special characters"
21
21
  msgstr "Các ký tự đặc biệt"
22
22
 
23
+ msgctxt "A category name is displayed in a special characters dropdown representing all available symbols."
24
+ msgid "All"
25
+ msgstr "Tất cả"
26
+
27
+ msgctxt "A category name is displayed in a special characters dropdown representing arrow symbols."
28
+ msgid "Arrows"
29
+ msgstr "Mũi tên"
30
+
31
+ msgctxt "A category name is displayed in a special characters dropdown representing currency symbols."
32
+ msgid "Currency"
33
+ msgstr "Tiền tệ"
34
+
35
+ msgctxt "A category name is displayed in a special characters dropdown representing latin symbols."
36
+ msgid "Latin"
37
+ msgstr "Latin"
38
+
39
+ msgctxt "A category name is displayed in a special characters dropdown representing mathematical symbols."
40
+ msgid "Mathematical"
41
+ msgstr "Toán học"
42
+
43
+ msgctxt "A category name is displayed in a special characters dropdown representing text symbols."
44
+ msgid "Text"
45
+ msgstr "Văn bản"
46
+
23
47
  msgctxt "A label for the \"leftwards simple arrow\" symbol."
24
48
  msgid "leftwards simple arrow"
25
49
  msgstr "mũi tên đơn giản chỉ sang trái"
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
1
+ # Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.
2
2
  #
3
3
  # !!! IMPORTANT !!!
4
4
  #
@@ -20,6 +20,30 @@ msgctxt "Name of the special characters plugins, visible in a dropdown and as a
20
20
  msgid "Special characters"
21
21
  msgstr "特殊字符"
22
22
 
23
+ msgctxt "A category name is displayed in a special characters dropdown representing all available symbols."
24
+ msgid "All"
25
+ msgstr "全部"
26
+
27
+ msgctxt "A category name is displayed in a special characters dropdown representing arrow symbols."
28
+ msgid "Arrows"
29
+ msgstr "箭头"
30
+
31
+ msgctxt "A category name is displayed in a special characters dropdown representing currency symbols."
32
+ msgid "Currency"
33
+ msgstr "货币"
34
+
35
+ msgctxt "A category name is displayed in a special characters dropdown representing latin symbols."
36
+ msgid "Latin"
37
+ msgstr "拉丁文"
38
+
39
+ msgctxt "A category name is displayed in a special characters dropdown representing mathematical symbols."
40
+ msgid "Mathematical"
41
+ msgstr "数学"
42
+
43
+ msgctxt "A category name is displayed in a special characters dropdown representing text symbols."
44
+ msgid "Text"
45
+ msgstr "文本"
46
+
23
47
  msgctxt "A label for the \"leftwards simple arrow\" symbol."
24
48
  msgid "leftwards simple arrow"
25
49
  msgstr "向左简单箭头"
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
1
+ # Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.
2
2
  #
3
3
  # !!! IMPORTANT !!!
4
4
  #
@@ -20,6 +20,30 @@ msgctxt "Name of the special characters plugins, visible in a dropdown and as a
20
20
  msgid "Special characters"
21
21
  msgstr "特殊字元"
22
22
 
23
+ msgctxt "A category name is displayed in a special characters dropdown representing all available symbols."
24
+ msgid "All"
25
+ msgstr "所有"
26
+
27
+ msgctxt "A category name is displayed in a special characters dropdown representing arrow symbols."
28
+ msgid "Arrows"
29
+ msgstr "箭頭"
30
+
31
+ msgctxt "A category name is displayed in a special characters dropdown representing currency symbols."
32
+ msgid "Currency"
33
+ msgstr "貨幣"
34
+
35
+ msgctxt "A category name is displayed in a special characters dropdown representing latin symbols."
36
+ msgid "Latin"
37
+ msgstr "拉丁字母"
38
+
39
+ msgctxt "A category name is displayed in a special characters dropdown representing mathematical symbols."
40
+ msgid "Mathematical"
41
+ msgstr "數學"
42
+
43
+ msgctxt "A category name is displayed in a special characters dropdown representing text symbols."
44
+ msgid "Text"
45
+ msgstr "文字"
46
+
23
47
  msgctxt "A label for the \"leftwards simple arrow\" symbol."
24
48
  msgid "leftwards simple arrow"
25
49
  msgstr "向左簡單箭號"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ckeditor/ckeditor5-special-characters",
3
- "version": "35.3.2",
3
+ "version": "36.0.0",
4
4
  "description": "Special characters feature for CKEditor 5.",
5
5
  "keywords": [
6
6
  "ckeditor",
@@ -12,19 +12,19 @@
12
12
  ],
13
13
  "main": "src/index.js",
14
14
  "dependencies": {
15
- "ckeditor5": "^35.3.2"
15
+ "ckeditor5": "^36.0.0"
16
16
  },
17
17
  "devDependencies": {
18
- "@ckeditor/ckeditor5-cloud-services": "^35.3.2",
19
- "@ckeditor/ckeditor5-core": "^35.3.2",
20
- "@ckeditor/ckeditor5-dev-utils": "^31.0.0",
21
- "@ckeditor/ckeditor5-easy-image": "^35.3.2",
22
- "@ckeditor/ckeditor5-editor-classic": "^35.3.2",
23
- "@ckeditor/ckeditor5-image": "^35.3.2",
24
- "@ckeditor/ckeditor5-theme-lark": "^35.3.2",
25
- "@ckeditor/ckeditor5-typing": "^35.3.2",
26
- "@ckeditor/ckeditor5-ui": "^35.3.2",
27
- "@ckeditor/ckeditor5-utils": "^35.3.2",
18
+ "@ckeditor/ckeditor5-cloud-services": "^36.0.0",
19
+ "@ckeditor/ckeditor5-core": "^36.0.0",
20
+ "@ckeditor/ckeditor5-dev-utils": "^32.0.0",
21
+ "@ckeditor/ckeditor5-easy-image": "^36.0.0",
22
+ "@ckeditor/ckeditor5-editor-classic": "^36.0.0",
23
+ "@ckeditor/ckeditor5-image": "^36.0.0",
24
+ "@ckeditor/ckeditor5-theme-lark": "^36.0.0",
25
+ "@ckeditor/ckeditor5-typing": "^36.0.0",
26
+ "@ckeditor/ckeditor5-ui": "^36.0.0",
27
+ "@ckeditor/ckeditor5-utils": "^36.0.0",
28
28
  "webpack": "^5.58.1",
29
29
  "webpack-cli": "^4.9.0"
30
30
  },
package/src/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
2
+ * @license Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
4
4
  */
5
5
 
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
2
+ * @license Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
4
4
  */
5
5
 
@@ -49,6 +49,8 @@ export default class SpecialCharacters extends Plugin {
49
49
  constructor( editor ) {
50
50
  super( editor );
51
51
 
52
+ const t = editor.t;
53
+
52
54
  /**
53
55
  * Registered characters. A pair of a character name and its symbol.
54
56
  *
@@ -58,12 +60,20 @@ export default class SpecialCharacters extends Plugin {
58
60
  this._characters = new Map();
59
61
 
60
62
  /**
61
- * Registered groups. Each group contains a collection with symbol names.
63
+ * Registered groups. Each group contains a displayed label and a collection with symbol names.
62
64
  *
63
65
  * @private
64
- * @member {Map.<String, Set.<String>>} #_groups
66
+ * @member {Map.<String, {items: Set.<String>, label: String}>} #_groups
65
67
  */
66
68
  this._groups = new Map();
69
+
70
+ /**
71
+ * A label describing the "All" special characters category.
72
+ *
73
+ * @private
74
+ * @member {String} #_allSpecialCharactersGroupLabel
75
+ */
76
+ this._allSpecialCharactersGroupLabel = t( 'All' );
67
77
  }
68
78
 
69
79
  /**
@@ -126,8 +136,10 @@ export default class SpecialCharacters extends Plugin {
126
136
  *
127
137
  * @param {String} groupName
128
138
  * @param {Array.<module:special-characters/specialcharacters~SpecialCharacterDefinition>} items
139
+ * @param {Object} options
140
+ * @param {String} [options.label=groupName]
129
141
  */
130
- addItems( groupName, items ) {
142
+ addItems( groupName, items, options = { label: groupName } ) {
131
143
  if ( groupName === ALL_SPECIAL_CHARACTERS_GROUP ) {
132
144
  /**
133
145
  * The name "All" for a special category group cannot be used because it is a special category that displays all
@@ -135,26 +147,41 @@ export default class SpecialCharacters extends Plugin {
135
147
  *
136
148
  * @error special-character-invalid-group-name
137
149
  */
138
- throw new CKEditorError(
139
- `special-character-invalid-group-name: The name "${ ALL_SPECIAL_CHARACTERS_GROUP }" is reserved and cannot be used.`
140
- );
150
+ throw new CKEditorError( 'special-character-invalid-group-name', null );
141
151
  }
142
152
 
143
- const group = this._getGroup( groupName );
153
+ const group = this._getGroup( groupName, options.label );
144
154
 
145
155
  for ( const item of items ) {
146
- group.add( item.title );
156
+ group.items.add( item.title );
147
157
  this._characters.set( item.title, item.character );
148
158
  }
149
159
  }
150
160
 
151
161
  /**
152
- * Returns an iterator of special characters groups.
162
+ * Returns special character groups in an order determined based on configuration and registration sequence.
153
163
  *
154
164
  * @returns {Iterable.<String>}
155
165
  */
156
166
  getGroups() {
157
- return this._groups.keys();
167
+ const groups = Array.from( this._groups.keys() );
168
+ const order = this.editor.config.get( 'specialCharacters.order' ) || [];
169
+
170
+ const invalidGroup = order.find( item => !groups.includes( item ) );
171
+
172
+ if ( invalidGroup ) {
173
+ /**
174
+ * One of the special character groups in the "specialCharacters.order" configuration doesn't exist.
175
+ *
176
+ * @error special-character-invalid-order-group-name
177
+ */
178
+ throw new CKEditorError( 'special-character-invalid-order-group-name', null, { invalidGroup } );
179
+ }
180
+
181
+ return new Set( [
182
+ ...order,
183
+ ...groups
184
+ ] );
158
185
  }
159
186
 
160
187
  /**
@@ -168,7 +195,11 @@ export default class SpecialCharacters extends Plugin {
168
195
  return new Set( this._characters.keys() );
169
196
  }
170
197
 
171
- return this._groups.get( groupName );
198
+ const group = this._groups.get( groupName );
199
+
200
+ if ( group ) {
201
+ return group.items;
202
+ }
172
203
  }
173
204
 
174
205
  /**
@@ -187,10 +218,14 @@ export default class SpecialCharacters extends Plugin {
187
218
  *
188
219
  * @private
189
220
  * @param {String} groupName The name of the group to create.
221
+ * @param {String} label The label describing the new group.
190
222
  */
191
- _getGroup( groupName ) {
223
+ _getGroup( groupName, label ) {
192
224
  if ( !this._groups.has( groupName ) ) {
193
- this._groups.set( groupName, new Set() );
225
+ this._groups.set( groupName, {
226
+ items: new Set(),
227
+ label
228
+ } );
194
229
  }
195
230
 
196
231
  return this._groups.get( groupName );
@@ -225,10 +260,14 @@ export default class SpecialCharacters extends Plugin {
225
260
  * @returns {Object} Returns an object with `navigationView`, `gridView` and `infoView` properties, containing UI parts.
226
261
  */
227
262
  _createDropdownPanelContent( locale, dropdownView ) {
228
- const specialCharsGroups = [ ...this.getGroups() ];
263
+ // The map contains a name of category (an identifier) and its label (a translational string).
264
+ const specialCharsGroups = new Map( [
265
+ // Add a special group that shows all available special characters.
266
+ [ ALL_SPECIAL_CHARACTERS_GROUP, this._allSpecialCharactersGroupLabel ],
229
267
 
230
- // Add a special group that shows all available special characters.
231
- specialCharsGroups.unshift( ALL_SPECIAL_CHARACTERS_GROUP );
268
+ ...Array.from( this.getGroups() )
269
+ .map( name => ( [ name, this._groups.get( name ).label ] ) )
270
+ ] );
232
271
 
233
272
  const navigationView = new SpecialCharactersNavigationView( locale, specialCharsGroups );
234
273
  const gridView = new CharacterGridView( locale );
@@ -240,6 +279,10 @@ export default class SpecialCharacters extends Plugin {
240
279
  infoView.set( data );
241
280
  } );
242
281
 
282
+ gridView.on( 'tileFocus', ( evt, data ) => {
283
+ infoView.set( data );
284
+ } );
285
+
243
286
  // Update the grid of special characters when a user changed the character group.
244
287
  navigationView.on( 'execute', () => {
245
288
  this._updateGrid( navigationView.currentGroupName, gridView );
@@ -258,3 +301,55 @@ export default class SpecialCharacters extends Plugin {
258
301
  * @property {String} title A unique name of the character (e.g. "greek small letter epsilon").
259
302
  * @property {String} character A human-readable character displayed as the label (e.g. "ε").
260
303
  */
304
+
305
+ /**
306
+ * The configuration of the {@link module:special-characters/specialcharacters~SpecialCharacters} feature.
307
+ *
308
+ * Read more in {@link module:special-characters/specialcharacters~SpecialCharactersConfig}.
309
+ *
310
+ * @member {module:special-characters/specialcharacters~SpecialCharactersConfig}
311
+ * module:core/editor/editorconfig~EditorConfig#specialCharacters
312
+ */
313
+
314
+ /**
315
+ * The configuration of the special characters feature.
316
+ *
317
+ * Read more about {@glink features/special-characters#configuration configuring the special characters feature}.
318
+ *
319
+ * ClassicEditor
320
+ * .create( editorElement, {
321
+ * specialCharacters: ... // Special characters feature options.
322
+ * } )
323
+ * .then( ... )
324
+ * .catch( ... );
325
+ *
326
+ * See {@link module:core/editor/editorconfig~EditorConfig all editor configuration options}.
327
+ *
328
+ * @interface SpecialCharactersConfig
329
+ */
330
+
331
+ /**
332
+ * The configuration of the special characters category order.
333
+ *
334
+ * Special characters categories are displayed in the UI in the order in which they were registered. Using the `order` property
335
+ * allows to override this behaviour and enforce specific order. Categories not listed in the `order` property will be displayed
336
+ * in the default order below categories listed in the configuration.
337
+ *
338
+ * ClassicEditor
339
+ * .create( editorElement, {
340
+ * plugins: [ SpecialCharacters, SpecialCharactersEssentials, ... ],
341
+ * specialCharacters: {
342
+ * order: [
343
+ * 'Text',
344
+ * 'Latin',
345
+ * 'Mathematical',
346
+ * 'Currency',
347
+ * 'Arrows'
348
+ * ]
349
+ * }
350
+ * } )
351
+ * .then( ... )
352
+ * .catch( ... );
353
+ *
354
+ * @member {Array.<String>} module:special-characters/specialcharacters~SpecialCharactersConfig#order
355
+ */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
2
+ * @license Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
4
4
  */
5
5
 
@@ -59,6 +59,6 @@ export default class SpecialCharactersArrows extends Plugin {
59
59
  { title: t( 'on with exclamation mark with left right arrow above' ), character: '🔛' },
60
60
  { title: t( 'soon with rightwards arrow above' ), character: '🔜' },
61
61
  { title: t( 'top with upwards arrow above' ), character: '🔝' }
62
- ] );
62
+ ], { label: t( 'Arrows' ) } );
63
63
  }
64
64
  }
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
2
+ * @license Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
4
4
  */
5
5
 
@@ -73,6 +73,6 @@ export default class SpecialCharactersCurrency extends Plugin {
73
73
  { character: '₻', title: t( 'Nordic mark sign' ) },
74
74
  { character: '₼', title: t( 'Manat sign' ) },
75
75
  { character: '₽', title: t( 'Ruble sign' ) }
76
- ] );
76
+ ], { label: t( 'Currency' ) } );
77
77
  }
78
78
  }
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
2
+ * @license Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
4
4
  */
5
5
 
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
2
+ * @license Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
4
4
  */
5
5
 
@@ -165,6 +165,6 @@ export default class SpecialCharactersLatin extends Plugin {
165
165
  { character: 'Ž', title: t( 'Latin capital letter z with caron' ) },
166
166
  { character: 'ž', title: t( 'Latin small letter z with caron' ) },
167
167
  { character: 'ſ', title: t( 'Latin small letter long s' ) }
168
- ] );
168
+ ], { label: t( 'Latin' ) } );
169
169
  }
170
170
  }
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
2
+ * @license Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
4
4
  */
5
5
 
@@ -81,6 +81,6 @@ export default class SpecialCharactersMathematical extends Plugin {
81
81
  { character: '¼', title: t( 'Vulgar fraction one quarter' ) },
82
82
  { character: '½', title: t( 'Vulgar fraction one half' ) },
83
83
  { character: '¾', title: t( 'Vulgar fraction three quarters' ) }
84
- ] );
84
+ ], { label: t( 'Mathematical' ) } );
85
85
  }
86
86
  }
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
2
+ * @license Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
4
4
  */
5
5
 
@@ -64,6 +64,6 @@ export default class SpecialCharactersText extends Plugin {
64
64
  { character: '§', title: t( 'Section sign' ) },
65
65
  { character: '¶', title: t( 'Paragraph sign' ) },
66
66
  { character: '⁋', title: t( 'Reversed paragraph sign' ) }
67
- ] );
67
+ ], { label: t( 'Text' ) } );
68
68
  }
69
69
  }