Go to file
Timo Tijhof c8ed44fb07 Refactor ve.getHash: Stabilize cross-browser differences; + unit tests
* Replaces c8b4a28936

* Use Object() casting to detect objects instead of .constructor
  (or instanceof). Both .constructor and instanceof compare by reference
  the type "Object" which means if the object comes from another window
  (where there is a different "Object" and "Object.prototype") it will
  drop out of the system and go freewack.

  Theory: If a variable casted to an object returns true when strictly compared
  to the original, the input must be an object.

  Which is true. It doesn't change the inheritance, it doesn't make it inherit
  from this window's Object if the object is from another window's object. All it
  does is cast to an object if not an object already.
  So e.g. "Object(5) !== 5" because 5 is a primitive value as opposed to an instance
  of Number.
  And contrary to "typeof", it doesn't return true for "null".

* .constructor also has the problem that it only works this way if the
  input is a plain object. e.g. a simple construtor function that creates
  an object also get in the wrong side of the if/else case since it is
  an instance of Object, but not directly (rather indirectly via another
  constructor).

* Added unit tests for basic getHash usage, as well as regression tests
  against the above two mentioned problems (these tests fail before this commit).

* While at it, also improved other utilities a bit.
 - Use hasOwnProperty instead of casting to boolean
   when checking for presence of native support.
   Thanks to Douglas Crockford for that tip.
 - Fix documentation for ve.getHash: Parameter is not named "obj".
 - Add Object-check to ve.getObjectKeys per ES5 Object.keys spec (to match native behavior)
 - Add Object-check to ve.getObjectValues to match ve.getObjectKeys
 - Improved performance of ve.getObjectKeys shim. Tried several potential optimizations
   and compared with jsperf. Using a "static" reference to hasOwn improves performance
   (by not having to look it up 4 scopes up and 3 property levels deep).
   Also using [.length] instead of .push() shared off a few ms.
 - Added unit tests for ve.getObjectValues

Change-Id: If24d09405321f201c67f7df75d332bb1171c8a36
2012-08-27 00:14:02 +02:00
demos/ve Very simple (and a little bit messy) debug tool that dumps not HTML table linear model, view tree and model tree. 2012-08-23 15:07:32 -07:00
modules Refactor ve.getHash: Stabilize cross-browser differences; + unit tests 2012-08-27 00:14:02 +02:00
.gitignore Kranitor #1: On-boarding 2012-07-27 14:40:00 -07:00
.gitreview Set defaultrebase=0 2012-06-20 16:27:40 -07:00
.jshintignore JSHint: Added dotfiles and fixed tons of linting warnings. 2012-07-19 10:01:00 -07:00
.jshintrc Refactor ve.js utilities and improve documentation 2012-08-12 20:32:45 +02:00
ApiVisualEditor.php Bug 37821 - Add support for oldid 2012-08-23 12:03:40 -07:00
AUTHORS.txt Remove the parser from the VE repo 2012-07-30 13:19:09 -07:00
LICENSE.txt Changed to use MIT license per agreement with the VisualEditor team 2012-07-19 13:25:45 -07:00
README.txt Remove the parser from the VE repo 2012-07-30 13:19:09 -07:00
VisualEditor.hooks.php Refactor ve.getHash: Stabilize cross-browser differences; + unit tests 2012-08-27 00:14:02 +02:00
VisualEditor.i18n.php Localisation updates from http://translatewiki.net. 2012-08-26 20:16:55 +00:00
VisualEditor.php Merge "Bug 37821 - Add support for oldid" 2012-08-23 21:18:37 +00:00
VisualEditorMessagesModule.php Design changes for save dialog 2012-08-17 13:48:16 -07:00

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 wiki:

	* http://www.mediawiki.org/wiki/VisualEditor
	* http://www.mediawiki.org/wiki/Parsoid