From 926171f6343b6420b532140dd2f4dc2e43fd9d2c Mon Sep 17 00:00:00 2001 From: Harald Weiner Date: Sun, 23 Jul 2017 02:14:23 +0200 Subject: [PATCH 1/4] fixes #184 (port to WebKit2Gtk) --- remarkable/RemarkableWindow.py | 63 +++++++++++++++++++++++++--------- 1 file changed, 47 insertions(+), 16 deletions(-) diff --git a/remarkable/RemarkableWindow.py b/remarkable/RemarkableWindow.py index ffbc70b..893dc27 100644 --- a/remarkable/RemarkableWindow.py +++ b/remarkable/RemarkableWindow.py @@ -24,10 +24,10 @@ import gi gi.require_version('Gtk', '3.0') gi.require_version('GtkSource', '3.0') -gi.require_version('WebKit', '3.0') +gi.require_version('WebKit2', '4.0') from bs4 import BeautifulSoup -from gi.repository import Gdk, Gtk, GtkSource, Pango, WebKit +from gi.repository import Gdk, Gtk, GtkSource, Pango, WebKit2 from locale import gettext as _ from urllib.request import urlopen import markdown @@ -113,10 +113,10 @@ def finish_initializing(self, builder): # pylint: disable=E1002 self.text_buffer.connect("changed", self.on_text_view_changed) self.text_view.set_buffer(self.text_buffer) self.text_view.set_wrap_mode(Gtk.WrapMode.WORD) - - self.live_preview = WebKit.WebView() - self.live_preview.connect("console-message", self._javascript_console_message) # Suppress .js output - self.live_preview.zoom_out() + + my_settings = self.create_webkit_settings() + self.live_preview = WebKit2.WebView.new_with_settings(my_settings) + self.zoom_out(self.live_preview) self.scrolledwindow_text_view = Gtk.ScrolledWindow() self.scrolledwindow_text_view.add(self.text_view) @@ -624,11 +624,11 @@ def on_toolbutton_redo_clicked(self, widget): self.redo(self) def on_toolbutton_zoom_in_clicked(self, widget): - self.live_preview.zoom_in() + self.zoom_in(self.live_preview) self.scrollPreviewToFix(self) def on_toolbutton_zoom_out_clicked(self, widget): - self.live_preview.zoom_out() + self.zoom_out(self.live_preview) self.scrollPreviewToFix(self) def redo(self, widget): @@ -1249,7 +1249,7 @@ def on_menuitem_handwritten_activate(self, widget): styles.css = styles.handwriting_css self.update_style(self) self.update_live_preview(self) - self.live_preview.zoom_in() + self.zoom_in(self.live_preview) self.remarkable_settings['style'] = "handwriting_css" self.write_settings() @@ -1347,12 +1347,12 @@ def on_menuitem_feedback_activate(self, widget): window_feedback.set_title("Feedback Form") window_feedback.set_default_size(640, 640) window_feedback.set_position(Gtk.WindowPosition.CENTER) - feedback_browser = WebKit.WebView() - feedback_browser.connect("console-message", self._javascript_console_message) # Suppress .js output + my_settings = self.create_webkit_settings() + feedback_browser = WebKit2.WebView.new_with_settings(my_settings) feedback_scroller = Gtk.ScrolledWindow() feedback_scroller.add(feedback_browser) window_feedback.add(feedback_scroller) - feedback_browser.open("https://jamiemcgowan.typeform.com/to/ng5Lhc") + feedback_browser.load_uri("https://jamiemcgowan.typeform.com/to/ng5Lhc") window_feedback.show_all() def on_menuitem_about_activate(self, widget): @@ -1443,14 +1443,45 @@ def update_live_preview(self, widet): html = self.default_html_start + html_middle + self.default_html_end # Update the display, supporting relative paths to local images - self.live_preview.load_string(html, "text/html", "utf-8", "file://{}".format(os.path.abspath(self.name))) + self.live_preview.load_html(html, "file://{}".format(os.path.abspath(self.name))) """ - This function suppresses the messages from the WebKit (live preview) console + This function returns WebKit settings instance to suppress + the messages from the WebKit (live preview) console """ - def _javascript_console_message(self, view, message, line, sourceid): - return True + def create_webkit_settings(self): + result = WebKit2.Settings() + result.set_enable_write_console_messages_to_stdout(False) # Suppress .js output + return result + """ + This function implements zoom_in for WebKit2.WebView + """ + def zoom_in(self, webView): + zoom_level = webView.get_zoom_level() + zoom_level = zoom_level + self.get_zoom_step() + webView.set_zoom_level(zoom_level) + + """ + This function implements zoom_out for WebKit2.WebView + """ + def zoom_out(self, webView): + zoom_level = webView.get_zoom_level() + zoom_level = zoom_level - self.get_zoom_step() + webView.set_zoom_level(zoom_level) + + """ + This function returns the same magic number as in previous WebKit API: + https://lazka.github.io/pgi-docs/WebKit-3.0/classes/WebSettings.html#WebKit.WebSettings.props.zoom_step + """ + def get_zoom_step(self): + return 0.10000000149011612 + + """ + This function resets the zoom_level to the default value + """ + def reset_zoom_level(self, webView): + webView.set_zoom_level(1.0) """ This function deletes any temporary files that were created during execution From 63dc24917dfd36d7c4a7265dc3a0020deb75593c Mon Sep 17 00:00:00 2001 From: Harald Weiner Date: Fri, 28 Jul 2017 07:07:57 +0200 Subject: [PATCH 2/4] fixes #175 (Live Preview Mode Executes JavaScript) --- data/ui/RemarkableWindow.ui | 9 +++++++++ remarkable/RemarkableWindow.py | 26 ++++++++++++++++++++++---- 2 files changed, 31 insertions(+), 4 deletions(-) diff --git a/data/ui/RemarkableWindow.ui b/data/ui/RemarkableWindow.ui index ab0007c..ca2396e 100644 --- a/data/ui/RemarkableWindow.ui +++ b/data/ui/RemarkableWindow.ui @@ -405,6 +405,15 @@ True + + + True + False + Enable Java-Script + True + True + + True diff --git a/remarkable/RemarkableWindow.py b/remarkable/RemarkableWindow.py index 893dc27..6856042 100644 --- a/remarkable/RemarkableWindow.py +++ b/remarkable/RemarkableWindow.py @@ -114,8 +114,8 @@ def finish_initializing(self, builder): # pylint: disable=E1002 self.text_view.set_buffer(self.text_buffer) self.text_view.set_wrap_mode(Gtk.WrapMode.WORD) - my_settings = self.create_webkit_settings() - self.live_preview = WebKit2.WebView.new_with_settings(my_settings) + self.webkit_settings = self.create_webkit_settings() + self.live_preview = WebKit2.WebView.new_with_settings(self.webkit_settings) self.zoom_out(self.live_preview) self.scrolledwindow_text_view = Gtk.ScrolledWindow() @@ -199,7 +199,8 @@ def check_settings(self): if not os.path.isfile(self.settings_path): self.remarkable_settings = {} self.remarkable_settings['css'] = '' - self.remarkable_settings['font'] = "Sans 10" + self.remarkable_settings['font'] = "Sans 10" + self.remarkable_settings['js'] = True self.remarkable_settings['line-numbers'] = True self.remarkable_settings['live-preview'] = True self.remarkable_settings['nightmode'] = False @@ -234,6 +235,12 @@ def load_settings(self): # Disable word wrap on startup self.builder.get_object("menuitem_word_wrap").set_active(False) self.on_menuitem_word_wrap_activate(self) + + if not 'js' in self.remarkable_settings: + self.remarkable_settings['js'] = True + if self.remarkable_settings['js'] == False: + # Disable Live Preview on startup + self.builder.get_object("menuitem_js").set_active(False) if self.remarkable_settings['live-preview'] == False: # Disable Live Preview on startup @@ -810,7 +817,16 @@ def toggle_live_preview(self, widget): self.builder.get_object("toolbar1").set_visible(True) self.update_live_preview(self) self.write_settings() - + + def on_menuitem_js_activate(self, widget): + self.toggle_js(self) + + def toggle_js(self, widget): + state = self.webkit_settings.get_enable_javascript() + state = not state + self.remarkable_settings['js'] = state + self.webkit_settings.set_enable_javascript(state) + self.write_settings() def on_menuitem_swap_activate(self, widget): if self.live_preview.get_visible(): @@ -1452,6 +1468,8 @@ def update_live_preview(self, widet): def create_webkit_settings(self): result = WebKit2.Settings() result.set_enable_write_console_messages_to_stdout(False) # Suppress .js output + #js = self.remarkable_settings['js'] + result.set_enable_javascript(True) # JS-Kill-Switch for issue #175 return result """ From 1b05770885a1bbfc8b21fdb877267b4bf9fb5e88 Mon Sep 17 00:00:00 2001 From: Mikael Blomstrand Date: Wed, 4 Apr 2018 13:07:30 +0200 Subject: [PATCH 3/4] Spellcheck error message adapted to arch. --- remarkable/RemarkableWindow.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/remarkable/RemarkableWindow.py b/remarkable/RemarkableWindow.py index 6856042..a77f74c 100644 --- a/remarkable/RemarkableWindow.py +++ b/remarkable/RemarkableWindow.py @@ -47,7 +47,7 @@ from gtkspellcheck import SpellChecker spellcheck_enabled = True except: - print("*Spellchecking not enabled.\n*To enable spellchecking install pygtkspellcheck\n*https://pypi.python.org/pypi/pygtkspellcheck/") + print("*Spellchecking not enabled.\n*To enable spellchecking install python-gtkspellcheck.\npacman -S --asdeps python-gtkspellcheck") spellcheck_enabled = False import logging From eb33c22a6bf4100443b75e33e9897a85ad09d014 Mon Sep 17 00:00:00 2001 From: Mikael Blomstrand Date: Wed, 4 Apr 2018 13:12:26 +0200 Subject: [PATCH 4/4] `import styles` correctly --- remarkable/RemarkableWindow.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/remarkable/RemarkableWindow.py b/remarkable/RemarkableWindow.py index a77f74c..e838330 100644 --- a/remarkable/RemarkableWindow.py +++ b/remarkable/RemarkableWindow.py @@ -36,7 +36,7 @@ import re, subprocess, datetime, os, webbrowser, _thread, sys, locale import tempfile import traceback -import styles +from remarkable import styles import unicodedata import warnings import datetime