Extension:MassMessage/Page input list improvements

MassMessage page input list improvements

 * Public URL: https://www.mediawiki.org/wiki/User:Wctaiwan/MassMessage_proposal_for_GSoC
 * Bugzilla report:
 * Announcement: (link to the announcement of your proposal at the wikitech-l mailing list.

Name and contact information

 * Name: Wen-Chien Chen
 * Email: wctaiwan at Google's email service
 * IRC or IM networks/handle(s): On freenode as wctaiwan (hostmask wikipedia/wctaiwan), usually in #wikimedia-corefeatures while online
 * Web Page / Blog / Microblog / Portfolio: http://wctaiwan.com/
 * Resume (optional): Available on request
 * Location: Taipei, Taiwan (Waterloo, Ontario, Canada until the end of April)
 * Typical working hours: 9 AM - 12AM UTC+8

Synopsis
Currently, the MassMessage 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 proposal 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.


 * Possible mentors: User:Legoktm, User:MZMcBride

Deliverables
The project 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
 * A JavaScript / jQuery-based frontend for manipulating the lists allowing efficient insertion and deletion
 * A non-JavaScript-based fallback for the above
 * An API for users to add / remove their own talk pages from a destination list

Optional deliverables include:


 * Autocomplete when adding pages to a destination list

Participation
I plan to maintain a status report in my userspace, where I will list the parts of the project that have been completed, tasks that are in progress, and things I would work on next. I also plan to keep a log of what I have done (similar to what I have been doing at User:wctaiwan/Progress), in order to make it easier for mentors to track my progress.
 * Progress tracking

The source code will be maintained in a public repository on GitHub. Parts of the project will be submitted to Gerrit as separate patchsets as I finish them, in order to allow for wider review and feedback as I work on the project.
 * Source code

I will probably communicate with my mentors mostly through IRC, and outside of reading documentation and Googling, I will probably ask for help in #mediawiki on IRC as needed. I will respond to feedback on Gerrit, on my talk page and on IRC.
 * Communication

About you
I am a fourth-year computer science student at National Taiwan University, currently on exchange at the University of Waterloo in Canada. I have been active on the English Wikipedia since 2011, and I have recently begun submitting patches for MediaWiki extensions due to my participation in UCOSP / Facebook Open Academy.

I am motivated to work on this project because as a Wikipedian, I know that MassMessage is widely used and performs an essential task, so making it more usable and maintainable will have tangible benefits. I also feel that the project is a good match for my skills.

I became aware of GSoC through online friends who are volunteer MediaWiki developers.
 * How did you hear about this program?

If selected, I should be able to devote the majority of my time to the project for the duration of the program.
 * Will you have any other time commitments, such as school work, another job, planned vacation, etc., during the duration of the program?

I am only applying to GSoC, with this being my sole proposal for now.
 * We advise all candidates eligible to Google Summer of Code and FOSS Outreach Program for Women to apply for both programs. Are you planning to apply to both programs and, if so, with what organization(s)?

Past experience
Since February this year, I have been working on extending the Thanks extension to support thanking for comments on Flow discussion boards as part of UCOSP / Facebook Open Academy. I have also submitted two small patches to move WMF's custom licence text out of Flow and into the WikimediaMessages extension, in addition to filing a few bugs on Bugzilla. A list of patches I have worked on is available on Gerrit.
 * Please describe your experience with any other FOSS projects as a user and as a contributor:

My recent work on MediaWiki extensions described above has been my first significant involvement in a large open source project. The experience has improved my PHP and JavaScript / jQuery skills and given me a better understanding of the internals of MediaWiki. Equally importantly, it has familiarised me with MediaWiki's development process (Bugzilla, Gerrit and the code review process, mediawiki-vagrant, finding documentation, getting help on IRC, etc.), so I should be able to work effectively in executing the proposal outlined on this page.
 * Please describe any relevant projects that you have worked on previously and what knowledge you gained from working on them (include links):

At the moment, I am mainly interested in the MassMessage project described here, as I believe it is feasible and that I have the skills needed to complete a useful product.
 * What project(s) are you interested in (these can be in the same or different organizations)?