Page MenuHomePhabricator

GSoC 2018 Proposal: Add a spreadsheet interface for modifying multiple pages to the Page Forms extension
Closed, ResolvedPublic


Profile Information

Name : Yashdeep Thorat
Email :
Github Profile :
University : Birla Institute Of Technology and Science
IRC Nick : yashdeep97
Location : Pune, India
Time Zone : UTC +05:30
Typical Working Hours : [11 am to 5 pm], [11 pm to 1 am] UTC +5:30


The Page Forms extension for MediaWiki is currently used to create and edit pages using an interface made up of forms that simplify the process. The Forms can be used to add and edit template calls in the pages. This project aims to add a special page that provides a spreadsheet-like interface ( rendered using jsGrid ) that will allow administrators of a wiki to edit multiple pages at once.
Mentors: @Yaron_Koren, @Bkybala9, @Nischayn22

Use Case

Tim manages a big wiki which contains thousands of pages created using various templates. He and other contributors create new pages every day using templates. Soon it becomes difficult and tedious for him to update the existing pages. Hence, by using the spreadsheet interface provided by Page Forms he can easily edit multiple pages through a single, easy-to-use interface. He will also be able to add new pages using it.

Features and Implementation

1. Allows users to edit multiple template calls simultaneously using a spreadsheet-like interface

Create a special page that will allow an administrator to edit all the calls to a particular template with text entries. The spreadsheet interface will contain rows corresponding to various template calls and the columns will correspond to the template parameters.
The challenge will be to get all the template calls and display them in a spreadsheet similar to the implementation of the "display=spreadsheet" option for the "for template" tag.

2. Get ideal input type for each parameter

Add support to get ideal input type for each template parameter and display it accordingly in the spreadsheet. Do the same for tokens and combobox.

3. Add pagination option for large data sets

If there are a large number of template calls for a particular template, then the spreadsheet displaying them can be paginated. This can be done by using the different page methods and options available in the jsGrid library. The jsGrid library provides the PageLoadingStrategy to load data to the grid by pages.

4. Implement option to add new page using the same interface

A new page which uses a particular template can be created by using the "insertItem" method to add a new row to the jsGrid. Moreover, the backend can be handled using the functions similar to those in PF_FormEdit.php.

5. Provide support for renaming pages

Explore page moving mechanism used in MediaWiki either by using functions from Special:MovePage or API:Move.

6. Add support for combo-box and tokens with autocompletion

Implement custom fields for combobox and tokens by extending the jsGrid.Field object similar to the implementation of the date field in PF_jsGrid.js.
Implement autocompletion based inputs : combobox and tokens using the select2.js library after studying their implementation in .combobox.js and .


ProposalWireframe 1.png (707×1 px, 99 KB)

ProposalWireframe 2.png (707×1 px, 149 KB)


Time PeriodTask
Apr 23 - May 13Community Bonding Period : Get more familiar with the code base by fixing other issues in Page Forms. Create a blog to document my experience. Create phabricator tasks. Become more active on IRC and phabricator, communicate with mentors, community members and other participants and get to know more about their projects.
May 14 - June 3Create Special Page for Spreadsheet Interface to edit template calls: Write code to set respective grid values and implement save and edit procedures. Also, add support for data validation and integrity constraints.
June 4 - June 10Get Ideal input type for parameters: Communicate with mentors and write code to get ideal input type, thus add support for checkbox and date
June 11 - June 15Phase I Evaluations
June 16 - June 22Implement Pagination: for large data sets and adjust for any delays.
June 23 - June 30Add Support for adding new pages: Implement PHP logic to add new pages using the same interface.
July 1 - July 8Buffer Time: Test rigorously for bugs and fix them immediately. If time permits start working on Feature #6 and look into select2.js library.
July 9 - July 13Phase II Evaluations
July 14 - July 23Add support for tokens and combobox: Also integrate it with the special page.
July 24 - July 31Functionality to rename pages: First adjust for any delays then go on to implement this functionality.
Aug 1 - Aug 5Buffer time: Fix any issues left and make sure the documentation for code written is thorough.
Aug 6 - Aug 14Final Evaluations and submission of Project summary

About Me

Educational Qualifications:

I am an undergraduate student, pursuing a dual degree in Bachelor of Engineering in Computer Science and Master of Science in Physics from Birla Institute of Technology and Science - Hyderabad Campus. I am currently in my third year. I am comfortable with and have done courses in Object Oriented Programming, Data structures and Algorithms, Database Management Systems.
I have been an avid Linux and git user for the last 3 years and am passionate about Web development.

Past Experience

Automation and Robotics club website: I worked on making a website for the automation and robotics club of my college using PHP and MySQL. I used PHP to generate the webpages dynamically and for session management. Bootstrap was used to make the website responsive. I also added the CKEditor which allows users to add their own articles and format them, which are then stored in an HTML format in the database. I also integrated Google and Facebook sign-in using javascript. I deployed the website on heroku - Link to site, GitHub repo.

S.I.M.S.: I worked on making the Smart Inventory Management System to manage the club inventory comprising of various electronic parts. The application is made using PyQt5, Python 3 and SQLite. The code is completely object-oriented. I worked on interfacing different modules of the GUI with the database. The application runs on a Raspberry Pi and can communicate with remote Arduinos using the python socket library over wifi. - GitHub repo.

Other projects I have worked on:
Bomb Squad Server: The application was made for a competition conducted during ATMOS (National Technical Festival of Bits Pilani Hyderabad). The application was made completely using Express framework for node.js and javascript. I also worked on the Socket.IO package that enables real-time bidirectional event-based communication between different scripts running on the server. GitHub repo.

Fest Manager for ATMOS This is an Express application used to deploy websites for the college fests.
I worked on integrating google maps and adding geolocation using js and made other small contributions to it. - GitHub repo.

Why Wikimedia?

I was introduced to the Wikimedia movement through Wikipedia a long time ago and I was inspired by its message of sharing knowledge with everyone and freedom of speech. I was introduced to the MediaWiki code base through a hackathon which took place in my college. I believe contributing to this project would be a great opportunity for me to be a part of this amazing community and write code that will possibly be used by millions of people. I had an incredible time working on the micro tasks and received a lot of guidance and feedback on my work from the mentors, and it was a great learning experience.

Contributions to MediaWiki

T187110 - Patch One of the microtask for this project. Enables #forminput parser function to take a comma-separated list of form names as a parameter and show the same in a dropdown.
T184251 - Patch Upgraded FancyBox javascript library to fancyBox3 that is used to create the upload window for files in Page Forms.
T184348 - Patch Upgraded the Rate Yo! library to the latest version.

I have learnt a great deal from these microtasks which also includes coding conventions and the workflow for open source projects.

GSoC Information

Any other commitments during the GSoC period?
I will be having my end-semester exams from 1st May to 12th May during the community bonding period. Hence, my availability will be limited during this time. However, I do not have any other commitments during the coding period and I will dedicate at least 40 hours per week.
Applied for Google Summer of Code in the past? No.
Applying to any other organizations this year? No.

Event Timeline

The complete list of commits for this task can be found at: Final Report