eric7/WebBrowser/JavaScript/ExternalJsObject.py

branch
eric7
changeset 8312
800c432b34c8
parent 8218
7c09585bd960
child 8318
962bce857696
equal deleted inserted replaced
8311:4e8b98454baa 8312:800c432b34c8
1 # -*- coding: utf-8 -*-
2
3 # Copyright (c) 2016 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
4 #
5
6 """
7 Module implementing the JavaScript external object being the endpoint of
8 a web channel.
9 """
10
11 #
12 # This code was ported from QupZilla and modified.
13 # Copyright (C) David Rosca <nowrep@gmail.com>
14 #
15
16 from PyQt5.QtCore import pyqtProperty, QObject
17
18 from WebBrowser.WebBrowserWindow import WebBrowserWindow
19
20 from .StartPageJsObject import StartPageJsObject
21 from .PasswordManagerJsObject import PasswordManagerJsObject
22
23
24 class ExternalJsObject(QObject):
25 """
26 Class implementing the endpoint of our web channel.
27 """
28 extraObjects = {}
29
30 def __init__(self, page):
31 """
32 Constructor
33
34 @param page reference to the web page object
35 @type WebBrowserPage
36 """
37 super().__init__(page)
38
39 self.__page = page
40
41 self.__startPage = None
42 self.__passwordManager = None
43
44 def page(self):
45 """
46 Public method returning a reference to the web page object.
47
48 @return reference to the web page object
49 @rtype WebBrowserPage
50 """
51 return self.__page
52
53 @pyqtProperty(QObject, constant=True)
54 def passwordManager(self):
55 """
56 Public method to get a reference to the password manager JavaScript
57 object.
58
59 @return reference to the password manager JavaScript object
60 @rtype StartPageJsObject
61 """
62 if self.__passwordManager is None:
63 self.__passwordManager = PasswordManagerJsObject(self)
64
65 return self.__passwordManager
66
67 @pyqtProperty(QObject, constant=True)
68 def speedDial(self):
69 """
70 Public method returning a reference to a speed dial object.
71
72 @return reference to a speed dial object
73 @rtype SpeedDial
74 """
75 if self.__page.url().toString() != "eric:speeddial":
76 return None
77
78 return WebBrowserWindow.speedDial()
79
80 @pyqtProperty(QObject, constant=True)
81 def startPage(self):
82 """
83 Public method to get a reference to the start page JavaScript object.
84
85 @return reference to the start page JavaScript object
86 @rtype StartPageJsObject
87 """
88 if self.__startPage is None:
89 self.__startPage = StartPageJsObject(self)
90
91 return self.__startPage
92
93 @classmethod
94 def setupWebChannel(cls, channel, page):
95 """
96 Class method to setup the web channel.
97
98 @param channel reference to the channel
99 @type QWebChannel
100 @param page reference to the web page
101 @type QWebEnginePage
102 """
103 channel.registerObject("eric_object", ExternalJsObject(page))
104 for jsObject in cls.extraObjects:
105 channel.registerObject("eric_{0}".format(jsObject),
106 cls.extraObjects[jsObject])
107
108 @classmethod
109 def registerExtraObject(cls, name, jsObject):
110 """
111 Class method to register extra JavaScript objects.
112
113 @param name name for the object
114 @type str
115 @param jsObject reference to the JavaScript object to be registered
116 @type QObject
117 """
118 cls.extraObjects[id] = jsObject
119
120 @classmethod
121 def unregisterExtraObject(cls, name):
122 """
123 Class method to unregister extra JavaScript objects.
124
125 @param name name of the object
126 @type str
127 """
128 if name in cls.extraObjects:
129 del cls.extraObjects[name]

eric ide

mercurial