Adds option to copy item URL to clipboard

This commit is contained in:
Alicia Sykes 2022-01-15 19:29:15 +00:00
parent 967daac95d
commit 45700d7875
3 changed files with 21 additions and 1 deletions

View File

@ -141,7 +141,7 @@ export default {
hyperLinkHref() { hyperLinkHref() {
const nothing = '#'; const nothing = '#';
if (this.isEditMode) return nothing; if (this.isEditMode) return nothing;
const noAnchorNeeded = ['modal', 'workspace']; const noAnchorNeeded = ['modal', 'workspace', 'clipboard'];
return noAnchorNeeded.includes(this.accumulatedTarget) ? nothing : this.url; return noAnchorNeeded.includes(this.accumulatedTarget) ? nothing : this.url;
}, },
}, },
@ -174,6 +174,9 @@ export default {
this.$emit('triggerModal', this.url); this.$emit('triggerModal', this.url);
} else if (this.accumulatedTarget === 'workspace') { } else if (this.accumulatedTarget === 'workspace') {
router.push({ name: 'workspace', query: { url: this.url } }); router.push({ name: 'workspace', query: { url: this.url } });
} else if (this.accumulatedTarget === 'clipboard') {
navigator.clipboard.writeText(this.url);
this.$toasted.show(this.$t('context-menus.item.copied-toast'));
} else { } else {
this.$emit('itemClicked'); this.$emit('itemClicked');
} }
@ -226,6 +229,7 @@ export default {
case 'top': return '"\\f102"'; case 'top': return '"\\f102"';
case 'modal': return '"\\f2d0"'; case 'modal': return '"\\f2d0"';
case 'workspace': return '"\\f0b1"'; case 'workspace': return '"\\f0b1"';
case 'clipboard': return '"\\f0ea"';
default: return '"\\f054"'; default: return '"\\f054"';
} }
}, },
@ -279,6 +283,10 @@ export default {
case 'workspace': case 'workspace':
router.push({ name: 'workspace', query: { url } }); router.push({ name: 'workspace', query: { url } });
break; break;
case 'clipboard':
navigator.clipboard.writeText(url);
this.$toasted.show(this.$t('context-menus.item.copied-toast'));
break;
default: window.open(url, '_blank'); default: window.open(url, '_blank');
} }
}, },
@ -546,4 +554,7 @@ a.item.is-edit-mode {
.disabled-link { .disabled-link {
pointer-events: none; pointer-events: none;
} }
.tooltip.item-description-tooltip {
z-index: 7;
}
</style> </style>

View File

@ -23,6 +23,10 @@
<WorkspaceOpenIcon /> <WorkspaceOpenIcon />
<span>{{ $t('context-menus.item.workspace') }}</span> <span>{{ $t('context-menus.item.workspace') }}</span>
</li> </li>
<li @click="launch('clipboard')">
<ClipboardOpenIcon />
<span>{{ $t('context-menus.item.clipboard') }}</span>
</li>
</ul> </ul>
<!-- Edit Options --> <!-- Edit Options -->
<ul class="menu-section"> <ul class="menu-section">
@ -55,6 +59,7 @@ import SameTabOpenIcon from '@/assets/interface-icons/open-current-tab.svg';
import NewTabOpenIcon from '@/assets/interface-icons/open-new-tab.svg'; import NewTabOpenIcon from '@/assets/interface-icons/open-new-tab.svg';
import IframeOpenIcon from '@/assets/interface-icons/open-iframe.svg'; import IframeOpenIcon from '@/assets/interface-icons/open-iframe.svg';
import WorkspaceOpenIcon from '@/assets/interface-icons/open-workspace.svg'; import WorkspaceOpenIcon from '@/assets/interface-icons/open-workspace.svg';
import ClipboardOpenIcon from '@/assets/interface-icons/open-clipboard.svg';
export default { export default {
name: 'ContextMenu', name: 'ContextMenu',
@ -66,6 +71,7 @@ export default {
NewTabOpenIcon, NewTabOpenIcon,
IframeOpenIcon, IframeOpenIcon,
WorkspaceOpenIcon, WorkspaceOpenIcon,
ClipboardOpenIcon,
}, },
props: { props: {
posX: Number, // The X coordinate for positioning posX: Number, // The X coordinate for positioning

View File

@ -7,6 +7,7 @@
<WorkspaceOpenIcon v-else-if="openingMethod === 'workspace'" /> <WorkspaceOpenIcon v-else-if="openingMethod === 'workspace'" />
<ParentOpenIcon v-else-if="openingMethod === 'parent'" /> <ParentOpenIcon v-else-if="openingMethod === 'parent'" />
<TopOpenIcon v-else-if="openingMethod === 'top'" /> <TopOpenIcon v-else-if="openingMethod === 'top'" />
<ClipboardOpenIcon v-else-if="openingMethod === 'clipboard'" />
<UnknownIcon v-else /> <UnknownIcon v-else />
</div> </div>
<div v-if="hotkey" :class="`hotkey-denominator ${makeClass(position, isSmall, isTransparent)}`"> <div v-if="hotkey" :class="`hotkey-denominator ${makeClass(position, isSmall, isTransparent)}`">
@ -25,6 +26,7 @@ import IframeOpenIcon from '@/assets/interface-icons/open-iframe.svg';
import WorkspaceOpenIcon from '@/assets/interface-icons/open-workspace.svg'; import WorkspaceOpenIcon from '@/assets/interface-icons/open-workspace.svg';
import ParentOpenIcon from '@/assets/interface-icons/open-parent.svg'; import ParentOpenIcon from '@/assets/interface-icons/open-parent.svg';
import TopOpenIcon from '@/assets/interface-icons/open-top.svg'; import TopOpenIcon from '@/assets/interface-icons/open-top.svg';
import ClipboardOpenIcon from '@/assets/interface-icons/open-clipboard.svg';
import UnknownIcon from '@/assets/interface-icons/unknown-icon.svg'; import UnknownIcon from '@/assets/interface-icons/unknown-icon.svg';
export default { export default {
@ -52,6 +54,7 @@ export default {
WorkspaceOpenIcon, WorkspaceOpenIcon,
ParentOpenIcon, ParentOpenIcon,
TopOpenIcon, TopOpenIcon,
ClipboardOpenIcon,
UnknownIcon, UnknownIcon,
}, },
}; };