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
_______________________________________________
Wikitext-l mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/wikitext-l