Работа над ночным режимом

This commit is contained in:
Book Pauk
2023-01-08 20:08:03 +07:00
parent 91097515f2
commit 9e4be96522
5 changed files with 69 additions and 15 deletions

View File

@@ -115,6 +115,12 @@
<div class="col"></div> <div class="col"></div>
<button v-show="showToolButton['nightMode']" ref="nightMode" v-ripple class="tool-button" :class="buttonActiveClass('nightMode')" @click="buttonClick('nightMode')">
<q-icon name="la la-moon" size="32px" />
<q-tooltip :delay="1500" anchor="bottom middle" content-style="font-size: 80%">
{{ rstore.readerActions['nightMode'] }}
</q-tooltip>
</button>
<button v-show="showToolButton['clickControl']" ref="clickControl" v-ripple class="tool-button" :class="buttonActiveClass('clickControl')" @click="buttonClick('clickControl')"> <button v-show="showToolButton['clickControl']" ref="clickControl" v-ripple class="tool-button" :class="buttonActiveClass('clickControl')" @click="buttonClick('clickControl')">
<q-icon name="la la-mouse" size="32px" /> <q-icon name="la la-mouse" size="32px" />
<q-tooltip :delay="1500" anchor="bottom middle" content-style="font-size: 80%"> <q-tooltip :delay="1500" anchor="bottom middle" content-style="font-size: 80%">
@@ -290,6 +296,8 @@ class Reader {
contentsActive = false; contentsActive = false;
libsActive = false; libsActive = false;
recentBooksActive = false; recentBooksActive = false;
nightModeActive = false;
clickControlActive = false; clickControlActive = false;
settingsActive = false; settingsActive = false;
@@ -462,8 +470,8 @@ class Reader {
this.allowUrlParamBookPos = settings.allowUrlParamBookPos; this.allowUrlParamBookPos = settings.allowUrlParamBookPos;
this.copyFullText = settings.copyFullText; this.copyFullText = settings.copyFullText;
this.showClickMapPage = settings.showClickMapPage; this.showClickMapPage = settings.showClickMapPage;
this.clickControl = settings.clickControl; this.nightModeActive = settings.nightMode;
this.clickControlActive = this.clickControl; this.clickControlActive = settings.clickControl;
this.blinkCachedLoad = settings.blinkCachedLoad; this.blinkCachedLoad = settings.blinkCachedLoad;
this.showToolButton = settings.showToolButton; this.showToolButton = settings.showToolButton;
this.toolBarHideOnScroll = settings.toolBarHideOnScroll; this.toolBarHideOnScroll = settings.toolBarHideOnScroll;
@@ -1014,10 +1022,16 @@ class Reader {
} }
} }
nightModeToggle() {
if (!this.nightModeActive && !utils.hasProp(this.settings.nightColorSets, 'textColor')) {
this.$root.notify.warning(`Ночной режим активирован впервые. Цвета заданы по умолчанию.`);
}
this.commit('reader/nightModeToggle');
}
clickControlToggle() { clickControlToggle() {
const newSettings = _.cloneDeep(this.settings); this.commit('reader/setSettings', {clickControl: !this.clickControlActive});
newSettings.clickControl = !this.clickControl;
this.commit('reader/setSettings', newSettings);
} }
offlineModeToggle() { offlineModeToggle() {
@@ -1119,6 +1133,7 @@ class Reader {
case 'contents': case 'contents':
case 'libs': case 'libs':
case 'recentBooks': case 'recentBooks':
case 'nightMode':
case 'clickControl': case 'clickControl':
case 'offlineMode': case 'offlineMode':
case 'settings': case 'settings':
@@ -1167,7 +1182,7 @@ class Reader {
} }
async activateClickMapPage() { async activateClickMapPage() {
if (this.clickControl && this.showClickMapPage && !this.clickMapActive) { if (this.clickControlActive && this.showClickMapPage && !this.clickMapActive) {
this.clickMapActive = true; this.clickMapActive = true;
await this.$refs.clickMapPage.slowDisappear(); await this.$refs.clickMapPage.slowDisappear();
this.clickMapActive = false; this.clickMapActive = false;
@@ -1525,6 +1540,9 @@ class Reader {
case 'recentBooks': case 'recentBooks':
this.recentBooksToggle(); this.recentBooksToggle();
break; break;
case 'nightMode':
this.nightModeToggle();
break;
case 'clickControl': case 'clickControl':
this.clickControlToggle(); this.clickControlToggle();
break; break;

View File

@@ -35,7 +35,7 @@
<!-- Профили ---------------------------------------------------------------------> <!-- Профили --------------------------------------------------------------------->
<ProfilesTab v-if="selectedTab == 'profiles'" :form="form" /> <ProfilesTab v-if="selectedTab == 'profiles'" :form="form" />
<!-- Вид -------------------------------------------------------------------------> <!-- Вид ------------------------------------------------------------------------->
<ViewTab v-if="selectedTab == 'view'" :form="form" /> <ViewTab v-if="selectedTab == 'view'" :form="form" @tab-event="tabEvent" />
<!-- Кнопки ----------------------------------------------------------------------> <!-- Кнопки ---------------------------------------------------------------------->
<ToolBarTab v-if="selectedTab == 'toolbar'" :form="form" /> <ToolBarTab v-if="selectedTab == 'toolbar'" :form="form" />
<!-- Управление ------------------------------------------------------------------> <!-- Управление ------------------------------------------------------------------>
@@ -178,6 +178,7 @@ class SettingsPage {
switch (event.action) { switch (event.action) {
case 'set-defaults': this.setDefaults(); break; case 'set-defaults': this.setDefaults(); break;
case 'night-mode': this.$emit('do-action', {action: 'nightMode'}); break;
} }
} }

View File

@@ -8,7 +8,7 @@
<div class="sets-item row"> <div class="sets-item row">
<div class="sets-label label"></div> <div class="sets-label label"></div>
<div class="col row"> <div class="col row">
<q-checkbox v-model="form.nightMode" size="xs" label="Ночной режим" /> <q-checkbox v-model="nightMode" size="xs" label="Ночной режим" @update:modelValue="nightModeToggle" />
</div> </div>
</div> </div>
@@ -192,6 +192,7 @@ class Mode {
isFormChanged = false; isFormChanged = false;
dualDivColorFiltered = ''; dualDivColorFiltered = '';
nightMode = false;
created() { created() {
this.formChanged();//no await this.formChanged();//no await
@@ -209,11 +210,17 @@ class Mode {
&& (this.form.pageChangeAnimation == 'flip' || this.form.pageChangeAnimation == 'rightShift') && (this.form.pageChangeAnimation == 'flip' || this.form.pageChangeAnimation == 'rightShift')
) )
this.form.pageChangeAnimation = ''; this.form.pageChangeAnimation = '';
this.nightMode = this.form.nightMode;
} finally { } finally {
await this.$nextTick(); await this.$nextTick();
this.isFormChanged = false; this.isFormChanged = false;
} }
} }
nightModeToggle() {
this.$emit('tab-event', {action: 'night-mode'});
}
} }
export default vueComponent(Mode); export default vueComponent(Mode);

View File

@@ -19,7 +19,7 @@
<div class="q-mb-sm" /> <div class="q-mb-sm" />
<div class="col sets-tab-panel"> <div class="col sets-tab-panel">
<Mode v-if="selectedTab == 'mode'" :form="form" /> <Mode v-if="selectedTab == 'mode'" :form="form" @tab-event="tabEvent" />
<Color v-if="selectedTab == 'color'" :form="form" /> <Color v-if="selectedTab == 'color'" :form="form" />
<Font v-if="selectedTab == 'font'" :form="form" /> <Font v-if="selectedTab == 'font'" :form="form" />
<Text v-if="selectedTab == 'text'" :form="form" /> <Text v-if="selectedTab == 'text'" :form="form" />
@@ -61,6 +61,14 @@ class ViewTab {
mounted() { mounted() {
} }
tabEvent(event) {
if (!event || !event.action)
return;
switch (event.action) {
case 'night-mode': this.$emit('tab-event', {action: 'night-mode'}); break;
}
}
} }
export default vueComponent(ViewTab); export default vueComponent(ViewTab);

View File

@@ -1,3 +1,4 @@
import _ from 'lodash';
import * as utils from '../../share/utils'; import * as utils from '../../share/utils';
import googleFonts from './fonts/fonts.json'; import googleFonts from './fonts/fonts.json';
@@ -21,6 +22,7 @@ const readerActions = {
'copyText': 'Скопировать текст со страницы', 'copyText': 'Скопировать текст со страницы',
'convOptions': 'Настроить конвертирование', 'convOptions': 'Настроить конвертирование',
'refresh': 'Принудительно обновить книгу', 'refresh': 'Принудительно обновить книгу',
'nightMode': 'Ночной режим',
'clickControl': 'Управление кликом', 'clickControl': 'Управление кликом',
'offlineMode': 'Автономный режим (без интернета)', 'offlineMode': 'Автономный режим (без интернета)',
'contents': 'Оглавление/закладки', 'contents': 'Оглавление/закладки',
@@ -57,6 +59,7 @@ const toolButtons = [
{name: 'contents', show: true}, {name: 'contents', show: true},
{name: 'libs', show: true}, {name: 'libs', show: true},
{name: 'recentBooks', show: true}, {name: 'recentBooks', show: true},
{name: 'nightMode', show: true},
{name: 'clickControl', show: true}, {name: 'clickControl', show: true},
{name: 'offlineMode', show: true}, {name: 'offlineMode', show: true},
]; ];
@@ -80,6 +83,7 @@ const hotKeys = [
{name: 'contents', codes: ['C']}, {name: 'contents', codes: ['C']},
{name: 'libs', codes: ['L']}, {name: 'libs', codes: ['L']},
{name: 'recentBooks', codes: ['X']}, {name: 'recentBooks', codes: ['X']},
{name: 'nightMode', codes: ['Equal']},
{name: 'clickControl', codes: ['Ctrl+B']}, {name: 'clickControl', codes: ['Ctrl+B']},
{name: 'offlineMode', codes: ['O']}, {name: 'offlineMode', codes: ['O']},
@@ -320,7 +324,7 @@ const state = {
whatsNewContentHash: '', whatsNewContentHash: '',
donationNextPopup: Date.now() + dayMs*30, donationNextPopup: Date.now() + dayMs*30,
currentProfile: '', currentProfile: '',
settings: Object.assign({}, settingDefaults), settings: _.cloneDeep(settingDefaults),
settingsRev: {}, settingsRev: {},
libs: false, libs: false,
libsRev: 0, libsRev: 0,
@@ -365,14 +369,30 @@ const mutations = {
state.currentProfile = value; state.currentProfile = value;
}, },
setSettings(state, value) { setSettings(state, value) {
const newSettings = Object.assign({}, state.settings, value); let newSettings = Object.assign({}, state.settings, value);
//при смене профиля подгружаются старые настройки, могут отсутствовать атрибуты
//поэтому:
const added = addDefaultsToSettings(newSettings);
if (added)
newSettings = added;
state.settings = newSettings;
},
nightModeToggle(state) {
//переключение режима день-ночь //переключение режима день-ночь
const prevNightMode = state.settings.nightMode; const newSettings = Object.assign({}, state.settings);
if (utils.hasProp(value, 'nightMode') && prevNightMode != value.nightMode) {
saveColorSets(prevNightMode, newSettings); saveColorSets(newSettings.nightMode, newSettings);
restoreColorSets(newSettings.nightMode, newSettings); newSettings.nightMode = !newSettings.nightMode;
if (newSettings.nightMode && !utils.hasProp(newSettings.nightColorSets, 'textColor')) {
// Ночной режим активирован впервые. Цвета заданы по умолчанию.
newSettings.nightColorSets = {textColor: '#778a9e', backgroundColor: '#363131'};
} }
restoreColorSets(newSettings.nightMode, newSettings);
state.settings = newSettings; state.settings = newSettings;
}, },
setSettingsRev(state, value) { setSettingsRev(state, value) {