Go to file
Roan Kattouw 6772f92e70 Get rid of 'reversed' flag on transactions
The way we implemented undoing transactions was horrible. We'd process
the original transaction, but with a reversed=true flag. That meant we
had to keep track of the 'reversed' flag everywhere, and use ternaries
like insert = reversed ? op.remove : op.insert; all over the place to
access transaction operations. Redo then worked by reapplying the
transaction. We would verify that this was OK by tracking whether the
transaction was in an applied state or an undone state.

This commit makes it so every transaction can only be applied once. To
undo, you obtain a mirror image of the transaction with tx.reverse(),
then apply that. To redo, you clone the original transaction with
tx.clone() and apply that. All the code that had to use ternaries to
check whether the transaction was being applied in reverse or not is
gone now, because you can only apply a given transaction forwards,
never in reverse.

Bonus:
* Make ve.dm.Document's .completeHistory a simple array of
  transactions, rather than transaction/boolean pairs
* In the protection of double application test, clone the example
  document properly; it modified ve.dm.example.data, which was "fine"
  because it ran .commit() and .rollback() the same number of times

Change-Id: I3050c5430be4a12510f22e20853560b92acebb67
2013-10-02 19:37:08 -07:00
.docs Merge "Updates to support jsduck 5.x" 2013-09-24 15:37:56 +00:00
demos Merge "Extend SurfaceToolbar into TargetToolbar" 2013-09-23 23:48:41 +00:00
maintenance Add ULS to the standalone 2013-08-28 17:35:37 -07:00
modules Get rid of 'reversed' flag on transactions 2013-10-02 19:37:08 -07:00
.csslintrc
.gitignore Implement Grunt support (grunt jshint,csslint,qunit,watch) 2013-06-05 11:10:23 +00:00
.gitreview
.jshintignore Language Inspector UI 2013-07-29 00:38:59 -04:00
.jshintrc oojs: Integrate with OOJS v1.0.0 2013-06-06 17:29:55 +02:00
ApiVisualEditor.php ve.ce.MWTransclusionNode: Check for API errors 2013-08-03 00:35:42 +02:00
ApiVisualEditorEdit.php Set 'notminor' if minor edit box not checked 2013-07-24 15:07:05 +01:00
AUTHORS.txt Add David to author lists 2013-08-29 11:11:10 -07:00
CONTRIBUTING.md Merge "Updates to support jsduck 5.x" 2013-09-24 15:37:56 +00:00
Gruntfile.js grunt: Also delete QUnit temp files when test fails 2013-06-17 11:27:52 -07:00
LICENSE.txt
logo-experimental.png Integrate with BetaPreferences 2013-09-10 10:20:14 -07:00
logo-experimental.svg Integrate with BetaPreferences 2013-09-10 10:20:14 -07:00
package.json Updates to README.md and CODING.md 2013-09-17 19:09:25 -04:00
README.md Updates to README.md and CODING.md 2013-09-17 19:09:25 -04:00
VisualEditor.hooks.php Merge "Introduce newFromDocumentReplace() transaction builder" 2013-09-26 20:45:54 +00:00
VisualEditor.i18n.php Localisation updates from http://translatewiki.net. 2013-10-01 19:30:16 +00:00
VisualEditor.php Merge "Extend SurfaceToolbar into TargetToolbar" 2013-09-23 23:48:41 +00:00
VisualEditorDataModule.php Clean up VisualEditorDataModule and document ve.version 2013-09-18 03:40:00 +02:00

VisualEditor

VisualEditor provides a visual editor for wiki pages. It is written in JavaScript and runs in a web browser.

It uses the Parsoid parser to convert wikitext documents to annotated HTML which the VisualEditor is able to load, modify and emit back to Parsoid at which point it is converted back into wikitext.

For more information about these projects, check out the VisualEditor and Parsoid pages on mediawiki.

Developing and installing

For information on installing VisualEditor on a local wiki, please see https://www.mediawiki.org/wiki/Extension:VisualEditor

For information about running tests and contributing code to VisualEditor, see CODING.md. Patch submissions are reviewed and managed with Gerrit. There is also API documentation available for the VisualEditor.