Greasy Fork

Greasy Fork is available in English.

Bunpro: Example Sentence Audio

Adds Google Translate audio to all the sentences that do not yet have audio.

当前为 2018-12-06 提交的版本,查看 最新版本

// ==UserScript==
// @name         Bunpro: Example Sentence Audio
// @namespace    http://tampermonkey.net/
// @version      0.1.2
// @description  Adds Google Translate audio to all the sentences that do not yet have audio.
// @author       Kumirei
// @include      http://bunpro.jp*
// @include      https://bunpro.jp*
// @require      http://greasyfork.icu/scripts/5392-waitforkeyelements/code/WaitForKeyElements.js?version=115012
// @grant        none
// ==/UserScript==

(function() {
		// Need to remove the referrer; otherwise returns 404s
		var remRef = document.createElement('meta');
		remRef.name = 'referrer';
		remRef.content = 'no-referrer';
		document.querySelector('head').append(remRef);

		// The player element
		var first = "<li class=\"audio-holder\">" +
			        "    <audio controls controlslist=\"nodownload\">" +
			        "        <source src=\"https://translate.google.com/translate_tts?ie=UTF-8&client=tw-ob&q=";
		var last =  "            &tl=ja&total=1&idx=0?\" type=\"audio/mpeg\">" +
			        "    </audio>" +
		            "    <div class=\"audio-button-holder\">" +
					"        <div class=\"audio-reload\" id=\"audio_for_example_sentence_1324\">Reload</div>" +
					"        <div class=\"audio-speed-75\">Slow</div>" +
			        "        <div class=\"audio-speed-100\" style=\"display: none;\">Normal</div>" +
		            "    </div>" +
			        "</li>";

		// Detect context sentences
		waitForKeyElements('.japanese-example-sentence', function(e) {
				// Do nothing if there is already audio provided
				if (e[0].nextElementSibling.className != "audio-holder") {
						// Get sentence in plain text and add the player
						var sentence = parseSentence(e[0]);
						e.after(first + sentence + last);
				}
		});

		// Extract the sentence from the 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 url
										//sentence += elem.children[0].children[1].innerText;     // with kana in url
								}
								else {
										sentence += elem.innerText;
								}
						}
						else if (name == "RUBY") {
								sentence += elem.childNodes[0].data;       // with kanji in url
								//sentence += elem.children[1].innerText;     // with kana in url
						}
				});
				return sentence;
		}
})();