@ckeditor/ckeditor5-block-quote 41.3.1 → 41.4.0
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/index-content.css +17 -0
- package/dist/index-editor.css +4 -0
- package/dist/index.css +29 -0
- package/dist/index.css.map +1 -0
- package/dist/index.js +329 -0
- package/dist/index.js.map +1 -0
- package/dist/translations/af.d.ts +8 -0
- package/dist/translations/af.js +5 -0
- package/dist/translations/af.umd.js +11 -0
- package/dist/translations/ar.d.ts +8 -0
- package/dist/translations/ar.js +5 -0
- package/dist/translations/ar.umd.js +11 -0
- package/dist/translations/az.d.ts +8 -0
- package/dist/translations/az.js +5 -0
- package/dist/translations/az.umd.js +11 -0
- package/dist/translations/bg.d.ts +8 -0
- package/dist/translations/bg.js +5 -0
- package/dist/translations/bg.umd.js +11 -0
- package/dist/translations/bn.d.ts +8 -0
- package/dist/translations/bn.js +5 -0
- package/dist/translations/bn.umd.js +11 -0
- package/dist/translations/bs.d.ts +8 -0
- package/dist/translations/bs.js +5 -0
- package/dist/translations/bs.umd.js +11 -0
- package/dist/translations/ca.d.ts +8 -0
- package/dist/translations/ca.js +5 -0
- package/dist/translations/ca.umd.js +11 -0
- package/dist/translations/cs.d.ts +8 -0
- package/dist/translations/cs.js +5 -0
- package/dist/translations/cs.umd.js +11 -0
- package/dist/translations/da.d.ts +8 -0
- package/dist/translations/da.js +5 -0
- package/dist/translations/da.umd.js +11 -0
- package/dist/translations/de-ch.d.ts +8 -0
- package/dist/translations/de-ch.js +5 -0
- package/dist/translations/de-ch.umd.js +11 -0
- package/dist/translations/de.d.ts +8 -0
- package/dist/translations/de.js +5 -0
- package/dist/translations/de.umd.js +11 -0
- package/dist/translations/el.d.ts +8 -0
- package/dist/translations/el.js +5 -0
- package/dist/translations/el.umd.js +11 -0
- package/dist/translations/en-au.d.ts +8 -0
- package/dist/translations/en-au.js +5 -0
- package/dist/translations/en-au.umd.js +11 -0
- package/dist/translations/en-gb.d.ts +8 -0
- package/dist/translations/en-gb.js +5 -0
- package/dist/translations/en-gb.umd.js +11 -0
- package/dist/translations/en.d.ts +8 -0
- package/dist/translations/en.js +5 -0
- package/dist/translations/en.umd.js +11 -0
- package/dist/translations/es-co.d.ts +8 -0
- package/dist/translations/es-co.js +5 -0
- package/dist/translations/es-co.umd.js +11 -0
- package/dist/translations/es.d.ts +8 -0
- package/dist/translations/es.js +5 -0
- package/dist/translations/es.umd.js +11 -0
- package/dist/translations/et.d.ts +8 -0
- package/dist/translations/et.js +5 -0
- package/dist/translations/et.umd.js +11 -0
- package/dist/translations/eu.d.ts +8 -0
- package/dist/translations/eu.js +5 -0
- package/dist/translations/eu.umd.js +11 -0
- package/dist/translations/fa.d.ts +8 -0
- package/dist/translations/fa.js +5 -0
- package/dist/translations/fa.umd.js +11 -0
- package/dist/translations/fi.d.ts +8 -0
- package/dist/translations/fi.js +5 -0
- package/dist/translations/fi.umd.js +11 -0
- package/dist/translations/fr.d.ts +8 -0
- package/dist/translations/fr.js +5 -0
- package/dist/translations/fr.umd.js +11 -0
- package/dist/translations/gl.d.ts +8 -0
- package/dist/translations/gl.js +5 -0
- package/dist/translations/gl.umd.js +11 -0
- package/dist/translations/gu.d.ts +8 -0
- package/dist/translations/gu.js +5 -0
- package/dist/translations/gu.umd.js +11 -0
- package/dist/translations/he.d.ts +8 -0
- package/dist/translations/he.js +5 -0
- package/dist/translations/he.umd.js +11 -0
- package/dist/translations/hi.d.ts +8 -0
- package/dist/translations/hi.js +5 -0
- package/dist/translations/hi.umd.js +11 -0
- package/dist/translations/hr.d.ts +8 -0
- package/dist/translations/hr.js +5 -0
- package/dist/translations/hr.umd.js +11 -0
- package/dist/translations/hu.d.ts +8 -0
- package/dist/translations/hu.js +5 -0
- package/dist/translations/hu.umd.js +11 -0
- package/dist/translations/id.d.ts +8 -0
- package/dist/translations/id.js +5 -0
- package/dist/translations/id.umd.js +11 -0
- package/dist/translations/it.d.ts +8 -0
- package/dist/translations/it.js +5 -0
- package/dist/translations/it.umd.js +11 -0
- package/dist/translations/ja.d.ts +8 -0
- package/dist/translations/ja.js +5 -0
- package/dist/translations/ja.umd.js +11 -0
- package/dist/translations/km.d.ts +8 -0
- package/dist/translations/km.js +5 -0
- package/dist/translations/km.umd.js +11 -0
- package/dist/translations/kn.d.ts +8 -0
- package/dist/translations/kn.js +5 -0
- package/dist/translations/kn.umd.js +11 -0
- package/dist/translations/ko.d.ts +8 -0
- package/dist/translations/ko.js +5 -0
- package/dist/translations/ko.umd.js +11 -0
- package/dist/translations/ku.d.ts +8 -0
- package/dist/translations/ku.js +5 -0
- package/dist/translations/ku.umd.js +11 -0
- package/dist/translations/lt.d.ts +8 -0
- package/dist/translations/lt.js +5 -0
- package/dist/translations/lt.umd.js +11 -0
- package/dist/translations/lv.d.ts +8 -0
- package/dist/translations/lv.js +5 -0
- package/dist/translations/lv.umd.js +11 -0
- package/dist/translations/ms.d.ts +8 -0
- package/dist/translations/ms.js +5 -0
- package/dist/translations/ms.umd.js +11 -0
- package/dist/translations/nb.d.ts +8 -0
- package/dist/translations/nb.js +5 -0
- package/dist/translations/nb.umd.js +11 -0
- package/dist/translations/ne.d.ts +8 -0
- package/dist/translations/ne.js +5 -0
- package/dist/translations/ne.umd.js +11 -0
- package/dist/translations/nl.d.ts +8 -0
- package/dist/translations/nl.js +5 -0
- package/dist/translations/nl.umd.js +11 -0
- package/dist/translations/no.d.ts +8 -0
- package/dist/translations/no.js +5 -0
- package/dist/translations/no.umd.js +11 -0
- package/dist/translations/pl.d.ts +8 -0
- package/dist/translations/pl.js +5 -0
- package/dist/translations/pl.umd.js +11 -0
- package/dist/translations/pt-br.d.ts +8 -0
- package/dist/translations/pt-br.js +5 -0
- package/dist/translations/pt-br.umd.js +11 -0
- package/dist/translations/pt.d.ts +8 -0
- package/dist/translations/pt.js +5 -0
- package/dist/translations/pt.umd.js +11 -0
- package/dist/translations/ro.d.ts +8 -0
- package/dist/translations/ro.js +5 -0
- package/dist/translations/ro.umd.js +11 -0
- package/dist/translations/ru.d.ts +8 -0
- package/dist/translations/ru.js +5 -0
- package/dist/translations/ru.umd.js +11 -0
- package/dist/translations/sk.d.ts +8 -0
- package/dist/translations/sk.js +5 -0
- package/dist/translations/sk.umd.js +11 -0
- package/dist/translations/sl.d.ts +8 -0
- package/dist/translations/sl.js +5 -0
- package/dist/translations/sl.umd.js +11 -0
- package/dist/translations/sq.d.ts +8 -0
- package/dist/translations/sq.js +5 -0
- package/dist/translations/sq.umd.js +11 -0
- package/dist/translations/sr-latn.d.ts +8 -0
- package/dist/translations/sr-latn.js +5 -0
- package/dist/translations/sr-latn.umd.js +11 -0
- package/dist/translations/sr.d.ts +8 -0
- package/dist/translations/sr.js +5 -0
- package/dist/translations/sr.umd.js +11 -0
- package/dist/translations/sv.d.ts +8 -0
- package/dist/translations/sv.js +5 -0
- package/dist/translations/sv.umd.js +11 -0
- package/dist/translations/th.d.ts +8 -0
- package/dist/translations/th.js +5 -0
- package/dist/translations/th.umd.js +11 -0
- package/dist/translations/tk.d.ts +8 -0
- package/dist/translations/tk.js +5 -0
- package/dist/translations/tk.umd.js +11 -0
- package/dist/translations/tr.d.ts +8 -0
- package/dist/translations/tr.js +5 -0
- package/dist/translations/tr.umd.js +11 -0
- package/dist/translations/ug.d.ts +8 -0
- package/dist/translations/ug.js +5 -0
- package/dist/translations/ug.umd.js +11 -0
- package/dist/translations/uk.d.ts +8 -0
- package/dist/translations/uk.js +5 -0
- package/dist/translations/uk.umd.js +11 -0
- package/dist/translations/ur.d.ts +8 -0
- package/dist/translations/ur.js +5 -0
- package/dist/translations/ur.umd.js +11 -0
- package/dist/translations/uz.d.ts +8 -0
- package/dist/translations/uz.js +5 -0
- package/dist/translations/uz.umd.js +11 -0
- package/dist/translations/vi.d.ts +8 -0
- package/dist/translations/vi.js +5 -0
- package/dist/translations/vi.umd.js +11 -0
- package/dist/translations/zh-cn.d.ts +8 -0
- package/dist/translations/zh-cn.js +5 -0
- package/dist/translations/zh-cn.umd.js +11 -0
- package/dist/translations/zh.d.ts +8 -0
- package/dist/translations/zh.js +5 -0
- package/dist/translations/zh.umd.js +11 -0
- package/dist/types/augmentation.d.ts +19 -0
- package/dist/types/blockquote.d.ts +34 -0
- package/dist/types/blockquotecommand.d.ts +65 -0
- package/dist/types/blockquoteediting.d.ts +35 -0
- package/dist/types/blockquoteui.d.ts +34 -0
- package/dist/types/index.d.ts +16 -0
- package/package.json +3 -2
@@ -0,0 +1,17 @@
|
|
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
|
+
.ck-content blockquote {
|
6
|
+
overflow: hidden;
|
7
|
+
padding-right: 1.5em;
|
8
|
+
padding-left: 1.5em;
|
9
|
+
margin-left: 0;
|
10
|
+
margin-right: 0;
|
11
|
+
font-style: italic;
|
12
|
+
border-left: solid 5px hsl(0, 0%, 80%);
|
13
|
+
}
|
14
|
+
.ck-content[dir="rtl"] blockquote {
|
15
|
+
border-left: 0;
|
16
|
+
border-right: solid 5px hsl(0, 0%, 80%);
|
17
|
+
}
|
package/dist/index.css
ADDED
@@ -0,0 +1,29 @@
|
|
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
|
+
* Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
|
7
|
+
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
|
8
|
+
*/
|
9
|
+
|
10
|
+
.ck-content blockquote {
|
11
|
+
/* See #12 */
|
12
|
+
overflow: hidden;
|
13
|
+
|
14
|
+
/* https://github.com/ckeditor/ckeditor5-block-quote/issues/15 */
|
15
|
+
padding-right: 1.5em;
|
16
|
+
padding-left: 1.5em;
|
17
|
+
|
18
|
+
margin-left: 0;
|
19
|
+
margin-right: 0;
|
20
|
+
font-style: italic;
|
21
|
+
border-left: solid 5px hsl(0, 0%, 80%);
|
22
|
+
}
|
23
|
+
|
24
|
+
.ck-content[dir="rtl"] blockquote {
|
25
|
+
border-left: 0;
|
26
|
+
border-right: solid 5px hsl(0, 0%, 80%);
|
27
|
+
}
|
28
|
+
|
29
|
+
/*# sourceMappingURL=index.css.map */
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../theme/blockquote.css","index.css"],"names":[],"mappings":";;;;AAAA,CAAA,CAAA;ACCA,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC;AAC5E,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO;AACnF,CAAC,CDAC,CAAA;ACCF;ADCA,CAAA,EAAA,CAAA,OAAA,CAAA,UAAA,CAAA,CAAA;ACCA,CDAC,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,EAAA,CAAA,CAAY,CAAA;ACCb,CDAC,QAAA,CAAA,CAAA,MAAgB,CAAA;ACCjB;AACA,CDAC,CAAA,CAAA,CAAA,KAAA,CAAA,CAAA,CAAA,MAAA,CAAA,GAAA,CAAA,QAAA,CAAA,SAAA,CAAA,KAAA,CAAA,KAAA,CAAA,MAAA,CAAA,EAAA,CAAA,CAAgE,CAAA;ACCjE,CDAC,OAAA,CAAA,KAAA,CAAA,CAAA,CAAA,CAAA,GAAoB,CAAA;ACCrB,CDAC,OAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,GAAmB,CAAA;ACCpB;AACA,CDAC,MAAA,CAAA,IAAA,CAAA,CAAA,CAAc,CAAA;ACCf,CDAC,MAAA,CAAA,KAAA,CAAA,CAAA,CAAe,CAAA;ACChB,CDAC,IAAA,CAAA,KAAA,CAAA,CAAA,MAAkB,CAAA;ACCnB,CDAC,MAAA,CAAA,IAAA,CAAA,CAAA,KAAA,CAAA,GAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAsC,CAAA;AACvC,CAAA;ACCA;ADCA,CAAA,EAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,UAAA,CAAA,CAAA;ACCA,CDAC,MAAA,CAAA,IAAA,CAAA,CAAA,CAAc,CAAA;ACCf,CDAC,MAAA,CAAA,KAAA,CAAA,CAAA,KAAA,CAAA,GAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAuC,CAAA;AACxC,CAAA;ACCA;AACA,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC","file":"index.css.map","sourcesContent":["/*\n * 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.ck-content blockquote {\n\t/* See #12 */\n\toverflow: hidden;\n\n\t/* https://github.com/ckeditor/ckeditor5-block-quote/issues/15 */\n\tpadding-right: 1.5em;\n\tpadding-left: 1.5em;\n\n\tmargin-left: 0;\n\tmargin-right: 0;\n\tfont-style: italic;\n\tborder-left: solid 5px hsl(0, 0%, 80%);\n}\n\n.ck-content[dir=\"rtl\"] blockquote {\n\tborder-left: 0;\n\tborder-right: solid 5px hsl(0, 0%, 80%);\n}\n","/*\n * 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.ck-content blockquote {\n\t/* See #12 */\n\toverflow: hidden;\n\n\t/* https://github.com/ckeditor/ckeditor5-block-quote/issues/15 */\n\tpadding-right: 1.5em;\n\tpadding-left: 1.5em;\n\n\tmargin-left: 0;\n\tmargin-right: 0;\n\tfont-style: italic;\n\tborder-left: solid 5px hsl(0, 0%, 80%);\n}\n\n.ck-content[dir=\"rtl\"] blockquote {\n\tborder-left: 0;\n\tborder-right: solid 5px hsl(0, 0%, 80%);\n}\n\n/*# sourceMappingURL=index.css.map */"]}
|
package/dist/index.js
ADDED
@@ -0,0 +1,329 @@
|
|
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 { Command, Plugin, icons } from '@ckeditor/ckeditor5-core/dist/index.js';
|
6
|
+
import { Enter } from '@ckeditor/ckeditor5-enter/dist/index.js';
|
7
|
+
import { Delete } from '@ckeditor/ckeditor5-typing/dist/index.js';
|
8
|
+
import { first } from '@ckeditor/ckeditor5-utils/dist/index.js';
|
9
|
+
import { ButtonView, MenuBarMenuListItemButtonView } from '@ckeditor/ckeditor5-ui/dist/index.js';
|
10
|
+
|
11
|
+
class BlockQuoteCommand extends Command {
|
12
|
+
/**
|
13
|
+
* @inheritDoc
|
14
|
+
*/ refresh() {
|
15
|
+
this.value = this._getValue();
|
16
|
+
this.isEnabled = this._checkEnabled();
|
17
|
+
}
|
18
|
+
/**
|
19
|
+
* Executes the command. When the command {@link #value is on}, all top-most block quotes within
|
20
|
+
* the selection will be removed. If it is off, all selected blocks will be wrapped with
|
21
|
+
* a block quote.
|
22
|
+
*
|
23
|
+
* @fires execute
|
24
|
+
* @param options Command options.
|
25
|
+
* @param options.forceValue If set, it will force the command behavior. If `true`, the command will apply a block quote,
|
26
|
+
* otherwise the command will remove the block quote. If not set, the command will act basing on its current value.
|
27
|
+
*/ execute(options = {}) {
|
28
|
+
const model = this.editor.model;
|
29
|
+
const schema = model.schema;
|
30
|
+
const selection = model.document.selection;
|
31
|
+
const blocks = Array.from(selection.getSelectedBlocks());
|
32
|
+
const value = options.forceValue === undefined ? !this.value : options.forceValue;
|
33
|
+
model.change((writer)=>{
|
34
|
+
if (!value) {
|
35
|
+
this._removeQuote(writer, blocks.filter(findQuote));
|
36
|
+
} else {
|
37
|
+
const blocksToQuote = blocks.filter((block)=>{
|
38
|
+
// Already quoted blocks needs to be considered while quoting too
|
39
|
+
// in order to reuse their <bQ> elements.
|
40
|
+
return findQuote(block) || checkCanBeQuoted(schema, block);
|
41
|
+
});
|
42
|
+
this._applyQuote(writer, blocksToQuote);
|
43
|
+
}
|
44
|
+
});
|
45
|
+
}
|
46
|
+
/**
|
47
|
+
* Checks the command's {@link #value}.
|
48
|
+
*/ _getValue() {
|
49
|
+
const selection = this.editor.model.document.selection;
|
50
|
+
const firstBlock = first(selection.getSelectedBlocks());
|
51
|
+
// In the current implementation, the block quote must be an immediate parent of a block element.
|
52
|
+
return !!(firstBlock && findQuote(firstBlock));
|
53
|
+
}
|
54
|
+
/**
|
55
|
+
* Checks whether the command can be enabled in the current context.
|
56
|
+
*
|
57
|
+
* @returns Whether the command should be enabled.
|
58
|
+
*/ _checkEnabled() {
|
59
|
+
if (this.value) {
|
60
|
+
return true;
|
61
|
+
}
|
62
|
+
const selection = this.editor.model.document.selection;
|
63
|
+
const schema = this.editor.model.schema;
|
64
|
+
const firstBlock = first(selection.getSelectedBlocks());
|
65
|
+
if (!firstBlock) {
|
66
|
+
return false;
|
67
|
+
}
|
68
|
+
return checkCanBeQuoted(schema, firstBlock);
|
69
|
+
}
|
70
|
+
/**
|
71
|
+
* Removes the quote from given blocks.
|
72
|
+
*
|
73
|
+
* If blocks which are supposed to be "unquoted" are in the middle of a quote,
|
74
|
+
* start it or end it, then the quote will be split (if needed) and the blocks
|
75
|
+
* will be moved out of it, so other quoted blocks remained quoted.
|
76
|
+
*/ _removeQuote(writer, blocks) {
|
77
|
+
// Unquote all groups of block. Iterate in the reverse order to not break following ranges.
|
78
|
+
getRangesOfBlockGroups(writer, blocks).reverse().forEach((groupRange)=>{
|
79
|
+
if (groupRange.start.isAtStart && groupRange.end.isAtEnd) {
|
80
|
+
writer.unwrap(groupRange.start.parent);
|
81
|
+
return;
|
82
|
+
}
|
83
|
+
// The group of blocks are at the beginning of an <bQ> so let's move them left (out of the <bQ>).
|
84
|
+
if (groupRange.start.isAtStart) {
|
85
|
+
const positionBefore = writer.createPositionBefore(groupRange.start.parent);
|
86
|
+
writer.move(groupRange, positionBefore);
|
87
|
+
return;
|
88
|
+
}
|
89
|
+
// The blocks are in the middle of an <bQ> so we need to split the <bQ> after the last block
|
90
|
+
// so we move the items there.
|
91
|
+
if (!groupRange.end.isAtEnd) {
|
92
|
+
writer.split(groupRange.end);
|
93
|
+
}
|
94
|
+
// Now we are sure that groupRange.end.isAtEnd is true, so let's move the blocks right.
|
95
|
+
const positionAfter = writer.createPositionAfter(groupRange.end.parent);
|
96
|
+
writer.move(groupRange, positionAfter);
|
97
|
+
});
|
98
|
+
}
|
99
|
+
/**
|
100
|
+
* Applies the quote to given blocks.
|
101
|
+
*/ _applyQuote(writer, blocks) {
|
102
|
+
const quotesToMerge = [];
|
103
|
+
// Quote all groups of block. Iterate in the reverse order to not break following ranges.
|
104
|
+
getRangesOfBlockGroups(writer, blocks).reverse().forEach((groupRange)=>{
|
105
|
+
let quote = findQuote(groupRange.start);
|
106
|
+
if (!quote) {
|
107
|
+
quote = writer.createElement('blockQuote');
|
108
|
+
writer.wrap(groupRange, quote);
|
109
|
+
}
|
110
|
+
quotesToMerge.push(quote);
|
111
|
+
});
|
112
|
+
// Merge subsequent <bQ> elements. Reverse the order again because this time we want to go through
|
113
|
+
// the <bQ> elements in the source order (due to how merge works – it moves the right element's content
|
114
|
+
// to the first element and removes the right one. Since we may need to merge a couple of subsequent `<bQ>` elements
|
115
|
+
// we want to keep the reference to the first (furthest left) one.
|
116
|
+
quotesToMerge.reverse().reduce((currentQuote, nextQuote)=>{
|
117
|
+
if (currentQuote.nextSibling == nextQuote) {
|
118
|
+
writer.merge(writer.createPositionAfter(currentQuote));
|
119
|
+
return currentQuote;
|
120
|
+
}
|
121
|
+
return nextQuote;
|
122
|
+
});
|
123
|
+
}
|
124
|
+
}
|
125
|
+
function findQuote(elementOrPosition) {
|
126
|
+
return elementOrPosition.parent.name == 'blockQuote' ? elementOrPosition.parent : null;
|
127
|
+
}
|
128
|
+
/**
|
129
|
+
* Returns a minimal array of ranges containing groups of subsequent blocks.
|
130
|
+
*
|
131
|
+
* content: abcdefgh
|
132
|
+
* blocks: [ a, b, d, f, g, h ]
|
133
|
+
* output ranges: [ab]c[d]e[fgh]
|
134
|
+
*/ function getRangesOfBlockGroups(writer, blocks) {
|
135
|
+
let startPosition;
|
136
|
+
let i = 0;
|
137
|
+
const ranges = [];
|
138
|
+
while(i < blocks.length){
|
139
|
+
const block = blocks[i];
|
140
|
+
const nextBlock = blocks[i + 1];
|
141
|
+
if (!startPosition) {
|
142
|
+
startPosition = writer.createPositionBefore(block);
|
143
|
+
}
|
144
|
+
if (!nextBlock || block.nextSibling != nextBlock) {
|
145
|
+
ranges.push(writer.createRange(startPosition, writer.createPositionAfter(block)));
|
146
|
+
startPosition = null;
|
147
|
+
}
|
148
|
+
i++;
|
149
|
+
}
|
150
|
+
return ranges;
|
151
|
+
}
|
152
|
+
/**
|
153
|
+
* Checks whether <bQ> can wrap the block.
|
154
|
+
*/ function checkCanBeQuoted(schema, block) {
|
155
|
+
// TMP will be replaced with schema.checkWrap().
|
156
|
+
const isBQAllowed = schema.checkChild(block.parent, 'blockQuote');
|
157
|
+
const isBlockAllowedInBQ = schema.checkChild([
|
158
|
+
'$root',
|
159
|
+
'blockQuote'
|
160
|
+
], block);
|
161
|
+
return isBQAllowed && isBlockAllowedInBQ;
|
162
|
+
}
|
163
|
+
|
164
|
+
class BlockQuoteEditing extends Plugin {
|
165
|
+
/**
|
166
|
+
* @inheritDoc
|
167
|
+
*/ static get pluginName() {
|
168
|
+
return 'BlockQuoteEditing';
|
169
|
+
}
|
170
|
+
/**
|
171
|
+
* @inheritDoc
|
172
|
+
*/ static get requires() {
|
173
|
+
return [
|
174
|
+
Enter,
|
175
|
+
Delete
|
176
|
+
];
|
177
|
+
}
|
178
|
+
/**
|
179
|
+
* @inheritDoc
|
180
|
+
*/ init() {
|
181
|
+
const editor = this.editor;
|
182
|
+
const schema = editor.model.schema;
|
183
|
+
editor.commands.add('blockQuote', new BlockQuoteCommand(editor));
|
184
|
+
schema.register('blockQuote', {
|
185
|
+
inheritAllFrom: '$container'
|
186
|
+
});
|
187
|
+
editor.conversion.elementToElement({
|
188
|
+
model: 'blockQuote',
|
189
|
+
view: 'blockquote'
|
190
|
+
});
|
191
|
+
// Postfixer which cleans incorrect model states connected with block quotes.
|
192
|
+
editor.model.document.registerPostFixer((writer)=>{
|
193
|
+
const changes = editor.model.document.differ.getChanges();
|
194
|
+
for (const entry of changes){
|
195
|
+
if (entry.type == 'insert') {
|
196
|
+
const element = entry.position.nodeAfter;
|
197
|
+
if (!element) {
|
198
|
+
continue;
|
199
|
+
}
|
200
|
+
if (element.is('element', 'blockQuote') && element.isEmpty) {
|
201
|
+
// Added an empty blockQuote - remove it.
|
202
|
+
writer.remove(element);
|
203
|
+
return true;
|
204
|
+
} else if (element.is('element', 'blockQuote') && !schema.checkChild(entry.position, element)) {
|
205
|
+
// Added a blockQuote in incorrect place. Unwrap it so the content inside is not lost.
|
206
|
+
writer.unwrap(element);
|
207
|
+
return true;
|
208
|
+
} else if (element.is('element')) {
|
209
|
+
// Just added an element. Check that all children meet the scheme rules.
|
210
|
+
const range = writer.createRangeIn(element);
|
211
|
+
for (const child of range.getItems()){
|
212
|
+
if (child.is('element', 'blockQuote') && !schema.checkChild(writer.createPositionBefore(child), child)) {
|
213
|
+
writer.unwrap(child);
|
214
|
+
return true;
|
215
|
+
}
|
216
|
+
}
|
217
|
+
}
|
218
|
+
} else if (entry.type == 'remove') {
|
219
|
+
const parent = entry.position.parent;
|
220
|
+
if (parent.is('element', 'blockQuote') && parent.isEmpty) {
|
221
|
+
// Something got removed and now blockQuote is empty. Remove the blockQuote as well.
|
222
|
+
writer.remove(parent);
|
223
|
+
return true;
|
224
|
+
}
|
225
|
+
}
|
226
|
+
}
|
227
|
+
return false;
|
228
|
+
});
|
229
|
+
const viewDocument = this.editor.editing.view.document;
|
230
|
+
const selection = editor.model.document.selection;
|
231
|
+
const blockQuoteCommand = editor.commands.get('blockQuote');
|
232
|
+
// Overwrite default Enter key behavior.
|
233
|
+
// If Enter key is pressed with selection collapsed in empty block inside a quote, break the quote.
|
234
|
+
this.listenTo(viewDocument, 'enter', (evt, data)=>{
|
235
|
+
if (!selection.isCollapsed || !blockQuoteCommand.value) {
|
236
|
+
return;
|
237
|
+
}
|
238
|
+
const positionParent = selection.getLastPosition().parent;
|
239
|
+
if (positionParent.isEmpty) {
|
240
|
+
editor.execute('blockQuote');
|
241
|
+
editor.editing.view.scrollToTheSelection();
|
242
|
+
data.preventDefault();
|
243
|
+
evt.stop();
|
244
|
+
}
|
245
|
+
}, {
|
246
|
+
context: 'blockquote'
|
247
|
+
});
|
248
|
+
// Overwrite default Backspace key behavior.
|
249
|
+
// If Backspace key is pressed with selection collapsed in first empty block inside a quote, break the quote.
|
250
|
+
this.listenTo(viewDocument, 'delete', (evt, data)=>{
|
251
|
+
if (data.direction != 'backward' || !selection.isCollapsed || !blockQuoteCommand.value) {
|
252
|
+
return;
|
253
|
+
}
|
254
|
+
const positionParent = selection.getLastPosition().parent;
|
255
|
+
if (positionParent.isEmpty && !positionParent.previousSibling) {
|
256
|
+
editor.execute('blockQuote');
|
257
|
+
editor.editing.view.scrollToTheSelection();
|
258
|
+
data.preventDefault();
|
259
|
+
evt.stop();
|
260
|
+
}
|
261
|
+
}, {
|
262
|
+
context: 'blockquote'
|
263
|
+
});
|
264
|
+
}
|
265
|
+
}
|
266
|
+
|
267
|
+
class BlockQuoteUI extends Plugin {
|
268
|
+
/**
|
269
|
+
* @inheritDoc
|
270
|
+
*/ static get pluginName() {
|
271
|
+
return 'BlockQuoteUI';
|
272
|
+
}
|
273
|
+
/**
|
274
|
+
* @inheritDoc
|
275
|
+
*/ init() {
|
276
|
+
const editor = this.editor;
|
277
|
+
const command = editor.commands.get('blockQuote');
|
278
|
+
editor.ui.componentFactory.add('blockQuote', ()=>{
|
279
|
+
const buttonView = this._createButton(ButtonView);
|
280
|
+
buttonView.set({
|
281
|
+
tooltip: true
|
282
|
+
});
|
283
|
+
// Bind button model to command.
|
284
|
+
buttonView.bind('isOn').to(command, 'value');
|
285
|
+
return buttonView;
|
286
|
+
});
|
287
|
+
editor.ui.componentFactory.add('menuBar:blockQuote', ()=>this._createButton(MenuBarMenuListItemButtonView));
|
288
|
+
}
|
289
|
+
/**
|
290
|
+
* Creates a button for block quote command to use either in toolbar or in menu bar.
|
291
|
+
*/ _createButton(ButtonClass) {
|
292
|
+
const editor = this.editor;
|
293
|
+
const locale = editor.locale;
|
294
|
+
const command = editor.commands.get('blockQuote');
|
295
|
+
const view = new ButtonClass(editor.locale);
|
296
|
+
const t = locale.t;
|
297
|
+
view.set({
|
298
|
+
label: t('Block quote'),
|
299
|
+
icon: icons.quote,
|
300
|
+
isToggleable: true
|
301
|
+
});
|
302
|
+
view.bind('isEnabled').to(command, 'isEnabled');
|
303
|
+
// Execute the command.
|
304
|
+
this.listenTo(view, 'execute', ()=>{
|
305
|
+
editor.execute('blockQuote');
|
306
|
+
editor.editing.view.focus();
|
307
|
+
});
|
308
|
+
return view;
|
309
|
+
}
|
310
|
+
}
|
311
|
+
|
312
|
+
class BlockQuote extends Plugin {
|
313
|
+
/**
|
314
|
+
* @inheritDoc
|
315
|
+
*/ static get requires() {
|
316
|
+
return [
|
317
|
+
BlockQuoteEditing,
|
318
|
+
BlockQuoteUI
|
319
|
+
];
|
320
|
+
}
|
321
|
+
/**
|
322
|
+
* @inheritDoc
|
323
|
+
*/ static get pluginName() {
|
324
|
+
return 'BlockQuote';
|
325
|
+
}
|
326
|
+
}
|
327
|
+
|
328
|
+
export { BlockQuote, BlockQuoteEditing, BlockQuoteUI };
|
329
|
+
//# sourceMappingURL=index.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["index.js","../src/blockquotecommand.ts","../src/blockquoteediting.ts","../src/blockquoteui.ts","../src/blockquote.ts"],"names":["BlockQuoteCommand","Command","refresh","value","_getValue","isEnabled","_checkEnabled","execute","options","model","editor","schema","selection","document","blocks","Array","from","getSelectedBlocks","forceValue","undefined","change","writer","_removeQuote","filter","findQuote","blocksToQuote","block","checkCanBeQuoted","_applyQuote","firstBlock","first","getRangesOfBlockGroups","reverse","forEach","groupRange","start","isAtStart","end","isAtEnd","unwrap","parent","positionBefore","createPositionBefore","move","split","positionAfter","createPositionAfter","quotesToMerge","quote","createElement","wrap","push","reduce","currentQuote","nextQuote","nextSibling","merge","elementOrPosition","name","startPosition","i","ranges","length","nextBlock","createRange","isBQAllowed","checkChild","isBlockAllowedInBQ","BlockQuoteEditing","Plugin","pluginName","requires","Enter","Delete","init","commands","add","register","inheritAllFrom","conversion","elementToElement","view","registerPostFixer","changes","differ","getChanges","entry","type","element","position","nodeAfter","is","isEmpty","remove","range","createRangeIn","child","getItems","viewDocument","editing","blockQuoteCommand","get","listenTo","evt","data","isCollapsed","positionParent","getLastPosition","scrollToTheSelection","preventDefault","stop","context","direction","previousSibling","BlockQuoteUI","command","ui","componentFactory","buttonView","_createButton","ButtonView","set","tooltip","bind","to","MenuBarMenuListItemButtonView","ButtonClass","locale","t","label","icon","icons","isToggleable","focus","BlockQuote"],"mappings":"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","file":"index.js.map","sourcesContent":["import { Command, Plugin, icons } from '@ckeditor/ckeditor5-core/dist/index.js';\nimport { Enter } from '@ckeditor/ckeditor5-enter/dist/index.js';\nimport { Delete } from '@ckeditor/ckeditor5-typing/dist/index.js';\nimport { first } from '@ckeditor/ckeditor5-utils/dist/index.js';\nimport { ButtonView, MenuBarMenuListItemButtonView } from '@ckeditor/ckeditor5-ui/dist/index.js';\n\nclass BlockQuoteCommand extends Command {\n /**\n * @inheritDoc\n */ refresh() {\n this.value = this._getValue();\n this.isEnabled = this._checkEnabled();\n }\n /**\n * Executes the command. When the command {@link #value is on}, all top-most block quotes within\n * the selection will be removed. If it is off, all selected blocks will be wrapped with\n * a block quote.\n *\n * @fires execute\n * @param options Command options.\n * @param options.forceValue If set, it will force the command behavior. If `true`, the command will apply a block quote,\n * otherwise the command will remove the block quote. If not set, the command will act basing on its current value.\n */ execute(options = {}) {\n const model = this.editor.model;\n const schema = model.schema;\n const selection = model.document.selection;\n const blocks = Array.from(selection.getSelectedBlocks());\n const value = options.forceValue === undefined ? !this.value : options.forceValue;\n model.change((writer)=>{\n if (!value) {\n this._removeQuote(writer, blocks.filter(findQuote));\n } else {\n const blocksToQuote = blocks.filter((block)=>{\n // Already quoted blocks needs to be considered while quoting too\n // in order to reuse their <bQ> elements.\n return findQuote(block) || checkCanBeQuoted(schema, block);\n });\n this._applyQuote(writer, blocksToQuote);\n }\n });\n }\n /**\n * Checks the command's {@link #value}.\n */ _getValue() {\n const selection = this.editor.model.document.selection;\n const firstBlock = first(selection.getSelectedBlocks());\n // In the current implementation, the block quote must be an immediate parent of a block element.\n return !!(firstBlock && findQuote(firstBlock));\n }\n /**\n * Checks whether the command can be enabled in the current context.\n *\n * @returns Whether the command should be enabled.\n */ _checkEnabled() {\n if (this.value) {\n return true;\n }\n const selection = this.editor.model.document.selection;\n const schema = this.editor.model.schema;\n const firstBlock = first(selection.getSelectedBlocks());\n if (!firstBlock) {\n return false;\n }\n return checkCanBeQuoted(schema, firstBlock);\n }\n /**\n * Removes the quote from given blocks.\n *\n * If blocks which are supposed to be \"unquoted\" are in the middle of a quote,\n * start it or end it, then the quote will be split (if needed) and the blocks\n * will be moved out of it, so other quoted blocks remained quoted.\n */ _removeQuote(writer, blocks) {\n // Unquote all groups of block. Iterate in the reverse order to not break following ranges.\n getRangesOfBlockGroups(writer, blocks).reverse().forEach((groupRange)=>{\n if (groupRange.start.isAtStart && groupRange.end.isAtEnd) {\n writer.unwrap(groupRange.start.parent);\n return;\n }\n // The group of blocks are at the beginning of an <bQ> so let's move them left (out of the <bQ>).\n if (groupRange.start.isAtStart) {\n const positionBefore = writer.createPositionBefore(groupRange.start.parent);\n writer.move(groupRange, positionBefore);\n return;\n }\n // The blocks are in the middle of an <bQ> so we need to split the <bQ> after the last block\n // so we move the items there.\n if (!groupRange.end.isAtEnd) {\n writer.split(groupRange.end);\n }\n // Now we are sure that groupRange.end.isAtEnd is true, so let's move the blocks right.\n const positionAfter = writer.createPositionAfter(groupRange.end.parent);\n writer.move(groupRange, positionAfter);\n });\n }\n /**\n * Applies the quote to given blocks.\n */ _applyQuote(writer, blocks) {\n const quotesToMerge = [];\n // Quote all groups of block. Iterate in the reverse order to not break following ranges.\n getRangesOfBlockGroups(writer, blocks).reverse().forEach((groupRange)=>{\n let quote = findQuote(groupRange.start);\n if (!quote) {\n quote = writer.createElement('blockQuote');\n writer.wrap(groupRange, quote);\n }\n quotesToMerge.push(quote);\n });\n // Merge subsequent <bQ> elements. Reverse the order again because this time we want to go through\n // the <bQ> elements in the source order (due to how merge works – it moves the right element's content\n // to the first element and removes the right one. Since we may need to merge a couple of subsequent `<bQ>` elements\n // we want to keep the reference to the first (furthest left) one.\n quotesToMerge.reverse().reduce((currentQuote, nextQuote)=>{\n if (currentQuote.nextSibling == nextQuote) {\n writer.merge(writer.createPositionAfter(currentQuote));\n return currentQuote;\n }\n return nextQuote;\n });\n }\n}\nfunction findQuote(elementOrPosition) {\n return elementOrPosition.parent.name == 'blockQuote' ? elementOrPosition.parent : null;\n}\n/**\n * Returns a minimal array of ranges containing groups of subsequent blocks.\n *\n * content: abcdefgh\n * blocks: [ a, b, d, f, g, h ]\n * output ranges: [ab]c[d]e[fgh]\n */ function getRangesOfBlockGroups(writer, blocks) {\n let startPosition;\n let i = 0;\n const ranges = [];\n while(i < blocks.length){\n const block = blocks[i];\n const nextBlock = blocks[i + 1];\n if (!startPosition) {\n startPosition = writer.createPositionBefore(block);\n }\n if (!nextBlock || block.nextSibling != nextBlock) {\n ranges.push(writer.createRange(startPosition, writer.createPositionAfter(block)));\n startPosition = null;\n }\n i++;\n }\n return ranges;\n}\n/**\n * Checks whether <bQ> can wrap the block.\n */ function checkCanBeQuoted(schema, block) {\n // TMP will be replaced with schema.checkWrap().\n const isBQAllowed = schema.checkChild(block.parent, 'blockQuote');\n const isBlockAllowedInBQ = schema.checkChild([\n '$root',\n 'blockQuote'\n ], block);\n return isBQAllowed && isBlockAllowedInBQ;\n}\n\nclass BlockQuoteEditing extends Plugin {\n /**\n * @inheritDoc\n */ static get pluginName() {\n return 'BlockQuoteEditing';\n }\n /**\n * @inheritDoc\n */ static get requires() {\n return [\n Enter,\n Delete\n ];\n }\n /**\n * @inheritDoc\n */ init() {\n const editor = this.editor;\n const schema = editor.model.schema;\n editor.commands.add('blockQuote', new BlockQuoteCommand(editor));\n schema.register('blockQuote', {\n inheritAllFrom: '$container'\n });\n editor.conversion.elementToElement({\n model: 'blockQuote',\n view: 'blockquote'\n });\n // Postfixer which cleans incorrect model states connected with block quotes.\n editor.model.document.registerPostFixer((writer)=>{\n const changes = editor.model.document.differ.getChanges();\n for (const entry of changes){\n if (entry.type == 'insert') {\n const element = entry.position.nodeAfter;\n if (!element) {\n continue;\n }\n if (element.is('element', 'blockQuote') && element.isEmpty) {\n // Added an empty blockQuote - remove it.\n writer.remove(element);\n return true;\n } else if (element.is('element', 'blockQuote') && !schema.checkChild(entry.position, element)) {\n // Added a blockQuote in incorrect place. Unwrap it so the content inside is not lost.\n writer.unwrap(element);\n return true;\n } else if (element.is('element')) {\n // Just added an element. Check that all children meet the scheme rules.\n const range = writer.createRangeIn(element);\n for (const child of range.getItems()){\n if (child.is('element', 'blockQuote') && !schema.checkChild(writer.createPositionBefore(child), child)) {\n writer.unwrap(child);\n return true;\n }\n }\n }\n } else if (entry.type == 'remove') {\n const parent = entry.position.parent;\n if (parent.is('element', 'blockQuote') && parent.isEmpty) {\n // Something got removed and now blockQuote is empty. Remove the blockQuote as well.\n writer.remove(parent);\n return true;\n }\n }\n }\n return false;\n });\n const viewDocument = this.editor.editing.view.document;\n const selection = editor.model.document.selection;\n const blockQuoteCommand = editor.commands.get('blockQuote');\n // Overwrite default Enter key behavior.\n // If Enter key is pressed with selection collapsed in empty block inside a quote, break the quote.\n this.listenTo(viewDocument, 'enter', (evt, data)=>{\n if (!selection.isCollapsed || !blockQuoteCommand.value) {\n return;\n }\n const positionParent = selection.getLastPosition().parent;\n if (positionParent.isEmpty) {\n editor.execute('blockQuote');\n editor.editing.view.scrollToTheSelection();\n data.preventDefault();\n evt.stop();\n }\n }, {\n context: 'blockquote'\n });\n // Overwrite default Backspace key behavior.\n // If Backspace key is pressed with selection collapsed in first empty block inside a quote, break the quote.\n this.listenTo(viewDocument, 'delete', (evt, data)=>{\n if (data.direction != 'backward' || !selection.isCollapsed || !blockQuoteCommand.value) {\n return;\n }\n const positionParent = selection.getLastPosition().parent;\n if (positionParent.isEmpty && !positionParent.previousSibling) {\n editor.execute('blockQuote');\n editor.editing.view.scrollToTheSelection();\n data.preventDefault();\n evt.stop();\n }\n }, {\n context: 'blockquote'\n });\n }\n}\n\nclass BlockQuoteUI extends Plugin {\n /**\n * @inheritDoc\n */ static get pluginName() {\n return 'BlockQuoteUI';\n }\n /**\n * @inheritDoc\n */ init() {\n const editor = this.editor;\n const command = editor.commands.get('blockQuote');\n editor.ui.componentFactory.add('blockQuote', ()=>{\n const buttonView = this._createButton(ButtonView);\n buttonView.set({\n tooltip: true\n });\n // Bind button model to command.\n buttonView.bind('isOn').to(command, 'value');\n return buttonView;\n });\n editor.ui.componentFactory.add('menuBar:blockQuote', ()=>this._createButton(MenuBarMenuListItemButtonView));\n }\n /**\n * Creates a button for block quote command to use either in toolbar or in menu bar.\n */ _createButton(ButtonClass) {\n const editor = this.editor;\n const locale = editor.locale;\n const command = editor.commands.get('blockQuote');\n const view = new ButtonClass(editor.locale);\n const t = locale.t;\n view.set({\n label: t('Block quote'),\n icon: icons.quote,\n isToggleable: true\n });\n view.bind('isEnabled').to(command, 'isEnabled');\n // Execute the command.\n this.listenTo(view, 'execute', ()=>{\n editor.execute('blockQuote');\n editor.editing.view.focus();\n });\n return view;\n }\n}\n\nclass BlockQuote extends Plugin {\n /**\n * @inheritDoc\n */ static get requires() {\n return [\n BlockQuoteEditing,\n BlockQuoteUI\n ];\n }\n /**\n * @inheritDoc\n */ static get pluginName() {\n return 'BlockQuote';\n }\n}\n\nexport { BlockQuote, BlockQuoteEditing, BlockQuoteUI };\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 block-quote/blockquotecommand\n */\n\nimport { Command } from 'ckeditor5/src/core.js';\nimport { first } from 'ckeditor5/src/utils.js';\nimport type { DocumentFragment, Element, Position, Range, Schema, Writer } from 'ckeditor5/src/engine.js';\n\n/**\n * The block quote command plugin.\n *\n * @extends module:core/command~Command\n */\nexport default class BlockQuoteCommand extends Command {\n\t/**\n\t * Whether the selection starts in a block quote.\n\t *\n\t * @observable\n\t * @readonly\n\t */\n\tdeclare public value: boolean;\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic override refresh(): void {\n\t\tthis.value = this._getValue();\n\t\tthis.isEnabled = this._checkEnabled();\n\t}\n\n\t/**\n\t * Executes the command. When the command {@link #value is on}, all top-most block quotes within\n\t * the selection will be removed. If it is off, all selected blocks will be wrapped with\n\t * a block quote.\n\t *\n\t * @fires execute\n\t * @param options Command options.\n\t * @param options.forceValue If set, it will force the command behavior. If `true`, the command will apply a block quote,\n\t * otherwise the command will remove the block quote. If not set, the command will act basing on its current value.\n\t */\n\tpublic override execute( options: { forceValue?: boolean } = {} ): void {\n\t\tconst model = this.editor.model;\n\t\tconst schema = model.schema;\n\t\tconst selection = model.document.selection;\n\n\t\tconst blocks = Array.from( selection.getSelectedBlocks() );\n\n\t\tconst value = ( options.forceValue === undefined ) ? !this.value : options.forceValue;\n\n\t\tmodel.change( writer => {\n\t\t\tif ( !value ) {\n\t\t\t\tthis._removeQuote( writer, blocks.filter( findQuote ) );\n\t\t\t} else {\n\t\t\t\tconst blocksToQuote = blocks.filter( block => {\n\t\t\t\t\t// Already quoted blocks needs to be considered while quoting too\n\t\t\t\t\t// in order to reuse their <bQ> elements.\n\t\t\t\t\treturn findQuote( block ) || checkCanBeQuoted( schema, block );\n\t\t\t\t} );\n\n\t\t\t\tthis._applyQuote( writer, blocksToQuote );\n\t\t\t}\n\t\t} );\n\t}\n\n\t/**\n\t * Checks the command's {@link #value}.\n\t */\n\tprivate _getValue(): boolean {\n\t\tconst selection = this.editor.model.document.selection;\n\n\t\tconst firstBlock = first( selection.getSelectedBlocks() );\n\n\t\t// In the current implementation, the block quote must be an immediate parent of a block element.\n\t\treturn !!( firstBlock && findQuote( firstBlock ) );\n\t}\n\n\t/**\n\t * Checks whether the command can be enabled in the current context.\n\t *\n\t * @returns Whether the command should be enabled.\n\t */\n\tprivate _checkEnabled(): boolean {\n\t\tif ( this.value ) {\n\t\t\treturn true;\n\t\t}\n\n\t\tconst selection = this.editor.model.document.selection;\n\t\tconst schema = this.editor.model.schema;\n\n\t\tconst firstBlock = first( selection.getSelectedBlocks() );\n\n\t\tif ( !firstBlock ) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn checkCanBeQuoted( schema, firstBlock );\n\t}\n\n\t/**\n\t * Removes the quote from given blocks.\n\t *\n\t * If blocks which are supposed to be \"unquoted\" are in the middle of a quote,\n\t * start it or end it, then the quote will be split (if needed) and the blocks\n\t * will be moved out of it, so other quoted blocks remained quoted.\n\t */\n\tprivate _removeQuote( writer: Writer, blocks: Array<Element> ): void {\n\t\t// Unquote all groups of block. Iterate in the reverse order to not break following ranges.\n\t\tgetRangesOfBlockGroups( writer, blocks ).reverse().forEach( groupRange => {\n\t\t\tif ( groupRange.start.isAtStart && groupRange.end.isAtEnd ) {\n\t\t\t\twriter.unwrap( groupRange.start.parent as Element );\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// The group of blocks are at the beginning of an <bQ> so let's move them left (out of the <bQ>).\n\t\t\tif ( groupRange.start.isAtStart ) {\n\t\t\t\tconst positionBefore = writer.createPositionBefore( groupRange.start.parent as Element );\n\n\t\t\t\twriter.move( groupRange, positionBefore );\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// The blocks are in the middle of an <bQ> so we need to split the <bQ> after the last block\n\t\t\t// so we move the items there.\n\t\t\tif ( !groupRange.end.isAtEnd ) {\n\t\t\t\twriter.split( groupRange.end );\n\t\t\t}\n\n\t\t\t// Now we are sure that groupRange.end.isAtEnd is true, so let's move the blocks right.\n\n\t\t\tconst positionAfter = writer.createPositionAfter( groupRange.end.parent as Element );\n\n\t\t\twriter.move( groupRange, positionAfter );\n\t\t} );\n\t}\n\n\t/**\n\t * Applies the quote to given blocks.\n\t */\n\tprivate _applyQuote( writer: Writer, blocks: Array<Element> ): void {\n\t\tconst quotesToMerge: Array<Element | DocumentFragment> = [];\n\n\t\t// Quote all groups of block. Iterate in the reverse order to not break following ranges.\n\t\tgetRangesOfBlockGroups( writer, blocks ).reverse().forEach( groupRange => {\n\t\t\tlet quote = findQuote( groupRange.start );\n\n\t\t\tif ( !quote ) {\n\t\t\t\tquote = writer.createElement( 'blockQuote' );\n\n\t\t\t\twriter.wrap( groupRange, quote );\n\t\t\t}\n\n\t\t\tquotesToMerge.push( quote );\n\t\t} );\n\n\t\t// Merge subsequent <bQ> elements. Reverse the order again because this time we want to go through\n\t\t// the <bQ> elements in the source order (due to how merge works – it moves the right element's content\n\t\t// to the first element and removes the right one. Since we may need to merge a couple of subsequent `<bQ>` elements\n\t\t// we want to keep the reference to the first (furthest left) one.\n\t\tquotesToMerge.reverse().reduce( ( currentQuote, nextQuote ) => {\n\t\t\tif ( currentQuote.nextSibling == nextQuote ) {\n\t\t\t\twriter.merge( writer.createPositionAfter( currentQuote ) );\n\n\t\t\t\treturn currentQuote;\n\t\t\t}\n\n\t\t\treturn nextQuote;\n\t\t} );\n\t}\n}\n\nfunction findQuote( elementOrPosition: Element | Position ): Element | DocumentFragment | null {\n\treturn elementOrPosition.parent!.name == 'blockQuote' ? elementOrPosition.parent : null;\n}\n\n/**\n * Returns a minimal array of ranges containing groups of subsequent blocks.\n *\n * content: abcdefgh\n * blocks: [ a, b, d, f, g, h ]\n * output ranges: [ab]c[d]e[fgh]\n */\nfunction getRangesOfBlockGroups( writer: Writer, blocks: Array<Element> ): Array<Range> {\n\tlet startPosition;\n\tlet i = 0;\n\tconst ranges = [];\n\n\twhile ( i < blocks.length ) {\n\t\tconst block = blocks[ i ];\n\t\tconst nextBlock = blocks[ i + 1 ];\n\n\t\tif ( !startPosition ) {\n\t\t\tstartPosition = writer.createPositionBefore( block );\n\t\t}\n\n\t\tif ( !nextBlock || block.nextSibling != nextBlock ) {\n\t\t\tranges.push( writer.createRange( startPosition, writer.createPositionAfter( block ) ) );\n\t\t\tstartPosition = null;\n\t\t}\n\n\t\ti++;\n\t}\n\n\treturn ranges;\n}\n\n/**\n * Checks whether <bQ> can wrap the block.\n */\nfunction checkCanBeQuoted( schema: Schema, block: Element ): boolean {\n\t// TMP will be replaced with schema.checkWrap().\n\tconst isBQAllowed = schema.checkChild( block.parent as Element, 'blockQuote' );\n\tconst isBlockAllowedInBQ = schema.checkChild( [ '$root', 'blockQuote' ], block );\n\n\treturn isBQAllowed && isBlockAllowedInBQ;\n}\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 block-quote/blockquoteediting\n */\n\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport { Enter, type ViewDocumentEnterEvent } from 'ckeditor5/src/enter.js';\nimport { Delete, type ViewDocumentDeleteEvent } from 'ckeditor5/src/typing.js';\n\nimport BlockQuoteCommand from './blockquotecommand.js';\n\n/**\n * The block quote editing.\n *\n * Introduces the `'blockQuote'` command and the `'blockQuote'` model element.\n *\n * @extends module:core/plugin~Plugin\n */\nexport default class BlockQuoteEditing extends Plugin {\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static get pluginName() {\n\t\treturn 'BlockQuoteEditing' as const;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static get requires() {\n\t\treturn [ Enter, Delete ] as const;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic init(): void {\n\t\tconst editor = this.editor;\n\t\tconst schema = editor.model.schema;\n\n\t\teditor.commands.add( 'blockQuote', new BlockQuoteCommand( editor ) );\n\n\t\tschema.register( 'blockQuote', {\n\t\t\tinheritAllFrom: '$container'\n\t\t} );\n\n\t\teditor.conversion.elementToElement( { model: 'blockQuote', view: 'blockquote' } );\n\n\t\t// Postfixer which cleans incorrect model states connected with block quotes.\n\t\teditor.model.document.registerPostFixer( writer => {\n\t\t\tconst changes = editor.model.document.differ.getChanges();\n\n\t\t\tfor ( const entry of changes ) {\n\t\t\t\tif ( entry.type == 'insert' ) {\n\t\t\t\t\tconst element = entry.position.nodeAfter;\n\n\t\t\t\t\tif ( !element ) {\n\t\t\t\t\t\t// We are inside a text node.\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( element.is( 'element', 'blockQuote' ) && element.isEmpty ) {\n\t\t\t\t\t\t// Added an empty blockQuote - remove it.\n\t\t\t\t\t\twriter.remove( element );\n\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t} else if ( element.is( 'element', 'blockQuote' ) && !schema.checkChild( entry.position, element ) ) {\n\t\t\t\t\t\t// Added a blockQuote in incorrect place. Unwrap it so the content inside is not lost.\n\t\t\t\t\t\twriter.unwrap( element );\n\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t} else if ( element.is( 'element' ) ) {\n\t\t\t\t\t\t// Just added an element. Check that all children meet the scheme rules.\n\t\t\t\t\t\tconst range = writer.createRangeIn( element );\n\n\t\t\t\t\t\tfor ( const child of range.getItems() ) {\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tchild.is( 'element', 'blockQuote' ) &&\n\t\t\t\t\t\t\t\t!schema.checkChild( writer.createPositionBefore( child ), child )\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\twriter.unwrap( child );\n\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else if ( entry.type == 'remove' ) {\n\t\t\t\t\tconst parent = entry.position.parent;\n\n\t\t\t\t\tif ( parent.is( 'element', 'blockQuote' ) && parent.isEmpty ) {\n\t\t\t\t\t\t// Something got removed and now blockQuote is empty. Remove the blockQuote as well.\n\t\t\t\t\t\twriter.remove( parent );\n\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn false;\n\t\t} );\n\n\t\tconst viewDocument = this.editor.editing.view.document;\n\t\tconst selection = editor.model.document.selection;\n\t\tconst blockQuoteCommand: BlockQuoteCommand = editor.commands.get( 'blockQuote' )!;\n\n\t\t// Overwrite default Enter key behavior.\n\t\t// If Enter key is pressed with selection collapsed in empty block inside a quote, break the quote.\n\t\tthis.listenTo<ViewDocumentEnterEvent>( viewDocument, 'enter', ( evt, data ) => {\n\t\t\tif ( !selection.isCollapsed || !blockQuoteCommand.value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst positionParent = selection.getLastPosition()!.parent;\n\n\t\t\tif ( positionParent.isEmpty ) {\n\t\t\t\teditor.execute( 'blockQuote' );\n\t\t\t\teditor.editing.view.scrollToTheSelection();\n\n\t\t\t\tdata.preventDefault();\n\t\t\t\tevt.stop();\n\t\t\t}\n\t\t}, { context: 'blockquote' } );\n\n\t\t// Overwrite default Backspace key behavior.\n\t\t// If Backspace key is pressed with selection collapsed in first empty block inside a quote, break the quote.\n\t\tthis.listenTo<ViewDocumentDeleteEvent>( viewDocument, 'delete', ( evt, data ) => {\n\t\t\tif ( data.direction != 'backward' || !selection.isCollapsed || !blockQuoteCommand!.value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst positionParent = selection.getLastPosition()!.parent;\n\n\t\t\tif ( positionParent.isEmpty && !positionParent.previousSibling ) {\n\t\t\t\teditor.execute( 'blockQuote' );\n\t\t\t\teditor.editing.view.scrollToTheSelection();\n\n\t\t\t\tdata.preventDefault();\n\t\t\t\tevt.stop();\n\t\t\t}\n\t\t}, { context: 'blockquote' } );\n\t}\n}\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 block-quote/blockquoteui\n */\n\nimport { Plugin, icons } from 'ckeditor5/src/core.js';\nimport { ButtonView, MenuBarMenuListItemButtonView } from 'ckeditor5/src/ui.js';\nimport type BlockQuoteCommand from './blockquotecommand.js';\n\nimport '../theme/blockquote.css';\n\n/**\n * The block quote UI plugin.\n *\n * It introduces the `'blockQuote'` button.\n *\n * @extends module:core/plugin~Plugin\n */\nexport default class BlockQuoteUI extends Plugin {\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static get pluginName() {\n\t\treturn 'BlockQuoteUI' as const;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic init(): void {\n\t\tconst editor = this.editor;\n\t\tconst command: BlockQuoteCommand = editor.commands.get( 'blockQuote' )!;\n\n\t\teditor.ui.componentFactory.add( 'blockQuote', () => {\n\t\t\tconst buttonView = this._createButton( ButtonView );\n\n\t\t\tbuttonView.set( {\n\t\t\t\ttooltip: true\n\t\t\t} );\n\n\t\t\t// Bind button model to command.\n\t\t\tbuttonView.bind( 'isOn' ).to( command, 'value' );\n\n\t\t\treturn buttonView;\n\t\t} );\n\n\t\teditor.ui.componentFactory.add( 'menuBar:blockQuote', () => this._createButton( MenuBarMenuListItemButtonView ) );\n\t}\n\n\t/**\n\t * Creates a button for block quote command to use either in toolbar or in menu bar.\n\t */\n\tprivate _createButton<T extends typeof ButtonView | typeof MenuBarMenuListItemButtonView>( ButtonClass: T ): InstanceType<T> {\n\t\tconst editor = this.editor;\n\t\tconst locale = editor.locale;\n\t\tconst command = editor.commands.get( 'blockQuote' )!;\n\t\tconst view = new ButtonClass( editor.locale ) as InstanceType<T>;\n\t\tconst t = locale.t;\n\n\t\tview.set( {\n\t\t\tlabel: t( 'Block quote' ),\n\t\t\ticon: icons.quote,\n\t\t\tisToggleable: true\n\t\t} );\n\n\t\tview.bind( 'isEnabled' ).to( command, 'isEnabled' );\n\n\t\t// Execute the command.\n\t\tthis.listenTo( view, 'execute', () => {\n\t\t\teditor.execute( 'blockQuote' );\n\t\t\teditor.editing.view.focus();\n\t\t} );\n\n\t\treturn view;\n\t}\n}\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 block-quote/blockquote\n */\n\nimport { Plugin } from 'ckeditor5/src/core.js';\n\nimport BlockQuoteEditing from './blockquoteediting.js';\nimport BlockQuoteUI from './blockquoteui.js';\n\n/**\n * The block quote plugin.\n *\n * For more information about this feature check the {@glink api/block-quote package page}.\n *\n * This is a \"glue\" plugin which loads the {@link module:block-quote/blockquoteediting~BlockQuoteEditing block quote editing feature}\n * and {@link module:block-quote/blockquoteui~BlockQuoteUI block quote UI feature}.\n *\n * @extends module:core/plugin~Plugin\n */\nexport default class BlockQuote extends Plugin {\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static get requires() {\n\t\treturn [ BlockQuoteEditing, BlockQuoteUI ] as const;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static get pluginName() {\n\t\treturn 'BlockQuote' as const;\n\t}\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":{"Block quote":"Verwysingsaanhaling"},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":{"Block quote":"Verwysingsaanhaling"},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":{"Block quote":"اقتباس"},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":{"Block quote":"اقتباس"},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":{"Block quote":"Sitat bloku"},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":{"Block quote":"Sitat bloku"},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 ||= {} );
|