I’ve been fiddling around with Mono.Addins and have decided that I will be rewriting VandalSniper from the ground up. I’ve had a lot of ideas for it that have become way too complicated to implement with the current design. VandalSniper was my first C#/Gtk# project anyway, so it’s about due for a rewrite. I’ve learned a lot since I designed it.
Instead of being a pure anti-vandal tool it will be a simple web browser that is extensible with Mono.Addins. Somewhat like Firefox, only “extensions” will be CLI assemblies, and will be able to integrate better with the UI and provide longer-lived services. It will ship with a few addins geared towards Wikipedia editors, not just RC patrollers.
Imagine being notified the moment a page on your watchlist is edited. VandalSniper already does this, but there’s too much anti-vandal stuff to make it attractive to the average editor. So these features will be isolated and regrouped by target audience, then packaged into addins.
The awesome thing about this design is that WikiBench can be whatever anyone wants it to be. If they have a nifty idea for a new feature they can code it themselves and have it integrate with the browser. Basically, we’re talking about the possibility of merging things like AWB, VandalSniper, and other Wikipedia-related tools into one coherent product.
Currently addins can extend the browser in two ways: preferences panes and pads. The former will show up in the WikiBench preferences dialog and will allow addin authors to present settings to the user in a convenient place. The latter will allow arbitrary widgets to be shown below the browser, in a tabbed widget — similar to what VandalSniper does now. However, the user will be able to hide pads they don’t want to see.
I already have one addin that provides change monitoring services to other addins; they can request that a certain wiki be watched (such as “en.wikipedia”), and an event will fire any time any change is made anywhere on the English Wikipedia. The event handler(s) will be passed an object that encapsulates the data of the change. In other words, addins can share the same change feed and don’t need to parse anything from browne.
Eventually the root extension points will include hooks into the browser, allowing addins to inject arbitrary JavaScript into pages, make calls to JavaScript functions from the CLR, and calls back into the CLR from JavaScript. This will make so many nifty things possible it boggles the mind.
I am already planning an addin that will make use of this feature to add links following Wikipedia username links. These will pop up a menu similar to the “[VS]” links in VandalSniper — except the menu will be an extension point, allowing other addins to add items to this menu.
I’m not sure how long before I’ll have a beta release, but I sure hope it’s soon. I’ll be posting some screenshots here occasionally.
This stuff is just too cool.