Skip to content

Commit

Permalink
Create web window with given module name.
Browse files Browse the repository at this point in the history
  • Loading branch information
manateelazycat committed Nov 20, 2021
1 parent 4eed5e9 commit e562c42
Show file tree
Hide file tree
Showing 5 changed files with 82 additions and 85 deletions.
18 changes: 14 additions & 4 deletions extension/dict/popweb-dict-bing.el
Expand Up @@ -94,11 +94,10 @@
(height 0.5)
(word (nth 0 info))
(url (format "http://www.bing.com/dict/search?mkt=zh-cn&q=%s" word))
(js-code "window.scrollTo(0, 0); document.getElementsByTagName('html')[0].style.visibility = 'hidden'; document.getElementsByClassName('lf_area')[0].style.visibility = 'visible'; document.getElementsByTagName('header')[0].style.display = 'none'; document.getElementsByClassName('contentPadding')[0].style.padding = '10px';")
(use-proxy "false"))
(js-code "window.scrollTo(0, 0); document.getElementsByTagName('html')[0].style.visibility = 'hidden'; document.getElementsByClassName('lf_area')[0].style.visibility = 'visible'; document.getElementsByTagName('header')[0].style.display = 'none'; document.getElementsByClassName('contentPadding')[0].style.padding = '10px';"))
(popweb-say-word word)
(popweb-call-async "pop_translate_window" x y x-offset y-offset width height url js-code use-proxy)
(popweb-web-window-can-hide)))
(popweb-call-async "pop_translate_window" "dict_bing" x y x-offset y-offset width height url js-code)
(popweb-dict-bing-web-window-can-hide)))

(defun popweb-dict-bing-input (&optional word)
(interactive)
Expand All @@ -108,6 +107,17 @@
(interactive)
(popweb-start 'popweb-dict-bing-translate (list (popweb-region-or-word))))

(defvar popweb-dict-bing-web-window-visible-p nil)

(defun popweb-dict-bing-web-window-hide-after-move ()
(when popweb-dict-bing-web-window-visible-p
(popweb-call-async "hide_web_window" "dict_bing")
(setq popweb-dict-bing-web-window-visible-p nil)))

(defun popweb-dict-bing-web-window-can-hide ()
(run-with-timer 1 nil (lambda () (setq popweb-dict-bing-web-window-visible-p t))))

(add-hook 'post-command-hook #'popweb-dict-bing-web-window-hide-after-move)

(provide 'popweb-dict-bing)

Expand Down
19 changes: 15 additions & 4 deletions extension/dict/popweb-dict-youdao.el
Expand Up @@ -94,11 +94,10 @@
(height 0.5)
(word (nth 0 info))
(url (format "https://www.youdao.com/w/eng/%s" word))
(js-code "window.scrollTo(0, 0); document.getElementsByTagName('html')[0].style.visibility = 'hidden'; document.getElementById('results').style.visibility = 'visible'; document.getElementById('scontainer').style.margin = '0'; document.getElementById('scontainer').style.padding = '0'; document.getElementById('result_navigator').style.display = 'none'; document.getElementById('container').style.padding = '0'; document.getElementById('container').style.paddingLeft = '10px'; document.getElementById('container').style.margin = '0'; document.getElementById('topImgAd').style.display = 'none'; ")
(use-proxy "false"))
(js-code "window.scrollTo(0, 0); document.getElementsByTagName('html')[0].style.visibility = 'hidden'; document.getElementById('results').style.visibility = 'visible'; document.getElementById('scontainer').style.margin = '0'; document.getElementById('scontainer').style.padding = '0'; document.getElementById('result_navigator').style.display = 'none'; document.getElementById('container').style.padding = '0'; document.getElementById('container').style.paddingLeft = '10px'; document.getElementById('container').style.margin = '0'; document.getElementById('topImgAd').style.display = 'none'; "))
(popweb-say-word word)
(popweb-call-async "pop_translate_window" x y x-offset y-offset width height url js-code use-proxy)
(popweb-web-window-can-hide)))
(popweb-call-async "pop_translate_window" "dict_youdao" x y x-offset y-offset width height url js-code)
(popweb-dict-youdao-web-window-can-hide)))

(defun popweb-dict-youdao-input (&optional word)
(interactive)
Expand All @@ -108,6 +107,18 @@
(interactive)
(popweb-start 'popweb-dict-youdao-translate (list (popweb-region-or-word))))

(defvar popweb-dict-youdao-web-window-visible-p nil)

(defun popweb-dict-youdao-web-window-hide-after-move ()
(when popweb-dict-youdao-web-window-visible-p
(popweb-call-async "hide_web_window" "dict_youdao")
(setq popweb-dict-youdao-web-window-visible-p nil)))

(defun popweb-dict-youdao-web-window-can-hide ()
(run-with-timer 1 nil (lambda () (setq popweb-dict-youdao-web-window-visible-p t))))

(add-hook 'post-command-hook #'popweb-dict-youdao-web-window-hide-after-move)

(provide 'popweb-dict-youdao)

;;; popweb-dict-youdao.el ends here
6 changes: 3 additions & 3 deletions extension/latex/popweb-latex.el
Expand Up @@ -101,7 +101,7 @@
(height 0.1)
(show-window (nth 0 info))
(latex-string (nth 1 info)))
(popweb-call-async "pop_katex_window" x y x-offset y-offset width height popweb-latex-index-path show-window latex-string)))
(popweb-call-async "pop_latex_window" "latex" x y x-offset y-offset width height popweb-latex-index-path show-window latex-string)))

(defun popweb-latex-show ()
(interactive)
Expand Down Expand Up @@ -132,7 +132,7 @@
(if latex-string
(if (not (eq latex-string webkit-katex-render--previous-math))
(progn
(popweb-call-async "pop_katex_window"
(popweb-call-async "pop_latex_window" "latex"
x y x-offset y-offset width height popweb-latex-index-path
t
(--> latex-string
Expand All @@ -144,7 +144,7 @@
(defun popweb-latex-hide ()
(interactive)
(ignore-errors
(popweb-call-async "katex_hide_web_window")))
(popweb-call-async "hide_web_window" "latex")))

(defun popweb-latex-hide-after-switch-buffer ()
(unless (equal (current-buffer) popweb-latex-current-buffer)
Expand Down
12 changes: 0 additions & 12 deletions popweb.el
Expand Up @@ -352,18 +352,6 @@ Otherwise return word around point."
(format "http://dict.youdao.com/dictvoice?type=2&audio=%s" (url-hexify-string word)))
(message "mpv, mplayer or mpg123 is needed to play word voice")))))

(defvar popweb-web-window-visible-p nil)

(defun popweb-web-window-hide-after-move ()
(when popweb-web-window-visible-p
(popweb-call-async "hide_web_window")
(setq popweb-web-window-visible-p nil)))

(defun popweb-web-window-can-hide ()
(run-with-timer 1 nil (lambda () (setq popweb-web-window-visible-p t))))

(add-hook 'post-command-hook #'popweb-web-window-hide-after-move)

(defun popweb-get-theme-mode ()
(format "%s" (frame-parameter nil 'background-mode)))

Expand Down
112 changes: 50 additions & 62 deletions popweb.py
Expand Up @@ -225,13 +225,6 @@ def execute_load_finish_js_code(self):
if self.load_finish_callback != None:
self.load_finish_callback()

def eventFilter(self, source, event):
if event.type() == QtCore.QEvent.WindowDeactivate:
self.hide()
return True

return super(WebWindow, self).eventFilter(source, event)

def load_dark_mode_js(self):
self.webview.page().runJavaScript('''if (typeof DarkReader === 'undefined') {{ {} }} '''.format(self.dark_mode_js))

Expand Down Expand Up @@ -267,7 +260,7 @@ def __init__(self, args):
self.server_thread = threading.Thread(target=self.server.serve_forever)
self.server_thread.start()

self.web_window = WebWindow()
self.web_window_dict = {}

# Pass epc port and webengine codec information to Emacs when first start POPWEB.
eval_in_emacs('popweb--first-start', [self.server.server_address[1]])
Expand Down Expand Up @@ -317,80 +310,75 @@ def toggle_proxy(self):
else:
self.enable_proxy()

def adjust_web_window_position(self, x, y, x_offset, y_offset, width_scale, height_scale):
global screen_size
def get_web_window(self, module_name):
if module_name not in self.web_window_dict:
self.web_window_dict[module_name] = WebWindow()

self.window_width = screen_size.width() * width_scale
self.window_height = screen_size.height() * height_scale
self.window_x = x + x_offset
if self.window_x + self.window_width > screen_size.width():
self.window_x = x - self.window_width - x_offset
self.window_y = y + y_offset
if self.window_y + self.window_height > screen_size.height():
self.window_y = y - self.window_height
return self.web_window_dict[module_name]

# KaTex plugin code, we should split those code out with dynamical module technology.
@PostGui()
def pop_katex_window(self, x, y, x_offset, y_offset, width_scale, height_scale, index_file, show_window, latex_string):
self.disable_proxy()
self.web_window.loading_js_code = ""
def pop_latex_window(self, module_name, x, y, x_offset, y_offset, width_scale, height_scale, index_file, show_window, latex_string):
global screen_size

self.adjust_web_window_position(x, y, x_offset, y_offset, width_scale, height_scale)
def render_latex(web_window, window_x, window_y, show_window):
render_width = web_window.web_page.execute_javascript("document.getElementById('katex-preview').offsetWidth;")
render_height = web_window.web_page.execute_javascript("document.getElementById('katex-preview').offsetHeight;")
if render_width == None or render_height == None:
render_width = 0
render_height = 0

self.show_window = show_window
web_window.update_theme_mode()
web_window.resize(int(render_width * web_window.zoom_factor * 1.2),
int(render_height * web_window.zoom_factor))

if (int(window_x - render_width/2) > 0):
web_window.move(int(window_x - render_width/2), window_y)
else:
web_window.move(0, window_y)

if show_window:
web_window.show()

web_window = self.get_web_window(module_name)
index_html = open(index_file, "r").read().replace(
"BACKGROUND", get_emacs_func_result("popweb-get-theme-background", [])).replace(
"INDEX_DIR", os.path.dirname(index_file)).replace(
"LATEX", latex_string)
# print(index_html)
self.web_window.webview.setHtml(index_html, QUrl("file://"))
web_window.loading_js_code = ""
web_window.webview.setHtml(index_html, QUrl("file://"))

QTimer().singleShot(100, self.render_katex)

# KaTex plugin code, we should split those code out with dynamical module technology.
def render_katex(self):
render_width = self.web_window.web_page.execute_javascript("document.getElementById('katex-preview').offsetWidth;")
render_height = self.web_window.web_page.execute_javascript("document.getElementById('katex-preview').offsetHeight;")
if (render_width == None) or (render_height == None):
render_width = 0
render_height = 0
self.web_window.update_theme_mode()
self.web_window.resize(int(render_width * self.web_window.zoom_factor * 1.2),
int(render_height * self.web_window.zoom_factor))
if (int(self.window_x - render_width/2) > 0):
self.web_window.move(int(self.window_x - render_width/2), self.window_y)
else:
self.web_window.move(0, self.window_y)
if self.show_window:
self.web_window.show()
QTimer().singleShot(100, lambda : render_latex(web_window, x + x_offset, y + y_offset, show_window))

# Dict plugin code, we should split those code out with dynamical module technology.
@PostGui()
def pop_translate_window(self, x, y, x_offset, y_offset, width_scale, height_scale, url, loading_js_code, use_proxy):
if use_proxy == "true":
self.enable_proxy()
else:
self.disable_proxy()

self.web_window.loading_js_code = loading_js_code
self.web_window.webview.load(QUrl(url))
def pop_translate_window(self, module_name, x, y, x_offset, y_offset, width_scale, height_scale, url, loading_js_code):
global screen_size

self.adjust_web_window_position(x, y, x_offset, y_offset, width_scale, height_scale)
web_window = self.get_web_window(module_name)

self.web_window.update_theme_mode()
self.web_window.resize(self.window_width, self.window_height)
self.web_window.move(self.window_x, self.window_y)
self.web_window.show()
window_width = screen_size.width() * width_scale
window_height = screen_size.height() * height_scale
window_x = x + x_offset
if window_x + window_width > screen_size.width():
window_x = x - window_width - x_offset
window_y = y + y_offset
if window_y + window_height > screen_size.height():
window_y = y - window_height

@PostGui()
def hide_web_window(self):
self.web_window.hide()
self.web_window.webview.load(QUrl(""))
web_window.loading_js_code = loading_js_code
web_window.webview.load(QUrl(url))
web_window.update_theme_mode()
web_window.resize(window_width, window_height)
web_window.move(window_x, window_y)
web_window.show()

@PostGui()
def katex_hide_web_window(self):
self.web_window.hide()
def hide_web_window(self, module_name):
if module_name in self.web_window_dict:
web_window = self.web_window_dict[module_name]
web_window.hide()
web_window.webview.load(QUrl(""))

def cleanup(self):
'''Do some cleanup before exit python process.'''
Expand Down

0 comments on commit e562c42

Please sign in to comment.