Wiki Education Dashboard

Google Summer of Code 2019

It seems like only yesterday when I got the email of being selected for Google Summer of Code 2019.

My project for Google Summer of Code 2019, with Wikimedia was to add Multi-Wiki support to WikiEduDashboard.

WikiEduDashboard is a learning tool based on editing the Wiki Articles. Instructors assign students, articles, and track their edits and grade them. In the process of editing, students learn.

It’s been nearly 3 months after that mail and this page is the culmination of all that delicious coding period, the finer details of which we will be going through shortly.

But before that if you want to try out the features I added, my changes are all live at Wiki Education Dashboard. Go check it out!

Multi-Wiki Support

The main agenda this Summer of '19 was to add multi-wiki support to WikiEduDashboard.

Before, we only tracked – a home Wiki – explicitly anyway. A home Wiki, is a default Wiki, that is a part of the Course. Any edits/revisions to this home Wiki is automatically tracked.

Now, a Wiki is an ambiguous term for many. In this context, a Wiki refers to anyone of these sites:

  • Wikipedia
  • Wikibooks
  • Wikidata
  • Wikimedia
  • Wikinews
  • Wikiquote
  • Wikisource
  • Wikiversity
  • Wikivoyage
  • Wiktionary

Almost all of these sites are multilingual – meaning, they support upto 346 languages. For example, there’s the English Wikpedia as there is a French Wikipedia.

So the first step towards adding multi-wiki support was to add the ability to let users choose, explicitly, the Wikis, they want to track.

The solution was to let the instructors and facilitators choose and restrict what Wikis they want to be tracked. This will help in reducing noise from other irrelevant edits which belong to Wikis that don't belong to a Course.

The Pull Request — #2922 added a new React Component — <WikiSelect>. It made use of the excellent React-Select package. <WikiSelect> is a React Component and it is a intuitive Wiki Selector. It has both single & multi mode so more than one Wiki could be tracked.

Once that was covered, we had to actually put it to use. This led to my second Pull Request — #2957

In this Pull Request, I added a join table between Course and Wiki and hence the name, CoursesWikis. Through this table we would track which Course has which wikis enabled, which will ofcourse be updated via the <WikiSelect> component from the earlier PR.

With all the barebone setup complete, it was time to actually test whether the functionality was working as intended. It had to work without breaking existing tests. It was achieved via this Pull Request — #3020, which added the rspec tests for the new functionality.

Multi-Wiki support in action
Multi-wiki support in action

Article Tracking

Nextly, continuing the trend of giving people more control of what they want to track, the next thing I worked on was to have it so that certain articles could be excluded from being tracked.

But why? – Because before, we just included all the articles that had been edited by the user and tracked those edits. But oftentimes, a user may have edited an article that was outside the purview of what the Course was intended for.

So basically we were tracking edits which were potentially useless and adds on to the noise.

We needed a feature wherein the instructor/facilitator can exclude certain articles from being tracked. I made use of the excellent React-Switch package to add a toggle which indicates the tracked status of an article.

The Pull Request — #3102 set up the the foundation to build on.

This included creating a join table between Article and Course, named aptly, ArticlesCourses. This join table holds all the information concerning to the tracked status of all articles belonging to a Course.

As can be seen from the comments on the PR, it was a major overhaul of how things worked internally in WikiEduDashboard. So it was a major refactor and a breaking change so lot of time was spent on getting this right and making sure all the existing tests passed.

Once it was done, it was time to put the UI to work using the backend setup from the previous pull request. Pull Request — #3175 is where I’ve used React Switch package for the neat UI for changing the tracked status of an article.

Next, these two Pull Requests — #3195 & #3204 added a way to filter the articles based on the following tracked status values:

  1. Tracked
  2. Untracked
  3. Both Tracked and Untracked
Excluding articles with filter in action
Excluding articles with filter in action

Miscellaneous

The following Pull Requests fix various issues.

  1. #3051 – Adds wikidata namespace support.
  2. #3074 – Normalizes the labels of revision titles.
  3. #3143 – Fixes issue #3024.
  4. #3147 – Adds specific project names to non-Wikipedia projects.
  5. #3185 – Fixes the alignment of Article Finder UI.

TL;DR

Checking out the pull request links posted above will let you know about what my project was all about for the Google Summer of Code 2019.

Still TL;DR?

Check out all my contributions!

Detailed Reports

If you're interested in knowing about my contributions in a slightly more elaborate manner check out my Bi-Weekly Reports.