Follow upstream recommendation to have html templates below script in .vue files

This commit is contained in:
Johannes Zellner
2025-01-19 12:00:22 +01:00
parent 0280059c13
commit dfb3285e18
21 changed files with 1008 additions and 1021 deletions
+61 -61
View File
@@ -1,64 +1,3 @@
<template>
<Dialog ref="dialogHandle" @close="onClose()">
<div class="content" :class="{ 'step-detail': step === STEP.DETAILS, 'step-install': step === STEP.INSTALL }">
<div class="header">
<div class="summary">
<div class="title">{{ manifest.title }}</div>
<div class="lastUpdated">{{ $t('appstore.installDialog.lastUpdated', { date: prettyDate(app.creationDate) }) }}</div>
<div class="memoryRequirement">{{ $t('appstore.installDialog.memoryRequirement', { size: prettyFileSize(manifest.memoryLimit) }) }}</div>
<div class="author"><a :href="manifest.website" target="_blank">Website</a></div>
</div>
<img class="icon" :src="app.iconUrl" />
</div>
<Transition name="slide-left" mode="out-in">
<div v-if="step === STEP.DETAILS">
<Button @click="setStep(STEP.INSTALL)" icon="fa-solid fa-circle-down">Install {{ manifest.title }}</Button>
<div class="screenshots">
<img class="screenshot" v-for="image in manifest.mediaLinks" :key="image" :src="image"/>
</div>
<div class="description" v-html="description"></div>
</div>
<div v-else-if="step === STEP.INSTALL">
<form @submit.prevent="submit()" autocomplete="off">
<fieldset :disabled="busy">
<input style="display: none;" type="submit" :disabled="!formValid" />
<FormGroup :class="{ 'has-error': formError.location }">
<label for="location">{{ $t('appstore.installDialog.location') }}</label>
<div>
<TextInput id="location" ref="locationInput" v-model="location" />
<Dropdown v-model="domain" :options="domains" option-label="domain" />
</div>
</FormGroup>
<p class="text-small text-warning" v-show="domain.provider === 'noop' || domain.provider === 'manual'" v-html="$t('appstore.installDialog.manualWarning', { location: ((location ? location + '.' : '') + domain.domain) })"></p>
<FormGroup v-for="(port, key) in secondaryDomains" :key="key">
<label :for="'secondaryDomainInput' + key">{{ port.title }}</label>
<small>{{ port.description }}</small>
<div>
<TextInput :id="'secondaryDomainInput' + key" v-model="port.value" :placeholder="$t('appstore.installDialog.locationPlaceholder')"/>
<Dropdown v-model="port.domain" :options="domains" option-label="domain" option-key="domain" />
</div>
</FormGroup>
<FormGroup :class="{ 'has-error': formError.upstreamUri }" v-show="manifest.id === PROXY_APP_ID">
<label for="upstreamUri">Upstream URI</label>
<TextInput id="upstreamUri" v-model="upstreamUri" />
</FormGroup>
<PortBindings v-model:tcp-ports="tcpPorts" v-model:udp-ports="udpPorts" :error="formError"/>
<AccessControl v-model="accessRestriction" :manifest="manifest"/>
<Button style="margin-top: 15px" @click="submit" icon="fa-solid fa-circle-down" :disabled="!formValid" :loading="busy">Install {{ manifest.title }}</Button>
</fieldset>
</form>
</div>
</Transition>
</div>
</Dialog>
</template>
<script setup>
import { ref, computed, useTemplateRef, onMounted } from 'vue';
@@ -212,6 +151,67 @@ defineExpose({
</script>
<template>
<Dialog ref="dialogHandle" @close="onClose()">
<div class="content" :class="{ 'step-detail': step === STEP.DETAILS, 'step-install': step === STEP.INSTALL }">
<div class="header">
<div class="summary">
<div class="title">{{ manifest.title }}</div>
<div class="lastUpdated">{{ $t('appstore.installDialog.lastUpdated', { date: prettyDate(app.creationDate) }) }}</div>
<div class="memoryRequirement">{{ $t('appstore.installDialog.memoryRequirement', { size: prettyFileSize(manifest.memoryLimit) }) }}</div>
<div class="author"><a :href="manifest.website" target="_blank">Website</a></div>
</div>
<img class="icon" :src="app.iconUrl" />
</div>
<Transition name="slide-left" mode="out-in">
<div v-if="step === STEP.DETAILS">
<Button @click="setStep(STEP.INSTALL)" icon="fa-solid fa-circle-down">Install {{ manifest.title }}</Button>
<div class="screenshots">
<img class="screenshot" v-for="image in manifest.mediaLinks" :key="image" :src="image"/>
</div>
<div class="description" v-html="description"></div>
</div>
<div v-else-if="step === STEP.INSTALL">
<form @submit.prevent="submit()" autocomplete="off">
<fieldset :disabled="busy">
<input style="display: none;" type="submit" :disabled="!formValid" />
<FormGroup :class="{ 'has-error': formError.location }">
<label for="location">{{ $t('appstore.installDialog.location') }}</label>
<div>
<TextInput id="location" ref="locationInput" v-model="location" />
<Dropdown v-model="domain" :options="domains" option-label="domain" />
</div>
</FormGroup>
<p class="text-small text-warning" v-show="domain.provider === 'noop' || domain.provider === 'manual'" v-html="$t('appstore.installDialog.manualWarning', { location: ((location ? location + '.' : '') + domain.domain) })"></p>
<FormGroup v-for="(port, key) in secondaryDomains" :key="key">
<label :for="'secondaryDomainInput' + key">{{ port.title }}</label>
<small>{{ port.description }}</small>
<div>
<TextInput :id="'secondaryDomainInput' + key" v-model="port.value" :placeholder="$t('appstore.installDialog.locationPlaceholder')"/>
<Dropdown v-model="port.domain" :options="domains" option-label="domain" option-key="domain" />
</div>
</FormGroup>
<FormGroup :class="{ 'has-error': formError.upstreamUri }" v-show="manifest.id === PROXY_APP_ID">
<label for="upstreamUri">Upstream URI</label>
<TextInput id="upstreamUri" v-model="upstreamUri" />
</FormGroup>
<PortBindings v-model:tcp-ports="tcpPorts" v-model:udp-ports="udpPorts" :error="formError"/>
<AccessControl v-model="accessRestriction" :manifest="manifest"/>
<Button style="margin-top: 15px" @click="submit" icon="fa-solid fa-circle-down" :disabled="!formValid" :loading="busy">Install {{ manifest.title }}</Button>
</fieldset>
</form>
</div>
</Transition>
</div>
</Dialog>
</template>
<style scoped>
.content {