diff -r 960e5e18894b -r a1a8eac81b54 WebBrowser/AdBlock/AdBlockPage.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/WebBrowser/AdBlock/AdBlockPage.py Sat Mar 12 20:05:01 2016 +0100 @@ -0,0 +1,103 @@ +# -*- coding: utf-8 -*- + +# Copyright (c) 2009 - 2016 Detlev Offenbach <detlev@die-offenbachs.de> +# + +""" +Module implementing a class to apply AdBlock rules to a web page. +""" + +from __future__ import unicode_literals + +from PyQt5.QtCore import QObject, QUrl + +from ..Tools import Scripts + + +class AdBlockPage(QObject): + """ + Class to apply AdBlock rules to a web page. + """ + def hideBlockedPageEntries(self, page): + """ + Public method to apply AdBlock rules to a web page. + + @param page reference to the web page (HelpWebPage) + """ + if page is None: + return + + from WebBrowser.WebBrowserWindow import WebBrowserWindow + manager = WebBrowserWindow.adBlockManager() + if not manager.isEnabled(): + return + + # apply domain specific element hiding rules + elementHiding = manager.elementHidingRulesForDomain(page.url()) + if elementHiding: + script = Scripts.setCss(elementHiding) + page.runJavaScript(script) +## docElement = page.mainFrame().documentElement() +## +## for entry in page.getAdBlockedPageEntries(): +## urlString = entry.urlString() +## if urlString.endswith((".js", ".css")): +## continue +## +## urlEnd = "" +## pos = urlString.rfind("/") +## if pos >= 0: +## urlEnd = urlString[pos + 1:] +## if urlString.endswith("/"): +## urlEnd = urlString[:-1] +## +## selector = \ +## 'img[src$="{0}"], iframe[src$="{0}"], embed[src$="{0}"]'\ +## .format(urlEnd) +## elements = docElement.findAll(selector) +## +## for element in elements: +## src = element.attribute("src") +## src = src.replace("../", "") +## if src in urlString: +## element.setStyleProperty("display", "none") +## +## +## elementHiding += "{display: none !important;}\n</style>" +## +## bodyElement = docElement.findFirst("body") +## bodyElement.appendInside( +## '<style type="text/css">\n/* AdBlock for eric */\n' + +## elementHiding) +## +## +##class AdBlockedPageEntry(object): +## """ +## Class implementing a data structure for web page rules. +## """ +## def __init__(self, rule, url): +## """ +## Constructor +## +## @param rule AdBlock rule to add (AdBlockRule) +## @param url URL that matched the rule (QUrl) +## """ +## self.rule = rule +## self.url = QUrl(url) +## +## def __eq__(self, other): +## """ +## Special method to test equality. +## +## @param other reference to the other entry (AdBlockedPageEntry) +## @return flag indicating equality (boolean) +## """ +## return self.rule == other.rule and self.url == other.url +## +## def urlString(self): +## """ +## Public method to get the URL as a string. +## +## @return URL as a string (string) +## """ +## return self.url.toString()