Browse Source

На страницу загрузки добавлена возможность загрузки книги из буфера обмена

Book Pauk 6 năm trước cách đây
mục cha
commit
f26a3b31ac

+ 31 - 1
client/components/Reader/LoaderPage/LoaderPage.vue

@@ -18,6 +18,10 @@
                 Загрузить файл с диска
             </el-button>
             <div class="space"></div>
+            <el-button size="mini" @click="loadBufferClick">
+                Из буфера обмена
+            </el-button>
+            <div class="space"></div>
             <span v-if="mode == 'omnireader'" class="bottom-span clickable" @click="openComments">Комментарии</span>
         </div>
 
@@ -26,6 +30,8 @@
             <span class="bottom-span clickable" @click="openDonate">Помочь проекту</span>
             <span class="bottom-span">{{ version }}</span>
         </div>
+
+        <PasteTextPage v-if="pasteTextActive" ref="pasteTextPage" @paste-text-toggle="pasteTextToggle" @load-buffer="loadBuffer"></PasteTextPage>
     </div>
 </template>
 
@@ -33,12 +39,17 @@
 //-----------------------------------------------------------------------------
 import Vue from 'vue';
 import Component from 'vue-class-component';
+import PasteTextPage from './PasteTextPage/PasteTextPage.vue';
 
 export default @Component({
+    components: {
+        PasteTextPage,
+    },
 })
 class LoaderPage extends Vue {
     bookUrl = null;
     loadPercent = 0;
+    pasteTextActive = false;
 
     created() {
         this.commit = this.$store.commit;
@@ -83,12 +94,27 @@ class LoaderPage extends Vue {
     }
 
     loadFile() {
-        const file = this.$refs.file.files[0];
+        const file = this.$refs.file.files[0];        
         this.$refs.file.value = '';
         if (file)
             this.$emit('load-file', {file});
     }
 
+    loadBufferClick() {
+        this.pasteTextToggle();
+    }
+
+    loadBuffer(opts) {
+        if (opts.buffer.length) {
+            const file = new File([opts.buffer], 'dummyName-PasteFromClipboard');
+            this.$emit('load-file', {file});
+        }
+    }
+
+    pasteTextToggle() {
+        this.pasteTextActive = !this.pasteTextActive;
+    }
+
     openHelp() {
         this.$emit('help-toggle');
     }
@@ -102,6 +128,10 @@ class LoaderPage extends Vue {
     }
 
     keyHook(event) {
+        if (this.pasteTextActive) {
+            return this.$refs.pasteTextPage.keyHook(event);
+        }
+
         //недостатки сторонних ui
         const input = this.$refs.input.$refs.input;
         if (document.activeElement === input && event.type == 'keydown' && event.code == 'Enter') {

+ 93 - 0
client/components/Reader/LoaderPage/PasteTextPage/PasteTextPage.vue

@@ -0,0 +1,93 @@
+<template>
+    <div ref="main" class="main" @click="close">
+        <div class="mainWindow" @click.stop>
+            <Window @close="close">
+                <template slot="header">
+                    Вставьте текст и нажмите
+                    <el-button size="mini" style="font-size: 120%; color: blue" @click="loadBuffer">Загрузить</el-button>
+                    или F2
+                </template>
+
+                <textarea ref="textArea" class="text"></textarea>
+            </Window>
+        </div>
+    </div>
+</template>
+
+<script>
+//-----------------------------------------------------------------------------
+import Vue from 'vue';
+import Component from 'vue-class-component';
+
+import Window from '../../../share/Window.vue';
+
+export default @Component({
+    components: {
+        Window,
+    },
+})
+class PasteTextPage extends Vue {
+    created() {
+    }
+
+    mounted() {
+        this.$refs.textArea.focus();
+    }
+
+    loadBuffer() {
+        this.$emit('load-buffer', {buffer: this.$refs.textArea.value});
+        this.close();
+    }
+
+    close() {
+        this.$emit('paste-text-toggle');
+    }
+
+    keyHook(event) {
+        if (event.type == 'keydown') {
+            switch (event.code) {
+                case 'F2':
+                    this.loadBuffer();
+                    break;
+                case 'Escape':
+                    this.close();
+                    break;
+            }
+        }
+        return true;
+    }
+}
+//-----------------------------------------------------------------------------
+</script>
+
+<style scoped>
+.main {
+    position: absolute;
+    width: 100%;
+    height: 100%;
+    z-index: 40;
+    display: flex;
+    flex-direction: column;
+    justify-content: center;
+    align-items: center;
+}
+
+.mainWindow {
+    width: 100%;
+    height: 100%;
+    display: flex;
+}
+
+.text {
+    flex: 1;
+    overflow-wrap: anywhere;
+    overflow-y: auto;
+    padding: 0 10px 0 10px;
+    position: relative;
+    font-size: 120%;
+}
+
+.text:focus {
+    outline: none;
+}
+</style>

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

@@ -68,7 +68,7 @@
                 @start-text-search="startTextSearch"
                 @stop-text-search="stopTextSearch">
             </SearchPage>
-            <CopyTextPage v-if="copyTextActive" ref="copyTextPage" @copy-text-toggle="copyTextToggle"></CopyTextPage>            
+            <CopyTextPage v-if="copyTextActive" ref="copyTextPage" @copy-text-toggle="copyTextToggle"></CopyTextPage>
             <HistoryPage v-show="historyActive" ref="historyPage" @load-book="loadBook" @history-toggle="historyToggle"></HistoryPage>
             <SettingsPage v-if="settingsActive" ref="settingsPage" @settings-toggle="settingsToggle"></SettingsPage>
             <HelpPage v-if="helpActive" ref="helpPage" @help-toggle="helpToggle"></HelpPage>
@@ -780,7 +780,7 @@ class Reader extends Vue {
 
         this.progressActive = true;
 
-        await this.$nextTick()
+        await this.$nextTick();
 
         const progress = this.$refs.page;
 

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

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