Tabify indent in en.json

Change-Id: I94cad74cbb3f292fc6f92aee61169ebd87c6617a
Merge MassMessageBackend

Change-Id: I98bd684ed1637de8f25e465ce1ffd24ca2171540
Various fixes and improvements

* Change edit summaries to use ->plain()
* Improved validation
* Use ContentHandler for creating content objects
* Link external links in display and add to links table
* Add support for delivery to a list with the new format

Change-Id: Ibddb6e2cf547e5d158eba45df0c3ed0c6f56bf42
Improve validation and target construction

* Separate errors for nonexistent and invalid pages
* Add checks for external targets where forbidden in validation
* Improve target construction
* Other minor changes
* Simplify MassMessage::normalizeTargets()

Change-Id: Ie9a9497b874707e0484e6533f1a683c7abe19c35
Error for invalid targets when editing spamlist

This shows a simple error message for invalid targets, instead of
silently ignoring them as before. I considered using a Status object to
show details (which targets are invalid, invalid title or wiki), but
that isn't practical until we move away from FormSpecialPage.

Followup to Ibddb6e2cf547e5d158eba45df0c3ed0c6f56bf42

Change-Id: I3c29391c4fe3f21c92c61f61fc545a260b43a9b8
Call API internally for list creation and editing

Change-Id: I977ed5d9997c2f7c5e2461b73dba421d81c548e1
Use Html class for generating displayed list

Change-Id: I853f4207db18d02b0603c3b283e3e66409d93f1d
Combine target fetching; add importing on creation

Contains the following minor changes:
* Simplify MassMessage::getCategoryTargets()
* Bugfix wrt. error message on API errors

Change-Id: Ic0d3d212bc51d8b5732d5371e41a2a9ad5749254
Make site handling more consistent

Never store the site for local pages, instead having
Special:EditMassMessageList decide whether to add it on output.

Change-Id: I04c6ab7281ba9238934181b19c3bcb2b42b2d524
Improve Special:MassMessage state checking

Use getVal() instead of getText() to check for form state; replace ==
with ===.

Change-Id: Ief4a334a1eef1fce382ebdf50011e04e4d7db702
Change PF handling; include site in getTargets

* Simplify and move verifyPFData
  * We don't need to check if URL is well-formed; if not it'd fail on
    getDBName
* Always include the 'site' key in MassMessage::getTargets for
  consistent behaviour
* Index databases by host:port if port is specified
* Use getBaseUrl($wgCanonicalServer) instead of $wgServerName in some
  places

Change-Id: Ic0ce01bd6954db02e10d9674454297d80582f5ea
Tidy preview function and comments

Remove some commented-out code from SpecialMassMessage::preview() and
fix some comments elsewhere.

Change-Id: I6676a9693eb598c039e415db90b5a04974c36778
Split target-related functions into separate class

Change-Id: I4a1235a1dca653bf42bab3d54ef7319c531e38f4
Move target extraction and ordering

Move code for extracting title and site from 'title@site' and for
sorting targets into MassMessageTargets so they can be reused by API
code.

Change-Id: I2e9e39198986fa02abed2bfc3409356fcecd502c
Add common "edit" function and refactor code

Increase the amount of shared code. Not sure if the functions belong in
MassMessageListContentHandler, though. Also fix issue where imported
targets may not be sorted when creating a new spamlist.

Change-Id: Ic52cf52aa32f778f75567ae1ffa52e721c6718f9
Add API for editing delivery lists

Change-Id: Ib2ef8adfe9f3ffd77f855063b6680455fcdde47a
Use API itself as context

Followup to Ib2ef8adfe9f3ffd77f855063b6680455fcdde47a

Change-Id: I9dc0a925dc9d59022983f935334437d92c56201d
Add UI to remove targets in list view

Includes stylistic fix to current JS and minor fixes to messages.

Change-Id: Id42c1391ad62ea97cb52fe27666c013d5ce57300
Add ability to add pages to spamlist view

Also change some Html::rawElement to Html::element and mw.msg to
mw.message

Change-Id: I9c1eb5370f0b7e44bb6b1afebed0922a8641a663
Handle titles containing @ in JS

Correctly handle titles containing @ on the local site. Also fixed issue
where the site field wasn't correctly cleared after adding a page.

Change-Id: I8733e09aea661625bcb8d5716e5d496d605d1e52