Hello,
In commit 72458 I've added the InlineEditor extension. [1] This extension is a working
implementation of the prototype(s) earlier posted on this list. It's not actually for
use on live wikis, but more a proof-of-concept and framework to experiment with. I will
explain the extension in detail for those of you who might be interested.
== Design overview ==
The extension exists of several parts, structured in sub-directories like the
UsabilityInitiative extension. The InlineEditor extension itself provides a framework for
different edit modes to build on. It displays the edit modes, provides an interface to
mark editable pieces of wikitext, provides a client-side inline editor which the edit
modes *may* use, is configurable with several fallback options to the full/traditional
editor, and handles previewing, publishing, undo and redo.
Every other extension provides an edit mode for the InlineEditor extension. They hook into
InlineEditorMark and InlineEditorDefineEditors. The first one is called whenever wikitext
is passed through the extension, and all edit modes can mark their editable pieces. Once
this is done, a few algorithms will combine this with information of previously edited
pieces, generate both wikitext to run through the parser, and JSON which is passed to the
client, which maps the editable pieces to the original wikitext. The other hook is to
include CSS, JS and messages to the page.
== Limitations ==
There are many things which are sub-optimal right now:
* The editor is slow. Whenever changing a small element and previewing it, the entire page
is reparsed. This will be fixed by parsing only the element if possible (i.e. references
have side effects at the bottom of the page).
* It's for now only possible to use the editor as primary editor, with a link to the
full/traditional editor. There will be a configuration option whether to do this, or
display a message at the top of the traditional edit page to switch to this editor.
* I've not tested things in older browsers (or IE at all, for that matter). I only
know it runs fine in Firefox and Chrome, but it may have bugs in other browsers.
* The edit modes are really, really, basic right now. They may or may not screw things up.
Most of them have just one or a few regular expressions which do well in general, but may
fail at many edge-cases.
* The editor may not handle all the messages and edge cases of the traditional editor.
* The extensions is written for MediaWiki 1.16 but may or may not work with other
versions.
Also, I'm not sure at all whether the current set of edit modes is the way to go.
Currently, they are mutually exclusive. Meaning that text marked by one editor is never
included in text marked by another editor. However, maybe it's better to not have edit
modes like this, but different granularity of editing. I.e. sentence => paragraph =>
block. This way the user will get familiar with more wikitext instead of always seeing
small portions. The framework currently doesn't allow for overlap in markings, but I
will work to make this possible.
== Goals ==
Goal of this extension is to provide a framework to easily play with different modes of
editing in-line. Feel free to write extensions that use this framework, or help with the
framework itself. Any usability or technical suggestions are also welcome!
I hope to get some documentation up on
mediawiki.org anytime soon, but note that the code
is heavily documented inline. Feel free to ask any questions: I'm probably forgetting
to mention some things that may not be clear to everyone. Also, there is no public wiki at
the moment to test this extension with, will work on that, but if someone else can enable
it on a test wiki that would be great too!
To install the extension(s), check the instructions in
/trunk/extensions/InlineEditor/InlineEditor.php. Thanks for your time reading this!
Regards,
Jan Paul
[1]
http://www.mediawiki.org/wiki/Special:Code/MediaWiki/72458