eric7/WebBrowser/JavaScript/ExternalJsObject.py

branch
eric7
changeset 8312
800c432b34c8
parent 8218
7c09585bd960
child 8318
962bce857696
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/WebBrowser/JavaScript/ExternalJsObject.py	Sat May 15 18:45:04 2021 +0200
@@ -0,0 +1,129 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2016 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing the JavaScript external object being the endpoint of
+a web channel.
+"""
+
+#
+# This code was ported from QupZilla and modified.
+# Copyright (C) David Rosca <nowrep@gmail.com>
+#
+
+from PyQt5.QtCore import pyqtProperty, QObject
+
+from WebBrowser.WebBrowserWindow import WebBrowserWindow
+
+from .StartPageJsObject import StartPageJsObject
+from .PasswordManagerJsObject import PasswordManagerJsObject
+
+
+class ExternalJsObject(QObject):
+    """
+    Class implementing the endpoint of our web channel.
+    """
+    extraObjects = {}
+    
+    def __init__(self, page):
+        """
+        Constructor
+        
+        @param page reference to the web page object
+        @type WebBrowserPage
+        """
+        super().__init__(page)
+        
+        self.__page = page
+        
+        self.__startPage = None
+        self.__passwordManager = None
+    
+    def page(self):
+        """
+        Public method returning a reference to the web page object.
+        
+        @return reference to the web page object
+        @rtype WebBrowserPage
+        """
+        return self.__page
+    
+    @pyqtProperty(QObject, constant=True)
+    def passwordManager(self):
+        """
+        Public method to get a reference to the password manager JavaScript
+        object.
+        
+        @return reference to the password manager JavaScript object
+        @rtype StartPageJsObject
+        """
+        if self.__passwordManager is None:
+            self.__passwordManager = PasswordManagerJsObject(self)
+        
+        return self.__passwordManager
+    
+    @pyqtProperty(QObject, constant=True)
+    def speedDial(self):
+        """
+        Public method returning a reference to a speed dial object.
+        
+        @return reference to a speed dial object
+        @rtype SpeedDial
+        """
+        if self.__page.url().toString() != "eric:speeddial":
+            return None
+        
+        return WebBrowserWindow.speedDial()
+    
+    @pyqtProperty(QObject, constant=True)
+    def startPage(self):
+        """
+        Public method to get a reference to the start page JavaScript object.
+        
+        @return reference to the start page JavaScript object
+        @rtype StartPageJsObject
+        """
+        if self.__startPage is None:
+            self.__startPage = StartPageJsObject(self)
+        
+        return self.__startPage
+    
+    @classmethod
+    def setupWebChannel(cls, channel, page):
+        """
+        Class method to setup the web channel.
+        
+        @param channel reference to the channel
+        @type QWebChannel
+        @param page reference to the web page
+        @type QWebEnginePage
+        """
+        channel.registerObject("eric_object", ExternalJsObject(page))
+        for jsObject in cls.extraObjects:
+            channel.registerObject("eric_{0}".format(jsObject),
+                                   cls.extraObjects[jsObject])
+    
+    @classmethod
+    def registerExtraObject(cls, name, jsObject):
+        """
+        Class method to register extra JavaScript objects.
+        
+        @param name name for the object
+        @type str
+        @param jsObject reference to the JavaScript object to be registered
+        @type QObject
+        """
+        cls.extraObjects[id] = jsObject
+    
+    @classmethod
+    def unregisterExtraObject(cls, name):
+        """
+        Class method to unregister extra JavaScript objects.
+        
+        @param name name of the object
+        @type str
+        """
+        if name in cls.extraObjects:
+            del cls.extraObjects[name]

eric ide

mercurial