mirror of
https://github.com/harvester/harvester-ui-extension.git
synced 2025-12-13 21:21:44 +00:00
90 lines
1.7 KiB
Vue
90 lines
1.7 KiB
Vue
<script>
|
|
export default {
|
|
name: 'NovncConsoleItem',
|
|
|
|
props: {
|
|
items: {
|
|
type: Object,
|
|
required: true,
|
|
default: () => {
|
|
return {};
|
|
}
|
|
},
|
|
|
|
path: {
|
|
type: Array,
|
|
required: true,
|
|
default: () => {
|
|
return [];
|
|
}
|
|
},
|
|
|
|
pos: {
|
|
type: Number,
|
|
required: true,
|
|
default: 0,
|
|
}
|
|
},
|
|
|
|
methods: {
|
|
keysDown(key, pos) {
|
|
this.addKeys({ key, pos });
|
|
this.$emit('send-keys');
|
|
},
|
|
|
|
addKeys({ key, pos }) {
|
|
this.$emit('update', { key, pos });
|
|
},
|
|
|
|
sendKeys() {
|
|
this.$emit('send-keys');
|
|
},
|
|
|
|
getOpenStatus(key, pos) {
|
|
return this.path[pos] === key;
|
|
}
|
|
}
|
|
};
|
|
</script>
|
|
|
|
<template>
|
|
<ul class="list-unstyled dropdown combination-keys__container">
|
|
<li v-for="(item, key) in items" :key="key">
|
|
<v-popover
|
|
v-if="!!item.keys"
|
|
placement="right-start"
|
|
trigger="click"
|
|
:container="false"
|
|
>
|
|
<span :class="{ open: getOpenStatus(key, pos) }" class="p-10 hand" @click="addKeys({ key, pos })">{{ item.label }}</span>
|
|
|
|
<template v-slot:popover>
|
|
<novnc-console-item :items="item.keys" :path="path" :pos="pos+1" @update="addKeys" @send-keys="sendKeys" />
|
|
</template>
|
|
</v-popover>
|
|
|
|
<span v-else class="p-10 hand" @click="keysDown(key, pos)">{{ item.label }}</span>
|
|
</li>
|
|
</ul>
|
|
</template>
|
|
|
|
<style lang="scss" scoped>
|
|
.combination-keys__container {
|
|
max-width: 60px;
|
|
|
|
DIV, SPAN {
|
|
display: block;
|
|
text-align: center;
|
|
}
|
|
|
|
SPAN {
|
|
border-radius: 3px;
|
|
|
|
&:hover, &.open {
|
|
color: var(--primary-hover-text);
|
|
background: var(--primary-hover-bg);
|
|
}
|
|
}
|
|
}
|
|
</style>
|