|
@@ -9,6 +9,24 @@
|
|
|
{{ rstore.readerActions['loader'] }}
|
|
|
</q-tooltip>
|
|
|
</button>
|
|
|
+ <button v-show="showToolButton['loadFile']" ref="loadFile" v-ripple class="tool-button" :class="buttonActiveClass('loadFile')" @click="buttonClick('loadFile')">
|
|
|
+ <q-icon name="la la-caret-square-up" size="32px" />
|
|
|
+ <q-tooltip :delay="1500" anchor="bottom right" content-style="font-size: 80%">
|
|
|
+ {{ rstore.readerActions['loadFile'] }}
|
|
|
+ </q-tooltip>
|
|
|
+ </button>
|
|
|
+ <button v-show="showToolButton['loadBuffer']" ref="loadBuffer" v-ripple class="tool-button" :class="buttonActiveClass('loadBuffer')" @click="buttonClick('loadBuffer')">
|
|
|
+ <q-icon name="la la-comment" size="32px" />
|
|
|
+ <q-tooltip :delay="1500" anchor="bottom right" content-style="font-size: 80%">
|
|
|
+ {{ rstore.readerActions['loadBuffer'] }}
|
|
|
+ </q-tooltip>
|
|
|
+ </button>
|
|
|
+ <button v-show="showToolButton['help']" ref="help" v-ripple class="tool-button" :class="buttonActiveClass('help')" @click="buttonClick('help')">
|
|
|
+ <q-icon name="la la-question" size="32px" />
|
|
|
+ <q-tooltip :delay="1500" anchor="bottom right" content-style="font-size: 80%">
|
|
|
+ {{ rstore.readerActions['help'] }}
|
|
|
+ </q-tooltip>
|
|
|
+ </button>
|
|
|
</div>
|
|
|
|
|
|
<div>
|
|
@@ -89,6 +107,12 @@
|
|
|
</div>
|
|
|
|
|
|
<div>
|
|
|
+ <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-tooltip :delay="1500" anchor="bottom middle" content-style="font-size: 80%">
|
|
|
+ {{ rstore.readerActions['clickControl'] }}
|
|
|
+ </q-tooltip>
|
|
|
+ </button>
|
|
|
<button v-show="showToolButton['offlineMode']" ref="offlineMode" v-ripple class="tool-button" :class="buttonActiveClass('offlineMode')" @click="buttonClick('offlineMode')">
|
|
|
<q-icon name="la la-unlink" size="32px" />
|
|
|
<q-tooltip :delay="1500" anchor="bottom middle" content-style="font-size: 80%">
|
|
@@ -245,6 +269,8 @@ class Reader {
|
|
|
rstore = {};
|
|
|
|
|
|
loaderActive = false;
|
|
|
+ loadFileActive = false;
|
|
|
+ loadBufferActive = false;
|
|
|
fullScreenActive = false;
|
|
|
setPositionActive = false;
|
|
|
searchActive = false;
|
|
@@ -254,6 +280,7 @@ class Reader {
|
|
|
contentsActive = false;
|
|
|
libsActive = false;
|
|
|
recentBooksActive = false;
|
|
|
+ clickControlActive = false;
|
|
|
offlineModeActive = false;
|
|
|
settingsActive = false;
|
|
|
|
|
@@ -372,6 +399,7 @@ class Reader {
|
|
|
this.copyFullText = settings.copyFullText;
|
|
|
this.showClickMapPage = settings.showClickMapPage;
|
|
|
this.clickControl = settings.clickControl;
|
|
|
+ this.clickControlActive = this.clickControl;
|
|
|
this.blinkCachedLoad = settings.blinkCachedLoad;
|
|
|
this.showToolButton = settings.showToolButton;
|
|
|
this.enableSitesFilter = settings.enableSitesFilter;
|
|
@@ -393,6 +421,23 @@ class Reader {
|
|
|
this.loadWallpapers();//no await
|
|
|
}
|
|
|
|
|
|
+ showHelpOnErrorIfNeeded(errorMessage) {
|
|
|
+ //небольшая эвристика
|
|
|
+ let i = errorMessage.indexOf('http://');
|
|
|
+ if (i < 0)
|
|
|
+ i = errorMessage.indexOf('https://');
|
|
|
+
|
|
|
+ errorMessage = errorMessage.substring(i + 7);
|
|
|
+ const perCount = errorMessage.split('%').length - 1;
|
|
|
+
|
|
|
+ if (perCount > errorMessage.length/3.2) {
|
|
|
+ this.$refs.dialogs.showUrlHelp();
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
//wallpaper css
|
|
|
async loadWallpapers() {
|
|
|
const wallpaperDataLength = await wallpaperStorage.getLength();
|
|
@@ -657,6 +702,28 @@ class Reader {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ loadFileToggle() {
|
|
|
+ if (!this.loaderActive)
|
|
|
+ this.loaderToggle();
|
|
|
+ this.$nextTick(() => {
|
|
|
+ const page = this.$refs.page;
|
|
|
+ if (this.activePage == 'LoaderPage' && page.loadFileClick) {
|
|
|
+ page.loadFileClick();
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ loadBufferToggle() {
|
|
|
+ if (!this.loaderActive)
|
|
|
+ this.loaderToggle();
|
|
|
+ this.$nextTick(() => {
|
|
|
+ const page = this.$refs.page;
|
|
|
+ if (this.activePage == 'LoaderPage' && page.showPasteText) {
|
|
|
+ page.showPasteText();
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
setPositionToggle() {
|
|
|
this.setPositionActive = !this.setPositionActive;
|
|
|
const page = this.$refs.page;
|
|
@@ -784,6 +851,12 @@ class Reader {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ clickControlToggle() {
|
|
|
+ const newSettings = _.cloneDeep(this.settings);
|
|
|
+ newSettings.clickControl = !this.clickControl;
|
|
|
+ this.commit('reader/setSettings', newSettings);
|
|
|
+ }
|
|
|
+
|
|
|
offlineModeToggle() {
|
|
|
this.offlineModeActive = !this.offlineModeActive;
|
|
|
this.$refs.serverStorage.offlineModeActive = this.offlineModeActive;
|
|
@@ -872,6 +945,9 @@ class Reader {
|
|
|
|
|
|
switch (action) {
|
|
|
case 'loader':
|
|
|
+ case 'loadFile':
|
|
|
+ case 'loadBuffer':
|
|
|
+ case 'help':
|
|
|
case 'fullScreen':
|
|
|
case 'setPosition':
|
|
|
case 'search':
|
|
@@ -881,6 +957,7 @@ class Reader {
|
|
|
case 'contents':
|
|
|
case 'libs':
|
|
|
case 'recentBooks':
|
|
|
+ case 'clickControl':
|
|
|
case 'offlineMode':
|
|
|
case 'settings':
|
|
|
if (this.progressActive) {
|
|
@@ -1117,7 +1194,9 @@ class Reader {
|
|
|
} catch (e) {
|
|
|
progress.hide(); this.progressActive = false;
|
|
|
this.loaderActive = true;
|
|
|
- this.$root.stdDialog.alert(e.message, 'Ошибка', {color: 'negative'});
|
|
|
+ if (!this.showHelpOnErrorIfNeeded(e.message)) {
|
|
|
+ this.$root.stdDialog.alert(e.message, 'Ошибка', {color: 'negative'});
|
|
|
+ }
|
|
|
} finally {
|
|
|
this.checkNewVersionAvailable();
|
|
|
}
|
|
@@ -1183,6 +1262,12 @@ class Reader {
|
|
|
case 'loader':
|
|
|
this.loaderToggle();
|
|
|
break;
|
|
|
+ case 'loadFile':
|
|
|
+ this.loadFileToggle();
|
|
|
+ break;
|
|
|
+ case 'loadBuffer':
|
|
|
+ this.loadBufferToggle();
|
|
|
+ break;
|
|
|
case 'help':
|
|
|
this.helpToggle();
|
|
|
break;
|
|
@@ -1225,6 +1310,9 @@ class Reader {
|
|
|
case 'recentBooks':
|
|
|
this.recentBooksToggle();
|
|
|
break;
|
|
|
+ case 'clickControl':
|
|
|
+ this.clickControlToggle();
|
|
|
+ break;
|
|
|
case 'offlineMode':
|
|
|
this.offlineModeToggle();
|
|
|
break;
|
|
@@ -1327,13 +1415,14 @@ class Reader {
|
|
|
if (!result && event.type == 'keydown') {
|
|
|
const action = this.$root.readerActionByKeyEvent(event);
|
|
|
|
|
|
- if (action == 'loader') {
|
|
|
+ /*if (action == 'loader') {
|
|
|
result = this.doAction({action, event});
|
|
|
}
|
|
|
|
|
|
if (!result && this.activePage == 'TextPage') {
|
|
|
result = this.doAction({action, event});
|
|
|
- }
|
|
|
+ }*/
|
|
|
+ result = this.doAction({action, event});
|
|
|
}
|
|
|
}
|
|
|
return result;
|