diff --git a/src/assets/interface-icons/application-about.svg b/src/assets/interface-icons/application-about.svg
new file mode 100644
index 00000000..09728dfa
--- /dev/null
+++ b/src/assets/interface-icons/application-about.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/components/Configuration/AppInfoModal.vue b/src/components/Configuration/AppInfoModal.vue
new file mode 100644
index 00000000..ab136e0b
--- /dev/null
+++ b/src/components/Configuration/AppInfoModal.vue
@@ -0,0 +1,191 @@
+
+
+
+
+ Dashy V{{ appVersion }}
+
+
Service Worker Status
+
{{ serviceWorkerInfo }}
+
+
Config Validation Status
+
{{getIsConfigValidStatus()}}
+
+
Help & Support
+
+
Please include the following info in your bug report:
+
{{ showInfo ? 'Hide' : 'Show'}} system info
+
+
System Info
+ Dashy Version: V {{appVersion}}
+ Browser: {{systemInfo.browser}}
+ Is Mobile? {{systemInfo.isMobile ? 'Yes' : 'No'}}
+ OS: {{systemInfo.os}}
+
+
About
+
+ Documentation and Source Code available on
+ GitHub
+
+
License
+
Licensed under MIT X11. Copyright © 2021
+
+
+
+
+
+
+
diff --git a/src/components/Configuration/ConfigContainer.vue b/src/components/Configuration/ConfigContainer.vue
index c6988483..634e9acf 100644
--- a/src/components/Configuration/ConfigContainer.vue
+++ b/src/components/Configuration/ConfigContainer.vue
@@ -29,9 +29,14 @@
Reset Local Settings
+
You are using a very small screen, and some screens in this menu may not be optimal
+ Dashy version {{ appVersion }}
It is recommend to make a backup of your conf.yml file, before making any changes.
@@ -79,6 +84,7 @@ import EditIcon from '@/assets/interface-icons/config-edit-json.svg';
import CustomCssIcon from '@/assets/interface-icons/config-custom-css.svg';
import CloudIcon from '@/assets/interface-icons/cloud-backup-restore.svg';
import RebuildIcon from '@/assets/interface-icons/application-rebuild.svg';
+import IconAbout from '@/assets/interface-icons/application-about.svg';
export default {
name: 'ConfigContainer',
@@ -86,6 +92,7 @@ export default {
return {
jsonParser: JsonToYaml,
backupId: localStorage[localStorageKeys.BACKUP_ID] || '',
+ appVersion: process.env.VUE_APP_VERSION,
};
},
props: {
@@ -109,6 +116,7 @@ export default {
CloudIcon,
CustomCssIcon,
RebuildIcon,
+ IconAbout,
},
methods: {
/* Seletcs the edit tab of the tab view */
@@ -127,6 +135,9 @@ export default {
openRebuildAppModal() {
this.$modal.show(modalNames.REBUILD_APP);
},
+ openAboutModal() {
+ this.$modal.show(modalNames.ABOUT_APP);
+ },
openCloudSync() {
this.$modal.show(modalNames.CLOUD_BACKUP);
},
@@ -210,6 +221,12 @@ a.config-button, button.config-button {
}
}
+p.app-version {
+ margin: 0.5rem auto;
+ font-size: 1rem;
+ color: var(--transparent-white-50);
+}
+
div.code-container {
background: var(--config-code-background);
#conf-yaml span {
@@ -275,7 +292,7 @@ a.hyperlink-wrapper {
background: var(--config-settings-background);
height: calc(100% - 2rem);
h2 {
- margin: 1rem auto;
+ margin: 0 auto 1rem auto;
color: var(--config-settings-color);
}
}
diff --git a/src/components/Settings/AppButtons.vue b/src/components/Settings/AppButtons.vue
new file mode 100644
index 00000000..8425fefc
--- /dev/null
+++ b/src/components/Settings/AppButtons.vue
@@ -0,0 +1,62 @@
+
+
+
+
+
+
+
diff --git a/src/components/Settings/SettingsContainer.vue b/src/components/Settings/SettingsContainer.vue
index 2067716a..eec5583a 100644
--- a/src/components/Settings/SettingsContainer.vue
+++ b/src/components/Settings/SettingsContainer.vue
@@ -13,12 +13,7 @@
-
+
+
@@ -39,9 +35,10 @@ import ConfigLauncher from '@/components/Settings/ConfigLauncher';
import ThemeSelector from '@/components/Settings/ThemeSelector';
import LayoutSelector from '@/components/Settings/LayoutSelector';
import ItemSizeSelector from '@/components/Settings/ItemSizeSelector';
+import AppButtons from '@/components/Settings/AppButtons';
import KeyboardShortcutInfo from '@/components/Settings/KeyboardShortcutInfo';
+import AppInfoModal from '@/components/Configuration/AppInfoModal';
import { logout as registerLogout } from '@/utils/Auth';
-import IconLogout from '@/assets/interface-icons/user-logout.svg';
import IconOpen from '@/assets/interface-icons/config-open-settings.svg';
import IconClose from '@/assets/interface-icons/config-close.svg';
@@ -62,8 +59,9 @@ export default {
ThemeSelector,
LayoutSelector,
ItemSizeSelector,
+ AppButtons,
KeyboardShortcutInfo,
- IconLogout,
+ AppInfoModal,
IconOpen,
IconClose,
},
diff --git a/src/main.js b/src/main.js
index eea75224..c4e7361c 100644
--- a/src/main.js
+++ b/src/main.js
@@ -10,7 +10,7 @@ import Toasted from 'vue-toasted'; // Toast component, used to show confirmation
import { toastedOptions } from './utils/defaults';
import Dashy from './App.vue';
import router from './router';
-import './registerServiceWorker';
+import registerServiceWorker from './registerServiceWorker';
Vue.use(VTooltip);
Vue.use(VModal);
@@ -20,6 +20,9 @@ Vue.component('v-select', VSelect);
Vue.config.productionTip = false;
+// Register Service Worker
+registerServiceWorker();
+
new Vue({
router,
render: (awesome) => awesome(Dashy),
diff --git a/src/styles/color-palette.scss b/src/styles/color-palette.scss
index 059ed77d..2acf6a25 100644
--- a/src/styles/color-palette.scss
+++ b/src/styles/color-palette.scss
@@ -69,7 +69,7 @@
--login-form-background: var(--background);
--login-form-background-secondary: var(--background-darker);
--about-page-color: var(--white);
- --about-page-background: #0b1021;
+ --about-page-background: var(--background);
--about-page-accent: var(--primary);
--side-bar-background: var(--background-darker);
--side-bar-background-lighter: var(--background);
diff --git a/src/styles/color-themes.scss b/src/styles/color-themes.scss
index 4a0bc6f3..28346eeb 100644
--- a/src/styles/color-themes.scss
+++ b/src/styles/color-themes.scss
@@ -87,6 +87,7 @@ html[data-theme='matrix'] {
--curve-factor: 0px;
--font-body: 'Cutive Mono', monospace;
--font-headings: 'VT323', monospace;
+ --about-page-background: var(--background);
.prism-editor-wrapper.my-editor {
border: 1px solid var(--primary);
}
@@ -179,6 +180,9 @@ html[data-theme='material-original'] {
--status-check-tooltip-background: #f2f2f2;
--status-check-tooltip-color: #01579b;
--login-form-background: #fff;
+ --about-page-accent: #000;
+ --about-page-color: var(--background-darker);
+ --about-page-background: var(--background);
}
html[data-theme='material-dark-original'] {
@@ -254,6 +258,7 @@ html[data-theme='colorful'] {
html[data-theme='minimal-light'], html[data-theme='minimal-dark'], html[data-theme='vaporware'] {
--font-body: 'PTMono-Regular', 'Courier New', monospace;
--font-headings: 'PTMono-Regular', 'Courier New', monospace;
+
label.lbl-toggle h3 {
font-size: 1.8rem;
}
@@ -289,6 +294,8 @@ html[data-theme='material'], html[data-theme='material-dark'] {
--font-headings: 'Francois One', serif;
--curve-factor: 4px;
--curve-factor-navbar: 8px;
+ --about-page-background: var(--background);
+ --about-page-color: var(--primary);
.collapsable {
margin: 0;
@@ -541,6 +548,8 @@ html[data-theme='minimal-light'] {
--status-check-tooltip-background: #f2f2f2;
--status-check-tooltip-color: #000;
--login-form-color: #101931;
+ --about-page-background: var(--background);
+ --about-page-color: var(--background-darker);
section.filter-container {
background: #fff;
@@ -572,6 +581,8 @@ html[data-theme='minimal-dark'] {
--curve-factor-navbar: 8px;
--item-group-heading-text-color: #fff;
--item-group-heading-text-color-hover: #ffffffbf;
+ --about-page-background: var(--background);
+ --about-page-color: var(--primary);
label.lbl-toggle h3 {
font-size: 1.8rem;
diff --git a/src/utils/ConfigValidator.js b/src/utils/ConfigValidator.js
index 41fd903b..5f9bfdb6 100644
--- a/src/utils/ConfigValidator.js
+++ b/src/utils/ConfigValidator.js
@@ -38,13 +38,19 @@ const bigError = () => {
return `\n${line}${msg}${line}\n`;
};
+const setIsValidVariable = (isValid) => {
+ process.env.VUE_APP_CONFIG_VALID = isValid;
+};
+
/* Start the validation */
const validate = (config) => {
console.log('\nChecking config file against schema...');
const valid = ajv.validate(schema, config);
if (valid) {
+ setIsValidVariable(true);
console.log(successMsg());
} else {
+ setIsValidVariable(false);
console.log(errorMsg(ajv.errors));
}
};
@@ -53,6 +59,7 @@ try {
const config = yaml.load(fs.readFileSync('./public/conf.yml', 'utf8'));
validate(config);
} catch (e) {
+ setIsValidVariable(false);
console.log(bigError());
console.log('Please ensure that your config file is present, '
+ 'has the correct access rights and is parsable. '
diff --git a/src/utils/defaults.js b/src/utils/defaults.js
index e8a105ab..370d8971 100644
--- a/src/utils/defaults.js
+++ b/src/utils/defaults.js
@@ -61,10 +61,14 @@ module.exports = {
cookieKeys: {
AUTH_TOKEN: 'authenticationToken',
},
+ sessionStorageKeys: {
+ SW_STATUS: 'serviceWorkerStatus',
+ },
modalNames: {
CONF_EDITOR: 'CONF_EDITOR',
CLOUD_BACKUP: 'CLOUD_BACKUP',
REBUILD_APP: 'REBUILD_APP',
+ ABOUT_APP: 'ABOUT_APP',
},
topLevelConfKeys: {
PAGE_INFO: 'pageInfo',