Helpviewer/AdBlock/AdBlockPage.py

changeset 381
64ae9e09d8bc
parent 96
9624a110667d
child 791
9ec2ac20e54e
--- a/Helpviewer/AdBlock/AdBlockPage.py	Sat Jul 03 21:07:06 2010 +0200
+++ b/Helpviewer/AdBlock/AdBlockPage.py	Sun Jul 04 17:52:29 2010 +0200
@@ -8,6 +8,9 @@
 """
 
 from PyQt4.QtCore import *
+from PyQt4 import QtWebKit
+
+import Helpviewer.HelpWindow
 
 class AdBlockPage(QObject):
     """
@@ -21,8 +24,42 @@
         @param page reference to the web page (QWebPage)
         @param host host name (string)
         """
-        # This is a noop until Qt 4.6 is supported by PyQt4
-        return
+        if hasattr(QtWebKit, 'QWebElement'):
+            if not rule.isEnabled():
+                return
+            
+            filter = rule.filter()
+            offset = filter.find("##")
+            if offset == -1:
+                return
+            
+            selectorQuery = ""
+            if offset > 0:
+                domainRules = filter[:offset]
+                selectorQuery = filter[offset + 2:]
+                domains = domainRules.split(",")
+                
+                match = False
+                for domain in domains:
+                    reverse = domain[0] == '~'
+                    if reverse:
+                        xdomain = domain[1:]
+                        if host.endswith(xdomain):
+                            return
+                        match = True
+                    if host.endswith(domain):
+                        match = True
+                if not match:
+                    return
+            
+            if offset == 0:
+                selectorQuery = filter[2:]
+            
+            document = page.mainFrame().documentElement()
+            elements = document.findAll(selectorQuery)
+            for element in elements.toList():
+                element.setStyleProperty("visibility", "hidden")
+                element.removeFromDocument()
     
     def applyRulesToPage(self, page):
         """
@@ -30,5 +67,17 @@
         
         @param page reference to the web page (QWebPage)
         """
-        # This is a noop until Qt 4.6 is supported by PyQt4
-        return
+        if hasattr(QtWebKit, 'QWebElement'):
+            if page is None or page.mainFrame() is None:
+                return
+            
+            manager = Helpviewer.HelpWindow.HelpWindow.adblockManager()
+            if not manager.isEnabled():
+                return
+            
+            host = page.mainFrame().url().host()
+            subscriptions = manager.subscriptions()
+            for subscription in subscriptions:
+                rules = subscription.pageRules()
+                for rule in rules:
+                    self.__checkRule(rule, page, host)

eric ide

mercurial