Global contants for default keys

This commit is contained in:
Alicia Sykes 2021-04-16 15:36:30 +01:00
parent c5f630849f
commit 56f2ba4155
8 changed files with 60 additions and 25 deletions

View File

@ -19,13 +19,14 @@ export default {
Footer, Footer,
}, },
data: () => ({ data: () => ({
pageInfo: conf.pageInfo, pageInfo: conf.pageInfo || Defaults.pageInfo,
appConfig: conf.appConfig || Defaults.appConfig,
showFooter: Defaults.visibleComponents.footer, showFooter: Defaults.visibleComponents.footer,
}), }),
methods: { methods: {
/* Returns either page info from the config, or default values */ /* Returns either page info from the config, or default values */
getPageInfo(pageInfo) { getPageInfo(pageInfo) {
const defaults = { title: 'Demo', description: '' }; const defaults = Defaults.pageInfo;
if (pageInfo) { if (pageInfo) {
return { return {
title: pageInfo.title || defaults.title, title: pageInfo.title || defaults.title,

View File

@ -22,6 +22,9 @@
</template> </template>
<script> <script>
import { localStorageKeys } from '@/utils/defaults';
export default { export default {
name: 'CollapsableContainer', name: 'CollapsableContainer',
props: { props: {
@ -52,14 +55,17 @@ export default {
}, },
/* If not already done, then add object structure to local storage */ /* If not already done, then add object structure to local storage */
initialiseStorage() { initialiseStorage() {
const initStorage = () => localStorage.setItem('collapseState', JSON.stringify({})); /* Initialize function will create and set a blank object to storage */
if (!localStorage.collapseState) initStorage(); // If not yet set, then init localstorage const initStorage = () => localStorage.setItem(
localStorageKeys.COLLAPSE_STATE, JSON.stringify({}),
);
if (!localStorage[localStorageKeys.COLLAPSE_STATE]) initStorage(); // Initialise if not set
try { // Check storage is valid JSON, and has not been corrupted try { // Check storage is valid JSON, and has not been corrupted
JSON.parse(localStorage.collapseState); JSON.parse(localStorage[localStorageKeys.COLLAPSE_STATE]);
} catch { } catch {
initStorage(); initStorage();
} }
return JSON.parse(localStorage.collapseState); return JSON.parse(localStorage[localStorageKeys.COLLAPSE_STATE]);
}, },
getCollapseState() { getCollapseState() {
const collapseStateObject = this.initialiseStorage(); const collapseStateObject = this.initialiseStorage();
@ -71,11 +77,11 @@ export default {
}, },
setCollapseState(id, newState) { setCollapseState(id, newState) {
// Get the current localstorage collapse state object // Get the current localstorage collapse state object
const collapseState = JSON.parse(localStorage.collapseState); const collapseState = JSON.parse(localStorage[localStorageKeys.COLLAPSE_STATE]);
// Add the new state to it // Add the new state to it
collapseState[id] = newState; collapseState[id] = newState;
// Stringify, and set the new object into local storage // Stringify, and set the new object into local storage
localStorage.setItem('collapseState', JSON.stringify(collapseState)); localStorage.setItem(localStorageKeys.COLLAPSE_STATE, JSON.stringify(collapseState));
}, },
collapseChanged(whatChanged) { collapseChanged(whatChanged) {
this.initialiseStorage(); this.initialiseStorage();

View File

@ -8,7 +8,7 @@
<script> <script>
import PageTitle from '@/components/PageStrcture/PageTitle.vue'; import PageTitle from '@/components/PageStrcture/PageTitle.vue';
import Nav from '@/components/PageStrcture/Nav.vue'; import Nav from '@/components/PageStrcture/Nav.vue';
import Defaults from '@/utils/defaults'; import { visibleComponents } from '@/utils/defaults';
export default { export default {
name: 'Header', name: 'Header',
@ -21,8 +21,9 @@ export default {
}, },
data() { data() {
return { return {
titleVisible: Defaults.visibleComponents.pageTitle, hiddenComponents: this.pageInfo.hiddenComponents || {},
navVisible: Defaults.visibleComponents.navigation, titleVisible: visibleComponents.pageTitle,
navVisible: visibleComponents.navigation,
}; };
}, },
}; };

View File

@ -13,6 +13,9 @@
</template> </template>
<script> <script>
import { localStorageKeys } from '@/utils/defaults';
export default { export default {
name: 'KeyboardShortcutInfo', name: 'KeyboardShortcutInfo',
data() { data() {
@ -27,7 +30,7 @@ export default {
* Note the !! just converts 'false' to false, as strings resolve to true * Note the !! just converts 'false' to false, as strings resolve to true
*/ */
shouldHideWelcomeMessage() { shouldHideWelcomeMessage() {
return !!localStorage.hideWelcomeHelpers; return !!localStorage[localStorageKeys.HIDE_WELCOME_BANNER];
}, },
/** /**
* Update session storage, so that it won't be shown again * Update session storage, so that it won't be shown again
@ -35,7 +38,7 @@ export default {
*/ */
hideWelcomeHelper() { hideWelcomeHelper() {
this.shouldHide = true; this.shouldHide = true;
localStorage.setItem('hideWelcomeHelpers', true); localStorage.setItem(localStorageKeys.HIDE_WELCOME_BANNER, true);
window.removeEventListener('keyup'); window.removeEventListener('keyup');
}, },
}, },

View File

@ -13,7 +13,7 @@
<script> <script>
import ThemeHelper from '@/utils/ThemeHelper'; import ThemeHelper from '@/utils/ThemeHelper';
import Defaults from '@/utils/defaults'; import Defaults, { localStorageKeys } from '@/utils/defaults';
export default { export default {
name: 'ThemeSelector', name: 'ThemeSelector',
@ -47,7 +47,7 @@ export default {
if (this.isThemeLocal(this.selectedTheme)) { if (this.isThemeLocal(this.selectedTheme)) {
this.updateTheme(this.selectedTheme); this.updateTheme(this.selectedTheme);
// If it's an external stylesheet, then wait for promise to resolve // If it's an external stylesheet, then wait for promise to resolve
} else if (this.selectedTheme !== 'Default') { } else if (this.selectedTheme !== Defaults.theme) {
Promise.all(added).then(() => { Promise.all(added).then(() => {
this.updateTheme(this.selectedTheme); this.updateTheme(this.selectedTheme);
}); });
@ -61,7 +61,7 @@ export default {
}, },
/* Get default theme */ /* Get default theme */
getInitialTheme() { getInitialTheme() {
return localStorage.theme || this.confTheme || Defaults.defaultTheme; return localStorage[localStorageKeys.THEME] || this.confTheme || Defaults.theme;
}, },
isThemeLocal(themeToCheck) { isThemeLocal(themeToCheck) {
return this.builtInThemes.includes(themeToCheck); return this.builtInThemes.includes(themeToCheck);
@ -77,7 +77,7 @@ export default {
} else { } else {
this.themeHelper.theme = newTheme; this.themeHelper.theme = newTheme;
} }
localStorage.setItem('theme', newTheme); localStorage.setItem(localStorageKeys.THEME, newTheme);
}, },
resetToDefault() { resetToDefault() {
document.getElementsByTagName('html')[0].removeAttribute('data-theme'); document.getElementsByTagName('html')[0].removeAttribute('data-theme');

View File

@ -2,6 +2,16 @@
pageInfo: pageInfo:
title: Hello World title: Hello World
description: 'This is a demo' description: 'This is a demo'
appConfig:
theme: 'default'
externalStyleSheet: 'https://bootswatch.com/4/solar/bootstrap.min.css'
cssThemes: ['hello', 'world']
enableFontAwesome: true
fontAwesomeKey: ''
hiddenComponents:
- footer: true
navigation: false
pageTitle: false
sections: sections:
- name: Firewall - name: Firewall
items: items:

View File

@ -1,7 +1,13 @@
module.exports = { module.exports = {
pageInfo: {
title: 'Dashy',
description: '',
},
appConfig: {},
iconSize: 'medium', iconSize: 'medium',
layout: 'auto', layout: 'auto',
defaultTheme: 'default', theme: 'default',
fontAwesomeKey: 'def7c3ce4c',
builtInThemes: [ builtInThemes: [
'nord', 'nord',
'nord-frost', 'nord-frost',
@ -26,4 +32,11 @@ module.exports = {
settings: true, settings: true,
footer: true, footer: true,
}, },
localStorageKeys: {
HIDE_WELCOME_BANNER: 'hideWelcomeHelpers',
LAYOUT_ORIENTATION: 'layoutOrientation',
COLLAPSE_STATE: 'collapseState',
ICON_SIZE: 'iconSize',
THEME: 'theme',
},
}; };

View File

@ -33,7 +33,7 @@
import SettingsContainer from '@/components/Settings/SettingsContainer.vue'; import SettingsContainer from '@/components/Settings/SettingsContainer.vue';
import ItemGroup from '@/components/LinkItems/ItemGroup.vue'; import ItemGroup from '@/components/LinkItems/ItemGroup.vue';
import Defaults from '@/utils/defaults'; import Defaults, { localStorageKeys } from '@/utils/defaults';
export default { export default {
name: 'home', name: 'home',
@ -52,16 +52,16 @@ export default {
}), }),
computed: { computed: {
layoutOrientation: { layoutOrientation: {
get: () => localStorage.layoutOrientation || Defaults.layout, get: () => localStorage[localStorageKeys.LAYOUT_ORIENTATION] || Defaults.layout,
set: function setLayout(layout) { set: function setLayout(layout) {
localStorage.setItem('layoutOrientation', layout); localStorage.setItem(localStorageKeys.LAYOUT_ORIENTATION, layout);
this.layout = layout; this.layout = layout;
}, },
}, },
iconSize: { iconSize: {
get: () => localStorage.iconSize || Defaults.iconSize, get: () => localStorage[localStorageKeys.ICON_SIZE] || Defaults.iconSize,
set: function setIconSize(iconSize) { set: function setIconSize(iconSize) {
localStorage.setItem('iconSize', iconSize); localStorage.setItem(localStorageKeys.ICON_SIZE, iconSize);
this.itemSizeBound = iconSize; this.itemSizeBound = iconSize;
}, },
}, },
@ -140,9 +140,10 @@ export default {
}, },
/* Injects font-awesome's script tag, only if needed */ /* Injects font-awesome's script tag, only if needed */
initiateFontAwesome() { initiateFontAwesome() {
if (this.checkIfFontAwesomeNeeded()) { if (this.appConfig.enableFontAwesome || this.checkIfFontAwesomeNeeded()) {
const fontAwesomeScript = document.createElement('script'); const fontAwesomeScript = document.createElement('script');
fontAwesomeScript.setAttribute('src', 'https://kit.fontawesome.com/def7c3ce4c.js'); const faKey = this.appConfig.fontAwesomeKey || Defaults.fontAwesomeKey;
fontAwesomeScript.setAttribute('src', `https://kit.fontawesome.com/${faKey}.js`);
document.head.appendChild(fontAwesomeScript); document.head.appendChild(fontAwesomeScript);
} }
}, },