Extension:BookManager/Improve support for book structures

Hi! I'm Molly White, or GorillaWarfare on the various projects. I'm a long-term Wikipedian who is looking to work on improving the way MediaWiki projects handle books. I would love to hear any feedback you have for me, and I can be easily contacted on IRC, by email, or by talk page message (see below for details).

Identity
Name: Molly White Email: gorillawarfarewikipedia@undefinedgmail.com or molly.white5@undefinedgmail.com Project title: Improve support for book structures

Contact/working info
Timezone: EDT (UTC -4:00) Typical working hours: Very flexible. I can adjust my work hours to anytime between 13:00–07:00 UTC (09:00–03:00 Eastern), but I anticipate working from 15:00–23:00 UTC (11:00–19:00 Eastern). IRC or IM networks/handle(s): GorillaWarfare (Freenode) Time constraints: I just want to be clear up front that I do have a few time constraints to work around. I will be working a full-time job up until either June 21 or June 28 (I still need to figure this out with my employer). I'm also in college, and classes start for me on September 4. Although I realize the overlap is somewhat significant, I'm fully prepared to dedicate most of my evenings/weekends to working on the project while I'm working or in classes.

Project summary
This project aims to improve Extension:BookManager so that it can be used to collect a book (from Wikisource, Wikibooks, or similar) into a single unit, instead of a scattered and loosely-organized set of pages.

There are a number of wikis (for example, Wikisource and Wikibooks) that consist of content that is structured as a book. MediaWiki does not currently have much in the way of support for this structure, and so these wikis are forced to try to adapt the article structure to suit their needs. Wikisource has adapted by using an Index namespace for individual pages, then collecting each chapter (or an entire work, if the work is short) in the main namespace. If the work spans several subpages (in the case of chapters), the pages are linked together using header templates, and an index page of sorts is typically used for a landing page. Wikibooks uses a similar structure, using subpages of an article for each chapter. These adaptations work, but are severely limited and unstandardized.

Extension:BookManager was created as an attempt to address this issue. The extension currently needs to be stabilized, but it is a good starting point for this project. It can be modified to use a JSON representation of the book, which will neatly collect all the necessary metadata and organizational information. I have created an example at User:GorillaWarfare/Proposal/JSON. This will be editable via a form (see right); users will not need to manipulate the raw JSON. Each book will have a single main page that can be used to interact with the book as a whole—these interactions will include the ability to watchlist an entire book or print/export a book. There are quite a few enhancements that depend on this organizational structure (see Bugzilla), and I hope to tackle some of these as a part of the project.

Mentors
User:Raylton P. Sousa (maintainer of BookManager) and User:Mwalker (WMF) have offered to mentor me. User:Tpt has offered to co-mentor, if a Proofread Page GSoC project does not materialize.

Required deliverables

 * Stabilize Extension:BookManager
 * Design a final JSON schema to represent each book (see the beginnings of this at User:GorillaWarfare/Proposal/JSON)
 * Modify the BookManager code to create and interact with a JSON representation of the book
 * Create a form to allow a user to easily adjust the book structure without editing the JSON directly
 * Write documentation for the BookManager extension

If time permits
I would like to implement some of the feature requests that depend on a single "book" representation.
 * One-click events that handle an entire book
 * Watchlist
 * Delete
 * Move
 * Protect
 * View recent changes
 * Add an extension or patch to Extension:Collection that will allow it to print the entire book at once

Pre-May 27
Familiarize with the MediaWiki core, BookManager, and possibly Collection extensions. Work on stabilizing the BookManager extension. I will also try to replace all deprecated functions with up-to-date ones, and improve the inline documentation.

May 27–June 17
Google allocates this time to the "community bonding period". I am already quite involved with the Wikimedia communities, so I will not need to spend much of this time familiarizing myself with them. However, I will use this time to become more familiar with the development processes, MediaWiki core, and the BookManager extension. During this time, I will also work with my mentor to draft a very specific plan for the rest of the summer, create design documents, and begin working on the code.

June 17–August 19
Main coding period. More detail coming soon!

August 19–September 23
I've allocated a large amount of time at the end of the program to a sort of clean-up stage. This will act as flex time if there are still a few last-minute things I need to accomplish, but I plan to spend most of this time fixing bugs, writing documentation, and working with other developers to review and merge the code. I've given a little extra time because my school year starts on September 4, and I want a good two weeks of full-time work on finishing it up. I will still be able to dedicate a large amount of time from September 4 onwards, but it may be in more scattered segments.

About you
I am just completing my second year at Northeastern University, where I am studying computer engineering. My language of choice is Python, although I also use C, C++, and Javascript regularly. I am working on becoming more proficient with PHP to prepare for this project.

I have been a Wikimedian for almost seven years. I am most active on English Wikipedia, where I am an administrator. I mainly do maintenance work there, reverting vandalism and cleaning up articles. I also help out with outreach; I've worked on the Wikipedia Education Program (hey, that's even me in the photo!), and I was one of the appeals featured during the 2011 fundraising drive. I also very much enjoy editing the English Wikisource, where I completed the initial proofreading of Sigmund Freud's The Interpretation of Dreams and am now working on proofreading the Pentagon Papers.

I enjoy programming in my free time. My current project is a Python parser to convert the wikimarkup of the Pentagon Papers to LaTeX. When it's at all possible, I make all code I write freely available on GitHub.

Participation
I will work hard to communicate well, whether it be with my mentor, other developers, or the community. I already make a habit of ensuring that I am very easy to contact. While I'm awake, I respond to emails almost immediately and talk page messages within the day. While I'm at my home computer, I am always logged on to IRC and can be easily reached at #wikipedia-en, #mediawiki, #wikisource, or by private message. In terms of my coding style, I commit frequently (no, really, just look at my GitHub commit log), and plan to continue this habit while I work on this project. I will keep a repository for this project on GitHub both for my own use and so that my progress will be easily trackable—this way you will not have to wait for me to submit a finished patch to see what I'm up to.

Past open source experience
As I mentioned in the "About you" section above, I've been contributing to the Wikimedia projects as an editor for almost seven years. I'm very familiar with the various communities, particularly on English Wikipedia. This project is one of my first forays into contributing code to an open source project. I've been working on familiarizing myself with the code base and beginning to contribute; I submitted my first patch at the beginning of April! I've also been communicating a lot with MarkTraceur, who has been very helpful in introducing me to the code, and an exceptional resource when I have questions.

Bugs
There are quite a few bug reports and other various discussions that are related to this project:
 * Dependency tree for Bug 15071
 * Make Collection extension to automatically create collections for existing books on Wikibooks/Wikisources
 * Wikibooks/Wikisource needs means to associate separate pages with books
 * Protect, watchlist or delete a whole book at once
 * Create a set of special pages for handling meta-organization of books
 * List, count and search all books
 * BookManager design (automatic translation)

Feedback
I have requested input on this project in several places:
 * Multilingual Wikisource Scriptorium (also linked from English Wikisource Scriptorium)
 * Thread:User talk:Qgil/Summer of Code proposal feedback
 * Comment on bug 15071
 * On wikitech-l