Quellcode durchsuchen

Добавил установку document.title

Book Pauk vor 6 Jahren
Ursprung
Commit
4cdb258703

+ 31 - 7
client/components/App.vue

@@ -6,31 +6,31 @@
             <el-menu class="el-menu-vertical" :default-active="rootRoute" :collapse="isCollapse" router>
               <el-menu-item index="/cardindex">
                 <i class="el-icon-search"></i>
-                <span :class="itemTitleClass('/cardindex')" slot="title">Картотека</span>
+                <span :class="itemTitleClass('/cardindex')" slot="title">{{ this.itemRuText['/cardindex'] }}</span>
               </el-menu-item>
               <el-menu-item index="/reader">
                 <i class="el-icon-tickets"></i>
-                <span :class="itemTitleClass('/reader')" slot="title">Читалка</span>
+                <span :class="itemTitleClass('/reader')" slot="title">{{ this.itemRuText['/reader'] }}</span>
               </el-menu-item>
               <el-menu-item index="/forum" disabled>
                 <i class="el-icon-message"></i>
-                <span :class="itemTitleClass('/forum')" slot="title">Форум-чат</span>
+                <span :class="itemTitleClass('/forum')" slot="title">{{ this.itemRuText['/forum'] }}</span>
               </el-menu-item>
               <el-menu-item index="/income">
                 <i class="el-icon-upload"></i>
-                <span :class="itemTitleClass('/income')" slot="title">Поступления</span>
+                <span :class="itemTitleClass('/income')" slot="title">{{ this.itemRuText['/income'] }}</span>
               </el-menu-item>
               <el-menu-item index="/sources">
                 <i class="el-icon-menu"></i>
-                <span :class="itemTitleClass('/sources')" slot="title">Источники</span>
+                <span :class="itemTitleClass('/sources')" slot="title">{{ this.itemRuText['/sources'] }}</span>
               </el-menu-item>
               <el-menu-item index="/settings">
                 <i class="el-icon-setting"></i>
-                <span :class="itemTitleClass('/settings')" slot="title">Параметры</span>
+                <span :class="itemTitleClass('/settings')" slot="title">{{ this.itemRuText['/settings'] }}</span>
               </el-menu-item>
               <el-menu-item index="/help">
                 <i class="el-icon-question"></i>
-                <span :class="itemTitleClass('/help')" slot="title">Справка</span>
+                <span :class="itemTitleClass('/help')" slot="title">{{ this.itemRuText['/help'] }}</span>
               </el-menu-item>
             </el-menu>
         </el-aside>
@@ -59,6 +59,15 @@ export default @Component({
 
 })
 class App extends Vue {
+    itemRuText = {
+        '/cardindex': 'Картотека',
+        '/reader': 'Читалка',
+        '/forum': 'Форум-чат',
+        '/income': 'Поступления',
+        '/sources': 'Источники',
+        '/settings': 'Параметры',
+        '/help': 'Справка',
+    }
     created() {
         this.commit = this.$store.commit;
         this.dispatch = this.$store.dispatch;
@@ -66,6 +75,9 @@ class App extends Vue {
         this.uistate = this.$store.state.uistate;
         this.config = this.$store.state.config;
 
+        // set-app-title
+        this.$root.$on('set-app-title', this.setAppTitle);
+
         //global keyHooks
         this.keyHooks = [];
         this.keyHook = (event) => {
@@ -143,9 +155,21 @@ class App extends Vue {
     get rootRoute() {
         const m = this.$route.path.match(/^(\/[^/]*).*$/i);
         this.$root.rootRoute = (m ? m[1] : this.$route.path);
+
+        this.setAppTitle();
         return this.$root.rootRoute;
     }
 
+    setAppTitle(title) {
+        if (!title) {
+            if (this.config) {
+                document.title = `${this.config.name} - ${this.itemRuText[this.$root.rootRoute]}`;
+            }
+        } else {
+            document.title = title;
+        }
+    }
+
     itemTitleClass(path) {
         return (this.rootRoute == path ? {'bold-font': true} : {});
     }

+ 4 - 0
client/components/Reader/Reader.vue

@@ -126,6 +126,10 @@ class Reader extends Vue {
             //this.commit('reader/setLoaderActive', true);
             //result = 'LoaderPage';
         }
+
+        if (result != 'TextPage') {
+            this.$root.$emit('set-app-title');
+        }
         return result;
     }
 

+ 21 - 5
client/components/Reader/TextPage/TextPage.vue

@@ -1,5 +1,6 @@
 <template>
     <div class="main">
+        <pre>{{ meta }}</pre>
         <p v-for="item in items" :key="item.id">
             {{ item.text }}
         </p>
@@ -10,11 +11,14 @@
 //-----------------------------------------------------------------------------
 import Vue from 'vue';
 import Component from 'vue-class-component';
+import _ from 'lodash';
+
 import bookManager from '../share/bookManager';
 
 export default @Component({
 })
 class TextPage extends Vue {
+    meta = null;
     items = null;
 
     created() {
@@ -32,18 +36,30 @@ class TextPage extends Vue {
             (async() => {
                 const isParsed = await bookManager.hasBookParsed(last);
                 if (!isParsed) {
+                    this.$root.$emit('set-app-title');
                     this.$emit('parse-book', last);
                     return;
                 }
-                const book = await bookManager.getBook(last);
-                this.book = book.parsed;
-
+                this.book = await bookManager.getBook(last);
+                this.meta = bookManager.metaOnly(this.book);
+                const fb2 = this.meta.fb2;
+                this.$root.$emit('set-app-title', _.compact([
+                    fb2.lastName,
+                    fb2.middleName,
+                    fb2.firstName,
+                    '-',
+                    fb2.bookTitle
+                ]).join(' '));
+//
                 let lines = [];
-                const len = (this.book.para.length > 50 ? 50 : this.book.para.length);
+                let para = this.book.parsed.para;
+                const len = (para.length > 50 ? 50 : para.length);
                 for (let i = 0; i < len; i++) {
-                    lines.push({key: i, text: this.book.para[i].text});
+                    lines.push({key: i, text: para[i].text});
                 }
                 this.items = lines;
+//
+
             })();
         }
     }

+ 11 - 2
client/components/Reader/share/BookParser.js

@@ -17,6 +17,14 @@ export default class BookParser {
             throw new Error('Неверный формат файла');
         }
 
+        //defaults
+        let fb2 = {
+            firstName: '',
+            middleName: '',
+            lastName: '',
+            bookTitle: '',
+        };
+
         let path = '';
         let tag = '';
         let nextPerc = 0;
@@ -66,8 +74,6 @@ export default class BookParser {
             paraOffset += p.length;
         };
 
-        let fb2 = {};
-
         const parser = this.parser;
 
         parser.on('error', (msgError) => {// eslint-disable-line no-unused-vars
@@ -101,6 +107,9 @@ export default class BookParser {
                 case '/FictionBook/description/title-info/author/first-name':
                     fb2.firstName = text;
                     break;
+                case '/FictionBook/description/title-info/author/middle-name':
+                    fb2.middleName = text;
+                    break;
                 case '/FictionBook/description/title-info/author/last-name':
                     fb2.lastName = text;
                     break;