Selaa lähdekoodia

Работа над вкладкой "Конвертирование"

Book Pauk 4 vuotta sitten
vanhempi
commit
40ff04e5dc

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

@@ -39,9 +39,9 @@
                         <q-icon name="la la-copy" size="32px"/>
                         <q-icon name="la la-copy" size="32px"/>
                         <q-tooltip :delay="1500" anchor="bottom middle" content-style="font-size: 80%">{{ rstore.readerActions['copyText'] }}</q-tooltip>
                         <q-tooltip :delay="1500" anchor="bottom middle" content-style="font-size: 80%">{{ rstore.readerActions['copyText'] }}</q-tooltip>
                     </button>
                     </button>
-                    <button ref="splitToPara" v-show="showToolButton['splitToPara']" class="tool-button" :class="buttonActiveClass('splitToPara')" @click="buttonClick('splitToPara')" v-ripple>
-                        <q-icon name="la la-retweet" size="32px"/>
-                        <q-tooltip :delay="1500" anchor="bottom middle" content-style="font-size: 80%">{{ rstore.readerActions['splitToPara'] }}</q-tooltip>
+                    <button ref="convOptions" v-show="showToolButton['convOptions']" class="tool-button" :class="buttonActiveClass('convOptions')" @click="buttonClick('convOptions')" v-ripple>
+                        <q-icon name="la la-magic" size="32px"/>
+                        <q-tooltip :delay="1500" anchor="bottom middle" content-style="font-size: 80%">{{ rstore.readerActions['convOptions'] }}</q-tooltip>
                     </button>
                     </button>
                     <button ref="refresh" v-show="showToolButton['refresh']" class="tool-button" :class="buttonActiveClass('refresh')" @click="buttonClick('refresh')" v-ripple>
                     <button ref="refresh" v-show="showToolButton['refresh']" class="tool-button" :class="buttonActiveClass('refresh')" @click="buttonClick('refresh')" v-ripple>
                         <q-icon name="la la-sync" size="32px" :class="{clear: !showRefreshIcon}"/>
                         <q-icon name="la la-sync" size="32px" :class="{clear: !showRefreshIcon}"/>
@@ -317,6 +317,7 @@ class Reader extends Vue {
         this.showToolButton = settings.showToolButton;
         this.showToolButton = settings.showToolButton;
         this.enableSitesFilter = settings.enableSitesFilter;
         this.enableSitesFilter = settings.enableSitesFilter;
         this.showNeedUpdateNotify = settings.showNeedUpdateNotify;
         this.showNeedUpdateNotify = settings.showNeedUpdateNotify;
+        this.splitToPara = settings.splitToPara;
 
 
         this.readerActionByKeyCode = utils.userHotKeysObjectSwap(settings.userHotKeys);
         this.readerActionByKeyCode = utils.userHotKeysObjectSwap(settings.userHotKeys);
         this.$root.readerActionByKeyEvent = (event) => {
         this.$root.readerActionByKeyEvent = (event) => {
@@ -703,6 +704,12 @@ class Reader extends Vue {
         }
         }
     }
     }
 
 
+    convOptionsToggle() {
+        this.settingsToggle();
+        if (this.settingsActive)
+            this.$refs.settingsPage.selectedTab = 'convert';
+    }
+
     helpToggle() {
     helpToggle() {
         this.helpActive = !this.helpActive;
         this.helpActive = !this.helpActive;
         if (this.helpActive) {
         if (this.helpActive) {
@@ -729,15 +736,9 @@ class Reader extends Vue {
         }
         }
     }
     }
 
 
-    refreshBook(mode) {
+    refreshBook() {
         const mrb = this.mostRecentBook();
         const mrb = this.mostRecentBook();
-        if (mrb) {
-            if (mode && mode == 'split') {
-                this.loadBook({url: mrb.url, uploadFileName: mrb.uploadFileName, skipHtmlCheck: true, isText: true, force: true});
-            } else {
-                this.loadBook({url: mrb.url, uploadFileName: mrb.uploadFileName, force: true});
-            }
-        }
+        this.loadBook({url: mrb.url, uploadFileName: mrb.uploadFileName, force: true});
     }
     }
 
 
     undoAction() {
     undoAction() {
@@ -777,7 +778,7 @@ class Reader extends Vue {
             case 'scrolling':
             case 'scrolling':
             case 'search':
             case 'search':
             case 'copyText':
             case 'copyText':
-            case 'splitToPara':
+            case 'convOptions':
             case 'refresh':
             case 'refresh':
             case 'contents':
             case 'contents':
             case 'libs':
             case 'libs':
@@ -811,7 +812,6 @@ class Reader extends Vue {
                 case 'contents':
                 case 'contents':
                     classResult = classDisabled;
                     classResult = classDisabled;
                     break;
                     break;
-                case 'splitToPara':
                 case 'refresh':
                 case 'refresh':
                 case 'recentBooks':
                 case 'recentBooks':
                     if (!this.mostRecentBookReactive)
                     if (!this.mostRecentBookReactive)
@@ -973,8 +973,8 @@ class Reader extends Vue {
             if (!book) {
             if (!book) {
                 book = await readerApi.loadBook({
                 book = await readerApi.loadBook({
                         url,
                         url,
-                        skipHtmlCheck: (opts.skipHtmlCheck ? true : false),
-                        isText: (opts.isText ? true : false),
+                        skipHtmlCheck: (this.splitToPara ? true : false),
+                        isText: (this.splitToPara ? true : false),
                         enableSitesFilter: this.enableSitesFilter,
                         enableSitesFilter: this.enableSitesFilter,
                         uploadFileName
                         uploadFileName
                     },
                     },
@@ -1102,8 +1102,8 @@ class Reader extends Vue {
             case 'copyText':
             case 'copyText':
                 this.copyTextToggle();
                 this.copyTextToggle();
                 break;
                 break;
-            case 'splitToPara':
-                this.refreshBook('split');
+            case 'convOptions':
+                this.convOptionsToggle();
                 break;
                 break;
             case 'refresh':
             case 'refresh':
                 this.refreshBook();
                 this.refreshBook();

+ 21 - 1
client/components/Reader/SettingsPage/include/ConvertTab.inc

@@ -1,5 +1,9 @@
 <!---------------------------------------------->
 <!---------------------------------------------->
-<div class="part-header">Конвертирование</div>
+<div class="q-mt-sm column items-center">
+    <span>Настройки конвертирования применяются ко всем</span>
+    <span>вновь открываемым или обновляемым файлам</span>
+</div>
+<div class="part-header">HTML, XML, TXT</div>
 
 
 <div class="item row">
 <div class="item row">
     <div class="label-6">Сайты</div>
     <div class="label-6">Сайты</div>
@@ -17,3 +21,19 @@
     </div>
     </div>
 </div>
 </div>
 
 
+<div class="item row">
+    <div class="label-6">Текст</div>
+    <div class="col row">
+        <q-checkbox v-model="splitToPara" @input="needTextReload" size="xs" label="Попытаться разбить текст на параграфы">
+            <q-tooltip :delay="1000" anchor="top middle" self="bottom middle" content-style="font-size: 80%">
+                Опция принудительно включает эвристику разбиения текста на<br>
+                параграфы в случае, если формат файла определен как html,<br>
+                xml или txt. Возможна нечитабельная разметка текста.
+            </q-tooltip>
+        </q-checkbox>
+    </div>
+</div>
+
+<div class="part-header">PDF</div>
+
+<div class="part-header">DJVU</div>

+ 5 - 5
client/store/modules/reader.js

@@ -12,7 +12,7 @@ const readerActions = {
     'setPosition': 'Установить позицию',
     'setPosition': 'Установить позицию',
     'search': 'Найти в тексте',
     'search': 'Найти в тексте',
     'copyText': 'Скопировать текст со страницы',
     'copyText': 'Скопировать текст со страницы',
-    'splitToPara': 'Обновить с разбиением на параграфы',
+    'convOptions': 'Настроить конвертирование',
     'refresh': 'Принудительно обновить книгу',
     'refresh': 'Принудительно обновить книгу',
     'offlineMode': 'Автономный режим (без интернета)',
     'offlineMode': 'Автономный режим (без интернета)',
     'contents': 'Оглавление/закладки',
     'contents': 'Оглавление/закладки',
@@ -41,7 +41,7 @@ const toolButtons = [
     {name: 'setPosition', show: true},
     {name: 'setPosition', show: true},
     {name: 'search',      show: true},
     {name: 'search',      show: true},
     {name: 'copyText',    show: false},
     {name: 'copyText',    show: false},
-    {name: 'splitToPara', show: false},
+    {name: 'convOptions', show: true},
     {name: 'refresh',     show: true},
     {name: 'refresh',     show: true},
     {name: 'contents',    show: true},
     {name: 'contents',    show: true},
     {name: 'libs',        show: true},
     {name: 'libs',        show: true},
@@ -60,8 +60,8 @@ const hotKeys = [
     {name: 'scrolling', codes: ['Z']},
     {name: 'scrolling', codes: ['Z']},
     {name: 'setPosition', codes: ['P']},
     {name: 'setPosition', codes: ['P']},
     {name: 'search', codes: ['Ctrl+F']},
     {name: 'search', codes: ['Ctrl+F']},
-    {name: 'copyText', codes: ['Ctrl+C']},
-    {name: 'splitToPara', codes: ['Shift+R']},
+    {name: 'copyText', codes: ['Ctrl+C']},    
+    {name: 'convOptions', codes: ['Ctrl+M']},
     {name: 'refresh', codes: ['R']},
     {name: 'refresh', codes: ['R']},
     {name: 'contents', codes: ['C']},
     {name: 'contents', codes: ['C']},
     {name: 'libs', codes: ['L']},
     {name: 'libs', codes: ['L']},
@@ -252,11 +252,11 @@ const settingDefaults = {
     imageHeightLines: 100,
     imageHeightLines: 100,
     imageFitWidth: true,
     imageFitWidth: true,
     enableSitesFilter: true,
     enableSitesFilter: true,
+    splitToPara: false,
 
 
     showServerStorageMessages: true,
     showServerStorageMessages: true,
     showWhatsNewDialog: true,
     showWhatsNewDialog: true,
     showDonationDialog2020: true,
     showDonationDialog2020: true,
-    showLiberamaTopDialog2020: true,
     showNeedUpdateNotify: true,
     showNeedUpdateNotify: true,
 
 
     fontShifts: {},
     fontShifts: {},