// ==UserScript== // @name Duolingo Tools for Study Notes // @namespace http://tampermonkey.net/ // @version 0.111 // @description A tiny tool for Duolingo exercises better. Note: This script is used for studying and taking notes for languages such as Japanese etc., not for cheating and doing the exercises automatically. // @author Lepturus // @match *://*.duolingo.cn/g* // @match *://*.duolingo.com/g* // @match *://*.duolingo.com/l* // @match *://*.duolingo.cn/l* // @match *://*.duolingo.com/skill* // @match *://*.duolingo.cn/skill* // @icon https://d35aaqx5ub95lt.cloudfront.net/images/duolingo-touch-icon2.png // @grant none // @license MIT // @downloadURL https://update.greasyfork.icu/scripts/469751/Duolingo%20Tools%20for%20Study%20Notes.user.js // @updateURL https://update.greasyfork.icu/scripts/469751/Duolingo%20Tools%20for%20Study%20Notes.meta.js // ==/UserScript== (function () { 'use strict'; function copy(e, isHTML = true) { let obj = document.createElement('input'); document.body.appendChild(obj); obj.value = isHTML ? e.innerText : e; obj.select(); document.execCommand('copy', false); obj.remove(); } function Duolingo() { let kws = document.querySelectorAll('div[dir="ltr"]'); for (let i = 0; i < kws.length; i++) { if (!/guidebook/.test(document.URL) && i>0){ break; // The practice mode will recognize two and remove the blank areas. } let txt=""; if (kws[i]) { let cont = kws[i].parentNode; let Kont = document.createElement("div"); let goGoogle = document.createElement("span"); Kont.appendChild(goGoogle); if (kws[i].querySelector('ruby div')){ // fix conflict with 片假名终结者 https://greasyfork.org/zh-CN/scripts/33268 kws[i].querySelectorAll('ruby rb div').forEach(function(tp){ txt += tp.innerText; }) } else{ txt = kws[i].innerText; } let goUrl = `https://www.google.com/search?q=${txt}%20site%3Aduolingo.com&ie=utf-8` let goTranslate = `https://translate.google.com/?hl=en&sl=auto&tl=en&text=${txt}` goGoogle.innerHTML = `Google Translation `; if (!cont.textContent.match("Google")) { console.log("sdgfsg") if (/guidebook/.test(document.URL)) { Kont.style.gridColumn = "2"; Kont.style.gridRow = "3"; cont.appendChild(document.createElement("br")); } cont.appendChild(Kont); } let cpy = document.getElementById("copyText"+i); cpy.onclick = function () { copy(txt,false); cpy.innerText = "Copied"; window.setTimeout(function () { cpy.innerText = "Copy it" }, 1500); } } } } if (/duolingo/.test(document.URL)) { setInterval(Duolingo, 1500); } })();