===Profile Information===
**Name :** Yashdeep Thorat
**Email :** yashdeep97@gmail.com
**Github Profile :** https://github.com/yashdeep97
**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
===Synopsis===
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. jsGrid 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 ext.pf.select2 .combobox.js and ext.pf.select2.tokens.js .
===Mockups
{F15826173}
{F15826204}
===Timeline
| Time Period | Task |
|--|--|--|
|Apr 23 - May 13 | **Community 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 - May 31| **Create 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 1 - June 10 | **Get 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 15|**Phase I Evaluations** |
| June 16 - June 22 | **Implement Pagination:** for large data sets and adjust for any delays.|
| June 23 - June 30 | **Add Support for adding new pages:** Implement PHP logic to add new pages using the same interface.|
| July 1 - July 8 | **Buffer 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 13|**Phase II Evaluations** |
| July 14 - July 23 | **Add support for tokens and combobox:** Also integrate it with the special page. |
| July 24 - July 31 | **Functionality to rename pages:** First adjust for any delays then go on to implement this functionality. |
| Aug 1 - Aug 5 | **Buffer time:** Fix any issues left and make sure the documentation for code written is thorough. |
|Aug 6 - Aug 14|**Final Evaluations and submission of Project summary** |
===Participation /*To be updated*/
Describe how you plan to communicate progress and ask for help, where you plan to publish your source code, etc
== =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](https://ckeditor.com/ckeditor-4/) 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](https://arcwebsite.herokuapp.com/home/index.php), [GitHub repo](https://github.com/arc-bphc/ARC-website).
**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](https://github.com/arc-bphc/sims-gui).
**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](https://github.com/shortstheory/bomb-squad-server).
**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](https://github.com/crux-bphc/fest-manager).
==== 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](https://gerrit.wikimedia.org/r/#/c/410237/) 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](https://gerrit.wikimedia.org/r/#/c/418734/) Upgraded FancyBox javascript library to fancyBox3 that is used to create the upload window for files in Page Forms.
T184348 - [Patch](https://gerrit.wikimedia.org/r/#/c/409309/) 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?** No.
**Applied for Google Summer of Code in the past?** No.
**Applying to any other organizations this year?** No.