==Profile Information
Name: **Sahaj Khandelwal**
Email: **ksahajk21@gmail.com**
IRC nickname on Freenode: **Sahajsk**
WebGithub Profile: [[ https://github.com/sahajsk21 | GitHub ]],
LinkedIn profile: [[ https://www.linkedin.com/in/sahaj-khandelwal-sk2107/ | LinkedIn ]]
Gerrit profile: [[ https://gerrit.wikimedia.org/r/q/owner:ksahajk21%2540gmail.com | Gerrit ]]
User page: [[ https://www.mediawiki.org/wiki/User:Sahajsk%60 | MediaWiki ]]
Location: **Indore**, **Madhya** **Pradesh**, **India**
Typical working hours: **5 AM to 8 PM UTC +5:30**
==Synopsis
The task aims to remove the use of jQuery UI from PageForms extension. This library wouldill be primarily replaced by jQuery and standard JavasScript functions. As the development of jQuery UI seems to have ceased, all of the MediaWiki tends to replace this library. This replacement will make the PageForms extension more universal and standardized.
==Brief Overview
Following use cases of jQuery UI in PageForms extension were explored: -
# jQuery UI Autocomplete and jQuery UI Datepicker
# jQuery UI Widget (used in FancyTree library)
Following use cases of jQuery UI in PageForms extension were explored:- # jQuery UI Sortable (used in grid library)
These will be dealt with and replaced as explained later.
All the libraries and external plugins used as specifically open source and freely available. They need not be elaborated here to avoid clutter in the objective of the task. Thus, links to these have been provided for further reference.
**jQuery UI Autocomplete and jQuery UI Datepicker**
- jQuery UI Autocomplete is used for autocompletion within #forminput, "text with autocomplete" and "textarea with autocomplete".
- The #forminput issue can be resolved by using well-maintained Select2 JS library or OOUI's autocompletion widget whichever seems to work efficiently and effectively.
# jQuery UI Autocomplete and jQuery UI Datepicker- The "text with autocomplete" and "textarea with autocomplete" input types can be turned into aliases for the "Combobox" and "Tokens" input types respectively.
- Other libraries, such as Chosen and Selectize.js, can also be used.
- jQuery UI Datepicker and DateTimepicker can be replaced by "DateInputWidget" of the OOUI library. The OOUI plugin has already been added, but it needs enhancements.
**jQuery UI Widget**
- The tree input in PageForms extension uses FancyTree JS library. This can be replaced by another intelligent and efficient solution.
- The most suitable replacement can be jsTree.
**jQuery UI Sortable**
# jQuery UI Widget (used in FancyTree library)- jsGrid library is used for spreadsheet representation. Since the development has been ceased and soon will turn obsolete, it tends to be replaced.
# jQuery UI Sortable (used in jsGrid library)
- On researching the candidates such as jExcel, ag-Grid and Tabulator, jExcel seems to be the right candidate.
**Links**:[[ https://select2.org/| Select2]], [[ https://www.mediawiki.org/wiki/OOUI | OOUI]], [[ https://www.jstree.com/|jsTree]], [[https://bossanova.uk/jexcel/v3/|jExcel]]
==Mentor(s)
As mentioned in the project details, the mentor is @Yaron_Koren
**Have you contacted your mentors already?**
**Yes**, I have already contacted the mentor.
===Timeline and Deliverables
The project has been divided into three subsections, mentioned above for working in three phases of GSoC. A detailed description of work and deliverables week by week has been added in the timeline. The goals and evaluations are mentioned in order to complete the project within the time period of GSoC. Enough time has been allotted for trying and testing the changes to avoid bugs in the final build.
|**Period**|**Week**|**Task**
| April 27| May 4 to MayJune 17 ||**Community bonding period**
| |Week 1 (April 27May 4 to May 3) |11)| Won't be available much for the first half of the week due to examinations.
| |Week 2 (May 412 to May 109) |Explore the usage of jQuery UI library in the extension.
| |Week 3 (April 11May 20 to May 1731) |Look for intelligent solutions for each block to remove jQuery UI wherever it is being used. Learn more about libraries such as OOUI and jsTree.
| May 18| June 1 to June 19ly 3 ||**Coding Period (Phase 1)**
| |Week 1 (May 18June 1 to May 24June 8)) |Start working on the first part (autocomplete and DateTime inputs) of the project for the first phase as described above. Begin working in the form inputs section and replace the "text with autocomplete" and "textarea with autocomplete" input types with standard input types such as Combobox
| |Week 2 (May 25June 9 to May 31June 16) |Replace jQuery UI autocomplete widget with libraries like Select2, Chosen or Selectize.js
| |Week 3 (June 117 to June 7) 24)|Start working on the DateTime input widget and replace the present input with a better alternative.
| |Week 4 (June 825 to June 1428) |This week will be mostly devoted to try and test the changes and work on tasks which are left over in the first phase
| |Week 5 (June 1529 to June 19ly 3) | Phase 1 evaluation
| June 20ly 4 to July 1731 ||**Coding Period (Phase 2)**
| |Week 1 (June 20ly 4 to June 26ly 11) |Begin working on replacing Fancytree library. Mostly explore the use cases in the PageForm extension
| |Week 2 (June 27ly 12 to July 319) |Replace corresponding inputs wherever necessary with plugins such as jsTree or other alternatives. Start looking into the usage of jsGrid.
| |Week 3 (July 420 to July 1226) |Try and test the changes done in phase 2 and correct potential errors.
| |Week 4 (July 1327 to July 1731) |Phase 2 evaluation
| July 18| August 1 to August 1631||**Coding Period (Final Phase)**
| |Week 1 (July 18August 1 to July 24August 8) |Replace jsGrid functionality with more familiar jExcel, Tabulator or any well-maintained library
| |Week 2 (July 25August 9 to July 31August 16) |Following two weeks will be more concerned with wrapping up and clearing logs of any incomplete task
| |Week 3 (August 1 to August 7) |This week will be kept for buffer. All the changes made in during the program will be tried, tested and finally merged.
| |Week 4 (August 824 to August 1631) |Final evaluation
| August 1731 to August 24September 7||**Mentors submit final student evaluations**
| August 25| September 8||**Final results of Google Summer of Code 2020 announced**
===Participation
- I will maintain a separate branch for making the changes. It will be merged once the changes have been tested and verified.
- I will be online on IRC in my working hours to contact the developers for help and suggestions.
- I will use Phabricator for clearing queries regarding the bugs and tasks.
- I will be available through email (ksahajk21@gmail.com).
===About Me
**Education (completed or in progress)**
I am a sophomore student pursuing my bachelors in Electrical Engineering at the Indian Institute of Technology Roorkee. Having completed my schooling from Emerald Heights International School, Indore, I started learning web development and data analytics. I have taken up several courses and projects regarding the same.
**How did you hear about this program?**
The primary sources were my friends, colleagues and seniors in my college. I learnt more through the Google Summer of Code website and youtube videos of past participants.
**Will you have any other time commitments, such as school work, another job, planned vacation, etc., during the duration of the program?**
For the time being, I only wish to pursue this project at Wikimedia Foundation under Google Summer of Code program.
**We advise all candidates eligible for Google Summer of Code and Outreachy to apply for both programs. Are you planning to apply to both programs and, if so, with what organization (s)?
**Having missed the deadlines for Outreachy, I can apply only through Google Summer of Code.
**What does making this project happen mean to you?**
Searching about any relevant topic on Google, the first link mostly directs to a Wikipedia page regarding that topic. The amount of information it contains and their credibility is insane. The trust it has among people is remarkable. Contributing to such an organization with such a huge user base and with such noble cause is a service to the community in itself.
From my future perspective, it would be a great platform to showcase my skills and open doors to new opportunities.
===Past Experience
I took up a project last summer with a startup named [[ https://analysed.in/ | Analysed]]. It is a virtual recruitment platform to reduce the hassle in the process of recruitment. I developed several algorithms for filtering out candidates who apply to an organization based on their skills and submission of tasks. I learnt to program extensively in languages such as Python, PHP and Javascript. I also worked on the design and aesthetics of the website.
I have also taken up several MOOCs to learn skills such as PHP, MySQL and Javascript.
I have contributed to MediaWiki in the following ways:-
Completed the following tasks:-
- (T242973)Special:CargoQuery autocompletion appearance should be standardized
- (T244730) Special:ListFiles shows usernames with underscores
Working on this task:-
- (T247407)Field date does not handle ancient dates correctly
Having worked in multiple domains of MediaWiki, I have knowledge of how each component interacts with each other. In this way, I can ensure that nothing is affected in other MediaWiki due to changes made in PageForms extension.
===Other Info
Gerrit profile: [[ https://gerrit.wikimedia.org/r/q/owner:ksahajk21%2540gmail.com | Gerrit ]]
User page: [[ https://www.mediawiki.org/wiki/User:Sahajsk%60 | MediaWiki oogle docs: [[ https://docs.google.com/document/d/1ZzGJXD-0SFoF1iFwmhiPNo0Pn4nH3wpYVRfIIyJCCSE/edit?usp=sharing | Proposal]]