Frontend updates
This commit is contained in:
parent
a6903d68a4
commit
cc72514ce6
@ -29,7 +29,8 @@ async function searchFrontendSetup() {
|
|||||||
'/fg/js/frontend-api-receiver.js',
|
'/fg/js/frontend-api-receiver.js',
|
||||||
'/fg/js/popup.js',
|
'/fg/js/popup.js',
|
||||||
'/fg/js/popup-proxy-host.js',
|
'/fg/js/popup-proxy-host.js',
|
||||||
'/fg/js/frontend.js'
|
'/fg/js/frontend.js',
|
||||||
|
'/fg/js/frontend-initialize.js'
|
||||||
];
|
];
|
||||||
for (const src of scriptSrcs) {
|
for (const src of scriptSrcs) {
|
||||||
const script = document.createElement('script');
|
const script = document.createElement('script');
|
||||||
|
@ -96,7 +96,7 @@ class DisplayFloat extends Display {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
initialize(options, popupInfo, url) {
|
initialize(options, popupInfo, url, childrenSupported) {
|
||||||
const css = options.general.customPopupCss;
|
const css = options.general.customPopupCss;
|
||||||
if (css) {
|
if (css) {
|
||||||
this.setStyle(css);
|
this.setStyle(css);
|
||||||
@ -105,8 +105,11 @@ class DisplayFloat extends Display {
|
|||||||
const {id, depth, parentFrameId} = popupInfo;
|
const {id, depth, parentFrameId} = popupInfo;
|
||||||
this.optionsContext.depth = depth;
|
this.optionsContext.depth = depth;
|
||||||
this.optionsContext.url = url;
|
this.optionsContext.url = url;
|
||||||
|
|
||||||
|
if (childrenSupported) {
|
||||||
popupNestedInitialize(id, depth, parentFrameId, url);
|
popupNestedInitialize(id, depth, parentFrameId, url);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
setStyle(css) {
|
setStyle(css) {
|
||||||
const parent = document.head;
|
const parent = document.head;
|
||||||
@ -138,7 +141,7 @@ DisplayFloat.messageHandlers = {
|
|||||||
kanjiShow: (self, {definitions, options, context}) => self.kanjiShow(definitions, options, context),
|
kanjiShow: (self, {definitions, options, context}) => self.kanjiShow(definitions, options, context),
|
||||||
clearAutoPlayTimer: (self) => self.clearAutoPlayTimer(),
|
clearAutoPlayTimer: (self) => self.clearAutoPlayTimer(),
|
||||||
orphaned: (self) => self.onOrphaned(),
|
orphaned: (self) => self.onOrphaned(),
|
||||||
initialize: (self, {options, popupInfo, url}) => self.initialize(options, popupInfo, url)
|
initialize: (self, {options, popupInfo, url, childrenSupported}) => self.initialize(options, popupInfo, url, childrenSupported)
|
||||||
};
|
};
|
||||||
|
|
||||||
window.yomichan_display = new DisplayFloat();
|
window.yomichan_display = new DisplayFloat();
|
||||||
|
20
ext/fg/js/frontend-initialize.js
Normal file
20
ext/fg/js/frontend-initialize.js
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2019 Alex Yatskov <alex@foosoft.net>
|
||||||
|
* Author: Alex Yatskov <alex@foosoft.net>
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
window.yomichan_frontend = Frontend.create();
|
@ -41,6 +41,9 @@ class Frontend {
|
|||||||
|
|
||||||
this.enabled = false;
|
this.enabled = false;
|
||||||
this.eventListeners = [];
|
this.eventListeners = [];
|
||||||
|
|
||||||
|
this.isPreparedPromiseResolve = null;
|
||||||
|
this.isPreparedPromise = new Promise((resolve) => { this.isPreparedPromiseResolve = resolve; });
|
||||||
}
|
}
|
||||||
|
|
||||||
static create() {
|
static create() {
|
||||||
@ -59,11 +62,16 @@ class Frontend {
|
|||||||
await this.updateOptions();
|
await this.updateOptions();
|
||||||
|
|
||||||
chrome.runtime.onMessage.addListener(this.onRuntimeMessage.bind(this));
|
chrome.runtime.onMessage.addListener(this.onRuntimeMessage.bind(this));
|
||||||
|
this.isPreparedPromiseResolve();
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
this.onError(e);
|
this.onError(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
isPrepared() {
|
||||||
|
return this.isPreparedPromise;
|
||||||
|
}
|
||||||
|
|
||||||
onMouseOver(e) {
|
onMouseOver(e) {
|
||||||
if (e.target === this.popup.container && this.popupTimer !== null) {
|
if (e.target === this.popup.container && this.popupTimer !== null) {
|
||||||
this.popupTimerClear();
|
this.popupTimerClear();
|
||||||
@ -303,6 +311,10 @@ class Frontend {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const textSource = docRangeFromPoint(x, y, this.options);
|
const textSource = docRangeFromPoint(x, y, this.options);
|
||||||
|
return await this.searchSource(textSource, cause);
|
||||||
|
}
|
||||||
|
|
||||||
|
async searchSource(textSource, cause) {
|
||||||
let hideResults = textSource === null;
|
let hideResults = textSource === null;
|
||||||
let searched = false;
|
let searched = false;
|
||||||
let success = false;
|
let success = false;
|
||||||
@ -560,6 +572,3 @@ Frontend.runtimeMessageHandlers = {
|
|||||||
self.popup.setVisibleOverride(visible);
|
self.popup.setVisibleOverride(visible);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
window.yomichan_frontend = Frontend.create();
|
|
||||||
|
@ -41,7 +41,8 @@ async function popupNestedInitialize(id, depth, parentFrameId, url) {
|
|||||||
'/fg/js/frontend-api-sender.js',
|
'/fg/js/frontend-api-sender.js',
|
||||||
'/fg/js/popup.js',
|
'/fg/js/popup.js',
|
||||||
'/fg/js/popup-proxy.js',
|
'/fg/js/popup-proxy.js',
|
||||||
'/fg/js/frontend.js'
|
'/fg/js/frontend.js',
|
||||||
|
'/fg/js/frontend-initialize.js'
|
||||||
];
|
];
|
||||||
for (const src of scriptSrcs) {
|
for (const src of scriptSrcs) {
|
||||||
const script = document.createElement('script');
|
const script = document.createElement('script');
|
||||||
|
@ -25,6 +25,7 @@ class Popup {
|
|||||||
this.frameId = null;
|
this.frameId = null;
|
||||||
this.parent = null;
|
this.parent = null;
|
||||||
this.child = null;
|
this.child = null;
|
||||||
|
this.childrenSupported = true;
|
||||||
this.container = document.createElement('iframe');
|
this.container = document.createElement('iframe');
|
||||||
this.container.id = 'yomichan-float';
|
this.container.id = 'yomichan-float';
|
||||||
this.container.addEventListener('mousedown', e => e.stopPropagation());
|
this.container.addEventListener('mousedown', e => e.stopPropagation());
|
||||||
@ -70,7 +71,8 @@ class Popup {
|
|||||||
depth: this.depth,
|
depth: this.depth,
|
||||||
parentFrameId
|
parentFrameId
|
||||||
},
|
},
|
||||||
url: this.url
|
url: this.url,
|
||||||
|
childrenSupported: this.childrenSupported
|
||||||
});
|
});
|
||||||
resolve();
|
resolve();
|
||||||
});
|
});
|
||||||
|
@ -26,7 +26,8 @@
|
|||||||
"fg/js/source.js",
|
"fg/js/source.js",
|
||||||
"fg/js/util.js",
|
"fg/js/util.js",
|
||||||
"fg/js/popup-proxy-host.js",
|
"fg/js/popup-proxy-host.js",
|
||||||
"fg/js/frontend.js"
|
"fg/js/frontend.js",
|
||||||
|
"fg/js/frontend-initialize.js"
|
||||||
],
|
],
|
||||||
"css": ["fg/css/client.css"],
|
"css": ["fg/css/client.css"],
|
||||||
"all_frames": true
|
"all_frames": true
|
||||||
|
Loading…
Reference in New Issue
Block a user