Bunpro: Copy Sentences

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

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

// ==UserScript==
// @name         Bunpro: Copy Sentences
// @namespace    http://tampermonkey.net/
// @version      0.2.4
// @description  Allows you to click Japanese sentences and their translations to copy them to clipboard.
// @author       Kumirei
// @include      *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) {
						//english example sentences
						else if (["english-example-sentence", "example-sentence-english"].includes(e.target.className)) copyText(e.target.innerText); //while studying
						else if (e.target.className == "example-sentence-english hide-english") copyText(e.target.innerText); //grammar page
						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]));

				});
		});

		//add buttons
		waitForKeyElements('#check-grammar', function(e) {
				if (!$('#buttonsBar').length) {
						$('#check-grammar').before('<div id="buttonsBar"><div class="flexWrapper"</div></div>');
						$('head').append('<style id="ButtonBarStyle">'+
										 '@media (max-width: 480px) {'+
										     '#buttonsBar .barButton {'+
										         'height: 30px;'+
										         'font-size: 12px;'+
										     '}'+
										 '}'+
										 '#buttonsBar {'+
										     'margin-top: 2.5px;'+
										 '}'+
										 '#buttonsBar .flexWrapper {'+
										     'height: 40px;'+
										     'display: flex;'+
										     'flex-wrap: wrap;'+
										     'margin: 0 -2.5px;'+
										 '}'+
										 '#buttonsBar .barButton {'+
										     'flex: 1;'+
										     'margin: 2.5px;'+
										 '}'+
										 '#buttonsBar .barButton input {'+
										     'background: rgba(25,34,49,0.8);'+
										     'height: 100% !important;'+
										     'color: white;'+
										     'border: 0;'+
										 '}'+
										 '#buttonsBar .barButton input:hover {'+
										     'color: rgb(103, 114, 124);'+
										 '}'+
										 '</style>');
				}
				$('#buttonsBar .flexWrapper').append('<div class="barButton"><input id="copyJP" type="button" value="Copy JP" onclick="copyText(parseSentence($(\'.study-question-japanese > span\')[0]));"></div>');
				$('#buttonsBar .flexWrapper').append('<div class="barButton"><input id="copyEN" type="button" value="Copy EN" onclick="copyText($(\'.study-question-english-hint > span\')[0].innerText);"></div>');
		});
})();

//Extracts the sentence from the sentence element
parseSentence = function(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
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或关注我们的公众号极客氢云获取最新地址