Nicer and more subtle version notifications (#711)
This commit is contained in:
parent
91327a9225
commit
4f04f017b9
18 changed files with 359 additions and 285 deletions
9
.storybook/middleware.js
Normal file
9
.storybook/middleware.js
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
const express = require("express");
|
||||
|
||||
const expressMiddleWare = (router) => {
|
||||
router.post("/update", function (req, res) {
|
||||
res.status(200).send("ok");
|
||||
});
|
||||
};
|
||||
|
||||
module.exports = expressMiddleWare;
|
||||
|
|
@ -30,21 +30,5 @@
|
|||
|
||||
<div id="app"></div>
|
||||
<div id="toasts"></div>
|
||||
|
||||
<footer class="pt-4 pb-2 pt-md-5 pb-md-4 mt-3 mt-md-5 border-top">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-6">
|
||||
<small class="text-muted">
|
||||
<a href="https://github.com/andig/evcc/releases/tag/[[.Version]]">[[.Version]]</a>
|
||||
(<a href="https://github.com/andig/evcc/commit/[[.Commit]]">[[.Commit]]</a>)
|
||||
</small>
|
||||
</div>
|
||||
<div class="col-6 text-right">
|
||||
<small class="text-muted">© 2020</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
45
assets/js/components/Footer.stories.js
Normal file
45
assets/js/components/Footer.stories.js
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
import Footer from "./Footer.vue";
|
||||
|
||||
export default {
|
||||
title: "Main/Footer",
|
||||
component: Footer,
|
||||
argTypes: {},
|
||||
};
|
||||
|
||||
const Template = (args, { argTypes }) => ({
|
||||
props: Object.keys(argTypes),
|
||||
components: { Footer },
|
||||
template: '<Footer v-bind="$props"></Footer>',
|
||||
});
|
||||
|
||||
export const KeinUpdate = Template.bind({});
|
||||
KeinUpdate.args = {
|
||||
version: { installed: "0.40" },
|
||||
};
|
||||
export const UpdateVerfuegbar = Template.bind({});
|
||||
UpdateVerfuegbar.args = {
|
||||
version: {
|
||||
installed: "0.36",
|
||||
available: "0.40",
|
||||
releaseNotes: "Lorem ipsum dolor sit amet consectetur",
|
||||
},
|
||||
};
|
||||
|
||||
export const Updater = Template.bind({});
|
||||
Updater.args = {
|
||||
version: {
|
||||
installed: "0.36",
|
||||
available: "0.40",
|
||||
releaseNotes: "Lorem ipsum dolor sit amet consectetur",
|
||||
hasUpdater: true,
|
||||
},
|
||||
};
|
||||
|
||||
export const Upgrade = Template.bind({});
|
||||
Upgrade.args = {
|
||||
version: {
|
||||
installed: "0.36",
|
||||
available: "0.40",
|
||||
hasUpdater: true,
|
||||
},
|
||||
};
|
||||
40
assets/js/components/Footer.vue
Normal file
40
assets/js/components/Footer.vue
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
<template>
|
||||
<footer class="py-3 py-md-5 mt-3 mt-md-5 border-top">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-6">
|
||||
<Version v-bind="version" />
|
||||
</div>
|
||||
<div class="col-6 text-right">
|
||||
<small class="text-black">
|
||||
<a href="https://github.com/sponsors/andig" target="_blank" class="link">
|
||||
<fa-icon icon="heart" class="icon mr-1"></fa-icon
|
||||
><span class="d-none d-sm-inline">Projekt</span> unterstützen
|
||||
</a>
|
||||
</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import Version from "./Version";
|
||||
|
||||
export default {
|
||||
name: "Footer",
|
||||
components: { Version },
|
||||
props: {
|
||||
version: Object,
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.icon {
|
||||
color: #0fdd42;
|
||||
}
|
||||
.text-black a {
|
||||
color: #18191a;
|
||||
}
|
||||
</style>
|
||||
|
|
@ -12,28 +12,32 @@ const Template = (args, { argTypes }) => ({
|
|||
template: '<Version v-bind="$props"></Version>',
|
||||
});
|
||||
|
||||
export const Base = Template.bind({});
|
||||
Base.args = {
|
||||
installed: "0.36",
|
||||
available: "0.40",
|
||||
const releaseNotes =
|
||||
'<h1>0.48</h1><p>Bug fixes:</p><ul><li>Withdraw Kia and Hyundai apis (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="817450535" data-permission-text="Title is private" data-url="https://github.com/andig/evcc/issues/699" data-hovercard-type="pull_request" data-hovercard-url="/andig/evcc/pull/699/hovercard" href="https://github.com/andig/evcc/pull/699">#699</a>)</li><li>Simplify Tesla integration and fix upstream changes (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="817525274" data-permission-text="Title is private" data-url="https://github.com/andig/evcc/issues/700" data-hovercard-type="pull_request" data-hovercard-url="/andig/evcc/pull/700/hovercard" href="https://github.com/andig/evcc/pull/700">#700</a>)</li><li>SHM: Check connected status (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="811567860" data-permission-text="Title is private" data-url="https://github.com/andig/evcc/issues/673" data-hovercard-type="pull_request" data-hovercard-url="/andig/evcc/pull/673/hovercard" href="https://github.com/andig/evcc/pull/673">#673</a>)</li></ul><p>Enhancements:</p><ul><li>Add Seat api (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="812885392" data-permission-text="Title is private" data-url="https://github.com/andig/evcc/issues/681" data-hovercard-type="pull_request" data-hovercard-url="/andig/evcc/pull/681/hovercard" href="https://github.com/andig/evcc/pull/681">#681</a>)</li><li>Add Skoda api (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="812883796" data-permission-text="Title is private" data-url="https://github.com/andig/evcc/issues/680" data-hovercard-type="pull_request" data-hovercard-url="/andig/evcc/pull/680/hovercard" href="https://github.com/andig/evcc/pull/680">#680</a>)</li><li>Add Peugeot/Opel/Citroen api (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="815612446" data-permission-text="Title is private" data-url="https://github.com/andig/evcc/issues/692" data-hovercard-type="pull_request" data-hovercard-url="/andig/evcc/pull/692/hovercard" href="https://github.com/andig/evcc/pull/692">#692</a>)</li><li>KEBA: Support mA current resolution adjustments (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="801358501" data-permission-text="Title is private" data-url="https://github.com/andig/evcc/issues/646" data-hovercard-type="pull_request" data-hovercard-url="/andig/evcc/pull/646/hovercard" href="https://github.com/andig/evcc/pull/646">#646</a>)</li></ul>';
|
||||
|
||||
export const AktuelleVersion = Template.bind({});
|
||||
AktuelleVersion.args = {
|
||||
installed: "0.48",
|
||||
available: "0.48",
|
||||
};
|
||||
export const ReleaseNotes = Template.bind({});
|
||||
ReleaseNotes.args = {
|
||||
installed: "0.36",
|
||||
available: "0.40",
|
||||
releaseNotes: "Lorem ipsum dolor sit amet consectetur",
|
||||
|
||||
export const Download = Template.bind({});
|
||||
Download.args = {
|
||||
installed: "0.47",
|
||||
available: "0.48",
|
||||
releaseNotes,
|
||||
};
|
||||
|
||||
export const Updater = Template.bind({});
|
||||
Updater.args = {
|
||||
installed: "0.36",
|
||||
available: "0.40",
|
||||
releaseNotes: "Lorem ipsum dolor sit amet consectetur",
|
||||
installed: "0.47",
|
||||
available: "0.48",
|
||||
releaseNotes,
|
||||
hasUpdater: true,
|
||||
};
|
||||
|
||||
export const Upgrade = Template.bind({});
|
||||
Upgrade.args = {
|
||||
export const KeineReleaseNotes = Template.bind({});
|
||||
KeineReleaseNotes.args = {
|
||||
installed: "0.36",
|
||||
available: "0.40",
|
||||
hasUpdater: true,
|
||||
|
|
|
|||
|
|
@ -1,112 +1,103 @@
|
|||
<template>
|
||||
<transition name="fade">
|
||||
<div v-if="active">
|
||||
<div class="row p-3 bg-warning">
|
||||
<div class="col-12">
|
||||
Neue Version verfügbar! Installiert: {{ installed }}. Verfügbar:
|
||||
{{ available }}.
|
||||
<b class="px-3" v-if="releaseNotes">
|
||||
<a href="#" class="text-body" @click="toggleReleaseNotes">
|
||||
Release notes
|
||||
<fa-icon
|
||||
icon="chevron-down"
|
||||
class="expand-icon"
|
||||
:class="{ 'expand-icon-rotated': releaseNotesShown }"
|
||||
>
|
||||
</fa-icon>
|
||||
</a>
|
||||
</b>
|
||||
<b class="px-3">
|
||||
<button
|
||||
type="button"
|
||||
class="btn btn-primary"
|
||||
data-toggle="modal"
|
||||
data-target="#updateModal"
|
||||
v-if="hasUpdater"
|
||||
@click="toggleUpdater"
|
||||
>
|
||||
Aktualisieren
|
||||
</button>
|
||||
<a
|
||||
:href="'https://github.com/andig/evcc/releases/tag/' + available"
|
||||
class="text-body"
|
||||
v-else
|
||||
>
|
||||
Download <fa-icon icon="chevron-down"></fa-icon>
|
||||
</a>
|
||||
</b>
|
||||
<button
|
||||
type="button"
|
||||
class="close float-right"
|
||||
style="margin-top: -2px"
|
||||
aria-label="Close"
|
||||
@click="dismiss"
|
||||
>
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<transition name="fade">
|
||||
<div class="row p-3 bg-light" v-if="releaseNotesShown">
|
||||
<div class="col-12" v-html="releaseNotes"></div>
|
||||
</div>
|
||||
</transition>
|
||||
|
||||
<transition name="display">
|
||||
<div
|
||||
id="updateModal"
|
||||
class="dialog"
|
||||
tabindex="-1"
|
||||
role="dialog"
|
||||
v-if="updaterShown"
|
||||
<div>
|
||||
<small class="text-black">
|
||||
<a href="#" @click.prevent="showModal" v-if="newVersionAvailable">
|
||||
<fa-icon icon="gift" class="icon mr-1"></fa-icon>Update<span
|
||||
class="d-none d-sm-inline"
|
||||
>
|
||||
<div class="modal-dialog modal-dialog-centered" role="document">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h4 class="modal-title font-weight-bold">
|
||||
Aktualisierung durchführen
|
||||
</h4>
|
||||
<button type="button" class="close" @click="toggleUpdater">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<p class="font-weight-bold">
|
||||
Nach Aktualisierung wird evcc neu gestartet.
|
||||
</p>
|
||||
<div
|
||||
class="progress"
|
||||
style="margin-top: 16px; margin-bottom: 16px"
|
||||
v-if="updateStarted"
|
||||
>
|
||||
verfügbar</span
|
||||
>:
|
||||
{{ available }}
|
||||
</a>
|
||||
<a :href="releaseNotesUrl(installed)" target="_blank" v-else>
|
||||
Version {{ installed }}
|
||||
</a>
|
||||
</small>
|
||||
|
||||
<transition name="fade">
|
||||
<div id="updateModal" class="dialog" tabindex="-1" role="dialog" v-if="modalActive">
|
||||
<div
|
||||
class="modal-dialog modal-dialog-centered modal-dialog-scrollable"
|
||||
role="document"
|
||||
>
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h4 class="modal-title font-weight-bold">Update verfügbar</h4>
|
||||
<button
|
||||
type="button"
|
||||
class="close"
|
||||
:disabled="updateStarted"
|
||||
@click="closeModal"
|
||||
>
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div v-if="updateStarted">
|
||||
<p>Nach der Aktualisierung wird evcc neu gestartet.</p>
|
||||
<div class="progress my-3">
|
||||
<div
|
||||
class="progress-bar"
|
||||
class="progress-bar progress-bar-striped progress-bar-animated"
|
||||
role="progressbar"
|
||||
:style="{ width: uploadProgress + '%' }"
|
||||
></div>
|
||||
</div>
|
||||
<p>{{ updateStatus }}{{ uploadMessage }}</p>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<div v-else>
|
||||
<p>
|
||||
<small>Aktuell installierte Version: {{ installed }}</small>
|
||||
</p>
|
||||
<div v-if="releaseNotes" v-html="releaseNotes"></div>
|
||||
<p v-else>
|
||||
Keine Releasenotes verfügbar. Mehr Informationen zur neuen
|
||||
Version findest du
|
||||
<a :href="releaseNotesUrl(available)">hier</a>.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer d-flex justify-content-between">
|
||||
<button
|
||||
type="button"
|
||||
class="btn btn-outline-secondary"
|
||||
:disabled="updateStarted"
|
||||
@click="closeModal"
|
||||
>
|
||||
Abbrechen
|
||||
</button>
|
||||
<div>
|
||||
<button
|
||||
type="button"
|
||||
class="btn btn-secondary"
|
||||
:class="{ disabled: updateStarted }"
|
||||
@click="toggleUpdater"
|
||||
class="btn btn-primary"
|
||||
v-if="hasUpdater"
|
||||
:disabled="updateStarted"
|
||||
@click="update"
|
||||
>
|
||||
Abbrechen
|
||||
</button>
|
||||
<button type="button" class="btn btn-danger" @click="update">
|
||||
Installieren
|
||||
<span v-if="updateStarted">
|
||||
<span
|
||||
class="spinner-border spinner-border-sm"
|
||||
role="status"
|
||||
aria-hidden="true"
|
||||
>
|
||||
</span>
|
||||
Akualisieren
|
||||
</span>
|
||||
<span v-else>Jetzt aktualisieren</span>
|
||||
</button>
|
||||
<a
|
||||
:href="releaseNotesUrl(available)"
|
||||
class="btn btn-primary"
|
||||
v-else
|
||||
>
|
||||
Download
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</transition>
|
||||
</div>
|
||||
</transition>
|
||||
</div>
|
||||
</transition>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
|
|
@ -125,26 +116,17 @@ export default {
|
|||
},
|
||||
data: function () {
|
||||
return {
|
||||
dismissed: false,
|
||||
releaseNotesShown: false,
|
||||
updaterShown: false,
|
||||
modalActive: false,
|
||||
updateStarted: false,
|
||||
updateStatus: "",
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
dismiss: function () {
|
||||
this.dismissed = true;
|
||||
showModal: function () {
|
||||
this.modalActive = true;
|
||||
},
|
||||
toggleReleaseNotes: function (e) {
|
||||
e.preventDefault();
|
||||
this.releaseNotesShown = !this.releaseNotesShown;
|
||||
},
|
||||
toggleUpdater: function (e) {
|
||||
e.preventDefault();
|
||||
if (!this.updateStarted) {
|
||||
this.updaterShown = !this.updaterShown;
|
||||
}
|
||||
closeModal: function () {
|
||||
this.modalActive = false;
|
||||
},
|
||||
update: async function () {
|
||||
try {
|
||||
|
|
@ -155,24 +137,20 @@ export default {
|
|||
this.updateStatus = "Aktualisierung nicht möglich: " + e;
|
||||
}
|
||||
},
|
||||
releaseNotesUrl: function (version) {
|
||||
return `https://github.com/andig/evcc/releases/tag/${version}`;
|
||||
},
|
||||
},
|
||||
computed: {
|
||||
active: function () {
|
||||
newVersionAvailable: function () {
|
||||
return (
|
||||
this.available && // available version already computed?
|
||||
this.installed != "[[.Version]]" && // go template parsed?
|
||||
this.installed != "0.0.1-alpha" && // make used?
|
||||
this.available != this.installed &&
|
||||
this.dismissed === false
|
||||
this.available != this.installed
|
||||
);
|
||||
},
|
||||
},
|
||||
watch: {
|
||||
available: function () {
|
||||
this.dismissed = false;
|
||||
this.releaseNotesShown = false;
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
|
|
@ -185,7 +163,6 @@ export default {
|
|||
.fade-leave-to {
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
.dialog {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
|
|
@ -196,15 +173,10 @@ export default {
|
|||
overflow: hidden;
|
||||
outline: 0;
|
||||
}
|
||||
.display-enter-active {
|
||||
display: block !important;
|
||||
.icon {
|
||||
color: #0fdd42;
|
||||
}
|
||||
|
||||
.expand-icon {
|
||||
transition: transform 0.25s ease-in;
|
||||
transform: rotate(0);
|
||||
}
|
||||
.expand-icon-rotated {
|
||||
transform: rotate(-180deg);
|
||||
.text-black a {
|
||||
color: #18191a;
|
||||
}
|
||||
</style>
|
||||
|
|
|
|||
|
|
@ -18,6 +18,9 @@ import { faSun } from "@fortawesome/free-solid-svg-icons/faSun";
|
|||
import { faTemperatureHigh } from "@fortawesome/free-solid-svg-icons/faTemperatureHigh";
|
||||
import { faTemperatureLow } from "@fortawesome/free-solid-svg-icons/faTemperatureLow";
|
||||
import { faThermometerHalf } from "@fortawesome/free-solid-svg-icons/faThermometerHalf";
|
||||
import { faHeart } from "@fortawesome/free-solid-svg-icons/faHeart";
|
||||
import { faGift } from "@fortawesome/free-solid-svg-icons/faGift";
|
||||
import { faBox } from "@fortawesome/free-solid-svg-icons/faBox";
|
||||
|
||||
library.add(
|
||||
faArrowDown,
|
||||
|
|
@ -35,7 +38,10 @@ library.add(
|
|||
faSun,
|
||||
faTemperatureHigh,
|
||||
faTemperatureLow,
|
||||
faThermometerHalf
|
||||
faThermometerHalf,
|
||||
faHeart,
|
||||
faGift,
|
||||
faBox
|
||||
);
|
||||
|
||||
Vue.component("fa-icon", FontAwesomeIcon);
|
||||
|
|
|
|||
|
|
@ -1,58 +1,53 @@
|
|||
<template>
|
||||
<div>
|
||||
<nav class="navbar navbar-expand-lg navbar-light bg-light">
|
||||
<a class="navbar-brand" href="https://github.com/andig/evcc"
|
||||
><fa-icon icon="leaf" class="text-primary mr-2"></fa-icon>evcc</a
|
||||
>
|
||||
<button
|
||||
class="navbar-toggler"
|
||||
type="button"
|
||||
data-toggle="collapse"
|
||||
data-target="#navbarNavAltMarkup"
|
||||
aria-controls="navbarNavAltMarkup"
|
||||
aria-expanded="false"
|
||||
aria-label="Toggle navigation"
|
||||
>
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navbarNavAltMarkup">
|
||||
<div class="navbar-nav">
|
||||
<router-link class="nav-item nav-link pb-1" to="/">Laden</router-link>
|
||||
<router-link class="nav-item nav-link pb-1" to="/config"
|
||||
>Konfiguration</router-link
|
||||
<div class="app d-flex flex-column justify-content-between">
|
||||
<div>
|
||||
<nav class="navbar navbar-expand-lg navbar-light bg-light">
|
||||
<div class="container">
|
||||
<a class="navbar-brand" href="https://github.com/andig/evcc"
|
||||
><fa-icon icon="leaf" class="text-primary mr-2"></fa-icon>evcc</a
|
||||
>
|
||||
<a
|
||||
class="nav-item nav-link pb-1"
|
||||
href="https://github.com/andig/evcc/discussions"
|
||||
target="_blank"
|
||||
>Community Support</a
|
||||
<button
|
||||
class="navbar-toggler"
|
||||
type="button"
|
||||
data-toggle="collapse"
|
||||
data-target="#navbarNavAltMarkup"
|
||||
aria-controls="navbarNavAltMarkup"
|
||||
aria-expanded="false"
|
||||
aria-label="Toggle navigation"
|
||||
>
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navbarNavAltMarkup">
|
||||
<div class="navbar-nav">
|
||||
<router-link class="nav-item nav-link pb-1" to="/">Laden</router-link>
|
||||
<router-link class="nav-item nav-link pb-1" to="/config"
|
||||
>Konfiguration</router-link
|
||||
>
|
||||
<a
|
||||
class="nav-item nav-link pb-1"
|
||||
href="https://github.com/andig/evcc/discussions"
|
||||
target="_blank"
|
||||
>Community Support</a
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</nav>
|
||||
|
||||
<Version
|
||||
id="version-bar"
|
||||
:installed="installedVersion"
|
||||
:available="store.state.availableVersion"
|
||||
:releaseNotes="store.state.releaseNotes"
|
||||
:hasUpdater="store.state.hasUpdater"
|
||||
:uploadMessage="store.state.uploadMessage"
|
||||
:uploadProgress="store.state.uploadProgress"
|
||||
></Version>
|
||||
|
||||
<router-view></router-view>
|
||||
<router-view></router-view>
|
||||
</div>
|
||||
<Footer :version="version" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import "../icons";
|
||||
import Version from "../components/Version";
|
||||
import Footer from "../components/Footer";
|
||||
import store from "../store";
|
||||
|
||||
export default {
|
||||
name: "App",
|
||||
components: { Version },
|
||||
components: { Footer },
|
||||
data: function () {
|
||||
return {
|
||||
compact: false,
|
||||
|
|
@ -89,6 +84,18 @@ export default {
|
|||
};
|
||||
},
|
||||
},
|
||||
computed: {
|
||||
version: function () {
|
||||
return {
|
||||
installed: this.installedVersion,
|
||||
available: this.store.state.availableVersion,
|
||||
releaseNotes: this.store.state.releaseNotes,
|
||||
hasUpdater: this.store.state.hasUpdater,
|
||||
uploadMessage: this.store.state.uploadMessage,
|
||||
uploadProgress: this.store.state.uploadProgress,
|
||||
};
|
||||
},
|
||||
},
|
||||
created: function () {
|
||||
const urlParams = new URLSearchParams(window.location.search);
|
||||
this.compact = urlParams.get("compact");
|
||||
|
|
@ -96,3 +103,8 @@ export default {
|
|||
},
|
||||
};
|
||||
</script>
|
||||
<style scoped>
|
||||
.app {
|
||||
min-height: 100vh;
|
||||
}
|
||||
</style>
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
.progress-bar-animated{animation-direction:reverse}.btn.caption{opacity:1}.btn.first{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}code{font-size:87.5%;color:#e83e8c;word-wrap:break-word}.value,input[type=radio],label.btn{white-space:nowrap!important}.text-muted a,.text-muted a:hover{color:#6c757d!important;text-decoration:none}.bg-muted{opacity:.25}.fade-enter-active[data-v-4b17e482],.fade-leave-active[data-v-4b17e482]{transition:opacity .25s ease-in}.fade-enter[data-v-4b17e482],.fade-leave-to[data-v-4b17e482]{opacity:0}.dialog[data-v-4b17e482]{position:fixed;top:0;left:0;z-index:1050;width:100%;height:100%;overflow:hidden;outline:0}.display-enter-active[data-v-4b17e482]{display:block!important}.expand-icon[data-v-4b17e482]{transition:transform .25s ease-in;transform:rotate(0)}.expand-icon-rotated[data-v-4b17e482]{transform:rotate(-180deg)}
|
||||
.progress-bar-animated{animation-direction:reverse}.btn.caption{opacity:1}.btn.first{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}code{font-size:87.5%;color:#e83e8c;word-wrap:break-word}.value,input[type=radio],label.btn{white-space:nowrap!important}.text-muted a,.text-muted a:hover{color:#6c757d!important;text-decoration:none}.bg-muted{opacity:.25}.fade-enter-active[data-v-a6ded36e],.fade-leave-active[data-v-a6ded36e]{transition:opacity .25s ease-in}.fade-enter[data-v-a6ded36e],.fade-leave-to[data-v-a6ded36e]{opacity:0}.dialog[data-v-a6ded36e]{position:fixed;top:0;left:0;z-index:1050;width:100%;height:100%;overflow:hidden;outline:0}.icon[data-v-a6ded36e]{color:#0fdd42}.text-black a[data-v-a6ded36e]{color:#18191a}.icon[data-v-b6dbe422]{color:#0fdd42}.text-black a[data-v-b6dbe422]{color:#18191a}.app[data-v-2052a870]{min-height:100vh}
|
||||
4
dist/index.html
vendored
4
dist/index.html
vendored
|
|
@ -1,4 +1,4 @@
|
|||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name="description" content="EV Charge Controller"><meta name="author" content="andig"><meta name="apple-mobile-web-app-capable" content="yes"><meta name="apple-mobile-web-app-status-bar-style" content="black"><link rel="apple-touch-icon" sizes="180x180" href="ico/apple-touch-icon.png"><link rel="icon" type="image/png" sizes="32x32" href="ico/favicon-32x32.png"><link rel="icon" type="image/png" sizes="16x16" href="ico/favicon-16x16.png"><link rel="manifest" href="ico/site.webmanifest"><link rel="mask-icon" href="ico/safari-pinned-tab.svg" color="#5bbad5"><link rel="shortcut icon" href="ico/favicon.ico"><meta name="msapplication-TileColor" content="#2b5797"><meta name="msapplication-config" content="ico/browserconfig.xml"><meta name="theme-color" content="#ffffff"><title>evcc</title><link href="css/chunk-vendors.c5b0137c.css" rel="preload" as="style"><link href="css/index.4716cdc1.css" rel="preload" as="style"><link href="js/chunk-vendors.7c84295f.js" rel="preload" as="script"><link href="js/index.bf403928.js" rel="preload" as="script"><link href="css/chunk-vendors.c5b0137c.css" rel="stylesheet"><link href="css/index.4716cdc1.css" rel="stylesheet"></head><body><script>window.evcc = {
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name="description" content="EV Charge Controller"><meta name="author" content="andig"><meta name="apple-mobile-web-app-capable" content="yes"><meta name="apple-mobile-web-app-status-bar-style" content="black"><link rel="apple-touch-icon" sizes="180x180" href="ico/apple-touch-icon.png"><link rel="icon" type="image/png" sizes="32x32" href="ico/favicon-32x32.png"><link rel="icon" type="image/png" sizes="16x16" href="ico/favicon-16x16.png"><link rel="manifest" href="ico/site.webmanifest"><link rel="mask-icon" href="ico/safari-pinned-tab.svg" color="#5bbad5"><link rel="shortcut icon" href="ico/favicon.ico"><meta name="msapplication-TileColor" content="#2b5797"><meta name="msapplication-config" content="ico/browserconfig.xml"><meta name="theme-color" content="#ffffff"><title>evcc</title><link href="css/chunk-vendors.c5b0137c.css" rel="preload" as="style"><link href="css/index.9eccec4b.css" rel="preload" as="style"><link href="js/chunk-vendors.a1c300d6.js" rel="preload" as="script"><link href="js/index.9f86ca25.js" rel="preload" as="script"><link href="css/chunk-vendors.c5b0137c.css" rel="stylesheet"><link href="css/index.9eccec4b.css" rel="stylesheet"></head><body><script>window.evcc = {
|
||||
version: "[[.Version]]",
|
||||
configured: "[[.Configured]]",
|
||||
};</script><div id="app"></div><div id="toasts"></div><footer class="pt-4 pb-2 pt-md-5 pb-md-4 mt-3 mt-md-5 border-top"><div class="container"><div class="row"><div class="col-6"><small class="text-muted"><a href="https://github.com/andig/evcc/releases/tag/[[.Version]]">[[.Version]]</a> (<a href="https://github.com/andig/evcc/commit/[[.Commit]]">[[.Commit]]</a>)</small></div><div class="col-6 text-right"><small class="text-muted">© 2020</small></div></div></div></footer><script src="js/chunk-vendors.7c84295f.js"></script><script src="js/index.bf403928.js"></script></body></html>
|
||||
};</script><div id="app"></div><div id="toasts"></div><script src="js/chunk-vendors.a1c300d6.js"></script><script src="js/index.9f86ca25.js"></script></body></html>
|
||||
1
dist/js/chunk-vendors.7c84295f.js.map
vendored
1
dist/js/chunk-vendors.7c84295f.js.map
vendored
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
1
dist/js/chunk-vendors.a1c300d6.js.map
vendored
Normal file
1
dist/js/chunk-vendors.a1c300d6.js.map
vendored
Normal file
File diff suppressed because one or more lines are too long
2
dist/js/index.9f86ca25.js
vendored
Normal file
2
dist/js/index.9f86ca25.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
dist/js/index.9f86ca25.js.map
vendored
Normal file
1
dist/js/index.9f86ca25.js.map
vendored
Normal file
File diff suppressed because one or more lines are too long
2
dist/js/index.bf403928.js
vendored
2
dist/js/index.bf403928.js
vendored
File diff suppressed because one or more lines are too long
1
dist/js/index.bf403928.js.map
vendored
1
dist/js/index.bf403928.js.map
vendored
File diff suppressed because one or more lines are too long
150
package-lock.json
generated
150
package-lock.json
generated
|
|
@ -3061,16 +3061,6 @@
|
|||
"webpack-merge": "^4.2.2"
|
||||
},
|
||||
"dependencies": {
|
||||
"ansi-styles": {
|
||||
"version": "4.3.0",
|
||||
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
|
||||
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"color-convert": "^2.0.1"
|
||||
}
|
||||
},
|
||||
"cacache": {
|
||||
"version": "13.0.1",
|
||||
"resolved": "https://registry.npmjs.org/cacache/-/cacache-13.0.1.tgz",
|
||||
|
|
@ -3097,40 +3087,12 @@
|
|||
"unique-filename": "^1.1.1"
|
||||
}
|
||||
},
|
||||
"chalk": {
|
||||
"version": "4.1.0",
|
||||
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
|
||||
"integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"ansi-styles": "^4.1.0",
|
||||
"supports-color": "^7.1.0"
|
||||
}
|
||||
},
|
||||
"chownr": {
|
||||
"version": "1.1.4",
|
||||
"resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
|
||||
"integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==",
|
||||
"dev": true
|
||||
},
|
||||
"color-convert": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
|
||||
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"color-name": "~1.1.4"
|
||||
}
|
||||
},
|
||||
"color-name": {
|
||||
"version": "1.1.4",
|
||||
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
|
||||
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"dotenv": {
|
||||
"version": "8.2.0",
|
||||
"resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz",
|
||||
|
|
@ -3365,42 +3327,6 @@
|
|||
"schema-utils": "^2.5.0"
|
||||
}
|
||||
},
|
||||
"vue-loader-v16": {
|
||||
"version": "npm:vue-loader@16.1.2",
|
||||
"resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.1.2.tgz",
|
||||
"integrity": "sha512-8QTxh+Fd+HB6fiL52iEVLKqE9N1JSlMXLR92Ijm6g8PZrwIxckgpqjPDWRP5TWxdiPaHR+alUWsnu1ShQOwt+Q==",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"chalk": "^4.1.0",
|
||||
"hash-sum": "^2.0.0",
|
||||
"loader-utils": "^2.0.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"json5": {
|
||||
"version": "2.1.3",
|
||||
"resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz",
|
||||
"integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"minimist": "^1.2.5"
|
||||
}
|
||||
},
|
||||
"loader-utils": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
|
||||
"integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"big.js": "^5.2.2",
|
||||
"emojis-list": "^3.0.0",
|
||||
"json5": "^2.1.2"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"yallist": {
|
||||
"version": "3.1.1",
|
||||
"resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
|
||||
|
|
@ -18564,6 +18490,82 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"vue-loader-v16": {
|
||||
"version": "npm:vue-loader@16.1.2",
|
||||
"resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.1.2.tgz",
|
||||
"integrity": "sha512-8QTxh+Fd+HB6fiL52iEVLKqE9N1JSlMXLR92Ijm6g8PZrwIxckgpqjPDWRP5TWxdiPaHR+alUWsnu1ShQOwt+Q==",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"chalk": "^4.1.0",
|
||||
"hash-sum": "^2.0.0",
|
||||
"loader-utils": "^2.0.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"ansi-styles": {
|
||||
"version": "4.3.0",
|
||||
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
|
||||
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"color-convert": "^2.0.1"
|
||||
}
|
||||
},
|
||||
"chalk": {
|
||||
"version": "4.1.0",
|
||||
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
|
||||
"integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"ansi-styles": "^4.1.0",
|
||||
"supports-color": "^7.1.0"
|
||||
}
|
||||
},
|
||||
"color-convert": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
|
||||
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"color-name": "~1.1.4"
|
||||
}
|
||||
},
|
||||
"color-name": {
|
||||
"version": "1.1.4",
|
||||
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
|
||||
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"has-flag": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
|
||||
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"hash-sum": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-2.0.0.tgz",
|
||||
"integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"supports-color": {
|
||||
"version": "7.2.0",
|
||||
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
|
||||
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"has-flag": "^4.0.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"vue-router": {
|
||||
"version": "3.4.9",
|
||||
"resolved": "https://registry.npmjs.org/vue-router/-/vue-router-3.4.9.tgz",
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue