Browse Source

- добавлена возможность настройки отображаемых кнопок на панели управления
- некоторые кнопки на панели управления были скрыты по-умолчанию

Book Pauk 6 years ago
parent
commit
f13c3d19fb

+ 1 - 1
client/components/Reader/HelpPage/VersionHistoryPage/VersionHistoryPage.vue

@@ -1,6 +1,6 @@
 <template>
     <div id="versionHistoryPage" class="page">
-        <span class="clickable" v-for="item in versionHeader" :key="item" @click="showRelease(item)">
+        <span class="clickable" v-for="(item, index) in versionHeader" :key="index" @click="showRelease(item)">
             <p>
             {{ item }}
             </p>

+ 14 - 14
client/components/Reader/Reader.vue

@@ -7,35 +7,35 @@
                 </el-tooltip>
 
                 <div>
-                    <el-tooltip content="Действие назад" :open-delay="1000" effect="light">
+                    <el-tooltip v-show="showToolButton['undoAction']" content="Действие назад" :open-delay="1000" effect="light">
                         <el-button ref="undoAction" class="tool-button" :class="buttonActiveClass('undoAction')" @click="buttonClick('undoAction')" ><i class="el-icon-arrow-left"></i></el-button>
                     </el-tooltip>
-                    <el-tooltip content="Действие вперед" :open-delay="1000" effect="light">
+                    <el-tooltip v-show="showToolButton['redoAction']" content="Действие вперед" :open-delay="1000" effect="light">
                         <el-button ref="redoAction" class="tool-button" :class="buttonActiveClass('redoAction')" @click="buttonClick('redoAction')" ><i class="el-icon-arrow-right"></i></el-button>
                     </el-tooltip>
                     <div class="space"></div>
-                    <el-tooltip content="На весь экран" :open-delay="1000" effect="light">
+                    <el-tooltip v-show="showToolButton['fullScreen']" content="На весь экран" :open-delay="1000" effect="light">
                         <el-button ref="fullScreen" class="tool-button" :class="buttonActiveClass('fullScreen')" @click="buttonClick('fullScreen')"><i class="el-icon-rank"></i></el-button>
                     </el-tooltip>
-                    <el-tooltip content="Плавный скроллинг" :open-delay="1000" effect="light">
+                    <el-tooltip v-show="showToolButton['scrolling']" content="Плавный скроллинг" :open-delay="1000" effect="light">
                         <el-button ref="scrolling" class="tool-button" :class="buttonActiveClass('scrolling')" @click="buttonClick('scrolling')"><i class="el-icon-sort"></i></el-button>
                     </el-tooltip>
-                    <el-tooltip content="Перелистнуть" :open-delay="1000" effect="light">
+                    <el-tooltip v-show="showToolButton['setPosition']" content="На страницу" :open-delay="1000" effect="light">
                         <el-button ref="setPosition" class="tool-button" :class="buttonActiveClass('setPosition')" @click="buttonClick('setPosition')"><i class="el-icon-d-arrow-right"></i></el-button>
                     </el-tooltip>
-                    <el-tooltip content="Найти в тексте" :open-delay="1000" effect="light">
+                    <el-tooltip v-show="showToolButton['search']" content="Найти в тексте" :open-delay="1000" effect="light">
                         <el-button ref="search" class="tool-button" :class="buttonActiveClass('search')" @click="buttonClick('search')"><i class="el-icon-search"></i></el-button>
                     </el-tooltip>
-                    <el-tooltip content="Скопировать текст со страницы" :open-delay="1000" effect="light">
+                    <el-tooltip v-show="showToolButton['copyText']" content="Скопировать текст со страницы" :open-delay="1000" effect="light">
                         <el-button ref="copyText" class="tool-button" :class="buttonActiveClass('copyText')" @click="buttonClick('copyText')"><i class="el-icon-edit-outline"></i></el-button>
                     </el-tooltip>
-                    <el-tooltip content="Принудительно обновить книгу в обход кэша" :open-delay="1000" effect="light">
+                    <el-tooltip v-show="showToolButton['refresh']" content="Принудительно обновить книгу в обход кэша" :open-delay="1000" effect="light">
                         <el-button ref="refresh" class="tool-button" :class="buttonActiveClass('refresh')" @click="buttonClick('refresh')">
                             <i class="el-icon-refresh" :class="{clear: !showRefreshIcon}"></i>
                         </el-button>
                     </el-tooltip>
                     <div class="space"></div>
-                    <el-tooltip content="Открыть недавние" :open-delay="1000" effect="light">
+                    <el-tooltip v-show="showToolButton['history']" content="Открыть недавние" :open-delay="1000" effect="light">
                         <el-button ref="history" class="tool-button" :class="buttonActiveClass('history')" @click="buttonClick('history')"><i class="el-icon-document"></i></el-button>
                     </el-tooltip>
                 </div>
@@ -115,7 +115,6 @@ import ServerStorage from './ServerStorage/ServerStorage.vue';
 import bookManager from './share/bookManager';
 import readerApi from '../../api/reader';
 import * as utils from '../../share/utils';
-import * as cryptoUtils from '../../share/cryptoUtils';
 import {versionHistory} from './versionHistory';
 
 export default @Component({
@@ -183,6 +182,7 @@ class Reader extends Vue {
     allowUrlParamBookPos = false;
     showRefreshIcon = true;
     mostRecentBookReactive = null;
+    showToolButton = {};
 
     actionList = [];
     actionCur = -1;
@@ -264,6 +264,7 @@ class Reader extends Vue {
         this.clickControl = settings.clickControl;
         this.blinkCachedLoad = settings.blinkCachedLoad;
         this.showWhatsNewDialog = settings.showWhatsNewDialog;
+        this.showToolButton = settings.showToolButton;
     }
 
     checkSetStorageAccessKey() {
@@ -296,11 +297,10 @@ class Reader extends Vue {
         await utils.sleep(2000);
 
         const whatsNew = versionHistory[0];
-        const content = 'Версия ' + whatsNew.header + whatsNew.content;
         if (this.showWhatsNewDialog &&
             whatsNew.showUntil >= utils.formatDate(new Date(), 'coDate') &&
-            utils.stringToHex(cryptoUtils.sha256(content)) != this.whatsNewContentHash) {
-            this.whatsNewContent = content;
+            whatsNew.header != this.whatsNewContentHash) {
+            this.whatsNewContent = 'Версия ' + whatsNew.header + whatsNew.content;
             this.whatsNewVisible = true;
         }
     }
@@ -313,7 +313,7 @@ class Reader extends Vue {
     whatsNewDisable() {
         this.whatsNewVisible = false;
         const whatsNew = versionHistory[0];
-        this.commit('reader/setWhatsNewContentHash', utils.stringToHex(cryptoUtils.sha256(whatsNew.content)));
+        this.commit('reader/setWhatsNewContentHash', whatsNew.header);
     }
 
     get routeParamPos() {

+ 18 - 0
client/components/Reader/SettingsPage/SettingsPage.vue

@@ -346,6 +346,17 @@
                         </el-form>
                     </el-tab-pane>
 
+                    <!-- Кнопки ------------------------------------------------------------------------->
+                    <el-tab-pane label="Кнопки">
+                        <el-form :model="form" size="mini" label-width="120px" @submit.native.prevent>
+                            <div class="partHeader">Показывать кнопки панели</div>
+
+                            <el-form-item label="" v-for="item in toolButtons" :key="item.name">
+                                <el-checkbox @change="changeShowToolButton(item.name)" :value="showToolButton[item.name]">{{item.text}}</el-checkbox>
+                            </el-form-item>
+                        </el-form>
+                    </el-tab-pane>
+
                     <!-- Управление ------------------------------------------------------------------------->
                     <el-tab-pane label="Управление">
                         <el-form :model="form" size="mini" label-width="120px" @submit.native.prevent>
@@ -541,12 +552,14 @@ class SettingsPage extends Vue {
     fonts = [];
 
     serverStorageKeyVisible = false;
+    toolButtons = [];
 
     created() {
         this.commit = this.$store.commit;
         this.reader = this.$store.state.reader;
 
         this.form = {};
+        this.toolButtons = rstore.toolButtons;
         this.settingsChanged();
     }
 
@@ -560,6 +573,7 @@ class SettingsPage extends Vue {
                 this.form = Object.assign({}, this.form, {[prop]: newValue});
             });
         }
+
         this.fontBold = (this.fontWeight == 'bold');
         this.fontItalic = (this.fontStyle == 'italic');
 
@@ -666,6 +680,10 @@ class SettingsPage extends Vue {
         }
     }
 
+    changeShowToolButton(buttonName) {
+        this.showToolButton = Object.assign({}, this.showToolButton, {[buttonName]: !this.showToolButton[buttonName]});
+    }
+
     async addProfile() {
         try {
             if (Object.keys(this.profiles).length >= 100) {

+ 1 - 0
client/components/Reader/versionHistory.js

@@ -8,6 +8,7 @@ export const versionHistory = [
     <li>добавлен диалог "Что нового"</li>
     <li>в справку добавлена история версий проекта</li>
     <li>добавлена возможность настройки отображаемых кнопок на панели управления</li>
+    <li>некоторые кнопки на панели управления были скрыты по-умолчанию</li>
     <li>исправления багов и недочетов</li>
 </ul>
 `

+ 17 - 0
client/store/modules/reader.js

@@ -1,3 +1,16 @@
+//занчение toolButtons.name не должно совпадать с settingDefaults-propertyName
+const toolButtons = [
+    {name: 'undoAction',  show: true, text: 'Действие назад'},
+    {name: 'redoAction',  show: true, text: 'Действие вперед'},
+    {name: 'fullScreen',  show: true, text: 'На весь экран'},
+    {name: 'scrolling',   show: false, text: 'Плавный скроллинг'},
+    {name: 'setPosition', show: true, text: 'На страницу'},
+    {name: 'search',      show: true, text: 'Найти в тексте'},
+    {name: 'copyText',    show: false, text: 'Скопировать текст со страницы'},
+    {name: 'refresh',     show: true, text: 'Принудительно обновить книгу'},
+    {name: 'history',     show: true, text: 'Открыть недавние'},
+];
+
 const fonts = [
     {name: 'ReaderDefault', label: 'По-умолчанию', fontVertShift: 0},
     {name: 'GEO_1', label: 'BPG Arial', fontVertShift: 10},
@@ -169,12 +182,15 @@ const settingDefaults = {
     showWhatsNewDialog: true,
 
     fontShifts: {},
+    showToolButton: {},
 };
 
 for (const font of fonts)
     settingDefaults.fontShifts[font.name] = font.fontVertShift;
 for (const font of webFonts)
     settingDefaults.fontShifts[font.name] = font.fontVertShift;
+for (const button of toolButtons)
+    settingDefaults.showToolButton[button.name] = button.show;
 
 // initial state
 const state = {
@@ -231,6 +247,7 @@ const mutations = {
 };
 
 export default {
+    toolButtons,
     fonts,
     webFonts,
     settingDefaults,