X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=src%2FApp.vue;h=17c32143b44cc93d4740f2cd6fdb547e00f2e0f4;hb=b24251110179b86e12d6823618777ef133738861;hp=8185da212c260f672ec5defd9957349a918c6d63;hpb=2301d8919c28eb888ea1eb968d03376b2219a27d;p=github%2Fbastienwirtz%2Fhomer.git diff --git a/src/App.vue b/src/App.vue index 8185da2..17c3214 100644 --- a/src/App.vue +++ b/src/App.vue @@ -49,7 +49,10 @@
- +
@@ -63,9 +66,9 @@
@@ -76,7 +79,7 @@ class="columns is-multiline layout-vertical" >
@@ -146,26 +149,34 @@ export default { }; }, created: async function () { - try { - const defaults = jsyaml.load(defaultConfig); - let config = await this.getConfig(); - - this.config = merge(defaults, config); - this.services = this.config.services; - document.title = `${this.config.title} | ${this.config.subtitle}`; - } catch (error) { - this.offline = true; - } + const defaults = jsyaml.load(defaultConfig); + let config = await this.getConfig(); + this.config = merge(defaults, config); + this.services = this.config.services; + document.title = `${this.config.title} | ${this.config.subtitle}`; }, methods: { - getConfig: function () { - return fetch("config.yml").then(function (response) { - if (response.status != 200) { - return; + getConfig: function (path = "config.yml") { + return fetch(path).then((response) => { + if (!response.ok) { + throw Error(response.statusText); } - return response.text().then(function (body) { - return jsyaml.load(body); - }); + + const that = this; + return response + .text() + .then((body) => { + return jsyaml.load(body); + }) + .then(function (config) { + if (config.externalConfig) { + return that.getConfig(config.externalConfig); + } + return config; + }) + .catch((error) => { + return this.handleErrors("⚠️ Error loading configuration", error); + }); }); }, matchesFilter: function (item) { @@ -207,6 +218,15 @@ export default { }, ]; }, + handleErrors: function (title, content) { + return { + message: { + title: title, + style: "is-danger", + content: content, + }, + }; + }, }, };