@ecodev/natural-editor 41.3.0 → 42.2.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.
- package/{esm2015/ecodev-natural-editor.js → esm2020/ecodev-natural-editor.mjs} +0 -0
- package/esm2020/lib/class-dialog/class-dialog.component.mjs +37 -0
- package/esm2020/lib/color-dialog/color-dialog.component.mjs +184 -0
- package/esm2020/lib/custom-css/custom-css.directive.mjs +71 -0
- package/esm2020/lib/editor/editor.component.mjs +213 -0
- package/esm2020/lib/editor.module.mjs +90 -0
- package/{esm2015/lib/link-dialog/link-dialog.component.js → esm2020/lib/link-dialog/link-dialog.component.mjs} +5 -8
- package/esm2020/lib/utils/image.mjs +81 -0
- package/{esm2015/lib/utils/inputrules.js → esm2020/lib/utils/inputrules.mjs} +0 -0
- package/esm2020/lib/utils/items/cell-background-color-item.mjs +55 -0
- package/esm2020/lib/utils/items/class-item.mjs +86 -0
- package/esm2020/lib/utils/items/horizontal-rule-item.mjs +24 -0
- package/esm2020/lib/utils/items/item.mjs +39 -0
- package/esm2020/lib/utils/items/link-item.mjs +40 -0
- package/esm2020/lib/utils/items/table-item.mjs +43 -0
- package/esm2020/lib/utils/items/text-align-item.mjs +78 -0
- package/esm2020/lib/utils/items/utils.mjs +41 -0
- package/esm2020/lib/utils/items/wrap-list-item.mjs +6 -0
- package/esm2020/lib/utils/keymap.mjs +115 -0
- package/esm2020/lib/utils/menu.mjs +101 -0
- package/esm2020/lib/utils/schema/paragraph-with-alignment.mjs +50 -0
- package/esm2020/lib/utils/schema/schema.mjs +51 -0
- package/esm2020/lib/utils/schema/table.mjs +113 -0
- package/esm2020/public-api.mjs +9 -0
- package/fesm2015/ecodev-natural-editor.mjs +1548 -0
- package/fesm2015/ecodev-natural-editor.mjs.map +1 -0
- package/fesm2020/ecodev-natural-editor.mjs +1546 -0
- package/fesm2020/ecodev-natural-editor.mjs.map +1 -0
- package/lib/class-dialog/class-dialog.component.d.ts +24 -0
- package/lib/color-dialog/color-dialog.component.d.ts +26 -0
- package/lib/custom-css/custom-css.directive.d.ts +29 -0
- package/lib/editor.module.d.ts +19 -16
- package/lib/utils/items/cell-background-color-item.d.ts +5 -0
- package/lib/utils/items/class-item.d.ts +6 -0
- package/lib/utils/items/horizontal-rule-item.d.ts +5 -0
- package/lib/utils/{item.d.ts → items/item.d.ts} +0 -0
- package/lib/utils/items/link-item.d.ts +6 -0
- package/lib/utils/items/table-item.d.ts +4 -0
- package/lib/utils/{text-align-item.d.ts → items/text-align-item.d.ts} +0 -0
- package/lib/utils/items/utils.d.ts +18 -0
- package/lib/utils/items/wrap-list-item.d.ts +3 -0
- package/lib/utils/menu.d.ts +2 -2
- package/lib/utils/schema/paragraph-with-alignment.d.ts +8 -0
- package/lib/utils/{schema.d.ts → schema/schema.d.ts} +0 -0
- package/lib/utils/schema/table.d.ts +9 -0
- package/package.json +22 -8
- package/public-api.d.ts +1 -0
- package/src/lib/editor/_editor.theme.scss +1 -1
- package/theming/_natural-editor.theme.scss +1 -1
- package/bundles/ecodev-natural-editor.umd.js +0 -1351
- package/bundles/ecodev-natural-editor.umd.js.map +0 -1
- package/esm2015/lib/editor/editor.component.js +0 -219
- package/esm2015/lib/editor.module.js +0 -82
- package/esm2015/lib/utils/image.js +0 -81
- package/esm2015/lib/utils/item.js +0 -39
- package/esm2015/lib/utils/keymap.js +0 -115
- package/esm2015/lib/utils/menu.js +0 -178
- package/esm2015/lib/utils/paragraph-with-alignment.js +0 -43
- package/esm2015/lib/utils/schema.js +0 -47
- package/esm2015/lib/utils/table.js +0 -37
- package/esm2015/lib/utils/text-align-item.js +0 -78
- package/esm2015/public-api.js +0 -8
- package/fesm2015/ecodev-natural-editor.js +0 -997
- package/fesm2015/ecodev-natural-editor.js.map +0 -1
- package/lib/utils/paragraph-with-alignment.d.ts +0 -2
- package/lib/utils/table.d.ts +0 -8
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { Decoration, DecorationSet } from 'prosemirror-view';
|
|
2
|
+
import { Plugin } from 'prosemirror-state';
|
|
3
|
+
import { Inject, Injectable } from '@angular/core';
|
|
4
|
+
import { DOCUMENT } from '@angular/common';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export class ImagePlugin {
|
|
7
|
+
constructor(document) {
|
|
8
|
+
this.document = document;
|
|
9
|
+
this.plugin = new Plugin({
|
|
10
|
+
state: {
|
|
11
|
+
init() {
|
|
12
|
+
return DecorationSet.empty;
|
|
13
|
+
},
|
|
14
|
+
apply(tr, set) {
|
|
15
|
+
// Adjust decoration positions to changes made by the transaction
|
|
16
|
+
set = set.map(tr.mapping, tr.doc);
|
|
17
|
+
// See if the transaction adds or removes any placeholders
|
|
18
|
+
const action = tr.getMeta(this);
|
|
19
|
+
if (action && action.add) {
|
|
20
|
+
const widget = document.createElement('placeholder');
|
|
21
|
+
const deco = Decoration.widget(action.add.pos, widget, { id: action.add.id });
|
|
22
|
+
set = set.add(tr.doc, [deco]);
|
|
23
|
+
}
|
|
24
|
+
else if (action && action.remove) {
|
|
25
|
+
set = set.remove(set.find(undefined, undefined, spec => spec.id === action.remove.id));
|
|
26
|
+
}
|
|
27
|
+
return set;
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
props: {
|
|
31
|
+
decorations(state) {
|
|
32
|
+
return this.getState(state);
|
|
33
|
+
},
|
|
34
|
+
},
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
findPlaceholder(state, id) {
|
|
38
|
+
const decorators = this.plugin.getState(state);
|
|
39
|
+
const found = decorators.find(undefined, undefined, spec => spec.id === id);
|
|
40
|
+
return found.length ? found[0].from : null;
|
|
41
|
+
}
|
|
42
|
+
startImageUpload(view, file, uploader, schema) {
|
|
43
|
+
// A fresh object to act as the ID for this upload
|
|
44
|
+
const id = {};
|
|
45
|
+
// Replace the selection with a placeholder
|
|
46
|
+
const tr = view.state.tr;
|
|
47
|
+
if (!tr.selection.empty) {
|
|
48
|
+
tr.deleteSelection();
|
|
49
|
+
}
|
|
50
|
+
tr.setMeta(this.plugin, { add: { id, pos: tr.selection.from } });
|
|
51
|
+
view.dispatch(tr);
|
|
52
|
+
uploader(file).subscribe({
|
|
53
|
+
next: url => {
|
|
54
|
+
const pos = this.findPlaceholder(view.state, id);
|
|
55
|
+
// If the content around the placeholder has been deleted, drop
|
|
56
|
+
// the image
|
|
57
|
+
if (pos === null) {
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
// Otherwise, insert it at the placeholder's position, and remove
|
|
61
|
+
// the placeholder
|
|
62
|
+
view.dispatch(view.state.tr
|
|
63
|
+
.replaceWith(pos, pos, schema.nodes.image.create({ src: url }))
|
|
64
|
+
.setMeta(this.plugin, { remove: { id } }));
|
|
65
|
+
},
|
|
66
|
+
error: () => {
|
|
67
|
+
// On failure, just clean up the placeholder
|
|
68
|
+
view?.dispatch(tr.setMeta(this.plugin, { remove: { id } }));
|
|
69
|
+
},
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
ImagePlugin.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: ImagePlugin, deps: [{ token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
74
|
+
ImagePlugin.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: ImagePlugin });
|
|
75
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: ImagePlugin, decorators: [{
|
|
76
|
+
type: Injectable
|
|
77
|
+
}], ctorParameters: function () { return [{ type: Document, decorators: [{
|
|
78
|
+
type: Inject,
|
|
79
|
+
args: [DOCUMENT]
|
|
80
|
+
}] }]; } });
|
|
81
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uYXR1cmFsLWVkaXRvci9zcmMvbGliL3V0aWxzL2ltYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUUsYUFBYSxFQUFhLE1BQU0sa0JBQWtCLENBQUM7QUFDdkUsT0FBTyxFQUFjLE1BQU0sRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBR3RELE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQzs7QUFLekMsTUFBTSxPQUFPLFdBQVc7SUFHcEIsWUFBc0QsUUFBa0I7UUFBbEIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNwRSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksTUFBTSxDQUFnQjtZQUNwQyxLQUFLLEVBQUU7Z0JBQ0gsSUFBSTtvQkFDQSxPQUFPLGFBQWEsQ0FBQyxLQUFLLENBQUM7Z0JBQy9CLENBQUM7Z0JBQ0QsS0FBSyxDQUFDLEVBQUUsRUFBRSxHQUFHO29CQUNULGlFQUFpRTtvQkFDakUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBRWxDLDBEQUEwRDtvQkFDMUQsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDaEMsSUFBSSxNQUFNLElBQUksTUFBTSxDQUFDLEdBQUcsRUFBRTt3QkFDdEIsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsQ0FBQzt3QkFDckQsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBQyxFQUFF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RSxRQUFRLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUMsTUFBTSxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUM7WUFDNUQsQ0FBQztTQUNKLENBQUMsQ0FBQztJQUNQLENBQUM7O3dHQTNFUSxXQUFXLGtCQUdPLFFBQVE7NEdBSDFCLFdBQVc7MkZBQVgsV0FBVztrQkFEdkIsVUFBVTswREFJeUQsUUFBUTswQkFBcEQsTUFBTTsyQkFBQyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtEZWNvcmF0aW9uLCBEZWNvcmF0aW9uU2V0LCBFZGl0b3JWaWV3fSBmcm9tICdwcm9zZW1pcnJvci12aWV3JztcbmltcG9ydCB7RWRpdG9yU3RhdGUsIFBsdWdpbn0gZnJvbSAncHJvc2VtaXJyb3Itc3RhdGUnO1xuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcbmltcG9ydCB7U2NoZW1hfSBmcm9tICdwcm9zZW1pcnJvci1tb2RlbCc7XG5pbXBvcnQge0luamVjdCwgSW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0RPQ1VNRU5UfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5leHBvcnQgdHlwZSBJbWFnZVVwbG9hZGVyID0gKGZpbGU6IEZpbGUpID0+IE9ic2VydmFibGU8c3RyaW5nPjtcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEltYWdlUGx1Z2luIHtcbiAgICBwdWJsaWMgcmVhZG9ubHkgcGx1Z2luOiBQbHVnaW48RGVjb3JhdGlvblNldD47XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSByZWFkb25seSBkb2N1bWVudDogRG9jdW1lbnQpIHtcbiAgICAgICAgdGhpcy5wbHVnaW4gPSBuZXcgUGx1Z2luPERlY29yYXRpb25TZXQ+KHtcbiAgICAgICAgICAgIHN0YXRlOiB7XG4gICAgICAgICAgICAgICAgaW5pdCgpOiBEZWNvcmF0aW9uU2V0IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIERlY29yYXRpb25TZXQuZW1wdHk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBhcHBseSh0ciwgc2V0KTogRGVjb3JhdGlvblNldCB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEFkanVzdCBkZWNvcmF0aW9uIHBvc2l0aW9ucyB0byBjaGFuZ2VzIG1hZGUgYnkgdGhlIHRyYW5zYWN0aW9uXG4gICAgICAgICAgICAgICAgICAgIHNldCA9IHNldC5tYXAodHIubWFwcGluZywgdHIuZG9jKTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBTZWUgaWYgdGhlIHRyYW5zYWN0aW9uIGFkZHMgb3IgcmVtb3ZlcyBhbnkgcGxhY2Vob2xkZXJzXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFjdGlvbiA9IHRyLmdldE1ldGEodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhY3Rpb24gJiYgYWN0aW9uLmFkZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2lkZ2V0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgncGxhY2Vob2xkZXInKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlY28gPSBEZWNvcmF0aW9uLndpZGdldChhY3Rpb24uYWRkLnBvcywgd2lkZ2V0LCB7aWQ6IGFjdGlvbi5hZGQuaWR9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldCA9IHNldC5hZGQodHIuZG9jLCBbZGVjb10pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFjdGlvbiAmJiBhY3Rpb24ucmVtb3ZlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXQgPSBzZXQucmVtb3ZlKHNldC5maW5kKHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBzcGVjID0+IHNwZWMuaWQgPT09IGFjdGlvbi5yZW1vdmUuaWQpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzZXQ7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgICAgIGRlY29yYXRpb25zKHN0YXRlKTogRGVjb3JhdGlvblNldCB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFN0YXRlKHN0YXRlKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmaW5kUGxhY2Vob2xkZXIoc3RhdGU6IEVkaXRvclN0YXRlLCBpZDogUmVjb3JkPHN0cmluZywgbmV2ZXI+KTogbnVtYmVyIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IGRlY29yYXRvcnMgPSB0aGlzLnBsdWdpbi5nZXRTdGF0ZShzdGF0ZSk7XG4gICAgICAgIGNvbnN0IGZvdW5kID0gZGVjb3JhdG9ycy5maW5kKHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBzcGVjID0+IHNwZWMuaWQgPT09IGlkKTtcbiAgICAgICAgcmV0dXJuIGZvdW5kLmxlbmd0aCA/IGZvdW5kWzBdLmZyb20gOiBudWxsO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGFydEltYWdlVXBsb2FkKHZpZXc6IEVkaXRvclZpZXcsIGZpbGU6IEZpbGUsIHVwbG9hZGVyOiBJbWFnZVVwbG9hZGVyLCBzY2hlbWE6IFNjaGVtYSk6IHZvaWQge1xuICAgICAgICAvLyBBIGZyZXNoIG9iamVjdCB0byBhY3QgYXMgdGhlIElEIGZvciB0aGlzIHVwbG9hZFxuICAgICAgICBjb25zdCBpZCA9IHt9O1xuXG4gICAgICAgIC8vIFJlcGxhY2UgdGhlIHNlbGVjdGlvbiB3aXRoIGEgcGxhY2Vob2xkZXJcbiAgICAgICAgY29uc3QgdHIgPSB2aWV3LnN0YXRlLnRyO1xuICAgICAgICBpZiAoIXRyLnNlbGVjdGlvbi5lbXB0eSkge1xuICAgICAgICAgICAgdHIuZGVsZXRlU2VsZWN0aW9uKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0ci5zZXRNZXRhKHRoaXMucGx1Z2luLCB7YWRkOiB7aWQsIHBvczogdHIuc2VsZWN0aW9uLmZyb219fSk7XG4gICAgICAgIHZpZXcuZGlzcGF0Y2godHIpO1xuXG4gICAgICAgIHVwbG9hZGVyKGZpbGUpLnN1YnNjcmliZSh7XG4gICAgICAgICAgICBuZXh0OiB1cmwgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBvcyA9IHRoaXMuZmluZFBsYWNlaG9sZGVyKHZpZXcuc3RhdGUsIGlkKTtcbiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgY29udGVudCBhcm91bmQgdGhlIHBsYWNlaG9sZGVyIGhhcyBiZWVuIGRlbGV0ZWQsIGRyb3BcbiAgICAgICAgICAgICAgICAvLyB0aGUgaW1hZ2VcbiAgICAgICAgICAgICAgICBpZiAocG9zID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBPdGhlcndpc2UsIGluc2VydCBpdCBhdCB0aGUgcGxhY2Vob2xkZXIncyBwb3NpdGlvbiwgYW5kIHJlbW92ZVxuICAgICAgICAgICAgICAgIC8vIHRoZSBwbGFjZWhvbGRlclxuICAgICAgICAgICAgICAgIHZpZXcuZGlzcGF0Y2goXG4gICAgICAgICAgICAgICAgICAgIHZpZXcuc3RhdGUudHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlV2l0aChwb3MsIHBvcywgc2NoZW1hLm5vZGVzLmltYWdlLmNyZWF0ZSh7c3JjOiB1cmx9KSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRNZXRhKHRoaXMucGx1Z2luLCB7cmVtb3ZlOiB7aWR9fSksXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIE9uIGZhaWx1cmUsIGp1c3QgY2xlYW4gdXAgdGhlIHBsYWNlaG9sZGVyXG4gICAgICAgICAgICAgICAgdmlldz8uZGlzcGF0Y2godHIuc2V0TWV0YSh0aGlzLnBsdWdpbiwge3JlbW92ZToge2lkfX0pKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==
|
|
File without changes
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { CellSelection, isInTable, selectionCell, setCellAttr } from 'prosemirror-tables';
|
|
2
|
+
import { Item } from './item';
|
|
3
|
+
import { ColorDialogComponent } from '../../color-dialog/color-dialog.component';
|
|
4
|
+
const setCellBackgroundColor = setCellAttr.bind(null, 'background');
|
|
5
|
+
function findFirstClassInSelection(state) {
|
|
6
|
+
if (!isInTable(state)) {
|
|
7
|
+
return '';
|
|
8
|
+
}
|
|
9
|
+
// For single cell selection
|
|
10
|
+
const $cell = selectionCell(state);
|
|
11
|
+
let foundColor = $cell?.nodeAfter?.attrs.background ?? '';
|
|
12
|
+
if (foundColor) {
|
|
13
|
+
return foundColor;
|
|
14
|
+
}
|
|
15
|
+
// For multiple cells selection
|
|
16
|
+
let keepLooking = true;
|
|
17
|
+
if (state.selection instanceof CellSelection) {
|
|
18
|
+
state.selection.forEachCell(node => {
|
|
19
|
+
const color = node.attrs.background;
|
|
20
|
+
if (keepLooking && color) {
|
|
21
|
+
keepLooking = false;
|
|
22
|
+
foundColor = color;
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
return foundColor;
|
|
27
|
+
}
|
|
28
|
+
export class CellBackgroundColorItem extends Item {
|
|
29
|
+
constructor(dialog) {
|
|
30
|
+
super({
|
|
31
|
+
enable(state) {
|
|
32
|
+
// Pretend to set a unique color that is not already set, to test if we can any color at all
|
|
33
|
+
const cmd = setCellBackgroundColor('#000001');
|
|
34
|
+
return cmd(state);
|
|
35
|
+
},
|
|
36
|
+
run(state, dispatch, view) {
|
|
37
|
+
dialog
|
|
38
|
+
.open(ColorDialogComponent, {
|
|
39
|
+
data: {
|
|
40
|
+
color: findFirstClassInSelection(state),
|
|
41
|
+
},
|
|
42
|
+
})
|
|
43
|
+
.afterClosed()
|
|
44
|
+
.subscribe(result => {
|
|
45
|
+
if (dispatch && result) {
|
|
46
|
+
const cmd = setCellBackgroundColor(result.color);
|
|
47
|
+
cmd(state, dispatch);
|
|
48
|
+
}
|
|
49
|
+
view.focus();
|
|
50
|
+
});
|
|
51
|
+
},
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VsbC1iYWNrZ3JvdW5kLWNvbG9yLWl0ZW0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uYXR1cmFsLWVkaXRvci9zcmMvbGliL3V0aWxzL2l0ZW1zL2NlbGwtYmFja2dyb3VuZC1jb2xvci1pdGVtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBQyxhQUFhLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUV4RixPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBRTVCLE9BQU8sRUFBQyxvQkFBb0IsRUFBa0IsTUFBTSwyQ0FBMkMsQ0FBQztBQUVoRyxNQUFNLHNCQUFzQixHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxDQUFDO0FBRXBFLFNBQVMseUJBQXlCLENBQUMsS0FBa0I7SUFDakQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUNuQixPQUFPLEVBQUUsQ0FBQztLQUNiO0lBRUQsNEJBQTRCO0lBQzVCLE1BQU0sS0FBSyxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNuQyxJQUFJLFVBQVUsR0FBVyxLQUFLLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDO0lBQ2xFLElBQUksVUFBVSxFQUFFO1FBQ1osT0FBTyxVQUFVLENBQUM7S0FDckI7SUFFRCwrQkFBK0I7SUFDL0IsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDO0lBQ3ZCLElBQUksS0FBSyxDQUFDLFNBQVMsWUFBWSxhQUFhLEVBQUU7UUFDMUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDL0IsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUM7WUFDcEMsSUFBSSxXQUFXLElBQUksS0FBSyxFQUFFO2dCQUN0QixXQUFXLEdBQUcsS0FBSyxDQUFDO2dCQUNwQixVQUFVLEdBQUcsS0FBSyxDQUFDO2FBQ3RCO1FBQ0wsQ0FBQyxDQUFDLENBQUM7S0FDTjtJQUVELE9BQU8sVUFBVSxDQUFDO0FBQ3RCLENBQUM7QUFFRCxNQUFNLE9BQU8sdUJBQXdCLFNBQVEsSUFBSTtJQUM3QyxZQUFtQixNQUFpQjtRQUNoQyxLQUFLLENBQUM7WUFDRixNQUFNLENBQUMsS0FBa0I7Z0JBQ3JCLDRGQUE0RjtnQkFDNUYsTUFBTSxHQUFHLEdBQUcsc0JBQXNCLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBRTlDLE9BQU8sR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3RCLENBQUM7WUFDRCxHQUFHLENBQUMsS0FBa0IsRUFBRSxRQUFrQyxFQUFFLElBQWdCO2dCQUN4RSxNQUFNO3FCQUNELElBQUksQ0FBeUQsb0JBQW9CLEVBQUU7b0JBQ2hGLElBQUksRUFBRTt3QkFDRixLQUFLLEVBQUUseUJBQXlCLENBQUMsS0FBSyxDQUFDO3FCQUMxQztpQkFDSixDQUFDO3FCQUNELFdBQVcsRUFBRTtxQkFDYixTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUU7b0JBQ2hCLElBQUksUUFBUSxJQUFJLE1BQU0sRUFBRTt3QkFDcEIsTUFBTSxHQUFHLEdBQUcsc0JBQXNCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO3dCQUNqRCxHQUFHLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO3FCQUN4QjtvQkFFRCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ2pCLENBQUMsQ0FBQyxDQUFDO1lBQ1gsQ0FBQztTQUNKLENBQUMsQ0FBQztJQUNQLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RWRpdG9yU3RhdGUsIFRyYW5zYWN0aW9ufSBmcm9tICdwcm9zZW1pcnJvci1zdGF0ZSc7XG5pbXBvcnQge0NlbGxTZWxlY3Rpb24sIGlzSW5UYWJsZSwgc2VsZWN0aW9uQ2VsbCwgc2V0Q2VsbEF0dHJ9IGZyb20gJ3Byb3NlbWlycm9yLXRhYmxlcyc7XG5pbXBvcnQge0VkaXRvclZpZXd9IGZyb20gJ3Byb3NlbWlycm9yLXZpZXcnO1xuaW1wb3J0IHtJdGVtfSBmcm9tICcuL2l0ZW0nO1xuaW1wb3J0IHtNYXREaWFsb2d9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQge0NvbG9yRGlhbG9nQ29tcG9uZW50LCBDb2xvckRpYWxvZ0RhdGF9IGZyb20gJy4uLy4uL2NvbG9yLWRpYWxvZy9jb2xvci1kaWFsb2cuY29tcG9uZW50JztcblxuY29uc3Qgc2V0Q2VsbEJhY2tncm91bmRDb2xvciA9IHNldENlbGxBdHRyLmJpbmQobnVsbCwgJ2JhY2tncm91bmQnKTtcblxuZnVuY3Rpb24gZmluZEZpcnN0Q2xhc3NJblNlbGVjdGlvbihzdGF0ZTogRWRpdG9yU3RhdGUpOiBzdHJpbmcge1xuICAgIGlmICghaXNJblRhYmxlKHN0YXRlKSkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgLy8gRm9yIHNpbmdsZSBjZWxsIHNlbGVjdGlvblxuICAgIGNvbnN0ICRjZWxsID0gc2VsZWN0aW9uQ2VsbChzdGF0ZSk7XG4gICAgbGV0IGZvdW5kQ29sb3I6IHN0cmluZyA9ICRjZWxsPy5ub2RlQWZ0ZXI/LmF0dHJzLmJhY2tncm91bmQgPz8gJyc7XG4gICAgaWYgKGZvdW5kQ29sb3IpIHtcbiAgICAgICAgcmV0dXJuIGZvdW5kQ29sb3I7XG4gICAgfVxuXG4gICAgLy8gRm9yIG11bHRpcGxlIGNlbGxzIHNlbGVjdGlvblxuICAgIGxldCBrZWVwTG9va2luZyA9IHRydWU7XG4gICAgaWYgKHN0YXRlLnNlbGVjdGlvbiBpbnN0YW5jZW9mIENlbGxTZWxlY3Rpb24pIHtcbiAgICAgICAgc3RhdGUuc2VsZWN0aW9uLmZvckVhY2hDZWxsKG5vZGUgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29sb3IgPSBub2RlLmF0dHJzLmJhY2tncm91bmQ7XG4gICAgICAgICAgICBpZiAoa2VlcExvb2tpbmcgJiYgY29sb3IpIHtcbiAgICAgICAgICAgICAgICBrZWVwTG9va2luZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGZvdW5kQ29sb3IgPSBjb2xvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZvdW5kQ29sb3I7XG59XG5cbmV4cG9ydCBjbGFzcyBDZWxsQmFja2dyb3VuZENvbG9ySXRlbSBleHRlbmRzIEl0ZW0ge1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihkaWFsb2c6IE1hdERpYWxvZykge1xuICAgICAgICBzdXBlcih7XG4gICAgICAgICAgICBlbmFibGUoc3RhdGU6IEVkaXRvclN0YXRlKTogYm9vbGVhbiB7XG4gICAgICAgICAgICAgICAgLy8gUHJldGVuZCB0byBzZXQgYSB1bmlxdWUgY29sb3IgdGhhdCBpcyBub3QgYWxyZWFkeSBzZXQsIHRvIHRlc3QgaWYgd2UgY2FuIGFueSBjb2xvciBhdCBhbGxcbiAgICAgICAgICAgICAgICBjb25zdCBjbWQgPSBzZXRDZWxsQmFja2dyb3VuZENvbG9yKCcjMDAwMDAxJyk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gY21kKHN0YXRlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBydW4oc3RhdGU6IEVkaXRvclN0YXRlLCBkaXNwYXRjaDogKHA6IFRyYW5zYWN0aW9uKSA9PiB2b2lkLCB2aWV3OiBFZGl0b3JWaWV3KTogdm9pZCB7XG4gICAgICAgICAgICAgICAgZGlhbG9nXG4gICAgICAgICAgICAgICAgICAgIC5vcGVuPENvbG9yRGlhbG9nQ29tcG9uZW50LCBDb2xvckRpYWxvZ0RhdGEsIENvbG9yRGlhbG9nRGF0YT4oQ29sb3JEaWFsb2dDb21wb25lbnQsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogZmluZEZpcnN0Q2xhc3NJblNlbGVjdGlvbihzdGF0ZSksXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAuYWZ0ZXJDbG9zZWQoKVxuICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGlzcGF0Y2ggJiYgcmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY21kID0gc2V0Q2VsbEJhY2tncm91bmRDb2xvcihyZXN1bHQuY29sb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZChzdGF0ZSwgZGlzcGF0Y2gpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2aWV3LmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { AllSelection, TextSelection } from 'prosemirror-state';
|
|
2
|
+
import { Item } from './item';
|
|
3
|
+
import { ClassDialogComponent } from '../../class-dialog/class-dialog.component';
|
|
4
|
+
function setClass(tr, classValue, allowedNodeType) {
|
|
5
|
+
const { selection, doc } = tr;
|
|
6
|
+
if (!selection || !doc) {
|
|
7
|
+
return tr;
|
|
8
|
+
}
|
|
9
|
+
const { from, to } = selection;
|
|
10
|
+
const tasks = [];
|
|
11
|
+
doc.nodesBetween(from, to, (node, pos) => {
|
|
12
|
+
const nodeType = node.type;
|
|
13
|
+
const currentClass = node.attrs.class || null;
|
|
14
|
+
if (currentClass !== classValue && allowedNodeType === nodeType) {
|
|
15
|
+
tasks.push({
|
|
16
|
+
node,
|
|
17
|
+
pos,
|
|
18
|
+
nodeType,
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
return true;
|
|
22
|
+
});
|
|
23
|
+
if (!tasks.length) {
|
|
24
|
+
return tr;
|
|
25
|
+
}
|
|
26
|
+
tasks.forEach(job => {
|
|
27
|
+
const { node, pos, nodeType } = job;
|
|
28
|
+
const newAttrs = {
|
|
29
|
+
...node.attrs,
|
|
30
|
+
class: classValue ? classValue : null,
|
|
31
|
+
};
|
|
32
|
+
tr = tr.setNodeMarkup(pos, nodeType, newAttrs, node.marks);
|
|
33
|
+
});
|
|
34
|
+
return tr;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Returns the first `class` attribute that is non-empty in the selection.
|
|
38
|
+
* If not found, return empty string.
|
|
39
|
+
*/
|
|
40
|
+
function findFirstClassInSelection(state, allowedNodeType) {
|
|
41
|
+
const { selection, doc } = state;
|
|
42
|
+
const { from, to } = selection;
|
|
43
|
+
let keepLooking = true;
|
|
44
|
+
let foundClass = '';
|
|
45
|
+
doc.nodesBetween(from, to, node => {
|
|
46
|
+
if (keepLooking && node.type === allowedNodeType && node.attrs.class) {
|
|
47
|
+
keepLooking = false;
|
|
48
|
+
foundClass = node.attrs.class;
|
|
49
|
+
}
|
|
50
|
+
return keepLooking;
|
|
51
|
+
});
|
|
52
|
+
return foundClass;
|
|
53
|
+
}
|
|
54
|
+
export class ClassItem extends Item {
|
|
55
|
+
constructor(dialog, nodeType) {
|
|
56
|
+
super({
|
|
57
|
+
active: state => {
|
|
58
|
+
return !!findFirstClassInSelection(state, nodeType);
|
|
59
|
+
},
|
|
60
|
+
enable: state => {
|
|
61
|
+
const { selection } = state;
|
|
62
|
+
return selection instanceof TextSelection || selection instanceof AllSelection;
|
|
63
|
+
},
|
|
64
|
+
run: (state, dispatch, view) => {
|
|
65
|
+
dialog
|
|
66
|
+
.open(ClassDialogComponent, {
|
|
67
|
+
data: {
|
|
68
|
+
class: findFirstClassInSelection(state, nodeType),
|
|
69
|
+
},
|
|
70
|
+
})
|
|
71
|
+
.afterClosed()
|
|
72
|
+
.subscribe(result => {
|
|
73
|
+
if (dispatch && result) {
|
|
74
|
+
const { selection } = state;
|
|
75
|
+
const tr = setClass(state.tr.setSelection(selection), result.class, nodeType);
|
|
76
|
+
if (tr.docChanged) {
|
|
77
|
+
dispatch?.(tr);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
view.focus();
|
|
81
|
+
});
|
|
82
|
+
},
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3MtaXRlbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwtZWRpdG9yL3NyYy9saWIvdXRpbHMvaXRlbXMvY2xhc3MtaXRlbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUMsWUFBWSxFQUFlLGFBQWEsRUFBYyxNQUFNLG1CQUFtQixDQUFDO0FBQ3hGLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFFNUIsT0FBTyxFQUFDLG9CQUFvQixFQUFrQixNQUFNLDJDQUEyQyxDQUFDO0FBRWhHLFNBQVMsUUFBUSxDQUFDLEVBQWUsRUFBRSxVQUFrQixFQUFFLGVBQXlCO0lBQzVFLE1BQU0sRUFBQyxTQUFTLEVBQUUsR0FBRyxFQUFDLEdBQUcsRUFBRSxDQUFDO0lBQzVCLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxHQUFHLEVBQUU7UUFDcEIsT0FBTyxFQUFFLENBQUM7S0FDYjtJQUNELE1BQU0sRUFBQyxJQUFJLEVBQUUsRUFBRSxFQUFDLEdBQUcsU0FBUyxDQUFDO0lBRTdCLE1BQU0sS0FBSyxHQUlMLEVBQUUsQ0FBQztJQUVULEdBQUcsQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRTtRQUNyQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQzNCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQztRQUM5QyxJQUFJLFlBQVksS0FBSyxVQUFVLElBQUksZUFBZSxLQUFLLFFBQVEsRUFBRTtZQUM3RCxLQUFLLENBQUMsSUFBSSxDQUFDO2dCQUNQLElBQUk7Z0JBQ0osR0FBRztnQkFDSCxRQUFRO2FBQ1gsQ0FBQyxDQUFDO1NBQ047UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDLENBQUMsQ0FBQztJ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QUFDO0lBQ1AsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtOb2RlLCBOb2RlVHlwZX0gZnJvbSAncHJvc2VtaXJyb3ItbW9kZWwnO1xuaW1wb3J0IHtBbGxTZWxlY3Rpb24sIEVkaXRvclN0YXRlLCBUZXh0U2VsZWN0aW9uLCBUcmFuc2FjdGlvbn0gZnJvbSAncHJvc2VtaXJyb3Itc3RhdGUnO1xuaW1wb3J0IHtJdGVtfSBmcm9tICcuL2l0ZW0nO1xuaW1wb3J0IHtNYXREaWFsb2d9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQge0NsYXNzRGlhbG9nQ29tcG9uZW50LCBDbGFzc0RpYWxvZ0RhdGF9IGZyb20gJy4uLy4uL2NsYXNzLWRpYWxvZy9jbGFzcy1kaWFsb2cuY29tcG9uZW50JztcblxuZnVuY3Rpb24gc2V0Q2xhc3ModHI6IFRyYW5zYWN0aW9uLCBjbGFzc1ZhbHVlOiBzdHJpbmcsIGFsbG93ZWROb2RlVHlwZTogTm9kZVR5cGUpOiBUcmFuc2FjdGlvbiB7XG4gICAgY29uc3Qge3NlbGVjdGlvbiwgZG9jfSA9IHRyO1xuICAgIGlmICghc2VsZWN0aW9uIHx8ICFkb2MpIHtcbiAgICAgICAgcmV0dXJuIHRyO1xuICAgIH1cbiAgICBjb25zdCB7ZnJvbSwgdG99ID0gc2VsZWN0aW9uO1xuXG4gICAgY29uc3QgdGFza3M6IHtcbiAgICAgICAgbm9kZTogTm9kZTtcbiAgICAgICAgcG9zOiBudW1iZXI7XG4gICAgICAgIG5vZGVUeXBlOiBOb2RlVHlwZTtcbiAgICB9W10gPSBbXTtcblxuICAgIGRvYy5ub2Rlc0JldHdlZW4oZnJvbSwgdG8sIChub2RlLCBwb3MpID0+IHtcbiAgICAgICAgY29uc3Qgbm9kZVR5cGUgPSBub2RlLnR5cGU7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRDbGFzcyA9IG5vZGUuYXR0cnMuY2xhc3MgfHwgbnVsbDtcbiAgICAgICAgaWYgKGN1cnJlbnRDbGFzcyAhPT0gY2xhc3NWYWx1ZSAmJiBhbGxvd2VkTm9kZVR5cGUgPT09IG5vZGVUeXBlKSB7XG4gICAgICAgICAgICB0YXNrcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgICAgIHBvcyxcbiAgICAgICAgICAgICAgICBub2RlVHlwZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0pO1xuXG4gICAgaWYgKCF0YXNrcy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHRyO1xuICAgIH1cblxuICAgIHRhc2tzLmZvckVhY2goam9iID0+IHtcbiAgICAgICAgY29uc3Qge25vZGUsIHBvcywgbm9kZVR5cGV9ID0gam9iO1xuICAgICAgICBjb25zdCBuZXdBdHRycyA9IHtcbiAgICAgICAgICAgIC4uLm5vZGUuYXR0cnMsXG4gICAgICAgICAgICBjbGFzczogY2xhc3NWYWx1ZSA/IGNsYXNzVmFsdWUgOiBudWxsLFxuICAgICAgICB9O1xuXG4gICAgICAgIHRyID0gdHIuc2V0Tm9kZU1hcmt1cChwb3MsIG5vZGVUeXBlLCBuZXdBdHRycywgbm9kZS5tYXJrcyk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdHI7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZmlyc3QgYGNsYXNzYCBhdHRyaWJ1dGUgdGhhdCBpcyBub24tZW1wdHkgaW4gdGhlIHNlbGVjdGlvbi5cbiAqIElmIG5vdCBmb3VuZCwgcmV0dXJuIGVtcHR5IHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gZmluZEZpcnN0Q2xhc3NJblNlbGVjdGlvbihzdGF0ZTogRWRpdG9yU3RhdGUsIGFsbG93ZWROb2RlVHlwZTogTm9kZVR5cGUpOiBzdHJpbmcge1xuICAgIGNvbnN0IHtzZWxlY3Rpb24sIGRvY30gPSBzdGF0ZTtcbiAgICBjb25zdCB7ZnJvbSwgdG99ID0gc2VsZWN0aW9uO1xuICAgIGxldCBrZWVwTG9va2luZyA9IHRydWU7XG4gICAgbGV0IGZvdW5kQ2xhc3M6IHN0cmluZyA9ICcnO1xuXG4gICAgZG9jLm5vZGVzQmV0d2Vlbihmcm9tLCB0bywgbm9kZSA9PiB7XG4gICAgICAgIGlmIChrZWVwTG9va2luZyAmJiBub2RlLnR5cGUgPT09IGFsbG93ZWROb2RlVHlwZSAmJiBub2RlLmF0dHJzLmNsYXNzKSB7XG4gICAgICAgICAgICBrZWVwTG9va2luZyA9IGZhbHNlO1xuICAgICAgICAgICAgZm91bmRDbGFzcyA9IG5vZGUuYXR0cnMuY2xhc3M7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ga2VlcExvb2tpbmc7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZm91bmRDbGFzcztcbn1cblxuZXhwb3J0IGNsYXNzIENsYXNzSXRlbSBleHRlbmRzIEl0ZW0ge1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihkaWFsb2c6IE1hdERpYWxvZywgbm9kZVR5cGU6IE5vZGVUeXBlKSB7XG4gICAgICAgIHN1cGVyKHtcbiAgICAgICAgICAgIGFjdGl2ZTogc3RhdGUgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiAhIWZpbmRGaXJzdENsYXNzSW5TZWxlY3Rpb24oc3RhdGUsIG5vZGVUeXBlKTtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGVuYWJsZTogc3RhdGUgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHtzZWxlY3Rpb259ID0gc3RhdGU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGVjdGlvbiBpbnN0YW5jZW9mIFRleHRTZWxlY3Rpb24gfHwgc2VsZWN0aW9uIGluc3RhbmNlb2YgQWxsU2VsZWN0aW9uO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgcnVuOiAoc3RhdGUsIGRpc3BhdGNoLCB2aWV3KTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgZGlhbG9nXG4gICAgICAgICAgICAgICAgICAgIC5vcGVuPENsYXNzRGlhbG9nQ29tcG9uZW50LCBDbGFzc0RpYWxvZ0RhdGEsIENsYXNzRGlhbG9nRGF0YT4oQ2xhc3NEaWFsb2dDb21wb25lbnQsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogZmluZEZpcnN0Q2xhc3NJblNlbGVjdGlvbihzdGF0ZSwgbm9kZVR5cGUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLmFmdGVyQ2xvc2VkKClcbiAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRpc3BhdGNoICYmIHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHtzZWxlY3Rpb259ID0gc3RhdGU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0ciA9IHNldENsYXNzKHN0YXRlLnRyLnNldFNlbGVjdGlvbihzZWxlY3Rpb24pLCByZXN1bHQuY2xhc3MsIG5vZGVUeXBlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHIuZG9jQ2hhbmdlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaD8uKHRyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZpZXcuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Item } from './item';
|
|
2
|
+
function canInsert(state, nodeType) {
|
|
3
|
+
const $from = state.selection.$from;
|
|
4
|
+
for (let d = $from.depth; d >= 0; d--) {
|
|
5
|
+
const index = $from.index(d);
|
|
6
|
+
if ($from.node(d).canReplaceWith(index, index, nodeType)) {
|
|
7
|
+
return true;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
return false;
|
|
11
|
+
}
|
|
12
|
+
export class HorizontalRuleItem extends Item {
|
|
13
|
+
constructor(hr) {
|
|
14
|
+
super({
|
|
15
|
+
enable(state) {
|
|
16
|
+
return canInsert(state, hr);
|
|
17
|
+
},
|
|
18
|
+
run(state, dispatch) {
|
|
19
|
+
dispatch(state.tr.replaceSelectionWith(hr.create()));
|
|
20
|
+
},
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9yaXpvbnRhbC1ydWxlLWl0ZW0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uYXR1cmFsLWVkaXRvci9zcmMvbGliL3V0aWxzL2l0ZW1zL2hvcml6b250YWwtcnVsZS1pdGVtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFJNUIsU0FBUyxTQUFTLENBQUMsS0FBa0IsRUFBRSxRQUFrQjtJQUNyRCxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQztJQUNwQyxLQUFLLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUNuQyxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdCLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsRUFBRTtZQUN0RCxPQUFPLElBQUksQ0FBQztTQUNmO0tBQ0o7SUFFRCxPQUFPLEtBQUssQ0FBQztBQUNqQixDQUFDO0FBRUQsTUFBTSxPQUFPLGtCQUFtQixTQUFRLElBQUk7SUFDeEMsWUFBbUIsRUFBWTtRQUMzQixLQUFLLENBQUM7WUFDRixNQUFNLENBQUMsS0FBSztnQkFDUixPQUFPLFNBQVMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDaEMsQ0FBQztZQUNELEdBQUcsQ0FBQyxLQUFLLEVBQUUsUUFBUTtnQkFDZixRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3pELENBQUM7U0FDSixDQUFDLENBQUM7SUFDUCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0l0ZW19IGZyb20gJy4vaXRlbSc7XG5pbXBvcnQge0VkaXRvclN0YXRlfSBmcm9tICdwcm9zZW1pcnJvci1zdGF0ZSc7XG5pbXBvcnQge05vZGVUeXBlfSBmcm9tICdwcm9zZW1pcnJvci1tb2RlbCc7XG5cbmZ1bmN0aW9uIGNhbkluc2VydChzdGF0ZTogRWRpdG9yU3RhdGUsIG5vZGVUeXBlOiBOb2RlVHlwZSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0ICRmcm9tID0gc3RhdGUuc2VsZWN0aW9uLiRmcm9tO1xuICAgIGZvciAobGV0IGQgPSAkZnJvbS5kZXB0aDsgZCA+PSAwOyBkLS0pIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSAkZnJvbS5pbmRleChkKTtcbiAgICAgICAgaWYgKCRmcm9tLm5vZGUoZCkuY2FuUmVwbGFjZVdpdGgoaW5kZXgsIGluZGV4LCBub2RlVHlwZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgY2xhc3MgSG9yaXpvbnRhbFJ1bGVJdGVtIGV4dGVuZHMgSXRlbSB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKGhyOiBOb2RlVHlwZSkge1xuICAgICAgICBzdXBlcih7XG4gICAgICAgICAgICBlbmFibGUoc3RhdGUpOiBib29sZWFuIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FuSW5zZXJ0KHN0YXRlLCBocik7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcnVuKHN0YXRlLCBkaXNwYXRjaCk6IHZvaWQge1xuICAgICAgICAgICAgICAgIGRpc3BhdGNoKHN0YXRlLnRyLnJlcGxhY2VTZWxlY3Rpb25XaXRoKGhyLmNyZWF0ZSgpKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One item of the menu.
|
|
3
|
+
*
|
|
4
|
+
* This is the equivalent of `MenuItem` but without all the rendering logic since we use Angular
|
|
5
|
+
* templates for rendering. Also it caches the state of the item everytime the editor state changes,
|
|
6
|
+
* so Angular can query the state as often as needed without performance hit.
|
|
7
|
+
*/
|
|
8
|
+
export class Item {
|
|
9
|
+
constructor(spec) {
|
|
10
|
+
this.spec = spec;
|
|
11
|
+
/**
|
|
12
|
+
* Whether the item is 'active' (for example, the item for toggling the strong mark might be active when the cursor is in strong text).
|
|
13
|
+
*/
|
|
14
|
+
this.active = false;
|
|
15
|
+
/**
|
|
16
|
+
* Button is shown but disabled, because the item cannot be (un-)applied
|
|
17
|
+
*/
|
|
18
|
+
this.disabled = false;
|
|
19
|
+
/**
|
|
20
|
+
* Whether the item is shown at the moment
|
|
21
|
+
*/
|
|
22
|
+
this.show = true;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Update the item state according to the editor state
|
|
26
|
+
*/
|
|
27
|
+
update(view, state) {
|
|
28
|
+
if (this.spec.active) {
|
|
29
|
+
this.active = this.spec.active(state);
|
|
30
|
+
}
|
|
31
|
+
if (this.spec.enable) {
|
|
32
|
+
this.disabled = !this.spec.enable(state);
|
|
33
|
+
}
|
|
34
|
+
if (this.spec.select) {
|
|
35
|
+
this.show = this.spec.select(state);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXRlbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwtZWRpdG9yL3NyYy9saWIvdXRpbHMvaXRlbXMvaXRlbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQTs7Ozs7O0dBTUc7QUFDSCxNQUFNLE9BQU8sSUFBSTtJQWdCYixZQUFtQyxJQUFrQjtRQUFsQixTQUFJLEdBQUosSUFBSSxDQUFjO1FBZnJEOztXQUVHO1FBQ0ksV0FBTSxHQUFHLEtBQUssQ0FBQztRQUV0Qjs7V0FFRztRQUNJLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFFeEI7O1dBRUc7UUFDSSxTQUFJLEdBQUcsSUFBSSxDQUFDO0lBRXFDLENBQUM7SUFFekQ7O09BRUc7SUFDSSxNQUFNLENBQUMsSUFBZ0IsRUFBRSxLQUFrQjtRQUM5QyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2xCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDekM7UUFFRCxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2xCLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUM1QztRQUVELElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDbEIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUN2QztJQUNMLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TWVudUl0ZW1TcGVjfSBmcm9tICdwcm9zZW1pcnJvci1tZW51JztcbmltcG9ydCB7RWRpdG9yU3RhdGV9IGZyb20gJ3Byb3NlbWlycm9yLXN0YXRlJztcbmltcG9ydCB7RWRpdG9yVmlld30gZnJvbSAncHJvc2VtaXJyb3Itdmlldyc7XG5cbi8qKlxuICogT25lIGl0ZW0gb2YgdGhlIG1lbnUuXG4gKlxuICogVGhpcyBpcyB0aGUgZXF1aXZhbGVudCBvZiBgTWVudUl0ZW1gIGJ1dCB3aXRob3V0IGFsbCB0aGUgcmVuZGVyaW5nIGxvZ2ljIHNpbmNlIHdlIHVzZSBBbmd1bGFyXG4gKiB0ZW1wbGF0ZXMgZm9yIHJlbmRlcmluZy4gQWxzbyBpdCBjYWNoZXMgdGhlIHN0YXRlIG9mIHRoZSBpdGVtIGV2ZXJ5dGltZSB0aGUgZWRpdG9yIHN0YXRlIGNoYW5nZXMsXG4gKiBzbyBBbmd1bGFyIGNhbiBxdWVyeSB0aGUgc3RhdGUgYXMgb2Z0ZW4gYXMgbmVlZGVkIHdpdGhvdXQgcGVyZm9ybWFuY2UgaGl0LlxuICovXG5leHBvcnQgY2xhc3MgSXRlbSB7XG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgaXRlbSBpcyAnYWN0aXZlJyAoZm9yIGV4YW1wbGUsIHRoZSBpdGVtIGZvciB0b2dnbGluZyB0aGUgc3Ryb25nIG1hcmsgbWlnaHQgYmUgYWN0aXZlIHdoZW4gdGhlIGN1cnNvciBpcyBpbiBzdHJvbmcgdGV4dCkuXG4gICAgICovXG4gICAgcHVibGljIGFjdGl2ZSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQnV0dG9uIGlzIHNob3duIGJ1dCBkaXNhYmxlZCwgYmVjYXVzZSB0aGUgaXRlbSBjYW5ub3QgYmUgKHVuLSlhcHBsaWVkXG4gICAgICovXG4gICAgcHVibGljIGRpc2FibGVkID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSBpdGVtIGlzIHNob3duIGF0IHRoZSBtb21lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgc2hvdyA9IHRydWU7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IHNwZWM6IE1lbnVJdGVtU3BlYykge31cblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZSB0aGUgaXRlbSBzdGF0ZSBhY2NvcmRpbmcgdG8gdGhlIGVkaXRvciBzdGF0ZVxuICAgICAqL1xuICAgIHB1YmxpYyB1cGRhdGUodmlldzogRWRpdG9yVmlldywgc3RhdGU6IEVkaXRvclN0YXRlKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnNwZWMuYWN0aXZlKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZSA9IHRoaXMuc3BlYy5hY3RpdmUoc3RhdGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuc3BlYy5lbmFibGUpIHtcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZWQgPSAhdGhpcy5zcGVjLmVuYWJsZShzdGF0ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5zcGVjLnNlbGVjdCkge1xuICAgICAgICAgICAgdGhpcy5zaG93ID0gdGhpcy5zcGVjLnNlbGVjdChzdGF0ZSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { Item } from './item';
|
|
2
|
+
import { toggleMark } from 'prosemirror-commands';
|
|
3
|
+
import { LinkDialogComponent } from '../../link-dialog/link-dialog.component';
|
|
4
|
+
import { markActive } from './utils';
|
|
5
|
+
export class LinkItem extends Item {
|
|
6
|
+
constructor(markType, dialog) {
|
|
7
|
+
super({
|
|
8
|
+
active(state) {
|
|
9
|
+
return markActive(state, markType);
|
|
10
|
+
},
|
|
11
|
+
enable(state) {
|
|
12
|
+
return !state.selection.empty;
|
|
13
|
+
},
|
|
14
|
+
run(state, dispatch, view) {
|
|
15
|
+
if (markActive(state, markType)) {
|
|
16
|
+
toggleMark(markType)(state, dispatch);
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
dialog
|
|
20
|
+
.open(LinkDialogComponent, {
|
|
21
|
+
data: {
|
|
22
|
+
href: '',
|
|
23
|
+
title: '',
|
|
24
|
+
},
|
|
25
|
+
})
|
|
26
|
+
.afterClosed()
|
|
27
|
+
.subscribe(result => {
|
|
28
|
+
if (result) {
|
|
29
|
+
if (!result.title) {
|
|
30
|
+
delete result.title;
|
|
31
|
+
}
|
|
32
|
+
toggleMark(markType, result)(view.state, view.dispatch);
|
|
33
|
+
}
|
|
34
|
+
view.focus();
|
|
35
|
+
});
|
|
36
|
+
},
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluay1pdGVtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmF0dXJhbC1lZGl0b3Ivc3JjL2xpYi91dGlscy9pdGVtcy9saW5rLWl0ZW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUs1QixPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDaEQsT0FBTyxFQUFDLG1CQUFtQixFQUFpQixNQUFNLHlDQUF5QyxDQUFDO0FBQzVGLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFFbkMsTUFBTSxPQUFPLFFBQVMsU0FBUSxJQUFJO0lBQzlCLFlBQW1CLFFBQWtCLEVBQUUsTUFBaUI7UUFDcEQsS0FBSyxDQUFDO1lBQ0YsTUFBTSxDQUFDLEtBQWtCO2dCQUNyQixPQUFPLFVBQVUsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDdkMsQ0FBQztZQUNELE1BQU0sQ0FBQyxLQUFrQjtnQkFDckIsT0FBTyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDO1lBQ2xDLENBQUM7WUFDRCxHQUFHLENBQUMsS0FBa0IsRUFBRSxRQUFrQyxFQUFFLElBQWdCO2dCQUN4RSxJQUFJLFVBQVUsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLEVBQUU7b0JBQzdCLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7b0JBQ3RDLE9BQU87aUJBQ1Y7Z0JBRUQsTUFBTTtxQkFDRCxJQUFJLENBQXNELG1CQUFtQixFQUFFO29CQUM1RSxJQUFJLEVBQUU7d0JBQ0YsSUFBSSxFQUFFLEVBQUU7d0JBQ1IsS0FBSyxFQUFFLEVBQUU7cUJBQ1o7aUJBQ0osQ0FBQztxQkFDRCxXQUFXLEVBQUU7cUJBQ2IsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO29CQUNoQixJQUFJLE1BQU0sRUFBRTt3QkFDUixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRTs0QkFDZixPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUM7eUJBQ3ZCO3dCQUVELFVBQVUsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7cUJBQzNEO29CQUVELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDakIsQ0FBQyxDQUFDLENBQUM7WUFDWCxDQUFDO1NBQ0osQ0FBQyxDQUFDO0lBQ1AsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJdGVtfSBmcm9tICcuL2l0ZW0nO1xuaW1wb3J0IHtNYXJrVHlwZX0gZnJvbSAncHJvc2VtaXJyb3ItbW9kZWwnO1xuaW1wb3J0IHtNYXREaWFsb2d9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQge0VkaXRvclN0YXRlLCBUcmFuc2FjdGlvbn0gZnJvbSAncHJvc2VtaXJyb3Itc3RhdGUnO1xuaW1wb3J0IHtFZGl0b3JWaWV3fSBmcm9tICdwcm9zZW1pcnJvci12aWV3JztcbmltcG9ydCB7dG9nZ2xlTWFya30gZnJvbSAncHJvc2VtaXJyb3ItY29tbWFuZHMnO1xuaW1wb3J0IHtMaW5rRGlhbG9nQ29tcG9uZW50LCBMaW5rRGlhbG9nRGF0YX0gZnJvbSAnLi4vLi4vbGluay1kaWFsb2cvbGluay1kaWFsb2cuY29tcG9uZW50JztcbmltcG9ydCB7bWFya0FjdGl2ZX0gZnJvbSAnLi91dGlscyc7XG5cbmV4cG9ydCBjbGFzcyBMaW5rSXRlbSBleHRlbmRzIEl0ZW0ge1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihtYXJrVHlwZTogTWFya1R5cGUsIGRpYWxvZzogTWF0RGlhbG9nKSB7XG4gICAgICAgIHN1cGVyKHtcbiAgICAgICAgICAgIGFjdGl2ZShzdGF0ZTogRWRpdG9yU3RhdGUpOiBib29sZWFuIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbWFya0FjdGl2ZShzdGF0ZSwgbWFya1R5cGUpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVuYWJsZShzdGF0ZTogRWRpdG9yU3RhdGUpOiBib29sZWFuIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gIXN0YXRlLnNlbGVjdGlvbi5lbXB0eTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBydW4oc3RhdGU6IEVkaXRvclN0YXRlLCBkaXNwYXRjaDogKHA6IFRyYW5zYWN0aW9uKSA9PiB2b2lkLCB2aWV3OiBFZGl0b3JWaWV3KTogdm9pZCB7XG4gICAgICAgICAgICAgICAgaWYgKG1hcmtBY3RpdmUoc3RhdGUsIG1hcmtUeXBlKSkge1xuICAgICAgICAgICAgICAgICAgICB0b2dnbGVNYXJrKG1hcmtUeXBlKShzdGF0ZSwgZGlzcGF0Y2gpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZGlhbG9nXG4gICAgICAgICAgICAgICAgICAgIC5vcGVuPExpbmtEaWFsb2dDb21wb25lbnQsIExpbmtEaWFsb2dEYXRhLCBMaW5rRGlhbG9nRGF0YT4oTGlua0RpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY6ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC5hZnRlckNsb3NlZCgpXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdC50aXRsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgcmVzdWx0LnRpdGxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvZ2dsZU1hcmsobWFya1R5cGUsIHJlc3VsdCkodmlldy5zdGF0ZSwgdmlldy5kaXNwYXRjaCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZpZXcuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { TextSelection } from 'prosemirror-state';
|
|
2
|
+
import { tableNodeTypes } from 'prosemirror-tables';
|
|
3
|
+
import { Item } from './item';
|
|
4
|
+
function createCell(cellType, cellContent) {
|
|
5
|
+
return cellContent ? cellType.createChecked(null, cellContent) : cellType.createAndFill();
|
|
6
|
+
}
|
|
7
|
+
function createTable(state, rowsCount, colsCount, withHeaderRow, cellContent) {
|
|
8
|
+
const types = tableNodeTypes(state.schema);
|
|
9
|
+
const headerCells = [];
|
|
10
|
+
const cells = [];
|
|
11
|
+
for (let index = 0; index < colsCount; index += 1) {
|
|
12
|
+
const cell = createCell(types.cell, cellContent);
|
|
13
|
+
if (cell) {
|
|
14
|
+
cells.push(cell);
|
|
15
|
+
}
|
|
16
|
+
if (withHeaderRow) {
|
|
17
|
+
const headerCell = createCell(types.header_cell, cellContent);
|
|
18
|
+
if (headerCell) {
|
|
19
|
+
headerCells.push(headerCell);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
const rows = [];
|
|
24
|
+
for (let index = 0; index < rowsCount; index += 1) {
|
|
25
|
+
rows.push(types.row.createChecked(null, withHeaderRow && index === 0 ? headerCells : cells));
|
|
26
|
+
}
|
|
27
|
+
return types.table.createChecked(null, rows);
|
|
28
|
+
}
|
|
29
|
+
function addTable(state, dispatch, { rowsCount = 3, colsCount = 3, withHeaderRow = true, cellContent, } = {}) {
|
|
30
|
+
const offset = state.tr.selection.anchor + 1;
|
|
31
|
+
const nodes = createTable(state, rowsCount, colsCount, withHeaderRow, cellContent);
|
|
32
|
+
const tr = state.tr.replaceSelectionWith(nodes).scrollIntoView();
|
|
33
|
+
const resolvedPos = tr.doc.resolve(offset);
|
|
34
|
+
// move cursor into table
|
|
35
|
+
tr.setSelection(TextSelection.near(resolvedPos));
|
|
36
|
+
dispatch?.(tr);
|
|
37
|
+
}
|
|
38
|
+
export class AddTableItem extends Item {
|
|
39
|
+
constructor() {
|
|
40
|
+
super({ run: (editor, tr) => addTable(editor, tr) });
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtaXRlbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwtZWRpdG9yL3NyYy9saWIvdXRpbHMvaXRlbXMvdGFibGUtaXRlbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWMsYUFBYSxFQUFjLE1BQU0sbUJBQW1CLENBQUM7QUFFMUUsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBQ2xELE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFFNUIsU0FBUyxVQUFVLENBQ2YsUUFBa0IsRUFDbEIsV0FBaUU7SUFFakUsT0FBTyxXQUFXLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLENBQUM7QUFDOUYsQ0FBQztBQUVELFNBQVMsV0FBVyxDQUNoQixLQUFrQixFQUNsQixTQUFpQixFQUNqQixTQUFpQixFQUNqQixhQUFzQixFQUN0QixXQUFpRTtJQUVqRSxNQUFNLEtBQUssR0FBRyxjQUFjLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzNDLE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQztJQUN2QixNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7SUFFakIsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLFNBQVMsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFO1FBQy9DLE1BQU0sSUFBSSxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBRWpELElBQUksSUFBSSxFQUFFO1lBQ04sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNwQjtRQUVELElBQUksYUFBYSxFQUFFO1lBQ2YsTUFBTSxVQUFVLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFFOUQsSUFBSSxVQUFVLEVBQUU7Z0JBQ1osV0FBVyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQzthQUNoQztTQUNKO0tBQ0o7SUFFRCxNQUFNLElBQUksR0FBRyxFQUFFLENBQUM7SUFFaEIsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLFNBQVMsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFO1FBQy9DLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLGFBQWEsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7S0FDaEc7SUFFRCxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNqRCxDQUFDO0FBRUQsU0FBUyxRQUFRLENBQ2IsS0FBa0IsRUFDbEIsUUFBb0MsRUFDcEMsRUFDSSxTQUFTLEdBQUcsQ0FBQyxFQUNiLFNBQVMsR0FBRyxDQUFDLEVBQ2IsYUFBYSxHQUFHLElBQUksRUFDcEIsV0FBVyxNQU1YLEVBQUU7SUFFTixNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBRTdDLE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDbkYsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUNqRSxNQUFNLFdBQVcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUUzQyx5QkFBeUI7SUFDekIsRUFBRSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFFakQsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbkIsQ0FBQztBQUVELE1BQU0sT0FBTyxZQUFhLFNBQVEsSUFBSTtJQUNsQztRQUNJLEtBQUssQ0FBQyxFQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUMsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RWRpdG9yU3RhdGUsIFRleHRTZWxlY3Rpb24sIFRyYW5zYWN0aW9ufSBmcm9tICdwcm9zZW1pcnJvci1zdGF0ZSc7XG5pbXBvcnQge0ZyYWdtZW50LCBOb2RlIGFzIFByb3NlbWlycm9yTm9kZSwgTm9kZVR5cGV9IGZyb20gJ3Byb3NlbWlycm9yLW1vZGVsJztcbmltcG9ydCB7dGFibGVOb2RlVHlwZXN9IGZyb20gJ3Byb3NlbWlycm9yLXRhYmxlcyc7XG5pbXBvcnQge0l0ZW19IGZyb20gJy4vaXRlbSc7XG5cbmZ1bmN0aW9uIGNyZWF0ZUNlbGwoXG4gICAgY2VsbFR5cGU6IE5vZGVUeXBlLFxuICAgIGNlbGxDb250ZW50PzogRnJhZ21lbnQgfCBQcm9zZW1pcnJvck5vZGUgfCBBcnJheTxQcm9zZW1pcnJvck5vZGU+LFxuKTogUHJvc2VtaXJyb3JOb2RlPGFueT4gfCBudWxsIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gY2VsbENvbnRlbnQgPyBjZWxsVHlwZS5jcmVhdGVDaGVja2VkKG51bGwsIGNlbGxDb250ZW50KSA6IGNlbGxUeXBlLmNyZWF0ZUFuZEZpbGwoKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlVGFibGUoXG4gICAgc3RhdGU6IEVkaXRvclN0YXRlLFxuICAgIHJvd3NDb3VudDogbnVtYmVyLFxuICAgIGNvbHNDb3VudDogbnVtYmVyLFxuICAgIHdpdGhIZWFkZXJSb3c6IGJvb2xlYW4sXG4gICAgY2VsbENvbnRlbnQ/OiBGcmFnbWVudCB8IFByb3NlbWlycm9yTm9kZSB8IEFycmF5PFByb3NlbWlycm9yTm9kZT4sXG4pOiBQcm9zZW1pcnJvck5vZGUge1xuICAgIGNvbnN0IHR5cGVzID0gdGFibGVOb2RlVHlwZXMoc3RhdGUuc2NoZW1hKTtcbiAgICBjb25zdCBoZWFkZXJDZWxscyA9IFtdO1xuICAgIGNvbnN0IGNlbGxzID0gW107XG5cbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgY29sc0NvdW50OyBpbmRleCArPSAxKSB7XG4gICAgICAgIGNvbnN0IGNlbGwgPSBjcmVhdGVDZWxsKHR5cGVzLmNlbGwsIGNlbGxDb250ZW50KTtcblxuICAgICAgICBpZiAoY2VsbCkge1xuICAgICAgICAgICAgY2VsbHMucHVzaChjZWxsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh3aXRoSGVhZGVyUm93KSB7XG4gICAgICAgICAgICBjb25zdCBoZWFkZXJDZWxsID0gY3JlYXRlQ2VsbCh0eXBlcy5oZWFkZXJfY2VsbCwgY2VsbENvbnRlbnQpO1xuXG4gICAgICAgICAgICBpZiAoaGVhZGVyQ2VsbCkge1xuICAgICAgICAgICAgICAgIGhlYWRlckNlbGxzLnB1c2goaGVhZGVyQ2VsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCByb3dzID0gW107XG5cbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgcm93c0NvdW50OyBpbmRleCArPSAxKSB7XG4gICAgICAgIHJvd3MucHVzaCh0eXBlcy5yb3cuY3JlYXRlQ2hlY2tlZChudWxsLCB3aXRoSGVhZGVyUm93ICYmIGluZGV4ID09PSAwID8gaGVhZGVyQ2VsbHMgOiBjZWxscykpO1xuICAgIH1cblxuICAgIHJldHVybiB0eXBlcy50YWJsZS5jcmVhdGVDaGVja2VkKG51bGwsIHJvd3MpO1xufVxuXG5mdW5jdGlvbiBhZGRUYWJsZShcbiAgICBzdGF0ZTogRWRpdG9yU3RhdGUsXG4gICAgZGlzcGF0Y2g/OiAodHI6IFRyYW5zYWN0aW9uKSA9PiB2b2lkLFxuICAgIHtcbiAgICAgICAgcm93c0NvdW50ID0gMyxcbiAgICAgICAgY29sc0NvdW50ID0gMyxcbiAgICAgICAgd2l0aEhlYWRlclJvdyA9IHRydWUsXG4gICAgICAgIGNlbGxDb250ZW50LFxuICAgIH06IHtcbiAgICAgICAgcm93c0NvdW50PzogbnVtYmVyO1xuICAgICAgICBjb2xzQ291bnQ/OiBudW1iZXI7XG4gICAgICAgIHdpdGhIZWFkZXJSb3c/OiBib29sZWFuO1xuICAgICAgICBjZWxsQ29udGVudD86IEZyYWdtZW50IHwgUHJvc2VtaXJyb3JOb2RlIHwgQXJyYXk8UHJvc2VtaXJyb3JOb2RlPjtcbiAgICB9ID0ge30sXG4pOiB2b2lkIHtcbiAgICBjb25zdCBvZmZzZXQgPSBzdGF0ZS50ci5zZWxlY3Rpb24uYW5jaG9yICsgMTtcblxuICAgIGNvbnN0IG5vZGVzID0gY3JlYXRlVGFibGUoc3RhdGUsIHJvd3NDb3VudCwgY29sc0NvdW50LCB3aXRoSGVhZGVyUm93LCBjZWxsQ29udGVudCk7XG4gICAgY29uc3QgdHIgPSBzdGF0ZS50ci5yZXBsYWNlU2VsZWN0aW9uV2l0aChub2Rlcykuc2Nyb2xsSW50b1ZpZXcoKTtcbiAgICBjb25zdCByZXNvbHZlZFBvcyA9IHRyLmRvYy5yZXNvbHZlKG9mZnNldCk7XG5cbiAgICAvLyBtb3ZlIGN1cnNvciBpbnRvIHRhYmxlXG4gICAgdHIuc2V0U2VsZWN0aW9uKFRleHRTZWxlY3Rpb24ubmVhcihyZXNvbHZlZFBvcykpO1xuXG4gICAgZGlzcGF0Y2g/Lih0cik7XG59XG5cbmV4cG9ydCBjbGFzcyBBZGRUYWJsZUl0ZW0gZXh0ZW5kcyBJdGVtIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKHtydW46IChlZGl0b3IsIHRyKSA9PiBhZGRUYWJsZShlZGl0b3IsIHRyKX0pO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { AllSelection, TextSelection } from 'prosemirror-state';
|
|
2
|
+
import { Item } from './item';
|
|
3
|
+
function setTextAlign(tr, schema, alignment) {
|
|
4
|
+
const { selection, doc } = tr;
|
|
5
|
+
if (!selection || !doc) {
|
|
6
|
+
return tr;
|
|
7
|
+
}
|
|
8
|
+
const { from, to } = selection;
|
|
9
|
+
const { nodes } = schema;
|
|
10
|
+
const tasks = [];
|
|
11
|
+
alignment = alignment || null;
|
|
12
|
+
const allowedNodeTypes = new Set([
|
|
13
|
+
nodes.paragraph,
|
|
14
|
+
// nodes['blockquote'],
|
|
15
|
+
// nodes['listItem'],
|
|
16
|
+
// nodes['heading'],
|
|
17
|
+
]);
|
|
18
|
+
doc.nodesBetween(from, to, (node, pos) => {
|
|
19
|
+
const nodeType = node.type;
|
|
20
|
+
const align = node.attrs.align || null;
|
|
21
|
+
if (align !== alignment && allowedNodeTypes.has(nodeType)) {
|
|
22
|
+
tasks.push({
|
|
23
|
+
node,
|
|
24
|
+
pos,
|
|
25
|
+
nodeType,
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
return true;
|
|
29
|
+
});
|
|
30
|
+
if (!tasks.length) {
|
|
31
|
+
return tr;
|
|
32
|
+
}
|
|
33
|
+
tasks.forEach(job => {
|
|
34
|
+
const { node, pos, nodeType } = job;
|
|
35
|
+
const newAttrs = {
|
|
36
|
+
...node.attrs,
|
|
37
|
+
align: alignment ? alignment : null,
|
|
38
|
+
};
|
|
39
|
+
tr = tr.setNodeMarkup(pos, nodeType, newAttrs, node.marks);
|
|
40
|
+
});
|
|
41
|
+
return tr;
|
|
42
|
+
}
|
|
43
|
+
export class TextAlignItem extends Item {
|
|
44
|
+
constructor(alignment) {
|
|
45
|
+
super({
|
|
46
|
+
active: state => {
|
|
47
|
+
const { selection, doc } = state;
|
|
48
|
+
const { from, to } = selection;
|
|
49
|
+
let keepLooking = true;
|
|
50
|
+
let active = false;
|
|
51
|
+
doc.nodesBetween(from, to, node => {
|
|
52
|
+
if (keepLooking && node.attrs.align === alignment) {
|
|
53
|
+
keepLooking = false;
|
|
54
|
+
active = true;
|
|
55
|
+
}
|
|
56
|
+
return keepLooking;
|
|
57
|
+
});
|
|
58
|
+
return active;
|
|
59
|
+
},
|
|
60
|
+
enable: state => {
|
|
61
|
+
const { selection } = state;
|
|
62
|
+
return selection instanceof TextSelection || selection instanceof AllSelection;
|
|
63
|
+
},
|
|
64
|
+
run: (state, dispatch) => {
|
|
65
|
+
const { schema, selection } = state;
|
|
66
|
+
const tr = setTextAlign(state.tr.setSelection(selection), schema, this.active ? null : alignment);
|
|
67
|
+
if (tr.docChanged) {
|
|
68
|
+
dispatch?.(tr);
|
|
69
|
+
return true;
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1hbGlnbi1pdGVtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmF0dXJhbC1lZGl0b3Ivc3JjL2xpYi91dGlscy9pdGVtcy90ZXh0LWFsaWduLWl0ZW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFDLFlBQVksRUFBRSxhQUFhLEVBQWMsTUFBTSxtQkFBbUIsQ0FBQztBQUMzRSxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBSTVCLFNBQVMsWUFBWSxDQUFDLEVBQWUsRUFBRSxNQUFjLEVBQUUsU0FBMkI7SUFDOUUsTUFBTSxFQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUMsR0FBRyxFQUFFLENBQUM7SUFDNUIsSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLEdBQUcsRUFBRTtRQUNwQixPQUFPLEVBQUUsQ0FBQztLQUNiO0lBQ0QsTUFBTSxFQUFDLElBQUksRUFBRSxFQUFFLEVBQUMsR0FBRyxTQUFTLENBQUM7SUFDN0IsTUFBTSxFQUFDLEtBQUssRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUV2QixNQUFNLEtBQUssR0FJTCxFQUFFLENBQUM7SUFFVCxTQUFTLEdBQUcsU0FBUyxJQUFJLElBQUksQ0FBQztJQUU5QixNQUFNLGdCQUFnQixHQUFHLElBQUksR0FBRyxDQUFDO1FBQzdCLEtBQUssQ0FBQyxTQUFTO1FBQ2YsdUJBQXVCO1FBQ3ZCLHFCQUFxQjtRQUNyQixvQkFBb0I7S0FDdkIsQ0FBQyxDQUFDO0lBRUgsR0FBRyxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFO1FBQ3JDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDM0IsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDO1FBQ3ZDLElBQUksS0FBSyxLQUFLLFNBQVMsSUFBSSxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDdkQsS0FBSyxDQUFDLElBQUksQ0FBQztnQkFDUCxJQUFJO2dCQUNKLEdBQUc7Z0JBQ0gsUUFBUTthQUNYLENBQUMsQ0FBQztTQUNOO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRTtRQUNmLE9BQU8sRUFBRSxDQUFDO0tBQ2I7SUFFRCxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQ2hCLE1BQU0sRUFBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBQyxHQUFHLEdBQUcsQ0FBQztRQUNsQyxNQUFNLFFBQVEsR0FBRztZQUNiLEdBQUcsSUFBSSxDQUFDLEtBQUs7WUFDYixLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUk7U0FDdEMsQ0FBQztRQUVGLEVBQUUsR0FBRyxFQUFFLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvRCxDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sRUFBRSxDQUFDO0FBQ2QsQ0FBQztBQUVELE1BQU0sT0FBTyxhQUFjLFNBQVEsSUFBSTtJQUNuQyxZQUFtQixTQUFvQjtRQUNuQyxLQUFLLENBQUM7WUFDRixNQUFNLEVBQUUsS0FBSyxDQUFDLEVBQUU7Z0JBQ1osTUFBTSxFQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUMsR0FBRyxLQUFLLENBQUM7Z0JBQy9CLE1BQU0sRUFBQyxJQUFJLEVBQUUsRUFBRSxFQUFDLEdBQUcsU0FBUyxDQUFDO2dCQUM3QixJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUM7Z0JBQ3ZCLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQztnQkFDbkIsR0FBRyxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFO29CQUM5QixJQUFJLFdBQVcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssS0FBSyxTQUFTLEVBQUU7d0JBQy9DLFdBQVcsR0FBRyxLQUFLLENBQUM7d0JBQ3BCLE1BQU0sR0FBRyxJQUFJLENBQUM7cUJBQ2pCO29CQUNELE9BQU8sV0FBVyxDQUFDO2dCQUN2QixDQUFDLENBQUMsQ0FBQztnQkFFSCxPQUFPLE1BQU0sQ0FBQztZQUNsQixDQUFDO1lBRUQsTUFBTSxFQUFFLEtBQUssQ0FBQyxFQUFFO2dCQUNaLE1BQU0sRUFBQyxTQUFTLEVBQUMsR0FBRyxLQUFLLENBQUM7Z0JBQzFCLE9BQU8sU0FBUyxZQUFZLGFBQWEsSUFBSSxTQUFTLFlBQVksWUFBWSxDQUFDO1lBQ25GLENBQUM7WUFFRCxHQUFHLEVBQUUsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFXLEVBQUU7Z0JBQzlCLE1BQU0sRUFBQyxNQUFNLEVBQUUsU0FBUyxFQUFDLEdBQUcsS0FBSyxDQUFDO2dCQUVsQyxNQUFNLEVBQUUsR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ2xHLElBQUksRUFBRSxDQUFDLFVBQVUsRUFBRTtvQkFDZixRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDZixPQUFPLElBQUksQ0FBQztpQkFDZjtxQkFBTTtvQkFDSCxPQUFPLEtBQUssQ0FBQztpQkFDaEI7WUFDTCxDQUFDO1NBQ0osQ0FBQyxDQUFDO0lBQ1AsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtOb2RlLCBOb2RlVHlwZSwgU2NoZW1hfSBmcm9tICdwcm9zZW1pcnJvci1tb2RlbCc7XG5pbXBvcnQge0FsbFNlbGVjdGlvbiwgVGV4dFNlbGVjdGlvbiwgVHJhbnNhY3Rpb259IGZyb20gJ3Byb3NlbWlycm9yLXN0YXRlJztcbmltcG9ydCB7SXRlbX0gZnJvbSAnLi9pdGVtJztcblxudHlwZSBBbGlnbm1lbnQgPSAnbGVmdCcgfCAncmlnaHQnIHwgJ2NlbnRlcicgfCAnanVzdGlmeSc7XG5cbmZ1bmN0aW9uIHNldFRleHRBbGlnbih0cjogVHJhbnNhY3Rpb24sIHNjaGVtYTogU2NoZW1hLCBhbGlnbm1lbnQ6IG51bGwgfCBBbGlnbm1lbnQpOiBUcmFuc2FjdGlvbiB7XG4gICAgY29uc3Qge3NlbGVjdGlvbiwgZG9jfSA9IHRyO1xuICAgIGlmICghc2VsZWN0aW9uIHx8ICFkb2MpIHtcbiAgICAgICAgcmV0dXJuIHRyO1xuICAgIH1cbiAgICBjb25zdCB7ZnJvbSwgdG99ID0gc2VsZWN0aW9uO1xuICAgIGNvbnN0IHtub2Rlc30gPSBzY2hlbWE7XG5cbiAgICBjb25zdCB0YXNrczoge1xuICAgICAgICBub2RlOiBOb2RlO1xuICAgICAgICBwb3M6IG51bWJlcjtcbiAgICAgICAgbm9kZVR5cGU6IE5vZGVUeXBlO1xuICAgIH1bXSA9IFtdO1xuXG4gICAgYWxpZ25tZW50ID0gYWxpZ25tZW50IHx8IG51bGw7XG5cbiAgICBjb25zdCBhbGxvd2VkTm9kZVR5cGVzID0gbmV3IFNldChbXG4gICAgICAgIG5vZGVzLnBhcmFncmFwaCxcbiAgICAgICAgLy8gbm9kZXNbJ2Jsb2NrcXVvdGUnXSxcbiAgICAgICAgLy8gbm9kZXNbJ2xpc3RJdGVtJ10sXG4gICAgICAgIC8vIG5vZGVzWydoZWFkaW5nJ10sXG4gICAgXSk7XG5cbiAgICBkb2Mubm9kZXNCZXR3ZWVuKGZyb20sIHRvLCAobm9kZSwgcG9zKSA9PiB7XG4gICAgICAgIGNvbnN0IG5vZGVUeXBlID0gbm9kZS50eXBlO1xuICAgICAgICBjb25zdCBhbGlnbiA9IG5vZGUuYXR0cnMuYWxpZ24gfHwgbnVsbDtcbiAgICAgICAgaWYgKGFsaWduICE9PSBhbGlnbm1lbnQgJiYgYWxsb3dlZE5vZGVUeXBlcy5oYXMobm9kZVR5cGUpKSB7XG4gICAgICAgICAgICB0YXNrcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgICAgIHBvcyxcbiAgICAgICAgICAgICAgICBub2RlVHlwZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0pO1xuXG4gICAgaWYgKCF0YXNrcy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHRyO1xuICAgIH1cblxuICAgIHRhc2tzLmZvckVhY2goam9iID0+IHtcbiAgICAgICAgY29uc3Qge25vZGUsIHBvcywgbm9kZVR5cGV9ID0gam9iO1xuICAgICAgICBjb25zdCBuZXdBdHRycyA9IHtcbiAgICAgICAgICAgIC4uLm5vZGUuYXR0cnMsXG4gICAgICAgICAgICBhbGlnbjogYWxpZ25tZW50ID8gYWxpZ25tZW50IDogbnVsbCxcbiAgICAgICAgfTtcblxuICAgICAgICB0ciA9IHRyLnNldE5vZGVNYXJrdXAocG9zLCBub2RlVHlwZSwgbmV3QXR0cnMsIG5vZGUubWFya3MpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRyO1xufVxuXG5leHBvcnQgY2xhc3MgVGV4dEFsaWduSXRlbSBleHRlbmRzIEl0ZW0ge1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihhbGlnbm1lbnQ6IEFsaWdubWVudCkge1xuICAgICAgICBzdXBlcih7XG4gICAgICAgICAgICBhY3RpdmU6IHN0YXRlID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB7c2VsZWN0aW9uLCBkb2N9ID0gc3RhdGU7XG4gICAgICAgICAgICAgICAgY29uc3Qge2Zyb20sIHRvfSA9IHNlbGVjdGlvbjtcbiAgICAgICAgICAgICAgICBsZXQga2VlcExvb2tpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGxldCBhY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBkb2Mubm9kZXNCZXR3ZWVuKGZyb20sIHRvLCBub2RlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGtlZXBMb29raW5nICYmIG5vZGUuYXR0cnMuYWxpZ24gPT09IGFsaWdubWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAga2VlcExvb2tpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGtlZXBMb29raW5nO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjdGl2ZTtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGVuYWJsZTogc3RhdGUgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHtzZWxlY3Rpb259ID0gc3RhdGU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGVjdGlvbiBpbnN0YW5jZW9mIFRleHRTZWxlY3Rpb24gfHwgc2VsZWN0aW9uIGluc3RhbmNlb2YgQWxsU2VsZWN0aW9uO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgcnVuOiAoc3RhdGUsIGRpc3BhdGNoKTogYm9vbGVhbiA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qge3NjaGVtYSwgc2VsZWN0aW9ufSA9IHN0YXRlO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgdHIgPSBzZXRUZXh0QWxpZ24oc3RhdGUudHIuc2V0U2VsZWN0aW9uKHNlbGVjdGlvbiksIHNjaGVtYSwgdGhpcy5hY3RpdmUgPyBudWxsIDogYWxpZ25tZW50KTtcbiAgICAgICAgICAgICAgICBpZiAodHIuZG9jQ2hhbmdlZCkge1xuICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaD8uKHRyKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { Item } from './item';
|
|
2
|
+
import { toggleMark } from 'prosemirror-commands';
|
|
3
|
+
export function markActive(state, type) {
|
|
4
|
+
const { from, $from, to, empty } = state.selection;
|
|
5
|
+
if (empty) {
|
|
6
|
+
return !!type.isInSet(state.storedMarks || $from.marks());
|
|
7
|
+
}
|
|
8
|
+
else {
|
|
9
|
+
return state.doc.rangeHasMark(from, to, type);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Convert built-in `MenuItem` into our Angular specific `Item`
|
|
14
|
+
*/
|
|
15
|
+
export function menuItemToItem(item) {
|
|
16
|
+
return new Item(item.spec);
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* From a `Command`, creates a new `Item` that will have an automatic `enable` spec
|
|
20
|
+
*/
|
|
21
|
+
export function cmdToItem(cmd, options = {}) {
|
|
22
|
+
const passedOptions = {
|
|
23
|
+
run: cmd,
|
|
24
|
+
...options,
|
|
25
|
+
};
|
|
26
|
+
if (!options.enable && !options.select) {
|
|
27
|
+
passedOptions.enable = state => cmd(state);
|
|
28
|
+
}
|
|
29
|
+
return new Item(passedOptions);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* From a `MarkType`, creates a new `Item` that will have an automatic `active` and `enable` spec
|
|
33
|
+
*/
|
|
34
|
+
export function markTypeToItem(markType) {
|
|
35
|
+
return cmdToItem(toggleMark(markType), {
|
|
36
|
+
active(state) {
|
|
37
|
+
return markActive(state, markType);
|
|
38
|
+
},
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uYXR1cmFsLWVkaXRvci9zcmMvbGliL3V0aWxzL2l0ZW1zL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFVLFVBQVUsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBRXpELE1BQU0sVUFBVSxVQUFVLENBQUMsS0FBa0IsRUFBRSxJQUFjO0lBQ3pELE1BQU0sRUFBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDO0lBQ2pELElBQUksS0FBSyxFQUFFO1FBQ1AsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsV0FBVyxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0tBQzdEO1NBQU07UUFDSCxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7S0FDakQ7QUFDTCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsY0FBYyxDQUFDLElBQWM7SUFDekMsT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDL0IsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLFNBQVMsQ0FBQyxHQUFZLEVBQUUsVUFBaUMsRUFBRTtJQUN2RSxNQUFNLGFBQWEsR0FBaUI7UUFDaEMsR0FBRyxFQUFFLEdBQUc7UUFDUixHQUFHLE9BQU87S0FDYixDQUFDO0lBRUYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFO1FBQ3BDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDOUM7SUFFRCxPQUFPLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQ25DLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSxjQUFjLENBQUMsUUFBa0I7SUFDN0MsT0FBTyxTQUFTLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1FBQ25DLE1BQU0sQ0FBQyxLQUFrQjtZQUNyQixPQUFPLFVBQVUsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDdkMsQ0FBQztLQUNKLENBQUMsQ0FBQztBQUNQLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0VkaXRvclN0YXRlfSBmcm9tICdwcm9zZW1pcnJvci1zdGF0ZSc7XG5pbXBvcnQge01hcmtUeXBlfSBmcm9tICdwcm9zZW1pcnJvci1tb2RlbCc7XG5pbXBvcnQge01lbnVJdGVtLCBNZW51SXRlbVNwZWN9IGZyb20gJ3Byb3NlbWlycm9yLW1lbnUnO1xuaW1wb3J0IHtJdGVtfSBmcm9tICcuL2l0ZW0nO1xuaW1wb3J0IHtDb21tYW5kLCB0b2dnbGVNYXJrfSBmcm9tICdwcm9zZW1pcnJvci1jb21tYW5kcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXJrQWN0aXZlKHN0YXRlOiBFZGl0b3JTdGF0ZSwgdHlwZTogTWFya1R5cGUpOiBib29sZWFuIHtcbiAgICBjb25zdCB7ZnJvbSwgJGZyb20sIHRvLCBlbXB0eX0gPSBzdGF0ZS5zZWxlY3Rpb247XG4gICAgaWYgKGVtcHR5KSB7XG4gICAgICAgIHJldHVybiAhIXR5cGUuaXNJblNldChzdGF0ZS5zdG9yZWRNYXJrcyB8fCAkZnJvbS5tYXJrcygpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gc3RhdGUuZG9jLnJhbmdlSGFzTWFyayhmcm9tLCB0bywgdHlwZSk7XG4gICAgfVxufVxuXG4vKipcbiAqIENvbnZlcnQgYnVpbHQtaW4gYE1lbnVJdGVtYCBpbnRvIG91ciBBbmd1bGFyIHNwZWNpZmljIGBJdGVtYFxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVudUl0ZW1Ub0l0ZW0oaXRlbTogTWVudUl0ZW0pOiBJdGVtIHtcbiAgICByZXR1cm4gbmV3IEl0ZW0oaXRlbS5zcGVjKTtcbn1cblxuLyoqXG4gKiBGcm9tIGEgYENvbW1hbmRgLCBjcmVhdGVzIGEgbmV3IGBJdGVtYCB0aGF0IHdpbGwgaGF2ZSBhbiBhdXRvbWF0aWMgYGVuYWJsZWAgc3BlY1xuICovXG5leHBvcnQgZnVuY3Rpb24gY21kVG9JdGVtKGNtZDogQ29tbWFuZCwgb3B0aW9uczogUGFydGlhbDxNZW51SXRlbVNwZWM+ID0ge30pOiBJdGVtIHtcbiAgICBjb25zdCBwYXNzZWRPcHRpb25zOiBNZW51SXRlbVNwZWMgPSB7XG4gICAgICAgIHJ1bjogY21kLFxuICAgICAgICAuLi5vcHRpb25zLFxuICAgIH07XG5cbiAgICBpZiAoIW9wdGlvbnMuZW5hYmxlICYmICFvcHRpb25zLnNlbGVjdCkge1xuICAgICAgICBwYXNzZWRPcHRpb25zLmVuYWJsZSA9IHN0YXRlID0+IGNtZChzdGF0ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBJdGVtKHBhc3NlZE9wdGlvbnMpO1xufVxuXG4vKipcbiAqIEZyb20gYSBgTWFya1R5cGVgLCBjcmVhdGVzIGEgbmV3IGBJdGVtYCB0aGF0IHdpbGwgaGF2ZSBhbiBhdXRvbWF0aWMgYGFjdGl2ZWAgYW5kIGBlbmFibGVgIHNwZWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hcmtUeXBlVG9JdGVtKG1hcmtUeXBlOiBNYXJrVHlwZSk6IEl0ZW0ge1xuICAgIHJldHVybiBjbWRUb0l0ZW0odG9nZ2xlTWFyayhtYXJrVHlwZSksIHtcbiAgICAgICAgYWN0aXZlKHN0YXRlOiBFZGl0b3JTdGF0ZSk6IGJvb2xlYW4ge1xuICAgICAgICAgICAgcmV0dXJuIG1hcmtBY3RpdmUoc3RhdGUsIG1hcmtUeXBlKTtcbiAgICAgICAgfSxcbiAgICB9KTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { wrapInList } from 'prosemirror-schema-list';
|
|
2
|
+
import { cmdToItem } from './utils';
|
|
3
|
+
export function wrapListItem(nodeType) {
|
|
4
|
+
return cmdToItem(wrapInList(nodeType));
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3JhcC1saXN0LWl0ZW0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uYXR1cmFsLWVkaXRvci9zcmMvbGliL3V0aWxzL2l0ZW1zL3dyYXAtbGlzdC1pdGVtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUNuRCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBRWxDLE1BQU0sVUFBVSxZQUFZLENBQUMsUUFBa0I7SUFDM0MsT0FBTyxTQUFTLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFDM0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Tm9kZVR5cGV9IGZyb20gJ3Byb3NlbWlycm9yLW1vZGVsJztcbmltcG9ydCB7SXRlbX0gZnJvbSAnLi9pdGVtJztcbmltcG9ydCB7d3JhcEluTGlzdH0gZnJvbSAncHJvc2VtaXJyb3Itc2NoZW1hLWxpc3QnO1xuaW1wb3J0IHtjbWRUb0l0ZW19IGZyb20gJy4vdXRpbHMnO1xuXG5leHBvcnQgZnVuY3Rpb24gd3JhcExpc3RJdGVtKG5vZGVUeXBlOiBOb2RlVHlwZSk6IEl0ZW0ge1xuICAgIHJldHVybiBjbWRUb0l0ZW0od3JhcEluTGlzdChub2RlVHlwZSkpO1xufVxuIl19
|