Browser userscript that adds features to duchinese.net (Mandarin Chinese learning content)
For the impatient who just want to see what it does — example screenshot.
Note: This is a third-party extension and not supported by the official DuChinese site: https://duchinese.net/
Unofficial extensions like this can cause unexpected behavior. If you have any issues using duchinese.net, please make sure you've completely disabled this userscript and restarted your browser before contacting their support.
This extension adds a number of features to DuChinese, a site that provides learning content for people studying Mandarin Chinese.
Note: The extension provides an alternative interface for viewing/interacting with the lesson content. It does not replace any existing elements. So, for example, unfortunately its theming capabilities only apply to that area. It can't, for example, force the entire site to use a dark theme.
You can configure font size and weight. The extension will provide a number of options for font families as well.
It's possible configure the color scheme the lesson content/interface is provided in.
There are two main types of annotation available: text based (for example, to provide the pinyin for a character) and color-based (for example, to show the tone of the syllable).
Annotations (tone colors included, but configurable independently) can have their visibility based on:
- Whether it's the first time the word has been seen in a lesson.
- HSK level.
- Whether the containing sentence is hovered.
Characters can be annotated with pinyin, IPA, zhuyin (bopomofo), HSK level, tone number, traditional or simplified hanzi (to aid in learning the alternative set of characters).
The annotation position can also be set to appear before, after, above or below the word or even oriented vertically (useful for zhuyin).
Characters can be colored based on the tone of the syllable.
You can enable displaying a mark below characters where a tone change occurs or is expected to occur. For example, multiple tone 3 syllables in a row.
The extension adds a normal audio element, this allows adjusting the volume or seeking through the content directly. It is also possible to download the audio using this. The extension also adds the ability to set a default volume level and playback speed.
As with the normal site interface, it is possible to click within the lesson text to seek to that part of the audio and while audio is playing the current syllable/word/sentence will be tracked.
The extension adds a collapsible vocabulary section which will show a list of words in the lesson, organized by HSK level. If the word doesn't appear in HSK, it will appear as "Other" or "Name". There are also some statistics available such as average HSK level. It is possible to click on a word to hear it spoken (from the location it appeared in the lesson).
You can copy the text of the lesson to clipboard.
- ⚙️ — Toggle configuration section visibility.
- 👀 — Toggle pinyin section visibility.
- 📜 — Toggle translation section visibility.
- 💬 — Copy lesson text to clipboard.
- 📚 — Toggle vocabulary section visibility.
First, you will need to be using a browser that supports userscripts. This includes most desktop browsers but mobile browsers generally don't include these features. (I believe Kiwi Browser on Android may be the only one.) Additionally, most browsers allow userscripts via an extension, which means you'd need to install the userscript extension first and then use that to install userscripts.
Greasyfork is a repository for userscripts. The main page includes helpful information for how to get and install userscripts for various browsers (Chrome, Firefox, etc): https://greasyfork.org/
Once your browser is set up correctly, please visit this link for where this specific userscript is published: https://greasyfork.org/en/scripts/457745-dc-helper
- When previewing vocabulary, you may need to wait until the audio finishes loading before clicking a word will play.
- The interface is pretty ugly. I'm not a UI designer.
- The code is pretty ugly. I'm not a JavaScript developer. It's thrown together, but seems to work.
Please create a GitHub issue describing your problem with as much detail as possible.
The best way is to create an issue, as described above.
I wouldn't go that far, but DuChinese is aware of it, had access to the source and didn't appear to have a problem with what I'm doing. The most controversial features are allowing downloading the audio and copying the lesson text to the clipboard: they didn't ask me to prevent people from doing this or remove that option.
Please use/modify this extension in good faith so they don't have a reason to try to prevent this kind of thing from existing. Also, to avoid being a jerk.
None of the code I wrote does or will do anything like that.
You will need a recent version of Node and NPM available. Describing how to get to that point is beyond the scope of this document.
On a Unix-type system, you can just use the Makefile
-
Running
make
(ormake build-dev
) should generate the development, unminimized version of the userscript indist/duchinese-helper.userscript.js
-
Running
make build-prod
should create the minimized version of the userscript indist/duchinese-helper.min.userscript.js
If you want, you can run npm
yourself. npm run compile
or npm run compile-prod
(for minimized) will generate dist/bundle.js
. This will need to be manually combined with the userscript header in assets/userscript_header.txt