Helpviewer/HelpBrowserWV.py

branch
maintenance
changeset 6166
bace7fb85a01
parent 6097
bf18415da0c7
parent 6122
e7d98249f393
child 6202
f7ae22fc70d4
diff -r 0c976706e8c1 -r bace7fb85a01 Helpviewer/HelpBrowserWV.py
--- a/Helpviewer/HelpBrowserWV.py	Sun Feb 04 10:56:30 2018 +0100
+++ b/Helpviewer/HelpBrowserWV.py	Fri Mar 02 19:35:16 2018 +0100
@@ -779,8 +779,9 @@
             self.__featurePermissionRequested)
         
         self.page().downloadRequested.connect(self.__downloadRequested)
-        self.page().frameCreated.connect(self.__addExternalBinding)
-        self.__addExternalBinding(self.page().mainFrame())
+        self.page().frameCreated.connect(
+            lambda frame: self.__addExternalBinding(frame, False))
+        self.__addExternalBinding(self.page().mainFrame(), False)
         
         self.page().databaseQuotaExceeded.connect(self.__databaseQuotaExceeded)
         
@@ -808,20 +809,22 @@
         
         self.grabGesture(Qt.PinchGesture)
     
-    def __addExternalBinding(self, frame=None):
+    def __addExternalBinding(self, frame, frameCleared):
         """
         Private slot to add javascript bindings for adding search providers.
         
-        @param frame reference to the web frame (QWebFrame)
+        @param frame reference to the web frame
+        @type QWebFrame
+        @param frameCleared flag indicate, that the frame was cleared
+        @type bool
         """
         self.page().settings().setAttribute(QWebSettings.JavascriptEnabled,
                                             True)
         if self.__javaScriptBinding is None:
             self.__javaScriptBinding = JavaScriptExternalObject(self.mw, self)
         
-        if frame is None:
+        if frameCleared:
             # called from QWebFrame.javaScriptWindowObjectCleared
-            frame = self.sender()
             if isinstance(frame, HelpWebPage):
                 frame = frame.mainFrame()
             if frame.url().scheme() == "eric" and frame.url().path() == "home":
@@ -838,7 +841,7 @@
         else:
             # called from QWebPage.frameCreated
             frame.javaScriptWindowObjectCleared.connect(
-                self.__addExternalBinding)
+                lambda: self.__addExternalBinding(frame, True))
         frame.addToJavaScriptWindowObject("external", self.__javaScriptBinding)
     
     def linkedResources(self, relation=""):
@@ -1210,65 +1213,83 @@
         frameAtPos = self.page().frameAt(evt.pos())
         hit = self.page().mainFrame().hitTestContent(evt.pos())
         if not hit.linkUrl().isEmpty():
-            menu.addAction(
+            act = menu.addAction(
                 UI.PixmapCache.getIcon("openNewTab.png"),
-                self.tr("Open Link in New Tab\tCtrl+LMB"),
-                self.__openLinkInNewTab).setData(hit.linkUrl())
+                self.tr("Open Link in New Tab\tCtrl+LMB"))
+            act.setData(hit.linkUrl())
+            act.triggered.connect(
+                lambda: self.__openLinkInNewTab(act))
             menu.addSeparator()
             menu.addAction(
                 UI.PixmapCache.getIcon("download.png"),
                 self.tr("Save Lin&k"), self.__downloadLink)
-            menu.addAction(
+            act = menu.addAction(
                 UI.PixmapCache.getIcon("bookmark22.png"),
-                self.tr("Bookmark this Link"), self.__bookmarkLink)\
-                .setData(hit.linkUrl())
+                self.tr("Bookmark this Link"))
+            act.setData(hit.linkUrl())
+            act.triggered.connect(
+                lambda: self.__bookmarkLink(act))
             menu.addSeparator()
             menu.addAction(
                 UI.PixmapCache.getIcon("editCopy.png"),
                 self.tr("Copy Link to Clipboard"), self.__copyLink)
-            menu.addAction(
+            act = menu.addAction(
                 UI.PixmapCache.getIcon("mailSend.png"),
-                self.tr("Send Link"),
-                self.__sendLink).setData(hit.linkUrl())
+                self.tr("Send Link"))
+            act.setData(hit.linkUrl())
+            act.triggered.connect(
+                lambda: self.__sendLink(act))
             if Preferences.getHelp("VirusTotalEnabled") and \
                Preferences.getHelp("VirusTotalServiceKey") != "":
-                menu.addAction(
+                act = menu.addAction(
                     UI.PixmapCache.getIcon("virustotal.png"),
-                    self.tr("Scan Link with VirusTotal"),
-                    self.__virusTotal).setData(hit.linkUrl())
+                    self.tr("Scan Link with VirusTotal"))
+                act.setData(hit.linkUrl())
+                act.triggered.connect(
+                    lambda: self.__virusTotal(act))
         
         if not hit.imageUrl().isEmpty():
             if not menu.isEmpty():
                 menu.addSeparator()
-            menu.addAction(
+            act = menu.addAction(
                 UI.PixmapCache.getIcon("openNewTab.png"),
-                self.tr("Open Image in New Tab"),
-                self.__openLinkInNewTab).setData(hit.imageUrl())
+                self.tr("Open Image in New Tab"))
+            act.setData(hit.imageUrl())
+            act.triggered.connect(
+                lambda: self.__openLinkInNewTab(act))
             menu.addSeparator()
             menu.addAction(
                 UI.PixmapCache.getIcon("download.png"),
                 self.tr("Save Image"), self.__downloadImage)
             menu.addAction(
                 self.tr("Copy Image to Clipboard"), self.__copyImage)
-            menu.addAction(
+            act = menu.addAction(
                 UI.PixmapCache.getIcon("editCopy.png"),
-                self.tr("Copy Image Location to Clipboard"),
-                self.__copyLocation).setData(hit.imageUrl().toString())
-            menu.addAction(
+                self.tr("Copy Image Location to Clipboard"))
+            act.setData(hit.imageUrl().toString())
+            act.triggered.connect(
+                lambda: self.__copyLocation(act))
+            act = menu.addAction(
                 UI.PixmapCache.getIcon("mailSend.png"),
-                self.tr("Send Image Link"),
-                self.__sendLink).setData(hit.imageUrl())
+                self.tr("Send Image Link"))
+            act.setData(hit.imageUrl())
+            act.triggered.connect(
+                lambda: self.__sendLink(act))
             menu.addSeparator()
-            menu.addAction(
+            act = menu.addAction(
                 UI.PixmapCache.getIcon("adBlockPlus.png"),
-                self.tr("Block Image"), self.__blockImage)\
-                .setData(hit.imageUrl().toString())
+                self.tr("Block Image"))
+            act.setData(hit.imageUrl().toString())
+            act.triggered.connect(
+                lambda: self.__blockImage(act))
             if Preferences.getHelp("VirusTotalEnabled") and \
                Preferences.getHelp("VirusTotalServiceKey") != "":
-                menu.addAction(
+                act = menu.addAction(
                     UI.PixmapCache.getIcon("virustotal.png"),
-                    self.tr("Scan Image with VirusTotal"),
-                    self.__virusTotal).setData(hit.imageUrl())
+                    self.tr("Scan Image with VirusTotal"))
+                act.setData(hit.imageUrl())
+                act.triggered.connect(
+                    lambda: self.__virusTotal(act))
         
         element = hit.element()
         if not element.isNull():
@@ -1299,18 +1320,24 @@
                         UI.PixmapCache.getIcon("audioVolumeMuted.png"),
                         self.tr("Mute"), self.__muteMedia)
                 menu.addSeparator()
-                menu.addAction(
+                act = menu.addAction(
                     UI.PixmapCache.getIcon("editCopy.png"),
-                    self.tr("Copy Media Address to Clipboard"),
-                    self.__copyLocation).setData(videoUrl.toString())
-                menu.addAction(
+                    self.tr("Copy Media Address to Clipboard"))
+                act.setData(videoUrl.toString())
+                act.triggered.connect(
+                    lambda: self.__copyLocation(act))
+                act = menu.addAction(
                     UI.PixmapCache.getIcon("mailSend.png"),
-                    self.tr("Send Media Address"), self.__sendLink)\
-                    .setData(videoUrl)
-                menu.addAction(
+                    self.tr("Send Media Address"))
+                act.setData(videoUrl)
+                act.triggered.connect(
+                    lambda: self.__sendLink(act))
+                act = menu.addAction(
                     UI.PixmapCache.getIcon("download.png"),
-                    self.tr("Save Media"), self.__downloadMedia)\
-                    .setData(videoUrl)
+                    self.tr("Save Media"))
+                act.setData(videoUrl)
+                act.triggered.connect(
+                    lambda: self.__downloadMedia(act))
             
             if element.tagName().lower() in ["input", "textarea"]:
                 if menu.isEmpty():
@@ -1356,10 +1383,12 @@
                 fmenu.addAction(
                     self.tr("Show &only this frame"),
                     self.__loadClickedFrame)
-                fmenu.addAction(
+                act = fmenu.addAction(
                     UI.PixmapCache.getIcon("openNewTab.png"),
-                    self.tr("Show in new &tab"),
-                    self.__openLinkInNewTab).setData(self.__clickedFrame.url())
+                    self.tr("Show in new &tab"))
+                act.setData(self.__clickedFrame.url())
+                act.triggered.connect(
+                    lambda: self.__openLinkInNewTab(act))
                 fmenu.addSeparator()
             fmenu.addAction(
                 UI.PixmapCache.getIcon("print.png"),
@@ -1391,9 +1420,12 @@
         menu.addAction(
             UI.PixmapCache.getIcon("bookmark22.png"),
             self.tr("Bookmark this Page"), self.addBookmark)
-        menu.addAction(
+        act = menu.addAction(
             UI.PixmapCache.getIcon("mailSend.png"),
-            self.tr("Send Page Link"), self.__sendLink).setData(self.url())
+            self.tr("Send Page Link"))
+        act.setData(self.url())
+        act.triggered.connect(
+            lambda: self.__sendLink(act))
         menu.addSeparator()
         self.__userAgentMenu = UserAgentMenu(self.tr("User Agent"),
                                              url=self.url())
@@ -1409,10 +1441,12 @@
         menu.addSeparator()
         if self.selectedText():
             menu.addAction(self.mw.copyAct)
-            menu.addAction(
+            act = menu.addAction(
                 UI.PixmapCache.getIcon("mailSend.png"),
-                self.tr("Send Text"),
-                self.__sendLink).setData(self.selectedText())
+                self.tr("Send Text"))
+            act.setData(self.selectedText())
+            act.triggered.connect(
+                lambda: self.__sendLink(act))
         menu.addAction(self.mw.findAct)
         menu.addSeparator()
         if self.selectedText():
@@ -1441,32 +1475,40 @@
                 googleTranslatorUrl = QUrl(
                     "http://translate.google.com/#auto|{0}|{1}".format(
                         langCode, self.selectedText()))
-                menu.addAction(
+                act = menu.addAction(
                     UI.PixmapCache.getIcon("translate.png"),
-                    self.tr("Google Translate"), self.__openLinkInNewTab)\
-                    .setData(googleTranslatorUrl)
+                    self.tr("Google Translate"))
+                act.setData(googleTranslatorUrl)
+                act.triggered.connect(
+                    lambda: self.__openLinkInNewTab(act))
                 wiktionaryUrl = QUrl(
                     "http://{0}.wiktionary.org/wiki/Special:Search?search={1}"
                     .format(langCode, self.selectedText()))
-                menu.addAction(
+                act = menu.addAction(
                     UI.PixmapCache.getIcon("wikipedia.png"),
-                    self.tr("Dictionary"), self.__openLinkInNewTab)\
-                    .setData(wiktionaryUrl)
+                    self.tr("Dictionary"))
+                act.setData(wiktionaryUrl)
+                act.triggered.connect(
+                    lambda: self.__openLinkInNewTab(act))
                 menu.addSeparator()
             
             guessedUrl = QUrl.fromUserInput(self.selectedText().strip())
             if self.__isUrlValid(guessedUrl):
-                menu.addAction(
-                    self.tr("Go to web address"),
-                    self.__openLinkInNewTab).setData(guessedUrl)
+                act = menu.addAction(self.tr("Go to web address"))
+                act.setData(guessedUrl)
+                act.triggered.connect(
+                    lambda: self.__openLinkInNewTab(act))
                 menu.addSeparator()
         
         element = hit.element()
         if not element.isNull() and \
            element.tagName().lower() == "input" and \
            element.attribute("type", "text") == "text":
-            menu.addAction(self.tr("Add to web search toolbar"),
-                           self.__addSearchEngine).setData(element)
+            act = menu.addAction(
+                self.tr("Add to web search toolbar"))
+            act.setData(element)
+            act.triggered.connect(
+                lambda: self.__addSearchEngine(act))
             menu.addSeparator()
         
         menu.addAction(
@@ -1487,12 +1529,14 @@
             bool(url.scheme()) and \
             "." in url.host()
     
-    def __openLinkInNewTab(self):
+    def __openLinkInNewTab(self, act):
         """
         Private method called by the context menu to open a link in a new
         window.
+        
+        @param act reference to the action that triggered
+        @type QAction
         """
-        act = self.sender()
         url = act.data()
         if url.isEmpty():
             return
@@ -1501,11 +1545,13 @@
         self.setSource(url)
         self.ctrlPressed = False
     
-    def __bookmarkLink(self):
+    def __bookmarkLink(self, act):
         """
         Private slot to bookmark a link via the context menu.
+        
+        @param act reference to the action that triggered
+        @type QAction
         """
-        act = self.sender()
         url = act.data()
         if url.isEmpty():
             return
@@ -1515,11 +1561,13 @@
         dlg.setUrl(bytes(url.toEncoded()).decode())
         dlg.exec_()
     
-    def __sendLink(self):
+    def __sendLink(self, act):
         """
         Private slot to send a link via email.
+        
+        @param act reference to the action that triggered
+        @type QAction
         """
-        act = self.sender()
         data = act.data()
         if isinstance(data, QUrl) and data.isEmpty():
             return
@@ -1552,29 +1600,35 @@
         """
         self.pageAction(QWebPage.CopyImageToClipboard).trigger()
     
-    def __copyLocation(self):
+    def __copyLocation(self, act):
         """
         Private slot to copy an image or media location to the clipboard.
+        
+        @param act reference to the action that triggered
+        @type QAction
         """
-        act = self.sender()
         url = act.data()
         QApplication.clipboard().setText(url)
     
-    def __blockImage(self):
+    def __blockImage(self, act):
         """
         Private slot to add a block rule for an image URL.
+        
+        @param act reference to the action that triggered
+        @type QAction
         """
         import Helpviewer.HelpWindow
-        act = self.sender()
         url = act.data()
         dlg = Helpviewer.HelpWindow.HelpWindow.adBlockManager().showDialog()
         dlg.addCustomRule(url)
     
-    def __downloadMedia(self):
+    def __downloadMedia(self, act):
         """
         Private slot to download a media and save it to disk.
+        
+        @param act reference to the action that triggered
+        @type QAction
         """
-        act = self.sender()
         url = act.data()
         self.mw.downloadManager().download(url, True, mainWindow=self.mw)
     
@@ -1600,11 +1654,13 @@
         else:
             self.__clickedMediaElement.evaluateJavaScript("this.muted = true")
     
-    def __virusTotal(self):
+    def __virusTotal(self, act):
         """
         Private slot to scan the selected URL with VirusTotal.
+        
+        @param act reference to the action that triggered
+        @type QAction
         """
-        act = self.sender()
         url = act.data()
         self.mw.requestVirusTotalScan(url)
     
@@ -1624,14 +1680,13 @@
             engine = self.mw.openSearchManager().engine(engineName)
             self.search.emit(engine.searchUrl(searchText))
     
-    def __addSearchEngine(self):
+    def __addSearchEngine(self, act):
         """
         Private slot to add a new search engine.
+        
+        @param act reference to the action that triggered
+        @type QAction
         """
-        act = self.sender()
-        if act is None:
-            return
-        
         element = act.data()
         elementName = element.attribute("name")
         formElement = QWebElement(element)
@@ -1653,8 +1708,6 @@
         
         searchUrl = QUrl(self.page().mainFrame().baseUrl().resolved(
             QUrl(formElement.attribute("action"))))
-##        if searchUrl.scheme() != "http":
-##            return
         
         if qVersionTuple() >= (5, 0, 0):
             from PyQt5.QtCore import QUrlQuery

eric ide

mercurial