From ff26b2744895cf65f85c9a61997db4d4c27479fa Mon Sep 17 00:00:00 2001 From: Andy Stewart Date: Wed, 2 Oct 2019 21:07:00 +0800 Subject: [PATCH] Split open new tab url javascript to single js file. --- core/browser.py | 58 ++---------------------------- core/javascript/open_in_new_tab.js | 56 +++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+), 56 deletions(-) create mode 100644 core/javascript/open_in_new_tab.js diff --git a/core/browser.py b/core/browser.py index 795ce73..e68a548 100644 --- a/core/browser.py +++ b/core/browser.py @@ -164,62 +164,8 @@ class WebHitTestResult(): self.m_linkUrl = self.page.url().toString() self.m_baseUrl = self.page.url().toString() self.viewportPos = self.page.mapToViewport(self.pos) - self.source = """(function() { - let e = document.elementFromPoint(%1, %2); - if (!e) - return; - function isMediaElement(e) { - return e.tagName == 'AUDIO' || e.tagName == 'VIDEO'; - }; - function isEditableElement(e) { - if (e.isContentEditable) - return true; - if (e.tagName === 'INPUT' || e.tagName === 'TEXTAREA') - return e.getAttribute('readonly') != 'readonly'; - return false; - }; - function isSelected(e) { - let selection = window.getSelection(); - if (selection.type !== 'Range') - return false; - return window.getSelection().containsNode(e, true); - }; - let res = { - baseUrl: document.baseURI, - alternateText: e.getAttribute('alt'), - boundingRect: '', - imageUrl: '', - contentEditable: isEditableElement(e), - contentSelected: isSelected(e), - linkTitle: '', - linkUrl: '', - mediaUrl: '', - tagName: e.tagName.toLowerCase() - }; - let r = e.getBoundingClientRect(); - res.boundingRect = [r.top, r.left, r.width, r.height]; - if (e.tagName == 'IMG') - res.imageUrl = e.getAttribute('src'); - if (e.tagName == 'A') { - res.linkTitle = e.text; - res.linkUrl = e.getAttribute('href'); - } - while (e) { - if (res.linkTitle === '' && e.tagName === 'A') { - res.linkTitle = e.text; - if(res.linkUrl === '') { - res.linkUrl = e.getAttribute('href'); - } - } - if (res.mediaUrl === '' && isMediaElement(e)) { - res.mediaUrl = e.currentSrc; - res.mediaPaused = e.paused; - res.mediaMuted = e.muted; - } - e = e.parentElement; - } - return res; - })()""" + with open("./javascript/open_in_new_tab.js", 'r') as f: + self.source = f.read() self.js = self.source.replace("%1", str(self.viewportPos.x())).replace("%2", str(self.viewportPos.y())) self.dic = self.page.executeJavaScript(self.js) diff --git a/core/javascript/open_in_new_tab.js b/core/javascript/open_in_new_tab.js new file mode 100644 index 0000000..1b2aa8f --- /dev/null +++ b/core/javascript/open_in_new_tab.js @@ -0,0 +1,56 @@ +(function() { + let e = document.elementFromPoint(%1, %2); + if (!e) + return; + function isMediaElement(e) { + return e.tagName == 'AUDIO' || e.tagName == 'VIDEO'; + }; + function isEditableElement(e) { + if (e.isContentEditable) + return true; + if (e.tagName === 'INPUT' || e.tagName === 'TEXTAREA') + return e.getAttribute('readonly') != 'readonly'; + return false; + }; + function isSelected(e) { + let selection = window.getSelection(); + if (selection.type !== 'Range') + return false; + return window.getSelection().containsNode(e, true); + }; + let res = { + baseUrl: document.baseURI, + alternateText: e.getAttribute('alt'), + boundingRect: '', + imageUrl: '', + contentEditable: isEditableElement(e), + contentSelected: isSelected(e), + linkTitle: '', + linkUrl: '', + mediaUrl: '', + tagName: e.tagName.toLowerCase() + }; + let r = e.getBoundingClientRect(); + res.boundingRect = [r.top, r.left, r.width, r.height]; + if (e.tagName == 'IMG') + res.imageUrl = e.getAttribute('src'); + if (e.tagName == 'A') { + res.linkTitle = e.text; + res.linkUrl = e.getAttribute('href'); + } + while (e) { + if (res.linkTitle === '' && e.tagName === 'A') { + res.linkTitle = e.text; + if(res.linkUrl === '') { + res.linkUrl = e.getAttribute('href'); + } + } + if (res.mediaUrl === '' && isMediaElement(e)) { + res.mediaUrl = e.currentSrc; + res.mediaPaused = e.paused; + res.mediaMuted = e.muted; + } + e = e.parentElement; + } + return res; +})()