コード例 #1
0
ファイル: view.py プロジェクト: rafaelmardojai/Wike
    def _set_style(self):
        user_content = self.get_user_content_manager()
        user_content.remove_all_style_sheets()

        gfile = Gio.File.new_for_uri(
            'resource:///com/github/hugolabe/Wike/styles/view.min.css')
        try:
            gfile_contents = gfile.load_contents(None)
        except:
            print('Can\'t load css file from resources')
            return
        else:
            css_view = gfile_contents[1].decode('utf-8')

        style_view = WebKit2.UserStyleSheet(
            css_view, WebKit2.UserContentInjectedFrames.ALL_FRAMES,
            WebKit2.UserStyleLevel.USER, None, None)
        user_content.add_style_sheet(style_view)

        if settings.get_boolean('custom-font'):
            css_font = 'body,h1,h2{font-family:"' + settings.get_string(
                'font-family') + '"!important}'
            style_font = WebKit2.UserStyleSheet(
                css_font, WebKit2.UserContentInjectedFrames.ALL_FRAMES,
                WebKit2.UserStyleLevel.USER, None, None)
            user_content.add_style_sheet(style_font)
コード例 #2
0
ファイル: areader.py プロジェクト: knochenhans/AReader
    def load_node(self, node, line=0, retrace=True):
        # TODO: Needs error handling!

        self.webview.load_uri('file://' + temp_dir + '/' +
                              self.current_database.database + '/' +
                              node.name + '.html')

        self.set_title(node.title)

        font_family = 'font-family: ' '' + self.current_database.font + ';'
        font_size = 'font-size: ''' + \
            str(self.current_database.font_size) + 'px;'
        if self.current_database.wordwrap:
            white_space = 'white-space: pre-wrap;'
        else:
            white_space = 'white-space: pre;'

        self.webview.get_user_content_manager().add_style_sheet(
            WebKit2.UserStyleSheet(
                'html {' + font_family + font_size + white_space + '}',
                injected_frames=WebKit2.UserContentInjectedFrames.ALL_FRAMES,
                level=WebKit2.UserStyleLevel.USER))

        if retrace:
            self.history.append(self.current_node)

        self.update_buttons(node)

        self.current_node = node

        # self.webview.run_javascript('alert_box();')

        return True
コード例 #3
0
ファイル: areader.py プロジェクト: knochenhans/AReader
    def setup_content_manager(self):
        # Inject styles and functions

        content_manager = self.webview.get_user_content_manager()

        # with open('normalize.css', 'r') as style:
        #     content_manager.add_style_sheet(WebKit2.UserStyleSheet(style.read(
        #     ), injected_frames=WebKit2.UserContentInjectedFrames.ALL_FRAMES, level=WebKit2.UserStyleLevel.USER))

        with open('style.css', 'r') as style:
            content_manager.add_style_sheet(
                WebKit2.UserStyleSheet(style.read(),
                                       injected_frames=WebKit2.
                                       UserContentInjectedFrames.ALL_FRAMES,
                                       level=WebKit2.UserStyleLevel.USER))

        with open('functions.js', 'r') as functions:
            content_manager.add_script(
                WebKit2.UserScript(
                    source=functions.read(),
                    injected_frames=WebKit2.UserContentInjectedFrames.
                    ALL_FRAMES,
                    injection_time=WebKit2.UserScriptInjectionTime.END))

        # Callback function for links (overriding html links)
        content_manager.register_script_message_handler('signal')
        content_manager.connect('script-message-received::signal',
                                link_receiver)
コード例 #4
0
ファイル: webview_navigation.py プロジェクト: bagage/eolie
 def update_settings_for_uri(self, uri):
     """
         Update internal settings for URI
         @param uri as str
     """
     parsed = urlparse(uri)
     http_scheme = parsed.scheme in ["http", "https"]
     App().history.set_page_state(uri)
     self.__switch_profile(uri)
     self.__update_bookmark_metadata(uri)
     self.content_manager.remove_all_style_sheets()
     # Can't find a way to block content for ephemeral views
     if App().settings.get_value("adblock") and\
             not App().adblock_exceptions.find_parsed(parsed) and\
             http_scheme and\
             self.content_manager is not None:
         self.content_manager.add_style_sheet(App().default_style_sheet)
         rules = App().adblock.get_css_rules(uri)
         user_style_sheet = WebKit2.UserStyleSheet(
             rules, WebKit2.UserContentInjectedFrames.ALL_FRAMES,
             WebKit2.UserStyleLevel.USER, None, None)
         self.content_manager.add_style_sheet(user_style_sheet)
     user_agent = App().websettings.get_user_agent(uri)
     settings = self.get_settings()
     if user_agent:
         settings.set_user_agent(user_agent)
     else:
         settings.set_user_agent_with_application_details("Eolie", None)
     # Setup image blocker
     block_image = http_scheme and\
         App().settings.get_value("imageblock") and\
         not App().image_exceptions.find_parsed(parsed)
     self.set_setting("auto-load-images", not block_image)
コード例 #5
0
    def _build_ui(self):
        self.set_position(Gtk.WindowPosition.CENTER)

        # Create HeaderBar
        headerbar = Gtk.HeaderBar()
        headerbar.set_show_close_button(True)
        headerbar.show_all()

        # Create webview with custom stylesheet
        css = WebKit2.UserStyleSheet(
            ".sidebar, .banner { display: none; }",
            WebKit2.UserContentInjectedFrames.ALL_FRAMES,
            WebKit2.UserStyleLevel.USER, None, None)
        content_manager = WebKit2.UserContentManager()
        content_manager.add_style_sheet(css)
        self.webview = WebKit2.WebView.new_with_user_content_manager(
            content_manager)
        self.webview.connect("resource-load-started", self.cb_load_started)
        self.webview.show()

        scrolledwindow = Gtk.ScrolledWindow()
        scrolledwindow.add(self.webview)
        scrolledwindow.show()

        # Add children to ApplicationWindow
        self.add(scrolledwindow)
        self.set_titlebar(headerbar)
コード例 #6
0
    def inject_custom_styles(self):
        style = open(self.file_path('styles/webview.css'), 'r').read()
        frame = WebKit2.UserContentInjectedFrames.ALL_FRAMES
        level = WebKit2.UserStyleLevel.USER
        style = WebKit2.UserStyleSheet(style, frame, level, None, None)

        self.manager.add_style_sheet(style)
コード例 #7
0
 def update_default_style_sheet(self):
     """
         Should be called on startup
     """
     rules = self.adblock.get_default_css_rules()
     self.__default_style_sheet = WebKit2.UserStyleSheet(
         rules, WebKit2.UserContentInjectedFrames.ALL_FRAMES,
         WebKit2.UserStyleLevel.USER, None, None)
コード例 #8
0
 def get_stylesheet(self):
     if self.stylesheet is None:
         style = ("html { background: %s; color: %s;}"
                  " a { color: %s; }"
                  " a:visited { color: %s; }") % \
                  (self.background_color.to_string(), self.foreground_color.to_string(),
                   self.link_color.to_string(), self.visited_color.to_string())
         self.stylesheet = WebKit2.UserStyleSheet(style, 0, 1, None, None)
     return self.stylesheet
コード例 #9
0
 def hook_webkit_view(self, wk_view):
     cm = wk_view.get_user_content_manager()
     # https://lazka.github.io/pgi-docs/#WebKit2-4.0/classes/UserStyleSheet.html#WebKit2.UserStyleSheet
     frames = WebKit2.UserContentInjectedFrames.TOP_FRAME
     level = WebKit2.UserStyleLevel.USER
     whitelist = None
     blacklist = None
     stylesheet = WebKit2.UserStyleSheet(self.css, frames, level,
                                         whitelist, blacklist)
     cm.add_style_sheet(stylesheet)
コード例 #10
0
 def get_stylesheet(self):
     if self.stylesheet is None:
         foreground = get_foreground_color()
         background = get_background_color(Gtk.StateFlags.ACTIVE)
         if background is not None:
             style = "html { background: %s; color: %s;}" % \
                         (background.to_string(), foreground.to_string())
             self.stylesheet = WebKit2.UserStyleSheet(
                 style, 0, 1, None, None)
     return self.stylesheet
コード例 #11
0
 def get_stylesheet(self):
     if self.stylesheet is None:
         style = ("html { background: %s; color: %s;}"
                  " a { color: %s; }"
                  " a:visited { color: %s; }"
                  " #gpodder-title h3, #gpodder-title p { margin: 0}"
                  " #gpodder-title {margin-block-end: 1em;}") % \
                  (self.background_color.to_string(), self.foreground_color.to_string(),
                   self.link_color.to_string(), self.visited_color.to_string())
         self.stylesheet = WebKit2.UserStyleSheet(style, 0, 1, None, None)
     return self.stylesheet
コード例 #12
0
ファイル: preview.py プロジェクト: saifulbkhan/draft
 def update_stylesheet_for_settings(self):
     user_content_manager = self._manager
     current_stylesheet = self.main_window.app_settings.get_string(
         'stylesheet')
     css_path = path.join(DRAFT_DIR, 'styles', current_stylesheet)
     with open(css_path) as f:
         css_str = f.read()
         user_stylesheet = WebKit.UserStyleSheet(
             css_str, WebKit.UserContentInjectedFrames.ALL_FRAMES,
             WebKit.UserStyleLevel.AUTHOR, None, None)
         user_content_manager.remove_all_style_sheets()
         user_content_manager.add_style_sheet(user_stylesheet)
コード例 #13
0
ファイル: view.py プロジェクト: albanobattistella/Wike
    def _set_style(self):
        user_content = self.get_user_content_manager()
        user_content.remove_all_style_sheets()

        gfile = Gio.File.new_for_uri(
            'resource:///com/github/hugolabe/Wike/styles/view.min.css')
        try:
            gfile_contents = gfile.load_contents(None)
        except:
            print('Can\'t load css file from resources')
            return
        else:
            style = gfile_contents[1].decode('utf-8')

        user_style = WebKit2.UserStyleSheet(
            style, WebKit2.UserContentInjectedFrames.ALL_FRAMES,
            WebKit2.UserStyleLevel.USER, None, None)
        user_content.add_style_sheet(user_style)
コード例 #14
0
ファイル: widgets.py プロジェクト: nswarup14/read-activity
    def __init__(self, **kwargs):
        cm = WebKit2.UserContentManager()

        cm.register_script_message_handler('scrolled');
        cm.connect('script-message-received::scrolled',
            lambda cm, result: self.emit('scrolled',
                result.get_js_value().to_double()))

        cm.register_script_message_handler('scrolled_top');
        cm.connect('script-message-received::scrolled_top',
            lambda cm, result: self.emit('scrolled-top'))

        cm.register_script_message_handler('scrolled_bottom');
        cm.connect('script-message-received::scrolled_bottom',
            lambda cm, result: self.emit('scrolled-bottom'))

        cm.register_script_message_handler('selection_changed');
        cm.connect('script-message-received::selection_changed',
            lambda cm, result: self.emit('selection-changed',
                result.get_js_value().to_boolean()))

        cm.add_script(WebKit2.UserScript('''
            window.addEventListener("scroll", function(){
                var handler = window.webkit.messageHandlers.scrolled;
                handler.postMessage(window.scrollY);
            });
            document.addEventListener("selectionchange", function() {
                var handler = window.webkit.messageHandlers.selection_changed;
                handler.postMessage(window.getSelection() != '');
            });
            ''',
            WebKit2.UserContentInjectedFrames.ALL_FRAMES,
            WebKit2.UserScriptInjectionTime.START, None, None))

        cm.add_style_sheet(WebKit2.UserStyleSheet('''
            html { margin: 50px; }
            body { overflow: hidden; }
            ''',
            WebKit2.UserContentInjectedFrames.ALL_FRAMES,
            WebKit2.UserStyleLevel.USER, None, None))

        WebKit2.WebView.__init__(self, user_content_manager=cm, **kwargs)
        self.get_settings().set_enable_write_console_messages_to_stdout(True)
コード例 #15
0
ファイル: pygogauth.py プロジェクト: sunsided/games_nebula
    def new_content_manager(self):

        css = """
        .icn--close {
            visibility: hidden;
        }
        button#continue_offline {
            visibility: hidden;
        }
        """
        content_injected_frames = WebKit2.UserContentInjectedFrames(0)
        user_style_level = WebKit2.UserStyleLevel(0)
        style_sheet = WebKit2.UserStyleSheet(css, content_injected_frames,
                                             user_style_level, None, None)

        content_manager = WebKit2.UserContentManager()
        content_manager.add_style_sheet(style_sheet)

        return content_manager
コード例 #16
0
ファイル: view.py プロジェクト: hugolabe/Wike
    def set_style(self):
        data_manager = web_context.get_website_data_manager()
        data_manager.clear(WebKit2.WebsiteDataTypes.MEMORY_CACHE, 0, None,
                           None, None)
        self.user_content.remove_all_style_sheets()

        style_view = WebKit2.UserStyleSheet(
            self._css_view, WebKit2.UserContentInjectedFrames.ALL_FRAMES,
            WebKit2.UserStyleLevel.USER, None, None)
        self.user_content.add_style_sheet(style_view)

        theme = settings.get_int('theme')
        if theme == 1:
            style_dark = WebKit2.UserStyleSheet(
                self._css_dark, WebKit2.UserContentInjectedFrames.ALL_FRAMES,
                WebKit2.UserStyleLevel.USER, None, None)
            self.user_content.add_style_sheet(style_dark)
        elif theme == 2:
            style_sepia = WebKit2.UserStyleSheet(
                self._css_sepia, WebKit2.UserContentInjectedFrames.ALL_FRAMES,
                WebKit2.UserStyleLevel.USER, None, None)
            self.user_content.add_style_sheet(style_sepia)
        elif theme == 3:
            if self.style_manager.get_dark():
                style_dark = WebKit2.UserStyleSheet(
                    self._css_dark,
                    WebKit2.UserContentInjectedFrames.ALL_FRAMES,
                    WebKit2.UserStyleLevel.USER, None, None)
                self.user_content.add_style_sheet(style_dark)

        if settings.get_boolean('custom-font'):
            css_font = 'body,h1,h2{font-family:"' + settings.get_string(
                'font-family') + '"!important}'
            style_font = WebKit2.UserStyleSheet(
                css_font, WebKit2.UserContentInjectedFrames.ALL_FRAMES,
                WebKit2.UserStyleLevel.USER, None, None)
            self.user_content.add_style_sheet(style_font)

        if not settings.get_boolean('preview-popups'):
            css_previews = '.mwe-popups{display:none!important}'
            style_previews = WebKit2.UserStyleSheet(
                css_previews, WebKit2.UserContentInjectedFrames.ALL_FRAMES,
                WebKit2.UserStyleLevel.USER, None, None)
            self.user_content.add_style_sheet(style_previews)
コード例 #17
0
ファイル: markdown.py プロジェクト: brpaz/hawkeye
    def load_assets(self):
        """ Injects css and js files into the webview """

        assets_path = os.path.join(os.path.dirname(__file__), '..', 'assets')

        with open(os.path.join(assets_path, 'css', 'markdown.css'),
                  encoding='utf-8') as f:
            style_contents = f.read()

        with open(os.path.join(assets_path, 'js', 'hljs.js'),
                  encoding='utf-8') as f:
            hljs_script = f.read()

        style = WebKit.UserStyleSheet(
            style_contents, WebKit.UserContentInjectedFrames.TOP_FRAME,
            WebKit.UserStyleLevel.USER, None, None)

        script = WebKit.UserScript(hljs_script,
                                   WebKit.UserContentInjectedFrames.TOP_FRAME,
                                   WebKit.UserScriptInjectionTime.END, None,
                                   None)

        self.webview.get_user_content_manager().add_style_sheet(style)
        self.webview.get_user_content_manager().add_script(script)
コード例 #18
0
ファイル: passageview.py プロジェクト: micahilbery/bible
    def __init__(self, library):
        Gtk.Grid.__init__(self, expand=True)

        library

        stylesheet = """
            :root {
                font-family: 'Open Sans', 'sans-serif';
                color: #333;
                font-size: 100%;
            }
            .main {
                min-width: 32rem;
                max-width: 100rem;
                word-wrap: break-word;
                line-height: 1.5rem;
                margin: 0 auto 4rem auto;
                padding: 0 1rem 0 1rem;
                columns: 3 28rem;
            }
            span.verse-num {
                color: #999;
                font-size: .75rem;
                font-weight: bold;
                padding-right: .15rem;
                padding-left: .25rem;
                vertical-align: text-top;
            }
            h1 { font-size: 2rem }
            h2 {
                font-size: 1.5rem;
                column-span: all;
            }
            h3 {
                font-size: 1.125rem;
                font-weight: lighter;
            }
            h4 { font-size: 1rem }
            h5 { font-size: .875rem }
            h6 { font-size: .75rem }
            .mx-auto { margin-left: auto; margin-right: auto; }
            .divineName { font-variant: small-caps; }
            .wordsOfJesus { color: #7a0000 }
            .indent1 { margin-left: .5rem }
            .indent2 { margin-left: 1rem }
            .indent3 { margin-left: 2rem }
            .indent4 { margin-left: 4rem }
        """
        user_style = WebKit2.UserStyleSheet(
            stylesheet, WebKit2.UserContentInjectedFrames.ALL_FRAMES,
            WebKit2.UserStyleLevel.USER, None, None)

        content_manager = WebKit2.UserContentManager()
        content_manager.add_style_sheet(user_style)
        self.webview = WebKit2.WebView.new_with_user_content_manager(
            content_manager)
        self.webview.props.expand = True

        self.webview.connect('context-menu', self._on_context_menu)

        self.add(self.webview)
        library.connect('reference-changed', self._on_library_changed)
        library.connect('module-changed', self._on_library_changed)
        self.show_all()
コード例 #19
0
 def _on_load_changed(self, webview, event):
     """
         Update internals
         @param webview as WebView
         @param event as WebKit2.LoadEvent
     """
     uri = webview.uri
     parsed = urlparse(uri)
     if event == WebKit2.LoadEvent.STARTED:
         self.set_setting("auto-load-images",
                          not El().image_exceptions.find(parsed.netloc))
         self._cancelled = False
     elif event == WebKit2.LoadEvent.COMMITTED:
         self.__hw_acceleration_policy(parsed.netloc)
         self.content_manager.remove_all_style_sheets()
         if El().phishing.is_phishing(uri):
             self._show_phishing_error(uri)
         else:
             # Can't find a way to block content for ephemeral views
             if El().settings.get_value("adblock") and\
                     not El().adblock_exceptions.find_parsed(parsed) and\
                     parsed.scheme in ["http", "https"] and\
                     self.content_manager is not None:
                 self.content_manager.add_style_sheet(
                     El().default_style_sheet)
                 rules = El().adblock.get_css_rules(uri)
                 user_style_sheet = WebKit2.UserStyleSheet(
                     rules, WebKit2.UserContentInjectedFrames.ALL_FRAMES,
                     WebKit2.UserStyleLevel.USER, None, None)
                 self.content_manager.add_style_sheet(user_style_sheet)
             self.update_zoom_level()
             user_agent = El().websettings.get_user_agent(uri)
             settings = self.get_settings()
             if user_agent:
                 settings.set_user_agent(user_agent)
             else:
                 settings.set_user_agent_with_application_details(
                     "Eolie", None)
             # Setup image blocker
             self.set_setting("auto-load-images",
                              not El().image_exceptions.find(parsed.netloc))
             # Setup eolie internal adblocker
             if El().settings.get_value("adblock") and\
                     parsed.scheme in ["http", "https"]:
                 exception = El().adblock_exceptions.find_parsed(parsed)
                 if not exception:
                     noext = ".".join(parsed.netloc.split(".")[:-1])
                     javascripts = [
                         "adblock_%s.js" % parsed.netloc,
                         "adblock_%s.js" % noext
                     ]
                     for javascript in javascripts:
                         f = Gio.File.new_for_path("%s/%s" %
                                                   (ADBLOCK_JS, javascript))
                         if f.query_exists():
                             (status, content, tag) = f.load_contents(None)
                             js = content.decode("utf-8")
                             self.run_javascript(js, None, None)
                             break
     elif event == WebKit2.LoadEvent.FINISHED:
         self.run_javascript_from_gresource(
             "/org/gnome/Eolie/Extensions.js", None, None)
         self.set_favicon(False)
         if parsed.scheme != "populars":
             self.set_snapshot()
         self.update_spell_checking()
         if El().show_tls:
             try:
                 from OpenSSL import crypto
                 from datetime import datetime
                 (valid, tls, errors) = webview.get_tls_info()
                 if tls is not None:
                     print("***************************************"
                           "***************************************")
                     cert_pem = tls.get_property("certificate-pem")
                     cert = crypto.load_certificate(crypto.FILETYPE_PEM,
                                                    cert_pem)
                     subject = cert.get_subject()
                     print("CN: %s" % subject.CN)
                     start_bytes = cert.get_notBefore()
                     end_bytes = cert.get_notAfter()
                     start = datetime.strptime(start_bytes.decode("utf-8"),
                                               "%Y%m%d%H%M%SZ")
                     end = datetime.strptime(end_bytes.decode("utf-8"),
                                             "%Y%m%d%H%M%SZ")
                     print("Valid from %s to %s" % (start, end))
                     print("Serial number: %s" % cert.get_serial_number())
                     print(cert_pem)
                     print("***************************************"
                           "***************************************")
             except Exception as e:
                 print("Please install OpenSSL python support:", e)