VisualEditor/status

Last update on: 2012-09-17 (MW 1.20wmf12)

2011-05-16
Trevor Parscal and Neil Kandalgaonkar have done exploratory work on the visual editor project. Neil worked with developers of HackPad (a custom version of Etherpad, a real-time collaborative editing software) on a proof of concept of integration between Etherpad and MediaWiki (read more). They're now working on turning it into a MediaWiki extension. Work on the visual editor is also intersecting with the groundwork done on the new parser.

2011-06-02
Trevor Parscal and Neil Kandalgaonkar have done exploratory work on the visual editor project. Neil worked with developers of HackPad (a custom version of real-time collaborative editing software Etherpad) on a proof of concept to integrate Etherpad and MediaWiki (read more). They're now working on turning it into a MediaWiki extension. Trevor continues to work on WikiDom, a storage structure and functionality acting as an intermediate layer between the parser and a visual editor. This work also intersects with the groundwork done on the new parser.

2011-06-30
Trevor Parscal continued to work on the front-end of the visual editor, and specifications for accessing the editing surface via the API. A hybrid rendering approach appears to be the best strategy for the visual editor. Neil Kandalgaonkar continued to work on the middleware, DOM and transactions. Neil also continued to work on a demo to integrate MediaWiki and Etherpad. With Alolita Sharma, they planned their upcoming sprints. Neil and Trevor are posting about their work to the wikitext-l list.

2011-07-25
Trevor Parscal continued to work on the front-end of the visual editor and rich text rendering; he was joined by Inez Korczynski, a developer from Wikia, who are also interested in the visual editor. Neil Kandalgaonkar worked on real-time collaboration, concurrent editing and dived into the inner workings of Etherpad. (Read summary on wikitext-l.)

2011-08-31
Trevor Parscal and Inez Korczynski worked on a transaction-based model for the visual editor, where the document is built as a series of events (instead of saving it entirely at every change), which makes it easier to undo actions. Neil Kandalgaonkar continued to work on real-time collaboration and is close to presenting a demo of Etherpad working inside a MediaWiki edit window. Ian Baker investigated and started to work on a chat system to be integrated to the concurrent editing interface, for collaboration and live help. More details on the wikitext-l mailing list.

2011-09-30
Trevor Parscal expanded the software design documentation. He also refactored some of the data structures to follow a model/view controller pattern and support document-level transactions. He wrote tests for the new structure, and got it to render paragraphs and lists; he's now working on rendering tables.

2011-10-31
Trevor Parscal worked on a new model tree (and the conversion from the linear model) and updated the software design documentation. Inez Korczynski worked on front-end functionality: dialogs, selecting text, mouse actions, scrolling, keyboard shortcuts, etc. Roan Kattouw focused on algorithms that insert ranges of data into a document, and Neil Kandalgaonkar on the removal of data. On the parser side, a basic parser using PEG is in place, which produces an intermediate JSON object tree; Brion Vibber is still working on markup support (mixed HTML and Wikitext). Gabriel Wicke joined the team and started to work on the PEG parser (read more).

2011-11-30
Trevor Parscal fixed issues blocking the synchronization of structural edits to the user interface, refactored and cleaned up the code, and mapped out tasks and features to be supported. He also finished the document transaction functionality and made progress on an undo/redo system. Roan Kattouw added tests, rewrote some code to make the tests pass, and fixed a number of bugs and issues, notably in Internet Explorer. Inez Korczynski continued to work on content insertion, deletion and selection and fixed numerous bugs. Gabriel Wicke extended the PEG parser for robust larger-scale parsing. He converted the PEG parser into a combined wiki and HTML tokenizer that feeds to a HTML5 DOM tree builder. He implemented several wikitext features (lists, italics, bold) as token stream transformations. 139 of about 660 parser tests are now passing.

2011-12-13
<section begin=2011-12-13/>The first public developer prototype of the visual editor sandbox was deployed to MediaWiki.org for public feedback and testing. It can be accessed via the visual editor sandbox special page. Full announcement in the Wikimedia blog.<section end=2011-12-13/>

2011-12-31
<section begin=2011-12-31/>The team deployed a developer prototype of the visual editor sandbox to mediawiki.org for public feedback and testing. Trevor Parscal fixed bugs and refactored code. Inez Korczynski worked on the toolbar (text styles), the undo/redo stack, and lists (creating, deleting, and changing indentation). Gabriel Wicke worked on the parser test runner and the parser pipeline, including [//lists.wikimedia.org/pipermail/wikitext-l/2011-December/000494.html the tokenizer and its grammar] and template expansions. Neil Kandalgaonkar worked on the undo/redo feature and did a lot of refactoring.<section end=2011-12-31/>

2012-01-31
<section begin=2012-01-31/>January was a bit slower on the visual editor front, as parts of the team took some well-deserved vacation after the successful prototype launch in December. During the SF Hackathon, a lot of issues were fleshed out. Plans for the second phase of the editor project were formulated. Inez Korczynski investigated a possible use of  to help with input methods and text selections on mobile devices. Gabriel Wicke extended the parser with the ability to fetch and expand templates in a parallel and asynchronous fashion. The parser now supports most parts of the English Wikipedia Main Page.<section end=2012-01-31/>

2012-02-29
<section begin=2012-02-29/>Trevor Parscal did research on cursor interaction and selection rendering for RTL (right-to-left) and support for line breaks in PRE elements. Gabriel Wicke improved template expansion and parser function support, investigated Microdata and RDFa for WikiText-in-HTML-DOM embedding and added rough support for images and other files. Rob Moen committed a working Editable Surface IME prototype (bidirectional text not fully supported). Audrey Tang joined the team and worked on the sanitizer and the testing process.<section end=2012-02-29/>

2012-03-05
<section begin=2012-03-05/> Exploration of using ContentEditiable (CE) in place of EditSurface (ES) for the display layer was successful, and the team is integrating the new display layer system into the rest of the codebase. Inez and Christian are continuing their work on CE while Rob is focusing on getting the UserInterface (UI) module working with CE. Rob will be refactoring UI and adding an API layer for toolbar and inspector extensions. Trevor and Roan are focusing on DataModel (DM) changes that need to be done to improve tree sync and integration with the parser (Parsoid). Gabriel and Audrey are continuing their work on Parsoid.<section end=2012-03-05/>

2012-03-06
<section begin=2012-03-06/>Last week made big decisions. The big one was to move forward with contentEditable (CE) that Inez and Christian are doing in place of Editable Surface (ES). Looks like editing on mobile will be awesome! Trevor and Roan will be focusing on the data model (DM. DOM -> Linear Parser) as the basic objectives have been hashed out, the (parser -> DM is unaffected). Certain structure changes (i.e. turning paragraphs to lists) aren't currently possible so the DM will change to support that. Linking with the parser (DOM-> LM converter) will be deferred for a week.

In terms of the UI, Rob worked on some RTL in ES, but switched given the CE advances. This week will focus on getting the UI working in CE (assess what UI we have from ES and where it needs to be). Plan on getting to the point we can user test the JS API for the toolbar.

In terms of the parser, Gabriel has to decide on RDFa vs. microdata eventually (difference are minimal, most of the DOM stuff won't change and can be tested with vanilla HTML anyway). Created a dump grepper with syntax highlighting and used that to analyze existing wikilink/image syntax use. Refactored tokenization and expansion of wikilink/images so now image options can come from templates (257 tests passing now). Plan on tackling interacting with action=parse and wiki in general. Also some more parser function tweaking, etc. and the RDFa/microdata decision.<section end=2012-03-06/>

2012-03-20
<section begin=2012-03-20/>Team updated (sans key people who are out of commission): FY2012-2013 goals section. Further updates/corrections by Trevor and Gabriel expected when they return.<section end=2012-03-20/>

2012-03-31
<section begin=2012-03-31/>A big decision in March was to move forward with contentEditable (CE), implemented by Wikia developers Inez Korczynski and Christian Williams, instead of Editable Surface (ES). Trevor Parscal and Roan Kattouw focused on the data model. Rob Moen worked on the user interface, first on right-to-left support in ES, then on getting the UI working in CE. Gabriel Wicke and Audrey Tang continued their work on Parsoid and need to decide on RDFa vs. microdata. They created a dump grepper with syntax highlighting, and used it to analyze existing wikilink/image syntax use.<section end=2012-03-31/>

2012-04-monthly
<section begin=2012-04-monthly/>Roan Kattouw and Trevor Parscal are rewriting the underlying data model (ve.dm) to achieve feature compatibility with the parser and correct a variety of problems that have been previously deferred. Inez Korczynski and Christian Williams have been continuing their work to stabilize and integrate the content editable layer (ve.ce) and have been working with Rob Moen, who has focused on getting the user interface elements working with the content editable layer (ve.ui). Gabriel Wicke has been working on improving the parser's ability to parse pages more quickly as well as increasing compatibility with existing features such as thumbnails. A big template-heavy page like Barack Obama can now be expanded in similar time as the production parser (80 seconds on a puny laptop) and 340MB of memory. It previously ran out of memory after consuming 1.6G and running for ~30 minutes.<section end=2012-04-monthly/>

2012-05-07
<section begin=2012-05-07/>

Release Planning
BY JUNE! 5 weeks.

What we want:
 * parse page
 * load editor
 * save it back

Parser:
 * not hard to load simple pages
 * but not roundtripping it (because not all tags are supported)
 * Serializaiton: some normalization. focusing efforts on reconcilliation instead?
 * For Roundtripping: Need more support. Handle templates (started by one and ended by another), also template parameters. (linear model supports both: but data model only allows edit templates parameters on opening).
 * Just finished Refactoring so it can expand big articles. A few more days left of followup.

Serializer:
 * "Alien Nodes" (HTML we don't understand)
 * acknowledge that dirty diffs will happen.
 * Have a sandbox deploy, create a namespace for it.

June:
 * Roundtrip something!
 * Probably a namespace limit, sandbox
 * allow dirty diffs or disallow manual editing and start from scratch.
 * If source editing, then it will run it through the parser as a presave transformation. Warning banner with X? so may not have source mode editing only if developer mode.
 * Maybe Gabriel can refocus on serialization (worried abotu stuff that will be shifting).
 * get it ready incremental improvements on front-end, but on the serialization and back-end that will change.

James Forrester:
 * sooner is better. :-)
 * He will need to be on board for the release in (late) June

Things to be done for release:
 * 1) Gabriel needs to refocus on serialization (for roundtripping) after he gets the refactor settled (next couple days)
 * 2) Finish DM rewrite stuff. As soon as it is in master then we start doing integration.
 * 3) * This week: Get feature completeness with transactions]
 * 4) * On FE, rework observation stuff, toolbar into the DM stuff as it comes along.
 * 5) * Annotation should be working today.
 * 6)  Integration work?
 * 7) * MW integration [Roan]
 * 8) * FE integration- do a "ooh and ahh" it.
 * 9) * Node.js integration [Gabriel will get working, and Roan will puppetize and give to Ops]. Roan has Node.js installed on a VM project.

Release Notes: Dec to June (reason)
 * 1) Switch from ES to CE (due to CE, This warrants a blog post)
 * 2) Mobile editing support (due to CE, Patrick can hack up something)
 * 3) February stuff: Supports spellcheck, autocorrect, IME (due to CE)
 * 4) turn headline into paragraph
 * 5) feature parity w/ previous demo (internal check)
 * 6) Load and save (parser/serializer, backend integration)
 * 7) In-place editing (frontend integration)
 * 8) Graceful failure/fallback (AlienNode)
 * 9) [TBD] partial iage support (DM rewrite)

Trevor will make a task list in-wiki. If it doesn't work out, will consider to switching to Asana.<section end=2012-05-07/>

2012-05-20
<section begin=2012-05-20/>Tracking ongoing work: <section end=2012-05-20/>
 * Visual Editor ToDo List
 * Parser-specific todo list

2012-05-23
<section begin=2012-05-23/> Gabriel has set up a very basic parsoid service.


 * browse english wikipedia as parsoid sees it
 * POST wikitext -> HTML DOM
 * POST HTML DOM -> wikitext.

Note: round-tripping is limited. Does not support preservation of variable whitespace, templates and other complex constructs yet.

Currently 154 parser tests are passing in the new --roundtrip mode that Subbu added last week.

Also the team had a meeting with James.<section end=2012-05-23/>

2012-05-monthly
<section begin="2012-05-monthly"/>The team completed release planning for June and welcomed James Forrester as the Technical Product Analyst for the project. Ongoing work on the Visual Editor and Parsoid is tracked on-wiki. Gabriel Wicke set up a very basic parsoid service that lets users browse the English Wikipedia as Parsoid sees it, and convert Wikitext to HTML DOM and vice versa.<section end="2012-05-monthly"/>

2012-06-monthly
<section begin="2012-06-monthly"/>The team did the first deployment of VisualEditor and Parsoid, with an early version now live in a test namespace on mediawiki.org. This editor is broadly feature-compatible with the old, EditableSurface-style code which this replaces, while being the first release that can create and edit pages. The team is now planning to deploy new code as it develops every two weeks or so. The initial push will be to work on bug-fixes, and to finalise the code for a few features that were close to being ready before the first deployment.<section end="2012-06-monthly"/>

2012-07-monthly
<section begin="2012-07-monthly"/>The VisualEditor (VE) team presented their work at Wikimania and received a good deal of feedback from the community. The team created a rough plan for the next three months' work. The early version of VE on mediawiki.org was updated twice, fixing a number of bugs and noticeably including the addition of support for nested lists. Gabriel Wicke relocated to San Francisco, and Timo Tijhof visited the SF office for three weeks after Wikimania.<section end="2012-07-monthly"/>

2012-08-20 (MW 1.20wmf10)
<section begin="2012-08-20 (MW 1.20wmf10)"/>The VisualEditor was updated as part of the wider MediaWiki 1.20wmf10 branch deployment on Monday 20 August.

The most visible new item in the two weeks since 1.20wmf9 is the much-improved link inspector. This now guides users to create a link to a suggested existing article, a redlink or an external link, and replaces the previous basic functionality that did not suggest links or inform you if the target of your link existed. We have also improved the save dialogue, streamlining the interaction based on feedback from the design team.

There have also been a number of bug fixes, such as preserving spaces before and after the content in headings and other forms (so that " == Foo == " doesn't have spacing either side of it in the editor display, but doesn't strip them either &mdash; 37935), using browsers' native deletion mechanisms which helps with support for short-cuts and internationalisation (38461), and handling of "alien nodes" (pieces of content that the editor does not know how to edit yet) so that they do not break the rest of the editor when included. However, most of the changes have been improvements to the code architecture to allow it to be re-used and extended to support new 'node types' like categories or tables when we work on these later.

A complete list of individual code commits is available in the 1.20/wmf10 changelog, and all Bugzilla bugs closed in this period on Bugzilla's list.<section end="2012-08-20 (MW 1.20wmf10)"/>

2012-08-monthly
<section begin="2012-08-monthly"/>In August, the team focused on overhauling the code design of VisualEditor so that it is more modular and easier to extend. This involves creating and documenting a number of formal APIs at each point in the architecture, that means a developer does not have to understand the entire code base to be able to add new features. The early version of the VisualEditor on mediawiki.org was updated twice (wmf9 and wmf10), fixing a number of bugs, as well as adding a much-improved link inspector to help users build links, and a save dialog that better guides users on what to do..<section end="2012-08-monthly"/>

2012-09-03 (MW 1.20wmf11)
<section begin="2012-09-03 (MW 1.20wmf11)"/>The VisualEditor was updated as part of the wider MediaWiki 1.20wmf11 branch deployment on Monday 3 September.

The team have spent most of the two weeks since 1.20wmf10 working on how the code integrates together, providing clean interfaces between them so new developers can re-use and extend VisualEditor to support new 'node types' like categories or tables when we work on these later.

That said, there have been a number of bug fixes, including better support for RTL languages as part of our work with our Internationalisation colleagues, supporting the use of VisualEditor with the Monobook skin (38154) and making sure we don't appear to support browsers that won't work with VisualEditor (38857). We now support the editing of old revisions through the tool rather than just the latest one (37821), and have updated the code to work with a changed way in which the Parsoid service now operates as it is developed.

A complete list of individual code commits is available in the 1.20/wmf11 changelog, and all Bugzilla bugs closed in this period on Bugzilla's list.<section end="2012-09-03 (MW 1.20wmf11)"/>

2012-09-17 (MW 1.20wmf12)
<section begin="2012-09-17 (MW 1.20wmf12)"/>The VisualEditor was updated as part of the wider MediaWiki 1.20wmf12 branch deployment on Monday 17 September.

The last two weeks included the annual Wikimedia Engineering all-tech meeting and the Wikimedia Foundation all-staff meeting, so this iteration was in effect shorter than others. The team have continued to spend most of the coding time over the two weeks since 1.20wmf11 working on how the code integrates together. This work will provide cleaner interfaces between components of the VisualEditor, so new developers can re-use and extend VisualEditor to support new 'node types' like categories or tables when we work on these later.

Beyond the API work, there have been a few minor changes to the user interface made this iteration. Firstly, the link inspector now checks for invalid titles like "Foo{}bar" (33094), and long titles in the suggestions box are replaced with ellipses in the middle rather than the end so they can be distinguished (39591). The save dialog's length down-counter has been labelled to indicate it counts the number of bytes rather than characters, as that is what the database holds (40035); longer-term, we may wish to find a better way to show this to users. Finally, we fixed a bug where the table of contents was restored wrongly if a user edited and then cancelled without saving (39753).

A complete list of individual code commits is available in the 1.20/wmf12 changelog, and all Bugzilla bugs closed in this period on Bugzilla's list.<section end="2012-09-17 (MW 1.20wmf12)"/>