Fix paste tests to work in phantomJS

PhantomJS doesn't play nicely with document.execCommand and complex
HTML. For testing the attribute stripping, use the clipboardData
path. Add in a special clipboard key value that allows us to manually
trigger this from the tests ('useClipboardData-0').

Change-Id: I0de842095a6a9a766f0f9a2249064ca7707283c8
Remove unused .csslintignore

This file was for the Jenkins job of csslint (since it doesn't
use the Gruntfile), now that it does, this file is redundant.

See also 94b213bd1ec33a2 in oojs-ui.

Change-Id: I62c2eb9cf62ebb15a19158f4913bf8a18597c7d4
grunt: Update grunt-contrib-jshint use built-in jshintrc parser

Use built-in jshintrc option for 'jshint' config instead of
parsing manually and strippig comments.

node-jshint itself has supported comment parsing for a long time
(which is why our Jenkins build, which doesn't even use grunt,
has no problem with our .jshintrc file).

But the grunt task never exposed this parser, until v0.6.4.

Change-Id: Ia45a44ac49c943845a11d3fc7a0127776e99ed2a
Clean up HTML files, Gruntfile and remove index-phantomjs-tmp hack

Consistently:
* Use <!DOCTYPE html>.
* Use lowercase element tags.
* Indent <head> from <html>.
* Use <meta charset="utf-8">.
* Indent <script> and <style> content from open/close tag.
* Put <link> before <script> when in <head> (in ve/test).
* Use .html instead of .php for indexes where PHP is no
  longer used.
* Use the same license header as we use elsewhere (/*! instead
  of /** and no @file)

Gruntfile:
* Include the new .js files in jshint (demos/**/*.js).
* Order buildloader keys in the same order as the directories
  they go to (alphabetically).
* Add missing jshint patterns:
  - .docs/**/*.js
  - build/**/*.js
  - modules/ve-wmf/**/*.js
* Add missing qunit test:
  - qunit.unicodejs
* Add missing watch patterns:
  - .jscs.json
  - qunit.unicodejs

Also:
* Moved relatively large pieces of script into separate files
  so that they are less repeated (though .template) and also
  able to be linted properly.
* Fixed jshint warnings in newly-created trigger.js and demo.js.
* Moved <script> elements already in <body> to bottom of <body>
  (in ve/test and eg-iframe).
* Moved <script> in eg-iframe from <head> to <body>.
* Fixed buildloader grunt task to use a non-\n whitespace match.
  for the start as well, the newline before the placeholder was
  being stripped.
* Removed the (now obsolete) index-phantomjs-tmp hack.

Change-Id: I7c5a371b82f69f367a8e1c11673d2f37868bc931
Move additional module loading from mw.Target to mw.ViewPageTarget

This resolves some experimental mode dependencies on Mobile integration.

Bug: 58551
Change-Id: Id6c498ae19a5d5b1e5d1698f5e149a9b5d6f3b26
grunt: Update devDependencies

Change-Id: I0076d07e2029039283984dd2ae0b0e775b3e00c0
[browser test] Prefer string interpolation instead of string concatenation

Following Ruby coding convention[1].

Also fixes "no implicit conversion of nil into String (TypeError)"
error.

1: https://github.com/styleguide/ruby

Change-Id: I3bcf9ba08476117921de7d5a242f3726d8b05efb
Rebuild VisualEditor.i18n.php – 2013-12-18 19:57:00

Change-Id: I1d1a1256893ecf4489d64e7cf395a6b5d7598d73
Localisation updates from https://translatewiki.net.

Change-Id: If44e14fd60106a123c8a7cfc6f4b70163a6ec3b5
MWBlockImage new DOM fixes

MWBlockImage
* Remove properties which just cache model properties. We can get
  fresh values from the model whenever needed and this just causes
  problems keeping them in sync.
* Tidy up DOM documentation indentation
* Merge setupCaption and setCaptionVisible into updateCaption. The
  caption's visibility can be calculated inside the method from
  model attributes.
* No need to generate figcaption on init, updateCaption  will do
  this for us
* Storing full view and model in this.caption is unnecessary,
  just store this.$caption (view.$element) and this.captionVisible
* Append the caption directly to the figure now there is no container
* Simplify setCaptionVisible
* Add in fix to account for border to figure width
* updateSize can get values from the model if they are not provided
* Remove unnecessary styles being set on this.$element.

MWImageCaption
* Generate as a figcaption instead of a div for direct attachment

MWImage
* Missing docs

CSS
* Cleanup reset styles, remove redundant add in required
* Fix margins for left/right floats to match .tleft/.tright
* Use more specific selector for inner border (thumbimage) to avoid
  matching shields.
* Remove unnecessary frameless styles, it has no border by default.

Change-Id: I52e0e10b465bb9761c2e4be28c98bec37b0dd2ca
Prevent getSaveFields from returning a property named undefined

Change-Id: Id7326ee8b951ba2219d3ea6767370ece9aba3c23
Merge "Prevent getSaveFields from returning a property named undefined"
Merge "Remove unused .csslintignore"
Merge "grunt: Update grunt-contrib-jshint use built-in jshintrc parser"
Merge "Clean up HTML files, Gruntfile and remove index-phantomjs-tmp hack"
Merge "grunt: Update devDependencies"
demo: Convert VisualEditor standalone demo to pure HTML+JS

Change-Id: I9a93abce933e91881e553c0bdb26f31065cf4cda
Clean up Target properties

Move target.surface from mw.Target to Target
* All targets use this, let's standardise it.

Move target.$document from mw.ViewPageTarget to Target
* It was initialised with null in mw.ViewPageTarget, but the
  assignment happened in mw.Target. So it should be moved up
  at least to mw.Target.
* Since it is useful to have in sa.Target as well, moved it up
  to the abstract Target, and implemented in sa.Target and
  immediately used in the standalone demo where we were already
  duplicating the find( '.ve-ce-documentNode' ).

Add missing target.setupDone = false; in sa.Target

Add missing target.toolbar to Target
* Was used in all subclasses, but never initialised in any of
  the constructors. Let's standardise this property name as well
  (instead of initialising it in three places).

Move target#event-surfaceReady from mw.Target to Target
* sa.Target uses it as well, and considering Platform#initialize
  is already standardised in the abstract class, Target#setup
  being deferred is most likely to happen in each target as well
  so let's avoid different events being invented for the same
  thing and consistently use 'surfaceReady'.

Change-Id: Ia8bde188a4cde7e1615c2ae9c5b758eefc5d9cb7
Merge "MWBlockImage new DOM fixes"
[Browser test] New test for multi-edit workflow

1) Per reviewer comments, moved some of the verbosity
   from feature to steps file in order to make
   the feature file a little more readable.
2) Using random strings for the text of each edit
   in order to make every edit unique.
3) Removing a commented line that wasn't needed.

Bug: 57654

Change-Id: Ib8b15964436d9c24556fac32977a64e2d5f22044