Skip to content

Commit

Permalink
feat: dark mode
Browse files Browse the repository at this point in the history
  • Loading branch information
Alexays committed Mar 19, 2018
1 parent f59c113 commit 61d5dbf
Show file tree
Hide file tree
Showing 7 changed files with 122 additions and 9 deletions.
68 changes: 62 additions & 6 deletions src/App.vue
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<template>
<div id="app">
<v-app>
<v-app :dark="dark">
<router-view name="header" keep-alive></router-view>
<transition name="fade">
<router-view keep-alive></router-view>
Expand All @@ -10,9 +10,65 @@
</template>

<script>
export default {
name: 'app',
};
export default {
name: 'app',
computed: {
enabled() {
return this.$store.state.settings.dark;
},
},
watch: {
enabled() {
this.getDark();
},
},
data() {
return {
dark: false,
};
},
methods: {
getDark() {
const tmp = JSON.parse(localStorage.getItem('dark') || '{}');
this.dark = false;
if (tmp.enabled) {
if (tmp.auto) {
const from = (tmp.from || '22:00').split(':').map(Number);
const to = (tmp.to || '9:00').split(':').map(Number);
const date = new Date();
const fromDate = new Date(
date.getFullYear(),
date.getMonth(),
date.getDate(),
from[0],
from[1],
0,
);
const toDate = new Date(
date.getFullYear(),
date.getMonth(),
date.getDate(),
to[0],
to[1],
0,
);
if (fromDate > toDate && date > toDate && fromDate < date) {
this.dark = true;
return;
} else if (date > fromDate && date < toDate) {
this.dark = true;
return;
}
this.dark = false;
return;
}
this.dark = true;
}
},
},
mounted() {
this.getDark();
},
};
</script>
<style lang="scss" rel='stylesheet/scss' src="./style.scss"></style>
<style lang="scss" rel="stylesheet/scss" src="./style.scss"></style>
1 change: 1 addition & 0 deletions src/components/Config/main.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ export default {
[f.name]: f.value,
})).reduce((a, x) => Object.assign(a, x)),
});
this.$emit('save');
},
},
mounted() {},
Expand Down
30 changes: 28 additions & 2 deletions src/components/Settings/index.vue
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,34 @@
<v-content>
<v-container fluid>
<v-card class="container">
<Config :settings="settings" id="global"/>
<p class="text-xs-right">Made with <v-icon small color="red">favorite</v-icon> by <a href="https://arouillard.fr">Alexis Rouillard</a></p>
<h4 class="headline">Dark mode</h4>
<v-layout row>
<v-flex class="dark-p">
<v-switch :label="`On`" v-model="dark"></v-switch>
</v-flex>
<v-flex class="dark-p">
<v-checkbox :label="`Auto`" :disabled="!dark" v-model="dark_auto"></v-checkbox>
</v-flex>
<v-flex>
<v-menu ref="from_menu" :disabled="!dark_auto" lazy :close-on-content-click="false" v-model="from_menu" transition="scale-transition" offset-y full-width
:nudge-right="40" max-width="290px" min-width="290px" :return-value.sync="from">
<v-text-field :disabled="!dark_auto" slot="activator" label="from" v-model="from" prepend-icon="access_time" readonly></v-text-field>
<v-time-picker format="24h" v-model="from" @change="$refs.from_menu.save(from)"></v-time-picker>
</v-menu>
</v-flex>
<v-flex>
<v-menu ref="to_menu" :disabled="!dark_auto" lazy :close-on-content-click="false" v-model="to_menu" transition="scale-transition" offset-y full-width
:nudge-right="40" max-width="290px" min-width="290px" :return-value.sync="to">
<v-text-field :disabled="!dark_auto" slot="activator" label="to" v-model="to" prepend-icon="access_time" readonly></v-text-field>
<v-time-picker format="24h" v-model="to" @change="$refs.to_menu.save(to)"></v-time-picker>
</v-menu>
</v-flex>
</v-layout>
<Config @save="save()" :settings="settings" id="global" />
<p class="text-xs-right">Made with
<v-icon small color="red">favorite</v-icon> by
<a href="https://arouillard.fr">Alexis Rouillard</a>
</p>
</v-card>
</v-container>
</v-content>
Expand Down
26 changes: 25 additions & 1 deletion src/components/Settings/main.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,34 @@ export default {
data() {
return {
settings: Settings,
dark: false,
dark_auto: false,
from: '22:00',
to: '9:00',
from_menu: false,
to_menu: false,
};
},
methods: {},
methods: {
save() {
localStorage.setItem('dark', JSON.stringify({
enabled: this.dark,
auto: this.dark_auto,
from: this.from,
to: this.to,
}));
this.$store.commit('SET_SETTINGS', {
key: 'dark',
settings: this.dark,
});
},
},
mounted() {
const dark = JSON.parse(localStorage.getItem('dark') || '{}');
this.dark = dark.enabled;
this.dark_auto = dark.auto;
this.from = dark.from;
this.to = dark.to;
this.settings = this.settings.map((f) => {
if (this.$store.state.settings.global[f.name] !== undefined) {
f.value = this.$store.state.settings.global[f.name];
Expand Down
3 changes: 3 additions & 0 deletions src/components/Settings/style.scss
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,7 @@
.card {
padding: 30px;
}
.dark-p {
padding: 18px 0 0;
}
}
1 change: 1 addition & 0 deletions src/helpers/settings.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ export default {
global: Settings.map(f => ({
[f.name]: f.value,
})).reduce((a, x) => Object.assign(a, x)),
dark: false,
},
mutations: {
SET_SETTINGS(state, {
Expand Down
2 changes: 2 additions & 0 deletions src/main.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import VSwitch from 'vuetify/es5/components/VSwitch';
import VSpeedDial from 'vuetify/es5/components/VSpeedDial';
import VProgressLinear from 'vuetify/es5/components/VProgressLinear';
import VProgressCircular from 'vuetify/es5/components/VProgressCircular';
import VTimePicker from 'vuetify/es5/components/VTimePicker';
import transitions from 'vuetify/es5/components/transitions';
import directives from 'vuetify/es5/directives';
import axios from 'axios';
Expand Down Expand Up @@ -56,6 +57,7 @@ Vue.use(Vuetify, {
VSpeedDial,
VProgressLinear,
VProgressCircular,
VTimePicker,
},
directives,
transitions,
Expand Down

0 comments on commit 61d5dbf

Please sign in to comment.