mirror of
https://github.com/louislam/dockge.git
synced 2026-05-21 14:02:17 +00:00
Merge branch 'master' into s
This commit is contained in:
@@ -9,7 +9,7 @@
|
||||
<div v-if="!isEditMode">
|
||||
<span class="badge me-1" :class="bgStyle">{{ status }}</span>
|
||||
|
||||
<a v-for="port in service.ports" :key="port" :href="parsePort(port).url" target="_blank">
|
||||
<a v-for="port in envsubstService.ports" :key="port" :href="parsePort(port).url" target="_blank">
|
||||
<span class="badge me-1 bg-secondary">{{ parsePort(port).display }}</span>
|
||||
</a>
|
||||
</div>
|
||||
@@ -213,16 +213,29 @@ export default defineComponent({
|
||||
jsonObject() {
|
||||
return this.$parent.$parent.jsonConfig;
|
||||
},
|
||||
|
||||
envsubstJSONConfig() {
|
||||
return this.$parent.$parent.envsubstJSONConfig;
|
||||
},
|
||||
|
||||
envsubstService() {
|
||||
if (!this.envsubstJSONConfig.services[this.name]) {
|
||||
return {};
|
||||
}
|
||||
return this.envsubstJSONConfig.services[this.name];
|
||||
},
|
||||
|
||||
imageName() {
|
||||
if (this.service.image) {
|
||||
return this.service.image.split(":")[0];
|
||||
if (this.envsubstService.image) {
|
||||
return this.envsubstService.image.split(":")[0];
|
||||
} else {
|
||||
return "";
|
||||
}
|
||||
},
|
||||
|
||||
imageTag() {
|
||||
if (this.service.image) {
|
||||
let tag = this.service.image.split(":")[1];
|
||||
if (this.envsubstService.image) {
|
||||
let tag = this.envsubstService.image.split(":")[1];
|
||||
|
||||
if (tag) {
|
||||
return tag;
|
||||
|
||||
@@ -98,5 +98,6 @@
|
||||
"reconnecting...": "Reconnecting…",
|
||||
"connecting...": "Connecting to the socket server…",
|
||||
"url": "URL | URLs",
|
||||
"extra": "Extra"
|
||||
"extra": "Extra",
|
||||
"newUpdate": "New Update"
|
||||
}
|
||||
|
||||
@@ -16,8 +16,8 @@
|
||||
<span class="fs-4 title">Dockge</span>
|
||||
</router-link>
|
||||
|
||||
<a v-if="hasNewVersion" target="_blank" href="https://github.com/louislam/dockge/releases" class="btn btn-info me-3">
|
||||
<font-awesome-icon icon="arrow-alt-circle-up" /> {{ $t("New Update") }}
|
||||
<a v-if="hasNewVersion" target="_blank" href="https://github.com/louislam/dockge/releases" class="btn btn-warning me-3">
|
||||
<font-awesome-icon icon="arrow-alt-circle-up" /> {{ $t("newUpdate") }}
|
||||
</a>
|
||||
|
||||
<ul class="nav nav-pills">
|
||||
|
||||
@@ -231,7 +231,7 @@ import { FontAwesomeIcon } from "@fortawesome/vue-fontawesome";
|
||||
import {
|
||||
COMBINED_TERMINAL_COLS,
|
||||
COMBINED_TERMINAL_ROWS,
|
||||
copyYAMLComments,
|
||||
copyYAMLComments, envsubstYAML,
|
||||
getCombinedTerminalName,
|
||||
getComposeTerminalName,
|
||||
PROGRESS_TERMINAL_ROWS,
|
||||
@@ -239,6 +239,7 @@ import {
|
||||
} from "../../../backend/util-common";
|
||||
import { BModal } from "bootstrap-vue-next";
|
||||
import NetworkInput from "../components/NetworkInput.vue";
|
||||
import dotenv from "dotenv";
|
||||
|
||||
const template = `version: "3.8"
|
||||
services:
|
||||
@@ -277,6 +278,7 @@ export default {
|
||||
return {
|
||||
editorFocus: false,
|
||||
jsonConfig: {},
|
||||
envsubstJSONConfig: {},
|
||||
yamlError: "",
|
||||
processing: true,
|
||||
showProgressTerminal: false,
|
||||
@@ -372,6 +374,17 @@ export default {
|
||||
},
|
||||
deep: true,
|
||||
},
|
||||
|
||||
"stack.composeENV": {
|
||||
handler() {
|
||||
if (this.editorFocus) {
|
||||
console.debug("env code changed");
|
||||
this.yamlCodeChange();
|
||||
}
|
||||
},
|
||||
deep: true,
|
||||
},
|
||||
|
||||
jsonConfig: {
|
||||
handler() {
|
||||
if (!this.editorFocus) {
|
||||
@@ -645,28 +658,41 @@ export default {
|
||||
return highlight(code, languages.docker_env);
|
||||
},
|
||||
|
||||
yamlToJSON(yaml) {
|
||||
let doc = parseDocument(yaml);
|
||||
if (doc.errors.length > 0) {
|
||||
throw doc.errors[0];
|
||||
}
|
||||
|
||||
const config = doc.toJS() ?? {};
|
||||
|
||||
// Check data types
|
||||
// "services" must be an object
|
||||
if (!config.services) {
|
||||
config.services = {};
|
||||
}
|
||||
|
||||
if (Array.isArray(config.services) || typeof config.services !== "object") {
|
||||
throw new Error("Services must be an object");
|
||||
}
|
||||
|
||||
return {
|
||||
config,
|
||||
doc,
|
||||
};
|
||||
},
|
||||
|
||||
yamlCodeChange() {
|
||||
try {
|
||||
let doc = parseDocument(this.stack.composeYAML);
|
||||
if (doc.errors.length > 0) {
|
||||
throw doc.errors[0];
|
||||
}
|
||||
|
||||
const config = doc.toJS() ?? {};
|
||||
|
||||
// Check data types
|
||||
// "services" must be an object
|
||||
if (!config.services) {
|
||||
config.services = {};
|
||||
}
|
||||
|
||||
if (Array.isArray(config.services) || typeof config.services !== "object") {
|
||||
throw new Error("Services must be an object");
|
||||
}
|
||||
let { config, doc } = this.yamlToJSON(this.stack.composeYAML);
|
||||
|
||||
this.yamlDoc = doc;
|
||||
this.jsonConfig = config;
|
||||
|
||||
let env = dotenv.parse(this.stack.composeENV);
|
||||
let envYAML = envsubstYAML(this.stack.composeYAML, env);
|
||||
this.envsubstJSONConfig = this.yamlToJSON(envYAML).config;
|
||||
|
||||
clearTimeout(yamlErrorTimeout);
|
||||
this.yamlError = "";
|
||||
} catch (e) {
|
||||
|
||||
Reference in New Issue
Block a user