@lblod/ember-rdfa-editor 13.2.1 → 13.3.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/declarations/components/ember-node/embedded-editor.d.ts +14 -34
- package/declarations/components/ember-node/inline-rdfa.d.ts +2 -2
- package/declarations/components/ember-node/link.d.ts +18 -12
- package/declarations/components/pill.d.ts +15 -7
- package/declarations/components/plugins/link/_private/link-editor.d.ts +37 -0
- package/declarations/components/plugins/link/link-editor.d.ts +6 -20
- package/declarations/components/plugins/link/link-menu.d.ts +3 -0
- package/declarations/components/plugins/link/link-sidebar-widget.d.ts +16 -0
- package/declarations/plugins/link/input-rule.d.ts +19 -0
- package/declarations/plugins/link/nodes/link.d.ts +2 -0
- package/declarations/plugins/link/parser.d.ts +17 -0
- package/dist/_app_/components/plugins/link/_private/link-editor.js +1 -0
- package/dist/_app_/components/plugins/link/link-sidebar-widget.js +1 -0
- package/dist/components/ember-node/embedded-editor.js +13 -29
- package/dist/components/ember-node/embedded-editor.js.map +1 -1
- package/dist/components/ember-node/inline-rdfa.js +12 -4
- package/dist/components/ember-node/inline-rdfa.js.map +1 -1
- package/dist/components/ember-node/link.js +86 -49
- package/dist/components/ember-node/link.js.map +1 -1
- package/dist/components/ember-node/slot.js +10 -4
- package/dist/components/ember-node/slot.js.map +1 -1
- package/dist/components/pill.js +12 -3
- package/dist/components/pill.js.map +1 -1
- package/dist/components/plugins/link/_private/link-editor.js +128 -0
- package/dist/components/plugins/link/_private/link-editor.js.map +1 -0
- package/dist/components/plugins/link/link-editor.js +5 -78
- package/dist/components/plugins/link/link-editor.js.map +1 -1
- package/dist/components/plugins/link/link-menu.js +25 -8
- package/dist/components/plugins/link/link-menu.js.map +1 -1
- package/dist/components/plugins/link/link-sidebar-widget.js +40 -0
- package/dist/components/plugins/link/link-sidebar-widget.js.map +1 -0
- package/dist/nodes/inline-rdfa.js.map +1 -1
- package/dist/plugins/link/input-rule.js +82 -0
- package/dist/plugins/link/input-rule.js.map +1 -0
- package/dist/plugins/link/nodes/link.js +11 -1
- package/dist/plugins/link/nodes/link.js.map +1 -1
- package/dist/plugins/link/parser.js +58 -0
- package/dist/plugins/link/parser.js.map +1 -0
- package/package.json +4 -1
- package/scss/_c-formatting-marks.scss +0 -1
- package/scss/_c-link.scss +27 -27
- package/scss/_c-table.scss +4 -0
- package/vendor/ember-rdfa-editor.css +26 -25
|
@@ -1,49 +1,29 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
* Based on the footnotes example from https://github.com/ProseMirror/website
|
|
4
|
-
*
|
|
5
|
-
* Copyright (C) 2015-2017 by Marijn Haverbeke <marijnh@gmail.com> and others
|
|
6
|
-
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
7
|
-
* of this software and associated documentation files (the "Software"), to deal
|
|
8
|
-
* in the Software without restriction, including without limitation the rights
|
|
9
|
-
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
10
|
-
* copies of the Software, and to permit persons to whom the Software is
|
|
11
|
-
* furnished to do so, subject to the following conditions:
|
|
12
|
-
*
|
|
13
|
-
* The above copyright notice and this permission notice shall be included in
|
|
14
|
-
* all copies or substantial portions of the Software.
|
|
15
|
-
*
|
|
16
|
-
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
17
|
-
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
18
|
-
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
19
|
-
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
20
|
-
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
21
|
-
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
22
|
-
* THE SOFTWARE.
|
|
23
|
-
*/
|
|
24
1
|
import Component from '@glimmer/component';
|
|
25
2
|
import type { EmberNodeArgs } from '#root/utils/ember-node.ts';
|
|
26
3
|
import type IntlService from 'ember-intl/services/intl';
|
|
27
4
|
import { EditorState, Plugin, Transaction, type Command } from 'prosemirror-state';
|
|
28
5
|
import SayView from '#root/core/say-view.ts';
|
|
29
6
|
import type { NodeViewConstructor } from 'prosemirror-view';
|
|
30
|
-
type
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
[
|
|
7
|
+
type Signature = {
|
|
8
|
+
Element: HTMLSpanElement;
|
|
9
|
+
Args: EmberNodeArgs & {
|
|
10
|
+
placeholder?: string;
|
|
11
|
+
initEditor?: (view: SayView) => void;
|
|
12
|
+
keymap?: {
|
|
13
|
+
[key: string]: Command;
|
|
14
|
+
};
|
|
15
|
+
plugins?: Plugin[];
|
|
16
|
+
nodeViews?: {
|
|
17
|
+
[node: string]: NodeViewConstructor;
|
|
18
|
+
};
|
|
19
|
+
onSelected?: (selected: boolean, innerState: EditorState) => void;
|
|
39
20
|
};
|
|
40
|
-
onSelected?: (selected: boolean, innerState: EditorState) => void;
|
|
41
21
|
};
|
|
42
22
|
/**
|
|
43
23
|
* An embedded editor to use for *inline* content. This way you can specify extra content for an
|
|
44
24
|
* inline (atom) node. For block content, use content directly instead ({{yield}} in ember-nodes).
|
|
45
25
|
*/
|
|
46
|
-
export default class EmbeddedEditor extends Component<
|
|
26
|
+
export default class EmbeddedEditor extends Component<Signature> {
|
|
47
27
|
intl: IntlService;
|
|
48
28
|
innerView: SayView | null;
|
|
49
29
|
contentWrapper: Element | null;
|
|
@@ -4,8 +4,8 @@ import type { EmberNodeArgs } from '#root/utils/ember-node.ts';
|
|
|
4
4
|
export default class InlineRdfaComponent extends Component<EmberNodeArgs> {
|
|
5
5
|
innerView?: SayView;
|
|
6
6
|
get plugins(): import("prosemirror-state").Plugin<{
|
|
7
|
-
activeNode?: import("../../utils/_private/types").ResolvedPNode;
|
|
7
|
+
activeNode?: import("../../utils/_private/types.ts").ResolvedPNode;
|
|
8
8
|
}>[];
|
|
9
|
-
get controller(): import("
|
|
9
|
+
get controller(): import("../../index.ts").SayController;
|
|
10
10
|
initEditor(view: SayView): void;
|
|
11
11
|
}
|
|
@@ -1,21 +1,27 @@
|
|
|
1
1
|
import Component from '@glimmer/component';
|
|
2
2
|
import type { EmberNodeArgs } from '#root/utils/ember-node.ts';
|
|
3
|
-
import {
|
|
4
|
-
import type
|
|
3
|
+
import { type LinkParser } from '#root/plugins/link/parser.ts';
|
|
4
|
+
import type IntlService from 'ember-intl/services/intl';
|
|
5
5
|
export default class Link extends Component<EmberNodeArgs> {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
intl: IntlService;
|
|
7
|
+
hideTooltip: boolean;
|
|
8
|
+
get isNewLink(): boolean | undefined;
|
|
9
|
+
selectionChangeHandler: (selected: boolean) => void;
|
|
9
10
|
get href(): string;
|
|
10
|
-
|
|
11
|
-
|
|
11
|
+
get link(): {
|
|
12
|
+
node: import("prosemirror-model").Node;
|
|
13
|
+
pos: number;
|
|
14
|
+
} | undefined;
|
|
15
|
+
get linkParser(): LinkParser;
|
|
16
|
+
get linkParserResult(): import("#root/plugins/link/parser.ts").LinkParserResult;
|
|
17
|
+
get linkTitle(): string;
|
|
18
|
+
get linkIcon(): import("@ember/component/template-only").TOC<import("@appuniversum/ember-appuniversum/components/icons/circle-x.js").CircleXIconSignature> | undefined;
|
|
19
|
+
get controller(): import("../../index.ts").SayController;
|
|
12
20
|
get node(): import("prosemirror-model").Node;
|
|
13
21
|
get selected(): boolean;
|
|
14
22
|
get interactive(): boolean;
|
|
15
23
|
get class(): string;
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
onClick(event: KeyboardEvent): void;
|
|
20
|
-
remove(): void;
|
|
24
|
+
onClick(event: PointerEvent): void;
|
|
25
|
+
get shouldShowTooltip(): boolean | undefined;
|
|
26
|
+
onKeyUp: (event: KeyboardEvent) => void;
|
|
21
27
|
}
|
|
@@ -1,15 +1,23 @@
|
|
|
1
1
|
import Component from '@glimmer/component';
|
|
2
2
|
import type { ComponentLike } from '@glint/template';
|
|
3
3
|
declare const PILL_SIZES: readonly ["small"];
|
|
4
|
-
type
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
4
|
+
export type PillComponentSignature = {
|
|
5
|
+
Element: HTMLSpanElement;
|
|
6
|
+
Args: {
|
|
7
|
+
skin?: 'border' | 'action' | 'ongoing' | 'link' | 'success' | 'warning' | 'error';
|
|
8
|
+
size?: (typeof PILL_SIZES)[number];
|
|
9
|
+
iconAlignment?: 'left' | 'right';
|
|
10
|
+
icon?: ComponentLike<{
|
|
11
|
+
Element: Element;
|
|
12
|
+
}>;
|
|
13
|
+
};
|
|
14
|
+
Blocks: {
|
|
15
|
+
default: [];
|
|
16
|
+
};
|
|
9
17
|
};
|
|
10
|
-
export default class PillComponent extends Component<
|
|
18
|
+
export default class PillComponent extends Component<PillComponentSignature> {
|
|
11
19
|
get skin(): string;
|
|
12
20
|
get size(): string;
|
|
13
|
-
get iconAlignment():
|
|
21
|
+
get iconAlignment(): PillComponentSignature['Args']['iconAlignment'];
|
|
14
22
|
}
|
|
15
23
|
export {};
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import Component from '@glimmer/component';
|
|
2
|
+
import type SayController from '#root/core/say-controller.ts';
|
|
3
|
+
import type { LinkParser } from '#root/plugins/link/parser.js';
|
|
4
|
+
import type { PNode } from '#root/prosemirror-aliases.js';
|
|
5
|
+
type Args = {
|
|
6
|
+
controller: SayController;
|
|
7
|
+
linkParser: LinkParser;
|
|
8
|
+
link: {
|
|
9
|
+
pos: number;
|
|
10
|
+
node: PNode;
|
|
11
|
+
};
|
|
12
|
+
showTitle?: boolean;
|
|
13
|
+
};
|
|
14
|
+
export default class LinkEditor extends Component<Args> {
|
|
15
|
+
get isNewLink(): boolean;
|
|
16
|
+
parseLink: LinkParser;
|
|
17
|
+
get linkParserResult(): import("#root/plugins/link/parser.js").LinkParserResult;
|
|
18
|
+
get controller(): SayController;
|
|
19
|
+
get link(): {
|
|
20
|
+
pos: number;
|
|
21
|
+
node: PNode;
|
|
22
|
+
};
|
|
23
|
+
get href(): string | undefined;
|
|
24
|
+
setHref(event: InputEvent): void;
|
|
25
|
+
get linkText(): string;
|
|
26
|
+
setLinkText(event: InputEvent): void;
|
|
27
|
+
selectInputElement(event: FocusEvent): void;
|
|
28
|
+
remove(): void;
|
|
29
|
+
disableDragging: import("ember-modifier").FunctionBasedModifier<{
|
|
30
|
+
Args: {
|
|
31
|
+
Positional: unknown[];
|
|
32
|
+
Named: import("ember-modifier/-private/signature").EmptyObject;
|
|
33
|
+
};
|
|
34
|
+
Element: HTMLElement;
|
|
35
|
+
}>;
|
|
36
|
+
}
|
|
37
|
+
export {};
|
|
@@ -1,20 +1,6 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
export default
|
|
7
|
-
LinkExternalIcon: import("@ember/component/template-only").TOC<import("@appuniversum/ember-appuniversum/components/icons/link-external").LinkExternalIconSignature>;
|
|
8
|
-
LinkBrokenIcon: import("@ember/component/template-only").TOC<import("@appuniversum/ember-appuniversum/components/icons/link-broken").LinkBrokenIconSignature>;
|
|
9
|
-
get controller(): SayController | undefined;
|
|
10
|
-
get href(): string | undefined;
|
|
11
|
-
set href(value: string | undefined);
|
|
12
|
-
setHref(event: InputEvent): void;
|
|
13
|
-
selectHref(event: InputEvent): void;
|
|
14
|
-
get link(): {
|
|
15
|
-
pos: number;
|
|
16
|
-
node: import("prosemirror-model").Node;
|
|
17
|
-
} | undefined;
|
|
18
|
-
remove(): void;
|
|
19
|
-
}
|
|
20
|
-
export {};
|
|
1
|
+
import LinkSidebarWidget from './link-sidebar-widget';
|
|
2
|
+
/**
|
|
3
|
+
* @deprecated use {@link LinkSidebarWidget} instead
|
|
4
|
+
*/
|
|
5
|
+
declare const LinkEditor: typeof LinkSidebarWidget;
|
|
6
|
+
export default LinkEditor;
|
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
import Component from '@glimmer/component';
|
|
2
2
|
import type SayController from '#root/core/say-controller.ts';
|
|
3
|
+
import { type LinkParser } from '#root/plugins/link/parser.ts';
|
|
3
4
|
type Args = {
|
|
4
5
|
controller: SayController;
|
|
5
6
|
onActivate?: () => void;
|
|
7
|
+
linkParser?: LinkParser;
|
|
6
8
|
};
|
|
7
9
|
export default class LinkMenu extends Component<Args> {
|
|
8
10
|
LinkIcon: import("@ember/component/template-only").TOC<import("@appuniversum/ember-appuniversum/components/icons/link").LinkIconSignature>;
|
|
9
11
|
get controller(): SayController;
|
|
12
|
+
parseLink: LinkParser;
|
|
10
13
|
get schema(): import("prosemirror-model").Schema<any, any>;
|
|
11
14
|
get canInsert(): boolean;
|
|
12
15
|
insert(): void;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import Component from '@glimmer/component';
|
|
2
|
+
import type SayController from '#root/core/say-controller.ts';
|
|
3
|
+
import type { LinkParser } from '#root/plugins/link/parser.js';
|
|
4
|
+
type Args = {
|
|
5
|
+
controller?: SayController;
|
|
6
|
+
linkParser?: LinkParser;
|
|
7
|
+
};
|
|
8
|
+
export default class LinkSidebarWidget extends Component<Args> {
|
|
9
|
+
get linkParser(): LinkParser;
|
|
10
|
+
get controller(): SayController | undefined;
|
|
11
|
+
get link(): {
|
|
12
|
+
pos: number;
|
|
13
|
+
node: import("prosemirror-model").Node;
|
|
14
|
+
} | undefined;
|
|
15
|
+
}
|
|
16
|
+
export {};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { InputRule } from 'prosemirror-inputrules';
|
|
2
|
+
import { type LinkParser } from './parser.ts';
|
|
3
|
+
import type { NodeType } from 'prosemirror-model';
|
|
4
|
+
type LinkInputRuleOptions = {
|
|
5
|
+
nodeType: NodeType;
|
|
6
|
+
regex?: RegExp;
|
|
7
|
+
linkParser?: LinkParser;
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* Input rule which is able to detect plain text links and convert them to a link object.
|
|
11
|
+
* It may be configured with a `nodeType`, a custom `regex` and a custom `linkParser`.
|
|
12
|
+
*
|
|
13
|
+
* If using a custom `regex`, it should meet the following conditions:
|
|
14
|
+
* - The first group should capture the text typed before the (possible) link
|
|
15
|
+
* - The second group should capture the text representing the (possible) link
|
|
16
|
+
* - The third group should capture the text typed after the (possible) link
|
|
17
|
+
*/
|
|
18
|
+
export declare const link_input_rule: ({ nodeType, regex, linkParser, }: LinkInputRuleOptions) => InputRule;
|
|
19
|
+
export {};
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
import { type LinkParser } from '../parser.ts';
|
|
1
2
|
type LinkOptions = {
|
|
2
3
|
interactive?: boolean;
|
|
3
4
|
rdfaAware?: boolean;
|
|
5
|
+
linkParser?: LinkParser;
|
|
4
6
|
};
|
|
5
7
|
export declare const link: (options?: LinkOptions) => import("../../../core/say-node-spec.ts").default;
|
|
6
8
|
export declare const linkView: (options?: LinkOptions) => (controller: import("../../../index.ts").SayController) => import("../../../utils/ember-node.ts").SayNodeViewConstructor;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type CountryCode } from 'libphonenumber-js';
|
|
2
|
+
export type LinkParserResult = {
|
|
3
|
+
isSuccessful: true;
|
|
4
|
+
value: string;
|
|
5
|
+
errors?: never;
|
|
6
|
+
} | {
|
|
7
|
+
isSuccessful: false;
|
|
8
|
+
value?: never;
|
|
9
|
+
errors: [string, ...string[]];
|
|
10
|
+
};
|
|
11
|
+
export type LinkParser = (input?: string) => LinkParserResult;
|
|
12
|
+
type DefaultLinkParserOptions = {
|
|
13
|
+
defaultCountryCode?: CountryCode;
|
|
14
|
+
supportedProtocols?: string[];
|
|
15
|
+
};
|
|
16
|
+
export declare const defaultLinkParser: ({ defaultCountryCode, supportedProtocols, }?: DefaultLinkParserOptions) => LinkParser;
|
|
17
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from "@lblod/ember-rdfa-editor/components/plugins/link/_private/link-editor";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from "@lblod/ember-rdfa-editor/components/plugins/link/link-sidebar-widget";
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import didInsert from '@ember/render-modifiers/modifiers/did-insert';
|
|
2
|
+
import didUpdate from '@ember/render-modifiers/modifiers/did-update';
|
|
1
3
|
import { action } from '@ember/object';
|
|
2
4
|
import { service } from '@ember/service';
|
|
3
5
|
import Component from '@glimmer/component';
|
|
@@ -11,34 +13,10 @@ import SayView from '../../core/say-view.js';
|
|
|
11
13
|
import { StepMap, AttrStep } from 'prosemirror-transform';
|
|
12
14
|
import { keymap } from 'prosemirror-keymap';
|
|
13
15
|
import { precompileTemplate } from '@ember/template-compilation';
|
|
14
|
-
import { g, i, n } from 'decorator-transforms/runtime';
|
|
15
16
|
import { setComponentTemplate } from '@ember/component';
|
|
17
|
+
import { g, i, n } from 'decorator-transforms/runtime';
|
|
16
18
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
*
|
|
21
|
-
* Based on the footnotes example from https://github.com/ProseMirror/website
|
|
22
|
-
*
|
|
23
|
-
* Copyright (C) 2015-2017 by Marijn Haverbeke <marijnh@gmail.com> and others
|
|
24
|
-
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
25
|
-
* of this software and associated documentation files (the "Software"), to deal
|
|
26
|
-
* in the Software without restriction, including without limitation the rights
|
|
27
|
-
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
28
|
-
* copies of the Software, and to permit persons to whom the Software is
|
|
29
|
-
* furnished to do so, subject to the following conditions:
|
|
30
|
-
*
|
|
31
|
-
* The above copyright notice and this permission notice shall be included in
|
|
32
|
-
* all copies or substantial portions of the Software.
|
|
33
|
-
*
|
|
34
|
-
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
35
|
-
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
36
|
-
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
37
|
-
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
38
|
-
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
39
|
-
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
40
|
-
* THE SOFTWARE.
|
|
41
|
-
*/
|
|
19
|
+
// eslint-disable-next-line ember/no-at-ember-render-modifiers
|
|
42
20
|
|
|
43
21
|
/**
|
|
44
22
|
* An embedded editor to use for *inline* content. This way you can specify extra content for an
|
|
@@ -102,7 +80,6 @@ class EmbeddedEditor extends Component {
|
|
|
102
80
|
state: EditorState.create({
|
|
103
81
|
doc: this.node,
|
|
104
82
|
plugins: [keymap(this.keymap), ...this.plugins]
|
|
105
|
-
// the schema is derived from 'doc' key and can't be customized
|
|
106
83
|
}),
|
|
107
84
|
attributes: {
|
|
108
85
|
...(this.args.placeholder && {
|
|
@@ -115,7 +92,6 @@ class EmbeddedEditor extends Component {
|
|
|
115
92
|
// Kludge to prevent issues due to the fact that the whole
|
|
116
93
|
// footnote is node-selected (and thus DOM-selected) when
|
|
117
94
|
// the parent editor is focused.
|
|
118
|
-
|
|
119
95
|
if (this.outerView.hasFocus()) this.innerView?.focus();
|
|
120
96
|
},
|
|
121
97
|
focus: () => {
|
|
@@ -277,8 +253,16 @@ class EmbeddedEditor extends Component {
|
|
|
277
253
|
this.innerView?.destroy();
|
|
278
254
|
this.innerView = null;
|
|
279
255
|
}
|
|
256
|
+
static {
|
|
257
|
+
setComponentTemplate(precompileTemplate("\n <span {{didInsert this.didInsertContentWrapper}} {{didUpdate this.onNodeUpdate @node}} {{didUpdate this.onSelected @selected}} {{didUpdate this.onDecorationsUpdate @contentDecorations}} ...attributes>\n </span>\n ", {
|
|
258
|
+
strictMode: true,
|
|
259
|
+
scope: () => ({
|
|
260
|
+
didInsert,
|
|
261
|
+
didUpdate
|
|
262
|
+
})
|
|
263
|
+
}), this);
|
|
264
|
+
}
|
|
280
265
|
}
|
|
281
|
-
setComponentTemplate(TEMPLATE, EmbeddedEditor);
|
|
282
266
|
|
|
283
267
|
export { EmbeddedEditor as default };
|
|
284
268
|
//# sourceMappingURL=embedded-editor.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"embedded-editor.js","sources":["../../../src/components/ember-node/embedded-editor.ts"],"sourcesContent":["/**\n *\n * Based on the footnotes example from https://github.com/ProseMirror/website\n *\n * Copyright (C) 2015-2017 by Marijn Haverbeke <marijnh@gmail.com> and others\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nimport { action } from '@ember/object';\nimport { service } from '@ember/service';\nimport Component from '@glimmer/component';\nimport type { EmberNodeArgs } from '#root/utils/ember-node.ts';\nimport type IntlService from 'ember-intl/services/intl';\nimport { v4 as uuid } from 'uuid';\nimport { redo, undo } from '#root/plugins/history/index.ts';\nimport { isSome, unwrap } from '#root/utils/_private/option.ts';\nimport { lastKeyPressedPluginKey } from '#root/plugins/last-key-pressed/index.ts';\nimport {\n EditorState,\n NodeSelection,\n Plugin,\n Selection,\n TextSelection,\n Transaction,\n type Command,\n} from 'prosemirror-state';\nimport { embeddedEditorBaseKeymap } from '#root/core/keymap.ts';\nimport SayView from '#root/core/say-view.ts';\nimport type { NodeViewConstructor } from 'prosemirror-view';\nimport { AttrStep, Step, StepMap } from 'prosemirror-transform';\nimport { keymap } from 'prosemirror-keymap';\n\ntype Args = EmberNodeArgs & {\n placeholder: string;\n initEditor?: (view: SayView) => void;\n /* override the keymap. */\n keymap?: { [key: string]: Command };\n /* editor plugins to add */\n plugins?: Plugin[];\n nodeViews?: {\n [node: string]: NodeViewConstructor;\n };\n onSelected?: (selected: boolean, innerState: EditorState) => void;\n};\n\n/**\n * An embedded editor to use for *inline* content. This way you can specify extra content for an\n * inline (atom) node. For block content, use content directly instead ({{yield}} in ember-nodes).\n */\nexport default class EmbeddedEditor extends Component<Args> {\n @service declare intl: IntlService;\n innerView: SayView | null = null;\n\n contentWrapper: Element | null = null;\n\n editorId = uuid();\n\n get outerView() {\n return this.args.view;\n }\n\n get node() {\n return this.args.node;\n }\n\n get schema() {\n return this.controller.schema;\n }\n\n get pos() {\n return this.args.getPos();\n }\n\n get controller() {\n return this.args.controller;\n }\n\n get plugins() {\n return this.args.plugins || [];\n }\n\n get keymap() {\n const undoRedoMap = {\n 'Mod-z': () =>\n undo(this.outerView.state, this.outerView.dispatch.bind(this)),\n 'Mod-Z': () =>\n undo(this.outerView.state, this.outerView.dispatch.bind(this)),\n 'Mod-y': () =>\n redo(this.outerView.state, this.outerView.dispatch.bind(this)),\n 'Mod-Y': () =>\n redo(this.outerView.state, this.outerView.dispatch.bind(this)),\n };\n\n if (this.args.keymap) {\n return {\n ...this.args.keymap,\n ...undoRedoMap,\n };\n } else {\n return { ...embeddedEditorBaseKeymap(this.schema), ...undoRedoMap };\n }\n }\n\n get nodeViews() {\n return this.outerView.props.nodeViews;\n }\n\n @action\n didInsertContentWrapper(target: Element) {\n this.contentWrapper = target;\n this.innerView = new SayView(\n this.contentWrapper,\n {\n decorations: () => this.args.contentDecorations,\n editable: () => {\n return this.outerView.editable;\n },\n state: EditorState.create({\n doc: this.node,\n plugins: [keymap(this.keymap), ...this.plugins],\n // the schema is derived from 'doc' key and can't be customized\n }),\n attributes: {\n ...(this.args.placeholder && {\n 'data-placeholder': this.args.placeholder,\n }),\n },\n dispatchTransaction: this.dispatchInner,\n handleDOMEvents: {\n mousedown: () => {\n // Kludge to prevent issues due to the fact that the whole\n // footnote is node-selected (and thus DOM-selected) when\n // the parent editor is focused.\n\n if (this.outerView.hasFocus()) this.innerView?.focus();\n },\n focus: () => {\n const pos = this.pos;\n if (pos !== undefined) {\n const outerSelectionTr = this.outerView.state.tr;\n const outerSelection = new NodeSelection(\n this.outerView.state.doc.resolve(pos),\n );\n outerSelectionTr.setSelection(outerSelection);\n this.outerView.dispatch(outerSelectionTr);\n }\n\n if (this.innerView) {\n this.args.controller.setActiveView(this.innerView);\n }\n },\n },\n // These handlers are needed to fix part of a bug in Gecko (firefox): https://bugzilla.mozilla.org/show_bug.cgi?id=1612076\n handleKeyDown: ({ state: { selection, doc } }, event) => {\n if (selection.empty) {\n if (selection.from === 0) {\n // At the start of the embedded editor\n if (event.code === 'ArrowLeft' || event.code === 'Backspace') {\n this.outerView.focus();\n }\n if (event.code === 'Backspace' && doc.content.size !== 0) {\n // Prevent the deletion of the node as there is still content\n event.preventDefault();\n this.selectOutside('before');\n }\n }\n if (selection.from === doc.nodeSize - 2) {\n // At the end of the embedded editor\n if (event.code === 'ArrowRight' || event.code === 'Delete') {\n this.outerView.focus();\n }\n if (event.code === 'Delete' && doc.content.size !== 0) {\n // Prevent the deletion of the node as there is still content\n event.preventDefault();\n this.selectOutside('after');\n }\n }\n }\n },\n nodeViews: this.nodeViews,\n },\n this.outerView,\n );\n if (this.args.initEditor) {\n this.args.initEditor(this.innerView);\n }\n }\n\n @action\n onSelected(_: unknown, sel: [boolean]) {\n if (this.args.onSelected && this.innerView) {\n this.args.onSelected(sel[0], this.innerView.state);\n }\n if (this.args.selected && this.innerView) {\n const lastKeyPressedPluginState = lastKeyPressedPluginKey.getState(\n this.controller.mainEditorState,\n );\n\n const lastKeyPressed = lastKeyPressedPluginState?.lastKeyPressed;\n if (!this.innerView.hasFocus()) {\n this.innerView.dispatch(\n this.innerView.state.tr.setSelection(\n Selection[\n ['ArrowLeft', 'Backspace'].includes(lastKeyPressed ?? '')\n ? 'atEnd'\n : 'atStart'\n ](this.innerView.state.doc),\n ),\n );\n\n this.innerView.focus();\n }\n } else if (this.innerView) {\n const state = this.innerView.state;\n // De-select the inner node if we're no longer selected\n this.dispatchInner(\n state.tr.setSelection(TextSelection.create(state.doc, 0, 0)),\n );\n }\n }\n\n @action\n onNodeUpdate() {\n if (this.innerView) {\n const state = this.innerView.state;\n const start = this.node.content.findDiffStart(state.doc.content);\n const end = this.node.content.findDiffEnd(state.doc.content);\n const tr = state.tr;\n let trChanged = false;\n if (isSome(start) && isSome(end)) {\n let { a: endA, b: endB } = end;\n const overlap = start - Math.min(endA, endB);\n if (overlap > 0) {\n endA += overlap;\n endB += overlap;\n }\n tr.replace(start, endB, this.node.slice(start, endA)).setMeta(\n 'fromOutside',\n this.editorId,\n );\n trChanged = true;\n }\n // check if our top node has new attributes, and update the state\n // if so\n if (!this.node.hasMarkup(state.doc.type, state.doc.attrs)) {\n for (const [key, val] of Object.entries(this.node.attrs)) {\n tr.setDocAttribute(key, val);\n }\n\n tr.setMeta('fromOutside', this.editorId);\n trChanged = true;\n }\n if (trChanged) {\n this.innerView.dispatch(tr);\n }\n }\n }\n\n @action\n onDecorationsUpdate() {\n this.innerView?.dispatch(this.innerView.state.tr);\n }\n\n selectOutside(side: 'before' | 'after') {\n const selectionSide = side === 'after' ? '$head' : '$anchor';\n const outerState = this.outerView.state;\n this.outerView.dispatch(\n outerState.tr.setSelection(\n TextSelection.create(\n outerState.doc,\n outerState.selection[selectionSide].pos,\n ),\n ),\n );\n }\n\n dispatchInner = (tr: Transaction) => {\n const pos = this.pos;\n if (this.innerView && pos !== undefined) {\n const { state, transactions } = this.innerView.state.applyTransaction(tr);\n this.innerView.updateState(state);\n if (tr.getMeta('fromOutside') !== this.editorId) {\n const outerTr = this.outerView.state.tr,\n offsetMap = StepMap.offset(pos + 1);\n for (let i = 0; i < transactions.length; i++) {\n const steps = transactions[i].steps;\n for (let j = 0; j < steps.length; j++) {\n const step = steps[j];\n let mappedStep: Step;\n if (step instanceof AttrStep) {\n const mappedPos = offsetMap.mapResult(step.pos, 1);\n if (mappedPos.deleted) {\n throw new Error('Mapped position has been deleted');\n }\n mappedStep = new AttrStep(mappedPos.pos, step.attr, step.value);\n } else {\n mappedStep = unwrap(step.map(offsetMap));\n }\n outerTr.step(mappedStep);\n }\n }\n if (outerTr.docChanged) this.outerView.dispatch(outerTr);\n }\n }\n };\n\n willDestroy(): void {\n super.willDestroy();\n this.innerView?.destroy();\n this.innerView = null;\n }\n}\n"],"names":["EmbeddedEditor","Component","g","prototype","service","i","innerView","contentWrapper","editorId","uuid","outerView","args","view","node","schema","controller","pos","getPos","plugins","keymap","undoRedoMap","Mod-z","undo","state","dispatch","bind","Mod-Z","Mod-y","redo","Mod-Y","embeddedEditorBaseKeymap","nodeViews","props","didInsertContentWrapper","target","SayView","decorations","contentDecorations","editable","EditorState","create","doc","attributes","placeholder","dispatchTransaction","dispatchInner","handleDOMEvents","mousedown","hasFocus","focus","undefined","outerSelectionTr","tr","outerSelection","NodeSelection","resolve","setSelection","setActiveView","handleKeyDown","selection","event","empty","from","code","content","size","preventDefault","selectOutside","nodeSize","initEditor","n","action","onSelected","_","sel","selected","lastKeyPressedPluginState","lastKeyPressedPluginKey","getState","mainEditorState","lastKeyPressed","Selection","includes","TextSelection","onNodeUpdate","start","findDiffStart","end","findDiffEnd","trChanged","isSome","a","endA","b","endB","overlap","Math","min","replace","slice","setMeta","hasMarkup","type","attrs","key","val","Object","entries","setDocAttribute","onDecorationsUpdate","side","selectionSide","outerState","transactions","applyTransaction","updateState","getMeta","outerTr","offsetMap","StepMap","offset","length","steps","j","step","mappedStep","AttrStep","mappedPos","mapResult","deleted","Error","attr","value","unwrap","map","docChanged","willDestroy","destroy","setComponentTemplate","TEMPLATE"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAuCA;AACA;AACA;AACA;AACe,MAAMA,cAAc,SAASC,SAAS,CAAO;AAAA,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,MAAA,EAAA,CACzDC,OAAO,CAAA,CAAA;AAAA;EAAA,KAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,MAAA,CAAA,EAAA,MAAA;AACRC,EAAAA,SAAS,GAAmB,IAAI;AAEhCC,EAAAA,cAAc,GAAmB,IAAI;EAErCC,QAAQ,GAAGC,EAAI,EAAE;EAEjB,IAAIC,SAASA,GAAG;AACd,IAAA,OAAO,IAAI,CAACC,IAAI,CAACC,IAAI;AACvB,EAAA;EAEA,IAAIC,IAAIA,GAAG;AACT,IAAA,OAAO,IAAI,CAACF,IAAI,CAACE,IAAI;AACvB,EAAA;EAEA,IAAIC,MAAMA,GAAG;AACX,IAAA,OAAO,IAAI,CAACC,UAAU,CAACD,MAAM;AAC/B,EAAA;EAEA,IAAIE,GAAGA,GAAG;AACR,IAAA,OAAO,IAAI,CAACL,IAAI,CAACM,MAAM,EAAE;AAC3B,EAAA;EAEA,IAAIF,UAAUA,GAAG;AACf,IAAA,OAAO,IAAI,CAACJ,IAAI,CAACI,UAAU;AAC7B,EAAA;EAEA,IAAIG,OAAOA,GAAG;AACZ,IAAA,OAAO,IAAI,CAACP,IAAI,CAACO,OAAO,IAAI,EAAE;AAChC,EAAA;EAEA,IAAIC,MAAMA,GAAG;AACX,IAAA,MAAMC,WAAW,GAAG;MAClB,OAAO,EAAEC,MACPC,IAAI,CAAC,IAAI,CAACZ,SAAS,CAACa,KAAK,EAAE,IAAI,CAACb,SAAS,CAACc,QAAQ,CAACC,IAAI,CAAC,IAAI,CAAC,CAAC;MAChE,OAAO,EAAEC,MACPJ,IAAI,CAAC,IAAI,CAACZ,SAAS,CAACa,KAAK,EAAE,IAAI,CAACb,SAAS,CAACc,QAAQ,CAACC,IAAI,CAAC,IAAI,CAAC,CAAC;MAChE,OAAO,EAAEE,MACPC,IAAI,CAAC,IAAI,CAAClB,SAAS,CAACa,KAAK,EAAE,IAAI,CAACb,SAAS,CAACc,QAAQ,CAACC,IAAI,CAAC,IAAI,CAAC,CAAC;MAChE,OAAO,EAAEI,MACPD,IAAI,CAAC,IAAI,CAAClB,SAAS,CAACa,KAAK,EAAE,IAAI,CAACb,SAAS,CAACc,QAAQ,CAACC,IAAI,CAAC,IAAI,CAAC;KAChE;AAED,IAAA,IAAI,IAAI,CAACd,IAAI,CAACQ,MAAM,EAAE;MACpB,OAAO;AACL,QAAA,GAAG,IAAI,CAACR,IAAI,CAACQ,MAAM;QACnB,GAAGC;OACJ;AACH,IAAA,CAAC,MAAM;MACL,OAAO;AAAE,QAAA,GAAGU,wBAAwB,CAAC,IAAI,CAAChB,MAAM,CAAC;QAAE,GAAGM;OAAa;AACrE,IAAA;AACF,EAAA;EAEA,IAAIW,SAASA,GAAG;AACd,IAAA,OAAO,IAAI,CAACrB,SAAS,CAACsB,KAAK,CAACD,SAAS;AACvC,EAAA;EAGAE,uBAAuBA,CAACC,MAAe,EAAE;IACvC,IAAI,CAAC3B,cAAc,GAAG2B,MAAM;IAC5B,IAAI,CAAC5B,SAAS,GAAG,IAAI6B,OAAO,CAC1B,IAAI,CAAC5B,cAAc,EACnB;AACE6B,MAAAA,WAAW,EAAEA,MAAM,IAAI,CAACzB,IAAI,CAAC0B,kBAAkB;MAC/CC,QAAQ,EAAEA,MAAM;AACd,QAAA,OAAO,IAAI,CAAC5B,SAAS,CAAC4B,QAAQ;MAChC,CAAC;AACDf,MAAAA,KAAK,EAAEgB,WAAW,CAACC,MAAM,CAAC;QACxBC,GAAG,EAAE,IAAI,CAAC5B,IAAI;AACdK,QAAAA,OAAO,EAAE,CAACC,MAAM,CAAC,IAAI,CAACA,MAAM,CAAC,EAAE,GAAG,IAAI,CAACD,OAAO;AAC9C;AACF,OAAC,CAAC;AACFwB,MAAAA,UAAU,EAAE;AACV,QAAA,IAAI,IAAI,CAAC/B,IAAI,CAACgC,WAAW,IAAI;AAC3B,UAAA,kBAAkB,EAAE,IAAI,CAAChC,IAAI,CAACgC;SAC/B;OACF;MACDC,mBAAmB,EAAE,IAAI,CAACC,aAAa;AACvCC,MAAAA,eAAe,EAAE;QACfC,SAAS,EAAEA,MAAM;AACf;AACA;AACA;;AAEA,UAAA,IAAI,IAAI,CAACrC,SAAS,CAACsC,QAAQ,EAAE,EAAE,IAAI,CAAC1C,SAAS,EAAE2C,KAAK,EAAE;QACxD,CAAC;QACDA,KAAK,EAAEA,MAAM;AACX,UAAA,MAAMjC,GAAG,GAAG,IAAI,CAACA,GAAG;UACpB,IAAIA,GAAG,KAAKkC,SAAS,EAAE;YACrB,MAAMC,gBAAgB,GAAG,IAAI,CAACzC,SAAS,CAACa,KAAK,CAAC6B,EAAE;AAChD,YAAA,MAAMC,cAAc,GAAG,IAAIC,aAAa,CACtC,IAAI,CAAC5C,SAAS,CAACa,KAAK,CAACkB,GAAG,CAACc,OAAO,CAACvC,GAAG,CACtC,CAAC;AACDmC,YAAAA,gBAAgB,CAACK,YAAY,CAACH,cAAc,CAAC;AAC7C,YAAA,IAAI,CAAC3C,SAAS,CAACc,QAAQ,CAAC2B,gBAAgB,CAAC;AAC3C,UAAA;UAEA,IAAI,IAAI,CAAC7C,SAAS,EAAE;YAClB,IAAI,CAACK,IAAI,CAACI,UAAU,CAAC0C,aAAa,CAAC,IAAI,CAACnD,SAAS,CAAC;AACpD,UAAA;AACF,QAAA;OACD;AACD;AACAoD,MAAAA,aAAa,EAAEA,CAAC;AAAEnC,QAAAA,KAAK,EAAE;UAAEoC,SAAS;AAAElB,UAAAA;AAAI;OAAG,EAAEmB,KAAK,KAAK;QACvD,IAAID,SAAS,CAACE,KAAK,EAAE;AACnB,UAAA,IAAIF,SAAS,CAACG,IAAI,KAAK,CAAC,EAAE;AACxB;YACA,IAAIF,KAAK,CAACG,IAAI,KAAK,WAAW,IAAIH,KAAK,CAACG,IAAI,KAAK,WAAW,EAAE;AAC5D,cAAA,IAAI,CAACrD,SAAS,CAACuC,KAAK,EAAE;AACxB,YAAA;AACA,YAAA,IAAIW,KAAK,CAACG,IAAI,KAAK,WAAW,IAAItB,GAAG,CAACuB,OAAO,CAACC,IAAI,KAAK,CAAC,EAAE;AACxD;cACAL,KAAK,CAACM,cAAc,EAAE;AACtB,cAAA,IAAI,CAACC,aAAa,CAAC,QAAQ,CAAC;AAC9B,YAAA;AACF,UAAA;UACA,IAAIR,SAAS,CAACG,IAAI,KAAKrB,GAAG,CAAC2B,QAAQ,GAAG,CAAC,EAAE;AACvC;YACA,IAAIR,KAAK,CAACG,IAAI,KAAK,YAAY,IAAIH,KAAK,CAACG,IAAI,KAAK,QAAQ,EAAE;AAC1D,cAAA,IAAI,CAACrD,SAAS,CAACuC,KAAK,EAAE;AACxB,YAAA;AACA,YAAA,IAAIW,KAAK,CAACG,IAAI,KAAK,QAAQ,IAAItB,GAAG,CAACuB,OAAO,CAACC,IAAI,KAAK,CAAC,EAAE;AACrD;cACAL,KAAK,CAACM,cAAc,EAAE;AACtB,cAAA,IAAI,CAACC,aAAa,CAAC,OAAO,CAAC;AAC7B,YAAA;AACF,UAAA;AACF,QAAA;MACF,CAAC;MACDpC,SAAS,EAAE,IAAI,CAACA;AAClB,KAAC,EACD,IAAI,CAACrB,SACP,CAAC;AACD,IAAA,IAAI,IAAI,CAACC,IAAI,CAAC0D,UAAU,EAAE;MACxB,IAAI,CAAC1D,IAAI,CAAC0D,UAAU,CAAC,IAAI,CAAC/D,SAAS,CAAC;AACtC,IAAA;AACF,EAAA;AAAC,EAAA;IAAAgE,CAAA,CAAA,IAAA,CAAAnE,SAAA,EAAA,yBAAA,EAAA,CA/EAoE,MAAM,CAAA,CAAA;AAAA;AAkFPC,EAAAA,UAAUA,CAACC,CAAU,EAAEC,GAAc,EAAE;IACrC,IAAI,IAAI,CAAC/D,IAAI,CAAC6D,UAAU,IAAI,IAAI,CAAClE,SAAS,EAAE;AAC1C,MAAA,IAAI,CAACK,IAAI,CAAC6D,UAAU,CAACE,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAACpE,SAAS,CAACiB,KAAK,CAAC;AACpD,IAAA;IACA,IAAI,IAAI,CAACZ,IAAI,CAACgE,QAAQ,IAAI,IAAI,CAACrE,SAAS,EAAE;MACxC,MAAMsE,yBAAyB,GAAGC,uBAAuB,CAACC,QAAQ,CAChE,IAAI,CAAC/D,UAAU,CAACgE,eAClB,CAAC;AAED,MAAA,MAAMC,cAAc,GAAGJ,yBAAyB,EAAEI,cAAc;MAChE,IAAI,CAAC,IAAI,CAAC1E,SAAS,CAAC0C,QAAQ,EAAE,EAAE;QAC9B,IAAI,CAAC1C,SAAS,CAACkB,QAAQ,CACrB,IAAI,CAAClB,SAAS,CAACiB,KAAK,CAAC6B,EAAE,CAACI,YAAY,CAClCyB,SAAS,CACP,CAAC,WAAW,EAAE,WAAW,CAAC,CAACC,QAAQ,CAACF,cAAc,IAAI,EAAE,CAAC,GACrD,OAAO,GACP,SAAS,CACd,CAAC,IAAI,CAAC1E,SAAS,CAACiB,KAAK,CAACkB,GAAG,CAC5B,CACF,CAAC;AAED,QAAA,IAAI,CAACnC,SAAS,CAAC2C,KAAK,EAAE;AACxB,MAAA;AACF,IAAA,CAAC,MAAM,IAAI,IAAI,CAAC3C,SAAS,EAAE;AACzB,MAAA,MAAMiB,KAAK,GAAG,IAAI,CAACjB,SAAS,CAACiB,KAAK;AAClC;MACA,IAAI,CAACsB,aAAa,CAChBtB,KAAK,CAAC6B,EAAE,CAACI,YAAY,CAAC2B,aAAa,CAAC3C,MAAM,CAACjB,KAAK,CAACkB,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAC7D,CAAC;AACH,IAAA;AACF,EAAA;AAAC,EAAA;IAAA6B,CAAA,CAAA,IAAA,CAAAnE,SAAA,EAAA,YAAA,EAAA,CA/BAoE,MAAM,CAAA,CAAA;AAAA;AAkCPa,EAAAA,YAAYA,GAAG;IACb,IAAI,IAAI,CAAC9E,SAAS,EAAE;AAClB,MAAA,MAAMiB,KAAK,GAAG,IAAI,CAACjB,SAAS,CAACiB,KAAK;AAClC,MAAA,MAAM8D,KAAK,GAAG,IAAI,CAACxE,IAAI,CAACmD,OAAO,CAACsB,aAAa,CAAC/D,KAAK,CAACkB,GAAG,CAACuB,OAAO,CAAC;AAChE,MAAA,MAAMuB,GAAG,GAAG,IAAI,CAAC1E,IAAI,CAACmD,OAAO,CAACwB,WAAW,CAACjE,KAAK,CAACkB,GAAG,CAACuB,OAAO,CAAC;AAC5D,MAAA,MAAMZ,EAAE,GAAG7B,KAAK,CAAC6B,EAAE;MACnB,IAAIqC,SAAS,GAAG,KAAK;MACrB,IAAIC,MAAM,CAACL,KAAK,CAAC,IAAIK,MAAM,CAACH,GAAG,CAAC,EAAE;QAChC,IAAI;AAAEI,UAAAA,CAAC,EAAEC,IAAI;AAAEC,UAAAA,CAAC,EAAEC;AAAK,SAAC,GAAGP,GAAG;QAC9B,MAAMQ,OAAO,GAAGV,KAAK,GAAGW,IAAI,CAACC,GAAG,CAACL,IAAI,EAAEE,IAAI,CAAC;QAC5C,IAAIC,OAAO,GAAG,CAAC,EAAE;AACfH,UAAAA,IAAI,IAAIG,OAAO;AACfD,UAAAA,IAAI,IAAIC,OAAO;AACjB,QAAA;QACA3C,EAAE,CAAC8C,OAAO,CAACb,KAAK,EAAES,IAAI,EAAE,IAAI,CAACjF,IAAI,CAACsF,KAAK,CAACd,KAAK,EAAEO,IAAI,CAAC,CAAC,CAACQ,OAAO,CAC3D,aAAa,EACb,IAAI,CAAC5F,QACP,CAAC;AACDiF,QAAAA,SAAS,GAAG,IAAI;AAClB,MAAA;AACA;AACA;AACA,MAAA,IAAI,CAAC,IAAI,CAAC5E,IAAI,CAACwF,SAAS,CAAC9E,KAAK,CAACkB,GAAG,CAAC6D,IAAI,EAAE/E,KAAK,CAACkB,GAAG,CAAC8D,KAAK,CAAC,EAAE;AACzD,QAAA,KAAK,MAAM,CAACC,GAAG,EAAEC,GAAG,CAAC,IAAIC,MAAM,CAACC,OAAO,CAAC,IAAI,CAAC9F,IAAI,CAAC0F,KAAK,CAAC,EAAE;AACxDnD,UAAAA,EAAE,CAACwD,eAAe,CAACJ,GAAG,EAAEC,GAAG,CAAC;AAC9B,QAAA;QAEArD,EAAE,CAACgD,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC5F,QAAQ,CAAC;AACxCiF,QAAAA,SAAS,GAAG,IAAI;AAClB,MAAA;AACA,MAAA,IAAIA,SAAS,EAAE;AACb,QAAA,IAAI,CAACnF,SAAS,CAACkB,QAAQ,CAAC4B,EAAE,CAAC;AAC7B,MAAA;AACF,IAAA;AACF,EAAA;AAAC,EAAA;IAAAkB,CAAA,CAAA,IAAA,CAAAnE,SAAA,EAAA,cAAA,EAAA,CAnCAoE,MAAM,CAAA,CAAA;AAAA;AAsCPsC,EAAAA,mBAAmBA,GAAG;AACpB,IAAA,IAAI,CAACvG,SAAS,EAAEkB,QAAQ,CAAC,IAAI,CAAClB,SAAS,CAACiB,KAAK,CAAC6B,EAAE,CAAC;AACnD,EAAA;AAAC,EAAA;IAAAkB,CAAA,CAAA,IAAA,CAAAnE,SAAA,EAAA,qBAAA,EAAA,CAHAoE,MAAM,CAAA,CAAA;AAAA;EAKPJ,aAAaA,CAAC2C,IAAwB,EAAE;IACtC,MAAMC,aAAa,GAAGD,IAAI,KAAK,OAAO,GAAG,OAAO,GAAG,SAAS;AAC5D,IAAA,MAAME,UAAU,GAAG,IAAI,CAACtG,SAAS,CAACa,KAAK;AACvC,IAAA,IAAI,CAACb,SAAS,CAACc,QAAQ,CACrBwF,UAAU,CAAC5D,EAAE,CAACI,YAAY,CACxB2B,aAAa,CAAC3C,MAAM,CAClBwE,UAAU,CAACvE,GAAG,EACduE,UAAU,CAACrD,SAAS,CAACoD,aAAa,CAAC,CAAC/F,GACtC,CACF,CACF,CAAC;AACH,EAAA;EAEA6B,aAAa,GAAIO,EAAe,IAAK;AACnC,IAAA,MAAMpC,GAAG,GAAG,IAAI,CAACA,GAAG;AACpB,IAAA,IAAI,IAAI,CAACV,SAAS,IAAIU,GAAG,KAAKkC,SAAS,EAAE;MACvC,MAAM;QAAE3B,KAAK;AAAE0F,QAAAA;OAAc,GAAG,IAAI,CAAC3G,SAAS,CAACiB,KAAK,CAAC2F,gBAAgB,CAAC9D,EAAE,CAAC;AACzE,MAAA,IAAI,CAAC9C,SAAS,CAAC6G,WAAW,CAAC5F,KAAK,CAAC;MACjC,IAAI6B,EAAE,CAACgE,OAAO,CAAC,aAAa,CAAC,KAAK,IAAI,CAAC5G,QAAQ,EAAE;QAC/C,MAAM6G,OAAO,GAAG,IAAI,CAAC3G,SAAS,CAACa,KAAK,CAAC6B,EAAE;UACrCkE,SAAS,GAAGC,OAAO,CAACC,MAAM,CAACxG,GAAG,GAAG,CAAC,CAAC;AACrC,QAAA,KAAK,IAAIX,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG4G,YAAY,CAACQ,MAAM,EAAEpH,CAAC,EAAE,EAAE;AAC5C,UAAA,MAAMqH,KAAK,GAAGT,YAAY,CAAC5G,CAAC,CAAC,CAACqH,KAAK;AACnC,UAAA,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGD,KAAK,CAACD,MAAM,EAAEE,CAAC,EAAE,EAAE;AACrC,YAAA,MAAMC,IAAI,GAAGF,KAAK,CAACC,CAAC,CAAC;AACrB,YAAA,IAAIE,UAAgB;YACpB,IAAID,IAAI,YAAYE,QAAQ,EAAE;cAC5B,MAAMC,SAAS,GAAGT,SAAS,CAACU,SAAS,CAACJ,IAAI,CAAC5G,GAAG,EAAE,CAAC,CAAC;cAClD,IAAI+G,SAAS,CAACE,OAAO,EAAE;AACrB,gBAAA,MAAM,IAAIC,KAAK,CAAC,kCAAkC,CAAC;AACrD,cAAA;AACAL,cAAAA,UAAU,GAAG,IAAIC,QAAQ,CAACC,SAAS,CAAC/G,GAAG,EAAE4G,IAAI,CAACO,IAAI,EAAEP,IAAI,CAACQ,KAAK,CAAC;AACjE,YAAA,CAAC,MAAM;cACLP,UAAU,GAAGQ,MAAM,CAACT,IAAI,CAACU,GAAG,CAAChB,SAAS,CAAC,CAAC;AAC1C,YAAA;AACAD,YAAAA,OAAO,CAACO,IAAI,CAACC,UAAU,CAAC;AAC1B,UAAA;AACF,QAAA;QACA,IAAIR,OAAO,CAACkB,UAAU,EAAE,IAAI,CAAC7H,SAAS,CAACc,QAAQ,CAAC6F,OAAO,CAAC;AAC1D,MAAA;AACF,IAAA;EACF,CAAC;AAEDmB,EAAAA,WAAWA,GAAS;IAClB,KAAK,CAACA,WAAW,EAAE;AACnB,IAAA,IAAI,CAAClI,SAAS,EAAEmI,OAAO,EAAE;IACzB,IAAI,CAACnI,SAAS,GAAG,IAAI;AACvB,EAAA;AACF;AAACoI,oBAAA,CAAAC,QAAA,EAtQoB3I,cAAc,CAAA;;;;"}
|
|
1
|
+
{"version":3,"file":"embedded-editor.js","sources":["../../../src/components/ember-node/embedded-editor.gts"],"sourcesContent":["// eslint-disable-next-line ember/no-at-ember-render-modifiers\nimport didInsert from '@ember/render-modifiers/modifiers/did-insert';\n// eslint-disable-next-line ember/no-at-ember-render-modifiers\nimport didUpdate from '@ember/render-modifiers/modifiers/did-update';\n/**\n *\n * Based on the footnotes example from https://github.com/ProseMirror/website\n *\n * Copyright (C) 2015-2017 by Marijn Haverbeke <marijnh@gmail.com> and others\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nimport { action } from '@ember/object';\nimport { service } from '@ember/service';\nimport Component from '@glimmer/component';\nimport type { EmberNodeArgs } from '#root/utils/ember-node.ts';\nimport type IntlService from 'ember-intl/services/intl';\nimport { v4 as uuid } from 'uuid';\nimport { redo, undo } from '#root/plugins/history/index.ts';\nimport { isSome, unwrap } from '#root/utils/_private/option.ts';\nimport { lastKeyPressedPluginKey } from '#root/plugins/last-key-pressed/index.ts';\nimport {\n EditorState,\n NodeSelection,\n Plugin,\n Selection,\n TextSelection,\n Transaction,\n type Command,\n} from 'prosemirror-state';\nimport { embeddedEditorBaseKeymap } from '#root/core/keymap.ts';\nimport SayView from '#root/core/say-view.ts';\nimport type { NodeViewConstructor } from 'prosemirror-view';\nimport { AttrStep, Step, StepMap } from 'prosemirror-transform';\nimport { keymap } from 'prosemirror-keymap';\n\ntype Signature = {\n Element: HTMLSpanElement;\n Args: EmberNodeArgs & {\n placeholder?: string;\n initEditor?: (view: SayView) => void;\n /* override the keymap. */\n keymap?: { [key: string]: Command };\n /* editor plugins to add */\n plugins?: Plugin[];\n nodeViews?: {\n [node: string]: NodeViewConstructor;\n };\n onSelected?: (selected: boolean, innerState: EditorState) => void;\n };\n};\n\n/**\n * An embedded editor to use for *inline* content. This way you can specify extra content for an\n * inline (atom) node. For block content, use content directly instead ({{yield}} in ember-nodes).\n */\nexport default class EmbeddedEditor extends Component<Signature> {\n @service declare intl: IntlService;\n innerView: SayView | null = null;\n\n contentWrapper: Element | null = null;\n\n editorId = uuid();\n\n get outerView() {\n return this.args.view;\n }\n\n get node() {\n return this.args.node;\n }\n\n get schema() {\n return this.controller.schema;\n }\n\n get pos() {\n return this.args.getPos();\n }\n\n get controller() {\n return this.args.controller;\n }\n\n get plugins() {\n return this.args.plugins || [];\n }\n\n get keymap() {\n const undoRedoMap = {\n 'Mod-z': () =>\n undo(this.outerView.state, this.outerView.dispatch.bind(this)),\n 'Mod-Z': () =>\n undo(this.outerView.state, this.outerView.dispatch.bind(this)),\n 'Mod-y': () =>\n redo(this.outerView.state, this.outerView.dispatch.bind(this)),\n 'Mod-Y': () =>\n redo(this.outerView.state, this.outerView.dispatch.bind(this)),\n };\n\n if (this.args.keymap) {\n return {\n ...this.args.keymap,\n ...undoRedoMap,\n };\n } else {\n return { ...embeddedEditorBaseKeymap(this.schema), ...undoRedoMap };\n }\n }\n\n get nodeViews() {\n return this.outerView.props.nodeViews;\n }\n\n @action\n didInsertContentWrapper(target: Element) {\n this.contentWrapper = target;\n this.innerView = new SayView(\n this.contentWrapper,\n {\n decorations: () => this.args.contentDecorations,\n editable: () => {\n return this.outerView.editable;\n },\n state: EditorState.create({\n doc: this.node,\n plugins: [keymap(this.keymap), ...this.plugins],\n // the schema is derived from 'doc' key and can't be customized\n }),\n attributes: {\n ...(this.args.placeholder && {\n 'data-placeholder': this.args.placeholder,\n }),\n },\n dispatchTransaction: this.dispatchInner,\n handleDOMEvents: {\n mousedown: () => {\n // Kludge to prevent issues due to the fact that the whole\n // footnote is node-selected (and thus DOM-selected) when\n // the parent editor is focused.\n\n if (this.outerView.hasFocus()) this.innerView?.focus();\n },\n focus: () => {\n const pos = this.pos;\n if (pos !== undefined) {\n const outerSelectionTr = this.outerView.state.tr;\n const outerSelection = new NodeSelection(\n this.outerView.state.doc.resolve(pos),\n );\n outerSelectionTr.setSelection(outerSelection);\n this.outerView.dispatch(outerSelectionTr);\n }\n\n if (this.innerView) {\n this.args.controller.setActiveView(this.innerView);\n }\n },\n },\n // These handlers are needed to fix part of a bug in Gecko (firefox): https://bugzilla.mozilla.org/show_bug.cgi?id=1612076\n handleKeyDown: ({ state: { selection, doc } }, event) => {\n if (selection.empty) {\n if (selection.from === 0) {\n // At the start of the embedded editor\n if (event.code === 'ArrowLeft' || event.code === 'Backspace') {\n this.outerView.focus();\n }\n if (event.code === 'Backspace' && doc.content.size !== 0) {\n // Prevent the deletion of the node as there is still content\n event.preventDefault();\n this.selectOutside('before');\n }\n }\n if (selection.from === doc.nodeSize - 2) {\n // At the end of the embedded editor\n if (event.code === 'ArrowRight' || event.code === 'Delete') {\n this.outerView.focus();\n }\n if (event.code === 'Delete' && doc.content.size !== 0) {\n // Prevent the deletion of the node as there is still content\n event.preventDefault();\n this.selectOutside('after');\n }\n }\n }\n },\n nodeViews: this.nodeViews,\n },\n this.outerView,\n );\n if (this.args.initEditor) {\n this.args.initEditor(this.innerView);\n }\n }\n\n @action\n onSelected(_: unknown, sel: [boolean]) {\n if (this.args.onSelected && this.innerView) {\n this.args.onSelected(sel[0], this.innerView.state);\n }\n if (this.args.selected && this.innerView) {\n const lastKeyPressedPluginState = lastKeyPressedPluginKey.getState(\n this.controller.mainEditorState,\n );\n\n const lastKeyPressed = lastKeyPressedPluginState?.lastKeyPressed;\n if (!this.innerView.hasFocus()) {\n this.innerView.dispatch(\n this.innerView.state.tr.setSelection(\n Selection[\n ['ArrowLeft', 'Backspace'].includes(lastKeyPressed ?? '')\n ? 'atEnd'\n : 'atStart'\n ](this.innerView.state.doc),\n ),\n );\n\n this.innerView.focus();\n }\n } else if (this.innerView) {\n const state = this.innerView.state;\n // De-select the inner node if we're no longer selected\n this.dispatchInner(\n state.tr.setSelection(TextSelection.create(state.doc, 0, 0)),\n );\n }\n }\n\n @action\n onNodeUpdate() {\n if (this.innerView) {\n const state = this.innerView.state;\n const start = this.node.content.findDiffStart(state.doc.content);\n const end = this.node.content.findDiffEnd(state.doc.content);\n const tr = state.tr;\n let trChanged = false;\n if (isSome(start) && isSome(end)) {\n let { a: endA, b: endB } = end;\n const overlap = start - Math.min(endA, endB);\n if (overlap > 0) {\n endA += overlap;\n endB += overlap;\n }\n tr.replace(start, endB, this.node.slice(start, endA)).setMeta(\n 'fromOutside',\n this.editorId,\n );\n trChanged = true;\n }\n // check if our top node has new attributes, and update the state\n // if so\n if (!this.node.hasMarkup(state.doc.type, state.doc.attrs)) {\n for (const [key, val] of Object.entries(this.node.attrs)) {\n tr.setDocAttribute(key, val);\n }\n\n tr.setMeta('fromOutside', this.editorId);\n trChanged = true;\n }\n if (trChanged) {\n this.innerView.dispatch(tr);\n }\n }\n }\n\n @action\n onDecorationsUpdate() {\n this.innerView?.dispatch(this.innerView.state.tr);\n }\n\n selectOutside(side: 'before' | 'after') {\n const selectionSide = side === 'after' ? '$head' : '$anchor';\n const outerState = this.outerView.state;\n this.outerView.dispatch(\n outerState.tr.setSelection(\n TextSelection.create(\n outerState.doc,\n outerState.selection[selectionSide].pos,\n ),\n ),\n );\n }\n\n dispatchInner = (tr: Transaction) => {\n const pos = this.pos;\n if (this.innerView && pos !== undefined) {\n const { state, transactions } = this.innerView.state.applyTransaction(tr);\n this.innerView.updateState(state);\n if (tr.getMeta('fromOutside') !== this.editorId) {\n const outerTr = this.outerView.state.tr,\n offsetMap = StepMap.offset(pos + 1);\n for (let i = 0; i < transactions.length; i++) {\n const steps = transactions[i].steps;\n for (let j = 0; j < steps.length; j++) {\n const step = steps[j];\n let mappedStep: Step;\n if (step instanceof AttrStep) {\n const mappedPos = offsetMap.mapResult(step.pos, 1);\n if (mappedPos.deleted) {\n throw new Error('Mapped position has been deleted');\n }\n mappedStep = new AttrStep(mappedPos.pos, step.attr, step.value);\n } else {\n mappedStep = unwrap(step.map(offsetMap));\n }\n outerTr.step(mappedStep);\n }\n }\n if (outerTr.docChanged) this.outerView.dispatch(outerTr);\n }\n }\n };\n\n willDestroy(): void {\n super.willDestroy();\n this.innerView?.destroy();\n this.innerView = null;\n }\n\n <template>\n <span\n {{didInsert this.didInsertContentWrapper}}\n {{didUpdate this.onNodeUpdate @node}}\n {{didUpdate this.onSelected @selected}}\n {{didUpdate this.onDecorationsUpdate @contentDecorations}}\n ...attributes\n >\n </span>\n </template>\n}\n"],"names":["EmbeddedEditor","Component","g","prototype","service","i","innerView","contentWrapper","editorId","uuid","outerView","args","view","node","schema","controller","pos","getPos","plugins","keymap","undoRedoMap","Mod-z","undo","state","dispatch","bind","Mod-Z","Mod-y","redo","Mod-Y","embeddedEditorBaseKeymap","nodeViews","props","didInsertContentWrapper","target","SayView","decorations","contentDecorations","editable","EditorState","create","doc","attributes","placeholder","dispatchTransaction","dispatchInner","handleDOMEvents","mousedown","hasFocus","focus","undefined","outerSelectionTr","tr","outerSelection","NodeSelection","resolve","setSelection","setActiveView","handleKeyDown","selection","event","empty","from","code","content","size","preventDefault","selectOutside","nodeSize","initEditor","n","action","onSelected","_","sel","selected","lastKeyPressedPluginState","lastKeyPressedPluginKey","getState","mainEditorState","lastKeyPressed","Selection","includes","TextSelection","onNodeUpdate","start","findDiffStart","end","findDiffEnd","trChanged","isSome","a","endA","b","endB","overlap","Math","min","replace","slice","setMeta","hasMarkup","type","attrs","key","val","Object","entries","setDocAttribute","onDecorationsUpdate","side","selectionSide","outerState","transactions","applyTransaction","updateState","getMeta","outerTr","offsetMap","StepMap","offset","length","steps","j","step","mappedStep","AttrStep","mappedPos","mapResult","deleted","Error","attr","value","unwrap","map","docChanged","willDestroy","destroy","setComponentTemplate","precompileTemplate","strictMode","scope","didInsert","didUpdate"],"mappings":"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"}
|
|
@@ -3,11 +3,11 @@ import Component from '@glimmer/component';
|
|
|
3
3
|
import '../../core/say-view.js';
|
|
4
4
|
import { tracked } from '@glimmer/tracking';
|
|
5
5
|
import { editableNodePlugin } from '../../plugins/_private/editable-node/index.js';
|
|
6
|
+
import leaveOnEnterKey from '../../modifiers/leave-on-enter-key.js';
|
|
7
|
+
import EmbeddedEditor from './embedded-editor.js';
|
|
6
8
|
import { precompileTemplate } from '@ember/template-compilation';
|
|
7
|
-
import { g, i, n } from 'decorator-transforms/runtime';
|
|
8
9
|
import { setComponentTemplate } from '@ember/component';
|
|
9
|
-
|
|
10
|
-
var TEMPLATE = precompileTemplate("{{! @glint-nocheck: not typesafe yet }}\n<span data-inline-rdfa class=\"say-inline-rdfa\">\n <EmberNode::EmbeddedEditor\n @controller={{@controller}}\n @node={{@node}}\n @view={{@view}}\n @getPos={{@getPos}}\n @selected={{@selected}}\n @initEditor={{this.initEditor}}\n @plugins={{this.plugins}}\n @decorations={{@decorations}}\n @contentDecorations={{@contentDecorations}}\n {{leave-on-enter-key this.controller @getPos}}\n />\n</span>");
|
|
10
|
+
import { g, i, n } from 'decorator-transforms/runtime';
|
|
11
11
|
|
|
12
12
|
class InlineRdfaComponent extends Component {
|
|
13
13
|
static {
|
|
@@ -26,8 +26,16 @@ class InlineRdfaComponent extends Component {
|
|
|
26
26
|
static {
|
|
27
27
|
n(this.prototype, "initEditor", [action]);
|
|
28
28
|
}
|
|
29
|
+
static {
|
|
30
|
+
setComponentTemplate(precompileTemplate("\n <span data-inline-rdfa class=\"say-inline-rdfa\">\n <EmbeddedEditor @controller={{@controller}} @node={{@node}} @view={{@view}} @getPos={{@getPos}} @selected={{@selected}} @initEditor={{this.initEditor}} @plugins={{this.plugins}} @contentDecorations={{@contentDecorations}} @updateAttribute={{@updateAttribute}} @selectNode={{@selectNode}} {{leaveOnEnterKey this.controller @getPos}} />\n </span>\n ", {
|
|
31
|
+
strictMode: true,
|
|
32
|
+
scope: () => ({
|
|
33
|
+
EmbeddedEditor,
|
|
34
|
+
leaveOnEnterKey
|
|
35
|
+
})
|
|
36
|
+
}), this);
|
|
37
|
+
}
|
|
29
38
|
}
|
|
30
|
-
setComponentTemplate(TEMPLATE, InlineRdfaComponent);
|
|
31
39
|
|
|
32
40
|
export { InlineRdfaComponent as default };
|
|
33
41
|
//# sourceMappingURL=inline-rdfa.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inline-rdfa.js","sources":["../../../src/components/ember-node/inline-rdfa.
|
|
1
|
+
{"version":3,"file":"inline-rdfa.js","sources":["../../../src/components/ember-node/inline-rdfa.gts"],"sourcesContent":["import { action } from '@ember/object';\nimport Component from '@glimmer/component';\nimport SayView from '#root/core/say-view.ts';\nimport type { EmberNodeArgs } from '#root/utils/ember-node.ts';\nimport { tracked } from '@glimmer/tracking';\nimport { editableNodePlugin } from '#root/plugins/_private/editable-node/index.ts';\nimport leaveOnEnterKey from '#root/modifiers/leave-on-enter-key.ts';\nimport EmbeddedEditor from './embedded-editor.gts';\n\nexport default class InlineRdfaComponent extends Component<EmberNodeArgs> {\n @tracked innerView?: SayView;\n\n get plugins() {\n return [editableNodePlugin(this.args.getPos)];\n }\n get controller() {\n return this.args.controller;\n }\n\n @action\n initEditor(view: SayView) {\n this.innerView = view;\n }\n\n <template>\n <span data-inline-rdfa class=\"say-inline-rdfa\">\n <EmbeddedEditor\n @controller={{@controller}}\n @node={{@node}}\n @view={{@view}}\n @getPos={{@getPos}}\n @selected={{@selected}}\n @initEditor={{this.initEditor}}\n @plugins={{this.plugins}}\n @contentDecorations={{@contentDecorations}}\n @updateAttribute={{@updateAttribute}}\n @selectNode={{@selectNode}}\n {{leaveOnEnterKey this.controller @getPos}}\n />\n </span>\n </template>\n}\n"],"names":["InlineRdfaComponent","Component","g","prototype","tracked","i","plugins","editableNodePlugin","args","getPos","controller","initEditor","view","innerView","n","action","setComponentTemplate","precompileTemplate","strictMode","scope","EmbeddedEditor","leaveOnEnterKey"],"mappings":";;;;;;;;;;;AASe,MAAMA,4BAA4BC,SAAA,CAAU;AAAA,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,WAAA,EAAA,CACxDC,OAAA,CAAA,CAAA;AAAA;EAAA,UAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,WAAA,CAAA,EAAA,MAAA;EAED,IAAIC,OAAAA,GAAU;IACZ,OAAO,CAACC,kBAAA,CAAmB,IAAI,CAACC,IAAI,CAACC,MAAM,CAAA,CAAE;AAC/C,EAAA;EACA,IAAIC,UAAAA,GAAa;AACf,IAAA,OAAO,IAAI,CAACF,IAAI,CAACE,UAAU;AAC7B,EAAA;EAGAC,UAAAA,CAAWC,IAAa,EAAE;IACxB,IAAI,CAACC,SAAS,GAAGD,IAAA;AACnB,EAAA;AAAA,EAAA;IAAAE,CAAA,CAAA,IAAA,CAAAX,SAAA,EAAA,YAAA,EAAA,CAHCY,MAAA,CAAA,CAAA;AAAA;AAKD,EAAA;IAAAC,oBAAA,CAAAC,kBAAA,CAAA,gaAAA,EAgBA;MAAAC,UAAA,EAAA,IAAA;AAAAC,MAAAA,KAAA,EAAAA,OAAA;QAAAC,cAAA;AAAAC,QAAAA;AAAA,OAAA;KAAU,CAAA,EAAV,IAAW,CAAA;AAAD;AACZ;;;;"}
|