@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,25 +1,76 @@
|
|
|
1
|
+
import leaveOnEnterKey from '../../modifiers/leave-on-enter-key.js';
|
|
1
2
|
import { action } from '@ember/object';
|
|
2
3
|
import Component from '@glimmer/component';
|
|
3
|
-
import { linkToHref } from '../../utils/_private/string-utils.js';
|
|
4
4
|
import { Velcro } from 'ember-velcro';
|
|
5
|
-
import {
|
|
6
|
-
import
|
|
7
|
-
import
|
|
5
|
+
import { hash } from '@ember/helper';
|
|
6
|
+
import EmbeddedEditor from './embedded-editor.js';
|
|
7
|
+
import { on } from '@ember/modifier';
|
|
8
|
+
import t from 'ember-intl/helpers/t';
|
|
9
|
+
import PillComponent from '../pill.js';
|
|
10
|
+
import LinkEditor from '../plugins/link/_private/link-editor.js';
|
|
11
|
+
import { defaultLinkParser } from '../../plugins/link/parser.js';
|
|
12
|
+
import { tracked, cached } from '@glimmer/tracking';
|
|
13
|
+
import { service } from '@ember/service';
|
|
14
|
+
import { CircleXIcon } from '@appuniversum/ember-appuniversum/components/icons/circle-x';
|
|
8
15
|
import { precompileTemplate } from '@ember/template-compilation';
|
|
9
|
-
import { n } from 'decorator-transforms/runtime';
|
|
10
16
|
import { setComponentTemplate } from '@ember/component';
|
|
11
|
-
|
|
12
|
-
var TEMPLATE = precompileTemplate("{{! @glint-nocheck: not typesafe yet }}\n<this.Velcro\n @placement=\"bottom\"\n @offsetOptions={{hash mainAxis=3}}\n @strategy=\"absolute\"\n as |velcro|\n>\n <Pill\n class={{this.class}}\n @skin=\"link\"\n title={{t \"ember-rdfa-editor.link.ctrlClickDescription\"}}\n aria-describedby=\"link-tooltip\"\n {{velcro.hook}}\n {{on \"click\" this.onClick}}\n >\n <EmberNode::EmbeddedEditor\n @controller={{@controller}}\n @node={{@node}}\n @view={{@view}}\n @getPos={{@getPos}}\n @selected={{@selected}}\n @onSelected={{this.onSelectEmbedded}}\n @placeholder={{t \"ember-rdfa-editor.link.placeholder.text\"}}\n @decorations={{@decorations}}\n @contentDecorations={{@contentDecorations}}\n {{leave-on-enter-key this.controller @getPos}}\n />\n </Pill>\n {{#if (and this.selected this.interactive)}}\n <Pill\n @size=\"small\"\n class=\"say-link-tooltip\"\n id=\"link-tooltip\"\n {{velcro.loop}}\n >\n <AuLinkExternal\n href={{this.href}}\n @skin=\"button-naked\"\n @icon={{this.LinkExternalIcon}}\n title={{t \"ember-rdfa-editor.link.open\"}}\n />\n <AuInput\n value={{this.href}}\n placeholder={{t \"ember-rdfa-editor.link.placeholder.href\"}}\n {{on \"change\" this.setHref}}\n {{on \"focus\" this.selectHref}}\n {{leave-on-enter-key this.controller @getPos}}\n />\n <AuButton\n @icon={{this.LinkBrokenIcon}}\n @skin=\"naked\"\n @size=\"small\"\n {{on \"click\" this.remove}}\n title={{t \"ember-rdfa-editor.link.edit.uncouple\"}}\n />\n </Pill>\n {{/if}}\n</this.Velcro>");
|
|
17
|
+
import { g, i, n } from 'decorator-transforms/runtime';
|
|
13
18
|
|
|
14
19
|
class Link extends Component {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
20
|
+
static {
|
|
21
|
+
g(this.prototype, "intl", [service]);
|
|
22
|
+
}
|
|
23
|
+
#intl = (i(this, "intl"), void 0);
|
|
24
|
+
static {
|
|
25
|
+
g(this.prototype, "hideTooltip", [tracked], function () {
|
|
26
|
+
return false;
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
#hideTooltip = (i(this, "hideTooltip"), void 0);
|
|
30
|
+
get isNewLink() {
|
|
31
|
+
return this.link && this.link.node.attrs['isNew'];
|
|
32
|
+
}
|
|
33
|
+
selectionChangeHandler = selected => {
|
|
34
|
+
this.hideTooltip = false;
|
|
35
|
+
if (!selected && this.isNewLink) {
|
|
36
|
+
this.args.updateAttribute('isNew', false, true);
|
|
37
|
+
}
|
|
38
|
+
};
|
|
18
39
|
get href() {
|
|
19
40
|
return this.args.node.attrs['href'];
|
|
20
41
|
}
|
|
21
|
-
|
|
22
|
-
this.args.
|
|
42
|
+
get link() {
|
|
43
|
+
const pos = this.args.getPos();
|
|
44
|
+
if (!pos) {
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
return {
|
|
48
|
+
node: this.args.node,
|
|
49
|
+
pos
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
get linkParser() {
|
|
53
|
+
return this.node.attrs['linkParser'] ?? defaultLinkParser();
|
|
54
|
+
}
|
|
55
|
+
get linkParserResult() {
|
|
56
|
+
return this.linkParser(this.href);
|
|
57
|
+
}
|
|
58
|
+
static {
|
|
59
|
+
n(this.prototype, "linkParserResult", [cached]);
|
|
60
|
+
}
|
|
61
|
+
get linkTitle() {
|
|
62
|
+
if (this.linkParserResult.isSuccessful) {
|
|
63
|
+
return this.intl.t('ember-rdfa-editor.link.ctrlClickDescription');
|
|
64
|
+
} else {
|
|
65
|
+
return this.linkParserResult.errors[0];
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
get linkIcon() {
|
|
69
|
+
if (this.linkParserResult.isSuccessful || this.isNewLink) {
|
|
70
|
+
return;
|
|
71
|
+
} else {
|
|
72
|
+
return CircleXIcon;
|
|
73
|
+
}
|
|
23
74
|
}
|
|
24
75
|
get controller() {
|
|
25
76
|
return this.args.controller;
|
|
@@ -34,32 +85,7 @@ class Link extends Component {
|
|
|
34
85
|
return this.node.attrs['interactive'];
|
|
35
86
|
}
|
|
36
87
|
get class() {
|
|
37
|
-
return
|
|
38
|
-
}
|
|
39
|
-
onSelectEmbedded(selected, innerState) {
|
|
40
|
-
if (!selected && !this.href) {
|
|
41
|
-
const href = linkToHref(innerState.doc.textContent);
|
|
42
|
-
if (href) {
|
|
43
|
-
this.href = href;
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
static {
|
|
48
|
-
n(this.prototype, "onSelectEmbedded", [action]);
|
|
49
|
-
}
|
|
50
|
-
setHref(event) {
|
|
51
|
-
const text = event.target.value;
|
|
52
|
-
const href = linkToHref(text);
|
|
53
|
-
this.href = href || text;
|
|
54
|
-
}
|
|
55
|
-
static {
|
|
56
|
-
n(this.prototype, "setHref", [action]);
|
|
57
|
-
}
|
|
58
|
-
selectHref(event) {
|
|
59
|
-
event.target.select();
|
|
60
|
-
}
|
|
61
|
-
static {
|
|
62
|
-
n(this.prototype, "selectHref", [action]);
|
|
88
|
+
return `say-pill ${this.linkParserResult.isSuccessful || this.isNewLink ? '' : 'say-pill--error'}`;
|
|
63
89
|
}
|
|
64
90
|
onClick(event) {
|
|
65
91
|
if (event.ctrlKey || event.metaKey) {
|
|
@@ -69,21 +95,32 @@ class Link extends Component {
|
|
|
69
95
|
static {
|
|
70
96
|
n(this.prototype, "onClick", [action]);
|
|
71
97
|
}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
if (pos !== undefined) {
|
|
75
|
-
this.controller.withTransaction(tr => {
|
|
76
|
-
return tr.replaceWith(pos, pos + this.node.nodeSize, this.node.content);
|
|
77
|
-
}, {
|
|
78
|
-
view: this.controller.mainEditorView
|
|
79
|
-
});
|
|
80
|
-
}
|
|
98
|
+
get shouldShowTooltip() {
|
|
99
|
+
return this.interactive && this.link && this.selected && !this.hideTooltip;
|
|
81
100
|
}
|
|
101
|
+
onKeyUp = event => {
|
|
102
|
+
if (event.key === 'Escape' || event.key === 'Enter') {
|
|
103
|
+
this.hideTooltip = true;
|
|
104
|
+
} else {
|
|
105
|
+
this.hideTooltip = false;
|
|
106
|
+
}
|
|
107
|
+
};
|
|
82
108
|
static {
|
|
83
|
-
n
|
|
109
|
+
setComponentTemplate(precompileTemplate("\n <Velcro @placement=\"bottom-start\" @offsetOptions={{hash mainAxis=3}} @strategy=\"fixed\" as |velcro|>\n <Pill {{on \"keyup\" this.onKeyUp}} class={{this.class}} @skin=\"link\" @icon={{this.linkIcon}} title={{this.linkTitle}} aria-describedby=\"link-tooltip\" {{velcro.hook}} {{on \"click\" this.onClick}}>\n <EmbeddedEditor @controller={{@controller}} @node={{@node}} @view={{@view}} @getPos={{@getPos}} @onSelected={{this.selectionChangeHandler}} @selected={{@selected}} @placeholder={{t \"ember-rdfa-editor.link.placeholder.text\"}} @contentDecorations={{@contentDecorations}} @updateAttribute={{@updateAttribute}} @selectNode={{@selectNode}} {{leaveOnEnterKey @controller @getPos}} />\n </Pill>\n {{#if this.shouldShowTooltip}}\n <LinkEditor {{on \"keyup\" this.onKeyUp}} @controller={{@controller}} {{!-- @glint-expect-error --}} @link={{this.link}} @linkParser={{this.linkParser}} {{velcro.loop}} />\n {{/if}}\n </Velcro>\n ", {
|
|
110
|
+
strictMode: true,
|
|
111
|
+
scope: () => ({
|
|
112
|
+
Velcro,
|
|
113
|
+
hash,
|
|
114
|
+
Pill: PillComponent,
|
|
115
|
+
on,
|
|
116
|
+
EmbeddedEditor,
|
|
117
|
+
t,
|
|
118
|
+
leaveOnEnterKey,
|
|
119
|
+
LinkEditor
|
|
120
|
+
})
|
|
121
|
+
}), this);
|
|
84
122
|
}
|
|
85
123
|
}
|
|
86
|
-
setComponentTemplate(TEMPLATE, Link);
|
|
87
124
|
|
|
88
125
|
export { Link as default };
|
|
89
126
|
//# sourceMappingURL=link.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"link.js","sources":["../../../src/components/ember-node/link.
|
|
1
|
+
{"version":3,"file":"link.js","sources":["../../../src/components/ember-node/link.gts"],"sourcesContent":["import leaveOnEnterKey from '#root/modifiers/leave-on-enter-key.ts';\nimport { action } from '@ember/object';\nimport Component from '@glimmer/component';\nimport type { EmberNodeArgs } from '#root/utils/ember-node.ts';\nimport { Velcro } from 'ember-velcro';\nimport { hash } from '@ember/helper';\nimport EmbeddedEditor from './embedded-editor.gts';\nimport { on } from '@ember/modifier';\nimport t from 'ember-intl/helpers/t';\nimport Pill from '#root/components/pill.gts';\nimport LinkEditor from '../plugins/link/_private/link-editor.gts';\nimport {\n defaultLinkParser,\n type LinkParser,\n} from '#root/plugins/link/parser.ts';\nimport { cached, tracked } from '@glimmer/tracking';\nimport { service } from '@ember/service';\nimport type IntlService from 'ember-intl/services/intl';\nimport { CircleXIcon } from '@appuniversum/ember-appuniversum/components/icons/circle-x';\n\nexport default class Link extends Component<EmberNodeArgs> {\n @service declare intl: IntlService;\n @tracked hideTooltip = false;\n\n get isNewLink() {\n return this.link && (this.link.node.attrs['isNew'] as boolean);\n }\n\n selectionChangeHandler = (selected: boolean) => {\n this.hideTooltip = false;\n if (!selected && this.isNewLink) {\n this.args.updateAttribute('isNew', false, true);\n }\n };\n\n get href() {\n return this.args.node.attrs['href'] as string;\n }\n\n get link() {\n const pos = this.args.getPos();\n if (!pos) {\n return;\n }\n return {\n node: this.args.node,\n pos,\n };\n }\n\n get linkParser() {\n return (\n (this.node.attrs['linkParser'] as LinkParser | null) ??\n defaultLinkParser()\n );\n }\n\n @cached\n get linkParserResult() {\n return this.linkParser(this.href);\n }\n\n get linkTitle() {\n if (this.linkParserResult.isSuccessful) {\n return this.intl.t('ember-rdfa-editor.link.ctrlClickDescription');\n } else {\n return this.linkParserResult.errors[0];\n }\n }\n\n get linkIcon() {\n if (this.linkParserResult.isSuccessful || this.isNewLink) {\n return;\n } else {\n return CircleXIcon;\n }\n }\n\n get controller() {\n return this.args.controller;\n }\n\n get node() {\n return this.args.node;\n }\n\n get selected() {\n return this.args.selected;\n }\n\n get interactive() {\n return this.node.attrs['interactive'] as boolean;\n }\n\n get class() {\n return `say-pill ${this.linkParserResult.isSuccessful || this.isNewLink ? '' : 'say-pill--error'}`;\n }\n\n @action\n onClick(event: PointerEvent) {\n if (event.ctrlKey || event.metaKey) {\n window.open(this.href);\n }\n }\n\n get shouldShowTooltip() {\n return this.interactive && this.link && this.selected && !this.hideTooltip;\n }\n\n onKeyUp = (event: KeyboardEvent) => {\n if (event.key === 'Escape' || event.key === 'Enter') {\n this.hideTooltip = true;\n } else {\n this.hideTooltip = false;\n }\n };\n\n <template>\n <Velcro\n @placement=\"bottom-start\"\n @offsetOptions={{hash mainAxis=3}}\n @strategy=\"fixed\"\n as |velcro|\n >\n <Pill\n {{on \"keyup\" this.onKeyUp}}\n class={{this.class}}\n @skin=\"link\"\n @icon={{this.linkIcon}}\n title={{this.linkTitle}}\n aria-describedby=\"link-tooltip\"\n {{velcro.hook}}\n {{on \"click\" this.onClick}}\n >\n <EmbeddedEditor\n @controller={{@controller}}\n @node={{@node}}\n @view={{@view}}\n @getPos={{@getPos}}\n @onSelected={{this.selectionChangeHandler}}\n @selected={{@selected}}\n @placeholder={{t \"ember-rdfa-editor.link.placeholder.text\"}}\n @contentDecorations={{@contentDecorations}}\n @updateAttribute={{@updateAttribute}}\n @selectNode={{@selectNode}}\n {{leaveOnEnterKey @controller @getPos}}\n />\n </Pill>\n {{#if this.shouldShowTooltip}}\n <LinkEditor\n {{on \"keyup\" this.onKeyUp}}\n @controller={{@controller}}\n {{! @glint-expect-error }}\n @link={{this.link}}\n @linkParser={{this.linkParser}}\n {{velcro.loop}}\n />\n {{/if}}\n </Velcro>\n </template>\n}\n"],"names":["Link","Component","g","prototype","service","i","tracked","isNewLink","link","node","attrs","selectionChangeHandler","selected","hideTooltip","args","updateAttribute","href","pos","getPos","linkParser","defaultLinkParser","linkParserResult","n","cached","linkTitle","isSuccessful","intl","t","errors","linkIcon","CircleXIcon","controller","interactive","class","onClick","event","ctrlKey","metaKey","window","open","action","shouldShowTooltip","onKeyUp","key","setComponentTemplate","precompileTemplate","strictMode","scope","Velcro","hash","Pill","on","EmbeddedEditor","leaveOnEnterKey","LinkEditor"],"mappings":"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"}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import { action } from '@ember/object';
|
|
2
|
+
import didInsert from '@ember/render-modifiers/modifiers/did-insert';
|
|
2
3
|
import Component from '@glimmer/component';
|
|
3
4
|
import { precompileTemplate } from '@ember/template-compilation';
|
|
4
|
-
import { n } from 'decorator-transforms/runtime';
|
|
5
5
|
import { setComponentTemplate } from '@ember/component';
|
|
6
|
-
|
|
7
|
-
var TEMPLATE = precompileTemplate("{{! @glint-nocheck: not typesafe yet }}\n{{! template-lint-disable no-at-ember-render-modifiers }}\n<div data-slot {{did-insert this.didInsert}}></div>");
|
|
6
|
+
import { n } from 'decorator-transforms/runtime';
|
|
8
7
|
|
|
9
8
|
class EmberNodeSlot extends Component {
|
|
10
9
|
didInsert(slotElement) {
|
|
@@ -13,8 +12,15 @@ class EmberNodeSlot extends Component {
|
|
|
13
12
|
static {
|
|
14
13
|
n(this.prototype, "didInsert", [action]);
|
|
15
14
|
}
|
|
15
|
+
static {
|
|
16
|
+
setComponentTemplate(precompileTemplate("\n <div data-slot {{didInsert this.didInsert}}></div>\n ", {
|
|
17
|
+
strictMode: true,
|
|
18
|
+
scope: () => ({
|
|
19
|
+
didInsert
|
|
20
|
+
})
|
|
21
|
+
}), this);
|
|
22
|
+
}
|
|
16
23
|
}
|
|
17
|
-
setComponentTemplate(TEMPLATE, EmberNodeSlot);
|
|
18
24
|
|
|
19
25
|
export { EmberNodeSlot as default };
|
|
20
26
|
//# sourceMappingURL=slot.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slot.js","sources":["../../../src/components/ember-node/slot.
|
|
1
|
+
{"version":3,"file":"slot.js","sources":["../../../src/components/ember-node/slot.gts"],"sourcesContent":["import { action } from '@ember/object';\n// eslint-disable-next-line ember/no-at-ember-render-modifiers\nimport didInsert from '@ember/render-modifiers/modifiers/did-insert';\nimport Component from '@glimmer/component';\n\nexport default class EmberNodeSlot extends Component<{\n contentDOM: HTMLElement;\n}> {\n @action\n didInsert(slotElement: HTMLElement) {\n slotElement.appendChild(this.args.contentDOM);\n }\n\n <template>\n <div data-slot {{didInsert this.didInsert}}></div>\n </template>\n}\n"],"names":["EmberNodeSlot","Component","didInsert","slotElement","appendChild","args","contentDOM","n","prototype","action","setComponentTemplate","precompileTemplate","strictMode","scope"],"mappings":";;;;;;;AAKe,MAAMA,aAAA,SAAsBC,SAAA;EAIzCC,SAAAA,CAAUC,WAAwB,EAAE;IAClCA,WAAA,CAAYC,WAAW,CAAC,IAAI,CAACC,IAAI,CAACC,UAAU,CAAA;AAC9C,EAAA;AAAA,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,WAAA,EAAA,CAHCC,MAAA,CAAA,CAAA;AAAA;AAKD,EAAA;IAAAC,oBAAA,CAAAC,kBAAA,CAAA,8DAAA,EAEA;MAAAC,UAAA,EAAA,IAAA;AAAAC,MAAAA,KAAA,EAAAA,OAAA;AAAAX,QAAAA;AAAA,OAAA;KAAU,CAAA,EAAV,IAAW,CAAA;AAAD;AACZ;;;;"}
|
package/dist/components/pill.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
+
import AuIcon from '@appuniversum/ember-appuniversum/components/au-icon';
|
|
1
2
|
import Component from '@glimmer/component';
|
|
3
|
+
import { eq, notEq } from 'ember-truth-helpers';
|
|
2
4
|
import { precompileTemplate } from '@ember/template-compilation';
|
|
3
5
|
import { setComponentTemplate } from '@ember/component';
|
|
4
6
|
|
|
5
|
-
var TEMPLATE = precompileTemplate("{{! @glint-nocheck: not typesafe yet }}\n<span class=\"au-c-pill {{this.skin}} {{this.size}}\" ...attributes>\n {{#if @icon}}\n {{#if (not-eq @iconAlignment \"right\")}}\n <AuIcon @icon={{@icon}} />\n {{/if}}\n {{/if}}\n {{yield}}\n {{#if @icon}}\n {{#if (eq @iconAlignment \"right\")}}\n <AuIcon @icon={{@icon}} />\n {{/if}}\n {{/if}}\n</span>");
|
|
6
|
-
|
|
7
7
|
class PillComponent extends Component {
|
|
8
8
|
get skin() {
|
|
9
9
|
if (this.args.skin) {
|
|
@@ -20,8 +20,17 @@ class PillComponent extends Component {
|
|
|
20
20
|
get iconAlignment() {
|
|
21
21
|
return this.args.iconAlignment ?? 'left';
|
|
22
22
|
}
|
|
23
|
+
static {
|
|
24
|
+
setComponentTemplate(precompileTemplate("\n <span class=\"au-c-pill {{this.skin}} {{this.size}}\" ...attributes>\n {{#if @icon}}\n {{#if (notEq @iconAlignment \"right\")}}\n <AuIcon @icon={{@icon}} />\n {{/if}}\n {{/if}}\n {{yield}}\n {{#if @icon}}\n {{#if (eq @iconAlignment \"right\")}}\n <AuIcon @icon={{@icon}} />\n {{/if}}\n {{/if}}\n </span>\n ", {
|
|
25
|
+
strictMode: true,
|
|
26
|
+
scope: () => ({
|
|
27
|
+
notEq,
|
|
28
|
+
AuIcon,
|
|
29
|
+
eq
|
|
30
|
+
})
|
|
31
|
+
}), this);
|
|
32
|
+
}
|
|
23
33
|
}
|
|
24
|
-
setComponentTemplate(TEMPLATE, PillComponent);
|
|
25
34
|
|
|
26
35
|
export { PillComponent as default };
|
|
27
36
|
//# sourceMappingURL=pill.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pill.js","sources":["../../src/components/pill.
|
|
1
|
+
{"version":3,"file":"pill.js","sources":["../../src/components/pill.gts"],"sourcesContent":["import AuIcon from '@appuniversum/ember-appuniversum/components/au-icon';\nimport Component from '@glimmer/component';\nimport type { ComponentLike } from '@glint/template';\nimport { eq, notEq } from 'ember-truth-helpers';\n\nconst PILL_SIZES = ['small'] as const;\n\nexport type PillComponentSignature = {\n Element: HTMLSpanElement;\n Args: {\n skin?:\n | 'border'\n | 'action'\n | 'ongoing'\n | 'link'\n | 'success'\n | 'warning'\n | 'error';\n size?: (typeof PILL_SIZES)[number];\n iconAlignment?: 'left' | 'right';\n icon?: ComponentLike<{ Element: Element }>;\n };\n Blocks: {\n default: [];\n };\n};\n\nexport default class PillComponent extends Component<PillComponentSignature> {\n get skin() {\n if (this.args.skin) {\n return `au-c-pill--${this.args.skin}`;\n }\n\n return 'au-c-pill--default';\n }\n\n get size() {\n if (!this.args.size) {\n return '';\n }\n\n return `au-c-pill--${this.args.size}`;\n }\n\n get iconAlignment(): PillComponentSignature['Args']['iconAlignment'] {\n return this.args.iconAlignment ?? 'left';\n }\n\n <template>\n <span class=\"au-c-pill {{this.skin}} {{this.size}}\" ...attributes>\n {{#if @icon}}\n {{#if (notEq @iconAlignment \"right\")}}\n <AuIcon @icon={{@icon}} />\n {{/if}}\n {{/if}}\n {{yield}}\n {{#if @icon}}\n {{#if (eq @iconAlignment \"right\")}}\n <AuIcon @icon={{@icon}} />\n {{/if}}\n {{/if}}\n </span>\n </template>\n}\n"],"names":["PillComponent","Component","skin","args","size","iconAlignment","setComponentTemplate","precompileTemplate","strictMode","scope","notEq","AuIcon","eq"],"mappings":";;;;;;AA2Be,MAAMA,sBAAsBC,SAAA,CAAU;EACnD,IAAIC,IAAAA,GAAO;AACT,IAAA,IAAI,IAAI,CAACC,IAAI,CAACD,IAAI,EAAE;AAClB,MAAA,OAAO,cAAc,IAAI,CAACC,IAAI,CAACD,IAAI,CAAA,CAAE;AACvC,IAAA;AAEA,IAAA,OAAO,oBAAA;AACT,EAAA;EAEA,IAAIE,IAAAA,GAAO;AACT,IAAA,IAAI,CAAC,IAAI,CAACD,IAAI,CAACC,IAAI,EAAE;AACnB,MAAA,OAAO,EAAA;AACT,IAAA;AAEA,IAAA,OAAO,cAAc,IAAI,CAACD,IAAI,CAACC,IAAI,CAAA,CAAE;AACvC,EAAA;EAEA,IAAIC,aAAAA,GAAiE;AACnE,IAAA,OAAO,IAAI,CAACF,IAAI,CAACE,aAAa,IAAI,MAAA;AACpC,EAAA;AAEA,EAAA;IAAAC,oBAAA,CAAAC,kBAAA,CAAA,qYAAA,EAcA;MAAAC,UAAA,EAAA,IAAA;AAAAC,MAAAA,KAAA,EAAAA,OAAA;QAAAC,KAAA;QAAAC,MAAA;AAAAC,QAAAA;AAAA,OAAA;KAAU,CAAA,EAAV,IAAW,CAAA;AAAD;AACZ;;;;"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { action } from '@ember/object';
|
|
2
|
+
import Component from '@glimmer/component';
|
|
3
|
+
import { LinkExternalIcon } from '@appuniversum/ember-appuniversum/components/icons/link-external';
|
|
4
|
+
import { LinkBrokenIcon } from '@appuniversum/ember-appuniversum/components/icons/link-broken';
|
|
5
|
+
import AuCard from '@appuniversum/ember-appuniversum/components/au-card';
|
|
6
|
+
import AuHeading from '@appuniversum/ember-appuniversum/components/au-heading';
|
|
7
|
+
import AuButton from '@appuniversum/ember-appuniversum/components/au-button';
|
|
8
|
+
import t from 'ember-intl/helpers/t';
|
|
9
|
+
import { on } from '@ember/modifier';
|
|
10
|
+
import AuInput from '@appuniversum/ember-appuniversum/components/au-input';
|
|
11
|
+
import AuLinkExternal from '@appuniversum/ember-appuniversum/components/au-link-external';
|
|
12
|
+
import AuAlert from '@appuniversum/ember-appuniversum/components/au-alert';
|
|
13
|
+
import { cached } from '@glimmer/tracking';
|
|
14
|
+
import { defaultLinkParser } from '../../../../plugins/link/parser.js';
|
|
15
|
+
import { LinkIcon } from '@appuniversum/ember-appuniversum/components/icons/link';
|
|
16
|
+
import { MessageIcon } from '@appuniversum/ember-appuniversum/components/icons/message';
|
|
17
|
+
import { modifier } from 'ember-modifier';
|
|
18
|
+
import { precompileTemplate } from '@ember/template-compilation';
|
|
19
|
+
import { setComponentTemplate } from '@ember/component';
|
|
20
|
+
import { n } from 'decorator-transforms/runtime';
|
|
21
|
+
|
|
22
|
+
class LinkEditor extends Component {
|
|
23
|
+
get isNewLink() {
|
|
24
|
+
return this.link.node.attrs['isNew'];
|
|
25
|
+
}
|
|
26
|
+
parseLink = input => {
|
|
27
|
+
return this.args.linkParser ? this.args.linkParser(input) : defaultLinkParser()(input);
|
|
28
|
+
};
|
|
29
|
+
get linkParserResult() {
|
|
30
|
+
return this.parseLink(this.href);
|
|
31
|
+
}
|
|
32
|
+
static {
|
|
33
|
+
n(this.prototype, "linkParserResult", [cached]);
|
|
34
|
+
}
|
|
35
|
+
get controller() {
|
|
36
|
+
return this.args.controller;
|
|
37
|
+
}
|
|
38
|
+
get link() {
|
|
39
|
+
return this.args.link;
|
|
40
|
+
}
|
|
41
|
+
get href() {
|
|
42
|
+
return this.link.node.attrs['href'];
|
|
43
|
+
}
|
|
44
|
+
setHref(event) {
|
|
45
|
+
const text = event.target.value;
|
|
46
|
+
const result = this.parseLink(text);
|
|
47
|
+
const {
|
|
48
|
+
pos
|
|
49
|
+
} = this.link;
|
|
50
|
+
this.controller.withTransaction(tr => {
|
|
51
|
+
tr.setNodeAttribute(pos, 'href', result.value ?? text);
|
|
52
|
+
tr.setNodeAttribute(pos, 'isNew', false);
|
|
53
|
+
return tr;
|
|
54
|
+
},
|
|
55
|
+
// After reload the default (activeEditorView) is just the link text, so use the main view
|
|
56
|
+
{
|
|
57
|
+
view: this.controller.mainEditorView
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
static {
|
|
61
|
+
n(this.prototype, "setHref", [action]);
|
|
62
|
+
}
|
|
63
|
+
get linkText() {
|
|
64
|
+
return this.link.node.textContent;
|
|
65
|
+
}
|
|
66
|
+
setLinkText(event) {
|
|
67
|
+
const text = event.target.value;
|
|
68
|
+
const {
|
|
69
|
+
pos,
|
|
70
|
+
node
|
|
71
|
+
} = this.link;
|
|
72
|
+
this.controller.withTransaction(tr => tr.insertText(text, pos + 1, pos + node.nodeSize - 1), {
|
|
73
|
+
view: this.controller.mainEditorView
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
static {
|
|
77
|
+
n(this.prototype, "setLinkText", [action]);
|
|
78
|
+
}
|
|
79
|
+
selectInputElement(event) {
|
|
80
|
+
event.target.select();
|
|
81
|
+
}
|
|
82
|
+
static {
|
|
83
|
+
n(this.prototype, "selectInputElement", [action]);
|
|
84
|
+
}
|
|
85
|
+
remove() {
|
|
86
|
+
const {
|
|
87
|
+
pos,
|
|
88
|
+
node
|
|
89
|
+
} = this.link;
|
|
90
|
+
this.controller.withTransaction(tr => {
|
|
91
|
+
return tr.replaceWith(pos, pos + node.nodeSize, node.content);
|
|
92
|
+
}, {
|
|
93
|
+
view: this.controller.mainEditorView
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
static {
|
|
97
|
+
n(this.prototype, "remove", [action]);
|
|
98
|
+
}
|
|
99
|
+
disableDragging = modifier(element => {
|
|
100
|
+
const preventDefault = event => event.preventDefault();
|
|
101
|
+
element.addEventListener('dragstart', preventDefault);
|
|
102
|
+
return () => {
|
|
103
|
+
element.removeEventListener('dragstart', preventDefault);
|
|
104
|
+
};
|
|
105
|
+
});
|
|
106
|
+
static {
|
|
107
|
+
setComponentTemplate(precompileTemplate("\n <AuCard {{this.disableDragging}} class=\"say-link-editor\" @flex={{true}} @expandable={{false}} @size=\"small\" @shadow={{true}} @disableAuContent={{true}} ...attributes as |c|>\n {{#if @showTitle}}\n <c.header>\n <AuHeading @level=\"3\" @skin=\"5\">{{t \"ember-rdfa-editor.link.edit.title\"}}</AuHeading>\n </c.header>\n {{/if}}\n <c.content class=\"au-u-flex au-u-flex--column au-u-flex--spaced-tiny\">\n <AuInput value={{this.linkText}} @width=\"block\" @icon={{MessageIcon}} {{on \"change\" this.setLinkText}} {{on \"focus\" this.selectInputElement}} placeholder={{t \"ember-rdfa-editor.link.placeholder.text\"}} />\n <AuInput value={{this.href}} @width=\"block\" @icon={{LinkIcon}} {{on \"change\" this.setHref}} {{on \"focus\" this.selectInputElement}} placeholder={{t \"ember-rdfa-editor.link.placeholder.href\"}} />\n {{#unless this.isNewLink}}\n {{#unless this.linkParserResult.isSuccessful}}\n {{#let this.linkParserResult.errors as |errors|}}\n {{#each errors as |error|}}\n <AuAlert class=\"au-u-margin-bottom-none\" @size=\"small\" @skin=\"error\" @icon=\"cross\">\n {{error}}\n </AuAlert>\n {{/each}}\n {{/let}}\n {{/unless}}\n {{/unless}}\n </c.content>\n <c.footer class=\"au-u-flex au-u-flex--spaced-small au-u-margin-left-tiny au-u-margin-right-tiny\">\n <AuLinkExternal class=\"say-link-editor__button\" @icon={{LinkExternalIcon}} @skin=\"bold\" href={{this.href}}>{{t \"ember-rdfa-editor.link.open\"}}</AuLinkExternal>\n <AuButton class=\"au-u-padding-none\" @icon={{LinkBrokenIcon}} @skin=\"link-bold\" @alert={{true}} {{on \"click\" this.remove}}>{{t \"ember-rdfa-editor.link.edit.uncouple\"}}</AuButton>\n </c.footer>\n </AuCard>\n ", {
|
|
108
|
+
strictMode: true,
|
|
109
|
+
scope: () => ({
|
|
110
|
+
AuCard,
|
|
111
|
+
AuHeading,
|
|
112
|
+
t,
|
|
113
|
+
AuInput,
|
|
114
|
+
MessageIcon,
|
|
115
|
+
on,
|
|
116
|
+
LinkIcon,
|
|
117
|
+
AuAlert,
|
|
118
|
+
AuLinkExternal,
|
|
119
|
+
LinkExternalIcon,
|
|
120
|
+
AuButton,
|
|
121
|
+
LinkBrokenIcon
|
|
122
|
+
})
|
|
123
|
+
}), this);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
export { LinkEditor as default };
|
|
128
|
+
//# sourceMappingURL=link-editor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"link-editor.js","sources":["../../../../../src/components/plugins/link/_private/link-editor.gts"],"sourcesContent":["import { action } from '@ember/object';\nimport Component from '@glimmer/component';\nimport { LinkExternalIcon } from '@appuniversum/ember-appuniversum/components/icons/link-external';\nimport { LinkBrokenIcon } from '@appuniversum/ember-appuniversum/components/icons/link-broken';\nimport type SayController from '#root/core/say-controller.ts';\nimport AuCard from '@appuniversum/ember-appuniversum/components/au-card';\nimport AuHeading from '@appuniversum/ember-appuniversum/components/au-heading';\nimport AuButton from '@appuniversum/ember-appuniversum/components/au-button';\nimport t from 'ember-intl/helpers/t';\nimport { on } from '@ember/modifier';\nimport AuInput from '@appuniversum/ember-appuniversum/components/au-input';\nimport AuLinkExternal from '@appuniversum/ember-appuniversum/components/au-link-external';\nimport AuAlert from '@appuniversum/ember-appuniversum/components/au-alert';\nimport { cached } from '@glimmer/tracking';\nimport type { LinkParser } from '#root/plugins/link/parser.js';\nimport { defaultLinkParser } from '#root/plugins/link/parser.ts';\nimport type { PNode } from '#root/prosemirror-aliases.js';\nimport { LinkIcon } from '@appuniversum/ember-appuniversum/components/icons/link';\nimport { MessageIcon } from '@appuniversum/ember-appuniversum/components/icons/message';\nimport { modifier } from 'ember-modifier';\n\ntype Args = {\n controller: SayController;\n linkParser: LinkParser;\n link: { pos: number; node: PNode };\n showTitle?: boolean;\n};\n\nexport default class LinkEditor extends Component<Args> {\n get isNewLink() {\n return this.link.node.attrs['isNew'] as boolean;\n }\n\n parseLink: LinkParser = (input?: string) => {\n return this.args.linkParser\n ? this.args.linkParser(input)\n : defaultLinkParser()(input);\n };\n\n @cached\n get linkParserResult() {\n return this.parseLink(this.href);\n }\n\n get controller() {\n return this.args.controller;\n }\n\n get link() {\n return this.args.link;\n }\n\n get href() {\n return this.link.node.attrs['href'] as string | undefined;\n }\n\n @action\n setHref(event: InputEvent) {\n const text = (event.target as HTMLInputElement).value;\n const result = this.parseLink(text);\n\n const { pos } = this.link;\n this.controller.withTransaction(\n (tr) => {\n tr.setNodeAttribute(pos, 'href', result.value ?? text);\n tr.setNodeAttribute(pos, 'isNew', false);\n return tr;\n },\n // After reload the default (activeEditorView) is just the link text, so use the main view\n { view: this.controller.mainEditorView },\n );\n }\n\n get linkText() {\n return this.link.node.textContent;\n }\n\n @action\n setLinkText(event: InputEvent) {\n const text = (event.target as HTMLInputElement).value;\n const { pos, node } = this.link;\n this.controller.withTransaction(\n (tr) => tr.insertText(text, pos + 1, pos + node.nodeSize - 1),\n { view: this.controller.mainEditorView },\n );\n }\n\n @action\n selectInputElement(event: FocusEvent) {\n (event.target as HTMLInputElement).select();\n }\n @action\n remove() {\n const { pos, node } = this.link;\n this.controller.withTransaction(\n (tr) => {\n return tr.replaceWith(pos, pos + node.nodeSize, node.content);\n },\n { view: this.controller.mainEditorView },\n );\n }\n\n disableDragging = modifier((element: HTMLElement) => {\n const preventDefault = (event: InputEvent) => event.preventDefault();\n element.addEventListener('dragstart', preventDefault);\n return () => {\n element.removeEventListener('dragstart', preventDefault);\n };\n });\n\n <template>\n <AuCard\n {{this.disableDragging}}\n class=\"say-link-editor\"\n @flex={{true}}\n @expandable={{false}}\n @size=\"small\"\n @shadow={{true}}\n @disableAuContent={{true}}\n ...attributes\n as |c|\n >\n {{#if @showTitle}}\n <c.header>\n <AuHeading @level=\"3\" @skin=\"5\">{{t\n \"ember-rdfa-editor.link.edit.title\"\n }}</AuHeading>\n </c.header>\n {{/if}}\n <c.content class=\"au-u-flex au-u-flex--column au-u-flex--spaced-tiny\">\n <AuInput\n value={{this.linkText}}\n @width=\"block\"\n @icon={{MessageIcon}}\n {{on \"change\" this.setLinkText}}\n {{on \"focus\" this.selectInputElement}}\n placeholder={{t \"ember-rdfa-editor.link.placeholder.text\"}}\n />\n <AuInput\n value={{this.href}}\n @width=\"block\"\n @icon={{LinkIcon}}\n {{on \"change\" this.setHref}}\n {{on \"focus\" this.selectInputElement}}\n placeholder={{t \"ember-rdfa-editor.link.placeholder.href\"}}\n />\n {{#unless this.isNewLink}}\n {{#unless this.linkParserResult.isSuccessful}}\n {{#let this.linkParserResult.errors as |errors|}}\n {{#each errors as |error|}}\n <AuAlert\n class=\"au-u-margin-bottom-none\"\n @size=\"small\"\n @skin=\"error\"\n @icon=\"cross\"\n >\n {{error}}\n </AuAlert>\n {{/each}}\n {{/let}}\n {{/unless}}\n {{/unless}}\n </c.content>\n <c.footer\n class=\"au-u-flex au-u-flex--spaced-small au-u-margin-left-tiny au-u-margin-right-tiny\"\n >\n <AuLinkExternal\n class=\"say-link-editor__button\"\n @icon={{LinkExternalIcon}}\n @skin=\"bold\"\n href={{this.href}}\n >{{t \"ember-rdfa-editor.link.open\"}}</AuLinkExternal>\n <AuButton\n class=\"au-u-padding-none\"\n @icon={{LinkBrokenIcon}}\n @skin=\"link-bold\"\n @alert={{true}}\n {{on \"click\" this.remove}}\n >{{t \"ember-rdfa-editor.link.edit.uncouple\"}}</AuButton>\n </c.footer>\n </AuCard>\n </template>\n}\n"],"names":["LinkEditor","Component","isNewLink","link","node","attrs","parseLink","input","args","linkParser","defaultLinkParser","linkParserResult","href","n","prototype","cached","controller","setHref","event","text","target","value","result","pos","withTransaction","tr","setNodeAttribute","view","mainEditorView","action","linkText","textContent","setLinkText","insertText","nodeSize","selectInputElement","select","remove","replaceWith","content","disableDragging","modifier","element","preventDefault","addEventListener","removeEventListener","setComponentTemplate","precompileTemplate","strictMode","scope","AuCard","AuHeading","t","AuInput","MessageIcon","on","LinkIcon","AuAlert","AuLinkExternal","LinkExternalIcon","AuButton","LinkBrokenIcon"],"mappings":";;;;;;;;;;;;;;;;;;;;;AA4Be,MAAMA,mBAAmBC,SAAA,CAAU;EAChD,IAAIC,SAAAA,GAAY;IACd,OAAO,IAAI,CAACC,IAAI,CAACC,IAAI,CAACC,KAAK,CAAC,OAAA,CAAQ;AACtC,EAAA;EAEAC,SAAA,GAAyBC,KAAc,IAAA;IACrC,OAAO,IAAI,CAACC,IAAI,CAACC,UAAU,GACvB,IAAI,CAACD,IAAI,CAACC,UAAU,CAACF,SACrBG,iBAAA,EAAA,CAAoBH,KAAA,CAAA;EAC1B,CAAA;EAEA,IACII,gBAAAA,GAAmB;AACrB,IAAA,OAAO,IAAI,CAACL,SAAS,CAAC,IAAI,CAACM,IAAI,CAAA;AACjC,EAAA;AAAA,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,kBAAA,EAAA,CAHCC,MAAA,CAAA,CAAA;AAAA;EAKD,IAAIC,UAAAA,GAAa;AACf,IAAA,OAAO,IAAI,CAACR,IAAI,CAACQ,UAAU;AAC7B,EAAA;EAEA,IAAIb,IAAAA,GAAO;AACT,IAAA,OAAO,IAAI,CAACK,IAAI,CAACL,IAAI;AACvB,EAAA;EAEA,IAAIS,IAAAA,GAAO;IACT,OAAO,IAAI,CAACT,IAAI,CAACC,IAAI,CAACC,KAAK,CAAC,MAAA,CAAO;AACrC,EAAA;EAGAY,OAAAA,CAAQC,KAAiB,EAAE;AACzB,IAAA,MAAMC,OAAQD,KAAA,CAAME,MAAM,CAAsBC,KAAK;AACrD,IAAA,MAAMC,MAAA,GAAS,IAAI,CAAChB,SAAS,CAACa,IAAA,CAAA;IAE9B,MAAM;AAAEI,MAAAA;KAAK,GAAG,IAAI,CAACpB,IAAI;AACzB,IAAA,IAAI,CAACa,UAAU,CAACQ,eAAe,CAC5BC,EAAA,IAAA;AACCA,MAAAA,EAAA,CAAGC,gBAAgB,CAACH,GAAA,EAAK,MAAA,EAAQD,MAAA,CAAOD,KAAK,IAAIF,IAAA,CAAA;MACjDM,EAAA,CAAGC,gBAAgB,CAACH,GAAA,EAAK,OAAA,EAAS,KAAA,CAAA;AAClC,MAAA,OAAOE,EAAA;IACT,CAAA;AACA;AACA,IAAA;AAAEE,MAAAA,IAAA,EAAM,IAAI,CAACX,UAAU,CAACY;AAAe,KAAA,CAAA;AAE3C,EAAA;AAAA,EAAA;IAAAf,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,SAAA,EAAA,CAfCe,MAAA,CAAA,CAAA;AAAA;EAiBD,IAAIC,QAAAA,GAAW;AACb,IAAA,OAAO,IAAI,CAAC3B,IAAI,CAACC,IAAI,CAAC2B,WAAW;AACnC,EAAA;EAGAC,WAAAA,CAAYd,KAAiB,EAAE;AAC7B,IAAA,MAAMC,OAAQD,KAAA,CAAME,MAAM,CAAsBC,KAAK;IACrD,MAAM;MAAEE,GAAG;AAAEnB,MAAAA;KAAM,GAAG,IAAI,CAACD,IAAI;IAC/B,IAAI,CAACa,UAAU,CAACQ,eAAe,CAC5BC,EAAA,IAAOA,EAAA,CAAGQ,UAAU,CAACd,MAAMI,GAAA,GAAM,CAAA,EAAGA,MAAMnB,IAAA,CAAK8B,QAAQ,GAAG,CAAA,CAAA,EAC3D;AAAEP,MAAAA,IAAA,EAAM,IAAI,CAACX,UAAU,CAACY;AAAe,KAAA,CAAA;AAE3C,EAAA;AAAA,EAAA;IAAAf,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,aAAA,EAAA,CARCe,MAAA,CAAA,CAAA;AAAA;EAWDM,kBAAAA,CAAmBjB,KAAiB,EAAE;AACnCA,IAAAA,KAAA,CAAME,MAAM,CAAsBgB,MAAM,EAAA;AAC3C,EAAA;AAAA,EAAA;IAAAvB,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,oBAAA,EAAA,CAHCe,MAAA,CAAA,CAAA;AAAA;AAKDQ,EAAAA,MAAAA,GAAS;IACP,MAAM;MAAEd,GAAG;AAAEnB,MAAAA;KAAM,GAAG,IAAI,CAACD,IAAI;AAC/B,IAAA,IAAI,CAACa,UAAU,CAACQ,eAAe,CAC5BC,EAAA,IAAA;AACC,MAAA,OAAOA,EAAA,CAAGa,WAAW,CAACf,GAAA,EAAKA,MAAMnB,IAAA,CAAK8B,QAAQ,EAAE9B,IAAA,CAAKmC,OAAO,CAAA;AAC9D,IAAA,CAAA,EACA;AAAEZ,MAAAA,IAAA,EAAM,IAAI,CAACX,UAAU,CAACY;AAAe,KAAA,CAAA;AAE3C,EAAA;AAAA,EAAA;IAAAf,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,QAAA,EAAA,CATCe,MAAA,CAAA,CAAA;AAAA;AAWDW,EAAAA,eAAA,GAAkBC,QAAA,CAAUC,OAAS,IAAA;IACnC,MAAMC,cAAA,GAAkBzB,KAAO,IAAeA,MAAMyB,cAAc,EAAA;AAClED,IAAAA,OAAA,CAAQE,gBAAgB,CAAC,WAAA,EAAaD,cAAA,CAAA;AACtC,IAAA,OAAO,MAAA;AACLD,MAAAA,OAAA,CAAQG,mBAAmB,CAAC,WAAA,EAAaF,cAAA,CAAA;IAC3C,CAAA;AACF,EAAA,CAAA,CAAA;AAEA,EAAA;IAAAG,oBAAA,CAAAC,kBAAA,CAAA,m1DAAA,EAuEA;MAAAC,UAAA,EAAA,IAAA;AAAAC,MAAAA,KAAA,EAAAA,OAAA;QAAAC,MAAA;QAAAC,SAAA;QAAAC,CAAA;QAAAC,OAAA;QAAAC,WAAA;QAAAC,EAAA;QAAAC,QAAA;QAAAC,OAAA;QAAAC,cAAA;QAAAC,gBAAA;QAAAC,QAAA;AAAAC,QAAAA;AAAA,OAAA;KAAU,CAAA,EAAV,IAAW,CAAA;AAAD;AACZ;;;;"}
|
|
@@ -1,82 +1,9 @@
|
|
|
1
|
-
import
|
|
2
|
-
import Component from '@glimmer/component';
|
|
3
|
-
import { NodeSelection } from 'prosemirror-state';
|
|
4
|
-
import { linkToHref } from '../../../utils/_private/string-utils.js';
|
|
5
|
-
import { LinkExternalIcon } from '@appuniversum/ember-appuniversum/components/icons/link-external';
|
|
6
|
-
import { LinkBrokenIcon } from '@appuniversum/ember-appuniversum/components/icons/link-broken';
|
|
7
|
-
import { precompileTemplate } from '@ember/template-compilation';
|
|
8
|
-
import { n } from 'decorator-transforms/runtime';
|
|
9
|
-
import { setComponentTemplate } from '@ember/component';
|
|
1
|
+
import LinkSidebarWidget from './link-sidebar-widget.js';
|
|
10
2
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
LinkBrokenIcon = LinkBrokenIcon;
|
|
16
|
-
get controller() {
|
|
17
|
-
return this.args.controller;
|
|
18
|
-
}
|
|
19
|
-
get href() {
|
|
20
|
-
return this.link?.node.attrs['href'];
|
|
21
|
-
}
|
|
22
|
-
set href(value) {
|
|
23
|
-
if (this.link && this.controller) {
|
|
24
|
-
const {
|
|
25
|
-
pos
|
|
26
|
-
} = this.link;
|
|
27
|
-
this.controller.withTransaction(tr => tr.setNodeAttribute(pos, 'href', value),
|
|
28
|
-
// After reload the default (activeEditorView) is just the link text, so use the main view
|
|
29
|
-
{
|
|
30
|
-
view: this.controller.mainEditorView
|
|
31
|
-
});
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
setHref(event) {
|
|
35
|
-
const text = event.target.value;
|
|
36
|
-
const href = linkToHref(text);
|
|
37
|
-
this.href = href || text;
|
|
38
|
-
}
|
|
39
|
-
static {
|
|
40
|
-
n(this.prototype, "setHref", [action]);
|
|
41
|
-
}
|
|
42
|
-
selectHref(event) {
|
|
43
|
-
event.target.select();
|
|
44
|
-
}
|
|
45
|
-
static {
|
|
46
|
-
n(this.prototype, "selectHref", [action]);
|
|
47
|
-
}
|
|
48
|
-
get link() {
|
|
49
|
-
if (this.controller) {
|
|
50
|
-
const {
|
|
51
|
-
selection
|
|
52
|
-
} = this.controller.mainEditorState;
|
|
53
|
-
if (selection instanceof NodeSelection && selection.node.type === this.controller.schema.nodes['link']) {
|
|
54
|
-
return {
|
|
55
|
-
pos: selection.from,
|
|
56
|
-
node: selection.node
|
|
57
|
-
};
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
return;
|
|
61
|
-
}
|
|
62
|
-
remove() {
|
|
63
|
-
if (this.controller && this.link) {
|
|
64
|
-
const {
|
|
65
|
-
pos,
|
|
66
|
-
node
|
|
67
|
-
} = this.link;
|
|
68
|
-
this.controller.withTransaction(tr => {
|
|
69
|
-
return tr.replaceWith(pos, pos + node.nodeSize, node.content);
|
|
70
|
-
}, {
|
|
71
|
-
view: this.controller.mainEditorView
|
|
72
|
-
});
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
static {
|
|
76
|
-
n(this.prototype, "remove", [action]);
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
setComponentTemplate(TEMPLATE, LinkEditor);
|
|
3
|
+
/**
|
|
4
|
+
* @deprecated use {@link LinkSidebarWidget} instead
|
|
5
|
+
*/
|
|
6
|
+
const LinkEditor = LinkSidebarWidget;
|
|
80
7
|
|
|
81
8
|
export { LinkEditor as default };
|
|
82
9
|
//# sourceMappingURL=link-editor.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"link-editor.js","sources":["../../../../src/components/plugins/link/link-editor.
|
|
1
|
+
{"version":3,"file":"link-editor.js","sources":["../../../../src/components/plugins/link/link-editor.gts"],"sourcesContent":["import LinkSidebarWidget from './link-sidebar-widget.gts';\n\n/**\n * @deprecated use {@link LinkSidebarWidget} instead\n */\nconst LinkEditor = LinkSidebarWidget;\nexport default LinkEditor;\n"],"names":["LinkEditor","LinkSidebarWidget"],"mappings":";;AAEA;;AAEC;AACD,MAAMA,UAAA,GAAaC;;;;"}
|