Рефакторинг
This commit is contained in:
@@ -44,7 +44,7 @@
|
||||
@focus="selectAllOnFocus" @keydown="bookUrlKeyDown"
|
||||
>
|
||||
<template v-slot:prepend>
|
||||
<q-btn class="q-mr-xs" round dense color="blue" icon="la la-home" @click="goToLink(libs.startLink)" size="12px">
|
||||
<q-btn class="q-mr-xs" round dense color="blue" icon="la la-home" @click="goToLink(selectedLink, true)" size="12px">
|
||||
<q-tooltip :delay="1500" anchor="bottom middle" content-style="font-size: 80%">Вернуться на стартовую страницу</q-tooltip>
|
||||
</q-btn>
|
||||
<q-btn round dense color="blue" icon="la la-angle-double-down" @click="openBookUrlInFrame" size="12px" :disabled="!bookUrl">
|
||||
@@ -137,12 +137,6 @@ export default @Component({
|
||||
libs: function() {
|
||||
this.loadLibs();
|
||||
},
|
||||
rootLink: function() {
|
||||
this.updateSelectedLink();
|
||||
},
|
||||
selectedLink: function() {
|
||||
this.updateStartLink();
|
||||
},
|
||||
defaultRootLink: function() {
|
||||
this.updateBookmarkLink();
|
||||
},
|
||||
@@ -169,7 +163,6 @@ export default @Component({
|
||||
class ExternalLibs extends Vue {
|
||||
ready = false;
|
||||
frameVisible = false;
|
||||
startLink = '';
|
||||
rootLink = '';
|
||||
selectedLink = '';
|
||||
frameSrc = '';
|
||||
@@ -193,8 +186,9 @@ class ExternalLibs extends Vue {
|
||||
this.fullScreenActive = (document.fullscreenElement !== null);
|
||||
});
|
||||
|
||||
this.commitInProgress = false;
|
||||
|
||||
this.debouncedGoToLink = _.debounce((link, force) => {
|
||||
this.goToLink(link, force);
|
||||
}, 100, {'maxWait':200});
|
||||
//this.commit = this.$store.commit;
|
||||
//this.commit('reader/setLibs', rstore.libsDefaults);
|
||||
}
|
||||
@@ -285,7 +279,6 @@ class ExternalLibs extends Vue {
|
||||
case 'hello': this.sendMessage({type: 'mes', data: 'ready'}); break;
|
||||
}
|
||||
} else if (d.type == 'libs') {
|
||||
this.commitInProgress = false;
|
||||
this.ready = true;
|
||||
this.libs = _.cloneDeep(d.data);
|
||||
} else if (d.type == 'notify') {
|
||||
@@ -309,50 +302,22 @@ class ExternalLibs extends Vue {
|
||||
}
|
||||
|
||||
commitLibs(libs) {
|
||||
(async() => {
|
||||
let i = 0;
|
||||
while (this.commitInProgress && i < 50) {//1 сек
|
||||
await utils.sleep(20);
|
||||
i++;
|
||||
}
|
||||
|
||||
if (!this.commitInProgress) {
|
||||
this.commitInProgress = true;
|
||||
this.sendMessage({type: 'libs', data: libs});
|
||||
} else {
|
||||
throw new Error('Commit failed');
|
||||
}
|
||||
})();
|
||||
this.sendMessage({type: 'libs', data: libs});
|
||||
}
|
||||
|
||||
loadLibs() {
|
||||
const libs = this.libs;
|
||||
try {
|
||||
this.startLink = libs.startLink;
|
||||
this.rootLink = lu.getOrigin(libs.startLink);
|
||||
} catch(e) {
|
||||
this.startLink = '';
|
||||
this.rootLink = '';
|
||||
}
|
||||
|
||||
this.updateSelectedLink();
|
||||
this.selectedLink = libs.startLink;
|
||||
|
||||
this.updateStartLink();
|
||||
}
|
||||
|
||||
doAction(event) {
|
||||
switch (event.action) {
|
||||
case 'setLibs': this.commitLibs(event.data); break;
|
||||
case 'setRootLink': this.rootLink = event.data; break;
|
||||
case 'setSelectedLink':
|
||||
this.rootLink = lu.getOrigin(event.data);
|
||||
this.$nextTick(async() => {
|
||||
let i = 0;
|
||||
while (this.commitInProgress && i < 50) {//1 сек
|
||||
await utils.sleep(20);
|
||||
i++;
|
||||
}
|
||||
this.selectedLink = event.data;
|
||||
});
|
||||
break;
|
||||
case 'setRootLink': this.rootLink = event.data; this.rootLinkInput(); break;
|
||||
case 'setSelectedLink': this.selectedLink = event.data; this.selectedLinkInput(); break;
|
||||
case 'editBookmark': this.addBookmark('edit', event.data.link, event.data.desc); break;
|
||||
case 'addBookmark': this.addBookmark('add'); break;
|
||||
}
|
||||
@@ -364,8 +329,8 @@ class ExternalLibs extends Vue {
|
||||
|
||||
get header() {
|
||||
let result = (this.ready ? 'Библиотека' : 'Загрузка...');
|
||||
if (this.ready && this.startLink) {
|
||||
result += ` | ${(this.libs.comment ? this.libs.comment + ' ': '') + lu.removeProtocol(this.startLink)}`;
|
||||
if (this.ready && this.selectedLink) {
|
||||
result += ` | ${(this.libs.comment ? this.libs.comment + ' ': '') + lu.removeProtocol(this.libs.startLink)}`;
|
||||
}
|
||||
this.$root.$emit('set-app-title', result);
|
||||
return result;
|
||||
@@ -375,7 +340,7 @@ class ExternalLibs extends Vue {
|
||||
return lu.removeProtocol(this.rootLink);
|
||||
}
|
||||
|
||||
updateSelectedLink() {
|
||||
updateSelectedLinkByRoot() {
|
||||
if (!this.ready)
|
||||
return;
|
||||
|
||||
@@ -386,29 +351,35 @@ class ExternalLibs extends Vue {
|
||||
this.selectedLink = '';
|
||||
}
|
||||
|
||||
updateStartLink() {
|
||||
updateStartLink(force) {
|
||||
if (!this.ready)
|
||||
return;
|
||||
const index = lu.getSafeRootIndexByUrl(this.libs.groups, this.rootLink);
|
||||
|
||||
let index = -1;
|
||||
try {
|
||||
this.rootLink = lu.getOrigin(this.selectedLink);
|
||||
index = lu.getRootIndexByUrl(this.libs.groups, this.rootLink);
|
||||
} catch(e) {
|
||||
//
|
||||
}
|
||||
|
||||
if (index >= 0) {
|
||||
let libs = _.cloneDeep(this.libs);
|
||||
try {
|
||||
if (lu.getOrigin(libs.groups[index].r) == lu.getOrigin(this.selectedLink)) {
|
||||
libs.groups[index].s = this.selectedLink;
|
||||
libs.startLink = this.selectedLink;
|
||||
libs.comment = this.getCommentByLink(libs.groups[index].list, this.selectedLink);
|
||||
this.goToLink(this.selectedLink);
|
||||
this.commitLibs(libs);
|
||||
} else {
|
||||
console.error(`${lu.getOrigin(libs.groups[index].r)} != ${lu.getOrigin(this.selectedLink)}`);
|
||||
}
|
||||
} catch(e) {
|
||||
console.log(e);
|
||||
const com = this.getCommentByLink(libs.groups[index].list, this.selectedLink);
|
||||
if (libs.groups[index].s != this.selectedLink ||
|
||||
libs.startLink != this.selectedLink ||
|
||||
libs.comment != com) {
|
||||
libs.groups[index].s = this.selectedLink;
|
||||
libs.startLink = this.selectedLink;
|
||||
libs.comment = com;
|
||||
this.commitLibs(libs);
|
||||
}
|
||||
|
||||
this.debouncedGoToLink(this.selectedLink, force);
|
||||
} else {
|
||||
this.rootLink = '';
|
||||
this.startLink = '';
|
||||
this.frameVisible = false;
|
||||
this.selectedLink = '';
|
||||
this.debouncedGoToLink(this.selectedLink, force);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -451,23 +422,32 @@ class ExternalLibs extends Vue {
|
||||
|
||||
openBookUrlInFrame() {
|
||||
if (this.bookUrl) {
|
||||
this.goToLink(lu.addProtocol(this.bookUrl));
|
||||
this.goToLink(lu.addProtocol(this.bookUrl), true);
|
||||
}
|
||||
}
|
||||
|
||||
goToLink(link) {
|
||||
goToLink(link, force) {
|
||||
if (!this.ready || !link)
|
||||
return;
|
||||
|
||||
this.frameSrc = this.makeProxySubst(link);
|
||||
this.frameVisible = false;
|
||||
this.$nextTick(() => {
|
||||
this.frameVisible = true;
|
||||
if (!link) {
|
||||
this.frameVisible = false;
|
||||
return;
|
||||
}
|
||||
|
||||
const newLink = this.makeProxySubst(link);
|
||||
if (force || newLink != this.frameSrc) {
|
||||
this.frameSrc = newLink;
|
||||
|
||||
this.frameVisible = false;
|
||||
this.$nextTick(() => {
|
||||
if (this.$refs.frame)
|
||||
this.$refs.frame.contentWindow.focus();
|
||||
this.frameVisible = true;
|
||||
this.$nextTick(() => {
|
||||
if (this.$refs.frame)
|
||||
this.$refs.frame.contentWindow.focus();
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
getCommentByLink(list, link) {
|
||||
@@ -493,12 +473,12 @@ class ExternalLibs extends Vue {
|
||||
}
|
||||
|
||||
rootLinkInput() {
|
||||
this.updateSelectedLink();
|
||||
this.updateStartLink();
|
||||
this.updateSelectedLinkByRoot();
|
||||
this.updateStartLink(true);
|
||||
}
|
||||
|
||||
selectedLinkInput() {
|
||||
this.updateStartLink();
|
||||
this.updateStartLink(true);
|
||||
}
|
||||
|
||||
submitUrl() {
|
||||
|
||||
Reference in New Issue
Block a user