summaryrefslogtreecommitdiffstats
path: root/src/components/settings/General.vue
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/settings/General.vue')
-rw-r--r--src/components/settings/General.vue283
1 files changed, 283 insertions, 0 deletions
diff --git a/src/components/settings/General.vue b/src/components/settings/General.vue
new file mode 100644
index 0000000..487c3ba
--- /dev/null
+++ b/src/components/settings/General.vue
@@ -0,0 +1,283 @@
+<template>
+ <div>
+ <form class="my-4" autocomplete="off" @submit.prevent="saveGeneral">
+ <!-- Client side Timezone -->
+ <div class="mb-4">
+ <label for="timezone" class="form-label">
+ {{ $t("Display Timezone") }}
+ </label>
+ <select id="timezone" v-model="$root.userTimezone" class="form-select">
+ <option value="auto">
+ {{ $t("Auto") }}: {{ guessTimezone }}
+ </option>
+ <option
+ v-for="(timezone, index) in timezoneList"
+ :key="index"
+ :value="timezone.value"
+ >
+ {{ timezone.name }}
+ </option>
+ </select>
+ </div>
+
+ <!-- Server Timezone -->
+ <div class="mb-4">
+ <label for="timezone" class="form-label">
+ {{ $t("Server Timezone") }}
+ </label>
+ <select id="timezone" v-model="settings.serverTimezone" class="form-select">
+ <option value="UTC">UTC</option>
+ <option
+ v-for="(timezone, index) in timezoneList"
+ :key="index"
+ :value="timezone.value"
+ >
+ {{ timezone.name }}
+ </option>
+ </select>
+ </div>
+
+ <!-- Search Engine -->
+ <div class="mb-4">
+ <label class="form-label">
+ {{ $t("Search Engine Visibility") }}
+ </label>
+
+ <div class="form-check">
+ <input
+ id="searchEngineIndexYes"
+ v-model="settings.searchEngineIndex"
+ class="form-check-input"
+ type="radio"
+ name="searchEngineIndex"
+ :value="true"
+ required
+ />
+ <label class="form-check-label" for="searchEngineIndexYes">
+ {{ $t("Allow indexing") }}
+ </label>
+ </div>
+ <div class="form-check">
+ <input
+ id="searchEngineIndexNo"
+ v-model="settings.searchEngineIndex"
+ class="form-check-input"
+ type="radio"
+ name="searchEngineIndex"
+ :value="false"
+ required
+ />
+ <label class="form-check-label" for="searchEngineIndexNo">
+ {{ $t("Discourage search engines from indexing site") }}
+ </label>
+ </div>
+ </div>
+
+ <!-- Entry Page -->
+ <div class="mb-4">
+ <label class="form-label">{{ $t("Entry Page") }}</label>
+
+ <div class="form-check">
+ <input
+ id="entryPageDashboard"
+ v-model="settings.entryPage"
+ class="form-check-input"
+ type="radio"
+ name="entryPage"
+ value="dashboard"
+ required
+ />
+ <label class="form-check-label" for="entryPageDashboard">
+ {{ $t("Dashboard") }}
+ </label>
+ </div>
+
+ <div v-for="statusPage in $root.statusPageList" :key="statusPage.id" class="form-check">
+ <input
+ :id="'status-page-' + statusPage.id"
+ v-model="settings.entryPage"
+ class="form-check-input"
+ type="radio"
+ name="entryPage"
+ :value="'statusPage-' + statusPage.slug"
+ required
+ />
+ <label class="form-check-label" :for="'status-page-' + statusPage.id">
+ {{ $t("Status Page") }} - {{ statusPage.title }}
+ </label>
+ </div>
+ </div>
+
+ <!-- Primary Base URL -->
+ <div class="mb-4">
+ <label class="form-label" for="primaryBaseURL">
+ {{ $t("Primary Base URL") }}
+ </label>
+
+ <div class="input-group mb-3">
+ <input
+ id="primaryBaseURL"
+ v-model="settings.primaryBaseURL"
+ class="form-control"
+ name="primaryBaseURL"
+ placeholder="https://"
+ pattern="https?://.+"
+ autocomplete="new-password"
+ />
+ <button class="btn btn-outline-primary" type="button" @click="autoGetPrimaryBaseURL">
+ {{ $t("Auto Get") }}
+ </button>
+ </div>
+
+ <div class="form-text"></div>
+ </div>
+
+ <!-- Steam API Key -->
+ <div class="mb-4">
+ <label class="form-label" for="steamAPIKey">
+ {{ $t("Steam API Key") }}
+ </label>
+ <HiddenInput
+ id="steamAPIKey"
+ v-model="settings.steamAPIKey"
+ autocomplete="new-password"
+ />
+ <div class="form-text">
+ {{ $t("steamApiKeyDescription") }}
+ <a href="https://steamcommunity.com/dev" target="_blank">
+ https://steamcommunity.com/dev
+ </a>
+ </div>
+ </div>
+
+ <!-- DNS Cache (nscd) -->
+ <div v-if="$root.info.isContainer" class="mb-4">
+ <label class="form-label">
+ {{ $t("enableNSCD") }}
+ </label>
+
+ <div class="form-check">
+ <input
+ id="nscdEnable"
+ v-model="settings.nscd"
+ class="form-check-input"
+ type="radio"
+ name="nscd"
+ :value="true"
+ required
+ />
+ <label class="form-check-label" for="nscdEnable">
+ {{ $t("Enable") }}
+ </label>
+ </div>
+
+ <div class="form-check">
+ <input
+ id="nscdDisable"
+ v-model="settings.nscd"
+ class="form-check-input"
+ type="radio"
+ name="nscd"
+ :value="false"
+ required
+ />
+ <label class="form-check-label" for="nscdDisable">
+ {{ $t("Disable") }}
+ </label>
+ </div>
+ </div>
+
+ <!-- Chrome Executable -->
+ <div class="mb-4">
+ <label class="form-label" for="primaryBaseURL">
+ {{ $t("chromeExecutable") }}
+ </label>
+
+ <div class="input-group mb-3">
+ <input
+ id="primaryBaseURL"
+ v-model="settings.chromeExecutable"
+ class="form-control"
+ name="primaryBaseURL"
+ :placeholder="$t('chromeExecutableAutoDetect')"
+ />
+ <button class="btn btn-outline-primary" type="button" @click="testChrome">
+ {{ $t("Test") }}
+ </button>
+ </div>
+
+ <div class="form-text">
+ {{ $t("chromeExecutableDescription") }}
+ </div>
+ </div>
+
+ <!-- Save Button -->
+ <div>
+ <button class="btn btn-primary" type="submit">
+ {{ $t("Save") }}
+ </button>
+ </div>
+ </form>
+ </div>
+</template>
+
+<script>
+import HiddenInput from "../../components/HiddenInput.vue";
+import dayjs from "dayjs";
+import { timezoneList } from "../../util-frontend";
+
+export default {
+ components: {
+ HiddenInput,
+ },
+
+ data() {
+ return {
+ timezoneList: timezoneList(),
+ };
+ },
+
+ computed: {
+ settings() {
+ return this.$parent.$parent.$parent.settings;
+ },
+ saveSettings() {
+ return this.$parent.$parent.$parent.saveSettings;
+ },
+ settingsLoaded() {
+ return this.$parent.$parent.$parent.settingsLoaded;
+ },
+ guessTimezone() {
+ return dayjs.tz.guess();
+ }
+ },
+
+ methods: {
+ /**
+ * Save the settings
+ * @returns {void}
+ */
+ saveGeneral() {
+ localStorage.timezone = this.$root.userTimezone;
+ this.saveSettings();
+ },
+ /**
+ * Get the base URL of the application
+ * @returns {void}
+ */
+ autoGetPrimaryBaseURL() {
+ this.settings.primaryBaseURL = location.protocol + "//" + location.host;
+ },
+ /**
+ * Test the chrome executable
+ * @returns {void}
+ */
+ testChrome() {
+ this.$root.getSocket().emit("testChrome", this.settings.chromeExecutable, (res) => {
+ this.$root.toastRes(res);
+ });
+ },
+ },
+};
+</script>
+