@lblod/ember-rdfa-editor 13.1.0 → 13.1.1
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/README.md +165 -95
- package/dist/commands/_private/rdfa-commands/remove-backlink.js +1 -1
- package/dist/commands/_private/rdfa-commands/select-node-by-rdfa-id.js +1 -1
- package/dist/commands/_private/rdfa-commands/select-node-by-subject.js +1 -1
- package/dist/commands/_private/rdfa-commands/wrap-inline-resource.js +1 -1
- package/dist/commands/_private/rdfa-commands/wrap-literal.js +1 -1
- package/dist/commands/_private/rdfa-commands/wrap-resource.js +1 -1
- package/dist/commands/rdfa-commands/add-property.js +1 -1
- package/dist/commands/rdfa-commands/remove-property.js +1 -1
- package/dist/components/_private/attribute-editor/index.js +1 -1
- package/dist/components/_private/attribute-editor/index.js.map +1 -1
- package/dist/components/_private/common/configurable-rdfa-display.js +1 -1
- package/dist/components/_private/common/property-details.js +1 -1
- package/dist/components/_private/debug-info/index.js +1 -1
- package/dist/components/_private/debug-info/index.js.map +1 -1
- package/dist/components/_private/doc-editor/info-pill.js.map +1 -1
- package/dist/components/_private/doc-editor/lang-pill.js.map +1 -1
- package/dist/components/_private/doc-imported-resource-editor/card.js +1 -1
- package/dist/components/_private/doc-imported-resource-editor/card.js.map +1 -1
- package/dist/components/_private/doc-imported-resource-editor/form.js.map +1 -1
- package/dist/components/_private/external-triple-editor/card.js +1 -1
- package/dist/components/_private/external-triple-editor/card.js.map +1 -1
- package/dist/components/_private/external-triple-editor/form.js.map +1 -1
- package/dist/components/_private/imported-resource-linker/card.js +1 -1
- package/dist/components/_private/imported-resource-linker/card.js.map +1 -1
- package/dist/components/_private/node-controls/card.js +1 -1
- package/dist/components/_private/node-controls/card.js.map +1 -1
- package/dist/components/_private/node-controls/remove-node.js.map +1 -1
- package/dist/components/_private/node-controls/wrapping-utils.js +1 -1
- package/dist/components/_private/node-controls/wrapping-utils.js.map +1 -1
- package/dist/components/_private/rdfa-visualiser/rdfa-explorer.js +1 -1
- package/dist/components/_private/rdfa-visualiser/rdfa-explorer.js.map +1 -1
- package/dist/components/_private/rdfa-visualiser/resource-info.js +1 -1
- package/dist/components/_private/rdfa-visualiser/resource-info.js.map +1 -1
- package/dist/components/_private/rdfa-visualiser/visualiser-card.js +2 -2
- package/dist/components/_private/rdfa-visualiser/visualiser-card.js.map +1 -1
- package/dist/components/_private/relationship-editor/card.js +1 -1
- package/dist/components/_private/relationship-editor/card.js.map +1 -1
- package/dist/components/_private/relationship-editor/content-predicate-form.js.map +1 -1
- package/dist/components/_private/relationship-editor/create-button.js.map +1 -1
- package/dist/components/_private/relationship-editor/modals/classic.js.map +1 -1
- package/dist/components/_private/relationship-editor/modals/dev-mode.js +1 -1
- package/dist/components/_private/relationship-editor/modals/dev-mode.js.map +1 -1
- package/dist/components/collapsible.js.map +1 -1
- package/dist/components/debug-tools.js.map +1 -1
- package/dist/components/editor.js +3 -3
- package/dist/components/editor.js.map +1 -1
- package/dist/components/ember-node/embedded-editor.js +2 -2
- package/dist/components/ember-node/embedded-editor.js.map +1 -1
- package/dist/components/ember-node/inline-rdfa.js.map +1 -1
- package/dist/components/plugins/alignment/alignment-menu.js +2 -2
- package/dist/components/plugins/alignment/alignment-menu.js.map +1 -1
- package/dist/components/plugins/heading/heading-menu.js +2 -2
- package/dist/components/plugins/heading/heading-menu.js.map +1 -1
- package/dist/components/plugins/html-editor/menu.js.map +1 -1
- package/dist/components/plugins/html-editor/modal.js.map +1 -1
- package/dist/components/plugins/image/insert-menu.js.map +1 -1
- package/dist/components/plugins/link/link-editor.js +1 -1
- package/dist/components/plugins/list/ordered.js +3 -3
- package/dist/components/plugins/list/ordered.js.map +1 -1
- package/dist/components/plugins/list/unordered.js +1 -1
- package/dist/components/plugins/table/color.js.map +1 -1
- package/dist/components/plugins/table/table-menu.js.map +1 -1
- package/dist/components/plugins/table/table-tooltip.js.map +1 -1
- package/dist/components/plugins/table/vertical-align.js +2 -2
- package/dist/components/plugins/table/vertical-align.js.map +1 -1
- package/dist/components/plugins/text-style/color.js.map +1 -1
- package/dist/components/plugins/text-style/highlight.js.map +1 -1
- package/dist/components/toolbar/dropdown.js.map +1 -1
- package/dist/components/toolbar/mark.js +1 -1
- package/dist/components/utils/au-pill-dropdown.js.map +1 -1
- package/dist/core/keymap.js +1 -1
- package/dist/core/rdfa-types.js +1 -1
- package/dist/core/say-controller.js +1 -1
- package/dist/core/say-controller.js.map +1 -1
- package/dist/core/say-data-factory/data-factory.js.map +1 -1
- package/dist/core/say-data-factory/named-node.js.map +1 -1
- package/dist/core/say-editor.js.map +1 -1
- package/dist/core/say-view.js.map +1 -1
- package/dist/{main-CBbqRlCI.js → main-dUbkrxFL.js} +133 -358
- package/dist/main-dUbkrxFL.js.map +1 -0
- package/dist/nodes/invisible-rdfa.js +1 -1
- package/dist/plugins/list/commands/lift-out-of-nested-lists.js +1 -1
- package/dist/plugins/list/nodes/on-changed.js +1 -1
- package/dist/plugins/list/nodes/on-changed.js.map +1 -1
- package/dist/plugins/rdfa-info/index.js +1 -1
- package/dist/plugins/rdfa-info/types.js +1 -1
- package/dist/plugins/remove-properties-of-deleted-nodes/index.js +1 -1
- package/dist/utils/_private/datastore/graphy-dataset.js +1 -1
- package/dist/utils/_private/datastore/term-mapping.js.map +1 -1
- package/dist/utils/_private/rdfa-parser/rdfa-parser.js.map +1 -1
- package/dist/utils/transaction-utils.js.map +1 -1
- package/package.json +42 -42
- package/dist/main-CBbqRlCI.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wrapping-utils.js","sources":["../../../../src/components/_private/node-controls/wrapping-utils.gts"],"sourcesContent":["import Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport {\n wrapInlineResource,\n wrapLiteral,\n wrapResource,\n} from '#root/commands/_private/rdfa-commands/index.ts';\nimport { wrapInlineLiteral } from '#root/commands/_private/rdfa-commands/wrap-inline-literal.ts';\nimport { PlusIcon } from '@appuniversum/ember-appuniversum/components/icons/plus';\nimport type SayController from '#root/core/say-controller.ts';\nimport AuContent from '@appuniversum/ember-appuniversum/components/au-content';\nimport AuToolbar from '@appuniversum/ember-appuniversum/components/au-toolbar';\nimport AuButton from '@appuniversum/ember-appuniversum/components/au-button';\nimport { on } from '@ember/modifier';\nimport { fn } from '@ember/helper';\nimport { not } from 'ember-truth-helpers';\nimport { modifier } from 'ember-modifier';\nimport AuModal from '@appuniversum/ember-appuniversum/components/au-modal';\nimport AuFormRow from '@appuniversum/ember-appuniversum/components/au-form-row';\nimport AuLabel from '@appuniversum/ember-appuniversum/components/au-label';\nimport AuInput from '@appuniversum/ember-appuniversum/components/au-input';\nimport AuButtonGroup from '@appuniversum/ember-appuniversum/components/au-button-group';\nimport AuRadioGroup from '@appuniversum/ember-appuniversum/components/au-radio-group';\nimport WithUniqueId from '#root/components/_private/utils/with-unique-id.ts';\n\ntype WrappingUtilsArgs = {\n controller?: SayController;\n};\n\nexport default class WrappingUtils extends Component<WrappingUtilsArgs> {\n @tracked modalOpen = false;\n @tracked wrapWithResource;\n\n constructor(owner: unknown, args: WrappingUtilsArgs) {\n super(owner, args);\n this.wrapWithResource = this.wrapWithBlockResource;\n }\n\n setUpListeners = modifier(() => {\n const listenerHandler = (event: KeyboardEvent) => {\n if (event.altKey && event.ctrlKey) {\n const key = event.key;\n switch (key) {\n case 'r':\n // Wrap with block resource\n this.openModal(false);\n break;\n case 'R':\n // Wrap with inline resource\n this.openModal(true);\n break;\n case 'l':\n // Wrap with block literal\n this.wrapWithLiteralNode();\n break;\n case 'L':\n // Wrap with inline literal\n this.wrapWithInlineLiteralNode();\n break;\n }\n }\n };\n window.addEventListener('keydown', listenerHandler);\n return () => {\n window.removeEventListener('keydown', listenerHandler);\n };\n });\n\n openModal = (inline: boolean) => {\n if (inline) {\n this.wrapWithResource = this.wrapWithInlineResource;\n } else {\n this.wrapWithResource = this.wrapWithBlockResource;\n }\n this.modalOpen = true;\n };\n\n closeModal = () => {\n this.modalOpen = false;\n };\n\n get controller() {\n return this.args.controller;\n }\n\n get canWrapWithLiteral() {\n return this.controller?.checkCommand(wrapLiteral());\n }\n get canWrapWithInlineLiteral() {\n return this.controller?.checkCommand(wrapInlineLiteral());\n }\n wrapWithLiteralNode = () => {\n this.controller?.doCommand(wrapLiteral());\n };\n\n wrapWithBlockResource = (details: Parameters<typeof wrapResource>[0]) => {\n this.controller?.doCommand(wrapResource(details));\n this.closeModal();\n };\n wrapWithInlineLiteralNode = () => {\n this.controller?.doCommand(wrapInlineLiteral());\n };\n wrapWithInlineResource = (details: Parameters<typeof wrapResource>[0]) => {\n this.controller?.doCommand(wrapInlineResource(details));\n this.closeModal();\n };\n\n <template>\n <AuContent @skin=\"tiny\" {{this.setUpListeners}}>\n <AuToolbar as |Group|>\n <Group>\n <AuButton\n @icon={{PlusIcon}}\n @skin=\"naked\"\n {{on \"click\" (fn this.openModal false)}}\n >\n Wrap With Block Resource\n </AuButton>\n </Group>\n <Group>\n <AuButton\n @icon={{PlusIcon}}\n @skin=\"naked\"\n @disabled={{not this.canWrapWithLiteral}}\n {{on \"click\" this.wrapWithLiteralNode}}\n >\n Wrap With Block Literal\n </AuButton>\n </Group>\n\n <Group>\n <AuButton\n @icon={{PlusIcon}}\n @skin=\"naked\"\n {{on \"click\" (fn this.openModal true)}}\n >\n Wrap With Inline Resource\n </AuButton>\n </Group>\n <Group>\n <AuButton\n @icon={{PlusIcon}}\n @skin=\"naked\"\n @disabled={{not this.canWrapWithInlineLiteral}}\n {{on \"click\" this.wrapWithInlineLiteralNode}}\n >\n Wrap With Inline Literal\n </AuButton>\n </Group>\n </AuToolbar>\n </AuContent>\n\n <Modal\n @modalOpen={{this.modalOpen}}\n @closeModal={{this.closeModal}}\n @wrapWithResource={{this.wrapWithResource}}\n />\n </template>\n}\n\ntype ModalArgs = {\n closeModal: () => void;\n modalOpen: boolean;\n wrapWithResource: WrappingUtils['wrapWithResource'];\n};\n\nclass Modal extends Component<ModalArgs> {\n @tracked initiallyFocusedElement?: HTMLElement;\n\n setupFormSubmitShortcut = modifier((formElement: HTMLFormElement) => {\n const ctrlEnterHandler = (event: KeyboardEvent) => {\n if (event.key === 'Enter' && (event.ctrlKey || event.metaKey)) {\n formElement.requestSubmit();\n }\n };\n window.addEventListener('keydown', ctrlEnterHandler);\n return () => window.removeEventListener('keydown', ctrlEnterHandler);\n });\n\n initialFocus = modifier((element: HTMLElement) => {\n this.initiallyFocusedElement = element;\n });\n\n @tracked generateNewUri = 'yes';\n @tracked resourceUriBase = '';\n\n updateUriBase = (event: InputEvent) => {\n this.resourceUriBase = (event.target as HTMLInputElement).value;\n };\n shouldGenerateNewUri = (value: 'yes' | 'no') => {\n this.generateNewUri = value;\n };\n\n save = (event: Event) => {\n event.preventDefault();\n if (this.isNewUri) {\n this.args.wrapWithResource({ uriBase: this.resourceUriBase });\n } else {\n this.args.wrapWithResource({ existingUri: this.resourceUriBase });\n }\n };\n\n get canSave() {\n return !!this.resourceUriBase;\n }\n get isNewUri() {\n return this.generateNewUri === 'yes';\n }\n\n <template>\n <WithUniqueId as |formId|>\n <AuModal\n @modalOpen={{@modalOpen}}\n @closable={{true}}\n @closeModal={{@closeModal}}\n {{! @glint-expect-error appuniversum types should be adapted to accept an html element here }}\n @initialFocus={{this.initiallyFocusedElement}}\n >\n <:title>Wrap selection</:title>\n <:body>\n <form\n class=\"au-c-form\"\n id={{formId}}\n {{on \"submit\" this.save}}\n {{this.setupFormSubmitShortcut}}\n >\n <AuFormRow>\n <WithUniqueId as |id|>\n <AuLabel\n for={{id}}\n @required={{true}}\n @requiredLabel=\"Required\"\n >\n Generate new URI?\n </AuLabel>\n <AuRadioGroup\n id={{id}}\n required={{true}}\n @name=\"isNew\"\n @selected={{this.generateNewUri}}\n @onChange={{this.shouldGenerateNewUri}}\n @alignment=\"inline\"\n as |Group|\n >\n <Group.Radio @value=\"yes\">Yes</Group.Radio>\n <Group.Radio @value=\"no\">No</Group.Radio>\n </AuRadioGroup>\n </WithUniqueId>\n </AuFormRow>\n <AuFormRow>\n <WithUniqueId as |id|>\n <AuLabel\n for={{id}}\n @required={{true}}\n @requiredLabel=\"Required\"\n >\n {{#if this.isNewUri}}URI base{{else}}Existing URI{{/if}}\n </AuLabel>\n <AuInput\n {{this.initialFocus}}\n id={{id}}\n required={{true}}\n value={{this.resourceUriBase}}\n @width=\"block\"\n placeholder=\"http://example.com/resource/\"\n {{on \"input\" this.updateUriBase}}\n />\n </WithUniqueId>\n </AuFormRow>\n </form>\n </:body>\n <:footer>\n <AuButtonGroup>\n <AuButton\n form={{formId}}\n type=\"submit\"\n @disabled={{not this.canSave}}\n >\n Save\n </AuButton>\n <AuButton\n @skin=\"secondary\"\n {{on \"click\" @closeModal}}\n >Cancel</AuButton>\n </AuButtonGroup>\n </:footer>\n </AuModal>\n </WithUniqueId>\n </template>\n}\n"],"names":["WrappingUtils","Component","g","prototype","tracked","i","void 0","constructor","owner","args","wrapWithResource","wrapWithBlockResource","setUpListeners","modifier","listenerHandler","event","altKey","ctrlKey","key","openModal","wrapWithLiteralNode","wrapWithInlineLiteralNode","window","addEventListener","removeEventListener","inline","wrapWithInlineResource","modalOpen","closeModal","controller","canWrapWithLiteral","checkCommand","wrapLiteral","canWrapWithInlineLiteral","wrapInlineLiteral","doCommand","details","wrapResource","wrapInlineResource","setComponentTemplate","precompileTemplate","strictMode","scope","AuContent","AuToolbar","AuButton","PlusIcon","on","fn","not","Modal","setupFormSubmitShortcut","formElement","ctrlEnterHandler","metaKey","requestSubmit","initialFocus","element","initiallyFocusedElement","updateUriBase","resourceUriBase","target","value","shouldGenerateNewUri","generateNewUri","save","preventDefault","isNewUri","uriBase","existingUri","canSave","WithUniqueId","AuModal","AuFormRow","AuLabel","AuRadioGroup","AuInput","AuButtonGroup"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"wrapping-utils.js","sources":["../../../../src/components/_private/node-controls/wrapping-utils.gts"],"sourcesContent":["import Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport {\n wrapInlineResource,\n wrapLiteral,\n wrapResource,\n} from '#root/commands/_private/rdfa-commands/index.ts';\nimport { wrapInlineLiteral } from '#root/commands/_private/rdfa-commands/wrap-inline-literal.ts';\nimport { PlusIcon } from '@appuniversum/ember-appuniversum/components/icons/plus';\nimport type SayController from '#root/core/say-controller.ts';\nimport AuContent from '@appuniversum/ember-appuniversum/components/au-content';\nimport AuToolbar from '@appuniversum/ember-appuniversum/components/au-toolbar';\nimport AuButton from '@appuniversum/ember-appuniversum/components/au-button';\nimport { on } from '@ember/modifier';\nimport { fn } from '@ember/helper';\nimport { not } from 'ember-truth-helpers';\nimport { modifier } from 'ember-modifier';\nimport AuModal from '@appuniversum/ember-appuniversum/components/au-modal';\nimport AuFormRow from '@appuniversum/ember-appuniversum/components/au-form-row';\nimport AuLabel from '@appuniversum/ember-appuniversum/components/au-label';\nimport AuInput from '@appuniversum/ember-appuniversum/components/au-input';\nimport AuButtonGroup from '@appuniversum/ember-appuniversum/components/au-button-group';\nimport AuRadioGroup from '@appuniversum/ember-appuniversum/components/au-radio-group';\nimport WithUniqueId from '#root/components/_private/utils/with-unique-id.ts';\n\ntype WrappingUtilsArgs = {\n controller?: SayController;\n};\n\nexport default class WrappingUtils extends Component<WrappingUtilsArgs> {\n @tracked modalOpen = false;\n @tracked wrapWithResource;\n\n constructor(owner: unknown, args: WrappingUtilsArgs) {\n super(owner, args);\n this.wrapWithResource = this.wrapWithBlockResource;\n }\n\n setUpListeners = modifier(() => {\n const listenerHandler = (event: KeyboardEvent) => {\n if (event.altKey && event.ctrlKey) {\n const key = event.key;\n switch (key) {\n case 'r':\n // Wrap with block resource\n this.openModal(false);\n break;\n case 'R':\n // Wrap with inline resource\n this.openModal(true);\n break;\n case 'l':\n // Wrap with block literal\n this.wrapWithLiteralNode();\n break;\n case 'L':\n // Wrap with inline literal\n this.wrapWithInlineLiteralNode();\n break;\n }\n }\n };\n window.addEventListener('keydown', listenerHandler);\n return () => {\n window.removeEventListener('keydown', listenerHandler);\n };\n });\n\n openModal = (inline: boolean) => {\n if (inline) {\n this.wrapWithResource = this.wrapWithInlineResource;\n } else {\n this.wrapWithResource = this.wrapWithBlockResource;\n }\n this.modalOpen = true;\n };\n\n closeModal = () => {\n this.modalOpen = false;\n };\n\n get controller() {\n return this.args.controller;\n }\n\n get canWrapWithLiteral() {\n return this.controller?.checkCommand(wrapLiteral());\n }\n get canWrapWithInlineLiteral() {\n return this.controller?.checkCommand(wrapInlineLiteral());\n }\n wrapWithLiteralNode = () => {\n this.controller?.doCommand(wrapLiteral());\n };\n\n wrapWithBlockResource = (details: Parameters<typeof wrapResource>[0]) => {\n this.controller?.doCommand(wrapResource(details));\n this.closeModal();\n };\n wrapWithInlineLiteralNode = () => {\n this.controller?.doCommand(wrapInlineLiteral());\n };\n wrapWithInlineResource = (details: Parameters<typeof wrapResource>[0]) => {\n this.controller?.doCommand(wrapInlineResource(details));\n this.closeModal();\n };\n\n <template>\n <AuContent @skin=\"tiny\" {{this.setUpListeners}}>\n <AuToolbar as |Group|>\n <Group>\n <AuButton\n @icon={{PlusIcon}}\n @skin=\"naked\"\n {{on \"click\" (fn this.openModal false)}}\n >\n Wrap With Block Resource\n </AuButton>\n </Group>\n <Group>\n <AuButton\n @icon={{PlusIcon}}\n @skin=\"naked\"\n @disabled={{not this.canWrapWithLiteral}}\n {{on \"click\" this.wrapWithLiteralNode}}\n >\n Wrap With Block Literal\n </AuButton>\n </Group>\n\n <Group>\n <AuButton\n @icon={{PlusIcon}}\n @skin=\"naked\"\n {{on \"click\" (fn this.openModal true)}}\n >\n Wrap With Inline Resource\n </AuButton>\n </Group>\n <Group>\n <AuButton\n @icon={{PlusIcon}}\n @skin=\"naked\"\n @disabled={{not this.canWrapWithInlineLiteral}}\n {{on \"click\" this.wrapWithInlineLiteralNode}}\n >\n Wrap With Inline Literal\n </AuButton>\n </Group>\n </AuToolbar>\n </AuContent>\n\n <Modal\n @modalOpen={{this.modalOpen}}\n @closeModal={{this.closeModal}}\n @wrapWithResource={{this.wrapWithResource}}\n />\n </template>\n}\n\ntype ModalArgs = {\n closeModal: () => void;\n modalOpen: boolean;\n wrapWithResource: WrappingUtils['wrapWithResource'];\n};\n\nclass Modal extends Component<ModalArgs> {\n @tracked initiallyFocusedElement?: HTMLElement;\n\n setupFormSubmitShortcut = modifier((formElement: HTMLFormElement) => {\n const ctrlEnterHandler = (event: KeyboardEvent) => {\n if (event.key === 'Enter' && (event.ctrlKey || event.metaKey)) {\n formElement.requestSubmit();\n }\n };\n window.addEventListener('keydown', ctrlEnterHandler);\n return () => window.removeEventListener('keydown', ctrlEnterHandler);\n });\n\n initialFocus = modifier((element: HTMLElement) => {\n this.initiallyFocusedElement = element;\n });\n\n @tracked generateNewUri = 'yes';\n @tracked resourceUriBase = '';\n\n updateUriBase = (event: InputEvent) => {\n this.resourceUriBase = (event.target as HTMLInputElement).value;\n };\n shouldGenerateNewUri = (value: 'yes' | 'no') => {\n this.generateNewUri = value;\n };\n\n save = (event: Event) => {\n event.preventDefault();\n if (this.isNewUri) {\n this.args.wrapWithResource({ uriBase: this.resourceUriBase });\n } else {\n this.args.wrapWithResource({ existingUri: this.resourceUriBase });\n }\n };\n\n get canSave() {\n return !!this.resourceUriBase;\n }\n get isNewUri() {\n return this.generateNewUri === 'yes';\n }\n\n <template>\n <WithUniqueId as |formId|>\n <AuModal\n @modalOpen={{@modalOpen}}\n @closable={{true}}\n @closeModal={{@closeModal}}\n {{! @glint-expect-error appuniversum types should be adapted to accept an html element here }}\n @initialFocus={{this.initiallyFocusedElement}}\n >\n <:title>Wrap selection</:title>\n <:body>\n <form\n class=\"au-c-form\"\n id={{formId}}\n {{on \"submit\" this.save}}\n {{this.setupFormSubmitShortcut}}\n >\n <AuFormRow>\n <WithUniqueId as |id|>\n <AuLabel\n for={{id}}\n @required={{true}}\n @requiredLabel=\"Required\"\n >\n Generate new URI?\n </AuLabel>\n <AuRadioGroup\n id={{id}}\n required={{true}}\n @name=\"isNew\"\n @selected={{this.generateNewUri}}\n @onChange={{this.shouldGenerateNewUri}}\n @alignment=\"inline\"\n as |Group|\n >\n <Group.Radio @value=\"yes\">Yes</Group.Radio>\n <Group.Radio @value=\"no\">No</Group.Radio>\n </AuRadioGroup>\n </WithUniqueId>\n </AuFormRow>\n <AuFormRow>\n <WithUniqueId as |id|>\n <AuLabel\n for={{id}}\n @required={{true}}\n @requiredLabel=\"Required\"\n >\n {{#if this.isNewUri}}URI base{{else}}Existing URI{{/if}}\n </AuLabel>\n <AuInput\n {{this.initialFocus}}\n id={{id}}\n required={{true}}\n value={{this.resourceUriBase}}\n @width=\"block\"\n placeholder=\"http://example.com/resource/\"\n {{on \"input\" this.updateUriBase}}\n />\n </WithUniqueId>\n </AuFormRow>\n </form>\n </:body>\n <:footer>\n <AuButtonGroup>\n <AuButton\n form={{formId}}\n type=\"submit\"\n @disabled={{not this.canSave}}\n >\n Save\n </AuButton>\n <AuButton\n @skin=\"secondary\"\n {{on \"click\" @closeModal}}\n >Cancel</AuButton>\n </AuButtonGroup>\n </:footer>\n </AuModal>\n </WithUniqueId>\n </template>\n}\n"],"names":["WrappingUtils","Component","g","prototype","tracked","i","constructor","owner","args","wrapWithResource","wrapWithBlockResource","setUpListeners","modifier","listenerHandler","event","altKey","ctrlKey","key","openModal","wrapWithLiteralNode","wrapWithInlineLiteralNode","window","addEventListener","removeEventListener","inline","wrapWithInlineResource","modalOpen","closeModal","controller","canWrapWithLiteral","checkCommand","wrapLiteral","canWrapWithInlineLiteral","wrapInlineLiteral","doCommand","details","wrapResource","wrapInlineResource","setComponentTemplate","precompileTemplate","strictMode","scope","AuContent","AuToolbar","AuButton","PlusIcon","on","fn","not","Modal","setupFormSubmitShortcut","formElement","ctrlEnterHandler","metaKey","requestSubmit","initialFocus","element","initiallyFocusedElement","updateUriBase","resourceUriBase","target","value","shouldGenerateNewUri","generateNewUri","save","preventDefault","isNewUri","uriBase","existingUri","canSave","WithUniqueId","AuModal","AuFormRow","AuLabel","AuRadioGroup","AuInput","AuButtonGroup"],"mappings":"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"}
|
|
@@ -17,7 +17,7 @@ import '../../../utils/_private/constants.js';
|
|
|
17
17
|
import 'uuid';
|
|
18
18
|
import 'relative-to-absolute-iri';
|
|
19
19
|
import 'rdf-data-factory';
|
|
20
|
-
import '../../../main-
|
|
20
|
+
import '../../../main-dUbkrxFL.js';
|
|
21
21
|
import '../../../config/rdfa.js';
|
|
22
22
|
import 'iter-tools';
|
|
23
23
|
import { selectNodeBySubject } from '../../../commands/_private/rdfa-commands/select-node-by-subject.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rdfa-explorer.js","sources":["../../../../src/components/_private/rdfa-visualiser/rdfa-explorer.gts"],"sourcesContent":["import Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { trackedReset } from 'tracked-toolbox';\nimport { keepLatestTask, timeout } from 'ember-concurrency';\nimport t from 'ember-intl/helpers/t';\nimport { not, or } from 'ember-truth-helpers';\nimport AuLoader from '@appuniversum/ember-appuniversum/components/au-loader';\nimport AuList from '@appuniversum/ember-appuniversum/components/au-list';\nimport type SayController from '#root/core/say-controller.ts';\nimport {\n rdfaInfoPluginKey,\n type RdfaVisualizerConfig,\n} from '#root/plugins/rdfa-info/index.ts';\nimport { type RdfaInfo } from '#root/plugins/rdfa-info/plugin.ts';\nimport { selectNodeBySubject } from '#root/commands/_private/rdfa-commands/index.ts';\nimport ResourceInfo from '#root/components/_private/rdfa-visualiser/resource-info.gts';\n\ninterface Sig {\n Args: {\n controller: SayController;\n config: RdfaVisualizerConfig;\n };\n}\n\nexport default class RdfaExplorer extends Component<Sig> {\n get rdfaInfo() {\n return rdfaInfoPluginKey.getState(\n this.args.controller.mainEditorState,\n // We need to set this type as otherwise glint complains about private members of anonymous\n // classes, even though it shouldn't be anonymous...\n ) as RdfaInfo;\n }\n computeMappingsTask = keepLatestTask(async () => {\n const abortController = new AbortController();\n try {\n const maps = await this.rdfaInfo?.computeMappingsAsync(\n abortController.signal,\n );\n this.subjects = Array.from(maps.topLevelSubjects);\n this.isRunning = false;\n await timeout(this.args.config.debounceTime || 1000);\n } finally {\n abortController.abort();\n }\n });\n\n @tracked subjects?: string[];\n @trackedReset<RdfaExplorer, boolean>({\n memo: 'rdfaInfo',\n update: (component) => {\n component.computeMappingsTask.perform().catch((err: unknown) => {\n if (\n !err ||\n typeof err !== 'object' ||\n !('name' in err) ||\n err.name !== 'TaskCancelation'\n ) {\n console.error('Error computing mappings', err);\n }\n });\n return true;\n },\n })\n isRunning = false;\n\n goToSubject = (subject: string) => {\n this.args.controller.doCommand(selectNodeBySubject({ subject }), {\n view: this.args.controller.mainEditorView,\n });\n this.args.controller.focus();\n };\n\n <template>\n {{#if this.isRunning}}\n <AuLoader @hideMessage={{true}}>\n {{t \"ember-rdfa-editor.utils.loading\"}}\n </AuLoader>\n {{/if}}\n {{! TODO Keeping it open is nicer user experience, but maybe we can have a similar exp by storing a list of 'expanded' states for resources}}\n {{#if (or @config.keepOpen (not this.isRunning))}}\n <AuList @divider={{true}} as |Item|>\n {{#each this.subjects as |subject|}}\n <ResourceInfo\n @wrapper={{Item}}\n @controller={{@controller}}\n @subject={{subject}}\n @isTopLevel={{true}}\n @displayConfig={{@config.displayConfig}}\n />\n {{/each}}\n </AuList>\n {{/if}}\n </template>\n}\n"],"names":["RdfaExplorer","Component","rdfaInfo","rdfaInfoPluginKey","getState","args","controller","mainEditorState","computeMappingsTask","_buildTask","context","generator","abortController","AbortController","maps","computeMappingsAsync","signal","subjects","Array","from","topLevelSubjects","isRunning","timeout","config","debounceTime","abort","g","prototype","tracked","i","
|
|
1
|
+
{"version":3,"file":"rdfa-explorer.js","sources":["../../../../src/components/_private/rdfa-visualiser/rdfa-explorer.gts"],"sourcesContent":["import Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { trackedReset } from 'tracked-toolbox';\nimport { keepLatestTask, timeout } from 'ember-concurrency';\nimport t from 'ember-intl/helpers/t';\nimport { not, or } from 'ember-truth-helpers';\nimport AuLoader from '@appuniversum/ember-appuniversum/components/au-loader';\nimport AuList from '@appuniversum/ember-appuniversum/components/au-list';\nimport type SayController from '#root/core/say-controller.ts';\nimport {\n rdfaInfoPluginKey,\n type RdfaVisualizerConfig,\n} from '#root/plugins/rdfa-info/index.ts';\nimport { type RdfaInfo } from '#root/plugins/rdfa-info/plugin.ts';\nimport { selectNodeBySubject } from '#root/commands/_private/rdfa-commands/index.ts';\nimport ResourceInfo from '#root/components/_private/rdfa-visualiser/resource-info.gts';\n\ninterface Sig {\n Args: {\n controller: SayController;\n config: RdfaVisualizerConfig;\n };\n}\n\nexport default class RdfaExplorer extends Component<Sig> {\n get rdfaInfo() {\n return rdfaInfoPluginKey.getState(\n this.args.controller.mainEditorState,\n // We need to set this type as otherwise glint complains about private members of anonymous\n // classes, even though it shouldn't be anonymous...\n ) as RdfaInfo;\n }\n computeMappingsTask = keepLatestTask(async () => {\n const abortController = new AbortController();\n try {\n const maps = await this.rdfaInfo?.computeMappingsAsync(\n abortController.signal,\n );\n this.subjects = Array.from(maps.topLevelSubjects);\n this.isRunning = false;\n await timeout(this.args.config.debounceTime || 1000);\n } finally {\n abortController.abort();\n }\n });\n\n @tracked subjects?: string[];\n @trackedReset<RdfaExplorer, boolean>({\n memo: 'rdfaInfo',\n update: (component) => {\n component.computeMappingsTask.perform().catch((err: unknown) => {\n if (\n !err ||\n typeof err !== 'object' ||\n !('name' in err) ||\n err.name !== 'TaskCancelation'\n ) {\n console.error('Error computing mappings', err);\n }\n });\n return true;\n },\n })\n isRunning = false;\n\n goToSubject = (subject: string) => {\n this.args.controller.doCommand(selectNodeBySubject({ subject }), {\n view: this.args.controller.mainEditorView,\n });\n this.args.controller.focus();\n };\n\n <template>\n {{#if this.isRunning}}\n <AuLoader @hideMessage={{true}}>\n {{t \"ember-rdfa-editor.utils.loading\"}}\n </AuLoader>\n {{/if}}\n {{! TODO Keeping it open is nicer user experience, but maybe we can have a similar exp by storing a list of 'expanded' states for resources}}\n {{#if (or @config.keepOpen (not this.isRunning))}}\n <AuList @divider={{true}} as |Item|>\n {{#each this.subjects as |subject|}}\n <ResourceInfo\n @wrapper={{Item}}\n @controller={{@controller}}\n @subject={{subject}}\n @isTopLevel={{true}}\n @displayConfig={{@config.displayConfig}}\n />\n {{/each}}\n </AuList>\n {{/if}}\n </template>\n}\n"],"names":["RdfaExplorer","Component","rdfaInfo","rdfaInfoPluginKey","getState","args","controller","mainEditorState","computeMappingsTask","_buildTask","context","generator","abortController","AbortController","maps","computeMappingsAsync","signal","subjects","Array","from","topLevelSubjects","isRunning","timeout","config","debounceTime","abort","g","prototype","tracked","i","trackedReset","memo","update","component","perform","catch","err","name","console","error","goToSubject","subject","doCommand","selectNodeBySubject","view","mainEditorView","focus","setComponentTemplate","precompileTemplate","strictMode","scope","AuLoader","t","or","not","AuList","ResourceInfo"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwBe,MAAMA,qBAAqBC,SAAA,CAAU;EAClD,IAAIC,QAAAA,GAAW;IACb,OAAOC,iBAAA,CAAkBC,QAAQ,CAC/B,IAAI,CAACC,IAAI,CAACC,UAAU,CAACC,eAAe,CAAA;AAIxC,EAAA;AACAC,EAAAA,mBAAA,GAAAC,SAAA,CAAA,OAAA;IAAAC,OAAA,EAAA,IAAA;IAAAC,SAAA,EAAA,aAAqC;AACnC,MAAA,MAAMC,kBAAkB,IAAIC,eAAA,EAAA;MAC5B,IAAI;QACF,MAAMC,IAAA,GAAA,MAAa,IAAI,CAACZ,QAAQ,EAAEa,oBAAA,CAChCH,gBAAgBI,MAAM,CAAA;QAExB,IAAI,CAACC,QAAQ,GAAGC,MAAMC,IAAI,CAACL,KAAKM,gBAAgB,CAAA;QAChD,IAAI,CAACC,SAAS,GAAG,KAAA;QACjB,MAAMC,OAAA,CAAQ,IAAI,CAACjB,IAAI,CAACkB,MAAM,CAACC,YAAY,IAAI,IAAA,CAAA;AACjD,MAAA,CAAA,SAAU;QACRZ,eAAA,CAAgBa,KAAK,EAAA;AACvB,MAAA;AACF,IAAA;AAAA,GAAA,CAAA,EAAA,IAAA,EAAA,qBAAA,EAAA,YAAA,CAAA;AAAG,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,UAAA,EAAA,CAEFC,OAAA,CAAA,CAAA;AAAA;EAAA,SAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,UAAA,CAAA,EAAA,MAAA;AAAA,EAAA;AAAAH,IAAAA,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,WAAA,EAAA,CACAG,YAAA,CAAoC;AACnCC,MAAAA,IAAA,EAAM,UAAA;MACNC,MAAA,EAASC,SAAA,IAAA;QACPA,SAAA,CAAUzB,mBAAmB,CAAC0B,OAAO,EAAA,CAAGC,KAAK,CAAEC,GAAY,IAAA;AACzD,UAAA,IACE,CAACA,GAAA,IACD,OAAOA,GAAA,KAAQ,QAAA,IACf,EAAE,MAAA,IAAUA,GAAG,CAAA,IACfA,GAAA,CAAIC,IAAI,KAAK,iBAAA,EACb;AACAC,YAAAA,OAAA,CAAQC,KAAK,CAAC,0BAAA,EAA4BH,GAAA,CAAA;AAC5C,UAAA;AACF,QAAA,CAAA,CAAA;AACA,QAAA,OAAO,IAAA;AACT,MAAA;AACF,KAAA,CAAA,CAAA,EAAA,YAAA;AAAA,MAAA,OACY,KAAA;AAAA,IAAA,CAAA,CAAA;AAAA;EAAA,UAAA,IAAAP,CAAA,CAAA,IAAA,EAAA,WAAA,CAAA,EAAA,MAAA;EAEZW,WAAA,GAAeC,OAAe,IAAA;IAC5B,IAAI,CAACpC,IAAI,CAACC,UAAU,CAACoC,SAAS,CAACC,mBAAA,CAAoB;AAAEF,MAAAA;AAAQ,KAAA,CAAA,EAAI;AAC/DG,MAAAA,IAAA,EAAM,IAAI,CAACvC,IAAI,CAACC,UAAU,CAACuC;AAC7B,KAAA,CAAA;AACA,IAAA,IAAI,CAACxC,IAAI,CAACC,UAAU,CAACwC,KAAK,EAAA;EAC5B,CAAA;AAEA,EAAA;IAAAC,oBAAA,CAAAC,kBAAA,CAAA,opBAAA,EAoBA;MAAAC,UAAA,EAAA,IAAA;AAAAC,MAAAA,KAAA,EAAAA,OAAA;QAAAC,QAAA;QAAAC,CAAA;QAAAC,EAAA;QAAAC,GAAA;QAAAC,MAAA;AAAAC,QAAAA;AAAA,OAAA;KAAU,CAAA,EAAV,IAAW,CAAA;AAAD;AACZ;;;;"}
|
|
@@ -14,7 +14,7 @@ import 'uuid';
|
|
|
14
14
|
import '../../../utils/_private/constants.js';
|
|
15
15
|
import 'relative-to-absolute-iri';
|
|
16
16
|
import 'rdf-data-factory';
|
|
17
|
-
import '../../../main-
|
|
17
|
+
import '../../../main-dUbkrxFL.js';
|
|
18
18
|
import '../../../core/say-data-factory/data-factory.js';
|
|
19
19
|
import '../../../core/say-data-factory/default-graph.js';
|
|
20
20
|
import '../../../config/rdfa.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resource-info.js","sources":["../../../../src/components/_private/rdfa-visualiser/resource-info.gts"],"sourcesContent":["import Component from '@glimmer/component';\nimport { on } from '@ember/modifier';\nimport { fn } from '@ember/helper';\nimport { localCopy } from 'tracked-toolbox';\nimport { eq, or } from 'ember-truth-helpers';\nimport { type PNode } from '#root/prosemirror-aliases.ts';\nimport { ChevronUpIcon } from '@appuniversum/ember-appuniversum/components/icons/chevron-up';\nimport { ChevronRightIcon } from '@appuniversum/ember-appuniversum/components/icons/chevron-right';\nimport AuButton from '@appuniversum/ember-appuniversum/components/au-button';\nimport AuList from '@appuniversum/ember-appuniversum/components/au-list';\nimport type SayController from '#root/core/say-controller.ts';\nimport { selectNodeBySubject } from '#root/commands/_private/rdfa-commands/index.ts';\nimport { getNodesBySubject } from '#root/utils/rdfa-utils.ts';\nimport ConfigurableRdfaDisplay, {\n predicateDisplay,\n} from '#root/components/_private/common/configurable-rdfa-display.gts';\nimport { type OutgoingTriple } from '#root/core/rdfa-processor.ts';\nimport { ExternalLinkIcon } from '@appuniversum/ember-appuniversum/components/icons/external-link';\nimport PropertyDetails from '#root/components/_private/common/property-details.gts';\nimport type {\n DisplayGenerator,\n GeneratorContext,\n RdfaVisualizerConfig,\n} from '#root/plugins/rdfa-info/types.ts';\nimport { get } from '@ember/helper';\nimport type { TemplateOnlyComponent } from '@ember/component/template-only';\nimport type { TOC } from '@ember/component/template-only';\nimport type { ComponentLike } from '@glint/template';\n\nconst Div: TemplateOnlyComponent<{\n Element: HTMLDivElement;\n Blocks: { default: [] };\n}> = <template>\n <div ...attributes>{{yield}}</div>\n</template>;\n\nconst backupResourceDisplay: DisplayGenerator<PNode> = (node) => {\n const subject = node.attrs['subject'] as string;\n return [subject];\n};\n\nconst ResourceNodeWrapper: TOC<{\n Element: HTMLElement;\n Args: {\n expanded?: boolean;\n onToggle: (event: MouseEvent) => void;\n wrapper?: ComponentLike<{ Blocks: { default: [] } }>;\n };\n Blocks: { default: [] };\n}> = <template>\n {{#if @wrapper}}\n <@wrapper>\n <div ...attributes>\n <AuButton\n @skin=\"link\"\n @hideText={{true}}\n @icon={{if @expanded ChevronUpIcon ChevronRightIcon}}\n {{on \"click\" @onToggle}}\n >Toggle</AuButton>\n {{yield}}\n </div>\n </@wrapper>\n {{else}}\n <div ...attributes>\n <AuButton\n @skin=\"link\"\n @hideText={{true}}\n @icon={{if @expanded ChevronUpIcon ChevronRightIcon}}\n {{on \"click\" @onToggle}}\n >Toggle</AuButton>\n {{yield}}\n </div>\n {{/if}}\n</template>;\n\nexport interface ResourceInfoSig {\n Args: {\n controller: SayController;\n subject: string;\n isTopLevel: boolean;\n // In theory this could be used for optimisation but currently it is not...\n node?: PNode;\n expanded?: boolean;\n displayConfig: RdfaVisualizerConfig['displayConfig'];\n wrapper?: ComponentLike<{ Blocks: { default: [] } }>;\n };\n}\n\nexport default class ResourceInfo extends Component<ResourceInfoSig> {\n @localCopy('args.expanded') expanded = false;\n\n get node(): PNode | undefined {\n return (\n this.args.node ??\n getNodesBySubject(\n this.args.controller.mainEditorState,\n this.args.subject,\n )[0]?.value\n );\n }\n get nodeProps() {\n return (this.node?.attrs['properties'] as OutgoingTriple[]) ?? [];\n }\n\n generatorContext = (isTopLevel: boolean): GeneratorContext => ({\n controller: this.args.controller,\n isTopLevel,\n });\n\n toggleExpanded = () => {\n this.expanded = !this.expanded;\n };\n\n goToSubject = (subject: string) => {\n this.args.controller.doCommand(selectNodeBySubject({ subject }), {\n view: this.args.controller.mainEditorView,\n });\n this.args.controller.focus();\n };\n\n <template>\n {{#if this.node}}\n <ConfigurableRdfaDisplay\n @value={{this.node}}\n @generator={{or @displayConfig.ResourceNode backupResourceDisplay}}\n @context={{this.generatorContext @isTopLevel}}\n @wrapper={{component\n ResourceNodeWrapper\n expanded=this.expanded\n onToggle=this.toggleExpanded\n wrapper=@wrapper\n }}\n >\n <AuButton\n @hideText={{true}}\n @icon={{ExternalLinkIcon}}\n @skin=\"link\"\n {{on \"click\" (fn this.goToSubject @subject)}}\n >\n Go to subject\n </AuButton>\n {{#if this.expanded}}\n <AuList class=\"au-u-margin-left\" @divider={{true}} as |Item|>\n {{#each this.nodeProps as |prop|}}\n <ConfigurableRdfaDisplay\n @value={{prop}}\n @generator={{or @displayConfig.predicate predicateDisplay}}\n @context={{this.generatorContext false}}\n @wrapper={{Item}}\n >\n {{#if (eq prop.object.termType \"ResourceNode\")}}\n <ResourceInfo\n @controller={{@controller}}\n @subject={{prop.object.value}}\n @isTopLevel={{false}}\n @displayConfig={{@displayConfig}}\n />\n {{else if (get @displayConfig prop.object.termType)}}\n <ConfigurableRdfaDisplay\n @wrapper={{Div}}\n @value={{prop}}\n {{! @glint-expect-error }}\n @generator={{get @displayConfig prop.object.termType}}\n @context={{this.generatorContext false}}\n />\n {{else}}\n <PropertyDetails @prop={{prop}} @controller={{@controller}} />\n {{/if}}\n </ConfigurableRdfaDisplay>\n {{else}}\n <p class=\"au-u-muted\">No properties</p>\n {{/each}}\n </AuList>\n {{/if}}\n </ConfigurableRdfaDisplay>\n {{else}}\n {{#if @wrapper}}\n <@wrapper>\n <div>\n {{@subject}}\n </div>\n </@wrapper>\n {{else}}\n <div>\n {{@subject}}\n </div>\n {{/if}}\n {{/if}}\n </template>\n}\n"],"names":["Div","setComponentTemplate","precompileTemplate","strictMode","templateOnly","backupResourceDisplay","node","subject","attrs","ResourceNodeWrapper","scope","AuButton","ChevronUpIcon","ChevronRightIcon","on","ResourceInfo","Component","g","prototype","localCopy","i","
|
|
1
|
+
{"version":3,"file":"resource-info.js","sources":["../../../../src/components/_private/rdfa-visualiser/resource-info.gts"],"sourcesContent":["import Component from '@glimmer/component';\nimport { on } from '@ember/modifier';\nimport { fn } from '@ember/helper';\nimport { localCopy } from 'tracked-toolbox';\nimport { eq, or } from 'ember-truth-helpers';\nimport { type PNode } from '#root/prosemirror-aliases.ts';\nimport { ChevronUpIcon } from '@appuniversum/ember-appuniversum/components/icons/chevron-up';\nimport { ChevronRightIcon } from '@appuniversum/ember-appuniversum/components/icons/chevron-right';\nimport AuButton from '@appuniversum/ember-appuniversum/components/au-button';\nimport AuList from '@appuniversum/ember-appuniversum/components/au-list';\nimport type SayController from '#root/core/say-controller.ts';\nimport { selectNodeBySubject } from '#root/commands/_private/rdfa-commands/index.ts';\nimport { getNodesBySubject } from '#root/utils/rdfa-utils.ts';\nimport ConfigurableRdfaDisplay, {\n predicateDisplay,\n} from '#root/components/_private/common/configurable-rdfa-display.gts';\nimport { type OutgoingTriple } from '#root/core/rdfa-processor.ts';\nimport { ExternalLinkIcon } from '@appuniversum/ember-appuniversum/components/icons/external-link';\nimport PropertyDetails from '#root/components/_private/common/property-details.gts';\nimport type {\n DisplayGenerator,\n GeneratorContext,\n RdfaVisualizerConfig,\n} from '#root/plugins/rdfa-info/types.ts';\nimport { get } from '@ember/helper';\nimport type { TemplateOnlyComponent } from '@ember/component/template-only';\nimport type { TOC } from '@ember/component/template-only';\nimport type { ComponentLike } from '@glint/template';\n\nconst Div: TemplateOnlyComponent<{\n Element: HTMLDivElement;\n Blocks: { default: [] };\n}> = <template>\n <div ...attributes>{{yield}}</div>\n</template>;\n\nconst backupResourceDisplay: DisplayGenerator<PNode> = (node) => {\n const subject = node.attrs['subject'] as string;\n return [subject];\n};\n\nconst ResourceNodeWrapper: TOC<{\n Element: HTMLElement;\n Args: {\n expanded?: boolean;\n onToggle: (event: MouseEvent) => void;\n wrapper?: ComponentLike<{ Blocks: { default: [] } }>;\n };\n Blocks: { default: [] };\n}> = <template>\n {{#if @wrapper}}\n <@wrapper>\n <div ...attributes>\n <AuButton\n @skin=\"link\"\n @hideText={{true}}\n @icon={{if @expanded ChevronUpIcon ChevronRightIcon}}\n {{on \"click\" @onToggle}}\n >Toggle</AuButton>\n {{yield}}\n </div>\n </@wrapper>\n {{else}}\n <div ...attributes>\n <AuButton\n @skin=\"link\"\n @hideText={{true}}\n @icon={{if @expanded ChevronUpIcon ChevronRightIcon}}\n {{on \"click\" @onToggle}}\n >Toggle</AuButton>\n {{yield}}\n </div>\n {{/if}}\n</template>;\n\nexport interface ResourceInfoSig {\n Args: {\n controller: SayController;\n subject: string;\n isTopLevel: boolean;\n // In theory this could be used for optimisation but currently it is not...\n node?: PNode;\n expanded?: boolean;\n displayConfig: RdfaVisualizerConfig['displayConfig'];\n wrapper?: ComponentLike<{ Blocks: { default: [] } }>;\n };\n}\n\nexport default class ResourceInfo extends Component<ResourceInfoSig> {\n @localCopy('args.expanded') expanded = false;\n\n get node(): PNode | undefined {\n return (\n this.args.node ??\n getNodesBySubject(\n this.args.controller.mainEditorState,\n this.args.subject,\n )[0]?.value\n );\n }\n get nodeProps() {\n return (this.node?.attrs['properties'] as OutgoingTriple[]) ?? [];\n }\n\n generatorContext = (isTopLevel: boolean): GeneratorContext => ({\n controller: this.args.controller,\n isTopLevel,\n });\n\n toggleExpanded = () => {\n this.expanded = !this.expanded;\n };\n\n goToSubject = (subject: string) => {\n this.args.controller.doCommand(selectNodeBySubject({ subject }), {\n view: this.args.controller.mainEditorView,\n });\n this.args.controller.focus();\n };\n\n <template>\n {{#if this.node}}\n <ConfigurableRdfaDisplay\n @value={{this.node}}\n @generator={{or @displayConfig.ResourceNode backupResourceDisplay}}\n @context={{this.generatorContext @isTopLevel}}\n @wrapper={{component\n ResourceNodeWrapper\n expanded=this.expanded\n onToggle=this.toggleExpanded\n wrapper=@wrapper\n }}\n >\n <AuButton\n @hideText={{true}}\n @icon={{ExternalLinkIcon}}\n @skin=\"link\"\n {{on \"click\" (fn this.goToSubject @subject)}}\n >\n Go to subject\n </AuButton>\n {{#if this.expanded}}\n <AuList class=\"au-u-margin-left\" @divider={{true}} as |Item|>\n {{#each this.nodeProps as |prop|}}\n <ConfigurableRdfaDisplay\n @value={{prop}}\n @generator={{or @displayConfig.predicate predicateDisplay}}\n @context={{this.generatorContext false}}\n @wrapper={{Item}}\n >\n {{#if (eq prop.object.termType \"ResourceNode\")}}\n <ResourceInfo\n @controller={{@controller}}\n @subject={{prop.object.value}}\n @isTopLevel={{false}}\n @displayConfig={{@displayConfig}}\n />\n {{else if (get @displayConfig prop.object.termType)}}\n <ConfigurableRdfaDisplay\n @wrapper={{Div}}\n @value={{prop}}\n {{! @glint-expect-error }}\n @generator={{get @displayConfig prop.object.termType}}\n @context={{this.generatorContext false}}\n />\n {{else}}\n <PropertyDetails @prop={{prop}} @controller={{@controller}} />\n {{/if}}\n </ConfigurableRdfaDisplay>\n {{else}}\n <p class=\"au-u-muted\">No properties</p>\n {{/each}}\n </AuList>\n {{/if}}\n </ConfigurableRdfaDisplay>\n {{else}}\n {{#if @wrapper}}\n <@wrapper>\n <div>\n {{@subject}}\n </div>\n </@wrapper>\n {{else}}\n <div>\n {{@subject}}\n </div>\n {{/if}}\n {{/if}}\n </template>\n}\n"],"names":["Div","setComponentTemplate","precompileTemplate","strictMode","templateOnly","backupResourceDisplay","node","subject","attrs","ResourceNodeWrapper","scope","AuButton","ChevronUpIcon","ChevronRightIcon","on","ResourceInfo","Component","g","prototype","localCopy","i","args","getNodesBySubject","controller","mainEditorState","value","nodeProps","generatorContext","isTopLevel","toggleExpanded","expanded","goToSubject","doCommand","selectNodeBySubject","view","mainEditorView","focus","ConfigurableRdfaDisplay","or","ExternalLinkIcon","fn","AuList","predicateDisplay","eq","get","PropertyDetails"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BA,MAAMA,GAGD,GAAAC,oBAAA,CAAAC,kBAAA,CAAA,0CAAA,EAEL;EAAAC,UAAA,EAAA;AAAU,CAAA,CAAA,EAAAC,YAAA,EAAA,CAAA;AAEV,MAAMC,qBAAwC,GAAUC,IAAA,IAAA;AACtD,EAAA,MAAMC,UAAUD,IAAA,CAAKE,KAAK,CAAC,SAAA,CAAoB;EAC/C,OAAO,CAACD,OAAA,CAAQ;AAClB,CAAA;AAEA,MAAME,mBAQD,GAAAR,oBAAA,CAAAC,kBAAA,CAAA,gfAAA,EAwBL;EAAAC,UAAA,EAAA,IAAA;AAAAO,EAAAA,KAAA,EAAAA,OAAA;IAAAC,QAAA;IAAAC,aAAA;IAAAC,gBAAA;AAAAC,IAAAA;AAAA,GAAA;AAAU,CAAA,CAAA,EAAAV,YAAA,EAAA,CAAA;AAeK,MAAMW,qBAAqBC,SAAA,CAAU;AAAA,EAAA;AAAAC,IAAAA,CAAA,MAAAC,SAAA,EAAA,UAAA,EAAA,CACjDC,SAAA,CAAU,eAAA,CAAA,CAAA,EAAA,YAAA;AAAA,MAAA,OAA4B,KAAA;AAAA,IAAA,CAAA,CAAA;AAAA;EAAA,SAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,UAAA,CAAA,EAAA,MAAA;EAEvC,IAAId,IAAAA,GAA0B;IAC5B,OACE,IAAI,CAACe,IAAI,CAACf,IAAI,IACdgB,iBAAA,CACE,IAAI,CAACD,IAAI,CAACE,UAAU,CAACC,eAAe,EACpC,IAAI,CAACH,IAAI,CAACd,OAAO,CAClB,CAAC,CAAA,CAAE,EAAEkB,KACR;AACF,EAAA;EACA,IAAIC,SAAAA,GAAY;IACd,OAAQ,IAAI,CAACpB,IAAI,EAAEE,KAAK,CAAC,YAAA,CAAa,IAAyB,EAAE;AACnE,EAAA;EAEAmB,gBAAA,GAAoBC,UAAmB,KAAwB;AAC7DL,IAAAA,UAAA,EAAY,IAAI,CAACF,IAAI,CAACE,UAAU;AAChCK,IAAAA;AACF,GAAC,CAAA;EAEDC,cAAA,GAAiBA,MAAA;AACf,IAAA,IAAI,CAACC,QAAQ,GAAG,CAAC,IAAI,CAACA,QAAQ;EAChC,CAAA;EAEAC,WAAA,GAAexB,OAAe,IAAA;IAC5B,IAAI,CAACc,IAAI,CAACE,UAAU,CAACS,SAAS,CAACC,mBAAA,CAAoB;AAAE1B,MAAAA;AAAQ,KAAA,CAAA,EAAI;AAC/D2B,MAAAA,IAAA,EAAM,IAAI,CAACb,IAAI,CAACE,UAAU,CAACY;AAC7B,KAAA,CAAA;AACA,IAAA,IAAI,CAACd,IAAI,CAACE,UAAU,CAACa,KAAK,EAAA;EAC5B,CAAA;AAEA,EAAA;IAAAnC,oBAAA,CAAAC,kBAAA,CAAA,42DAAA,EAoEA;MAAAC,UAAA,EAAA,IAAA;AAAAO,MAAAA,KAAA,EAAAA,OAAA;QAAA2B,uBAAA;QAAAC,EAAA;QAAAjC,qBAAA;QAAAI,mBAAA;QAAAE,QAAA;QAAA4B,gBAAA;QAAAzB,EAAA;QAAA0B,EAAA;QAAAC,MAAA;QAAAC,gBAAA;QAAAC,EAAA;QAAA5B,YAAA;QAAA6B,GAAA;QAAA5C,GAAA;AAAA6C,QAAAA;AAAA,OAAA;KAAU,CAAA,EAAV,IAAW,CAAA;AAAD;AACZ;;;;"}
|
|
@@ -5,7 +5,7 @@ import 'uuid';
|
|
|
5
5
|
import '../../../utils/_private/constants.js';
|
|
6
6
|
import 'relative-to-absolute-iri';
|
|
7
7
|
import 'rdf-data-factory';
|
|
8
|
-
import '../../../main-
|
|
8
|
+
import '../../../main-dUbkrxFL.js';
|
|
9
9
|
import '../../../core/say-data-factory/data-factory.js';
|
|
10
10
|
import '../../../core/say-data-factory/default-graph.js';
|
|
11
11
|
import '../../../config/rdfa.js';
|
|
@@ -26,7 +26,7 @@ class VisualiserCard extends Component {
|
|
|
26
26
|
this.args.onToggle?.(this.expanded);
|
|
27
27
|
};
|
|
28
28
|
static {
|
|
29
|
-
setComponentTemplate(precompileTemplate("\n {{#if @controller}}\n <AuCard @size=\"small\" @expandable={{true}} @manualControl={{true}} @openSection={{this.toggleSection}} @isExpanded={{this.expanded}} as |c|>\n <c.header>\n <AuHeading @level=\"1\" @skin=\"6\">RDFa visualiser</AuHeading>\n </c.header>\n <c.content class=\"au-c-content--tiny\">\n <RdfaExplorer @controller={{@controller}} @config={{@config}} />\n </c.content>\n </AuCard>\n {{/if}}\n ", {
|
|
29
|
+
setComponentTemplate(precompileTemplate("\n {{#if @controller}}\n <AuCard @size=\"small\" @expandable={{true}} @manualControl={{true}} @openSection={{this.toggleSection}} @isExpanded={{this.expanded}} @disableAuContent={{true}} as |c|>\n <c.header>\n <AuHeading @level=\"1\" @skin=\"6\">RDFa visualiser</AuHeading>\n </c.header>\n <c.content class=\"au-c-content--tiny\">\n <RdfaExplorer @controller={{@controller}} @config={{@config}} />\n </c.content>\n </AuCard>\n {{/if}}\n ", {
|
|
30
30
|
strictMode: true,
|
|
31
31
|
scope: () => ({
|
|
32
32
|
AuCard,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"visualiser-card.js","sources":["../../../../src/components/_private/rdfa-visualiser/visualiser-card.gts"],"sourcesContent":["import Component from '@glimmer/component';\nimport { localCopy } from 'tracked-toolbox';\nimport AuHeading from '@appuniversum/ember-appuniversum/components/au-heading';\nimport type SayController from '#root/core/say-controller.ts';\nimport { type RdfaVisualizerConfig } from '#root/plugins/rdfa-info/types.ts';\nimport RdfaExplorer from './rdfa-explorer.gts';\nimport AuCard from '@appuniversum/ember-appuniversum/components/au-card';\n\ninterface Sig {\n Args: {\n controller?: SayController;\n expanded?: boolean;\n onToggle?: (expanded: boolean) => void;\n config: RdfaVisualizerConfig;\n };\n}\nexport default class VisualiserCard extends Component<Sig> {\n @localCopy('args.expanded', true) declare expanded: boolean;\n\n toggleSection = () => {\n this.expanded = !this.expanded;\n this.args.onToggle?.(this.expanded);\n };\n\n <template>\n {{#if @controller}}\n <AuCard\n @size=\"small\"\n @expandable={{true}}\n @manualControl={{true}}\n @openSection={{this.toggleSection}}\n @isExpanded={{this.expanded}}\n as |c|\n >\n <c.header>\n <AuHeading @level=\"1\" @skin=\"6\">RDFa visualiser</AuHeading>\n </c.header>\n <c.content class=\"au-c-content--tiny\">\n <RdfaExplorer @controller={{@controller}} @config={{@config}} />\n </c.content>\n </AuCard>\n {{/if}}\n </template>\n}\n"],"names":["VisualiserCard","Component","g","prototype","localCopy","i","
|
|
1
|
+
{"version":3,"file":"visualiser-card.js","sources":["../../../../src/components/_private/rdfa-visualiser/visualiser-card.gts"],"sourcesContent":["import Component from '@glimmer/component';\nimport { localCopy } from 'tracked-toolbox';\nimport AuHeading from '@appuniversum/ember-appuniversum/components/au-heading';\nimport type SayController from '#root/core/say-controller.ts';\nimport { type RdfaVisualizerConfig } from '#root/plugins/rdfa-info/types.ts';\nimport RdfaExplorer from './rdfa-explorer.gts';\nimport AuCard from '@appuniversum/ember-appuniversum/components/au-card';\n\ninterface Sig {\n Args: {\n controller?: SayController;\n expanded?: boolean;\n onToggle?: (expanded: boolean) => void;\n config: RdfaVisualizerConfig;\n };\n}\nexport default class VisualiserCard extends Component<Sig> {\n @localCopy('args.expanded', true) declare expanded: boolean;\n\n toggleSection = () => {\n this.expanded = !this.expanded;\n this.args.onToggle?.(this.expanded);\n };\n\n <template>\n {{#if @controller}}\n <AuCard\n @size=\"small\"\n @expandable={{true}}\n @manualControl={{true}}\n @openSection={{this.toggleSection}}\n @isExpanded={{this.expanded}}\n @disableAuContent={{true}}\n as |c|\n >\n <c.header>\n <AuHeading @level=\"1\" @skin=\"6\">RDFa visualiser</AuHeading>\n </c.header>\n <c.content class=\"au-c-content--tiny\">\n <RdfaExplorer @controller={{@controller}} @config={{@config}} />\n </c.content>\n </AuCard>\n {{/if}}\n </template>\n}\n"],"names":["VisualiserCard","Component","g","prototype","localCopy","i","toggleSection","expanded","args","onToggle","setComponentTemplate","precompileTemplate","strictMode","scope","AuCard","AuHeading","RdfaExplorer"],"mappings":";;;;;;;;;;;;;;;;;;AAgBe,MAAMA,uBAAuBC,SAAA,CAAU;AAAA,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,UAAA,EAAA,CACnDC,UAAU,eAAA,EAAiB,IAAA,CAAA,CAAA,CAAA;AAAA;EAAA,SAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,UAAA,CAAA,EAAA,MAAA;EAE5BC,aAAA,GAAgBA,MAAA;AACd,IAAA,IAAI,CAACC,QAAQ,GAAG,CAAC,IAAI,CAACA,QAAQ;IAC9B,IAAI,CAACC,IAAI,CAACC,QAAQ,GAAG,IAAI,CAACF,QAAQ,CAAA;EACpC,CAAA;AAEA,EAAA;IAAAG,oBAAA,CAAAC,kBAAA,CAAA,sfAAA,EAmBA;MAAAC,UAAA,EAAA,IAAA;AAAAC,MAAAA,KAAA,EAAAA,OAAA;QAAAC,MAAA;QAAAC,SAAA;AAAAC,QAAAA;AAAA,OAAA;KAAU,CAAA,EAAV,IAAW,CAAA;AAAD;AACZ;;;;"}
|
|
@@ -329,7 +329,7 @@ class RelationshipEditorCard extends Component {
|
|
|
329
329
|
}
|
|
330
330
|
}
|
|
331
331
|
static {
|
|
332
|
-
setComponentTemplate(precompileTemplate("\n {{#if this.isRdfaAwareNode}}\n <AuCard {{this.setUpListeners}} @size=\"small\" @expandable={{true}} @manualControl={{true}} @openSection={{this.toggleSection}} @isExpanded={{this.expanded}} as |c|>\n <c.header>\n <div class=\"au-u-flex au-u-flex--row au-u-flex--vertical-center au-u-flex--spaced-small\">\n <AuHeading @level=\"1\" @skin=\"6\">Relationships</AuHeading>\n <AuPill>{{this.type}}</AuPill>\n </div>\n </c.header>\n <c.content class=\"au-c-content--tiny\">\n {{#if this.isResourceNode}}\n <AuToolbar as |Group|>\n <Group>\n <AuHeading @level=\"2\" class=\"au-u-h6 au-u-muted\">Properties</AuHeading>\n </Group>\n <Group>\n <AuButton @icon={{PlusIcon}} @skin=\"link\" {{on \"click\" (fn this.startCreationMode \"property\")}}>\n Add property\n </AuButton>\n </Group>\n </AuToolbar>\n {{#if this.properties.length}}\n <AuList @divider={{true}} as |Item|>\n {{#each this.properties as |prop|}}\n <Item class=\"au-u-flex au-u-flex--row au-u-flex--between au-u-flex--vertical-center\">\n <div class=\"au-u-padding-tiny\">\n <ConfigurableRdfaDisplay @value={{prop}} @generator={{predicateDisplay}} @context={{hash controller=@controller isTopLevel=false}} />\n <PropertyDetails @controller={{@controller}} @prop={{prop}} @setStatusMessage={{this.setStatusMessage}} />\n </div>\n <AuDropdown @icon={{ThreeDotsIcon}} role=\"menu\" @alignment=\"left\">\n <AuButton @skin=\"link\" @icon={{PencilIcon}} role=\"menuitem\" {{on \"click\" (fn this.startUpdateMode prop)}}>\n Edit property\n </AuButton>\n <AuButton @skin=\"link\" @icon={{BinIcon}} role=\"menuitem\" class=\"au-c-button--alert\" {{on \"click\" (fn this.removePropertyOrBacklink prop)}}>\n Remove property\n </AuButton>\n </AuDropdown>\n </Item>\n {{/each}}\n </AuList>\n {{else}}\n <p class=\"au-u-italic\">This node doesn't have any properties yet.</p>\n {{/if}}\n {{/if}}\n {{#if this.isResourceNode}}\n <WithUniqueId as |formId|>\n <AuToolbar as |Group|>\n <Group>\n <AuHeading @level=\"2\" class=\"au-u-h6 au-u-muted\">Content\n predicate</AuHeading>\n </Group>\n <Group>\n {{#if this.editingContentPredicate}}\n <AuButton {{on \"click\" this.onContentPredicateFormCancel}} @skin=\"link-secondary\">Cancel</AuButton>\n <AuButton type=\"submit\" @icon={{CheckIcon}} form={{formId}} @skin=\"link\">Save</AuButton>\n {{else}}\n <AuButton {{on \"click\" this.startEditingContentPredicate}} @icon={{PencilIcon}} @skin=\"link\">\n Edit\n </AuButton>\n {{/if}}\n </Group>\n </AuToolbar>\n\n {{#if this.editingContentPredicate}}\n <ContentPredicateForm {{!-- @glint-expect-error --}} @source={{this.currentTerm}} @optionGeneratorConfig={{@optionGeneratorConfig}} id={{formId}} @initialFormData={{this.contentPredicateInitialFormData}} @onSubmit={{this.onContentPredicateFormSubmit}} />\n {{else}}\n {{#if this.contentPredicateProperty}}\n <p>{{htmlSafe (this.contentPredicateTextRepr this.contentPredicateProperty)}}</p>\n {{else}}\n <p class=\"au-u-italic\">This node does not define a content\n predicate.</p>\n {{/if}}\n {{/if}}\n </WithUniqueId>\n {{/if}}\n <AuToolbar as |Group|>\n <Group>\n <AuHeading @level=\"2\" class=\"au-u-h6 au-u-muted\">Backlinks</AuHeading>\n </Group>\n <Group>\n <AuButton @icon={{PlusIcon}} @skin=\"link\" {{on \"click\" (fn this.startCreationMode \"backlink\")}}>\n Add backlink\n </AuButton>\n </Group>\n </AuToolbar>\n {{#if this.backlinks.length}}\n <AuList @divider={{true}} as |Item|>\n {{#each this.backlinks as |backlink|}}\n <Item class=\"au-u-flex au-u-flex--row au-u-flex--between au-u-flex--vertical-center\">\n <div class=\"au-u-padding-tiny\">\n <AuButton class=\"au-u-padding-left-none au-u-padding-right-none\" @icon={{ExternalLinkIcon}} @skin=\"link\" title={{backlink.subject.value}} {{on \"click\" (fn this.goToSubject backlink.subject.value)}}>subject</AuButton>\n <p><strong>predicate:</strong> {{backlink.predicate}}</p>\n </div>\n <AuDropdown @icon={{ThreeDotsIcon}} role=\"menu\" @alignment=\"left\">\n <AuButton @skin=\"link\" @icon={{PencilIcon}} role=\"menuitem\" {{on \"click\" (fn this.startUpdateMode backlink)}}>\n Edit backlink\n </AuButton>\n <AuButton @skin=\"link\" @icon={{BinIcon}} role=\"menuitem\" class=\"au-c-button--alert\" {{on \"click\" (fn this.removePropertyOrBacklink backlink)}}>\n Remove backlink\n </AuButton>\n </AuDropdown>\n </Item>\n {{/each}}\n </AuList>\n {{else}}\n <p class=\"au-u-italic\">This node doesn't have any backlinks yet.</p>\n {{/if}}\n\n {{#if this.statusMessage}}\n <div>\n <AuAlert class=\"au-u-margin-none\" @skin={{this.statusMessage.type}} @closable={{true}} @onClose={{this.closeStatusMessage}}>\n {{this.statusMessage.message}}\n </AuAlert>\n </div>\n {{/if}}\n </c.content>\n </AuCard>\n {{/if}}\n {{#if this.status}}\n <RelationshipEditorDevModeModal @title={{this.modalTitle}} @initialData={{this.initialFormData}} @source={{this.currentTerm}} @optionGeneratorConfig={{@optionGeneratorConfig}} @onSubmit={{this.onFormSubmit}} @onCancel={{this.cancel}} />\n {{/if}}\n ", {
|
|
332
|
+
setComponentTemplate(precompileTemplate("\n {{#if this.isRdfaAwareNode}}\n <AuCard {{this.setUpListeners}} @size=\"small\" @expandable={{true}} @manualControl={{true}} @openSection={{this.toggleSection}} @isExpanded={{this.expanded}} @disableAuContent={{true}} as |c|>\n <c.header>\n <div class=\"au-u-flex au-u-flex--row au-u-flex--vertical-center au-u-flex--spaced-small\">\n <AuHeading @level=\"1\" @skin=\"6\">Relationships</AuHeading>\n <AuPill>{{this.type}}</AuPill>\n </div>\n </c.header>\n <c.content class=\"au-c-content--tiny\">\n {{#if this.isResourceNode}}\n <AuToolbar as |Group|>\n <Group>\n <AuHeading @level=\"2\" class=\"au-u-h6 au-u-muted\">Properties</AuHeading>\n </Group>\n <Group>\n <AuButton @icon={{PlusIcon}} @skin=\"link\" {{on \"click\" (fn this.startCreationMode \"property\")}}>\n Add property\n </AuButton>\n </Group>\n </AuToolbar>\n {{#if this.properties.length}}\n <AuList @divider={{true}} as |Item|>\n {{#each this.properties as |prop|}}\n <Item class=\"au-u-flex au-u-flex--row au-u-flex--between au-u-flex--vertical-center\">\n <div class=\"au-u-padding-tiny\">\n <ConfigurableRdfaDisplay @value={{prop}} @generator={{predicateDisplay}} @context={{hash controller=@controller isTopLevel=false}} />\n <PropertyDetails @controller={{@controller}} @prop={{prop}} @setStatusMessage={{this.setStatusMessage}} />\n </div>\n <AuDropdown @icon={{ThreeDotsIcon}} role=\"menu\" @alignment=\"left\">\n <AuButton @skin=\"link\" @icon={{PencilIcon}} role=\"menuitem\" {{on \"click\" (fn this.startUpdateMode prop)}}>\n Edit property\n </AuButton>\n <AuButton @skin=\"link\" @icon={{BinIcon}} role=\"menuitem\" class=\"au-c-button--alert\" {{on \"click\" (fn this.removePropertyOrBacklink prop)}}>\n Remove property\n </AuButton>\n </AuDropdown>\n </Item>\n {{/each}}\n </AuList>\n {{else}}\n <p class=\"au-u-italic\">This node doesn't have any properties yet.</p>\n {{/if}}\n {{/if}}\n {{#if this.isResourceNode}}\n <WithUniqueId as |formId|>\n <AuToolbar as |Group|>\n <Group>\n <AuHeading @level=\"2\" class=\"au-u-h6 au-u-muted\">Content\n predicate</AuHeading>\n </Group>\n <Group>\n {{#if this.editingContentPredicate}}\n <AuButton {{on \"click\" this.onContentPredicateFormCancel}} @skin=\"link-secondary\">Cancel</AuButton>\n <AuButton type=\"submit\" @icon={{CheckIcon}} form={{formId}} @skin=\"link\">Save</AuButton>\n {{else}}\n <AuButton {{on \"click\" this.startEditingContentPredicate}} @icon={{PencilIcon}} @skin=\"link\">\n Edit\n </AuButton>\n {{/if}}\n </Group>\n </AuToolbar>\n\n {{#if this.editingContentPredicate}}\n <ContentPredicateForm {{!-- @glint-expect-error --}} @source={{this.currentTerm}} @optionGeneratorConfig={{@optionGeneratorConfig}} id={{formId}} @initialFormData={{this.contentPredicateInitialFormData}} @onSubmit={{this.onContentPredicateFormSubmit}} />\n {{else}}\n {{#if this.contentPredicateProperty}}\n <p>{{htmlSafe (this.contentPredicateTextRepr this.contentPredicateProperty)}}</p>\n {{else}}\n <p class=\"au-u-italic\">This node does not define a content\n predicate.</p>\n {{/if}}\n {{/if}}\n </WithUniqueId>\n {{/if}}\n <AuToolbar as |Group|>\n <Group>\n <AuHeading @level=\"2\" class=\"au-u-h6 au-u-muted\">Backlinks</AuHeading>\n </Group>\n <Group>\n <AuButton @icon={{PlusIcon}} @skin=\"link\" {{on \"click\" (fn this.startCreationMode \"backlink\")}}>\n Add backlink\n </AuButton>\n </Group>\n </AuToolbar>\n {{#if this.backlinks.length}}\n <AuList @divider={{true}} as |Item|>\n {{#each this.backlinks as |backlink|}}\n <Item class=\"au-u-flex au-u-flex--row au-u-flex--between au-u-flex--vertical-center\">\n <div class=\"au-u-padding-tiny\">\n <AuButton class=\"au-u-padding-left-none au-u-padding-right-none\" @icon={{ExternalLinkIcon}} @skin=\"link\" title={{backlink.subject.value}} {{on \"click\" (fn this.goToSubject backlink.subject.value)}}>subject</AuButton>\n <p><strong>predicate:</strong> {{backlink.predicate}}</p>\n </div>\n <AuDropdown @icon={{ThreeDotsIcon}} role=\"menu\" @alignment=\"left\">\n <AuButton @skin=\"link\" @icon={{PencilIcon}} role=\"menuitem\" {{on \"click\" (fn this.startUpdateMode backlink)}}>\n Edit backlink\n </AuButton>\n <AuButton @skin=\"link\" @icon={{BinIcon}} role=\"menuitem\" class=\"au-c-button--alert\" {{on \"click\" (fn this.removePropertyOrBacklink backlink)}}>\n Remove backlink\n </AuButton>\n </AuDropdown>\n </Item>\n {{/each}}\n </AuList>\n {{else}}\n <p class=\"au-u-italic\">This node doesn't have any backlinks yet.</p>\n {{/if}}\n\n {{#if this.statusMessage}}\n <div>\n <AuAlert class=\"au-u-margin-none\" @skin={{this.statusMessage.type}} @closable={{true}} @onClose={{this.closeStatusMessage}}>\n {{this.statusMessage.message}}\n </AuAlert>\n </div>\n {{/if}}\n </c.content>\n </AuCard>\n {{/if}}\n {{#if this.status}}\n <RelationshipEditorDevModeModal @title={{this.modalTitle}} @initialData={{this.initialFormData}} @source={{this.currentTerm}} @optionGeneratorConfig={{@optionGeneratorConfig}} @onSubmit={{this.onFormSubmit}} @onCancel={{this.cancel}} />\n {{/if}}\n ", {
|
|
333
333
|
strictMode: true,
|
|
334
334
|
scope: () => ({
|
|
335
335
|
AuCard,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"card.js","sources":["../../../../src/components/_private/relationship-editor/card.gts"],"sourcesContent":["import Component from '@glimmer/component';\nimport { localCopy, trackedReset } from 'tracked-toolbox';\nimport { isResourceNode } from '#root/utils/node-utils.ts';\n// import RdfaPropertyEditor from './property-editor/index.gts';\nimport type { ResolvedPNode } from '#root/utils/_private/types.ts';\nimport AuHeading from '@appuniversum/ember-appuniversum/components/au-heading';\nimport AuPill from '@appuniversum/ember-appuniversum/components/au-pill';\nimport type SayController from '#root/core/say-controller.ts';\n// import BacklinkEditor from './backlink-editor/index.gts';\nimport AuCard from '@appuniversum/ember-appuniversum/components/au-card';\nimport type {\n Direction,\n SubmissionBody,\n} from '#root/components/_private/relationship-editor/types.ts';\nimport { tracked } from 'tracked-built-ins';\nimport {\n addBacklinkToNode,\n removeBacklinkFromNode,\n} from '#root/utils/_private/rdfa-utils.ts';\nimport { isRdfaAttrs, type RdfaAttrs } from '#root/core/rdfa-types.ts';\nimport { removeProperty } from '#root/commands/rdfa-commands/remove-property.ts';\nimport { addProperty } from '#root/commands/rdfa-commands/add-property.ts';\nimport { selectNodeBySubject } from '#root/commands/_private/rdfa-commands/select-node-by-subject.ts';\nimport AuToolbar from '@appuniversum/ember-appuniversum/components/au-toolbar';\nimport AuButton from '@appuniversum/ember-appuniversum/components/au-button';\nimport { PlusIcon } from '@appuniversum/ember-appuniversum/components/icons/plus';\nimport { on } from '@ember/modifier';\nimport { fn, hash } from '@ember/helper';\nimport AuList from '@appuniversum/ember-appuniversum/components/au-list';\nimport ConfigurableRdfaDisplay, {\n predicateDisplay,\n} from '#root/components/_private/common/configurable-rdfa-display.gts';\nimport PropertyDetails from '#root/components/_private/common/property-details.gts';\nimport AuDropdown from '@appuniversum/ember-appuniversum/components/au-dropdown';\nimport { ThreeDotsIcon } from '@appuniversum/ember-appuniversum/components/icons/three-dots';\nimport { PencilIcon } from '@appuniversum/ember-appuniversum/components/icons/pencil';\nimport { BinIcon } from '@appuniversum/ember-appuniversum/components/icons/bin';\nimport { ExternalLinkIcon } from '@appuniversum/ember-appuniversum/components/icons/external-link';\nimport AuAlert from '@appuniversum/ember-appuniversum/components/au-alert';\nimport type { PNode } from '#root/prosemirror-aliases.ts';\nimport type {\n PropertyOrBacklink,\n Status,\n StatusMessage,\n} from '../common/types.ts';\nimport {\n languageOrDataType,\n sayDataFactory,\n} from '#root/core/say-data-factory/data-factory.ts';\nimport type { FormData } from './modals/dev-mode.gts';\nimport { modifier } from 'ember-modifier';\nimport RelationshipEditorDevModeModal from './modals/dev-mode.gts';\nimport type { OptionGeneratorConfig } from './types.ts';\nimport ContentPredicateForm, {\n type SubmissionBody as ContentPredicateFormSubmissionBody,\n} from './content-predicate-form.gts';\nimport WithUniqueId from '#root/components/_private/utils/with-unique-id.ts';\nimport type { ContentLiteralTerm } from '#root/core/say-data-factory/index.js';\nimport type { OutgoingTriple } from '#root/core/rdfa-processor.js';\nimport { htmlSafe } from '@ember/template';\nimport { CheckIcon } from '@appuniversum/ember-appuniversum/components/icons/check';\n\ninterface StatusMessageForNode extends StatusMessage {\n node: PNode;\n}\n\ntype Args = {\n controller: SayController;\n node: ResolvedPNode;\n expanded?: boolean;\n onToggle?: (expanded: boolean) => void;\n optionGeneratorConfig?: OptionGeneratorConfig;\n};\nexport default class RelationshipEditorCard extends Component<Args> {\n @tracked _statusMessage: StatusMessageForNode | null = null;\n @tracked status?: Status;\n @tracked initialFormData?: FormData;\n @trackedReset('args.node') editingContentPredicate: boolean = false;\n\n @localCopy('args.expanded', true) declare expanded: boolean;\n\n setUpListeners = modifier(() => {\n const listenerHandler = (event: KeyboardEvent) => {\n if (event.altKey && event.ctrlKey) {\n const key = event.key;\n switch (key) {\n case 'b':\n case 'B':\n this.startCreationMode('backlink');\n break;\n case 'p':\n case 'P':\n if (this.isResourceNode) {\n this.startCreationMode('property');\n }\n break;\n }\n }\n };\n window.addEventListener('keydown', listenerHandler);\n return () => {\n window.removeEventListener('keydown', listenerHandler);\n };\n });\n\n get node() {\n return this.args.node.value;\n }\n\n get isRdfaAwareNode() {\n return isRdfaAttrs(this.node.attrs);\n }\n\n get nodeAttrs() {\n return this.node.attrs as RdfaAttrs;\n }\n\n get isCreating() {\n return this.status?.mode === 'creation';\n }\n\n get isUpdating() {\n return this.status?.mode === 'update';\n }\n\n toggleSection = () => {\n this.expanded = !this.expanded;\n this.args.onToggle?.(this.expanded);\n };\n\n startCreationMode = (direction: Direction) => {\n this.initialFormData = {\n direction,\n };\n this.status = {\n mode: 'creation',\n };\n };\n\n startUpdateMode = (propertyOrBacklink: PropertyOrBacklink) => {\n if ('subject' in propertyOrBacklink) {\n this.initialFormData = {\n direction: 'backlink',\n predicate: {\n direction: 'backlink',\n term: sayDataFactory.namedNode(propertyOrBacklink.predicate),\n },\n target: {\n term: propertyOrBacklink.subject,\n },\n };\n } else {\n this.initialFormData = {\n direction: 'property',\n predicate: {\n direction: 'property',\n term: sayDataFactory.namedNode(propertyOrBacklink.predicate),\n },\n target: {\n // @ts-expect-error remove blanknode from possible object types\n term: propertyOrBacklink.object,\n },\n };\n }\n this.status = {\n mode: 'update',\n propertyOrBacklink,\n };\n };\n\n onFormSubmit = (body: SubmissionBody) => {\n if (this.status?.mode === 'update') {\n this.removePropertyOrBacklink(this.status.propertyOrBacklink);\n }\n const node = this.args.node;\n const { predicate, target } = body;\n\n if (predicate.direction === 'property') {\n const resource =\n this.nodeAttrs.rdfaNodeType === 'resource' && this.nodeAttrs.subject;\n if (!resource) {\n return;\n }\n const property = {\n predicate: predicate.term.value,\n object: target.term,\n };\n this.controller.doCommand(\n addProperty({\n resource,\n // @ts-expect-error fix type of property\n property,\n }),\n );\n } else if (predicate.direction === 'backlink') {\n const backlink = {\n subject: target.term,\n predicate: predicate.term.value,\n };\n this.controller.withTransaction(\n () => {\n return addBacklinkToNode({\n rdfaId: node.value.attrs['__rdfaId'] as string,\n // @ts-expect-error fix type of backlink\n backlink,\n })(this.controller.mainEditorState).transaction;\n },\n { view: this.controller.mainEditorView },\n );\n }\n\n this.status = undefined;\n };\n\n cancel = () => {\n this.status = undefined;\n };\n\n get contentPredicateProperty() {\n if (this.nodeAttrs.rdfaNodeType === 'resource') {\n return this.nodeAttrs.properties.find(\n (prop) => prop.object.termType === 'ContentLiteral',\n );\n } else {\n return;\n }\n }\n\n contentPredicateTextRepr = (contentPredicateProperty: OutgoingTriple) => {\n const predicate = contentPredicateProperty.predicate;\n const object = contentPredicateProperty.object as ContentLiteralTerm;\n const languageSuffix = object.language ? `@${object.language}` : '';\n const datatypeSuffix = object.datatype\n ? `^^\"${object.datatype.value}\"`\n : '';\n return `<strong>${predicate}</strong>${languageSuffix}${datatypeSuffix}`;\n };\n\n get contentPredicateInitialFormData() {\n const predicate = this.contentPredicateProperty?.predicate;\n const object = this.contentPredicateProperty?.object as\n | ContentLiteralTerm\n | undefined;\n return {\n contentPredicate: predicate,\n language: object?.language,\n datatype: object?.datatype.value,\n };\n }\n\n startEditingContentPredicate = () => {\n this.editingContentPredicate = true;\n };\n\n onContentPredicateFormCancel = () => {\n this.editingContentPredicate = false;\n };\n\n onContentPredicateFormSubmit = (body: ContentPredicateFormSubmissionBody) => {\n this.editingContentPredicate = false;\n if (this.contentPredicateProperty) {\n this.removePropertyOrBacklink(this.contentPredicateProperty);\n }\n if (body.contentPredicate) {\n const property = {\n predicate: body.contentPredicate,\n object: sayDataFactory.contentLiteral(\n languageOrDataType(\n body.language,\n body.datatype ? sayDataFactory.namedNode(body.datatype) : undefined,\n ),\n ),\n };\n const resource =\n this.nodeAttrs.rdfaNodeType === 'resource' && this.nodeAttrs.subject;\n if (!resource) {\n return;\n }\n this.controller.doCommand(\n addProperty({\n resource,\n property,\n }),\n );\n }\n };\n\n removePropertyOrBacklink = (propertyOrBacklink: PropertyOrBacklink) => {\n // This function can only be called when the selected node defines a resource or the selected\n // node is a document that imports resources (e.g. a snippet)\n if ('subject' in propertyOrBacklink) {\n const backlinkIndex =\n this.nodeAttrs.backlinks.indexOf(propertyOrBacklink);\n if (backlinkIndex === -1) {\n return;\n }\n this.controller.withTransaction(\n () => {\n return removeBacklinkFromNode({\n rdfaId: this.args.node.value.attrs['__rdfaId'] as string,\n index: backlinkIndex,\n })(this.controller.mainEditorState).transaction;\n },\n { view: this.controller.mainEditorView },\n );\n } else {\n const resource =\n this.nodeAttrs.rdfaNodeType === 'resource' && this.nodeAttrs.subject;\n if (!resource) {\n return;\n }\n const propertyToRemove = { resource, property: propertyOrBacklink };\n this.controller?.doCommand(removeProperty(propertyToRemove), {\n view: this.controller.mainEditorView,\n });\n }\n };\n\n get isResourceNode() {\n return isResourceNode(this.args.node.value);\n }\n\n get type() {\n if (this.args.node.value.type === this.controller?.schema.nodes['doc']) {\n return 'document';\n }\n return this.isResourceNode ? 'resource' : 'literal';\n }\n\n get controller() {\n return this.args.controller;\n }\n\n goToSubject = (subject: string) => {\n const succesful = this.controller.doCommand(\n selectNodeBySubject({ subject }),\n {\n view: this.controller.mainEditorView,\n },\n );\n if (!succesful) {\n this.setStatusMessage({\n type: 'info',\n message: `Node with subject ${subject} not found`,\n });\n }\n this.controller.focus();\n };\n\n get modalTitle() {\n if (this.status?.mode === 'update') {\n return 'Edit relationship';\n } else {\n return 'Add relationship';\n }\n }\n\n get properties() {\n return this.nodeAttrs.rdfaNodeType === 'resource'\n ? this.nodeAttrs.properties.filter(\n (prop) => prop.object.termType !== 'ContentLiteral',\n )\n : undefined;\n }\n\n get backlinks() {\n return this.nodeAttrs.backlinks;\n }\n\n get statusMessage(): StatusMessage | null {\n // show only if a message is relevant for the current node\n if (this._statusMessage && this.node === this._statusMessage.node) {\n return this._statusMessage;\n }\n return null;\n }\n\n setStatusMessage = (val: StatusMessage | null) => {\n if (val) {\n this._statusMessage = { ...val, node: this.node };\n } else {\n this._statusMessage = val;\n }\n };\n\n closeStatusMessage = () => {\n this.setStatusMessage(null);\n };\n\n get currentTerm() {\n if (this.nodeAttrs.rdfaNodeType === 'resource') {\n return sayDataFactory.resourceNode(this.nodeAttrs.subject);\n } else {\n return sayDataFactory.literalNode(this.nodeAttrs.__rdfaId);\n }\n }\n\n <template>\n {{#if this.isRdfaAwareNode}}\n <AuCard\n {{this.setUpListeners}}\n @size=\"small\"\n @expandable={{true}}\n @manualControl={{true}}\n @openSection={{this.toggleSection}}\n @isExpanded={{this.expanded}}\n as |c|\n >\n <c.header>\n <div\n class=\"au-u-flex au-u-flex--row au-u-flex--vertical-center au-u-flex--spaced-small\"\n >\n <AuHeading @level=\"1\" @skin=\"6\">Relationships</AuHeading>\n <AuPill>{{this.type}}</AuPill>\n </div>\n </c.header>\n <c.content class=\"au-c-content--tiny\">\n {{#if this.isResourceNode}}\n <AuToolbar as |Group|>\n <Group>\n <AuHeading\n @level=\"2\"\n class=\"au-u-h6 au-u-muted\"\n >Properties</AuHeading>\n </Group>\n <Group>\n <AuButton\n @icon={{PlusIcon}}\n @skin=\"link\"\n {{on \"click\" (fn this.startCreationMode \"property\")}}\n >\n Add property\n </AuButton>\n </Group>\n </AuToolbar>\n {{#if this.properties.length}}\n <AuList @divider={{true}} as |Item|>\n {{#each this.properties as |prop|}}\n <Item\n class=\"au-u-flex au-u-flex--row au-u-flex--between au-u-flex--vertical-center\"\n >\n <div class=\"au-u-padding-tiny\">\n <ConfigurableRdfaDisplay\n @value={{prop}}\n @generator={{predicateDisplay}}\n @context={{hash\n controller=@controller\n isTopLevel=false\n }}\n />\n <PropertyDetails\n @controller={{@controller}}\n @prop={{prop}}\n @setStatusMessage={{this.setStatusMessage}}\n />\n </div>\n <AuDropdown\n @icon={{ThreeDotsIcon}}\n role=\"menu\"\n @alignment=\"left\"\n >\n <AuButton\n @skin=\"link\"\n @icon={{PencilIcon}}\n role=\"menuitem\"\n {{on \"click\" (fn this.startUpdateMode prop)}}\n >\n Edit property\n </AuButton>\n <AuButton\n @skin=\"link\"\n @icon={{BinIcon}}\n role=\"menuitem\"\n class=\"au-c-button--alert\"\n {{on \"click\" (fn this.removePropertyOrBacklink prop)}}\n >\n Remove property\n </AuButton>\n </AuDropdown>\n </Item>\n {{/each}}\n </AuList>\n {{else}}\n <p class=\"au-u-italic\">This node doesn't have any properties yet.</p>\n {{/if}}\n {{/if}}\n {{#if this.isResourceNode}}\n <WithUniqueId as |formId|>\n <AuToolbar as |Group|>\n <Group>\n <AuHeading @level=\"2\" class=\"au-u-h6 au-u-muted\">Content\n predicate</AuHeading>\n </Group>\n <Group>\n {{#if this.editingContentPredicate}}\n <AuButton\n {{on \"click\" this.onContentPredicateFormCancel}}\n @skin=\"link-secondary\"\n >Cancel</AuButton>\n <AuButton\n type=\"submit\"\n @icon={{CheckIcon}}\n form={{formId}}\n @skin=\"link\"\n >Save</AuButton>\n {{else}}\n <AuButton\n {{on \"click\" this.startEditingContentPredicate}}\n @icon={{PencilIcon}}\n @skin=\"link\"\n >\n Edit\n </AuButton>\n {{/if}}\n </Group>\n </AuToolbar>\n\n {{#if this.editingContentPredicate}}\n <ContentPredicateForm\n {{! @glint-expect-error }}\n @source={{this.currentTerm}}\n @optionGeneratorConfig={{@optionGeneratorConfig}}\n id={{formId}}\n @initialFormData={{this.contentPredicateInitialFormData}}\n @onSubmit={{this.onContentPredicateFormSubmit}}\n />\n {{else}}\n {{#if this.contentPredicateProperty}}\n <p>{{htmlSafe\n (this.contentPredicateTextRepr\n this.contentPredicateProperty\n )\n }}</p>\n {{else}}\n <p class=\"au-u-italic\">This node does not define a content\n predicate.</p>\n {{/if}}\n {{/if}}\n </WithUniqueId>\n {{/if}}\n <AuToolbar as |Group|>\n <Group>\n <AuHeading\n @level=\"2\"\n class=\"au-u-h6 au-u-muted\"\n >Backlinks</AuHeading>\n </Group>\n <Group>\n <AuButton\n @icon={{PlusIcon}}\n @skin=\"link\"\n {{on \"click\" (fn this.startCreationMode \"backlink\")}}\n >\n Add backlink\n </AuButton>\n </Group>\n </AuToolbar>\n {{#if this.backlinks.length}}\n <AuList @divider={{true}} as |Item|>\n {{#each this.backlinks as |backlink|}}\n <Item\n class=\"au-u-flex au-u-flex--row au-u-flex--between au-u-flex--vertical-center\"\n >\n <div class=\"au-u-padding-tiny\">\n <AuButton\n class=\"au-u-padding-left-none au-u-padding-right-none\"\n @icon={{ExternalLinkIcon}}\n @skin=\"link\"\n title={{backlink.subject.value}}\n {{on\n \"click\"\n (fn this.goToSubject backlink.subject.value)\n }}\n >subject</AuButton>\n <p><strong>predicate:</strong> {{backlink.predicate}}</p>\n </div>\n <AuDropdown\n @icon={{ThreeDotsIcon}}\n role=\"menu\"\n @alignment=\"left\"\n >\n <AuButton\n @skin=\"link\"\n @icon={{PencilIcon}}\n role=\"menuitem\"\n {{on \"click\" (fn this.startUpdateMode backlink)}}\n >\n Edit backlink\n </AuButton>\n <AuButton\n @skin=\"link\"\n @icon={{BinIcon}}\n role=\"menuitem\"\n class=\"au-c-button--alert\"\n {{on \"click\" (fn this.removePropertyOrBacklink backlink)}}\n >\n Remove backlink\n </AuButton>\n </AuDropdown>\n </Item>\n {{/each}}\n </AuList>\n {{else}}\n <p class=\"au-u-italic\">This node doesn't have any backlinks yet.</p>\n {{/if}}\n\n {{#if this.statusMessage}}\n <div>\n <AuAlert\n class=\"au-u-margin-none\"\n @skin={{this.statusMessage.type}}\n @closable={{true}}\n @onClose={{this.closeStatusMessage}}\n >\n {{this.statusMessage.message}}\n </AuAlert>\n </div>\n {{/if}}\n </c.content>\n </AuCard>\n {{/if}}\n {{#if this.status}}\n <RelationshipEditorDevModeModal\n @title={{this.modalTitle}}\n @initialData={{this.initialFormData}}\n @source={{this.currentTerm}}\n @optionGeneratorConfig={{@optionGeneratorConfig}}\n @onSubmit={{this.onFormSubmit}}\n @onCancel={{this.cancel}}\n />\n {{/if}}\n </template>\n}\n"],"names":["RelationshipEditorCard","Component","g","prototype","tracked","i","void 0","trackedReset","localCopy","setUpListeners","modifier","listenerHandler","event","altKey","ctrlKey","key","startCreationMode","isResourceNode","window","addEventListener","removeEventListener","node","args","value","isRdfaAwareNode","isRdfaAttrs","attrs","nodeAttrs","isCreating","status","mode","isUpdating","toggleSection","expanded","onToggle","direction","initialFormData","startUpdateMode","propertyOrBacklink","predicate","term","sayDataFactory","namedNode","target","subject","object","onFormSubmit","body","removePropertyOrBacklink","resource","rdfaNodeType","property","controller","doCommand","addProperty","backlink","withTransaction","addBacklinkToNode","rdfaId","mainEditorState","transaction","view","mainEditorView","undefined","cancel","contentPredicateProperty","properties","find","prop","termType","contentPredicateTextRepr","languageSuffix","language","datatypeSuffix","datatype","contentPredicateInitialFormData","contentPredicate","startEditingContentPredicate","editingContentPredicate","onContentPredicateFormCancel","onContentPredicateFormSubmit","contentLiteral","languageOrDataType","backlinkIndex","backlinks","indexOf","removeBacklinkFromNode","index","propertyToRemove","removeProperty","type","schema","nodes","goToSubject","succesful","selectNodeBySubject","setStatusMessage","message","focus","modalTitle","filter","statusMessage","_statusMessage","val","closeStatusMessage","currentTerm","resourceNode","literalNode","__rdfaId","setComponentTemplate","precompileTemplate","strictMode","scope","AuCard","AuHeading","AuPill","AuToolbar","AuButton","PlusIcon","on","fn","AuList","ConfigurableRdfaDisplay","predicateDisplay","hash","PropertyDetails","AuDropdown","ThreeDotsIcon","PencilIcon","BinIcon","WithUniqueId","CheckIcon","ContentPredicateForm","htmlSafe","ExternalLinkIcon","AuAlert","RelationshipEditorDevModeModal"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"card.js","sources":["../../../../src/components/_private/relationship-editor/card.gts"],"sourcesContent":["import Component from '@glimmer/component';\nimport { localCopy, trackedReset } from 'tracked-toolbox';\nimport { isResourceNode } from '#root/utils/node-utils.ts';\n// import RdfaPropertyEditor from './property-editor/index.gts';\nimport type { ResolvedPNode } from '#root/utils/_private/types.ts';\nimport AuHeading from '@appuniversum/ember-appuniversum/components/au-heading';\nimport AuPill from '@appuniversum/ember-appuniversum/components/au-pill';\nimport type SayController from '#root/core/say-controller.ts';\n// import BacklinkEditor from './backlink-editor/index.gts';\nimport AuCard from '@appuniversum/ember-appuniversum/components/au-card';\nimport type {\n Direction,\n SubmissionBody,\n} from '#root/components/_private/relationship-editor/types.ts';\nimport { tracked } from 'tracked-built-ins';\nimport {\n addBacklinkToNode,\n removeBacklinkFromNode,\n} from '#root/utils/_private/rdfa-utils.ts';\nimport { isRdfaAttrs, type RdfaAttrs } from '#root/core/rdfa-types.ts';\nimport { removeProperty } from '#root/commands/rdfa-commands/remove-property.ts';\nimport { addProperty } from '#root/commands/rdfa-commands/add-property.ts';\nimport { selectNodeBySubject } from '#root/commands/_private/rdfa-commands/select-node-by-subject.ts';\nimport AuToolbar from '@appuniversum/ember-appuniversum/components/au-toolbar';\nimport AuButton from '@appuniversum/ember-appuniversum/components/au-button';\nimport { PlusIcon } from '@appuniversum/ember-appuniversum/components/icons/plus';\nimport { on } from '@ember/modifier';\nimport { fn, hash } from '@ember/helper';\nimport AuList from '@appuniversum/ember-appuniversum/components/au-list';\nimport ConfigurableRdfaDisplay, {\n predicateDisplay,\n} from '#root/components/_private/common/configurable-rdfa-display.gts';\nimport PropertyDetails from '#root/components/_private/common/property-details.gts';\nimport AuDropdown from '@appuniversum/ember-appuniversum/components/au-dropdown';\nimport { ThreeDotsIcon } from '@appuniversum/ember-appuniversum/components/icons/three-dots';\nimport { PencilIcon } from '@appuniversum/ember-appuniversum/components/icons/pencil';\nimport { BinIcon } from '@appuniversum/ember-appuniversum/components/icons/bin';\nimport { ExternalLinkIcon } from '@appuniversum/ember-appuniversum/components/icons/external-link';\nimport AuAlert from '@appuniversum/ember-appuniversum/components/au-alert';\nimport type { PNode } from '#root/prosemirror-aliases.ts';\nimport type {\n PropertyOrBacklink,\n Status,\n StatusMessage,\n} from '../common/types.ts';\nimport {\n languageOrDataType,\n sayDataFactory,\n} from '#root/core/say-data-factory/data-factory.ts';\nimport type { FormData } from './modals/dev-mode.gts';\nimport { modifier } from 'ember-modifier';\nimport RelationshipEditorDevModeModal from './modals/dev-mode.gts';\nimport type { OptionGeneratorConfig } from './types.ts';\nimport ContentPredicateForm, {\n type SubmissionBody as ContentPredicateFormSubmissionBody,\n} from './content-predicate-form.gts';\nimport WithUniqueId from '#root/components/_private/utils/with-unique-id.ts';\nimport type { ContentLiteralTerm } from '#root/core/say-data-factory/index.js';\nimport type { OutgoingTriple } from '#root/core/rdfa-processor.js';\nimport { htmlSafe } from '@ember/template';\nimport { CheckIcon } from '@appuniversum/ember-appuniversum/components/icons/check';\n\ninterface StatusMessageForNode extends StatusMessage {\n node: PNode;\n}\n\ntype Args = {\n controller: SayController;\n node: ResolvedPNode;\n expanded?: boolean;\n onToggle?: (expanded: boolean) => void;\n optionGeneratorConfig?: OptionGeneratorConfig;\n};\nexport default class RelationshipEditorCard extends Component<Args> {\n @tracked _statusMessage: StatusMessageForNode | null = null;\n @tracked status?: Status;\n @tracked initialFormData?: FormData;\n @trackedReset('args.node') editingContentPredicate: boolean = false;\n\n @localCopy('args.expanded', true) declare expanded: boolean;\n\n setUpListeners = modifier(() => {\n const listenerHandler = (event: KeyboardEvent) => {\n if (event.altKey && event.ctrlKey) {\n const key = event.key;\n switch (key) {\n case 'b':\n case 'B':\n this.startCreationMode('backlink');\n break;\n case 'p':\n case 'P':\n if (this.isResourceNode) {\n this.startCreationMode('property');\n }\n break;\n }\n }\n };\n window.addEventListener('keydown', listenerHandler);\n return () => {\n window.removeEventListener('keydown', listenerHandler);\n };\n });\n\n get node() {\n return this.args.node.value;\n }\n\n get isRdfaAwareNode() {\n return isRdfaAttrs(this.node.attrs);\n }\n\n get nodeAttrs() {\n return this.node.attrs as RdfaAttrs;\n }\n\n get isCreating() {\n return this.status?.mode === 'creation';\n }\n\n get isUpdating() {\n return this.status?.mode === 'update';\n }\n\n toggleSection = () => {\n this.expanded = !this.expanded;\n this.args.onToggle?.(this.expanded);\n };\n\n startCreationMode = (direction: Direction) => {\n this.initialFormData = {\n direction,\n };\n this.status = {\n mode: 'creation',\n };\n };\n\n startUpdateMode = (propertyOrBacklink: PropertyOrBacklink) => {\n if ('subject' in propertyOrBacklink) {\n this.initialFormData = {\n direction: 'backlink',\n predicate: {\n direction: 'backlink',\n term: sayDataFactory.namedNode(propertyOrBacklink.predicate),\n },\n target: {\n term: propertyOrBacklink.subject,\n },\n };\n } else {\n this.initialFormData = {\n direction: 'property',\n predicate: {\n direction: 'property',\n term: sayDataFactory.namedNode(propertyOrBacklink.predicate),\n },\n target: {\n // @ts-expect-error remove blanknode from possible object types\n term: propertyOrBacklink.object,\n },\n };\n }\n this.status = {\n mode: 'update',\n propertyOrBacklink,\n };\n };\n\n onFormSubmit = (body: SubmissionBody) => {\n if (this.status?.mode === 'update') {\n this.removePropertyOrBacklink(this.status.propertyOrBacklink);\n }\n const node = this.args.node;\n const { predicate, target } = body;\n\n if (predicate.direction === 'property') {\n const resource =\n this.nodeAttrs.rdfaNodeType === 'resource' && this.nodeAttrs.subject;\n if (!resource) {\n return;\n }\n const property = {\n predicate: predicate.term.value,\n object: target.term,\n };\n this.controller.doCommand(\n addProperty({\n resource,\n // @ts-expect-error fix type of property\n property,\n }),\n );\n } else if (predicate.direction === 'backlink') {\n const backlink = {\n subject: target.term,\n predicate: predicate.term.value,\n };\n this.controller.withTransaction(\n () => {\n return addBacklinkToNode({\n rdfaId: node.value.attrs['__rdfaId'] as string,\n // @ts-expect-error fix type of backlink\n backlink,\n })(this.controller.mainEditorState).transaction;\n },\n { view: this.controller.mainEditorView },\n );\n }\n\n this.status = undefined;\n };\n\n cancel = () => {\n this.status = undefined;\n };\n\n get contentPredicateProperty() {\n if (this.nodeAttrs.rdfaNodeType === 'resource') {\n return this.nodeAttrs.properties.find(\n (prop) => prop.object.termType === 'ContentLiteral',\n );\n } else {\n return;\n }\n }\n\n contentPredicateTextRepr = (contentPredicateProperty: OutgoingTriple) => {\n const predicate = contentPredicateProperty.predicate;\n const object = contentPredicateProperty.object as ContentLiteralTerm;\n const languageSuffix = object.language ? `@${object.language}` : '';\n const datatypeSuffix = object.datatype\n ? `^^\"${object.datatype.value}\"`\n : '';\n return `<strong>${predicate}</strong>${languageSuffix}${datatypeSuffix}`;\n };\n\n get contentPredicateInitialFormData() {\n const predicate = this.contentPredicateProperty?.predicate;\n const object = this.contentPredicateProperty?.object as\n | ContentLiteralTerm\n | undefined;\n return {\n contentPredicate: predicate,\n language: object?.language,\n datatype: object?.datatype.value,\n };\n }\n\n startEditingContentPredicate = () => {\n this.editingContentPredicate = true;\n };\n\n onContentPredicateFormCancel = () => {\n this.editingContentPredicate = false;\n };\n\n onContentPredicateFormSubmit = (body: ContentPredicateFormSubmissionBody) => {\n this.editingContentPredicate = false;\n if (this.contentPredicateProperty) {\n this.removePropertyOrBacklink(this.contentPredicateProperty);\n }\n if (body.contentPredicate) {\n const property = {\n predicate: body.contentPredicate,\n object: sayDataFactory.contentLiteral(\n languageOrDataType(\n body.language,\n body.datatype ? sayDataFactory.namedNode(body.datatype) : undefined,\n ),\n ),\n };\n const resource =\n this.nodeAttrs.rdfaNodeType === 'resource' && this.nodeAttrs.subject;\n if (!resource) {\n return;\n }\n this.controller.doCommand(\n addProperty({\n resource,\n property,\n }),\n );\n }\n };\n\n removePropertyOrBacklink = (propertyOrBacklink: PropertyOrBacklink) => {\n // This function can only be called when the selected node defines a resource or the selected\n // node is a document that imports resources (e.g. a snippet)\n if ('subject' in propertyOrBacklink) {\n const backlinkIndex =\n this.nodeAttrs.backlinks.indexOf(propertyOrBacklink);\n if (backlinkIndex === -1) {\n return;\n }\n this.controller.withTransaction(\n () => {\n return removeBacklinkFromNode({\n rdfaId: this.args.node.value.attrs['__rdfaId'] as string,\n index: backlinkIndex,\n })(this.controller.mainEditorState).transaction;\n },\n { view: this.controller.mainEditorView },\n );\n } else {\n const resource =\n this.nodeAttrs.rdfaNodeType === 'resource' && this.nodeAttrs.subject;\n if (!resource) {\n return;\n }\n const propertyToRemove = { resource, property: propertyOrBacklink };\n this.controller?.doCommand(removeProperty(propertyToRemove), {\n view: this.controller.mainEditorView,\n });\n }\n };\n\n get isResourceNode() {\n return isResourceNode(this.args.node.value);\n }\n\n get type() {\n if (this.args.node.value.type === this.controller?.schema.nodes['doc']) {\n return 'document';\n }\n return this.isResourceNode ? 'resource' : 'literal';\n }\n\n get controller() {\n return this.args.controller;\n }\n\n goToSubject = (subject: string) => {\n const succesful = this.controller.doCommand(\n selectNodeBySubject({ subject }),\n {\n view: this.controller.mainEditorView,\n },\n );\n if (!succesful) {\n this.setStatusMessage({\n type: 'info',\n message: `Node with subject ${subject} not found`,\n });\n }\n this.controller.focus();\n };\n\n get modalTitle() {\n if (this.status?.mode === 'update') {\n return 'Edit relationship';\n } else {\n return 'Add relationship';\n }\n }\n\n get properties() {\n return this.nodeAttrs.rdfaNodeType === 'resource'\n ? this.nodeAttrs.properties.filter(\n (prop) => prop.object.termType !== 'ContentLiteral',\n )\n : undefined;\n }\n\n get backlinks() {\n return this.nodeAttrs.backlinks;\n }\n\n get statusMessage(): StatusMessage | null {\n // show only if a message is relevant for the current node\n if (this._statusMessage && this.node === this._statusMessage.node) {\n return this._statusMessage;\n }\n return null;\n }\n\n setStatusMessage = (val: StatusMessage | null) => {\n if (val) {\n this._statusMessage = { ...val, node: this.node };\n } else {\n this._statusMessage = val;\n }\n };\n\n closeStatusMessage = () => {\n this.setStatusMessage(null);\n };\n\n get currentTerm() {\n if (this.nodeAttrs.rdfaNodeType === 'resource') {\n return sayDataFactory.resourceNode(this.nodeAttrs.subject);\n } else {\n return sayDataFactory.literalNode(this.nodeAttrs.__rdfaId);\n }\n }\n\n <template>\n {{#if this.isRdfaAwareNode}}\n <AuCard\n {{this.setUpListeners}}\n @size=\"small\"\n @expandable={{true}}\n @manualControl={{true}}\n @openSection={{this.toggleSection}}\n @isExpanded={{this.expanded}}\n @disableAuContent={{true}}\n as |c|\n >\n <c.header>\n <div\n class=\"au-u-flex au-u-flex--row au-u-flex--vertical-center au-u-flex--spaced-small\"\n >\n <AuHeading @level=\"1\" @skin=\"6\">Relationships</AuHeading>\n <AuPill>{{this.type}}</AuPill>\n </div>\n </c.header>\n <c.content class=\"au-c-content--tiny\">\n {{#if this.isResourceNode}}\n <AuToolbar as |Group|>\n <Group>\n <AuHeading\n @level=\"2\"\n class=\"au-u-h6 au-u-muted\"\n >Properties</AuHeading>\n </Group>\n <Group>\n <AuButton\n @icon={{PlusIcon}}\n @skin=\"link\"\n {{on \"click\" (fn this.startCreationMode \"property\")}}\n >\n Add property\n </AuButton>\n </Group>\n </AuToolbar>\n {{#if this.properties.length}}\n <AuList @divider={{true}} as |Item|>\n {{#each this.properties as |prop|}}\n <Item\n class=\"au-u-flex au-u-flex--row au-u-flex--between au-u-flex--vertical-center\"\n >\n <div class=\"au-u-padding-tiny\">\n <ConfigurableRdfaDisplay\n @value={{prop}}\n @generator={{predicateDisplay}}\n @context={{hash\n controller=@controller\n isTopLevel=false\n }}\n />\n <PropertyDetails\n @controller={{@controller}}\n @prop={{prop}}\n @setStatusMessage={{this.setStatusMessage}}\n />\n </div>\n <AuDropdown\n @icon={{ThreeDotsIcon}}\n role=\"menu\"\n @alignment=\"left\"\n >\n <AuButton\n @skin=\"link\"\n @icon={{PencilIcon}}\n role=\"menuitem\"\n {{on \"click\" (fn this.startUpdateMode prop)}}\n >\n Edit property\n </AuButton>\n <AuButton\n @skin=\"link\"\n @icon={{BinIcon}}\n role=\"menuitem\"\n class=\"au-c-button--alert\"\n {{on \"click\" (fn this.removePropertyOrBacklink prop)}}\n >\n Remove property\n </AuButton>\n </AuDropdown>\n </Item>\n {{/each}}\n </AuList>\n {{else}}\n <p class=\"au-u-italic\">This node doesn't have any properties yet.</p>\n {{/if}}\n {{/if}}\n {{#if this.isResourceNode}}\n <WithUniqueId as |formId|>\n <AuToolbar as |Group|>\n <Group>\n <AuHeading @level=\"2\" class=\"au-u-h6 au-u-muted\">Content\n predicate</AuHeading>\n </Group>\n <Group>\n {{#if this.editingContentPredicate}}\n <AuButton\n {{on \"click\" this.onContentPredicateFormCancel}}\n @skin=\"link-secondary\"\n >Cancel</AuButton>\n <AuButton\n type=\"submit\"\n @icon={{CheckIcon}}\n form={{formId}}\n @skin=\"link\"\n >Save</AuButton>\n {{else}}\n <AuButton\n {{on \"click\" this.startEditingContentPredicate}}\n @icon={{PencilIcon}}\n @skin=\"link\"\n >\n Edit\n </AuButton>\n {{/if}}\n </Group>\n </AuToolbar>\n\n {{#if this.editingContentPredicate}}\n <ContentPredicateForm\n {{! @glint-expect-error }}\n @source={{this.currentTerm}}\n @optionGeneratorConfig={{@optionGeneratorConfig}}\n id={{formId}}\n @initialFormData={{this.contentPredicateInitialFormData}}\n @onSubmit={{this.onContentPredicateFormSubmit}}\n />\n {{else}}\n {{#if this.contentPredicateProperty}}\n <p>{{htmlSafe\n (this.contentPredicateTextRepr\n this.contentPredicateProperty\n )\n }}</p>\n {{else}}\n <p class=\"au-u-italic\">This node does not define a content\n predicate.</p>\n {{/if}}\n {{/if}}\n </WithUniqueId>\n {{/if}}\n <AuToolbar as |Group|>\n <Group>\n <AuHeading\n @level=\"2\"\n class=\"au-u-h6 au-u-muted\"\n >Backlinks</AuHeading>\n </Group>\n <Group>\n <AuButton\n @icon={{PlusIcon}}\n @skin=\"link\"\n {{on \"click\" (fn this.startCreationMode \"backlink\")}}\n >\n Add backlink\n </AuButton>\n </Group>\n </AuToolbar>\n {{#if this.backlinks.length}}\n <AuList @divider={{true}} as |Item|>\n {{#each this.backlinks as |backlink|}}\n <Item\n class=\"au-u-flex au-u-flex--row au-u-flex--between au-u-flex--vertical-center\"\n >\n <div class=\"au-u-padding-tiny\">\n <AuButton\n class=\"au-u-padding-left-none au-u-padding-right-none\"\n @icon={{ExternalLinkIcon}}\n @skin=\"link\"\n title={{backlink.subject.value}}\n {{on\n \"click\"\n (fn this.goToSubject backlink.subject.value)\n }}\n >subject</AuButton>\n <p><strong>predicate:</strong> {{backlink.predicate}}</p>\n </div>\n <AuDropdown\n @icon={{ThreeDotsIcon}}\n role=\"menu\"\n @alignment=\"left\"\n >\n <AuButton\n @skin=\"link\"\n @icon={{PencilIcon}}\n role=\"menuitem\"\n {{on \"click\" (fn this.startUpdateMode backlink)}}\n >\n Edit backlink\n </AuButton>\n <AuButton\n @skin=\"link\"\n @icon={{BinIcon}}\n role=\"menuitem\"\n class=\"au-c-button--alert\"\n {{on \"click\" (fn this.removePropertyOrBacklink backlink)}}\n >\n Remove backlink\n </AuButton>\n </AuDropdown>\n </Item>\n {{/each}}\n </AuList>\n {{else}}\n <p class=\"au-u-italic\">This node doesn't have any backlinks yet.</p>\n {{/if}}\n\n {{#if this.statusMessage}}\n <div>\n <AuAlert\n class=\"au-u-margin-none\"\n @skin={{this.statusMessage.type}}\n @closable={{true}}\n @onClose={{this.closeStatusMessage}}\n >\n {{this.statusMessage.message}}\n </AuAlert>\n </div>\n {{/if}}\n </c.content>\n </AuCard>\n {{/if}}\n {{#if this.status}}\n <RelationshipEditorDevModeModal\n @title={{this.modalTitle}}\n @initialData={{this.initialFormData}}\n @source={{this.currentTerm}}\n @optionGeneratorConfig={{@optionGeneratorConfig}}\n @onSubmit={{this.onFormSubmit}}\n @onCancel={{this.cancel}}\n />\n {{/if}}\n </template>\n}\n"],"names":["RelationshipEditorCard","Component","g","prototype","tracked","i","trackedReset","localCopy","setUpListeners","modifier","listenerHandler","event","altKey","ctrlKey","key","startCreationMode","isResourceNode","window","addEventListener","removeEventListener","node","args","value","isRdfaAwareNode","isRdfaAttrs","attrs","nodeAttrs","isCreating","status","mode","isUpdating","toggleSection","expanded","onToggle","direction","initialFormData","startUpdateMode","propertyOrBacklink","predicate","term","sayDataFactory","namedNode","target","subject","object","onFormSubmit","body","removePropertyOrBacklink","resource","rdfaNodeType","property","controller","doCommand","addProperty","backlink","withTransaction","addBacklinkToNode","rdfaId","mainEditorState","transaction","view","mainEditorView","undefined","cancel","contentPredicateProperty","properties","find","prop","termType","contentPredicateTextRepr","languageSuffix","language","datatypeSuffix","datatype","contentPredicateInitialFormData","contentPredicate","startEditingContentPredicate","editingContentPredicate","onContentPredicateFormCancel","onContentPredicateFormSubmit","contentLiteral","languageOrDataType","backlinkIndex","backlinks","indexOf","removeBacklinkFromNode","index","propertyToRemove","removeProperty","type","schema","nodes","goToSubject","succesful","selectNodeBySubject","setStatusMessage","message","focus","modalTitle","filter","statusMessage","_statusMessage","val","closeStatusMessage","currentTerm","resourceNode","literalNode","__rdfaId","setComponentTemplate","precompileTemplate","strictMode","scope","AuCard","AuHeading","AuPill","AuToolbar","AuButton","PlusIcon","on","fn","AuList","ConfigurableRdfaDisplay","predicateDisplay","hash","PropertyDetails","AuDropdown","ThreeDotsIcon","PencilIcon","BinIcon","WithUniqueId","CheckIcon","ContentPredicateForm","htmlSafe","ExternalLinkIcon","AuAlert","RelationshipEditorDevModeModal"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content-predicate-form.js","sources":["../../../../src/components/_private/relationship-editor/content-predicate-form.gts"],"sourcesContent":["import type { ResourceNodeTerm } from '#root/core/say-data-factory/index.ts';\nimport { LANG_STRING } from '#root/utils/_private/constants.ts';\nimport AuFormRow from '@appuniversum/ember-appuniversum/components/au-form-row';\nimport AuInput from '@appuniversum/ember-appuniversum/components/au-input';\nimport AuLabel from '@appuniversum/ember-appuniversum/components/au-label';\nimport { fn } from '@ember/helper';\nimport { on } from '@ember/modifier';\nimport Component from '@glimmer/component';\nimport { HeadlessForm } from 'ember-headless-form';\nimport { validateYup } from 'ember-headless-form-yup';\nimport { TrackedObject } from 'tracked-built-ins';\nimport { trackedReset } from 'tracked-toolbox';\nimport type { InferType } from 'yup';\nimport * as yup from 'yup';\nimport type { OptionGeneratorConfig } from './types.ts';\nimport { isFullUri, isPrefixedUri } from '@lblod/marawa/rdfa-helpers';\nimport PowerSelectWithCreate from 'ember-power-select-with-create/components/power-select-with-create';\n\nfunction truthy(obj: unknown) {\n return !!obj;\n}\n\nconst formSchema = yup.object({\n contentPredicate: yup.string().optional(),\n datatype: yup.string().optional(),\n language: yup.string().optional(),\n});\n\ntype FormData = InferType<typeof formSchema>;\n\nexport type SubmissionBody = FormData;\n\ntype Signature = {\n Args: {\n source: ResourceNodeTerm<string>;\n optionGeneratorConfig?: OptionGeneratorConfig;\n initialFormData?: FormData;\n onSubmit: (body: SubmissionBody) => unknown;\n };\n Element: HTMLFormElement;\n};\n\nexport default class ContentPredicateForm extends Component<Signature> {\n @trackedReset('args.initialFormData') formData = new TrackedObject(\n this.args.initialFormData ?? {},\n );\n\n handleSubmit = (body: SubmissionBody) => {\n this.args.onSubmit(body);\n };\n\n searchPredicates = async (searchString: string) => {\n const options = await this.args.optionGeneratorConfig?.predicates?.({\n searchString,\n selectedSource: this.args.source,\n direction: 'property',\n });\n return options?.map((option) => option.term.value) ?? [];\n };\n\n isValidPredicate = (term: string) => {\n if (!term) {\n return false;\n }\n const isUri = isFullUri(term) || isPrefixedUri(term);\n return isUri;\n };\n\n buildPowerSelectWithCreateSuggestion = (term: string) => term;\n\n setPredicate = (validationFn: () => void, value?: string) => {\n this.formData.contentPredicate = value;\n validationFn();\n };\n\n setDatatype = (validationFn: () => void, event: Event) => {\n const datatype = (event.target as HTMLInputElement).value;\n this.formData.datatype = datatype;\n validationFn();\n };\n\n setLanguage = (validationFn: () => void, event: Event) => {\n const language = (event.target as HTMLInputElement).value;\n this.formData.language = language;\n this.formData.datatype = LANG_STRING;\n validationFn();\n };\n\n <template>\n <HeadlessForm\n class=\"au-u-flex au-u-flex--column au-u-flex--spaced-tiny\"\n @onSubmit={{this.handleSubmit}}\n @data={{this.formData}}\n @dataMode=\"mutable\"\n @validate={{validateYup formSchema}}\n ...attributes\n as |form|\n >\n <AuFormRow>\n <form.Field @name=\"contentPredicate\" as |field|>\n <AuLabel class=\"au-u-hidden-visually\" for={{field.id}}>\n Content Predicate\n </AuLabel>\n <PowerSelectWithCreate\n id={{field.id}}\n @selected={{field.value}}\n @onChange={{fn this.setPredicate field.triggerValidation}}\n @onCreate={{fn this.setPredicate field.triggerValidation}}\n @showCreateWhen={{this.isValidPredicate}}\n @buildSuggestion={{this.buildPowerSelectWithCreateSuggestion}}\n @allowClear={{true}}\n @options={{this.searchPredicates \"\"}}\n @search={{this.searchPredicates}}\n @searchEnabled={{true}}\n class=\"au-u-1-1\"\n as |option|\n >\n {{option}}\n </PowerSelectWithCreate>\n <field.Errors />\n </form.Field>\n </AuFormRow>\n <div class=\"au-u-flex au-u-flex--row au-u-flex--spaced-tiny\">\n <form.Field @name=\"language\" as |field|>\n <div class=\"au-u-1-5 au-u-flex au-u-flex--column\">\n <AuLabel\n class=\"au-u-para-small au-u-muted\"\n for={{field.id}}\n >Language</AuLabel>\n <AuInput\n id={{field.id}}\n {{on \"input\" (fn this.setLanguage field.triggerValidation)}}\n value={{field.value}}\n />\n </div>\n </form.Field>\n <form.Field @name=\"datatype\" as |field|>\n <div class=\"au-u-4-5 au-u-flex au-u-flex--column\">\n <AuLabel\n class=\"au-u-para-small au-u-muted\"\n for={{field.id}}\n >Datatype</AuLabel>\n <AuInput\n id={{field.id}}\n @disabled={{truthy this.formData.language}}\n {{on \"input\" (fn this.setDatatype field.triggerValidation)}}\n value={{field.value}}\n />\n </div>\n </form.Field>\n </div>\n\n </HeadlessForm>\n </template>\n}\n"],"names":["truthy","obj","formSchema","yup","object","contentPredicate","string","optional","datatype","language","ContentPredicateForm","Component","g","prototype","trackedReset","TrackedObject","args","initialFormData","i","
|
|
1
|
+
{"version":3,"file":"content-predicate-form.js","sources":["../../../../src/components/_private/relationship-editor/content-predicate-form.gts"],"sourcesContent":["import type { ResourceNodeTerm } from '#root/core/say-data-factory/index.ts';\nimport { LANG_STRING } from '#root/utils/_private/constants.ts';\nimport AuFormRow from '@appuniversum/ember-appuniversum/components/au-form-row';\nimport AuInput from '@appuniversum/ember-appuniversum/components/au-input';\nimport AuLabel from '@appuniversum/ember-appuniversum/components/au-label';\nimport { fn } from '@ember/helper';\nimport { on } from '@ember/modifier';\nimport Component from '@glimmer/component';\nimport { HeadlessForm } from 'ember-headless-form';\nimport { validateYup } from 'ember-headless-form-yup';\nimport { TrackedObject } from 'tracked-built-ins';\nimport { trackedReset } from 'tracked-toolbox';\nimport type { InferType } from 'yup';\nimport * as yup from 'yup';\nimport type { OptionGeneratorConfig } from './types.ts';\nimport { isFullUri, isPrefixedUri } from '@lblod/marawa/rdfa-helpers';\nimport PowerSelectWithCreate from 'ember-power-select-with-create/components/power-select-with-create';\n\nfunction truthy(obj: unknown) {\n return !!obj;\n}\n\nconst formSchema = yup.object({\n contentPredicate: yup.string().optional(),\n datatype: yup.string().optional(),\n language: yup.string().optional(),\n});\n\ntype FormData = InferType<typeof formSchema>;\n\nexport type SubmissionBody = FormData;\n\ntype Signature = {\n Args: {\n source: ResourceNodeTerm<string>;\n optionGeneratorConfig?: OptionGeneratorConfig;\n initialFormData?: FormData;\n onSubmit: (body: SubmissionBody) => unknown;\n };\n Element: HTMLFormElement;\n};\n\nexport default class ContentPredicateForm extends Component<Signature> {\n @trackedReset('args.initialFormData') formData = new TrackedObject(\n this.args.initialFormData ?? {},\n );\n\n handleSubmit = (body: SubmissionBody) => {\n this.args.onSubmit(body);\n };\n\n searchPredicates = async (searchString: string) => {\n const options = await this.args.optionGeneratorConfig?.predicates?.({\n searchString,\n selectedSource: this.args.source,\n direction: 'property',\n });\n return options?.map((option) => option.term.value) ?? [];\n };\n\n isValidPredicate = (term: string) => {\n if (!term) {\n return false;\n }\n const isUri = isFullUri(term) || isPrefixedUri(term);\n return isUri;\n };\n\n buildPowerSelectWithCreateSuggestion = (term: string) => term;\n\n setPredicate = (validationFn: () => void, value?: string) => {\n this.formData.contentPredicate = value;\n validationFn();\n };\n\n setDatatype = (validationFn: () => void, event: Event) => {\n const datatype = (event.target as HTMLInputElement).value;\n this.formData.datatype = datatype;\n validationFn();\n };\n\n setLanguage = (validationFn: () => void, event: Event) => {\n const language = (event.target as HTMLInputElement).value;\n this.formData.language = language;\n this.formData.datatype = LANG_STRING;\n validationFn();\n };\n\n <template>\n <HeadlessForm\n class=\"au-u-flex au-u-flex--column au-u-flex--spaced-tiny\"\n @onSubmit={{this.handleSubmit}}\n @data={{this.formData}}\n @dataMode=\"mutable\"\n @validate={{validateYup formSchema}}\n ...attributes\n as |form|\n >\n <AuFormRow>\n <form.Field @name=\"contentPredicate\" as |field|>\n <AuLabel class=\"au-u-hidden-visually\" for={{field.id}}>\n Content Predicate\n </AuLabel>\n <PowerSelectWithCreate\n id={{field.id}}\n @selected={{field.value}}\n @onChange={{fn this.setPredicate field.triggerValidation}}\n @onCreate={{fn this.setPredicate field.triggerValidation}}\n @showCreateWhen={{this.isValidPredicate}}\n @buildSuggestion={{this.buildPowerSelectWithCreateSuggestion}}\n @allowClear={{true}}\n @options={{this.searchPredicates \"\"}}\n @search={{this.searchPredicates}}\n @searchEnabled={{true}}\n class=\"au-u-1-1\"\n as |option|\n >\n {{option}}\n </PowerSelectWithCreate>\n <field.Errors />\n </form.Field>\n </AuFormRow>\n <div class=\"au-u-flex au-u-flex--row au-u-flex--spaced-tiny\">\n <form.Field @name=\"language\" as |field|>\n <div class=\"au-u-1-5 au-u-flex au-u-flex--column\">\n <AuLabel\n class=\"au-u-para-small au-u-muted\"\n for={{field.id}}\n >Language</AuLabel>\n <AuInput\n id={{field.id}}\n {{on \"input\" (fn this.setLanguage field.triggerValidation)}}\n value={{field.value}}\n />\n </div>\n </form.Field>\n <form.Field @name=\"datatype\" as |field|>\n <div class=\"au-u-4-5 au-u-flex au-u-flex--column\">\n <AuLabel\n class=\"au-u-para-small au-u-muted\"\n for={{field.id}}\n >Datatype</AuLabel>\n <AuInput\n id={{field.id}}\n @disabled={{truthy this.formData.language}}\n {{on \"input\" (fn this.setDatatype field.triggerValidation)}}\n value={{field.value}}\n />\n </div>\n </form.Field>\n </div>\n\n </HeadlessForm>\n </template>\n}\n"],"names":["truthy","obj","formSchema","yup","object","contentPredicate","string","optional","datatype","language","ContentPredicateForm","Component","g","prototype","trackedReset","TrackedObject","args","initialFormData","i","handleSubmit","body","onSubmit","searchPredicates","searchString","options","optionGeneratorConfig","predicates","selectedSource","source","direction","map","option","term","value","isValidPredicate","isUri","isFullUri","isPrefixedUri","buildPowerSelectWithCreateSuggestion","setPredicate","validationFn","formData","setDatatype","event","target","setLanguage","LANG_STRING","setComponentTemplate","precompileTemplate","strictMode","scope","HeadlessForm","validateYup","AuFormRow","AuLabel","PowerSelectWithCreate","fn","AuInput","on"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-button.js","sources":["../../../../src/components/_private/relationship-editor/create-button.gts"],"sourcesContent":["import AuButton, {\n type AuButtonSignature,\n} from '@appuniversum/ember-appuniversum/components/au-button';\nimport { AddIcon } from '@appuniversum/ember-appuniversum/components/icons/add';\nimport Component from '@glimmer/component';\nimport { tracked } from 'tracked-built-ins';\nimport { sayDataFactory } from '#root/core/say-data-factory/data-factory.ts';\nimport type { ResolvedPNode } from '#root/utils/_private/types.ts';\nimport type SayController from '#root/core/say-controller.ts';\nimport { isRdfaAttrs } from '#root/core/rdfa-types.ts';\nimport { addBacklinkToNode } from '#root/utils/rdfa-utils.ts';\nimport t from 'ember-intl/helpers/t';\nimport { on } from '@ember/modifier';\nimport { addProperty } from '#root/commands/rdfa-commands/add-property.ts';\nimport type { OptionGeneratorConfig, SubmissionBody } from './types.ts';\nimport RelationshipEditorDevModeModal from './modals/dev-mode.gts';\nimport RelationshipEditorClassicModal from './modals/classic.gts';\nimport { and } from 'ember-truth-helpers';\n\ntype CreateRelationshipButtonSig = {\n Element: AuButtonSignature['Element'];\n Args: {\n controller: SayController;\n node?: ResolvedPNode;\n optionGeneratorConfig?: OptionGeneratorConfig;\n devMode?: boolean;\n };\n};\nexport default class CreateRelationshipButton extends Component<CreateRelationshipButtonSig> {\n @tracked modalOpen = false;\n\n get controller() {\n return this.args.controller;\n }\n\n get node() {\n return this.args.node;\n }\n\n openModal = () => {\n this.modalOpen = true;\n };\n\n onFormSubmit = (body: SubmissionBody) => {\n if (!this.node) {\n return;\n }\n const node = this.node;\n const { predicate, target } = body;\n if (predicate.direction === 'property') {\n const property = {\n predicate: predicate.term.value,\n object: target.term,\n };\n this.controller.doCommand(\n addProperty({\n resource: this.node.value.attrs['subject'] as string,\n // @ts-expect-error fix type of property\n property,\n }),\n );\n } else if (predicate.direction === 'backlink') {\n const backlink = {\n subject: target.term,\n predicate: predicate.term.value,\n };\n this.controller.withTransaction(\n () => {\n return addBacklinkToNode({\n rdfaId: node.value.attrs['__rdfaId'] as string,\n // @ts-expect-error fix type of backlink\n backlink,\n })(this.controller.mainEditorState).transaction;\n },\n { view: this.controller.mainEditorView },\n );\n }\n\n this.modalOpen = false;\n };\n\n closeModal = () => {\n this.modalOpen = false;\n };\n\n get selectedNode() {\n const node = this.args.node;\n if (!node || !isRdfaAttrs(node.value.attrs)) {\n return;\n }\n if (node.value.attrs.rdfaNodeType === 'resource') {\n return sayDataFactory.resourceNode(node.value.attrs.subject);\n } else {\n return sayDataFactory.literalNode(node.value.attrs.__rdfaId);\n }\n }\n\n get isDisabled() {\n return !this.selectedNode;\n }\n\n get ModalComponent() {\n return this.args.devMode\n ? RelationshipEditorDevModeModal\n : RelationshipEditorClassicModal;\n }\n\n <template>\n <AuButton\n @icon={{AddIcon}}\n @disabled={{this.isDisabled}}\n @iconAlignment=\"left\"\n @skin=\"link\"\n {{on \"click\" this.openModal}}\n ...attributes\n >\n {{t \"ember-rdfa-editor.linking-ui-poc.button.label\"}}\n </AuButton>\n {{#if (and this.modalOpen this.selectedNode)}}\n {{#if @devMode}}\n <RelationshipEditorDevModeModal\n {{! @glint-expect-error }}\n @source={{this.selectedNode}}\n @onSubmit={{this.onFormSubmit}}\n @onCancel={{this.closeModal}}\n @optionGeneratorConfig={{@optionGeneratorConfig}}\n />\n {{else}}\n <RelationshipEditorClassicModal\n {{! @glint-expect-error }}\n @source={{this.selectedNode}}\n @onSubmit={{this.onFormSubmit}}\n @onCancel={{this.closeModal}}\n @optionGeneratorConfig={{@optionGeneratorConfig}}\n />\n {{/if}}\n\n {{/if}}\n </template>\n}\n"],"names":["CreateRelationshipButton","Component","g","prototype","tracked","i","
|
|
1
|
+
{"version":3,"file":"create-button.js","sources":["../../../../src/components/_private/relationship-editor/create-button.gts"],"sourcesContent":["import AuButton, {\n type AuButtonSignature,\n} from '@appuniversum/ember-appuniversum/components/au-button';\nimport { AddIcon } from '@appuniversum/ember-appuniversum/components/icons/add';\nimport Component from '@glimmer/component';\nimport { tracked } from 'tracked-built-ins';\nimport { sayDataFactory } from '#root/core/say-data-factory/data-factory.ts';\nimport type { ResolvedPNode } from '#root/utils/_private/types.ts';\nimport type SayController from '#root/core/say-controller.ts';\nimport { isRdfaAttrs } from '#root/core/rdfa-types.ts';\nimport { addBacklinkToNode } from '#root/utils/rdfa-utils.ts';\nimport t from 'ember-intl/helpers/t';\nimport { on } from '@ember/modifier';\nimport { addProperty } from '#root/commands/rdfa-commands/add-property.ts';\nimport type { OptionGeneratorConfig, SubmissionBody } from './types.ts';\nimport RelationshipEditorDevModeModal from './modals/dev-mode.gts';\nimport RelationshipEditorClassicModal from './modals/classic.gts';\nimport { and } from 'ember-truth-helpers';\n\ntype CreateRelationshipButtonSig = {\n Element: AuButtonSignature['Element'];\n Args: {\n controller: SayController;\n node?: ResolvedPNode;\n optionGeneratorConfig?: OptionGeneratorConfig;\n devMode?: boolean;\n };\n};\nexport default class CreateRelationshipButton extends Component<CreateRelationshipButtonSig> {\n @tracked modalOpen = false;\n\n get controller() {\n return this.args.controller;\n }\n\n get node() {\n return this.args.node;\n }\n\n openModal = () => {\n this.modalOpen = true;\n };\n\n onFormSubmit = (body: SubmissionBody) => {\n if (!this.node) {\n return;\n }\n const node = this.node;\n const { predicate, target } = body;\n if (predicate.direction === 'property') {\n const property = {\n predicate: predicate.term.value,\n object: target.term,\n };\n this.controller.doCommand(\n addProperty({\n resource: this.node.value.attrs['subject'] as string,\n // @ts-expect-error fix type of property\n property,\n }),\n );\n } else if (predicate.direction === 'backlink') {\n const backlink = {\n subject: target.term,\n predicate: predicate.term.value,\n };\n this.controller.withTransaction(\n () => {\n return addBacklinkToNode({\n rdfaId: node.value.attrs['__rdfaId'] as string,\n // @ts-expect-error fix type of backlink\n backlink,\n })(this.controller.mainEditorState).transaction;\n },\n { view: this.controller.mainEditorView },\n );\n }\n\n this.modalOpen = false;\n };\n\n closeModal = () => {\n this.modalOpen = false;\n };\n\n get selectedNode() {\n const node = this.args.node;\n if (!node || !isRdfaAttrs(node.value.attrs)) {\n return;\n }\n if (node.value.attrs.rdfaNodeType === 'resource') {\n return sayDataFactory.resourceNode(node.value.attrs.subject);\n } else {\n return sayDataFactory.literalNode(node.value.attrs.__rdfaId);\n }\n }\n\n get isDisabled() {\n return !this.selectedNode;\n }\n\n get ModalComponent() {\n return this.args.devMode\n ? RelationshipEditorDevModeModal\n : RelationshipEditorClassicModal;\n }\n\n <template>\n <AuButton\n @icon={{AddIcon}}\n @disabled={{this.isDisabled}}\n @iconAlignment=\"left\"\n @skin=\"link\"\n {{on \"click\" this.openModal}}\n ...attributes\n >\n {{t \"ember-rdfa-editor.linking-ui-poc.button.label\"}}\n </AuButton>\n {{#if (and this.modalOpen this.selectedNode)}}\n {{#if @devMode}}\n <RelationshipEditorDevModeModal\n {{! @glint-expect-error }}\n @source={{this.selectedNode}}\n @onSubmit={{this.onFormSubmit}}\n @onCancel={{this.closeModal}}\n @optionGeneratorConfig={{@optionGeneratorConfig}}\n />\n {{else}}\n <RelationshipEditorClassicModal\n {{! @glint-expect-error }}\n @source={{this.selectedNode}}\n @onSubmit={{this.onFormSubmit}}\n @onCancel={{this.closeModal}}\n @optionGeneratorConfig={{@optionGeneratorConfig}}\n />\n {{/if}}\n\n {{/if}}\n </template>\n}\n"],"names":["CreateRelationshipButton","Component","g","prototype","tracked","i","controller","args","node","openModal","modalOpen","onFormSubmit","body","predicate","target","direction","property","term","value","object","doCommand","addProperty","resource","attrs","backlink","subject","withTransaction","addBacklinkToNode","rdfaId","mainEditorState","transaction","view","mainEditorView","closeModal","selectedNode","isRdfaAttrs","rdfaNodeType","sayDataFactory","resourceNode","literalNode","__rdfaId","isDisabled","ModalComponent","devMode","RelationshipEditorDevModeModal","RelationshipEditorClassicModal","setComponentTemplate","precompileTemplate","strictMode","scope","AuButton","AddIcon","on","t","and"],"mappings":"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"}
|