Milkshake/jQuery.IME extensions for Firefox and Chrome

jQuery.IME extensions for Firefox and Chrome

 * Public URL: http://www.mediawiki.org/wiki/User:Prageck/GSoC_2013_Application
 * Bugzilla report: https://bugzilla.wikimedia.org/show_bug.cgi?id=46647
 * Announcement: http://lists.wikimedia.org/pipermail/wikitech-l/2013-April/068896.html

Name and contact information
Name: Praveen Singh Email: prageck@gmail.com IRC or IM networks/handle(s): Prageck

Location: India

Timezone: UTC+5:30 (IST - India) Typical working hours: 11 am to 6 pm, 10 pm to 1 am (IST) (flexible)

Synopsis
jQuery Input Method Editor is a collection of more than 150 input methods across several languages. It is the jQuery version of the input method tool, Narayam, which is used across several Wikimedia projects. Currently jQuery.IME is provided from the Wikimedia servers.

This project mainly aims at: Having the jQuery.IME installed as a plugin in the browser itself, users would be able to use it on any website.
 * Porting jQuery.IME to Firefox and Chrome extensions
 * Providing on demand loading of input methods for different languages rather than injecting all 150+ input methods to a web page.
 * Working out a solution to update the extension from the upstream project with minimal manual effort

Required deliverables

 * Google Chrome extension
 * Port the jQuery.IME code to Chrome extension in accordance with Chrome extension architecture and workflows


 * Mozilla Firefox extension
 * Port the jQuery.IME code to Firefox extension in accordance with Firefox extension architecture and workflows


 * Implement on demand loading of input methods for different languages
 * Implement a mechanism to update the extensions from the upstream project with minimal manual effort
 * Include user preferences/options that would get persisted in the browser
 * Getting the extensions reviewed and published on Chrome Web Store and Firefox Add-ons repository
 * Writing unit tests for the added functionality
 * Full Documentation

If time permits

 * Port jQuery.IME to other major browsers (Internet Explorer, Safari, Opera etc).
 * Overall improvements in UI to make the extension more user friendly.

Project Schedule

 * 1st - 3rd week − Community bonding period
 * Study jQuery.IME code in detail and get familiar with the overall coding style and structure.
 * Study Google Chrome extension architecture and workflow in detail
 * Study Firefox extension architecture and workflow in detail
 * Lay down UI mock-ups and project structure and discuss them with the mentor and the community.
 * Fix certain open issues to gain a deeper understanding of the code.


 * 3rd - 4th week − Implement first working iteration for Google Chrome
 * Port jQuery.IME to Google Chrome extension according to the discussed mock-ups


 * 4th - 7th week − Extending the above made plugin with the following features:
 * Implement on demand loading of input methods
 * Implement update mechanism to synchronize the extension with the upstream project
 * Implement persistent user preferences/settings
 * Perform unit testing using QUnit


 * 7th - 9th week − Port jQuery.IME to Firefox extension and replicate all functionality
 * Port jQuery.IME to Firefox extension
 * Implement update mechanism to synchronize the extension with the upstream project
 * Implement persistent user preferences/settings
 * Perform unit testing using QUnit


 * 9th - 15th week − Code review and documentation
 * Code review
 * Testing
 * Bug fixes
 * Complete documentation
 * Architecture overview
 * Developer manual


 * September 16: Suggested pencils down date
 * Leaving a buffer period of one week for any delay in the above schedule


 * September 23: Firm pencils down date

About me
I am a student of Master's program at Jaypee Institute of Information Technology (India), Department of Computer Science. I love working on web technologies and have been doing web development for the last 2 years. I have good understanding of javascript, jQuery, CSS and PHP. This project really interests me as I feel that these extensions would prove to be a really helpful tool for the user by providing him/her with the Input Methods on all websites. I chose to work on this project as I have had a prior experience in developing for both the platforms, and my skill set suits the project.

Participation
During my work hours, I am always logged on to IRC and can be easily reached at #mediawiki, #wikimedia-dev and #mediawiki-i18n.

I would discuss my progress using regular mails to the mentor. I will communicate with the community over the mailing list (Wikitech-I) for any feedback, suggestions and queries.

I might encounter some situations when I will be waiting for a response from the mentor or the community. In such situations: All the code will be hosted on Github, so that anyone can easily track my progress and give feedback.
 * If mentor's review/response is absolutely necessary and is blocking any further progress, then I will move on to documentation and unit testing until I get the required response.
 * Otherwise, I will start working for the next module/functionality in the project schedule. Once I get the required response I will continue working from where I left and will update the project schedule accordingly.

Amenities: I understand there have been power and internet issues with students from India in the past. I have a stable internet connection and 24-hour power backup, so power and internet issues are taken care of.

Submitted patches
I discussed my project with the community through the Wikitech-l mailing list. Project discussions can be found here, here, here and here.
 * Bug 40464: Placeholder attribute of search box is not set until load − Patch
 * Bug 47342: Autocomment formatter section link should be wider than just the one arrow character − Patch
 * Issue #143: IME button location not updated on zoom events − Pull request

I collaborated on a Google Chrome extension and a Firefox extension earlier. I made a wordpress extension as my college project.

I have been a regular contributor to the Open Source Developers Club of my university. I co-organized several Open Source meet ups in my university including OSSCamp 10.11, and Firefox 4 Launch Meetup. I have been attending a few local community meetups about open source including DrupalCamp. All my code is available on github.

Updates on the project
Current progress of the project:
 * Prototype Chrome extension implemented
 * On demand injection of scripts implemented (Input method for a language is injected on the page only when the user selects that particular language)

Source code and installation instructions are available at https://github.com/pravee-n/prototype.jquery.ime.