@ckeditor/ckeditor5-source-editing 0.0.0-internal-20241017.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 (254) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/LICENSE.md +17 -0
  3. package/README.md +26 -0
  4. package/build/source-editing.js +5 -0
  5. package/build/translations/ar.js +1 -0
  6. package/build/translations/bg.js +1 -0
  7. package/build/translations/bn.js +1 -0
  8. package/build/translations/ca.js +1 -0
  9. package/build/translations/cs.js +1 -0
  10. package/build/translations/da.js +1 -0
  11. package/build/translations/de.js +1 -0
  12. package/build/translations/el.js +1 -0
  13. package/build/translations/en-au.js +1 -0
  14. package/build/translations/es.js +1 -0
  15. package/build/translations/et.js +1 -0
  16. package/build/translations/fi.js +1 -0
  17. package/build/translations/fr.js +1 -0
  18. package/build/translations/gl.js +1 -0
  19. package/build/translations/he.js +1 -0
  20. package/build/translations/hi.js +1 -0
  21. package/build/translations/hr.js +1 -0
  22. package/build/translations/hu.js +1 -0
  23. package/build/translations/id.js +1 -0
  24. package/build/translations/it.js +1 -0
  25. package/build/translations/ja.js +1 -0
  26. package/build/translations/ko.js +1 -0
  27. package/build/translations/lt.js +1 -0
  28. package/build/translations/lv.js +1 -0
  29. package/build/translations/ms.js +1 -0
  30. package/build/translations/nl.js +1 -0
  31. package/build/translations/no.js +1 -0
  32. package/build/translations/pl.js +1 -0
  33. package/build/translations/pt-br.js +1 -0
  34. package/build/translations/pt.js +1 -0
  35. package/build/translations/ro.js +1 -0
  36. package/build/translations/ru.js +1 -0
  37. package/build/translations/sk.js +1 -0
  38. package/build/translations/sr-latn.js +1 -0
  39. package/build/translations/sr.js +1 -0
  40. package/build/translations/sv.js +1 -0
  41. package/build/translations/th.js +1 -0
  42. package/build/translations/tr.js +1 -0
  43. package/build/translations/ug.js +1 -0
  44. package/build/translations/uk.js +1 -0
  45. package/build/translations/ur.js +1 -0
  46. package/build/translations/vi.js +1 -0
  47. package/build/translations/zh-cn.js +1 -0
  48. package/build/translations/zh.js +1 -0
  49. package/ckeditor5-metadata.json +18 -0
  50. package/dist/augmentation.d.ts +22 -0
  51. package/dist/index-content.css +4 -0
  52. package/dist/index-editor.css +52 -0
  53. package/dist/index.css +88 -0
  54. package/dist/index.css.map +1 -0
  55. package/dist/index.d.ts +14 -0
  56. package/dist/index.js +606 -0
  57. package/dist/index.js.map +1 -0
  58. package/dist/sourceediting.d.ts +112 -0
  59. package/dist/sourceeditingconfig.d.ts +38 -0
  60. package/dist/translations/ar.d.ts +8 -0
  61. package/dist/translations/ar.js +5 -0
  62. package/dist/translations/ar.umd.js +11 -0
  63. package/dist/translations/bg.d.ts +8 -0
  64. package/dist/translations/bg.js +5 -0
  65. package/dist/translations/bg.umd.js +11 -0
  66. package/dist/translations/bn.d.ts +8 -0
  67. package/dist/translations/bn.js +5 -0
  68. package/dist/translations/bn.umd.js +11 -0
  69. package/dist/translations/ca.d.ts +8 -0
  70. package/dist/translations/ca.js +5 -0
  71. package/dist/translations/ca.umd.js +11 -0
  72. package/dist/translations/cs.d.ts +8 -0
  73. package/dist/translations/cs.js +5 -0
  74. package/dist/translations/cs.umd.js +11 -0
  75. package/dist/translations/da.d.ts +8 -0
  76. package/dist/translations/da.js +5 -0
  77. package/dist/translations/da.umd.js +11 -0
  78. package/dist/translations/de.d.ts +8 -0
  79. package/dist/translations/de.js +5 -0
  80. package/dist/translations/de.umd.js +11 -0
  81. package/dist/translations/el.d.ts +8 -0
  82. package/dist/translations/el.js +5 -0
  83. package/dist/translations/el.umd.js +11 -0
  84. package/dist/translations/en-au.d.ts +8 -0
  85. package/dist/translations/en-au.js +5 -0
  86. package/dist/translations/en-au.umd.js +11 -0
  87. package/dist/translations/en.d.ts +8 -0
  88. package/dist/translations/en.js +5 -0
  89. package/dist/translations/en.umd.js +11 -0
  90. package/dist/translations/es.d.ts +8 -0
  91. package/dist/translations/es.js +5 -0
  92. package/dist/translations/es.umd.js +11 -0
  93. package/dist/translations/et.d.ts +8 -0
  94. package/dist/translations/et.js +5 -0
  95. package/dist/translations/et.umd.js +11 -0
  96. package/dist/translations/fi.d.ts +8 -0
  97. package/dist/translations/fi.js +5 -0
  98. package/dist/translations/fi.umd.js +11 -0
  99. package/dist/translations/fr.d.ts +8 -0
  100. package/dist/translations/fr.js +5 -0
  101. package/dist/translations/fr.umd.js +11 -0
  102. package/dist/translations/gl.d.ts +8 -0
  103. package/dist/translations/gl.js +5 -0
  104. package/dist/translations/gl.umd.js +11 -0
  105. package/dist/translations/he.d.ts +8 -0
  106. package/dist/translations/he.js +5 -0
  107. package/dist/translations/he.umd.js +11 -0
  108. package/dist/translations/hi.d.ts +8 -0
  109. package/dist/translations/hi.js +5 -0
  110. package/dist/translations/hi.umd.js +11 -0
  111. package/dist/translations/hr.d.ts +8 -0
  112. package/dist/translations/hr.js +5 -0
  113. package/dist/translations/hr.umd.js +11 -0
  114. package/dist/translations/hu.d.ts +8 -0
  115. package/dist/translations/hu.js +5 -0
  116. package/dist/translations/hu.umd.js +11 -0
  117. package/dist/translations/id.d.ts +8 -0
  118. package/dist/translations/id.js +5 -0
  119. package/dist/translations/id.umd.js +11 -0
  120. package/dist/translations/it.d.ts +8 -0
  121. package/dist/translations/it.js +5 -0
  122. package/dist/translations/it.umd.js +11 -0
  123. package/dist/translations/ja.d.ts +8 -0
  124. package/dist/translations/ja.js +5 -0
  125. package/dist/translations/ja.umd.js +11 -0
  126. package/dist/translations/ko.d.ts +8 -0
  127. package/dist/translations/ko.js +5 -0
  128. package/dist/translations/ko.umd.js +11 -0
  129. package/dist/translations/lt.d.ts +8 -0
  130. package/dist/translations/lt.js +5 -0
  131. package/dist/translations/lt.umd.js +11 -0
  132. package/dist/translations/lv.d.ts +8 -0
  133. package/dist/translations/lv.js +5 -0
  134. package/dist/translations/lv.umd.js +11 -0
  135. package/dist/translations/ms.d.ts +8 -0
  136. package/dist/translations/ms.js +5 -0
  137. package/dist/translations/ms.umd.js +11 -0
  138. package/dist/translations/nl.d.ts +8 -0
  139. package/dist/translations/nl.js +5 -0
  140. package/dist/translations/nl.umd.js +11 -0
  141. package/dist/translations/no.d.ts +8 -0
  142. package/dist/translations/no.js +5 -0
  143. package/dist/translations/no.umd.js +11 -0
  144. package/dist/translations/pl.d.ts +8 -0
  145. package/dist/translations/pl.js +5 -0
  146. package/dist/translations/pl.umd.js +11 -0
  147. package/dist/translations/pt-br.d.ts +8 -0
  148. package/dist/translations/pt-br.js +5 -0
  149. package/dist/translations/pt-br.umd.js +11 -0
  150. package/dist/translations/pt.d.ts +8 -0
  151. package/dist/translations/pt.js +5 -0
  152. package/dist/translations/pt.umd.js +11 -0
  153. package/dist/translations/ro.d.ts +8 -0
  154. package/dist/translations/ro.js +5 -0
  155. package/dist/translations/ro.umd.js +11 -0
  156. package/dist/translations/ru.d.ts +8 -0
  157. package/dist/translations/ru.js +5 -0
  158. package/dist/translations/ru.umd.js +11 -0
  159. package/dist/translations/sk.d.ts +8 -0
  160. package/dist/translations/sk.js +5 -0
  161. package/dist/translations/sk.umd.js +11 -0
  162. package/dist/translations/sr-latn.d.ts +8 -0
  163. package/dist/translations/sr-latn.js +5 -0
  164. package/dist/translations/sr-latn.umd.js +11 -0
  165. package/dist/translations/sr.d.ts +8 -0
  166. package/dist/translations/sr.js +5 -0
  167. package/dist/translations/sr.umd.js +11 -0
  168. package/dist/translations/sv.d.ts +8 -0
  169. package/dist/translations/sv.js +5 -0
  170. package/dist/translations/sv.umd.js +11 -0
  171. package/dist/translations/th.d.ts +8 -0
  172. package/dist/translations/th.js +5 -0
  173. package/dist/translations/th.umd.js +11 -0
  174. package/dist/translations/tr.d.ts +8 -0
  175. package/dist/translations/tr.js +5 -0
  176. package/dist/translations/tr.umd.js +11 -0
  177. package/dist/translations/ug.d.ts +8 -0
  178. package/dist/translations/ug.js +5 -0
  179. package/dist/translations/ug.umd.js +11 -0
  180. package/dist/translations/uk.d.ts +8 -0
  181. package/dist/translations/uk.js +5 -0
  182. package/dist/translations/uk.umd.js +11 -0
  183. package/dist/translations/ur.d.ts +8 -0
  184. package/dist/translations/ur.js +5 -0
  185. package/dist/translations/ur.umd.js +11 -0
  186. package/dist/translations/vi.d.ts +8 -0
  187. package/dist/translations/vi.js +5 -0
  188. package/dist/translations/vi.umd.js +11 -0
  189. package/dist/translations/zh-cn.d.ts +8 -0
  190. package/dist/translations/zh-cn.js +5 -0
  191. package/dist/translations/zh-cn.umd.js +11 -0
  192. package/dist/translations/zh.d.ts +8 -0
  193. package/dist/translations/zh.js +5 -0
  194. package/dist/translations/zh.umd.js +11 -0
  195. package/dist/utils/formathtml.d.ts +23 -0
  196. package/lang/contexts.json +4 -0
  197. package/lang/translations/ar.po +26 -0
  198. package/lang/translations/bg.po +26 -0
  199. package/lang/translations/bn.po +26 -0
  200. package/lang/translations/ca.po +26 -0
  201. package/lang/translations/cs.po +26 -0
  202. package/lang/translations/da.po +26 -0
  203. package/lang/translations/de.po +26 -0
  204. package/lang/translations/el.po +26 -0
  205. package/lang/translations/en-au.po +26 -0
  206. package/lang/translations/en.po +26 -0
  207. package/lang/translations/es.po +26 -0
  208. package/lang/translations/et.po +26 -0
  209. package/lang/translations/fi.po +26 -0
  210. package/lang/translations/fr.po +26 -0
  211. package/lang/translations/gl.po +26 -0
  212. package/lang/translations/he.po +26 -0
  213. package/lang/translations/hi.po +26 -0
  214. package/lang/translations/hr.po +26 -0
  215. package/lang/translations/hu.po +26 -0
  216. package/lang/translations/id.po +26 -0
  217. package/lang/translations/it.po +26 -0
  218. package/lang/translations/ja.po +26 -0
  219. package/lang/translations/ko.po +26 -0
  220. package/lang/translations/lt.po +26 -0
  221. package/lang/translations/lv.po +26 -0
  222. package/lang/translations/ms.po +26 -0
  223. package/lang/translations/nl.po +26 -0
  224. package/lang/translations/no.po +26 -0
  225. package/lang/translations/pl.po +26 -0
  226. package/lang/translations/pt-br.po +26 -0
  227. package/lang/translations/pt.po +26 -0
  228. package/lang/translations/ro.po +26 -0
  229. package/lang/translations/ru.po +26 -0
  230. package/lang/translations/sk.po +26 -0
  231. package/lang/translations/sr-latn.po +26 -0
  232. package/lang/translations/sr.po +26 -0
  233. package/lang/translations/sv.po +26 -0
  234. package/lang/translations/th.po +26 -0
  235. package/lang/translations/tr.po +26 -0
  236. package/lang/translations/ug.po +26 -0
  237. package/lang/translations/uk.po +26 -0
  238. package/lang/translations/ur.po +26 -0
  239. package/lang/translations/vi.po +26 -0
  240. package/lang/translations/zh-cn.po +26 -0
  241. package/lang/translations/zh.po +26 -0
  242. package/package.json +42 -0
  243. package/src/augmentation.d.ts +18 -0
  244. package/src/augmentation.js +5 -0
  245. package/src/index.d.ts +10 -0
  246. package/src/index.js +9 -0
  247. package/src/sourceediting.d.ts +108 -0
  248. package/src/sourceediting.js +359 -0
  249. package/src/sourceeditingconfig.d.ts +34 -0
  250. package/src/sourceeditingconfig.js +5 -0
  251. package/src/utils/formathtml.d.ts +19 -0
  252. package/src/utils/formathtml.js +153 -0
  253. package/theme/icons/source-editing.svg +1 -0
  254. package/theme/sourceediting.css +52 -0
@@ -0,0 +1,153 @@
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
+ * @module source-editing/utils/formathtml
7
+ */
8
+ /**
9
+ * A simple (and naive) HTML code formatter that returns a formatted HTML markup that can be easily
10
+ * parsed by human eyes. It beautifies the HTML code by adding new lines between elements that behave like block elements
11
+ * (https://developer.mozilla.org/en-US/docs/Web/HTML/Block-level_elements
12
+ * and a few more like `tr`, `td`, and similar ones) and inserting indents for nested content.
13
+ *
14
+ * WARNING: This function works only on a text that does not contain any indentations or new lines.
15
+ * Calling this function on the already formatted text will damage the formatting.
16
+ *
17
+ * @param input An HTML string to format.
18
+ */
19
+ export function formatHtml(input) {
20
+ // A list of block-like elements around which the new lines should be inserted, and within which
21
+ // the indentation of their children should be increased.
22
+ // The list is partially based on https://developer.mozilla.org/en-US/docs/Web/HTML/Block-level_elements that contains
23
+ // a full list of HTML block-level elements.
24
+ // A void element is an element that cannot have any child - https://html.spec.whatwg.org/multipage/syntax.html#void-elements.
25
+ // Note that <pre> element is not listed on this list to avoid breaking whitespace formatting.
26
+ // Note that <br> element is not listed and handled separately so no additional white spaces are injected.
27
+ const elementsToFormat = [
28
+ { name: 'address', isVoid: false },
29
+ { name: 'article', isVoid: false },
30
+ { name: 'aside', isVoid: false },
31
+ { name: 'blockquote', isVoid: false },
32
+ { name: 'details', isVoid: false },
33
+ { name: 'dialog', isVoid: false },
34
+ { name: 'dd', isVoid: false },
35
+ { name: 'div', isVoid: false },
36
+ { name: 'dl', isVoid: false },
37
+ { name: 'dt', isVoid: false },
38
+ { name: 'fieldset', isVoid: false },
39
+ { name: 'figcaption', isVoid: false },
40
+ { name: 'figure', isVoid: false },
41
+ { name: 'footer', isVoid: false },
42
+ { name: 'form', isVoid: false },
43
+ { name: 'h1', isVoid: false },
44
+ { name: 'h2', isVoid: false },
45
+ { name: 'h3', isVoid: false },
46
+ { name: 'h4', isVoid: false },
47
+ { name: 'h5', isVoid: false },
48
+ { name: 'h6', isVoid: false },
49
+ { name: 'header', isVoid: false },
50
+ { name: 'hgroup', isVoid: false },
51
+ { name: 'hr', isVoid: true },
52
+ { name: 'li', isVoid: false },
53
+ { name: 'main', isVoid: false },
54
+ { name: 'nav', isVoid: false },
55
+ { name: 'ol', isVoid: false },
56
+ { name: 'p', isVoid: false },
57
+ { name: 'section', isVoid: false },
58
+ { name: 'table', isVoid: false },
59
+ { name: 'tbody', isVoid: false },
60
+ { name: 'td', isVoid: false },
61
+ { name: 'th', isVoid: false },
62
+ { name: 'thead', isVoid: false },
63
+ { name: 'tr', isVoid: false },
64
+ { name: 'ul', isVoid: false }
65
+ ];
66
+ const elementNamesToFormat = elementsToFormat.map(element => element.name).join('|');
67
+ // It is not the fastest way to format the HTML markup but the performance should be good enough.
68
+ const lines = input
69
+ // Add new line before and after `<tag>` and `</tag>`.
70
+ // It may separate individual elements with two new lines, but this will be fixed below.
71
+ .replace(new RegExp(`</?(${elementNamesToFormat})( .*?)?>`, 'g'), '\n$&\n')
72
+ // Keep `<br>`s at the end of line to avoid adding additional whitespaces before `<br>`.
73
+ .replace(/<br[^>]*>/g, '$&\n')
74
+ // Divide input string into lines, which start with either an opening tag, a closing tag, or just a text.
75
+ .split('\n');
76
+ let indentCount = 0;
77
+ let isPreformattedLine = false;
78
+ return lines
79
+ .filter(line => line.length)
80
+ .map(line => {
81
+ isPreformattedLine = isPreformattedBlockLine(line, isPreformattedLine);
82
+ if (isNonVoidOpeningTag(line, elementsToFormat)) {
83
+ return indentLine(line, indentCount++);
84
+ }
85
+ if (isClosingTag(line, elementsToFormat)) {
86
+ return indentLine(line, --indentCount);
87
+ }
88
+ if (isPreformattedLine === 'middle' || isPreformattedLine === 'last') {
89
+ return line;
90
+ }
91
+ return indentLine(line, indentCount);
92
+ })
93
+ .join('\n');
94
+ }
95
+ /**
96
+ * Checks, if an argument is an opening tag of a non-void element to be formatted.
97
+ *
98
+ * @param line String to check.
99
+ * @param elementsToFormat Elements to be formatted.
100
+ */
101
+ function isNonVoidOpeningTag(line, elementsToFormat) {
102
+ return elementsToFormat.some(element => {
103
+ if (element.isVoid) {
104
+ return false;
105
+ }
106
+ if (!new RegExp(`<${element.name}( .*?)?>`).test(line)) {
107
+ return false;
108
+ }
109
+ return true;
110
+ });
111
+ }
112
+ /**
113
+ * Checks, if an argument is a closing tag.
114
+ *
115
+ * @param line String to check.
116
+ * @param elementsToFormat Elements to be formatted.
117
+ */
118
+ function isClosingTag(line, elementsToFormat) {
119
+ return elementsToFormat.some(element => {
120
+ return new RegExp(`</${element.name}>`).test(line);
121
+ });
122
+ }
123
+ /**
124
+ * Indents a line by a specified number of characters.
125
+ *
126
+ * @param line Line to indent.
127
+ * @param indentCount Number of characters to use for indentation.
128
+ * @param indentChar Indentation character(s). 4 spaces by default.
129
+ */
130
+ function indentLine(line, indentCount, indentChar = ' ') {
131
+ // More about Math.max() here in https://github.com/ckeditor/ckeditor5/issues/10698.
132
+ return `${indentChar.repeat(Math.max(0, indentCount))}${line}`;
133
+ }
134
+ /**
135
+ * Checks whether a line belongs to a preformatted (`<pre>`) block.
136
+ *
137
+ * @param line Line to check.
138
+ * @param isPreviousLinePreFormatted Information on whether the previous line was preformatted (and how).
139
+ */
140
+ function isPreformattedBlockLine(line, isPreviousLinePreFormatted) {
141
+ if (new RegExp('<pre( .*?)?>').test(line)) {
142
+ return 'first';
143
+ }
144
+ else if (new RegExp('</pre>').test(line)) {
145
+ return 'last';
146
+ }
147
+ else if (isPreviousLinePreFormatted === 'first' || isPreviousLinePreFormatted === 'middle') {
148
+ return 'middle';
149
+ }
150
+ else {
151
+ return false;
152
+ }
153
+ }
@@ -0,0 +1 @@
1
+ <svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="m12.5 0 5 4.5v15.003h-16V0h11zM3 1.5v3.25l-1.497 1-.003 8 1.5 1v3.254L7.685 18l-.001 1.504H17.5V8.002L16 9.428l-.004-4.22-4.222-3.692L3 1.5z"/><path d="M4.06 6.64a.75.75 0 0 1 .958 1.15l-.085.07L2.29 9.75l2.646 1.89c.302.216.4.62.232.951l-.058.095a.75.75 0 0 1-.951.232l-.095-.058-3.5-2.5V9.14l3.496-2.5zm4.194 6.22a.75.75 0 0 1-.958-1.149l.085-.07 2.643-1.89-2.646-1.89a.75.75 0 0 1-.232-.952l.058-.095a.75.75 0 0 1 .95-.232l.096.058 3.5 2.5v1.22l-3.496 2.5zm7.644-.836 2.122 2.122-5.825 5.809-2.125-.005.003-2.116zm2.539-1.847 1.414 1.414a.5.5 0 0 1 0 .707l-1.06 1.06-2.122-2.12 1.061-1.061a.5.5 0 0 1 .707 0z"/></svg>
@@ -0,0 +1,52 @@
1
+ /*
2
+ * 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 "@ckeditor/ckeditor5-theme-lark/theme/mixins/_rounded.css";
7
+ @import "@ckeditor/ckeditor5-theme-lark/theme/mixins/_focus.css";
8
+ @import "@ckeditor/ckeditor5-theme-lark/theme/mixins/_shadow.css";
9
+
10
+ .ck-source-editing-area {
11
+ position: relative;
12
+ overflow: hidden;
13
+ }
14
+
15
+ .ck-source-editing-area::after,
16
+ .ck-source-editing-area textarea {
17
+ padding: var(--ck-spacing-large);
18
+ margin: 0;
19
+ border: 1px solid transparent;
20
+ line-height: var(--ck-line-height-base);
21
+ font-size: var(--ck-font-size-normal);
22
+ font-family: monospace;
23
+ white-space: pre-wrap;
24
+ }
25
+
26
+ .ck-source-editing-area::after {
27
+ content: attr(data-value) " ";
28
+ visibility: hidden;
29
+ display: block;
30
+ }
31
+
32
+ .ck-source-editing-area textarea {
33
+ position: absolute;
34
+ width: 100%;
35
+ height: 100%;
36
+ resize: none;
37
+ outline: none;
38
+ overflow: hidden;
39
+ box-sizing: border-box;
40
+
41
+ border-color: var(--ck-color-base-border);
42
+
43
+ @mixin ck-rounded-corners {
44
+ border-top-left-radius: 0;
45
+ border-top-right-radius: 0;
46
+ }
47
+
48
+ &:not([readonly]):focus {
49
+ @mixin ck-focus-ring;
50
+ @mixin ck-box-shadow var(--ck-inner-shadow);
51
+ }
52
+ }