Bunpro: Copy Sentences

Allows you to click Japanese sentences and their translations to copy them to clipboard.

目前為 2018-07-02 提交的版本,檢視 最新版本

// ==UserScript==
// @name         Bunpro: Copy Sentences
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  Allows you to click Japanese sentences and their translations to copy them to clipboard.
// @author       Kumirei
// @include      https://bunpro.jp/*
// @require      https://gf.qytechs.cn/scripts/5392-waitforkeyelements/code/WaitForKeyElements.js?version=115012
// @grant        none
// ==/UserScript==

(function() {
		waitForKeyElements('body', function(e) {
				e.on('click', function(e) {
						//reviews
						if ($(e.target).closest('div')[0] == null) copyText($('div[class^="study-question-english"] > span')[0].innerText); //english in review is a special case
						else if ($(e.target.closest('div'))[0].className == "study-question-japanese") copyText(parseSentence($(e.target.closest('div'))[0])); //japanese in reviews
						//english example sentences
						else if (["english-example-sentence", "example-sentence-english"].includes(e.target.className)) copyText(e.target.innerText);
						else if (["english-example-sentence", "example-sentence-english"].includes(e.target.parentNode.className)) copyText(e.target.parentNode.innerText);
						//japanese example sentences
						else if (e.target.className == "japanese-example-sentence") copyText(parseSentence(e.target));
						else if ($(e.target).closest('li')[0] != undefined && $(e.target).closest('li')[0].className == "japanese-example-sentence") copyText(parseSentence($(e.target).closest('li')[0]));

				});
		});

		//Extracts the sentence from the sentence element
		function parseSentence(sentenceElem) {
				var sentence = "";
				sentenceElem.childNodes.forEach(function(elem) {
						// find the text in each kind of element and append it to the sentence string
						var name = elem.nodeName;
						if (name == "#text") {
								sentence += elem.data;
						}
						else if (name == "STRONG" || name == "SPAN") {
								if (name == "STRONG" && elem.children.length) {
										sentence += elem.children[0].childNodes[0].data;       // with kanji in string
										//sentence += elem.children[0].children[1].innerText;     // with kana in string
								}
								else {
										sentence += elem.innerText;
								}
						}
						else if (name == "RUBY") {
								sentence += elem.childNodes[0].data;       // with kanji in string
								//sentence += elem.children[1].innerText;     // with kana in string
						}
				});
				return sentence;
		}

		//copies the text
		var copyText = function (text) {
				var textArea = document.createElement("textarea");
				textArea.style.position = 'fixed';
				textArea.style.top = 0;
				textArea.style.left = 0;
				textArea.style.width = '2em';
				textArea.style.height = '2em';
				textArea.style.padding = 0;
				textArea.style.border = 'none';
				textArea.style.outline = 'none';
				textArea.style.boxShadow = 'none';
				textArea.style.background = 'transparent';
				textArea.value = text;
				document.body.appendChild(textArea);
				textArea.focus();
				textArea.select();
				try {
						var successful = document.execCommand('copy');
						var msg = successful ? 'successful' : 'unsuccessful';
						console.log('Copying text command was ' + msg);
						console.log('Copied Sentence:', text);
				} catch (err) {
						console.log('Oops, unable to copy');
				}

				document.body.removeChild(textArea);
		}
		})();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址