User:Aashish.mittal/GSoC Application

Identity
Name: Aashish Mittal Email: ashishmittal [DOT] mail [AT] gmail.com Project title: Put a whole Wikisource/Wikibook "book" on your watchlist

Contact/working info
Timezone: GMT +5.5 (India) Typical working hours: 10am - 10pm (flexible work time) IRC or IM networks/handle(s): aashishmittal

Project summary
While exploring the project list stating the various projects available for this year’s GSoC term, I came across many fascinating ideas, all focused towards adding some great functionalities towards Wikimedia’s core. One of them here is ‘Create a way to have “books” for wikisource/wikibooks’. This idea has been a wish of the users and developers of Wikimedia since a long time and after discussing and interacting with developers interested in this idea, we have been able to get a good understanding of what has been achieved till now and what needs to be implemented this summer.

The basic gist of this project is that users of Wikimedia projects (Wikibooks, Wikisource, etc.) should be provided with a way to organize and use multiple pages which are related together, as Books and give them the facilities to operate all these pages as a single unit. There are extensions (ex. BookManager, Collections, etc) which attempt to achieve some of these functionalities and the aim of this project is to improve/extend these extensions to add a more capabilities to them. I have created a space for discussing the project goals and implementation details: https://meta.wikimedia.org/wiki/Books.

In the past few weeks, I have interacted with the project mentor (Mr. Raylton) regarding this project and have taken his advice and help for getting a clear picture on how to implement this as a complete project. Under his guidance, we have assembled a list of features that we plan to implement as a part of this project which are listed under ‘deliverables’. Given an opportunity to implement this project, I am sure it would be a great addition to the existing extensions and would prove useful to lot of Wikimedians and book lovers.

Deliverables
After receiving feedbacks and discussing with the developers, I have thought upon an initial list of deliverables which is listed below. The deliverables are as follows:

Required deliverables

 * Create a book
 * Export book metadata (export the book details containing all page links to a file which can be saved by user, similar to MetaBooks)
 * Export entire book to HTML/Pdf/etc
 * Table of contents for a book
 * Read a book (creation of a Navbar)
 * Recent changes for each book
 * Create chapters
 * Arrange order of pages in a book
 * Protect/watchlist/move/delete all pages of a book
 * Search in a book

If time permits

 * Automatic Bookshelves, where the books of a wiki could be organized according to their metadata.
 * Create page navigation toolbar and more controls, similar to Google Books, iBooks, etc.

Of the ‘required deliverables’ some of them are explained in brief below:


 * 1) Create a book: This refers to creating a book with certain number of book pages. This can be implemented by using a suffix/prefix (ex. ‘Book/’) as implemented in BookManager.
 * 2) Read a book (include a Navbar): As described by Mr. Raylton, we need to maintain a linear order of page accesses in comparison to Random accesses (such as in Wikipedia) to allow reading of books by the users. This would also include creation of a navigation bar (similar to what is present in BookManager) to provide user with links to next/previous pages in the book, list of chapters of the book and the metadata of the book. This would enable the user to navigate and read the books created efficiently.
 * 3) Recent changes for each book: Maintain a list of recent changes to a book made by its author to allow the readers of that book be updated with any new additions/changes.
 * 4) Arrange order of pages in a book: Provide the book user with some kind of an interface (Special page) which he can use to arrange the order of chapters in a book. For this we need to maintain an entry of order in the database (possibly Categorylinks table) and update the order on change (ex. Using jQuery sortable).
 * 5) Protect/watchlist/move/delete all pages of a book: A functionality to provide an option to perform an operation on all/selected pages of the book at once. The action can be to protect/watch/move/delete etc. The user can be provided with a special page to select specific pages of the book (similar to Gmail) and perform an action on them. This can be implemented by getting names of all the pages present in a book and repeatedly performing action on each of them.
 * 6) Export entire book to HTML/PDF: Provide ability to export the book to pdf/html format as implemented in Collections and BookManager extensions.
 * 7) Search in a Book: Search for a particular content/page in a book and return all matching elements.