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.
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:
- Tracked
- Untracked
- Both Tracked and Untracked
Miscellaneous
The following Pull Requests fix various issues.
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?
Detailed Reports
If you're interested in knowing about my contributions in a slightly more elaborate manner check out my Bi-Weekly Reports.