mirror of
https://github.com/Lissy93/dashy.git
synced 2025-12-07 09:07:23 +01:00
205 lines
6.3 KiB
Vue
205 lines
6.3 KiB
Vue
<template>
|
|
<modal :name="modalName" :resizable="true" width="60%" height="60%" classes="dashy-modal">
|
|
<div class="about-modal">
|
|
<router-link to="/about" class="title"><h2>App Info</h2></router-link>
|
|
<!-- App Version -->
|
|
<h3>Version</h3>
|
|
<AppVersion class="app-version" />
|
|
<!-- Error Log -->
|
|
<h3>Error Log</h3>
|
|
<pre v-if="errorLog" class="logs"><code>{{ errorLog }}</code></pre>
|
|
<p v-else>No recent errors detected :)</p>
|
|
<!-- Service Worker Status -->
|
|
<h3>Service Worker Status</h3>
|
|
<pre class="logs"><code>{{ serviceWorkerInfo }}</code></pre>
|
|
<!-- Config Validation Status -->
|
|
<h3>Config Validation Status</h3>
|
|
<pre class="logs"><code>{{getIsConfigValidStatus()}}</code></pre>
|
|
<hr />
|
|
<!-- Help Links -->
|
|
<h3>Help & Support</h3>
|
|
<ul>
|
|
<li><a href="https://github.com/Lissy93/dashy/discussions">Get Support</a></li>
|
|
<li><a href="https://github.com/Lissy93/dashy/issues/new/choose">Report a Bug</a></li>
|
|
</ul>
|
|
<span class="small-note">Please include the following info in your bug report: </span>
|
|
<a class="info" @click="showInfo = !showInfo">{{ showInfo ? 'Hide' : 'Show'}} system info</a>
|
|
<div class="system-info" v-if="showInfo">
|
|
<h4>System Info</h4>
|
|
<code><b>Dashy Version:</b> V {{appVersion}}</code><br>
|
|
<code><b>Browser:</b> {{systemInfo.browser}}</code><br>
|
|
<code><b>Is Mobile?</b> {{systemInfo.isMobile ? 'Yes' : 'No'}}</code><br>
|
|
<code><b>OS:</b> {{systemInfo.os}}</code><br>
|
|
</div>
|
|
<!-- About App -->
|
|
<h3>About</h3>
|
|
<p class="about-text">
|
|
Source: <a href="https://github.com/lissy93/dashy">github.com/lissy93/dashy</a><br>
|
|
Documentation: <a href="https://dashy.to/docs">dashy.to/docs</a>
|
|
</p>
|
|
<!-- License -->
|
|
<h3>License</h3>
|
|
<p>Licensed under MIT X11. Copyright © 2021</p>
|
|
<br><br>
|
|
</div>
|
|
</modal>
|
|
</template>
|
|
|
|
<script>
|
|
import AppVersion from '@/components/Configuration/AppVersion';
|
|
import { modalNames, sessionStorageKeys } from '@/utils/defaults';
|
|
|
|
export default {
|
|
name: 'AppInfoModal',
|
|
components: {
|
|
AppVersion,
|
|
},
|
|
data() {
|
|
return {
|
|
modalName: modalNames.ABOUT_APP,
|
|
appVersion: process.env.VUE_APP_VERSION,
|
|
systemInfo: this.getSystemInfo(),
|
|
errorLog: this.getErrorLog(),
|
|
serviceWorkerInfo: 'Checking...',
|
|
showInfo: false,
|
|
};
|
|
},
|
|
mounted() {
|
|
setTimeout(() => {
|
|
this.serviceWorkerInfo = this.getSwStatus();
|
|
}, 100);
|
|
},
|
|
methods: {
|
|
getErrorLog() {
|
|
return sessionStorage.getItem(sessionStorageKeys.ERROR_LOG) || '';
|
|
},
|
|
getIsConfigValidStatus() {
|
|
const isValidVar = process.env.VUE_APP_CONFIG_VALID;
|
|
if (isValidVar === undefined) return 'Config validation status is missing';
|
|
return `Config is ${isValidVar ? 'Valid' : 'Invalid'}`;
|
|
},
|
|
getSwStatus() {
|
|
const sessionData = sessionStorage[sessionStorageKeys.SW_STATUS];
|
|
const swInfo = sessionData ? JSON.parse(sessionData) : {};
|
|
let swStatus = '';
|
|
if (swInfo.registered) swStatus += 'Service worker registered\n';
|
|
if (swInfo.ready) swStatus += 'Dashy is being served from service worker\n';
|
|
if (swInfo.cached) swStatus += 'Content has been cached for offline use\n';
|
|
if (swInfo.updateFound) swStatus += 'New content is downloading\n';
|
|
if (swInfo.updated) swStatus += 'New content is available; please refresh\n';
|
|
if (swInfo.offline) swStatus += 'No internet connection found. App is running in offline mode\n';
|
|
if (swInfo.error) swStatus += 'Error during service worker registration\n';
|
|
if (swInfo.devMode) swStatus += 'App running in dev mode, no need for service worker\n';
|
|
if (swStatus.length === 0) swStatus += 'No service worker info available';
|
|
return swStatus;
|
|
},
|
|
getSystemInfo() {
|
|
const { userAgent } = navigator;
|
|
|
|
// Find Operating System
|
|
let os = 'Unknown';
|
|
if (userAgent.indexOf('Win') !== -1) os = 'Windows';
|
|
else if (userAgent.indexOf('Mac') !== -1) os = 'MacOS';
|
|
else if (userAgent.indexOf('Android') !== -1) os = 'Android';
|
|
else if (userAgent.indexOf('iPhone') !== -1) os = 'iOS';
|
|
else if (userAgent.indexOf('Linux') !== -1) os = 'Linux';
|
|
else if (userAgent.indexOf('X11') !== -1) os = 'UNIX';
|
|
|
|
// Find Browser
|
|
let browser = 'Unknown';
|
|
if (userAgent.indexOf('Opera') !== -1) browser = 'Opera';
|
|
else if (userAgent.indexOf('Chrome') !== -1) browser = 'Chrome';
|
|
else if (userAgent.indexOf('Safari') !== -1) browser = 'Safari';
|
|
else if (userAgent.indexOf('Firefox') !== -1) browser = 'Firefox';
|
|
else if (userAgent.indexOf('MSIE') !== -1) browser = 'IE';
|
|
else browser = 'Unknown';
|
|
|
|
const isMobile = !!navigator.userAgent.match(/iphone|android|blackberry/ig) || false;
|
|
|
|
return {
|
|
os,
|
|
browser,
|
|
userAgent,
|
|
isMobile,
|
|
};
|
|
},
|
|
},
|
|
};
|
|
</script>
|
|
|
|
<style scoped lang="scss">
|
|
|
|
span.options-label {
|
|
color: var(--settings-text-color);
|
|
}
|
|
|
|
div.about-modal {
|
|
background: var(--about-page-background);
|
|
color: var(--about-page-color);
|
|
overflow-y: auto;
|
|
padding: 0 1rem;
|
|
height: 100%;
|
|
p, ul li, a {
|
|
font-size: 1rem;
|
|
}
|
|
|
|
a.title {
|
|
text-decoration: none;
|
|
h2 {
|
|
font-size: 1.8rem;
|
|
text-align: center;
|
|
margin: 1rem;
|
|
}
|
|
}
|
|
h3 {
|
|
font-size: 1.3rem;
|
|
margin: 1rem 0 0.2rem 0;
|
|
color: var(--about-page-accent);
|
|
}
|
|
p.small-note {
|
|
margin: 0.2rem 0;
|
|
}
|
|
p.about-text {
|
|
margin: 0.2rem 0;
|
|
}
|
|
a {
|
|
color: var(--about-page-accent);
|
|
}
|
|
ul {
|
|
margin-top: 0.2rem;
|
|
}
|
|
a.info {
|
|
text-decoration: underline;
|
|
margin-left: 0.2rem;
|
|
}
|
|
.system-info {
|
|
font-size: 0.8rem;
|
|
background: var(--black);
|
|
color: var(--white);
|
|
border-radius: var(--curve-factor-small);
|
|
padding: 0.5rem;
|
|
border: 1px solid var(--white);
|
|
width: fit-content;
|
|
h4 {
|
|
font-size: 0.8rem;
|
|
margin: 0 0 0.2rem 0;
|
|
text-decoration: underline;
|
|
}
|
|
}
|
|
.app-version {
|
|
text-align: left;
|
|
}
|
|
pre.logs {
|
|
max-height: 200px;
|
|
overflow-y: auto;
|
|
padding: 1rem;
|
|
font-size: 0.75rem;
|
|
border-radius: var(--curve-factor-small);
|
|
text-align: left;
|
|
color: var(--white);
|
|
background: var(--black);
|
|
white-space: pre-wrap;
|
|
}
|
|
}
|
|
|
|
</style>
|