Extension:MassMessage/Page input list improvements

This is a Google Summer of Code project to improve the way delivery lists are stored and modified in the MassMessage extension. It was worked on by wctaiwan under the mentorship of Legoktm and Prtksxna. The code from this project has been deployed to the [//test.wikipedia.org/ Wikipedia Test Wiki] (start testing by [//test.wikipedia.org/wiki/Special:CreateMassMessageList creating a delivery list]).

Current project status

 * The project is complete and the code has been merged into the master branch, but the new features do not work on production WMF wikis yet (dependent on database schema changes).

Synopsis
Currently, the extension reads the list of pages to which a message should be delivered from a wikitext page containing a list of parser functions in the following format:

This is not user friendly, and also technically undesirable since there is no enforced structure for the pages. This project seeks to implement a ContentHandler-based backend to replace the current system, and to create a usable frontend for managing the lists stored using the new backend. The resulting product will make managing lists easier, and separate the implementation details of the extension (currently, the use of parser functions) from its use.

Deliverables
The minimum viable product consists of the following components:


 * A JSON-based ContentHandler backend for storing destination lists
 * Probably using the data structure at Extension:MassMessage/Spamlist_revamp
 * An interface (probably a special page) for creating destination lists
 * It should support cloning an existing list and constructing a list from a wikitext page using the parser functions.
 * An interface for making bulk modifications to a destination list
 * Similar to Special:EditWatchlist/raw: The list should be alphabetized, allow arbitrary additions and deletions and automatically remove duplicates on save.
 * Modifying the current message delivery code to support the new backend

Beyond those, the project also includes implementing the following features:


 * A JavaScript / jQuery-based frontend for manipulating the lists allowing efficient insertion and deletion
 * A non-JavaScript-based fallback for the above

Optional deliverables include:


 * An API for users to add / remove their own talk pages from a destination list
 * Autocomplete when adding pages to a destination list

Mockups

 * [//upload.wikimedia.org/wikipedia/mediawiki/e/ec/MassMessage_list_creation_mockup.png Mockup screenshot for list creation UI]
 * Rough interactive prototype of how the frontend UI might work

Progress reporting

 * /Progress reports