Ver Fonte

Работа над хоткеями

Book Pauk há 5 anos atrás
pai
commit
00a8e4c2c5

+ 0 - 20
client/components/Reader/HelpPage/HotkeysHelpPage/HotkeysHelpPage.vue

@@ -2,26 +2,6 @@
     <div class="page">
         <span class="text-h6 text-bold">Управление с помощью горячих клавиш:</span>
         <ul>
-            <li><b>F1, H</b> - открыть справку</li>
-            <li><b>Escape</b> - показать/скрыть страницу загрузки</li>
-            <li><b>Tab, Q</b> - показать/скрыть панель управления</li>
-            <li><b>PageUp, Left, Shift+Space, Backspace</b> - страницу назад</li>
-            <li><b>PageDown, Right, Space</b> - страницу вперед</li>
-            <li><b>Home</b> - в начало книги</li>
-            <li><b>End</b> - в конец книги</li>
-            <li><b>Up</b> - строчку назад</li>
-            <li><b>Down</b> - строчку вперёд</li>
-            <li><b>A, Shift+A</b> - изменить размер шрифта</li>
-            <li><b>Enter, F, F11, ` (апостроф)</b> - вкл./выкл. полный экран</li>
-            <li><b>Z</b> - вкл./выкл. плавный скроллинг текста</li>
-            <li><b>Shift+Down/Shift+Up</b> - увеличить/уменьшить скорость скроллинга
-            <li><b>P</b> - установить страницу</li>
-            <li><b>Ctrl+F</b> - найти в тексте</li>            
-            <li><b>Ctrl+C</b> - скопировать текст со страницы</li>            
-            <li><b>R</b> - принудительно обновить книгу в обход кэша</li>
-            <li><b>X</b> - открыть недавние</li>
-            <li><b>O</b> - автономный режим</li>
-            <li><b>S</b> - открыть окно настроек</li>
         </ul>
     </div>
 </template>

+ 16 - 23
client/components/Reader/Reader.vue

@@ -1160,39 +1160,32 @@ class Reader extends Vue {
                         case 'scrolling':
                             this.scrollingToggle();
                             break;
-                        default:
-                            result = false;
-                            break;
-                    }
-
-                    switch (event.code) {
-                        case 'KeyP':
+                        case 'setPosition':
                             this.setPositionToggle();
                             break;
-                        case 'KeyF':
-                            if (event.ctrlKey) {
-                                this.searchToggle();
-                                event.preventDefault();
-                                event.stopPropagation();
-                            }
+                        case 'search':
+                            this.searchToggle();
+                            event.preventDefault();
+                            event.stopPropagation();
                             break;
-                        case 'KeyC':
-                            if (event.ctrlKey) {
-                                this.copyTextToggle();
-                                event.preventDefault();
-                                event.stopPropagation();
-                            }
+                        case 'copyText':
+                            this.copyTextToggle();
+                            event.preventDefault();
+                            event.stopPropagation();
                             break;
-                        case 'KeyR':
+                        case 'refresh':
                             this.refreshBook();
                             break;
-                        case 'KeyX':
+                        case 'offlineMode':
+                            this.offlineModeToggle();
+                            break;
+                        case 'recentBooks':
                             this.recentBooksToggle();
                             event.preventDefault();
                             event.stopPropagation();
                             break;
-                        case 'KeyO':
-                            this.offlineModeToggle();
+                        default:
+                            result = false;
                             break;
                     }
                 }

+ 16 - 4
client/components/Reader/SettingsPage/UserHotKeys/UserHotKeys.vue

@@ -146,7 +146,8 @@ class UserHotKeys extends UserHotKeysProps {
     collisionWarning(code) {
         if (this.collisions[code]) {
             const descs = this.collisions[code].map(action => `<b>${rstore.readerActions[action]}</b>`);
-            this.$root.stdDialog.alert(`Сочетание '${code}' одновременно назначено<br>следующим действиям:<br>${descs.join('<br>')}`, 'Предупреждение');
+            this.$root.stdDialog.alert(`Сочетание '${code}' одновременно назначено<br>следующим действиям:<br>${descs.join('<br>')}<br><br>
+Возможно неожиданное поведение.`, 'Предупреждение');
         }
     }
 
@@ -183,7 +184,7 @@ class UserHotKeys extends UserHotKeysProps {
 
     async defaultHotKey(action) {
         try {
-            if (await this.$root.stdDialog.confirm(`Подтвердите установку клавиш по умолчанию для:<br><b>${rstore.readerActions[action]}</b>`, ' ')) {
+            if (await this.$root.stdDialog.confirm(`Подтвердите сброс сочетаний клавиш<br>в значения по умолчанию для действия:<br><b>${rstore.readerActions[action]}</b>`, ' ')) {
                 const codes = Array.from(rstore.settingDefaults.userHotKeys[action]);
                 const newValue = Object.assign({}, this.value, {[action]: codes});
                 this.$emit('input', newValue);
@@ -195,7 +196,7 @@ class UserHotKeys extends UserHotKeysProps {
 
     async defaultHotKeyAll() {
         try {
-            if (await this.$root.stdDialog.confirm('Подтвердите установку ВСЕХ <br>сочетаний клавиш по умолчанию:', ' ')) {
+            if (await this.$root.stdDialog.confirm('Подтвердите сброс ВСЕХ сочетаний<br>клавиш в значения по умолчанию:', ' ')) {
                 const newValue = Object.assign({}, rstore.settingDefaults.userHotKeys);
                 this.$emit('input', newValue);
             }
@@ -218,8 +219,19 @@ class UserHotKeys extends UserHotKeysProps {
     border-bottom: 1px solid grey;
 }
 
+.table-row:nth-child(even) {
+    background-color: #f7f7f7;
+}
+
+.table-row:hover {
+    background-color: #f0f0f0;
+}
+
 .desc {
-    width: 100px;
+    width: 130px;
+    overflow-wrap: break-word;
+    word-wrap: break-word;
+    white-space: normal;
 }
 
 .hotKeys {

+ 25 - 41
client/components/Reader/TextPage/TextPage.vue

@@ -899,7 +899,7 @@ class TextPage extends Vue {
     async doFontSizeInc() {
         if (!this.settingsChanging) {
             this.settingsChanging = true;
-            const newSize = (this.settings.fontSize + 1 < 100 ? this.settings.fontSize + 1 : 100);
+            const newSize = (this.settings.fontSize + 1 < 200 ? this.settings.fontSize + 1 : 100);
             const newSettings = Object.assign({}, this.settings, {fontSize: newSize});
             this.commit('reader/setSettings', newSettings);
             await sleep(50);
@@ -947,56 +947,40 @@ class TextPage extends Vue {
             const action = this.$root.readerActionByKeyEvent(event);
 
             switch (action) {
-                default:
-                    result = false;
+                case 'switchToolbar':
+                    this.doToolBarToggle();
+                    event.preventDefault();
+                    event.stopPropagation();
                     break;
-            }
-
-            switch (event.code) {
-                case 'ArrowDown':
-                    if (event.shiftKey)
-                        this.doScrollingSpeedUp();
-                    else
-                        this.doDown();
+                case 'bookBegin':
+                    this.doHome();
                     break;
-                case 'ArrowUp':
-                    if (event.shiftKey)
-                        this.doScrollingSpeedDown();
-                    else
-                        this.doUp();
+                case 'bookEnd':
+                    this.doEnd();
+                    break;
+                case 'pageBack':
+                    this.doPageUp();
                     break;
-                case 'PageDown':
-                case 'ArrowRight':
+                case 'pageForward':
                     this.doPageDown();
                     break;
-                case 'Space':
-                    if (event.shiftKey)
-                        this.doPageUp();
-                    else
-                        this.doPageDown();
+                case 'lineBack':
+                    this.doUp();
                     break;
-                case 'PageUp':
-                case 'ArrowLeft':
-                case 'Backspace':
-                    this.doPageUp();
+                case 'lineForward':
+                    this.doDown();
                     break;
-                case 'Home':
-                    this.doHome();
+                case 'incFontSize':
+                    this.doFontSizeInc();
                     break;
-                case 'End':
-                    this.doEnd();
+                case 'decFontSize':
+                    this.doFontSizeDec();
                     break;
-                case 'KeyA':
-                    if (event.shiftKey)
-                        this.doFontSizeDec();
-                    else
-                        this.doFontSizeInc();
+                case 'scrollingSpeedUp':
+                    this.doScrollingSpeedUp();
                     break;
-                case 'Tab':
-                case 'KeyQ':
-                    this.doToolBarToggle();
-                    event.preventDefault();
-                    event.stopPropagation();
+                case 'scrollingSpeedDown':
+                    this.doScrollingSpeedDown();
                     break;
                 default:
                     result = false;

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

@@ -5,6 +5,8 @@ export const versionHistory = [
     content:
 `
 <ul>
+    <li>в настройки добавлена возможность назначать сочетания клавиш для действий читалки</li>
+    <li>в настройки добавлена возможность назначать действия на области экрана при управлении кликом</li>
     <li>переход на Service Worker вместо AppCache для автономного режима работы</li>
 </ul>
 `

+ 29 - 1
client/store/modules/reader.js

@@ -12,6 +12,17 @@ const readerActions = {
     'refresh': 'Принудительно обновить книгу',
     'offlineMode': 'Автономный режим (без интернета)',
     'recentBooks': 'Открыть недавние',
+    'switchToolbar': 'Показать/скрыть панель управления',
+    'bookBegin': 'В начало книги',
+    'bookEnd': 'В конец книги',
+    'pageBack': 'Страницу назад',
+    'pageForward': 'Страницу вперед',
+    'lineBack': 'Строчку назад',
+    'lineForward': 'Строчку вперед',
+    'incFontSize': 'Увеличить размер шрифта',
+    'decFontSize': 'Уменьшить размер шрифта',
+    'scrollingSpeedUp': 'Увеличить скорость скроллинга',
+    'scrollingSpeedDown': 'Уменьшить скорость скроллинга',
 };
 
 //readerActions[name]
@@ -37,7 +48,24 @@ const hotKeys = [
     {name: 'redoAction', codes: ['Ctrl+X']},
     {name: 'fullScreen', codes: ['Enter', 'Backquote', 'F']},
     {name: 'scrolling', codes: ['Z']},
-
+    {name: 'setPosition', codes: ['P']},
+    {name: 'search', codes: ['Ctrl+F']},
+    {name: 'copyText', codes: ['Ctrl+C']},
+    {name: 'refresh', codes: ['R']},
+    {name: 'offlineMode', codes: ['O']},
+    {name: 'recentBooks', codes: ['X']},
+
+    {name: 'switchToolbar', codes: ['Tab', 'Q']},
+    {name: 'bookBegin', codes: ['Home']},
+    {name: 'bookEnd', codes: ['End']},
+    {name: 'pageBack', codes: ['PageUp', 'ArrowLeft', 'Backspace', 'Shift+Space']},
+    {name: 'pageForward', codes: ['PageDown', 'ArrowRight', 'Space']},
+    {name: 'lineBack', codes: ['ArrowUp']},
+    {name: 'lineForward', codes: ['ArrowDown']},
+    {name: 'incFontSize', codes: ['A']},
+    {name: 'decFontSize', codes: ['Shift+A']},
+    {name: 'scrollingSpeedUp', codes: ['Shift+ArrowDown']},
+    {name: 'scrollingSpeedDown', codes: ['Shift+ArrowUp']},    
 ];
 
 const fonts = [