Расширения для hackwrench

Захотелось сделать простые, но удобные расширения для hackwrench.

Первое что пришло на ум — создать базовый класс, например PluginBase, от которого будут наследоваться все расширения. В нужный момент мы можем получить список загруженных расширений вызвав PluginBase.__subclasses__()

Как-нибудь так: self.plugins = [plugin(self) for plugin in PluginBase.__subclasses__()]

В PluginBase мы определяем перечисляем все возможные методы, а конструктор его может выглядить как-нибудь так:

def __init__(self, parent):
   self.parent = parent
   for k, f in self.__class__.__dict__.items():
      if not k.startswith('_') and k in PluginBase.__dict__:
         print 'Found BasePlugin method %s in %r' % (k, self)

В моем браузере такой базовый класс называется hackwrench.browser.BrowserPlugin, его методы соответствуют сигналам webkit.WebView, только вместо дефиса — подчеркивание. Например сигналу load-finished соответствует load_finished; title-changed — title_changed и т.п.

Полный список: console_message, create_web_view, download_requested, hovering_over_link, icon_loaded, load_committed, load_error, load_finished, load_progress_changed, load_started, populate_popup, script_alert, title_changed

Для удобства, я сделал декоратор BrowserPlugin.stop, который делает для соотв. сигнала stop_emission — если хочется чтобы встроенный обработчик сигнала(и из других расширений) не сработал.

Пример:

from hackwrench.browser import BrowserPlugin
class Example(BrowserPlugin):
    def title_changed(self, view, frame, title):
        print 'Title changed', title
    @BrowserPlugin.stop
    def download_requested(self, view, download):
        print 'Download blocked', download.get_uri()
    @BrowserPlugin.stop
    def script_alert(self, view, frame, msg):
        """ javascript alert просто выводим в консоль; никаких диалоговых окон не показываем """
        print 'Javascript alert', msg

Расширения должны лежать в ~/.hackwrench/extensions или глобально — в подкаталоге extensions самого hackwrench.

Более сложные расширения можно посмотреть в исходниках, в каталоге extensions: поддержка userscripts и “открыть все выделенные ссылки в новых вкладках”

Add post to:   Delicious Reddit Slashdot Digg Technorati Google
Make comment

Comments

No comments for this post

Required. 30 chars of fewer.

Required.

captcha image Please, enter symbols, which you see on the image