Compare commits
1 Commits
1.1.0-1
...
dependabot
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6e0cec19c1 |
@@ -20,6 +20,7 @@ import StdDialog from './share/StdDialog.vue';
|
|||||||
import sanitizeHtml from 'sanitize-html';
|
import sanitizeHtml from 'sanitize-html';
|
||||||
|
|
||||||
import miscApi from '../api/misc';
|
import miscApi from '../api/misc';
|
||||||
|
import * as utils from '../share/utils';
|
||||||
|
|
||||||
const componentOptions = {
|
const componentOptions = {
|
||||||
components: {
|
components: {
|
||||||
@@ -30,10 +31,7 @@ const componentOptions = {
|
|||||||
mode: function() {
|
mode: function() {
|
||||||
this.setAppTitle();
|
this.setAppTitle();
|
||||||
this.redirectIfNeeded();
|
this.redirectIfNeeded();
|
||||||
},
|
}
|
||||||
nightMode() {
|
|
||||||
this.setNightMode();
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
|
|
||||||
};
|
};
|
||||||
@@ -47,34 +45,6 @@ class App {
|
|||||||
this.uistate = this.$store.state.uistate;
|
this.uistate = this.$store.state.uistate;
|
||||||
this.config = this.$store.state.config;
|
this.config = this.$store.state.config;
|
||||||
|
|
||||||
//dark mode
|
|
||||||
let darkMode = null;
|
|
||||||
this.$root.setDarkMode = (value) => {
|
|
||||||
if (darkMode !== value) {
|
|
||||||
const vars = [
|
|
||||||
'--bg-app-color', '--text-app-color', '--bg-dialog-color', '--text-anchor-color',
|
|
||||||
'--bg-loader-color', '--bg-input-color', '--bg-btn-color1', '--bg-btn-color2',
|
|
||||||
'--bg-header-color1', '--bg-header-color2', '--bg-header-color3',
|
|
||||||
'--bg-menu-color1', '--bg-menu-color2', '--text-menu-color', '--text-ubtn-color',
|
|
||||||
'--text-tb-normal', '--bg-tb-normal', '--bg-tb-hover',
|
|
||||||
'--text-tb-active', '--bg-tb-active', '--bg-tb-active-hover',
|
|
||||||
'--text-tb-disabled', '--bg-tb-disabled',
|
|
||||||
'--bg-selected-item-color1', '--bg-selected-item-color2',
|
|
||||||
];
|
|
||||||
|
|
||||||
let root = document.querySelector(':root');
|
|
||||||
let cs = getComputedStyle(root);
|
|
||||||
|
|
||||||
let mode = (value ? '-dark' : '-light');
|
|
||||||
for (const v of vars) {
|
|
||||||
const propValue = cs.getPropertyValue(`${v}${mode}`);
|
|
||||||
root.style.setProperty(v, propValue);
|
|
||||||
}
|
|
||||||
|
|
||||||
darkMode = value;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
//root route
|
//root route
|
||||||
let cachedRoute = '';
|
let cachedRoute = '';
|
||||||
let cachedPath = '';
|
let cachedPath = '';
|
||||||
@@ -86,7 +56,7 @@ class App {
|
|||||||
|
|
||||||
}
|
}
|
||||||
return cachedRoute;
|
return cachedRoute;
|
||||||
};
|
}
|
||||||
|
|
||||||
this.$router.beforeEach((to, from, next) => {
|
this.$router.beforeEach((to, from, next) => {
|
||||||
//распознавание хоста, если присутствует домен 3-уровня "b.", то разрешена только определенная страница
|
//распознавание хоста, если присутствует домен 3-уровня "b.", то разрешена только определенная страница
|
||||||
@@ -142,8 +112,6 @@ class App {
|
|||||||
window.addEventListener('resize', (event) => {
|
window.addEventListener('resize', (event) => {
|
||||||
this.$root.eventHook('resize', event);
|
this.$root.eventHook('resize', event);
|
||||||
});
|
});
|
||||||
|
|
||||||
this.setNightMode();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
mounted() {
|
mounted() {
|
||||||
@@ -177,6 +145,38 @@ class App {
|
|||||||
})();
|
})();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
toggleCollapse() {
|
||||||
|
this.commit('uistate/setAsideBarCollapse', !this.uistate.asideBarCollapse);
|
||||||
|
this.$root.eventHook('resize');
|
||||||
|
}
|
||||||
|
|
||||||
|
get isCollapse() {
|
||||||
|
return this.uistate.asideBarCollapse;
|
||||||
|
}
|
||||||
|
|
||||||
|
get asideWidth() {
|
||||||
|
if (this.uistate.asideBarCollapse) {
|
||||||
|
return 64;
|
||||||
|
} else {
|
||||||
|
return 170;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
get buttonCollapseIcon() {
|
||||||
|
if (this.uistate.asideBarCollapse) {
|
||||||
|
return 'el-icon-d-arrow-right';
|
||||||
|
} else {
|
||||||
|
return 'el-icon-d-arrow-left';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
get appName() {
|
||||||
|
if (this.isCollapse)
|
||||||
|
return '<br><br>';
|
||||||
|
else
|
||||||
|
return `${this.config.name} <br>v${this.config.version}`;
|
||||||
|
}
|
||||||
|
|
||||||
get apiError() {
|
get apiError() {
|
||||||
return this.state.apiError;
|
return this.state.apiError;
|
||||||
}
|
}
|
||||||
@@ -185,15 +185,6 @@ class App {
|
|||||||
return this.$root.getRootRoute();
|
return this.$root.getRootRoute();
|
||||||
}
|
}
|
||||||
|
|
||||||
get nightMode() {
|
|
||||||
return this.$store.state.reader.settings.nightMode;
|
|
||||||
}
|
|
||||||
|
|
||||||
setNightMode() {
|
|
||||||
this.$root.setDarkMode(this.nightMode);
|
|
||||||
this.$q.dark.set(this.nightMode);
|
|
||||||
}
|
|
||||||
|
|
||||||
setAppTitle(title) {
|
setAppTitle(title) {
|
||||||
if (!title) {
|
if (!title) {
|
||||||
if (this.mode == 'liberama') {
|
if (this.mode == 'liberama') {
|
||||||
@@ -216,15 +207,26 @@ class App {
|
|||||||
return this.$store.state.config.mode;
|
return this.$store.state.config.mode;
|
||||||
}
|
}
|
||||||
|
|
||||||
redirectIfNeeded() {
|
get isReaderActive() {
|
||||||
const search = window.location.search.substr(1);
|
return (this.rootRoute == '/reader' || this.rootRoute == '/external-libs');
|
||||||
|
}
|
||||||
|
|
||||||
//распознавание параметра url вида "?url=<link>" и редирект при необходимости
|
redirectIfNeeded() {
|
||||||
const s = search.split('url=');
|
if ((this.mode == 'reader' || this.mode == 'omnireader' || this.mode == 'liberama')) {
|
||||||
const url = s[1] || '';
|
const search = window.location.search.substr(1);
|
||||||
if (url) {
|
|
||||||
window.history.replaceState({}, '', '/');
|
//распознавание параметра url вида "?url=<link>" и редирект при необходимости
|
||||||
this.$router.replace({ path: '/reader', query: {url} });
|
if (!this.isReaderActive) {
|
||||||
|
const s = search.split('url=');
|
||||||
|
const url = s[1] || '';
|
||||||
|
const q = utils.parseQuery(s[0] || '');
|
||||||
|
if (url) {
|
||||||
|
q.url = url;
|
||||||
|
}
|
||||||
|
|
||||||
|
window.history.replaceState({}, '', '/');
|
||||||
|
this.$router.replace({ path: '/reader', query: q });
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -234,151 +236,22 @@ export default vueComponent(App);
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
|
.app-name {
|
||||||
|
margin-left: 10px;
|
||||||
|
margin-top: 10px;
|
||||||
|
text-align: center;
|
||||||
|
line-height: 140%;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
/* color schemes */
|
|
||||||
:root {
|
|
||||||
/* current */
|
|
||||||
--bg-app-color: #fff;
|
|
||||||
--text-app-color: #000;
|
|
||||||
--bg-dialog-color: #fff;
|
|
||||||
--text-anchor-color: #00f;
|
|
||||||
--bg-loader-color: #ebe2c9;
|
|
||||||
--bg-input-color: #eee;
|
|
||||||
--bg-btn-color1: #1976d2;
|
|
||||||
--bg-btn-color2: #eee;
|
|
||||||
--bg-header-color1: #007000;
|
|
||||||
--bg-header-color2: #59b04f;
|
|
||||||
--bg-header-color3: #bbdefb;
|
|
||||||
--bg-menu-color1: #eee;
|
|
||||||
--bg-menu-color2: #e0e0e0;
|
|
||||||
--text-menu-color: #757575;
|
|
||||||
--text-ubtn-color: #bbb;
|
|
||||||
|
|
||||||
--text-tb-normal: #3e843e;
|
|
||||||
--bg-tb-normal: #e6edf4;
|
|
||||||
--bg-tb-hover: #fff;
|
|
||||||
--text-tb-active: #fff;
|
|
||||||
--bg-tb-active: #8ab45f;
|
|
||||||
--bg-tb-active-hover: #81c581;
|
|
||||||
--text-tb-disabled: #d3d3d3;
|
|
||||||
--bg-tb-disabled: #808080;
|
|
||||||
|
|
||||||
--bg-selected-item-color1: #b0f0b0;
|
|
||||||
--bg-selected-item-color2: #d0f5d0;
|
|
||||||
|
|
||||||
/* light */
|
|
||||||
--bg-app-color-light: #fff;
|
|
||||||
--text-app-color-light: #000;
|
|
||||||
--bg-dialog-color-light: #fff;
|
|
||||||
--text-anchor-color-light: #00f;
|
|
||||||
--bg-loader-color-light: #ebe2c9;
|
|
||||||
--bg-input-color-light: #eee;
|
|
||||||
--bg-btn-color1-light: #1976d2;
|
|
||||||
--bg-btn-color2-light: #eee;
|
|
||||||
--bg-header-color1-light: #007000;
|
|
||||||
--bg-header-color2-light: #59b04f;
|
|
||||||
--bg-header-color3-light: #bbdefb;
|
|
||||||
--bg-menu-color1-light: #eee;
|
|
||||||
--bg-menu-color2-light: #e0e0e0;
|
|
||||||
--text-menu-color-light: #757575;
|
|
||||||
--text-ubtn-color-light: #bbb;
|
|
||||||
|
|
||||||
--text-tb-normal-light: #3e843e;
|
|
||||||
--bg-tb-normal-light: #e6edf4;
|
|
||||||
--bg-tb-hover-light: #fff;
|
|
||||||
--text-tb-active-light: #fff;
|
|
||||||
--bg-tb-active-light: #8ab45f;
|
|
||||||
--bg-tb-active-hover-light: #81c581;
|
|
||||||
--text-tb-disabled-light: #d3d3d3;
|
|
||||||
--bg-tb-disabled-light: #808080;
|
|
||||||
|
|
||||||
--bg-selected-item-color1-light: #b0f0b0;
|
|
||||||
--bg-selected-item-color2-light: #d0f5d0;
|
|
||||||
|
|
||||||
/* dark */
|
|
||||||
--bg-app-color-dark: #222;
|
|
||||||
--text-app-color-dark: #ccc;
|
|
||||||
--bg-dialog-color-dark: #444;
|
|
||||||
--text-anchor-color-dark: #09f;
|
|
||||||
--bg-loader-color-dark: #222;
|
|
||||||
--bg-input-color-dark: #333;
|
|
||||||
--bg-btn-color1-dark: #00695c;
|
|
||||||
--bg-btn-color2-dark: #333;
|
|
||||||
--bg-header-color1-dark: #004000;
|
|
||||||
--bg-header-color2-dark: #29901f;
|
|
||||||
--bg-header-color3-dark: #335673;
|
|
||||||
--bg-menu-color1-dark: #333;
|
|
||||||
--bg-menu-color2-dark: #424242;
|
|
||||||
--text-menu-color-dark: #858585;
|
|
||||||
--text-ubtn-color-dark: #555;
|
|
||||||
|
|
||||||
--text-tb-normal-dark: #3e843e;
|
|
||||||
--bg-tb-normal-dark: #ddd;
|
|
||||||
--bg-tb-hover-dark: #ccc;
|
|
||||||
--text-tb-active-dark: #ddd;
|
|
||||||
--bg-tb-active-dark: #7aa44f;
|
|
||||||
--bg-tb-active-hover-dark: #71b571;
|
|
||||||
--text-tb-disabled-dark: #d3d3d3;
|
|
||||||
--bg-tb-disabled-dark: #808080;
|
|
||||||
|
|
||||||
--bg-selected-item-color1-dark: #605020;
|
|
||||||
--bg-selected-item-color2-dark: #403010;
|
|
||||||
}
|
|
||||||
|
|
||||||
a {
|
|
||||||
color: var(--text-anchor-color);
|
|
||||||
}
|
|
||||||
|
|
||||||
.bg-app, .text-bg-app {
|
|
||||||
background-color: var(--bg-app-color);
|
|
||||||
}
|
|
||||||
|
|
||||||
.text-app {
|
|
||||||
color: var(--text-app-color);
|
|
||||||
}
|
|
||||||
|
|
||||||
.bg-dialog {
|
|
||||||
background-color: var(--bg-dialog-color);
|
|
||||||
}
|
|
||||||
|
|
||||||
.bg-input {
|
|
||||||
background-color: var(--bg-input-color);
|
|
||||||
}
|
|
||||||
|
|
||||||
.bg-btn1 {
|
|
||||||
background-color: var(--bg-btn-color1);
|
|
||||||
}
|
|
||||||
|
|
||||||
.bg-btn2 {
|
|
||||||
background-color: var(--bg-btn-color2);
|
|
||||||
}
|
|
||||||
|
|
||||||
.bg-menu-1 {
|
|
||||||
background-color: var(--bg-menu-color1);
|
|
||||||
}
|
|
||||||
|
|
||||||
.bg-menu-2 {
|
|
||||||
background-color: var(--bg-menu-color2);
|
|
||||||
}
|
|
||||||
|
|
||||||
.text-menu {
|
|
||||||
color: var(--text-menu-color);
|
|
||||||
}
|
|
||||||
|
|
||||||
.bg-header-3 {
|
|
||||||
background-color: var(--bg-header-color3);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* main section */
|
|
||||||
body, html, #app {
|
body, html, #app {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
font: normal 12pt ReaderDefault;
|
font: normal 12pt ReaderDefault;
|
||||||
background-color: #333;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.q-notifications__list--top {
|
.q-notifications__list--top {
|
||||||
|
|||||||
@@ -5,13 +5,13 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<div class="col column fit">
|
<div class="col column fit">
|
||||||
<div class="row items-center top-panel bg-menu-2">
|
<div class="row items-center top-panel bg-grey-3">
|
||||||
<q-btn :disabled="!selected" class="q-mr-md" round dense color="blue" icon="la la-check" size="16px" @click.stop="openSelected">
|
<q-btn :disabled="!selected" class="q-mr-md" round dense color="blue" icon="la la-check" size="16px" @click.stop="openSelected">
|
||||||
<q-tooltip :delay="1500" anchor="bottom middle" content-style="font-size: 80%">
|
<q-tooltip :delay="1500" anchor="bottom middle" content-style="font-size: 80%">
|
||||||
Открыть выбранную закладку
|
Открыть выбранную закладку
|
||||||
</q-tooltip>
|
</q-tooltip>
|
||||||
</q-btn>
|
</q-btn>
|
||||||
<q-input ref="search" v-model="search" bg-color="input" class="col" outlined dense placeholder="Найти">
|
<q-input ref="search" v-model="search" class="col" outlined dense bg-color="white" placeholder="Найти">
|
||||||
<template #append>
|
<template #append>
|
||||||
<q-icon v-if="search !== ''" name="la la-times" class="cursor-pointer" @click="resetSearch" />
|
<q-icon v-if="search !== ''" name="la la-times" class="cursor-pointer" @click="resetSearch" />
|
||||||
</template>
|
</template>
|
||||||
@@ -19,7 +19,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="col row">
|
<div class="col row">
|
||||||
<div class="left-panel column items-center no-wrap bg-menu-1">
|
<div class="left-panel column items-center no-wrap bg-grey-3">
|
||||||
<q-btn class="q-my-sm" round dense color="blue" icon="la la-plus" size="14px" @click.stop="addBookmark">
|
<q-btn class="q-my-sm" round dense color="blue" icon="la la-plus" size="14px" @click.stop="addBookmark">
|
||||||
<q-tooltip :delay="1500" anchor="bottom middle" content-style="font-size: 80%">
|
<q-tooltip :delay="1500" anchor="bottom middle" content-style="font-size: 80%">
|
||||||
Добавить закладку
|
Добавить закладку
|
||||||
@@ -62,7 +62,6 @@
|
|||||||
v-model:ticked="ticked"
|
v-model:ticked="ticked"
|
||||||
v-model:expanded="expanded"
|
v-model:expanded="expanded"
|
||||||
class="q-my-xs"
|
class="q-my-xs"
|
||||||
color="input"
|
|
||||||
:nodes="nodes"
|
:nodes="nodes"
|
||||||
node-key="key"
|
node-key="key"
|
||||||
tick-strategy="leaf"
|
tick-strategy="leaf"
|
||||||
|
|||||||
@@ -29,7 +29,6 @@
|
|||||||
ref="rootLink"
|
ref="rootLink"
|
||||||
v-model="rootLink"
|
v-model="rootLink"
|
||||||
class="q-mr-sm"
|
class="q-mr-sm"
|
||||||
bg-color="input"
|
|
||||||
:options="rootLinkOptions"
|
:options="rootLinkOptions"
|
||||||
style="width: 230px"
|
style="width: 230px"
|
||||||
dropdown-icon="la la-angle-down la-sm"
|
dropdown-icon="la la-angle-down la-sm"
|
||||||
@@ -59,7 +58,6 @@
|
|||||||
ref="selectedLink"
|
ref="selectedLink"
|
||||||
v-model="selectedLink"
|
v-model="selectedLink"
|
||||||
class="q-mr-sm"
|
class="q-mr-sm"
|
||||||
bg-color="input"
|
|
||||||
:options="selectedLinkOptions"
|
:options="selectedLinkOptions"
|
||||||
style="width: 50px"
|
style="width: 50px"
|
||||||
dropdown-icon="la la-angle-down la-sm"
|
dropdown-icon="la la-angle-down la-sm"
|
||||||
@@ -75,8 +73,8 @@
|
|||||||
ref="input"
|
ref="input"
|
||||||
v-model="bookUrl"
|
v-model="bookUrl"
|
||||||
class="col q-mr-sm"
|
class="col q-mr-sm"
|
||||||
bg-color="input"
|
|
||||||
outlined dense
|
outlined dense
|
||||||
|
bg-color="white"
|
||||||
placeholder="Скопируйте сюда ссылку на книгу и нажмите 'Открыть'"
|
placeholder="Скопируйте сюда ссылку на книгу и нажмите 'Открыть'"
|
||||||
@focus="selectAllOnFocus" @keydown="bookUrlKeyDown"
|
@focus="selectAllOnFocus" @keydown="bookUrlKeyDown"
|
||||||
>
|
>
|
||||||
@@ -110,7 +108,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="separator"></div>
|
<div class="separator"></div>
|
||||||
|
|
||||||
<div ref="frameBox" class="col fit" style="position: relative; background-color: white">
|
<div ref="frameBox" class="col fit" style="position: relative;">
|
||||||
<div ref="frameWrap" class="overflow-hidden">
|
<div ref="frameWrap" class="overflow-hidden">
|
||||||
<iframe v-if="frameVisible" ref="frame" :src="frameSrc" frameborder="0" allow="clipboard-read; clipboard-write"></iframe>
|
<iframe v-if="frameVisible" ref="frame" :src="frameSrc" frameborder="0" allow="clipboard-read; clipboard-write"></iframe>
|
||||||
</div>
|
</div>
|
||||||
@@ -135,8 +133,8 @@
|
|||||||
ref="bookmarkLink"
|
ref="bookmarkLink"
|
||||||
v-model="bookmarkLink"
|
v-model="bookmarkLink"
|
||||||
class="col q-mr-sm"
|
class="col q-mr-sm"
|
||||||
bg-color="input"
|
|
||||||
outlined dense
|
outlined dense
|
||||||
|
bg-color="white"
|
||||||
placeholder="Ссылка для закладки" maxlength="2000" @focus="selectAllOnFocus" @keydown="bookmarkLinkKeyDown"
|
placeholder="Ссылка для закладки" maxlength="2000" @focus="selectAllOnFocus" @keydown="bookmarkLinkKeyDown"
|
||||||
>
|
>
|
||||||
</q-input>
|
</q-input>
|
||||||
@@ -145,7 +143,6 @@
|
|||||||
ref="defaultRootLink"
|
ref="defaultRootLink"
|
||||||
v-model="defaultRootLink"
|
v-model="defaultRootLink"
|
||||||
class="q-mr-sm"
|
class="q-mr-sm"
|
||||||
bg-color="input"
|
|
||||||
:options="defaultRootLinkOptions"
|
:options="defaultRootLinkOptions"
|
||||||
style="width: 50px"
|
style="width: 50px"
|
||||||
dropdown-icon="la la-angle-down la-sm"
|
dropdown-icon="la la-angle-down la-sm"
|
||||||
@@ -162,8 +159,8 @@
|
|||||||
ref="bookmarkDesc"
|
ref="bookmarkDesc"
|
||||||
v-model="bookmarkDesc"
|
v-model="bookmarkDesc"
|
||||||
class="col q-mr-sm"
|
class="col q-mr-sm"
|
||||||
bg-color="input"
|
|
||||||
outlined dense
|
outlined dense
|
||||||
|
bg-color="white"
|
||||||
placeholder="Описание" style="width: 400px" maxlength="100" @focus="selectAllOnFocus" @keydown="bookmarkDescKeyDown"
|
placeholder="Описание" style="width: 400px" maxlength="100" @focus="selectAllOnFocus" @keydown="bookmarkDescKeyDown"
|
||||||
>
|
>
|
||||||
</q-input>
|
</q-input>
|
||||||
@@ -312,7 +309,6 @@ class ExternalLibs {
|
|||||||
inpxUrl = '';
|
inpxUrl = '';
|
||||||
|
|
||||||
created() {
|
created() {
|
||||||
this.commit = this.$store.commit;
|
|
||||||
this.oldStartLink = '';
|
this.oldStartLink = '';
|
||||||
this.justOpened = true;
|
this.justOpened = true;
|
||||||
this.$root.addEventHook('key', this.keyHook);
|
this.$root.addEventHook('key', this.keyHook);
|
||||||
@@ -405,8 +401,6 @@ class ExternalLibs {
|
|||||||
this.ready = true;
|
this.ready = true;
|
||||||
if (d.data)
|
if (d.data)
|
||||||
this.libs = _.cloneDeep(d.data);
|
this.libs = _.cloneDeep(d.data);
|
||||||
if (d.sets)
|
|
||||||
this.updateSets(d.sets);
|
|
||||||
} else if (d.type == 'notify') {
|
} else if (d.type == 'notify') {
|
||||||
this.$root.notify.success(d.data, '', {position: 'bottom-right'});
|
this.$root.notify.success(d.data, '', {position: 'bottom-right'});
|
||||||
}
|
}
|
||||||
@@ -451,11 +445,6 @@ class ExternalLibs {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
updateSets(sets) {
|
|
||||||
if (sets.nightMode !== this.nightMode)
|
|
||||||
this.commit('reader/nightModeToggle');
|
|
||||||
}
|
|
||||||
|
|
||||||
commitLibs(libs) {
|
commitLibs(libs) {
|
||||||
this.sendMessage({type: 'libs', data: libs});
|
this.sendMessage({type: 'libs', data: libs});
|
||||||
}
|
}
|
||||||
@@ -504,24 +493,14 @@ class ExternalLibs {
|
|||||||
return this.$store.state.config.mode;
|
return this.$store.state.config.mode;
|
||||||
}
|
}
|
||||||
|
|
||||||
get nightMode() {
|
|
||||||
return this.$store.state.reader.settings.nightMode;
|
|
||||||
}
|
|
||||||
|
|
||||||
get header() {
|
get header() {
|
||||||
let result = [this.ready ? 'Сетевая библиотека' : 'Загрузка...'];
|
let result = (this.ready ? 'Сетевая библиотека' : 'Загрузка...');
|
||||||
if (this.ready && this.selectedLink) {
|
if (this.ready && this.selectedLink) {
|
||||||
|
let title = `${(this.libs.comment ? this.libs.comment + ' ': '') + lu.removeProtocol(this.libs.startLink)}`;
|
||||||
if (this.inpxReady && this.inpxTitle) {
|
if (this.inpxReady && this.inpxTitle)
|
||||||
result.push(this.inpxTitle);
|
title = `${this.inpxTitle} ${lu.removeProtocol(this.inpxUrl)}`;
|
||||||
result.push(lu.removeProtocol(this.inpxUrl));
|
result += ` | ${title}`;
|
||||||
} else {
|
|
||||||
result.push(this.libs.comment);
|
|
||||||
result.push(lu.removeProtocol(this.libs.startLink));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
result = result.filter(s => s).join(' | ');
|
|
||||||
this.$root.setAppTitle(result);
|
this.$root.setAppTitle(result);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,20 +4,20 @@
|
|||||||
Оглавление/закладки
|
Оглавление/закладки
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<div class="bg-menu-1 row">
|
<div class="bg-grey-3 row">
|
||||||
<q-tabs
|
<q-tabs
|
||||||
v-model="selectedTab"
|
v-model="selectedTab"
|
||||||
active-color="app"
|
active-color="black"
|
||||||
active-bg-color="app"
|
active-bg-color="white"
|
||||||
indicator-color="bg-app"
|
indicator-color="white"
|
||||||
dense
|
dense
|
||||||
no-caps
|
no-caps
|
||||||
inline-label
|
inline-label
|
||||||
class="no-mp bg-menu-2 text-menu"
|
class="no-mp bg-grey-4 text-grey-7"
|
||||||
>
|
>
|
||||||
<q-tab name="contents" icon="la la-list" label="Оглавление" />
|
<q-tab name="contents" icon="la la-list" label="Оглавление" />
|
||||||
<q-tab name="images" icon="la la-image" label="Изображения" />
|
<q-tab name="images" icon="la la-image" label="Изображения" />
|
||||||
<!--q-tab name="bookmarks" icon="la la-bookmark" label="Закладки" /-->
|
<q-tab name="bookmarks" icon="la la-bookmark" label="Закладки" />
|
||||||
</q-tabs>
|
</q-tabs>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -80,13 +80,13 @@
|
|||||||
<div class="image-num">
|
<div class="image-num">
|
||||||
{{ item.num }}
|
{{ item.num }}
|
||||||
</div>
|
</div>
|
||||||
<div v-show="item.type == 'image/jpeg'" class="image-type text-black it-jpg-color row justify-center">
|
<div v-show="item.type == 'image/jpeg'" class="image-type it-jpg-color row justify-center">
|
||||||
JPG
|
JPG
|
||||||
</div>
|
</div>
|
||||||
<div v-show="item.type == 'image/png'" class="image-type text-black it-png-color row justify-center">
|
<div v-show="item.type == 'image/png'" class="image-type it-png-color row justify-center">
|
||||||
PNG
|
PNG
|
||||||
</div>
|
</div>
|
||||||
<div v-show="!item.local" class="image-type text-black it-net-color row justify-center">
|
<div v-show="!item.local" class="image-type it-net-color row justify-center">
|
||||||
INET
|
INET
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -250,7 +250,7 @@ class ContentsPage {
|
|||||||
const bin = parsed.binary[image.id];
|
const bin = parsed.binary[image.id];
|
||||||
const type = (bin ? bin.type : '');
|
const type = (bin ? bin.type : '');
|
||||||
|
|
||||||
const label = (image.alt ? image.alt : '<span style="font-size: 90%; color: var(--bg-menu-color2)"><i>Без названия</i></span>');
|
const label = (image.alt ? image.alt : '<span style="font-size: 90%; color: #dddddd"><i>Без названия</i></span>');
|
||||||
const indentStyle = getIndentStyle(1);
|
const indentStyle = getIndentStyle(1);
|
||||||
const labelStyle = getLabelStyle(1);
|
const labelStyle = getLabelStyle(1);
|
||||||
|
|
||||||
@@ -466,31 +466,27 @@ export default vueComponent(ContentsPage);
|
|||||||
}
|
}
|
||||||
|
|
||||||
.item, .subitem, .item-book-pos, .subitem-book-pos {
|
.item, .subitem, .item-book-pos, .subitem-book-pos {
|
||||||
border-bottom: 1px solid var(--bg-menu-color2);
|
border-bottom: 1px solid #e0e0e0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.item:hover, .subitem:hover {
|
.item:hover, .subitem:hover {
|
||||||
background-color: var(--bg-menu-color2);
|
background-color: #f0f0f0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.item-book-pos {
|
.item-book-pos {
|
||||||
opacity: 1;
|
background-color: #b0f0b0;
|
||||||
background-color: var(--bg-selected-item-color1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.subitem-book-pos {
|
.subitem-book-pos {
|
||||||
opacity: 1;
|
background-color: #d0f5d0;
|
||||||
background-color: var(--bg-selected-item-color2);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.item-book-pos:hover {
|
.item-book-pos:hover {
|
||||||
opacity: 0.8;
|
background-color: #b0e0b0;
|
||||||
transition: opacity 0.2s linear;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.subitem-book-pos:hover {
|
.subitem-book-pos:hover {
|
||||||
opacity: 0.8;
|
background-color: #d0f0d0;
|
||||||
transition: opacity 0.2s linear;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.expand-button, .no-expand-button {
|
.expand-button, .no-expand-button {
|
||||||
@@ -539,7 +535,6 @@ export default vueComponent(ContentsPage);
|
|||||||
|
|
||||||
.image-thumb {
|
.image-thumb {
|
||||||
height: 50px;
|
height: 50px;
|
||||||
background-color: white;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.loading-img-icon {
|
.loading-img-icon {
|
||||||
|
|||||||
@@ -59,7 +59,7 @@ class CommonHelpPage {
|
|||||||
}
|
}
|
||||||
|
|
||||||
get bookmarkText() {
|
get bookmarkText() {
|
||||||
return `javascript:location.href='${window.location.protocol}//${window.location.host}/#/reader?url='+location.href;`
|
return `javascript:location.href='https://${window.location.host}/?url='+location.href;`
|
||||||
}
|
}
|
||||||
|
|
||||||
async copyText(text, mes) {
|
async copyText(text, mes) {
|
||||||
@@ -88,6 +88,6 @@ export default vueComponent(CommonHelpPage);
|
|||||||
margin-left: 10px;
|
margin-left: 10px;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
font-size: 120%;
|
font-size: 120%;
|
||||||
color: var(--text-anchor-color);
|
color: blue;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -1,20 +1,20 @@
|
|||||||
<template>
|
<template>
|
||||||
<Window style="z-index: 200" @close="close">
|
<Window @close="close" style="z-index: 200">
|
||||||
<template #header>
|
<template #header>
|
||||||
Справка
|
Справка
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<div class="col column" style="min-width: 600px">
|
<div class="col column" style="min-width: 600px">
|
||||||
<div class="bg-menu-1 row">
|
<div class="bg-grey-3 row">
|
||||||
<q-tabs
|
<q-tabs
|
||||||
v-model="selectedTab"
|
v-model="selectedTab"
|
||||||
active-color="app"
|
active-color="black"
|
||||||
active-bg-color="app"
|
active-bg-color="white"
|
||||||
indicator-color="bg-app"
|
indicator-color="white"
|
||||||
dense
|
dense
|
||||||
no-caps
|
no-caps
|
||||||
inline-label
|
inline-label
|
||||||
class="bg-menu-2 text-menu"
|
class="bg-grey-4 text-grey-7"
|
||||||
>
|
>
|
||||||
<q-tab v-for="btn in buttons" :key="btn.value" :name="btn.value" :label="btn.label" />
|
<q-tab v-for="btn in buttons" :key="btn.value" :name="btn.value" :label="btn.label" />
|
||||||
</q-tabs>
|
</q-tabs>
|
||||||
|
|||||||
@@ -72,7 +72,7 @@ p {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.clickable {
|
.clickable {
|
||||||
color: var(--text-anchor-color);
|
color: blue;
|
||||||
text-decoration: underline;
|
text-decoration: underline;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -119,12 +119,8 @@ class LibsPage {
|
|||||||
return this.$store.state.reader.libs;
|
return this.$store.state.reader.libs;
|
||||||
}
|
}
|
||||||
|
|
||||||
get nightMode() {
|
|
||||||
return this.$store.state.reader.settings.nightMode;
|
|
||||||
}
|
|
||||||
|
|
||||||
sendLibs() {
|
sendLibs() {
|
||||||
this.sendMessage({type: 'libs', data: _.cloneDeep(this.libs), sets: {nightMode: this.nightMode}});
|
this.sendMessage({type: 'libs', data: _.cloneDeep(this.libs)});
|
||||||
}
|
}
|
||||||
|
|
||||||
close() {
|
close() {
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
<div class="col-auto column justify-start items-center no-wrap overflow-hidden">
|
<div class="col-auto column justify-start items-center no-wrap overflow-hidden">
|
||||||
<q-input
|
<q-input
|
||||||
ref="input" v-model="bookUrl" class="full-width q-px-sm" style="max-width: 700px"
|
ref="input" v-model="bookUrl" class="full-width q-px-sm" style="max-width: 700px"
|
||||||
outlined dense bg-color="input" placeholder="Ссылка на книгу или веб-страницу" @keydown="onInputKeydown"
|
outlined dense bg-color="white" placeholder="Ссылка на книгу или веб-страницу" @keydown="onInputKeydown"
|
||||||
>
|
>
|
||||||
<template #append>
|
<template #append>
|
||||||
<q-btn rounded flat style="width: 40px" icon="la la-check" @click="submitUrl" />
|
<q-btn rounded flat style="width: 40px" icon="la la-check" @click="submitUrl" />
|
||||||
@@ -29,13 +29,13 @@
|
|||||||
/>
|
/>
|
||||||
|
|
||||||
<div class="q-my-sm"></div>
|
<div class="q-my-sm"></div>
|
||||||
<q-btn no-caps dense class="q-px-sm" color="btn1" size="13px" @click="loadFileClick">
|
<q-btn no-caps dense class="q-px-sm" color="primary" size="13px" @click="loadFileClick">
|
||||||
<q-icon class="q-mr-xs" name="la la-caret-square-up" size="24px" />
|
<q-icon class="q-mr-xs" name="la la-caret-square-up" size="24px" />
|
||||||
Загрузить файл с диска
|
Загрузить файл с диска
|
||||||
</q-btn>
|
</q-btn>
|
||||||
|
|
||||||
<div class="q-my-sm"></div>
|
<div class="q-my-sm"></div>
|
||||||
<q-btn no-caps dense class="q-px-sm" color="btn1" size="13px" @click="loadBufferClick">
|
<q-btn no-caps dense class="q-px-sm" color="primary" size="13px" @click="loadBufferClick">
|
||||||
<q-icon class="q-mr-xs" name="la la-comment" size="24px" />
|
<q-icon class="q-mr-xs" name="la la-comment" size="24px" />
|
||||||
Из буфера обмена
|
Из буфера обмена
|
||||||
</q-btn>
|
</q-btn>
|
||||||
@@ -158,7 +158,7 @@ class LoaderPage {
|
|||||||
|
|
||||||
loadBuffer(opts) {
|
loadBuffer(opts) {
|
||||||
if (opts.buffer.length) {
|
if (opts.buffer.length) {
|
||||||
const file = new File([opts.buffer], `paste_from_clipboard_#${utils.randomHexString(10)}`);
|
const file = new File([opts.buffer], 'dummyName-PasteFromClipboard');
|
||||||
this.$emit('load-file', {file});
|
this.$emit('load-file', {file});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -217,7 +217,7 @@ export default vueComponent(LoaderPage);
|
|||||||
}
|
}
|
||||||
|
|
||||||
.clickable {
|
.clickable {
|
||||||
color: var(--text-anchor-color);
|
color: blue;
|
||||||
text-decoration: underline;
|
text-decoration: underline;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,11 +8,9 @@
|
|||||||
</span>
|
</span>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<div class="fit column main">
|
<q-input v-model="bookTitle" class="q-px-sm" dense borderless placeholder="Введите название текста" />
|
||||||
<q-input v-model="bookTitle" class="q-px-sm" dense borderless placeholder="Введите название текста" />
|
<hr />
|
||||||
<hr />
|
<textarea ref="textArea" class="text" @paste="calcTitle"></textarea>
|
||||||
<textarea ref="textArea" class="main text" @paste="calcTitle"></textarea>
|
|
||||||
</div>
|
|
||||||
</Window>
|
</Window>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@@ -41,10 +39,6 @@ class PasteTextPage {
|
|||||||
this.$refs.textArea.focus();
|
this.$refs.textArea.focus();
|
||||||
}
|
}
|
||||||
|
|
||||||
get dark() {
|
|
||||||
return this.$store.state.reader.settings.nightMode;
|
|
||||||
}
|
|
||||||
|
|
||||||
getNonEmptyLine3words(text, count) {
|
getNonEmptyLine3words(text, count) {
|
||||||
let result = '';
|
let result = '';
|
||||||
const lines = text.split("\n");
|
const lines = text.split("\n");
|
||||||
@@ -121,11 +115,6 @@ export default vueComponent(PasteTextPage);
|
|||||||
outline: none;
|
outline: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.main {
|
|
||||||
color: var(--text-app-color);
|
|
||||||
background-color: var(--bg-app-color);
|
|
||||||
}
|
|
||||||
|
|
||||||
hr {
|
hr {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
|
|||||||
@@ -115,12 +115,6 @@
|
|||||||
|
|
||||||
<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%">
|
||||||
@@ -142,7 +136,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="col row relative-position main">
|
<div class="main col row relative-position">
|
||||||
<keep-alive>
|
<keep-alive>
|
||||||
<component
|
<component
|
||||||
:is="activePage"
|
:is="activePage"
|
||||||
@@ -296,8 +290,6 @@ class Reader {
|
|||||||
contentsActive = false;
|
contentsActive = false;
|
||||||
libsActive = false;
|
libsActive = false;
|
||||||
recentBooksActive = false;
|
recentBooksActive = false;
|
||||||
|
|
||||||
nightModeActive = false;
|
|
||||||
clickControlActive = false;
|
clickControlActive = false;
|
||||||
settingsActive = false;
|
settingsActive = false;
|
||||||
|
|
||||||
@@ -470,8 +462,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.nightModeActive = settings.nightMode;
|
this.clickControl = settings.clickControl;
|
||||||
this.clickControlActive = settings.clickControl;
|
this.clickControlActive = this.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;
|
||||||
@@ -1022,16 +1014,10 @@ class Reader {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
nightModeToggle() {
|
|
||||||
if (!this.nightModeActive && !utils.hasProp(this.settings.nightColorSets, 'textColor')) {
|
|
||||||
this.$root.notify.warning(`Ночной режим активирован впервые. Цвета заданы по умолчанию.`);
|
|
||||||
}
|
|
||||||
|
|
||||||
this.commit('reader/nightModeToggle');
|
|
||||||
}
|
|
||||||
|
|
||||||
clickControlToggle() {
|
clickControlToggle() {
|
||||||
this.commit('reader/setSettings', {clickControl: !this.clickControlActive});
|
const newSettings = _.cloneDeep(this.settings);
|
||||||
|
newSettings.clickControl = !this.clickControl;
|
||||||
|
this.commit('reader/setSettings', newSettings);
|
||||||
}
|
}
|
||||||
|
|
||||||
offlineModeToggle() {
|
offlineModeToggle() {
|
||||||
@@ -1133,7 +1119,6 @@ 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':
|
||||||
@@ -1182,7 +1167,7 @@ class Reader {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async activateClickMapPage() {
|
async activateClickMapPage() {
|
||||||
if (this.clickControlActive && this.showClickMapPage && !this.clickMapActive) {
|
if (this.clickControl && 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;
|
||||||
@@ -1540,9 +1525,6 @@ 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;
|
||||||
@@ -1692,15 +1674,15 @@ export default vueComponent(Reader);
|
|||||||
}
|
}
|
||||||
|
|
||||||
.main {
|
.main {
|
||||||
background-color: var(--bg-loader-color);
|
background-color: #EBE2C9;
|
||||||
color: var(--text-app-color);
|
color: #000;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tool-button {
|
.tool-button {
|
||||||
margin: 0px 2px 7px 2px;
|
margin: 0px 2px 7px 2px;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
color: var(--text-tb-normal);
|
color: #3E843E;
|
||||||
background-color: var(--bg-tb-normal);
|
background-color: #E6EDF4;
|
||||||
min-height: 38px;
|
min-height: 38px;
|
||||||
min-width: 38px;
|
min-width: 38px;
|
||||||
height: 38px;
|
height: 38px;
|
||||||
@@ -1712,33 +1694,34 @@ export default vueComponent(Reader);
|
|||||||
}
|
}
|
||||||
|
|
||||||
.tool-button:hover {
|
.tool-button:hover {
|
||||||
background-color: var(--bg-tb-hover);
|
background-color: white;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tool-button-active {
|
.tool-button-active {
|
||||||
box-shadow: 0 0 0;
|
box-shadow: 0 0 0;
|
||||||
color: var(--text-tb-active);
|
color: white;
|
||||||
background-color: var(--bg-tb-active);
|
background-color: #8AB45F;
|
||||||
position: relative;
|
position: relative;
|
||||||
top: 1px;
|
top: 1px;
|
||||||
left: 1px;
|
left: 1px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tool-button-active:hover {
|
.tool-button-active:hover {
|
||||||
background-color: var(--bg-tb-active-hover);
|
color: white;
|
||||||
|
background-color: #81C581;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tool-button-disabled {
|
.tool-button-disabled {
|
||||||
color: var(--text-tb-disabled);
|
color: lightgray;
|
||||||
background-color: var(--bg-tb-disabled);
|
background-color: gray;
|
||||||
cursor: default;
|
cursor: default;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tool-button-disabled:hover {
|
.tool-button-disabled:hover {
|
||||||
color: var(--text-tb-disabled);
|
color: lightgray;
|
||||||
background-color: var(--bg-tb-disabled);
|
background-color: gray;
|
||||||
cursor: default;
|
cursor: default;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -12,14 +12,14 @@
|
|||||||
<span class="clickable" style="font-size: 13px" @click="openVersionHistory">Посмотреть историю версий</span>
|
<span class="clickable" style="font-size: 13px" @click="openVersionHistory">Посмотреть историю версий</span>
|
||||||
|
|
||||||
<template #footer>
|
<template #footer>
|
||||||
<q-btn class="q-px-md" color="btn2" text-color="app" dense no-caps @click="whatsNewDisable">
|
<q-btn class="q-px-md" dense no-caps @click="whatsNewDisable">
|
||||||
Больше не показывать
|
Больше не показывать
|
||||||
</q-btn>
|
</q-btn>
|
||||||
</template>
|
</template>
|
||||||
</Dialog>
|
</Dialog>
|
||||||
|
|
||||||
<q-dialog ref="dialog2" v-model="donationVisible" style="z-index: 100" no-route-dismiss no-esc-dismiss no-backdrop-dismiss>
|
<q-dialog ref="dialog2" v-model="donationVisible" style="z-index: 100" no-route-dismiss no-esc-dismiss no-backdrop-dismiss>
|
||||||
<div class="column bg-dialog no-wrap q-pa-md">
|
<div class="column bg-white no-wrap q-pa-md">
|
||||||
<div class="row justify-center q-mb-md">
|
<div class="row justify-center q-mb-md">
|
||||||
Здравствуйте, дорогие читатели!
|
Здравствуйте, дорогие читатели!
|
||||||
</div>
|
</div>
|
||||||
@@ -84,7 +84,7 @@
|
|||||||
|
|
||||||
<div style="word-break: normal">
|
<div style="word-break: normal">
|
||||||
Если вы пытаетесь вставить текст в читалку из буфера обмена, пожалуйста воспользуйтесь кнопкой
|
Если вы пытаетесь вставить текст в читалку из буфера обмена, пожалуйста воспользуйтесь кнопкой
|
||||||
<q-btn no-caps dense class="q-px-sm" color="btn1" size="13px" @click="loadBufferClick">
|
<q-btn no-caps dense class="q-px-sm" color="primary" size="13px" @click="loadBufferClick">
|
||||||
<q-icon class="q-mr-xs" name="la la-comment" size="24px" />
|
<q-icon class="q-mr-xs" name="la la-comment" size="24px" />
|
||||||
Из буфера обмена
|
Из буфера обмена
|
||||||
</q-btn>
|
</q-btn>
|
||||||
@@ -233,7 +233,7 @@ export default vueComponent(ReaderDialogs);
|
|||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
.clickable {
|
.clickable {
|
||||||
color: var(--text-anchor-color);
|
color: blue;
|
||||||
text-decoration: underline;
|
text-decoration: underline;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,29 +36,29 @@
|
|||||||
<a ref="download" style="display: none;" target="_blank"></a>
|
<a ref="download" style="display: none;" target="_blank"></a>
|
||||||
|
|
||||||
<div id="vs-container" ref="vsContainer" class="recent-books-scroll col">
|
<div id="vs-container" ref="vsContainer" class="recent-books-scroll col">
|
||||||
<div ref="header" class="scroll-header row bg-header-3">
|
<div ref="header" class="scroll-header row bg-blue-2">
|
||||||
<q-btn class="tool-button" color="btn2" round @click="showSameBookClick">
|
<q-btn class="tool-button" round @click="showSameBookClick">
|
||||||
<q-icon name="la la-caret-right" class="icon" :class="{'expanded-icon': showSameBook}" color="green-8" size="24px" />
|
<q-icon name="la la-caret-right" class="icon" :class="{'expanded-icon': showSameBook}" color="green-8" size="24px" />
|
||||||
<q-tooltip :delay="1500" anchor="bottom middle" content-style="font-size: 80%">
|
<q-tooltip :delay="1500" anchor="bottom middle" content-style="font-size: 80%">
|
||||||
Показать/скрыть версии книг
|
Показать/скрыть версии книг
|
||||||
</q-tooltip>
|
</q-tooltip>
|
||||||
</q-btn>
|
</q-btn>
|
||||||
|
|
||||||
<q-btn class="tool-button" color="btn2" round @click="scrollToBegin">
|
<q-btn class="tool-button" round @click="scrollToBegin">
|
||||||
<q-icon name="la la-arrow-up" color="green-8" size="24px" />
|
<q-icon name="la la-arrow-up" color="green-8" size="24px" />
|
||||||
<q-tooltip :delay="1500" anchor="bottom middle" content-style="font-size: 80%">
|
<q-tooltip :delay="1500" anchor="bottom middle" content-style="font-size: 80%">
|
||||||
В начало списка
|
В начало списка
|
||||||
</q-tooltip>
|
</q-tooltip>
|
||||||
</q-btn>
|
</q-btn>
|
||||||
|
|
||||||
<q-btn class="tool-button" color="btn2" round @click="scrollToEnd">
|
<q-btn class="tool-button" round @click="scrollToEnd">
|
||||||
<q-icon name="la la-arrow-down" color="green-8" size="24px" />
|
<q-icon name="la la-arrow-down" color="green-8" size="24px" />
|
||||||
<q-tooltip :delay="1500" anchor="bottom middle" content-style="font-size: 80%">
|
<q-tooltip :delay="1500" anchor="bottom middle" content-style="font-size: 80%">
|
||||||
В конец списка
|
В конец списка
|
||||||
</q-tooltip>
|
</q-tooltip>
|
||||||
</q-btn>
|
</q-btn>
|
||||||
|
|
||||||
<q-btn class="tool-button" color="btn2" round @click="scrollToActiveBook">
|
<q-btn class="tool-button" round @click="scrollToActiveBook">
|
||||||
<q-icon name="la la-location-arrow" color="green-8" size="24px" />
|
<q-icon name="la la-location-arrow" color="green-8" size="24px" />
|
||||||
<q-tooltip :delay="1500" anchor="bottom middle" content-style="font-size: 80%">
|
<q-tooltip :delay="1500" anchor="bottom middle" content-style="font-size: 80%">
|
||||||
На текущую книгу
|
На текущую книгу
|
||||||
@@ -71,7 +71,7 @@
|
|||||||
class="q-ml-sm q-mt-xs"
|
class="q-ml-sm q-mt-xs"
|
||||||
outlined dense
|
outlined dense
|
||||||
style="width: 185px"
|
style="width: 185px"
|
||||||
bg-color="input"
|
bg-color="white"
|
||||||
placeholder="Найти"
|
placeholder="Найти"
|
||||||
@click.stop
|
@click.stop
|
||||||
>
|
>
|
||||||
@@ -86,7 +86,7 @@
|
|||||||
class="q-ml-sm q-mt-xs"
|
class="q-ml-sm q-mt-xs"
|
||||||
:options="sortMethodOptions"
|
:options="sortMethodOptions"
|
||||||
style="width: 180px"
|
style="width: 180px"
|
||||||
bg-color="input"
|
bg-color="white"
|
||||||
dropdown-icon="la la-angle-down la-sm"
|
dropdown-icon="la la-angle-down la-sm"
|
||||||
outlined dense emit-value map-options display-value-sanitize options-sanitize
|
outlined dense emit-value map-options display-value-sanitize options-sanitize
|
||||||
options-html display-value-html
|
options-html display-value-html
|
||||||
@@ -140,7 +140,7 @@
|
|||||||
class="col" style="border: 1px solid #cccccc; border-bottom: 0; padding: 4px; line-height: 140%;"
|
class="col" style="border: 1px solid #cccccc; border-bottom: 0; padding: 4px; line-height: 140%;"
|
||||||
:style="{ 'width': (380 - 40*(+item.inGroup)) + 'px' }"
|
:style="{ 'width': (380 - 40*(+item.inGroup)) + 'px' }"
|
||||||
>
|
>
|
||||||
<div :class="dark ? 'text-lime-4' : 'text-green-10'" style="font-size: 80%">
|
<div class="text-green-10" style="font-size: 80%">
|
||||||
{{ item.desc.author }}
|
{{ item.desc.author }}
|
||||||
</div>
|
</div>
|
||||||
<div style="font-size: 75%">
|
<div style="font-size: 75%">
|
||||||
@@ -349,10 +349,6 @@ class RecentBooksPage {
|
|||||||
return this.$store.state.config.bucEnabled && this.bucEnabled;
|
return this.$store.state.config.bucEnabled && this.bucEnabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
get dark() {
|
|
||||||
return this.$store.state.reader.settings.nightMode;
|
|
||||||
}
|
|
||||||
|
|
||||||
async updateTableData() {
|
async updateTableData() {
|
||||||
if (!this.inited)
|
if (!this.inited)
|
||||||
return;
|
return;
|
||||||
@@ -851,7 +847,7 @@ export default vueComponent(RecentBooksPage);
|
|||||||
position: sticky;
|
position: sticky;
|
||||||
z-index: 1;
|
z-index: 1;
|
||||||
top: 0;
|
top: 0;
|
||||||
border-bottom: 2px solid var(--bg-menu-color2);
|
border-bottom: 2px solid #aaaaaa;
|
||||||
padding-left: 5px;
|
padding-left: 5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -874,15 +870,15 @@ export default vueComponent(RecentBooksPage);
|
|||||||
}
|
}
|
||||||
|
|
||||||
.even {
|
.even {
|
||||||
background-color: var(--bg-menu-color1);
|
background-color: #f2f2f2;
|
||||||
}
|
}
|
||||||
|
|
||||||
.active-book {
|
.active-book {
|
||||||
background-color: var(--bg-selected-item-color1) !important;
|
background-color: #b0f0b0 !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.active-parent-book {
|
.active-parent-book {
|
||||||
background-color: var(--bg-selected-item-color2) !important;
|
background-color: #ffbbbb !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.icon {
|
.icon {
|
||||||
@@ -899,6 +895,7 @@ export default vueComponent(RecentBooksPage);
|
|||||||
min-height: 30px;
|
min-height: 30px;
|
||||||
height: 30px;
|
height: 30px;
|
||||||
margin: 10px 6px 0px 3px;
|
margin: 10px 6px 0px 3px;
|
||||||
|
background-color: white;
|
||||||
}
|
}
|
||||||
|
|
||||||
.row-info-bottom {
|
.row-info-bottom {
|
||||||
|
|||||||
@@ -11,7 +11,6 @@
|
|||||||
<q-input
|
<q-input
|
||||||
ref="input" v-model="needle"
|
ref="input" v-model="needle"
|
||||||
class="col" outlined dense
|
class="col" outlined dense
|
||||||
bg-color="input"
|
|
||||||
placeholder="Найти"
|
placeholder="Найти"
|
||||||
@keydown="inputKeyDown"
|
@keydown="inputKeyDown"
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -80,7 +80,7 @@ export default vueComponent(SetPositionPage);
|
|||||||
.slider {
|
.slider {
|
||||||
margin: 0 20px 0 20px;
|
margin: 0 20px 0 20px;
|
||||||
height: 35px;
|
height: 35px;
|
||||||
background-color: var(--bg-input-color);
|
background-color: #efefef;
|
||||||
border-radius: 15px;
|
border-radius: 15px;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -71,7 +71,7 @@
|
|||||||
Качество
|
Качество
|
||||||
</div>
|
</div>
|
||||||
<div class="col row">
|
<div class="col row">
|
||||||
<NumInput v-model="form.pdfQuality" bg-color="input" class="col-5" :min="10" :max="100">
|
<NumInput v-model="form.pdfQuality" class="col-5" :min="10" :max="100">
|
||||||
<q-tooltip :delay="1000" anchor="top middle" self="bottom middle" content-style="font-size: 80%">
|
<q-tooltip :delay="1000" anchor="top middle" self="bottom middle" content-style="font-size: 80%">
|
||||||
Качество конвертирования Pdf в Fb2. Чем значение выше, тем больше<br>
|
Качество конвертирования Pdf в Fb2. Чем значение выше, тем больше<br>
|
||||||
размер итогового файла. Если сервер отказывается конвертировать<br>
|
размер итогового файла. Если сервер отказывается конвертировать<br>
|
||||||
@@ -93,7 +93,7 @@
|
|||||||
Качество
|
Качество
|
||||||
</div>
|
</div>
|
||||||
<div class="col row">
|
<div class="col row">
|
||||||
<NumInput v-model="form.djvuQuality" bg-color="input" class="col-5" :min="10" :max="100">
|
<NumInput v-model="form.djvuQuality" class="col-5" :min="10" :max="100">
|
||||||
<q-tooltip :delay="1000" anchor="top middle" self="bottom middle" content-style="font-size: 80%">
|
<q-tooltip :delay="1000" anchor="top middle" self="bottom middle" content-style="font-size: 80%">
|
||||||
Качество конвертирования Djvu в Fb2. Чем значение выше, тем больше<br>
|
Качество конвертирования Djvu в Fb2. Чем значение выше, тем больше<br>
|
||||||
размер итогового файла. Если сервер отказывается конвертировать<br>
|
размер итогового файла. Если сервер отказывается конвертировать<br>
|
||||||
|
|||||||
@@ -1,14 +1,14 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="fit column">
|
<div class="fit column">
|
||||||
<div class="bg-menu-1 row">
|
<div class="bg-grey-3 row">
|
||||||
<q-tabs
|
<q-tabs
|
||||||
v-model="selectedTab"
|
v-model="selectedTab"
|
||||||
active-color="app"
|
active-color="black"
|
||||||
active-bg-color="app"
|
active-bg-color="white"
|
||||||
indicator-color="bg-app"
|
indicator-color="white"
|
||||||
dense
|
dense
|
||||||
no-caps
|
no-caps
|
||||||
class="bg-menu-2 text-menu"
|
class="bg-grey-4 text-grey-7"
|
||||||
>
|
>
|
||||||
<q-tab name="mouse" label="Мышь/тачскрин" />
|
<q-tab name="mouse" label="Мышь/тачскрин" />
|
||||||
<q-tab name="keyboard" label="Клавиатура" />
|
<q-tab name="keyboard" label="Клавиатура" />
|
||||||
|
|||||||
@@ -2,10 +2,10 @@
|
|||||||
<div class="table col column no-wrap">
|
<div class="table col column no-wrap">
|
||||||
<!-- header -->
|
<!-- header -->
|
||||||
<div class="table-row row">
|
<div class="table-row row">
|
||||||
<div class="desc q-pa-sm bg-header-3">
|
<div class="desc q-pa-sm bg-blue-2">
|
||||||
Команда
|
Команда
|
||||||
</div>
|
</div>
|
||||||
<div class="hotKeys col q-pa-sm bg-header-3 row no-wrap">
|
<div class="hotKeys col q-pa-sm bg-blue-2 row no-wrap">
|
||||||
<div style="width: 80px">
|
<div style="width: 80px">
|
||||||
Сочетание клавиш
|
Сочетание клавиш
|
||||||
</div>
|
</div>
|
||||||
@@ -14,7 +14,7 @@
|
|||||||
v-model="search"
|
v-model="search"
|
||||||
class="q-ml-sm col"
|
class="q-ml-sm col"
|
||||||
outlined dense
|
outlined dense
|
||||||
bg-color="input"
|
bg-color="grey-4"
|
||||||
placeholder="Найти"
|
placeholder="Найти"
|
||||||
@click.stop
|
@click.stop
|
||||||
/>
|
/>
|
||||||
@@ -234,11 +234,11 @@ export default vueComponent(UserHotKeys);
|
|||||||
}
|
}
|
||||||
|
|
||||||
.table-row:nth-child(even) {
|
.table-row:nth-child(even) {
|
||||||
background-color: var(--bg-menu-color1);
|
background-color: #f7f7f7;
|
||||||
}
|
}
|
||||||
|
|
||||||
.table-row:hover {
|
.table-row:hover {
|
||||||
background-color: var(--bg-menu-color2);
|
background-color: #f0f0f0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.desc {
|
.desc {
|
||||||
|
|||||||
@@ -70,6 +70,20 @@
|
|||||||
Другое
|
Другое
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="sets-item row">
|
||||||
|
<div class="sets-label label">
|
||||||
|
Обработка
|
||||||
|
</div>
|
||||||
|
<q-checkbox v-model="form.lazyParseEnabled" size="xs" label="Предварительная подготовка текста">
|
||||||
|
<q-tooltip :delay="1000" anchor="top middle" self="bottom middle" content-style="font-size: 80%">
|
||||||
|
Включение этой опции позволяет делать предварительную<br>
|
||||||
|
подготовку всего текста в ленивом режиме сразу после<br>
|
||||||
|
загрузки книги. Это может повысить отзывчивость читалки,<br>
|
||||||
|
но нагружает процессор каждый раз при открытии книги.
|
||||||
|
</q-tooltip>
|
||||||
|
</q-checkbox>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="sets-item row">
|
<div class="sets-item row">
|
||||||
<div class="sets-label label">
|
<div class="sets-label label">
|
||||||
Парам. в URL
|
Парам. в URL
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
Тип
|
Тип
|
||||||
</div>
|
</div>
|
||||||
<q-select
|
<q-select
|
||||||
v-model="form.pageChangeAnimation" bg-color="input" class="col-left" :options="pageChangeAnimationOptions"
|
v-model="form.pageChangeAnimation" class="col-left" :options="pageChangeAnimationOptions"
|
||||||
dropdown-icon="la la-angle-down la-sm"
|
dropdown-icon="la la-angle-down la-sm"
|
||||||
outlined dense emit-value map-options
|
outlined dense emit-value map-options
|
||||||
/>
|
/>
|
||||||
@@ -20,7 +20,7 @@
|
|||||||
<div class="sets-label label">
|
<div class="sets-label label">
|
||||||
Скорость
|
Скорость
|
||||||
</div>
|
</div>
|
||||||
<NumInput v-model="form.pageChangeAnimationSpeed" bg-color="input" class="col-left" :min="0" :max="100" :disable="form.pageChangeAnimation == ''" />
|
<NumInput v-model="form.pageChangeAnimationSpeed" class="col-left" :min="0" :max="100" :disable="form.pageChangeAnimation == ''" />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!---------------------------------------------->
|
<!---------------------------------------------->
|
||||||
|
|||||||
@@ -30,7 +30,6 @@
|
|||||||
<q-select
|
<q-select
|
||||||
v-model="currentProfile" :options="currentProfileOptions"
|
v-model="currentProfile" :options="currentProfileOptions"
|
||||||
style="width: 275px"
|
style="width: 275px"
|
||||||
bg-color="input"
|
|
||||||
dropdown-icon="la la-angle-down la-sm"
|
dropdown-icon="la la-angle-down la-sm"
|
||||||
outlined dense emit-value map-options display-value-sanitize options-sanitize
|
outlined dense emit-value map-options display-value-sanitize options-sanitize
|
||||||
/>
|
/>
|
||||||
@@ -38,13 +37,13 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="sets-item row">
|
<div class="sets-item row">
|
||||||
<div class="sets-label label"></div>
|
<div class="sets-label label"></div>
|
||||||
<q-btn class="sets-button" color="btn2" text-color="app" dense no-caps @click="addProfile">
|
<q-btn class="sets-button" dense no-caps @click="addProfile">
|
||||||
Добавить
|
Добавить
|
||||||
</q-btn>
|
</q-btn>
|
||||||
<q-btn class="sets-button" color="btn2" text-color="app" dense no-caps @click="delProfile">
|
<q-btn class="sets-button" dense no-caps @click="delProfile">
|
||||||
Удалить
|
Удалить
|
||||||
</q-btn>
|
</q-btn>
|
||||||
<q-btn class="sets-button" color="btn2" text-color="app" dense no-caps @click="delAllProfiles">
|
<q-btn class="sets-button" dense no-caps @click="delAllProfiles">
|
||||||
Удалить все
|
Удалить все
|
||||||
</q-btn>
|
</q-btn>
|
||||||
</div>
|
</div>
|
||||||
@@ -64,7 +63,7 @@
|
|||||||
|
|
||||||
<div class="sets-item row">
|
<div class="sets-item row">
|
||||||
<div class="sets-label label"></div>
|
<div class="sets-label label"></div>
|
||||||
<q-btn class="sets-button" color="btn2" text-color="app" style="width: 250px" dense no-caps @click="showServerStorageKey">
|
<q-btn class="sets-button" style="width: 250px" dense no-caps @click="showServerStorageKey">
|
||||||
<span v-show="serverStorageKeyVisible">Скрыть</span>
|
<span v-show="serverStorageKeyVisible">Скрыть</span>
|
||||||
<span v-show="!serverStorageKeyVisible">Показать</span>
|
<span v-show="!serverStorageKeyVisible">Показать</span>
|
||||||
ключ доступа
|
ключ доступа
|
||||||
@@ -105,13 +104,13 @@
|
|||||||
|
|
||||||
<div class="sets-item row">
|
<div class="sets-item row">
|
||||||
<div class="sets-label label"></div>
|
<div class="sets-label label"></div>
|
||||||
<q-btn class="sets-button" color="btn2" text-color="app" style="width: 250px" dense no-caps @click="enterServerStorageKey">
|
<q-btn class="sets-button" style="width: 250px" dense no-caps @click="enterServerStorageKey">
|
||||||
Ввести ключ доступа
|
Ввести ключ доступа
|
||||||
</q-btn>
|
</q-btn>
|
||||||
</div>
|
</div>
|
||||||
<div class="sets-item row">
|
<div class="sets-item row">
|
||||||
<div class="sets-label label"></div>
|
<div class="sets-label label"></div>
|
||||||
<q-btn class="sets-button" color="btn2" text-color="app" style="width: 250px" dense no-caps @click="generateServerStorageKey">
|
<q-btn class="sets-button" style="width: 250px" dense no-caps @click="generateServerStorageKey">
|
||||||
Сгенерировать новый ключ
|
Сгенерировать новый ключ
|
||||||
</q-btn>
|
</q-btn>
|
||||||
</div>
|
</div>
|
||||||
@@ -358,6 +357,6 @@ export default vueComponent(ProfilesTab);
|
|||||||
margin-left: 5px;
|
margin-left: 5px;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
font-size: 120%;
|
font-size: 120%;
|
||||||
color: var(--text-anchor-color);
|
color: blue;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="fit sets-tab-panel">
|
<div class="fit sets-tab-panel">
|
||||||
<div class="sets-item row">
|
<div class="sets-item row">
|
||||||
<q-btn class="col q-ma-sm" color="btn2" text-color="app" dense no-caps @click="setDefaults">
|
<q-btn class="col q-ma-sm" dense no-caps @click="setDefaults">
|
||||||
Установить по умолчанию
|
Установить по умолчанию
|
||||||
</q-btn>
|
</q-btn>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -9,14 +9,14 @@
|
|||||||
<q-tabs
|
<q-tabs
|
||||||
ref="tabs"
|
ref="tabs"
|
||||||
v-model="selectedTab"
|
v-model="selectedTab"
|
||||||
class="bg-menu-1 text-menu"
|
class="bg-grey-3 text-grey-9"
|
||||||
style="max-width: 130px"
|
style="max-width: 130px"
|
||||||
|
|
||||||
left-icon="la la-caret-up"
|
left-icon="la la-caret-up"
|
||||||
right-icon="la la-caret-down"
|
right-icon="la la-caret-down"
|
||||||
active-color="white"
|
active-color="white"
|
||||||
active-bg-color="primary"
|
active-bg-color="primary"
|
||||||
indicator-color="bg-app"
|
indicator-color="black"
|
||||||
vertical
|
vertical
|
||||||
no-caps
|
no-caps
|
||||||
stretch
|
stretch
|
||||||
@@ -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" @tab-event="tabEvent" />
|
<ViewTab v-if="selectedTab == 'view'" :form="form" />
|
||||||
<!-- Кнопки ---------------------------------------------------------------------->
|
<!-- Кнопки ---------------------------------------------------------------------->
|
||||||
<ToolBarTab v-if="selectedTab == 'toolbar'" :form="form" />
|
<ToolBarTab v-if="selectedTab == 'toolbar'" :form="form" />
|
||||||
<!-- Управление ------------------------------------------------------------------>
|
<!-- Управление ------------------------------------------------------------------>
|
||||||
@@ -178,7 +178,6 @@ 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;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -37,7 +37,7 @@
|
|||||||
Разница размеров
|
Разница размеров
|
||||||
</div>
|
</div>
|
||||||
<div class="col row">
|
<div class="col row">
|
||||||
<NumInput v-model="form.bucSizeDiff" bg-color="input" style="width: 200px" />
|
<NumInput v-model="form.bucSizeDiff" style="width: 200px" />
|
||||||
|
|
||||||
<q-tooltip :delay="1000" anchor="top middle" self="bottom middle" content-style="font-size: 80%">
|
<q-tooltip :delay="1000" anchor="top middle" self="bottom middle" content-style="font-size: 80%">
|
||||||
Уведомлять о наличии обновления книги в списке загруженных<br>
|
Уведомлять о наличии обновления книги в списке загруженных<br>
|
||||||
@@ -73,7 +73,7 @@
|
|||||||
<div class="sets-label label"></div>
|
<div class="sets-label label"></div>
|
||||||
<div class="col-4"></div>
|
<div class="col-4"></div>
|
||||||
<div class="col row">
|
<div class="col row">
|
||||||
<NumInput v-model="form.bucCancelDays" bg-color="input" :min="1" :max="10000" />
|
<NumInput v-model="form.bucCancelDays" :min="1" :max="10000" />
|
||||||
|
|
||||||
<q-tooltip :delay="1000" anchor="top middle" self="bottom middle" content-style="font-size: 80%">
|
<q-tooltip :delay="1000" anchor="top middle" self="bottom middle" content-style="font-size: 80%">
|
||||||
Снимать флаг проверки с книги, если не было<br>
|
Снимать флаг проверки с книги, если не было<br>
|
||||||
|
|||||||
@@ -13,7 +13,6 @@
|
|||||||
<q-input
|
<q-input
|
||||||
v-model="textColorFiltered"
|
v-model="textColorFiltered"
|
||||||
class="col-left no-mp"
|
class="col-left no-mp"
|
||||||
bg-color="input"
|
|
||||||
outlined dense
|
outlined dense
|
||||||
|
|
||||||
:rules="['hexColor']"
|
:rules="['hexColor']"
|
||||||
@@ -44,7 +43,6 @@
|
|||||||
<q-input
|
<q-input
|
||||||
v-model="bgColorFiltered"
|
v-model="bgColorFiltered"
|
||||||
class="col-left no-mp"
|
class="col-left no-mp"
|
||||||
bg-color="input"
|
|
||||||
outlined dense
|
outlined dense
|
||||||
|
|
||||||
:rules="['hexColor']"
|
:rules="['hexColor']"
|
||||||
@@ -73,7 +71,6 @@
|
|||||||
v-model="form.wallpaper"
|
v-model="form.wallpaper"
|
||||||
class="col-left no-mp"
|
class="col-left no-mp"
|
||||||
:options="wallpaperOptions"
|
:options="wallpaperOptions"
|
||||||
bg-color="input"
|
|
||||||
dropdown-icon="la la-angle-down la-sm"
|
dropdown-icon="la la-angle-down la-sm"
|
||||||
outlined dense emit-value map-options
|
outlined dense emit-value map-options
|
||||||
>
|
>
|
||||||
|
|||||||
@@ -11,14 +11,14 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="col row">
|
<div class="col row">
|
||||||
<q-select
|
<q-select
|
||||||
v-model="form.fontName" class="col-left" bg-color="input" :options="fontsOptions" :disable="form.webFontName != ''"
|
v-model="form.fontName" class="col-left" :options="fontsOptions" :disable="form.webFontName != ''"
|
||||||
dropdown-icon="la la-angle-down la-sm"
|
dropdown-icon="la la-angle-down la-sm"
|
||||||
outlined dense emit-value map-options
|
outlined dense emit-value map-options
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<div class="q-px-sm" />
|
<div class="q-px-sm" />
|
||||||
<q-select
|
<q-select
|
||||||
v-model="form.webFontName" class="col" bg-color="input" :options="webFontsOptions"
|
v-model="form.webFontName" class="col" :options="webFontsOptions"
|
||||||
dropdown-icon="la la-angle-down la-sm"
|
dropdown-icon="la la-angle-down la-sm"
|
||||||
outlined dense emit-value map-options
|
outlined dense emit-value map-options
|
||||||
>
|
>
|
||||||
@@ -36,7 +36,7 @@
|
|||||||
Размер
|
Размер
|
||||||
</div>
|
</div>
|
||||||
<div class="col row">
|
<div class="col row">
|
||||||
<NumInput v-model="form.fontSize" bg-color="input" class="col-left" :min="5" :max="200" />
|
<NumInput v-model="form.fontSize" class="col-left" :min="5" :max="200" />
|
||||||
|
|
||||||
<div class="col q-pt-xs text-right">
|
<div class="col q-pt-xs text-right">
|
||||||
<a href="https://fonts.google.com/?subset=cyrillic" target="_blank">Примеры</a>
|
<a href="https://fonts.google.com/?subset=cyrillic" target="_blank">Примеры</a>
|
||||||
@@ -49,7 +49,7 @@
|
|||||||
Сдвиг
|
Сдвиг
|
||||||
</div>
|
</div>
|
||||||
<div class="col row">
|
<div class="col row">
|
||||||
<NumInput v-model="vertShift" bg-color="input" class="col-left" :min="-100" :max="100">
|
<NumInput v-model="vertShift" class="col-left" :min="-100" :max="100">
|
||||||
<q-tooltip :delay="1000" anchor="top middle" self="bottom middle" content-style="font-size: 80%">
|
<q-tooltip :delay="1000" anchor="top middle" self="bottom middle" content-style="font-size: 80%">
|
||||||
Сдвиг шрифта по вертикали в процентах от размера.<br>
|
Сдвиг шрифта по вертикали в процентах от размера.<br>
|
||||||
Отрицательное значение сдвигает вверх, положительное -<br>
|
Отрицательное значение сдвигает вверх, положительное -<br>
|
||||||
|
|||||||
@@ -5,13 +5,6 @@
|
|||||||
Режим
|
Режим
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="sets-item row">
|
|
||||||
<div class="sets-label label"></div>
|
|
||||||
<div class="col row">
|
|
||||||
<q-checkbox v-model="nightMode" size="xs" label="Ночной режим" @update:modelValue="nightModeToggle" />
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<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">
|
||||||
@@ -27,13 +20,13 @@
|
|||||||
Отступ границ
|
Отступ границ
|
||||||
</div>
|
</div>
|
||||||
<div class="col row">
|
<div class="col row">
|
||||||
<NumInput v-model="form.indentLR" bg-color="input" class="col-left" :min="0" :max="2000">
|
<NumInput v-model="form.indentLR" class="col-left" :min="0" :max="2000">
|
||||||
<q-tooltip :delay="1000" anchor="top middle" self="bottom middle" content-style="font-size: 80%">
|
<q-tooltip :delay="1000" anchor="top middle" self="bottom middle" content-style="font-size: 80%">
|
||||||
Слева/справа от края экрана
|
Слева/справа от края экрана
|
||||||
</q-tooltip>
|
</q-tooltip>
|
||||||
</NumInput>
|
</NumInput>
|
||||||
<div class="q-px-sm" />
|
<div class="q-px-sm" />
|
||||||
<NumInput v-model="form.indentTB" bg-color="input" class="col" :min="0" :max="2000">
|
<NumInput v-model="form.indentTB" class="col" :min="0" :max="2000">
|
||||||
<q-tooltip :delay="1000" anchor="top middle" self="bottom middle" content-style="font-size: 80%">
|
<q-tooltip :delay="1000" anchor="top middle" self="bottom middle" content-style="font-size: 80%">
|
||||||
Сверху/снизу от края экрана
|
Сверху/снизу от края экрана
|
||||||
</q-tooltip>
|
</q-tooltip>
|
||||||
@@ -46,7 +39,7 @@
|
|||||||
Отступ внутри
|
Отступ внутри
|
||||||
</div>
|
</div>
|
||||||
<div class="col row">
|
<div class="col row">
|
||||||
<NumInput v-model="form.dualIndentLR" bg-color="input" class="col-left" :min="0" :max="2000">
|
<NumInput v-model="form.dualIndentLR" class="col-left" :min="0" :max="2000">
|
||||||
<q-tooltip :delay="1000" anchor="top middle" self="bottom middle" content-style="font-size: 80%">
|
<q-tooltip :delay="1000" anchor="top middle" self="bottom middle" content-style="font-size: 80%">
|
||||||
Слева/справа внутри страницы
|
Слева/справа внутри страницы
|
||||||
</q-tooltip>
|
</q-tooltip>
|
||||||
@@ -67,7 +60,6 @@
|
|||||||
<q-input
|
<q-input
|
||||||
v-model="dualDivColorFiltered"
|
v-model="dualDivColorFiltered"
|
||||||
class="col-left no-mp"
|
class="col-left no-mp"
|
||||||
bg-color="input"
|
|
||||||
outlined dense
|
outlined dense
|
||||||
:rules="['hexColor']"
|
:rules="['hexColor']"
|
||||||
style="max-width: 150px"
|
style="max-width: 150px"
|
||||||
@@ -97,7 +89,7 @@
|
|||||||
Прозрачность
|
Прозрачность
|
||||||
</div>
|
</div>
|
||||||
<div class="col row">
|
<div class="col row">
|
||||||
<NumInput v-model="form.dualDivColorAlpha" bg-color="input" class="col-left" :min="0" :max="1" :digits="2" :step="0.1" />
|
<NumInput v-model="form.dualDivColorAlpha" class="col-left" :min="0" :max="1" :digits="2" :step="0.1" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -106,7 +98,7 @@
|
|||||||
Ширина (px)
|
Ширина (px)
|
||||||
</div>
|
</div>
|
||||||
<div class="col row">
|
<div class="col row">
|
||||||
<NumInput v-model="form.dualDivWidth" bg-color="input" class="col-left" :min="0" :max="100">
|
<NumInput v-model="form.dualDivWidth" class="col-left" :min="0" :max="100">
|
||||||
<q-tooltip :delay="1000" anchor="top middle" self="bottom middle" content-style="font-size: 80%">
|
<q-tooltip :delay="1000" anchor="top middle" self="bottom middle" content-style="font-size: 80%">
|
||||||
Ширина разделителя
|
Ширина разделителя
|
||||||
</q-tooltip>
|
</q-tooltip>
|
||||||
@@ -119,7 +111,7 @@
|
|||||||
Высота (%)
|
Высота (%)
|
||||||
</div>
|
</div>
|
||||||
<div class="col row">
|
<div class="col row">
|
||||||
<NumInput v-model="form.dualDivHeight" bg-color="input" class="col-left" :min="0" :max="100">
|
<NumInput v-model="form.dualDivHeight" class="col-left" :min="0" :max="100">
|
||||||
<q-tooltip :delay="1000" anchor="top middle" self="bottom middle" content-style="font-size: 80%">
|
<q-tooltip :delay="1000" anchor="top middle" self="bottom middle" content-style="font-size: 80%">
|
||||||
Высота разделителя
|
Высота разделителя
|
||||||
</q-tooltip>
|
</q-tooltip>
|
||||||
@@ -132,13 +124,13 @@
|
|||||||
Пунктир
|
Пунктир
|
||||||
</div>
|
</div>
|
||||||
<div class="col row">
|
<div class="col row">
|
||||||
<NumInput v-model="form.dualDivStrokeFill" bg-color="input" class="col-left" :min="0" :max="2000">
|
<NumInput v-model="form.dualDivStrokeFill" class="col-left" :min="0" :max="2000">
|
||||||
<q-tooltip :delay="1000" anchor="top middle" self="bottom middle" content-style="font-size: 80%">
|
<q-tooltip :delay="1000" anchor="top middle" self="bottom middle" content-style="font-size: 80%">
|
||||||
Заполнение пунктира
|
Заполнение пунктира
|
||||||
</q-tooltip>
|
</q-tooltip>
|
||||||
</NumInput>
|
</NumInput>
|
||||||
<div class="q-px-sm" />
|
<div class="q-px-sm" />
|
||||||
<NumInput v-model="form.dualDivStrokeGap" bg-color="input" class="col" :min="0" :max="2000">
|
<NumInput v-model="form.dualDivStrokeGap" class="col" :min="0" :max="2000">
|
||||||
<q-tooltip :delay="1000" anchor="top middle" self="bottom middle" content-style="font-size: 80%">
|
<q-tooltip :delay="1000" anchor="top middle" self="bottom middle" content-style="font-size: 80%">
|
||||||
Промежуток пунктира
|
Промежуток пунктира
|
||||||
</q-tooltip>
|
</q-tooltip>
|
||||||
@@ -151,7 +143,7 @@
|
|||||||
Ширина тени
|
Ширина тени
|
||||||
</div>
|
</div>
|
||||||
<div class="col row">
|
<div class="col row">
|
||||||
<NumInput v-model="form.dualDivShadowWidth" bg-color="input" class="col-left" :min="0" :max="100" />
|
<NumInput v-model="form.dualDivShadowWidth" class="col-left" :min="0" :max="100" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -193,7 +185,6 @@ class Mode {
|
|||||||
|
|
||||||
isFormChanged = false;
|
isFormChanged = false;
|
||||||
dualDivColorFiltered = '';
|
dualDivColorFiltered = '';
|
||||||
nightMode = false;
|
|
||||||
|
|
||||||
created() {
|
created() {
|
||||||
this.formChanged();//no await
|
this.formChanged();//no await
|
||||||
@@ -211,17 +202,11 @@ 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);
|
||||||
|
|||||||
@@ -23,7 +23,6 @@
|
|||||||
<q-input
|
<q-input
|
||||||
v-model="statusBarColorFiltered"
|
v-model="statusBarColorFiltered"
|
||||||
class="col-left no-mp"
|
class="col-left no-mp"
|
||||||
bg-color="input"
|
|
||||||
outlined dense
|
outlined dense
|
||||||
:rules="['hexColor']"
|
:rules="['hexColor']"
|
||||||
style="max-width: 150px"
|
style="max-width: 150px"
|
||||||
@@ -53,7 +52,7 @@
|
|||||||
Прозрачность
|
Прозрачность
|
||||||
</div>
|
</div>
|
||||||
<div class="col row">
|
<div class="col row">
|
||||||
<NumInput v-model="form.statusBarColorAlpha" bg-color="input" class="col-left" :min="0" :max="1" :digits="2" :step="0.1" />
|
<NumInput v-model="form.statusBarColorAlpha" class="col-left" :min="0" :max="1" :digits="2" :step="0.1" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -62,7 +61,7 @@
|
|||||||
Высота
|
Высота
|
||||||
</div>
|
</div>
|
||||||
<div class="col row">
|
<div class="col row">
|
||||||
<NumInput v-model="form.statusBarHeight" bg-color="input" class="col-left" :min="5" :max="100" />
|
<NumInput v-model="form.statusBarHeight" class="col-left" :min="5" :max="100" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
Интервал
|
Интервал
|
||||||
</div>
|
</div>
|
||||||
<div class="col row">
|
<div class="col row">
|
||||||
<NumInput v-model="form.lineInterval" bg-color="input" class="col-left" :min="0" :max="200" />
|
<NumInput v-model="form.lineInterval" class="col-left" :min="0" :max="200" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -19,7 +19,7 @@
|
|||||||
Параграф
|
Параграф
|
||||||
</div>
|
</div>
|
||||||
<div class="col row">
|
<div class="col row">
|
||||||
<NumInput v-model="form.p" bg-color="input" class="col-left" :min="0" :max="2000" />
|
<NumInput v-model="form.p" class="col-left" :min="0" :max="2000" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -28,7 +28,7 @@
|
|||||||
Сдвиг
|
Сдвиг
|
||||||
</div>
|
</div>
|
||||||
<div class="col row">
|
<div class="col row">
|
||||||
<NumInput v-model="form.textVertShift" bg-color="input" class="col-left" :min="-100" :max="100">
|
<NumInput v-model="form.textVertShift" class="col-left" :min="-100" :max="100">
|
||||||
<q-tooltip :delay="1000" anchor="top middle" self="bottom middle" content-style="font-size: 80%">
|
<q-tooltip :delay="1000" anchor="top middle" self="bottom middle" content-style="font-size: 80%">
|
||||||
Сдвиг текста по вертикали в процентах от размера шрифта.<br>
|
Сдвиг текста по вертикали в процентах от размера шрифта.<br>
|
||||||
Отрицательное значение сдвигает вверх, положительное -<br>
|
Отрицательное значение сдвигает вверх, положительное -<br>
|
||||||
@@ -43,7 +43,7 @@
|
|||||||
Скроллинг
|
Скроллинг
|
||||||
</div>
|
</div>
|
||||||
<div class="col row">
|
<div class="col row">
|
||||||
<NumInput v-model="form.scrollingDelay" bg-color="input" class="col-left" :min="1" :max="10000">
|
<NumInput v-model="form.scrollingDelay" class="col-left" :min="1" :max="10000">
|
||||||
<q-tooltip :delay="1000" anchor="top middle" self="bottom middle" content-style="font-size: 80%">
|
<q-tooltip :delay="1000" anchor="top middle" self="bottom middle" content-style="font-size: 80%">
|
||||||
Замедление скроллинга в миллисекундах.<br>
|
Замедление скроллинга в миллисекундах.<br>
|
||||||
Определяет время, за которое текст<br>
|
Определяет время, за которое текст<br>
|
||||||
@@ -53,7 +53,7 @@
|
|||||||
|
|
||||||
<div class="q-px-sm" />
|
<div class="q-px-sm" />
|
||||||
<q-select
|
<q-select
|
||||||
v-model="form.scrollingType" bg-color="input" class="col" :options="['linear', 'ease', 'ease-in', 'ease-out', 'ease-in-out']"
|
v-model="form.scrollingType" class="col" :options="['linear', 'ease', 'ease-in', 'ease-out', 'ease-in-out']"
|
||||||
dropdown-icon="la la-angle-down la-sm"
|
dropdown-icon="la la-angle-down la-sm"
|
||||||
outlined dense emit-value map-options
|
outlined dense emit-value map-options
|
||||||
>
|
>
|
||||||
@@ -81,7 +81,7 @@
|
|||||||
Компактность
|
Компактность
|
||||||
</div>
|
</div>
|
||||||
<div class="q-px-sm" />
|
<div class="q-px-sm" />
|
||||||
<NumInput v-model="form.compactTextPerc" bg-color="input" class="col" :min="0" :max="100">
|
<NumInput v-model="form.compactTextPerc" class="col" :min="0" :max="100">
|
||||||
<q-tooltip :delay="1000" anchor="top middle" self="bottom middle" content-style="font-size: 80%">
|
<q-tooltip :delay="1000" anchor="top middle" self="bottom middle" content-style="font-size: 80%">
|
||||||
Степень компактности текста в процентах.<br>
|
Степень компактности текста в процентах.<br>
|
||||||
Чем больше компактность, тем хуже выравнивание<br>
|
Чем больше компактность, тем хуже выравнивание<br>
|
||||||
@@ -105,7 +105,7 @@
|
|||||||
Добавлять пустые
|
Добавлять пустые
|
||||||
</div>
|
</div>
|
||||||
<div class="q-px-sm" />
|
<div class="q-px-sm" />
|
||||||
<NumInput v-model="form.addEmptyParagraphs" bg-color="input" class="col" :min="0" :max="2" />
|
<NumInput v-model="form.addEmptyParagraphs" class="col" :min="0" :max="2" />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="sets-item row">
|
<div class="sets-item row">
|
||||||
@@ -135,7 +135,7 @@
|
|||||||
Высота не более
|
Высота не более
|
||||||
</div>
|
</div>
|
||||||
<div class="q-px-sm" />
|
<div class="q-px-sm" />
|
||||||
<NumInput v-model="form.imageHeightLines" bg-color="input" class="col" :min="1" :max="100" :disable="!form.showImages">
|
<NumInput v-model="form.imageHeightLines" class="col" :min="1" :max="100" :disable="!form.showImages">
|
||||||
<q-tooltip :delay="1000" anchor="top middle" self="bottom middle" content-style="font-size: 80%">
|
<q-tooltip :delay="1000" anchor="top middle" self="bottom middle" content-style="font-size: 80%">
|
||||||
Определяет высоту изображения количеством строк.<br>
|
Определяет высоту изображения количеством строк.<br>
|
||||||
В случае превышения высоты, изображение будет<br>
|
В случае превышения высоты, изображение будет<br>
|
||||||
|
|||||||
@@ -2,12 +2,12 @@
|
|||||||
<div class="fit column">
|
<div class="fit column">
|
||||||
<q-tabs
|
<q-tabs
|
||||||
v-model="selectedTab"
|
v-model="selectedTab"
|
||||||
active-color="app"
|
active-color="black"
|
||||||
active-bg-color="app"
|
active-bg-color="white"
|
||||||
indicator-color="bg-app"
|
indicator-color="white"
|
||||||
dense
|
dense
|
||||||
no-caps
|
no-caps
|
||||||
class="no-mp bg-menu-2 text-menu"
|
class="no-mp bg-grey-4 text-grey-7"
|
||||||
>
|
>
|
||||||
<q-tab name="mode" label="Режим" />
|
<q-tab name="mode" label="Режим" />
|
||||||
<q-tab name="color" label="Цвет" />
|
<q-tab name="color" label="Цвет" />
|
||||||
@@ -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" @tab-event="tabEvent" />
|
<Mode v-if="selectedTab == 'mode'" :form="form" />
|
||||||
<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,14 +61,6 @@ 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);
|
||||||
|
|||||||
@@ -433,6 +433,10 @@ class TextPage {
|
|||||||
if (this.lastBook) {
|
if (this.lastBook) {
|
||||||
(async() => {
|
(async() => {
|
||||||
try {
|
try {
|
||||||
|
//подождем ленивый парсинг
|
||||||
|
this.stopLazyParse = true;
|
||||||
|
while (this.doingLazyParse) await utils.sleep(10);
|
||||||
|
|
||||||
const isParsed = await bookManager.hasBookParsed(this.lastBook);
|
const isParsed = await bookManager.hasBookParsed(this.lastBook);
|
||||||
if (!isParsed) {
|
if (!isParsed) {
|
||||||
return;
|
return;
|
||||||
@@ -456,6 +460,8 @@ class TextPage {
|
|||||||
await this.calcPropsAndLoadFonts();
|
await this.calcPropsAndLoadFonts();
|
||||||
|
|
||||||
this.refreshTime();
|
this.refreshTime();
|
||||||
|
if (this.lazyParseEnabled)
|
||||||
|
this.lazyParsePara();
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
this.$root.stdDialog.alert(e.message, 'Ошибка', {color: 'negative'});
|
this.$root.stdDialog.alert(e.message, 'Ошибка', {color: 'negative'});
|
||||||
}
|
}
|
||||||
@@ -832,6 +838,36 @@ class TextPage {
|
|||||||
this.drawStatusBar();
|
this.drawStatusBar();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async lazyParsePara() {
|
||||||
|
if (!this.parsed || this.doingLazyParse)
|
||||||
|
return;
|
||||||
|
this.doingLazyParse = true;
|
||||||
|
let j = 0;
|
||||||
|
let k = 0;
|
||||||
|
let prevPerc = 0;
|
||||||
|
this.stopLazyParse = false;
|
||||||
|
for (let i = 0; i < this.parsed.para.length; i++) {
|
||||||
|
j++;
|
||||||
|
if (j > 1) {
|
||||||
|
await utils.sleep(1);
|
||||||
|
j = 0;
|
||||||
|
}
|
||||||
|
if (this.stopLazyParse)
|
||||||
|
break;
|
||||||
|
this.parsed.parsePara(i);
|
||||||
|
k++;
|
||||||
|
if (k > 100) {
|
||||||
|
let perc = Math.round(i/this.parsed.para.length*100);
|
||||||
|
if (perc != prevPerc)
|
||||||
|
this.drawStatusBar(`Обработка текста ${perc}%`);
|
||||||
|
prevPerc = perc;
|
||||||
|
k = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.drawStatusBar();
|
||||||
|
this.doingLazyParse = false;
|
||||||
|
}
|
||||||
|
|
||||||
async refreshTime() {
|
async refreshTime() {
|
||||||
if (!this.timeRefreshing) {
|
if (!this.timeRefreshing) {
|
||||||
this.timeRefreshing = true;
|
this.timeRefreshing = true;
|
||||||
|
|||||||
@@ -1,18 +1,4 @@
|
|||||||
export const versionHistory = [
|
export const versionHistory = [
|
||||||
{
|
|
||||||
version: '1.1.0',
|
|
||||||
releaseDate: '2023-01-11',
|
|
||||||
showUntil: '2023-01-15',
|
|
||||||
content:
|
|
||||||
`
|
|
||||||
<ul>
|
|
||||||
<li>добавлена опция "Ночной режим" и кнопка на панель</li>
|
|
||||||
<li>исправление багов</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
`
|
|
||||||
},
|
|
||||||
|
|
||||||
{
|
{
|
||||||
version: '1.0.0',
|
version: '1.0.0',
|
||||||
releaseDate: '2022-12-18',
|
releaseDate: '2022-12-18',
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<q-dialog v-model="active" no-route-dismiss @show="onShow" @hide="onHide">
|
<q-dialog v-model="active" no-route-dismiss @show="onShow" @hide="onHide">
|
||||||
<div class="column bg-dialog no-wrap">
|
<div class="column bg-white no-wrap">
|
||||||
<div class="header row">
|
<div class="header row">
|
||||||
<div class="caption col row items-center q-ml-md">
|
<div class="caption col row items-center q-ml-md">
|
||||||
<slot name="header"></slot>
|
<slot name="header"></slot>
|
||||||
|
|||||||
@@ -4,9 +4,9 @@
|
|||||||
outlined dense
|
outlined dense
|
||||||
input-style="text-align: center"
|
input-style="text-align: center"
|
||||||
class="no-mp"
|
class="no-mp"
|
||||||
|
:class="(error ? 'error' : '')"
|
||||||
:disable="disable"
|
:disable="disable"
|
||||||
:mask="mask"
|
:mask="mask"
|
||||||
:error="error"
|
|
||||||
>
|
>
|
||||||
<slot></slot>
|
<slot></slot>
|
||||||
<template #prepend>
|
<template #prepend>
|
||||||
@@ -236,16 +236,23 @@ export default vueComponent(NumInput);
|
|||||||
border-radius: 15px;
|
border-radius: 15px;
|
||||||
width: 30px;
|
width: 30px;
|
||||||
height: 30px;
|
height: 30px;
|
||||||
color: var(--text-ubtn-color);
|
color: #bbb;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
.button:hover {
|
.button:hover {
|
||||||
filter: invert(100%);
|
color: #616161;
|
||||||
|
background-color: #efebe9;
|
||||||
|
}
|
||||||
|
|
||||||
|
.error {
|
||||||
|
background-color: #ffabab;
|
||||||
|
border-radius: 3px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.disable, .disable:hover {
|
.disable, .disable:hover {
|
||||||
cursor: not-allowed;
|
cursor: not-allowed;
|
||||||
filter: invert(0%);
|
color: #bbb;
|
||||||
|
background-color: white;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
@@ -3,7 +3,7 @@
|
|||||||
<slot></slot>
|
<slot></slot>
|
||||||
|
|
||||||
<!--------------------------------------------------->
|
<!--------------------------------------------------->
|
||||||
<div v-show="type == 'alert'" class="bg-dialog no-wrap">
|
<div v-show="type == 'alert'" class="bg-white no-wrap">
|
||||||
<div class="header row">
|
<div class="header row">
|
||||||
<div class="caption col row items-center q-ml-md">
|
<div class="caption col row items-center q-ml-md">
|
||||||
<q-icon v-show="caption" class="q-mr-sm" :class="iconColor" :name="iconName" size="28px"></q-icon>
|
<q-icon v-show="caption" class="q-mr-sm" :class="iconColor" :name="iconName" size="28px"></q-icon>
|
||||||
@@ -28,7 +28,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!--------------------------------------------------->
|
<!--------------------------------------------------->
|
||||||
<div v-show="type == 'confirm'" class="bg-dialog no-wrap">
|
<div v-show="type == 'confirm'" class="bg-white no-wrap">
|
||||||
<div class="header row">
|
<div class="header row">
|
||||||
<div class="caption col row items-center q-ml-md">
|
<div class="caption col row items-center q-ml-md">
|
||||||
<q-icon v-show="caption" class="q-mr-sm" :class="iconColor" :name="iconName" size="28px"></q-icon>
|
<q-icon v-show="caption" class="q-mr-sm" :class="iconColor" :name="iconName" size="28px"></q-icon>
|
||||||
@@ -56,7 +56,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!--------------------------------------------------->
|
<!--------------------------------------------------->
|
||||||
<div v-show="type == 'askYesNo'" class="bg-dialog no-wrap">
|
<div v-show="type == 'askYesNo'" class="bg-white no-wrap">
|
||||||
<div class="header row">
|
<div class="header row">
|
||||||
<div class="caption col row items-center q-ml-md">
|
<div class="caption col row items-center q-ml-md">
|
||||||
<q-icon v-show="caption" class="q-mr-sm" :class="iconColor" :name="iconName" size="28px"></q-icon>
|
<q-icon v-show="caption" class="q-mr-sm" :class="iconColor" :name="iconName" size="28px"></q-icon>
|
||||||
@@ -84,7 +84,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!--------------------------------------------------->
|
<!--------------------------------------------------->
|
||||||
<div v-show="type == 'prompt'" class="bg-dialog no-wrap">
|
<div v-show="type == 'prompt'" class="bg-white no-wrap">
|
||||||
<div class="header row">
|
<div class="header row">
|
||||||
<div class="caption col row items-center q-ml-md">
|
<div class="caption col row items-center q-ml-md">
|
||||||
<q-icon v-show="caption" class="q-mr-sm" :class="iconColor" :name="iconName" size="28px"></q-icon>
|
<q-icon v-show="caption" class="q-mr-sm" :class="iconColor" :name="iconName" size="28px"></q-icon>
|
||||||
@@ -116,7 +116,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!--------------------------------------------------->
|
<!--------------------------------------------------->
|
||||||
<div v-show="type == 'hotKey'" class="bg-dialog no-wrap">
|
<div v-show="type == 'hotKey'" class="bg-white no-wrap">
|
||||||
<div class="header row">
|
<div class="header row">
|
||||||
<div class="caption col row items-center q-ml-md">
|
<div class="caption col row items-center q-ml-md">
|
||||||
<q-icon v-show="caption" class="q-mr-sm" :class="iconColor" :name="iconName" size="28px"></q-icon>
|
<q-icon v-show="caption" class="q-mr-sm" :class="iconColor" :name="iconName" size="28px"></q-icon>
|
||||||
|
|||||||
@@ -148,14 +148,14 @@ export default vueComponent(Window);
|
|||||||
|
|
||||||
.window {
|
.window {
|
||||||
margin: 10px;
|
margin: 10px;
|
||||||
background-color: var(--bg-app-color);
|
background-color: #ffffff;
|
||||||
border: 3px double var(--text-app-color);
|
border: 3px double black;
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
box-shadow: 3px 3px 5px black;
|
box-shadow: 3px 3px 5px black;
|
||||||
}
|
}
|
||||||
|
|
||||||
.header {
|
.header {
|
||||||
background: linear-gradient(to bottom right, var(--bg-header-color1), var(--bg-header-color2));
|
background: linear-gradient(to bottom right, #007000, #59B04F);
|
||||||
align-items: center;
|
align-items: center;
|
||||||
height: 30px;
|
height: 30px;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ import { createStore } from 'vuex';
|
|||||||
import VuexPersistence from 'vuex-persist';
|
import VuexPersistence from 'vuex-persist';
|
||||||
|
|
||||||
import root from './root.js';
|
import root from './root.js';
|
||||||
|
import uistate from './modules/uistate';
|
||||||
import config from './modules/config';
|
import config from './modules/config';
|
||||||
import reader from './modules/reader';
|
import reader from './modules/reader';
|
||||||
|
|
||||||
@@ -12,6 +13,7 @@ const vuexLocal = new VuexPersistence();
|
|||||||
|
|
||||||
export default createStore(Object.assign({}, root, {
|
export default createStore(Object.assign({}, root, {
|
||||||
modules: {
|
modules: {
|
||||||
|
uistate,
|
||||||
config,
|
config,
|
||||||
reader,
|
reader,
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
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';
|
||||||
|
|
||||||
@@ -22,7 +21,6 @@ const readerActions = {
|
|||||||
'copyText': 'Скопировать текст со страницы',
|
'copyText': 'Скопировать текст со страницы',
|
||||||
'convOptions': 'Настроить конвертирование',
|
'convOptions': 'Настроить конвертирование',
|
||||||
'refresh': 'Принудительно обновить книгу',
|
'refresh': 'Принудительно обновить книгу',
|
||||||
'nightMode': 'Ночной режим',
|
|
||||||
'clickControl': 'Управление кликом',
|
'clickControl': 'Управление кликом',
|
||||||
'offlineMode': 'Автономный режим (без интернета)',
|
'offlineMode': 'Автономный режим (без интернета)',
|
||||||
'contents': 'Оглавление/закладки',
|
'contents': 'Оглавление/закладки',
|
||||||
@@ -59,7 +57,6 @@ 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},
|
||||||
];
|
];
|
||||||
@@ -83,7 +80,6 @@ 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']},
|
||||||
|
|
||||||
@@ -161,10 +157,6 @@ const settingDefaults = {
|
|||||||
statusBarColorAlpha: 0.4,
|
statusBarColorAlpha: 0.4,
|
||||||
statusBarClickOpen: true,
|
statusBarClickOpen: true,
|
||||||
|
|
||||||
nightMode: false, //ночной режим
|
|
||||||
dayColorSets: {},
|
|
||||||
nightColorSets: {},
|
|
||||||
|
|
||||||
scrollingDelay: 3000,// замедление, ms
|
scrollingDelay: 3000,// замедление, ms
|
||||||
scrollingType: 'ease-in-out', //linear, ease, ease-in, ease-out, ease-in-out
|
scrollingType: 'ease-in-out', //linear, ease, ease-in, ease-out, ease-in-out
|
||||||
|
|
||||||
@@ -172,6 +164,7 @@ const settingDefaults = {
|
|||||||
pageChangeAnimationSpeed: 80, //0-100%
|
pageChangeAnimationSpeed: 80, //0-100%
|
||||||
|
|
||||||
allowUrlParamBookPos: false,
|
allowUrlParamBookPos: false,
|
||||||
|
lazyParseEnabled: false,
|
||||||
copyFullText: false,
|
copyFullText: false,
|
||||||
showClickMapPage: true,
|
showClickMapPage: true,
|
||||||
clickControl: true,
|
clickControl: true,
|
||||||
@@ -225,8 +218,6 @@ const diffExclude = [];
|
|||||||
for (const hotKey of hotKeys)
|
for (const hotKey of hotKeys)
|
||||||
diffExclude.push(`userHotKeys/${hotKey.name}`);
|
diffExclude.push(`userHotKeys/${hotKey.name}`);
|
||||||
diffExclude.push('userWallpapers');
|
diffExclude.push('userWallpapers');
|
||||||
diffExclude.push('dayColorSets');
|
|
||||||
diffExclude.push('nightColorSets');
|
|
||||||
|
|
||||||
function addDefaultsToSettings(settings) {
|
function addDefaultsToSettings(settings) {
|
||||||
const diff = utils.getObjDiff(settings, settingDefaults, {exclude: diffExclude});
|
const diff = utils.getObjDiff(settings, settingDefaults, {exclude: diffExclude});
|
||||||
@@ -237,33 +228,6 @@ function addDefaultsToSettings(settings) {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
const colorSetsList = [
|
|
||||||
'textColor',
|
|
||||||
'backgroundColor',
|
|
||||||
'wallpaper',
|
|
||||||
'statusBarColorAsText',
|
|
||||||
'statusBarColor',
|
|
||||||
'statusBarColorAlpha',
|
|
||||||
'dualDivColorAsText',
|
|
||||||
'dualDivColor',
|
|
||||||
'dualDivColorAlpha',
|
|
||||||
];
|
|
||||||
|
|
||||||
function saveColorSets(nightMode, settings) {
|
|
||||||
const target = (nightMode ? settings.nightColorSets : settings.dayColorSets);
|
|
||||||
for (const prop of colorSetsList) {
|
|
||||||
target[prop] = settings[prop];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function restoreColorSets(nightMode, settings) {
|
|
||||||
const source = (nightMode ? settings.nightColorSets : settings.dayColorSets);
|
|
||||||
for (const prop of colorSetsList) {
|
|
||||||
if (utils.hasProp(source, prop))
|
|
||||||
settings[prop] = source[prop];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function getLibsDefaults(mode = 'reader') {
|
function getLibsDefaults(mode = 'reader') {
|
||||||
const result = {
|
const result = {
|
||||||
startLink: '',
|
startLink: '',
|
||||||
@@ -323,7 +287,7 @@ const state = {
|
|||||||
whatsNewContentHash: '',
|
whatsNewContentHash: '',
|
||||||
donationNextPopup: Date.now() + dayMs*30,
|
donationNextPopup: Date.now() + dayMs*30,
|
||||||
currentProfile: '',
|
currentProfile: '',
|
||||||
settings: _.cloneDeep(settingDefaults),
|
settings: Object.assign({}, settingDefaults),
|
||||||
settingsRev: {},
|
settingsRev: {},
|
||||||
libs: false,
|
libs: false,
|
||||||
libsRev: 0,
|
libsRev: 0,
|
||||||
@@ -368,31 +332,13 @@ const mutations = {
|
|||||||
state.currentProfile = value;
|
state.currentProfile = value;
|
||||||
},
|
},
|
||||||
setSettings(state, value) {
|
setSettings(state, value) {
|
||||||
let newSettings = Object.assign({}, state.settings, value);
|
const newSettings = Object.assign({}, state.settings, value);
|
||||||
|
|
||||||
//при смене профиля подгружаются старые настройки, могут отсутствовать атрибуты
|
|
||||||
//поэтому:
|
|
||||||
const added = addDefaultsToSettings(newSettings);
|
const added = addDefaultsToSettings(newSettings);
|
||||||
if (added)
|
if (added) {
|
||||||
newSettings = added;
|
state.settings = added;
|
||||||
|
} else {
|
||||||
state.settings = newSettings;
|
state.settings = newSettings;
|
||||||
},
|
|
||||||
nightModeToggle(state) {
|
|
||||||
//переключение режима день-ночь
|
|
||||||
const newSettings = Object.assign({}, state.settings);
|
|
||||||
|
|
||||||
saveColorSets(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;
|
|
||||||
},
|
},
|
||||||
setSettingsRev(state, value) {
|
setSettingsRev(state, value) {
|
||||||
state.settingsRev = Object.assign({}, state.settingsRev, value);
|
state.settingsRev = Object.assign({}, state.settingsRev, value);
|
||||||
|
|||||||
25
client/store/modules/uistate.js
Normal file
25
client/store/modules/uistate.js
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
// initial state
|
||||||
|
const state = {
|
||||||
|
asideBarCollapse: false,
|
||||||
|
};
|
||||||
|
|
||||||
|
// getters
|
||||||
|
const getters = {};
|
||||||
|
|
||||||
|
// actions
|
||||||
|
const actions = {};
|
||||||
|
|
||||||
|
// mutations
|
||||||
|
const mutations = {
|
||||||
|
setAsideBarCollapse(state, value) {
|
||||||
|
state.asideBarCollapse = value;
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
export default {
|
||||||
|
namespaced: true,
|
||||||
|
state,
|
||||||
|
getters,
|
||||||
|
actions,
|
||||||
|
mutations
|
||||||
|
};
|
||||||
28
package-lock.json
generated
28
package-lock.json
generated
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "liberama",
|
"name": "liberama",
|
||||||
"version": "1.1.0",
|
"version": "1.0.0",
|
||||||
"lockfileVersion": 2,
|
"lockfileVersion": 2,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "liberama",
|
"name": "liberama",
|
||||||
"version": "1.1.0",
|
"version": "1.0.0",
|
||||||
"hasInstallScript": true,
|
"hasInstallScript": true,
|
||||||
"license": "CC0-1.0",
|
"license": "CC0-1.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
@@ -6187,9 +6187,9 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"node_modules/json5": {
|
"node_modules/json5": {
|
||||||
"version": "2.2.2",
|
"version": "2.2.3",
|
||||||
"resolved": "https://registry.npmjs.org/json5/-/json5-2.2.2.tgz",
|
"resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
|
||||||
"integrity": "sha512-46Tk9JiOL2z7ytNQWFLpj99RZkVgeHf87yGQKsIkaPz1qSH9UczKH1rO7K3wgRselo0tYMUNfecYpm/p1vC7tQ==",
|
"integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"bin": {
|
"bin": {
|
||||||
"json5": "lib/cli.js"
|
"json5": "lib/cli.js"
|
||||||
@@ -9914,9 +9914,9 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"node_modules/vue-style-loader/node_modules/json5": {
|
"node_modules/vue-style-loader/node_modules/json5": {
|
||||||
"version": "1.0.1",
|
"version": "1.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
|
||||||
"integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
|
"integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"minimist": "^1.2.0"
|
"minimist": "^1.2.0"
|
||||||
@@ -15304,9 +15304,9 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"json5": {
|
"json5": {
|
||||||
"version": "2.2.2",
|
"version": "2.2.3",
|
||||||
"resolved": "https://registry.npmjs.org/json5/-/json5-2.2.2.tgz",
|
"resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
|
||||||
"integrity": "sha512-46Tk9JiOL2z7ytNQWFLpj99RZkVgeHf87yGQKsIkaPz1qSH9UczKH1rO7K3wgRselo0tYMUNfecYpm/p1vC7tQ==",
|
"integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"jsonfile": {
|
"jsonfile": {
|
||||||
@@ -17998,9 +17998,9 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"json5": {
|
"json5": {
|
||||||
"version": "1.0.1",
|
"version": "1.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
|
||||||
"integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
|
"integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"minimist": "^1.2.0"
|
"minimist": "^1.2.0"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "liberama",
|
"name": "liberama",
|
||||||
"version": "1.1.0",
|
"version": "1.0.0",
|
||||||
"author": "Book Pauk <bookpauk@gmail.com>",
|
"author": "Book Pauk <bookpauk@gmail.com>",
|
||||||
"license": "CC0-1.0",
|
"license": "CC0-1.0",
|
||||||
"repository": "bookpauk/liberama",
|
"repository": "bookpauk/liberama",
|
||||||
|
|||||||
Reference in New Issue
Block a user