From 312f20d2bddda7958fcab72ea7c2a4f4f5f399a9 Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Mon, 28 Jan 2019 04:57:45 +0700 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=20=D0=BA=D0=BE=D0=BC=D0=BF=D0=BE=D0=BD=D0=B5=D0=BD=D1=82?= =?UTF-8?q?=20SetPositionPage=20-=20=D1=83=D1=81=D1=82=D0=B0=D0=BD=D0=BE?= =?UTF-8?q?=D0=B2=D0=BA=D0=B0=20=D0=BF=D0=BE=D0=B7=D0=B8=D1=86=D0=B8=D0=B8?= =?UTF-8?q?=20=D0=B2=20=D1=82=D0=B5=D0=BA=D1=81=D1=82=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/components/Reader/Reader.vue | 49 +++++++--- .../SetPositionPage/SetPositionPage.vue | 98 +++++++++++++++++++ client/element.js | 5 +- 3 files changed, 140 insertions(+), 12 deletions(-) create mode 100644 client/components/Reader/SetPositionPage/SetPositionPage.vue diff --git a/client/components/Reader/Reader.vue b/client/components/Reader/Reader.vue index 2ec47610..89737456 100644 --- a/client/components/Reader/Reader.vue +++ b/client/components/Reader/Reader.vue @@ -54,6 +54,8 @@ + + @@ -63,10 +65,12 @@ import Vue from 'vue'; import Component from 'vue-class-component'; import LoaderPage from './LoaderPage/LoaderPage.vue'; -import HistoryPage from './HistoryPage/HistoryPage.vue'; import TextPage from './TextPage/TextPage.vue'; import ProgressPage from './ProgressPage/ProgressPage.vue'; +import HistoryPage from './HistoryPage/HistoryPage.vue'; +import SetPositionPage from './SetPositionPage/SetPositionPage.vue'; + import bookManager from './share/bookManager'; import readerApi from '../../api/reader'; import {sleep} from '../../share/utils'; @@ -74,9 +78,10 @@ import {sleep} from '../../share/utils'; export default @Component({ components: { LoaderPage, - HistoryPage, TextPage, - ProgressPage + ProgressPage, + HistoryPage, + SetPositionPage, }, watch: { bookPos: function(newValue) { @@ -104,11 +109,12 @@ export default @Component({ }) class Reader extends Vue { loaderActive = false; - historyActive = false; - progressActive = false; fullScreenActive = false; + historyActive = false; + setPositionActive = false; + bookPos = null; allowUrlParamBookPos = true; showRefreshIcon = true; @@ -122,7 +128,7 @@ class Reader extends Vue { this.lastActivePage = false; - document.addEventListener('fullscreenchange', (event) => { + document.addEventListener('fullscreenchange', () => { this.fullScreenActive = (document.fullscreenElement !== null); }); } @@ -175,7 +181,8 @@ class Reader extends Vue { } bookPosChanged(event) { - this.bookPosSeen = event.bookPosSeen; + if (event.bookPosSeen !== undefined) + this.bookPosSeen = event.bookPosSeen; this.bookPos = event.bookPos; this.updateRoute(); } @@ -223,17 +230,30 @@ class Reader extends Vue { this.historyActive = !this.historyActive; } + setPositionToggle() { + this.setPositionActive = !this.setPositionActive; + if (this.setPositionActive) { + this.$nextTick(() => { + this.$refs.setPositionPage.sliderMax = this.lastOpenedBook.textLength - 1; + this.$refs.setPositionPage.sliderValue = this.lastOpenedBook.bookPos; + }); + } + } + buttonClick(button) { switch (button) { case 'loader': this.loaderToggle(); break; - case 'history': - this.historyToggle(); - break; case 'fullScreen': this.fullScreenToggle(); break; + case 'history': + this.historyToggle(); + break; + case 'setPosition': + this.setPositionToggle(); + break; case 'refresh': if (this.lastOpenedBook) { this.loadBook({url: this.lastOpenedBook.url, force: true}); @@ -247,8 +267,9 @@ class Reader extends Vue { const classActive = { 'tool-button-active': true, 'tool-button-active:hover': true }; switch (button) { case 'loader': return (this.loaderActive ? classActive : {}); - case 'history': return (this.historyActive ? classActive : {}); case 'fullScreen': return (this.fullScreenActive ? classActive : {}); + case 'history': return (this.historyActive ? classActive : {}); + case 'setPosition': return (this.setPositionActive ? classActive : {}); } return {}; } @@ -416,6 +437,9 @@ class Reader extends Vue { if (this.historyActive) handled = this.$refs.historyPage.keyHook(event); + if (this.setPositionActive) + handled = this.$refs.setPositionPage.keyHook(event); + if (!handled && this.$refs.page && this.$refs.page.keyHook) handled = this.$refs.page.keyHook(event); @@ -427,6 +451,9 @@ class Reader extends Vue { case 'KeyH': this.historyToggle(); break; + case 'KeyP': + this.setPositionToggle(); + break; } } } diff --git a/client/components/Reader/SetPositionPage/SetPositionPage.vue b/client/components/Reader/SetPositionPage/SetPositionPage.vue new file mode 100644 index 00000000..1a7bb973 --- /dev/null +++ b/client/components/Reader/SetPositionPage/SetPositionPage.vue @@ -0,0 +1,98 @@ + + + + + \ No newline at end of file diff --git a/client/element.js b/client/element.js index 415c5a16..edc5a8a4 100644 --- a/client/element.js +++ b/client/element.js @@ -59,6 +59,9 @@ import './theme/table-column.css'; import ElProgress from 'element-ui/lib/progress'; import './theme/progress.css'; +import ElSlider from 'element-ui/lib/slider'; +import './theme/slider.css'; + import Notification from 'element-ui/lib/notification'; import './theme/notification.css'; @@ -72,7 +75,7 @@ const components = { ElMenu, ElMenuItem, ElButton, ElCheckbox, ElTabs, ElTabPane, ElTooltip, ElContainer, ElAside, ElMain, ElHeader, ElInput, ElTable, ElTableColumn, - ElProgress + ElProgress, ElSlider }; for (let name in components) {