Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'app/assets/javascripts/content_editor/components/bubble_menus/link.vue')
-rw-r--r--app/assets/javascripts/content_editor/components/bubble_menus/link.vue189
1 files changed, 0 insertions, 189 deletions
diff --git a/app/assets/javascripts/content_editor/components/bubble_menus/link.vue b/app/assets/javascripts/content_editor/components/bubble_menus/link.vue
deleted file mode 100644
index dae0bc63b5a..00000000000
--- a/app/assets/javascripts/content_editor/components/bubble_menus/link.vue
+++ /dev/null
@@ -1,189 +0,0 @@
-<script>
-import {
- GlLink,
- GlForm,
- GlFormGroup,
- GlFormInput,
- GlButton,
- GlButtonGroup,
- GlTooltipDirective as GlTooltip,
-} from '@gitlab/ui';
-import { BubbleMenu } from '@tiptap/vue-2';
-import Link from '../../extensions/link';
-import EditorStateObserver from '../editor_state_observer.vue';
-
-export default {
- components: {
- BubbleMenu,
- GlForm,
- GlFormGroup,
- GlFormInput,
- GlLink,
- GlButton,
- GlButtonGroup,
- EditorStateObserver,
- },
- directives: {
- GlTooltip,
- },
- inject: ['tiptapEditor', 'contentEditor'],
- data() {
- return {
- linkHref: undefined,
- linkCanonicalSrc: undefined,
- linkTitle: undefined,
-
- isEditing: false,
- };
- },
- watch: {
- linkCanonicalSrc(value) {
- if (!value) this.isEditing = true;
- },
- },
- methods: {
- shouldShow() {
- const shouldShow = this.tiptapEditor.isActive(Link.name);
-
- if (!shouldShow) this.isEditing = false;
-
- return shouldShow;
- },
-
- startEditingLink() {
- // select the entire link
- this.tiptapEditor.chain().focus().extendMarkRange(Link.name).run();
-
- this.isEditing = true;
- },
-
- async endEditingLink() {
- this.isEditing = false;
-
- this.linkHref = await this.contentEditor.resolveUrl(this.linkCanonicalSrc);
-
- if (!this.linkCanonicalSrc && !this.linkHref) {
- this.removeLink();
- }
- },
-
- cancelEditingLink() {
- this.endEditingLink();
- this.updateLinkToState();
- },
-
- async saveEditedLink() {
- if (!this.linkCanonicalSrc) {
- this.removeLink();
- } else {
- this.tiptapEditor
- .chain()
- .focus()
- .extendMarkRange(Link.name)
- .updateAttributes(Link.name, {
- href: this.linkCanonicalSrc,
- canonicalSrc: this.linkCanonicalSrc,
- title: this.linkTitle,
- })
- .run();
- }
-
- this.endEditingLink();
- },
-
- updateLinkToState() {
- if (!this.tiptapEditor.isActive(Link.name)) return;
-
- const { href, title, canonicalSrc } = this.tiptapEditor.getAttributes(Link.name);
-
- this.linkTitle = title;
- this.linkHref = href;
- this.linkCanonicalSrc = canonicalSrc || href;
- },
-
- copyLinkHref() {
- navigator.clipboard.writeText(this.linkCanonicalSrc);
- },
-
- removeLink() {
- this.tiptapEditor.chain().focus().extendMarkRange(Link.name).unsetLink().run();
- },
- },
-};
-</script>
-<template>
- <bubble-menu
- data-testid="link-bubble-menu"
- class="gl-shadow gl-rounded-base gl-bg-white"
- :editor="tiptapEditor"
- plugin-key="bubbleMenuLink"
- :should-show="() => shouldShow()"
- :tippy-options="/* eslint-disable @gitlab/vue-no-new-non-primitive-in-template */ {
- placement: 'bottom',
- } /* eslint-enable @gitlab/vue-no-new-non-primitive-in-template */"
- >
- <editor-state-observer @transaction="updateLinkToState">
- <gl-button-group v-if="!isEditing" class="gl-display-flex gl-align-items-center">
- <gl-link
- v-gl-tooltip
- :href="linkHref"
- :aria-label="linkCanonicalSrc"
- :title="linkCanonicalSrc"
- target="_blank"
- class="gl-px-3 gl-overflow-hidden gl-white-space-nowrap gl-text-overflow-ellipsis"
- >
- {{ linkCanonicalSrc }}
- </gl-link>
- <gl-button
- v-gl-tooltip
- variant="default"
- category="tertiary"
- size="medium"
- data-testid="copy-link-url"
- :aria-label="__('Copy link URL')"
- :title="__('Copy link URL')"
- icon="copy-to-clipboard"
- @click="copyLinkHref"
- />
- <gl-button
- v-gl-tooltip
- variant="default"
- category="tertiary"
- size="medium"
- data-testid="edit-link"
- :aria-label="__('Edit link')"
- :title="__('Edit link')"
- icon="pencil"
- @click="startEditingLink"
- />
- <gl-button
- v-gl-tooltip
- variant="default"
- category="tertiary"
- size="medium"
- data-testid="remove-link"
- :aria-label="__('Remove link')"
- :title="__('Remove link')"
- icon="unlink"
- @click="removeLink"
- />
- </gl-button-group>
- <gl-form v-else class="bubble-menu-form gl-p-4 gl-w-100" @submit.prevent="saveEditedLink">
- <gl-form-group :label="__('URL')" label-for="link-href">
- <gl-form-input id="link-href" v-model="linkCanonicalSrc" data-testid="link-href" />
- </gl-form-group>
- <gl-form-group :label="__('Title')" label-for="link-title">
- <gl-form-input id="link-title" v-model="linkTitle" data-testid="link-title" />
- </gl-form-group>
- <div class="gl-display-flex gl-justify-content-end">
- <gl-button class="gl-mr-3" data-testid="cancel-link" @click="cancelEditingLink">
- {{ __('Cancel') }}
- </gl-button>
- <gl-button variant="confirm" type="submit">
- {{ __('Apply') }}
- </gl-button>
- </div>
- </gl-form>
- </editor-state-observer>
- </bubble-menu>
-</template>