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. A public test wiki running the latest version of the code can be found at http://mm-ch.wmflabs.org/.

Current project status

 * The official coding period of Google Summer of Code has ended, and the project is largely complete, but the code has not been merged or deployed (partially dependent on database schema changes in WMF wikis).
 * Remaining tasks:
 * Change the code to utilise the parser cache
 * Test and ensure the new code is able to handle long delivery lists
 * Merge and deploy the code
 * Uppdate documentation

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