您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Adds tooltips for table header columns on Duolingo tables and make them sticky.
- // ==UserScript==
- // @name Duolingo Table Header Tooltips
- // @namespace http://tampermonkey.net/
- // @version 0.1
- // @description Adds tooltips for table header columns on Duolingo tables and make them sticky.
- // @author BErnd14
- // @match https://duolingodata.com/*
- // @grant GM_addStyle
- // @license MIT
- // ==/UserScript==
- (function () {
- 'use strict';
- const tooltips = {
- 'Learning': 'Link to course structure (CEFR levels in red)',
- 'from': "'from' links to a technical JSON file",
- 'U': 'Units - Links to an image of the Path structure',
- 'Lr': 'Learners - Number of learners (in millions), links to DuoRadios when green',
- 'Ls': 'Lessons - Purple = Adventures, links to these',
- 'S': 'Stories - Links to official or unofficial stories',
- 'W': 'Words - Word list (if available)',
- 'R': 'Release Date - Format: Year.Month, links to course versions',
- 'D': 'Different Lessons - Ranking, links to alternative versions'
- };
- function addTooltips() {
- const headers = document.querySelectorAll('#DuolingoData thead th');
- if (!headers.length) return;
- headers.forEach(th => {
- const key = th.textContent.trim();
- if (tooltips[key]) {
- if (th.title !== tooltips[key]) {
- th.title = tooltips[key];
- }
- }
- });
- }
- const observer = new MutationObserver(mutations => {
- for (const mutation of mutations) {
- if (mutation.type === 'childList' || mutation.type === 'subtree' || mutation.type === 'characterData') {
- addTooltips();
- break;
- }
- }
- });
- observer.observe(document.body, {
- childList: true,
- subtree: true,
- characterData: true
- });
- setTimeout(addTooltips, 1000);
- GM_addStyle(`
- #DuolingoData thead th {
- position: sticky !important;
- top: 0;
- background: white;
- z-index: 1000;
- }
- `);
- })();