Compare commits

...

8 Commits

Author SHA1 Message Date
Book Pauk
d9e49e3484 Merge branch 'release/0.6.10' 2019-07-21 14:44:43 +07:00
Book Pauk
a28d4c2f1c Версия 0.6.10 2019-07-21 14:42:54 +07:00
Book Pauk
9af055ec54 Поправки порядка загрузки компонентов и сопутствующих багов 2019-07-21 14:39:06 +07:00
Book Pauk
0d41171e9d Улучшение отзывчивости прогрессбаров 2019-07-21 12:15:33 +07:00
Book Pauk
08af826ae9 Merge tag '0.6.9s' into develop
0.6.9s
2019-06-26 20:04:45 +07:00
Book Pauk
4fd577d7c5 Merge branch 'release/0.6.9s' 2019-06-26 20:04:25 +07:00
Book Pauk
2c8efebe98 Поправлен баг клика в статус баре 2019-06-26 20:03:19 +07:00
Book Pauk
93c9fb53ac Merge tag '0.6.9' into develop
Версия 0.6.9
2019-06-23 18:51:11 +07:00
11 changed files with 113 additions and 25 deletions

View File

@@ -47,14 +47,12 @@
//-----------------------------------------------------------------------------
import Vue from 'vue';
import Component from 'vue-class-component';
import * as utils from '../share/utils';
export default @Component({
watch: {
rootRoute: function() {
this.setAppTitle();
this.redirectIfNeeded();
},
mode: function() {
this.setAppTitle();
this.redirectIfNeeded();
}
},
@@ -123,6 +121,9 @@ class App extends Vue {
});
}
});
this.setAppTitle();
this.redirectIfNeeded();
}
toggleCollapse() {
@@ -201,15 +202,18 @@ class App extends Vue {
}
redirectIfNeeded() {
if ((this.mode == 'reader' || this.mode == 'omnireader') && (this.rootRoute != '/reader')) {
if ((this.mode == 'reader' || this.mode == 'omnireader') && (!this.isReaderActive)) {
//старый url
const search = window.location.search.substr(1);
const url = search.split('url=')[1] || '';
const s = search.split('url=');
const url = s[1] || '';
const q = utils.parseQuery(s[0] || '');
if (url) {
window.location = `/#/reader?url=${url}`;
} else {
this.$router.replace('/reader');
q.url = decodeURIComponent(url);
}
window.history.replaceState({}, '', '/');
this.$router.replace({ path: '/reader', query: q });
}
//yandex-метрика для omnireader

View File

@@ -94,6 +94,6 @@ class ProgressPage extends Vue {
</style>
<style>
.el-progress__text {
color: lightgreen;
color: lightgreen !important;
}
</style>

View File

@@ -1036,7 +1036,7 @@ class Reader extends Vue {
overflow-x: auto;
overflow-y: hidden;
}
.header {
display: flex;
justify-content: space-between;
@@ -1064,6 +1064,10 @@ class Reader extends Vue {
box-shadow: 3px 3px 5px black;
}
.tool-button + .tool-button {
margin: 0 2px 0 2px;
}
.tool-button:hover {
background-color: white;
}

View File

@@ -871,9 +871,9 @@ class SettingsPage extends Vue {
}
.el-form-item {
padding: 0;
margin: 0;
margin-bottom: 5px;
padding: 0 !important;
margin: 0 !important;
margin-bottom: 5px !important;
}
.color-picked {

View File

@@ -174,7 +174,6 @@ class TextPage extends Vue {
this.$refs.statusBar.style.top = (this.statusBarTop ? 1 : this.realHeight - this.statusBarHeight) + 'px';
this.statusBarColor = this.hex2rgba(this.textColor || '#000000', this.statusBarColorAlpha);
this.statusBarClickable = this.drawHelper.statusBarClickable(this.statusBarTop, this.statusBarHeight);
//drawHelper
this.drawHelper.realWidth = this.realWidth;
@@ -201,6 +200,9 @@ class TextPage extends Vue {
this.drawHelper.lineHeight = this.lineHeight;
this.drawHelper.context = this.context;
//statusBar
this.statusBarClickable = this.drawHelper.statusBarClickable(this.statusBarTop, this.statusBarHeight);
//parsed
if (this.parsed) {
this.parsed.p = this.p;

View File

@@ -143,7 +143,6 @@ class BookManager {
}
}
async deflateWithProgress(data, callback) {
const chunkSize = 128*1024;
const deflator = new utils.pako.Deflate({level: 5});
@@ -178,6 +177,40 @@ class BookManager {
return deflator.result;
}
async inflateWithProgress(data, callback) {
const chunkSize = 64*1024;
const inflator = new utils.pako.Inflate({to: 'string'});
let chunkTotal = 1 + Math.floor(data.length/chunkSize);
let chunkNum = 0;
let perc = 0;
let prevPerc = 0;
for (var i = 0; i < data.length; i += chunkSize) {
if ((i + chunkSize) >= data.length) {
inflator.push(data.subarray(i, i + chunkSize), true);
} else {
inflator.push(data.subarray(i, i + chunkSize), false);
}
chunkNum++;
perc = Math.round(chunkNum/chunkTotal*100);
if (perc != prevPerc) {
callback(perc);
await utils.sleep(1);
prevPerc = perc;
}
}
if (inflator.err) {
throw new Error(inflator.msg);
}
callback(100);
return inflator.result;
}
async addBook(newBook, callback) {
if (!this.books)
await this.init();
@@ -239,12 +272,18 @@ class BookManager {
if (result && !result.parsed) {
let data = await bmDataStore.getItem(`bmData-${meta.key}`);
callback(10);
callback(5);
await utils.sleep(10);
let cb = (perc) => {
const p = 5 + Math.round(15*perc/100);
callback(p);
};
if (result.dataCompressed) {
try {
data = utils.pako.inflate(data, {to: 'string'});
//data = utils.pako.inflate(data, {to: 'string'});
data = await this.inflateWithProgress(data, cb);
} catch (e) {
this.delBook(meta);
throw e;
@@ -252,7 +291,7 @@ class BookManager {
}
callback(20);
const cb = (perc) => {
cb = (perc) => {
const p = 20 + Math.round(80*perc/100);
callback(p);
};

View File

@@ -1,4 +1,15 @@
export const versionHistory = [
{
showUntil: '2019-07-20',
header: '0.6.10 (2019-07-21)',
content:
`
<ul>
<li>исправления багов</li>
</ul>
`
},
{
showUntil: '2019-06-22',
header: '0.6.9 (2019-06-23)',

View File

@@ -1,10 +1,10 @@
import Vue from 'vue';
import App from './components/App.vue';
import router from './router';
import store from './store';
import './element';
import App from './components/App.vue';
//Vue.config.productionTip = false;
new Vue({

View File

@@ -2,21 +2,25 @@ import Vue from 'vue';
import VueRouter from 'vue-router';
import _ from 'lodash';
import App from './components/App.vue';
//немедленная загрузка
import CardIndex from './components/CardIndex/CardIndex.vue';
//const CardIndex = () => import('./components/CardIndex/CardIndex.vue');
const CardIndex = () => import('./components/CardIndex/CardIndex.vue');
const Search = () => import('./components/CardIndex/Search/Search.vue');
const Card = () => import('./components/CardIndex/Card/Card.vue');
const Book = () => import('./components/CardIndex/Book/Book.vue');
const History = () => import('./components/CardIndex/History/History.vue');
const Reader = () => import('./components/Reader/Reader.vue');
//немедленная загрузка
//const Reader = () => import('./components/Reader/Reader.vue');
import Reader from './components/Reader/Reader.vue';
//const Forum = () => import('./components/Forum/Forum.vue');
const Income = () => import('./components/Income/Income.vue');
const Sources = () => import('./components/Sources/Sources.vue');
const Settings = () => import('./components/Settings/Settings.vue');
const Help = () => import('./components/Help/Help.vue');
const NotFound404 = () => import('./components/NotFound404/NotFound404.vue');
//const NotFound404 = () => import('./components/NotFound404/NotFound404.vue');
const myRoutes = [
['/', null, null, '/cardindex'],

View File

@@ -166,3 +166,27 @@ export function applyObjDiff(obj, diff, isAddChanged) {
return result;
}
export function parseQuery(str) {
if (typeof str != 'string' || str.length == 0)
return {};
let s = str.split('&');
let s_length = s.length;
let bit, query = {}, first, second;
for (let i = 0; i < s_length; i++) {
bit = s[i].split('=');
first = decodeURIComponent(bit[0]);
if (first.length == 0)
continue;
second = decodeURIComponent(bit[1]);
if (typeof query[first] == 'undefined')
query[first] = second;
else
if (query[first] instanceof Array)
query[first].push(second);
else
query[first] = [query[first], second];
}
return query;
}

View File

@@ -1,6 +1,6 @@
{
"name": "Liberama",
"version": "0.6.9",
"version": "0.6.10",
"engines": {
"node": ">=10.0.0"
},