eric6/WebBrowser/JavaScript/ExternalJsObject.py

changeset 6942
2602857055c5
parent 6645
ad476851d7e0
child 7229
53054eb5b15a
equal deleted inserted replaced
6941:f99d60d6b59b 6942:2602857055c5
1 # -*- coding: utf-8 -*-
2
3 # Copyright (c) 2016 - 2019 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 __future__ import unicode_literals
17
18 from PyQt5.QtCore import pyqtProperty, QObject
19
20 from WebBrowser.WebBrowserWindow import WebBrowserWindow
21
22 from .StartPageJsObject import StartPageJsObject
23 from .PasswordManagerJsObject import PasswordManagerJsObject
24
25
26 class ExternalJsObject(QObject):
27 """
28 Class implementing the endpoint of our web channel.
29 """
30 extraObjects = {}
31
32 def __init__(self, page):
33 """
34 Constructor
35
36 @param page reference to the web page object
37 @type WebBrowserPage
38 """
39 super(ExternalJsObject, self).__init__(page)
40
41 self.__page = page
42
43 self.__startPage = None
44 self.__passwordManager = None
45
46 def page(self):
47 """
48 Public method returning a reference to the web page object.
49
50 @return reference to the web page object
51 @rtype WebBrowserPage
52 """
53 return self.__page
54
55 @pyqtProperty(QObject, constant=True)
56 def passwordManager(self):
57 """
58 Public method to get a reference to the password manager JavaScript
59 object.
60
61 @return reference to the password manager JavaScript object
62 @rtype StartPageJsObject
63 """
64 if self.__passwordManager is None:
65 self.__passwordManager = PasswordManagerJsObject(self)
66
67 return self.__passwordManager
68
69 @pyqtProperty(QObject, constant=True)
70 def speedDial(self):
71 """
72 Public method returning a reference to a speed dial object.
73
74 @return reference to a speed dial object
75 @rtype SpeedDial
76 """
77 if self.__page.url().toString() != "eric:speeddial":
78 return None
79
80 return WebBrowserWindow.speedDial()
81
82 @pyqtProperty(QObject, constant=True)
83 def startPage(self):
84 """
85 Public method to get a reference to the start page JavaScript object.
86
87 @return reference to the start page JavaScript object
88 @rtype StartPageJsObject
89 """
90 if self.__startPage is None:
91 self.__startPage = StartPageJsObject(self)
92
93 return self.__startPage
94
95 @classmethod
96 def setupWebChannel(cls, channel, page):
97 """
98 Class method to setup the web channel.
99
100 @param channel reference to the channel
101 @type QWebChannel
102 @param page reference to the web page
103 @type QWebEnginePage
104 """
105 channel.registerObject("eric_object", ExternalJsObject(page))
106 for jsObject in cls.extraObjects:
107 channel.registerObject("eric_{0}".format(jsObject),
108 cls.extraObjects[jsObject])
109
110 @classmethod
111 def registerExtraObject(cls, name, jsObject):
112 """
113 Class method to register extra JavaScript objects.
114
115 @param name name for the object
116 @type str
117 @param jsObject reference to the JavaScript object to be registered
118 @type QObject
119 """
120 cls.extraObjects[id] = jsObject
121
122 @classmethod
123 def unregisterExtraObject(cls, name):
124 """
125 Class method to unregister extra JavaScript objects.
126
127 @param name name of the object
128 @type str
129 """
130 if name in cls.extraObjects:
131 del cls.extraObjects[name]

eric ide

mercurial