forked from platypush/platypush
[Extensions UI] Added Install
tab.
This commit is contained in:
parent
e40a74f11c
commit
2806e943c3
5 changed files with 142 additions and 26 deletions
|
@ -0,0 +1,49 @@
|
||||||
|
<template>
|
||||||
|
<button class="copy-button"
|
||||||
|
ref="copyButton"
|
||||||
|
title="Copy to clipboard"
|
||||||
|
@click="copy"
|
||||||
|
@input="copy">
|
||||||
|
<i class="fas fa-clipboard" />
|
||||||
|
</button>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import Utils from "@/Utils"
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: "CopyButton",
|
||||||
|
emits: ['input', 'click'],
|
||||||
|
mixins: [Utils],
|
||||||
|
props: {
|
||||||
|
text: {
|
||||||
|
type: String,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
methods: {
|
||||||
|
async copy(event) {
|
||||||
|
if (this.text?.length)
|
||||||
|
await this.copyToClipboard(this.text)
|
||||||
|
|
||||||
|
this.$emit(event.type, event)
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.copy-button {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
right: 0.5em;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0 !important;
|
||||||
|
background: none;
|
||||||
|
color: $code-dark-fg;
|
||||||
|
border: none;
|
||||||
|
padding: 0.5em;
|
||||||
|
font-size: 1.5em;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
</style>
|
|
@ -1,12 +1,6 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="config-container" ref="root">
|
<div class="config-container" ref="root">
|
||||||
<button class="copy-button"
|
<CopyButton :text="extension.config_snippet" />
|
||||||
ref="copyButton"
|
|
||||||
title="Copy to clipboard"
|
|
||||||
:data-clipboard-text="extension.config_snippet"
|
|
||||||
@click="copyToClipboard(extension.config_snippet)">
|
|
||||||
<i class="fas fa-clipboard" />
|
|
||||||
</button>
|
|
||||||
<pre><code class="config-snippet" v-html="highlightedConfigSnippet" /></pre>
|
<pre><code class="config-snippet" v-html="highlightedConfigSnippet" /></pre>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
@ -15,11 +9,15 @@
|
||||||
import 'highlight.js/lib/common'
|
import 'highlight.js/lib/common'
|
||||||
import 'highlight.js/styles/stackoverflow-dark.min.css'
|
import 'highlight.js/styles/stackoverflow-dark.min.css'
|
||||||
import hljs from "highlight.js"
|
import hljs from "highlight.js"
|
||||||
|
import CopyButton from "@/components/elements/CopyButton"
|
||||||
import Utils from "@/Utils";
|
import Utils from "@/Utils";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "Extension",
|
name: "Extension",
|
||||||
mixins: [Utils],
|
mixins: [Utils],
|
||||||
|
components: {
|
||||||
|
CopyButton,
|
||||||
|
},
|
||||||
props: {
|
props: {
|
||||||
extension: {
|
extension: {
|
||||||
type: Object,
|
type: Object,
|
||||||
|
@ -39,29 +37,12 @@ export default {
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
|
@import "common.scss";
|
||||||
|
|
||||||
.config-container {
|
.config-container {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
position: relative;
|
position: relative;
|
||||||
display: flex;
|
display: flex;
|
||||||
|
|
||||||
.copy-button {
|
|
||||||
position: absolute;
|
|
||||||
top: 0;
|
|
||||||
right: 0;
|
|
||||||
background: none;
|
|
||||||
color: $code-dark-fg;
|
|
||||||
border: none;
|
|
||||||
padding: 0.5em;
|
|
||||||
font-size: 1.5em;
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
|
|
||||||
pre {
|
|
||||||
width: 100%;
|
|
||||||
margin: 0;
|
|
||||||
background: $code-dark-bg;
|
|
||||||
padding: 0.5em;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
<div class="extension-body">
|
<div class="extension-body">
|
||||||
<Doc v-if="selectedTab === 'doc'" :extension="extension" />
|
<Doc v-if="selectedTab === 'doc'" :extension="extension" />
|
||||||
<Config v-else-if="selectedTab === 'config'" :extension="extension" />
|
<Config v-else-if="selectedTab === 'config'" :extension="extension" />
|
||||||
|
<Install v-else-if="selectedTab === 'install'" :extension="extension" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
@ -36,12 +37,14 @@ import Tab from "@/components/elements/Tab"
|
||||||
import Tabs from "@/components/elements/Tabs"
|
import Tabs from "@/components/elements/Tabs"
|
||||||
import Config from "./Config"
|
import Config from "./Config"
|
||||||
import Doc from "./Doc"
|
import Doc from "./Doc"
|
||||||
|
import Install from "./Install"
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "Extension",
|
name: "Extension",
|
||||||
components: {
|
components: {
|
||||||
Config,
|
Config,
|
||||||
Doc,
|
Doc,
|
||||||
|
Install,
|
||||||
Tab,
|
Tab,
|
||||||
Tabs,
|
Tabs,
|
||||||
},
|
},
|
||||||
|
|
|
@ -0,0 +1,75 @@
|
||||||
|
<template>
|
||||||
|
<div class="install-container">
|
||||||
|
<div class="install-cmd-container">
|
||||||
|
<CopyButton :text="installCmd" />
|
||||||
|
<pre><code v-html="highlightedInstallCmd" /></pre>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import 'highlight.js/lib/common'
|
||||||
|
import 'highlight.js/styles/stackoverflow-dark.min.css'
|
||||||
|
import hljs from "highlight.js"
|
||||||
|
import CopyButton from "@/components/elements/CopyButton"
|
||||||
|
import Utils from "@/Utils"
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: "Install",
|
||||||
|
mixins: [Utils],
|
||||||
|
components: {
|
||||||
|
CopyButton,
|
||||||
|
},
|
||||||
|
props: {
|
||||||
|
extension: {
|
||||||
|
type: Object,
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
computed: {
|
||||||
|
installCmd() {
|
||||||
|
const cmd = this.extension.deps.install_cmd.join('\n').trim()
|
||||||
|
return cmd?.length ? cmd : null
|
||||||
|
},
|
||||||
|
|
||||||
|
highlightedInstallCmd() {
|
||||||
|
return (
|
||||||
|
this.installCmd ?
|
||||||
|
hljs.highlight(
|
||||||
|
'bash',
|
||||||
|
this.extension.deps.install_cmd
|
||||||
|
.map((cmd) => `$ ${cmd}`)
|
||||||
|
.join('\n')
|
||||||
|
.trim()
|
||||||
|
).value :
|
||||||
|
'# No extra installation steps required'
|
||||||
|
)
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
@import "common.scss";
|
||||||
|
|
||||||
|
.install-container {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
|
||||||
|
.install-cmd-container {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
position: relative;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
flex-grow: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre {
|
||||||
|
height: 50%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
|
@ -0,0 +1,8 @@
|
||||||
|
pre {
|
||||||
|
width: 100%;
|
||||||
|
margin: 0;
|
||||||
|
background: $code-dark-bg;
|
||||||
|
color: $code-dark-fg;
|
||||||
|
padding: 0.5em;
|
||||||
|
overflow: auto;
|
||||||
|
}
|
Loading…
Reference in a new issue