11<script setup lang="ts">
2- import { faCopy } from " @fortawesome/free-regular-svg-icons" ;
2+ import { faCopy , faEye } from " @fortawesome/free-regular-svg-icons" ;
33import { faCaretDown , faDownload , faExternalLinkAlt , faLink } from " @fortawesome/free-solid-svg-icons" ;
44import { FontAwesomeIcon } from " @fortawesome/vue-fontawesome" ;
55import { BDropdown , BDropdownItem } from " bootstrap-vue" ;
66import { storeToRefs } from " pinia" ;
77import { computed , ref } from " vue" ;
88
99import { isAdminUser } from " @/api" ;
10+ import { useConfig } from " @/composables/config" ;
1011import { useUserStore } from " @/stores/userStore" ;
1112import localize from " @/utils/localization" ;
1213import { loadWebhooks } from " @/utils/webhooks" ;
@@ -15,9 +16,11 @@ import { copyId, copyLink, downloadTool, openLink } from "../utilities";
1516
1617import ToolTourGeneratorItem from " ./ToolTourGeneratorItem.vue" ;
1718import GButton from " @/components/BaseComponents/GButton.vue" ;
18- import ToolSourceMenuItem from " @/components/Tool/ToolSourceMenuItem.vue" ;
19+ import GModal from " @/components/BaseComponents/GModal.vue" ;
20+ import ToolSource from " @/components/Tool/ToolSource.vue" ;
1921
20- const { currentUser } = storeToRefs (useUserStore ());
22+ const { currentUser, isAdmin } = storeToRefs (useUserStore ());
23+ const { config } = useConfig (true );
2124
2225interface Props {
2326 id: string ;
@@ -34,6 +37,7 @@ const props = withDefaults(defineProps<Props>(), {
3437 version: " 1.0" ,
3538});
3639
40+ const showToolSource = ref (false );
3741const webhookDetails = ref <any []>([]);
3842
3943const showDownload = computed (() => isAdminUser (currentUser .value ));
@@ -75,44 +79,52 @@ loadToolMenuWebhooks();
7579 </script >
7680
7781<template >
78- <BDropdown
79- no-caret
80- right
81- role =" button"
82- title =" Options"
83- variant =" link"
84- aria-label =" View all Options"
85- class =" tool-dropdown"
86- toggle-class =" p-0"
87- size =" sm" >
88- <template v-slot :button-content >
89- <GButton class =" d-block" color =" blue" transparent size =" small" tooltip title =" Options" >
90- <FontAwesomeIcon :icon =" faCaretDown" />
91- </GButton >
92- </template >
93-
94- <BDropdownItem @click =" onCopyLink" >
95- <FontAwesomeIcon :icon =" faLink" /><span v-localize >Copy Link</span >
96- </BDropdownItem >
97-
98- <BDropdownItem @click =" onCopyId" >
99- <FontAwesomeIcon :icon =" faCopy" /><span v-localize >Copy Tool ID</span >
100- </BDropdownItem >
101-
102- <BDropdownItem v-if =" showDownload" @click =" onDownload" >
103- <FontAwesomeIcon :icon =" faDownload" /><span v-localize >Download</span >
104- </BDropdownItem >
105-
106- <ToolSourceMenuItem :tool-id =" id" :tool-uuid =" toolUuid || undefined" />
107-
108- <BDropdownItem v-if =" showLink" @click =" onLink" >
109- <FontAwesomeIcon :icon =" faExternalLinkAlt" /><span v-localize >See in Tool Shed</span >
110- </BDropdownItem >
111-
112- <ToolTourGeneratorItem v-if =" props.allowGeneratedTours" :tool-id =" props.id" :tool-version =" props.version" />
113-
114- <BDropdownItem v-for =" w of webhookDetails" :key =" w.title" @click =" w.onclick" >
115- <span :class =" w.icon" />{{ localize(w.title) }}
116- </BDropdownItem >
117- </BDropdown >
82+ <div >
83+ <BDropdown
84+ no-caret
85+ right
86+ role =" button"
87+ title =" Options"
88+ variant =" link"
89+ aria-label =" View all Options"
90+ class =" tool-dropdown"
91+ toggle-class =" p-0"
92+ size =" sm" >
93+ <template v-slot :button-content >
94+ <GButton class =" d-block" color =" blue" transparent size =" small" tooltip title =" Options" >
95+ <FontAwesomeIcon :icon =" faCaretDown" />
96+ </GButton >
97+ </template >
98+
99+ <BDropdownItem @click =" onCopyLink" >
100+ <FontAwesomeIcon :icon =" faLink" /><span v-localize >Copy Link</span >
101+ </BDropdownItem >
102+
103+ <BDropdownItem @click =" onCopyId" >
104+ <FontAwesomeIcon :icon =" faCopy" /><span v-localize >Copy Tool ID</span >
105+ </BDropdownItem >
106+
107+ <BDropdownItem v-if =" showDownload" @click =" onDownload" >
108+ <FontAwesomeIcon :icon =" faDownload" /><span v-localize >Download</span >
109+ </BDropdownItem >
110+
111+ <BDropdownItem v-if =" config.enable_tool_source_display || isAdmin" @click =" showToolSource = true" >
112+ <FontAwesomeIcon :icon =" faEye" /><span v-localize >View Tool source</span >
113+ </BDropdownItem >
114+
115+ <BDropdownItem v-if =" showLink" @click =" onLink" >
116+ <FontAwesomeIcon :icon =" faExternalLinkAlt" /><span v-localize >See in Tool Shed</span >
117+ </BDropdownItem >
118+
119+ <ToolTourGeneratorItem v-if =" props.allowGeneratedTours" :tool-id =" props.id" :tool-version =" props.version" />
120+
121+ <BDropdownItem v-for =" w of webhookDetails" :key =" w.title" @click =" w.onclick" >
122+ <span :class =" w.icon" />{{ localize(w.title) }}
123+ </BDropdownItem >
124+ </BDropdown >
125+
126+ <GModal :show.sync =" showToolSource" fullscreen :title =" `Tool Source for ${id}`" >
127+ <ToolSource v-if =" showToolSource" :tool-id =" id" :tool-uuid =" toolUuid || undefined" />
128+ </GModal >
129+ </div >
118130</template >
0 commit comments