Warning: this is an htmlized version!
The original is here, and the conversion rules are here. |
// _ _ _ // __ _ _ _ __| (_) ___ (_)___ // / _` | | | |/ _` | |/ _ \ | / __| // | (_| | |_| | (_| | | (_) | | \__ \ // \__,_|\__,_|\__,_|_|\___/ _/ |___/ // |__/ // // JavaScript code for handling indexed audios // and for htmlizing text with audio timestamps // From: http://angg.twu.net/blogme3/html5-audio-mini.js.html // (find-blogme3 "html5-audio-mini.js") // See: http://angg.twu.net/ferramentas-para-ativistas.html // (find-TH "ferramentas-para-ativistas") // http://angg.twu.net/audios/ // (find-THfile "audios/") // (find-THLfile "audios/") // Author: Eduardo Ochs <eduardoochs@gmail.com> // Version: 2014mar21 // eltbyid = function (id) { return document.getElementById(id); } from_textarea = function (id) { return eltbyid(id).value; } from_pre = function (id) { return eltbyid(id).innerHTML; } to_textarea = function (id, txt) { eltbyid(id).innerHTML = txt; } to_pre = function (id, txt) { eltbyid(id).innerHTML = txt; } toseconds = function (t) { if (typeof(t) == "number") { return t; } var a = "0:00:00"; var b = a.substr(0, a.length - t.length) + t; var h = b.substr(0, 1); var mm = b.substr(2, 2); var ss = b.substr(5, 2); return h*3600+mm*60+ss*1; } function audios () { return document.getElementsByTagName("audio"); } function audio (n) { return audios()[n|0]; } function playat (n, t) { audio(n).currentTime = toseconds(t); audio(n).play(); } function naudios () { return audios().length; } function audiosdo (f) { for (var i=0; i < naudios(); i++) f(audio(i)); } function pauseall () { audiosdo(function (a) { a.pause(); }); } function pl (n, t) { pauseall(); playat(n, t); } time_re = /[0-9]?[0-9]:[0-9][0-9](:[0-9][0-9])?/g; function audio_seekbox (n, t) { var js = "pl("+n+",'"+t+"')"; return '<input size=8 value="'+t+'">(<a href="javascript:'+js+'">'+t+'</a>)'; } function audio_htmlize (n, str) { var f = function (t) { return audio_seekbox(n, t); } return str.replace(time_re, f); } function audio_addkeybindings_to_input (n, inp) { inp.addEventListener('keydown', function (e) { if (e.keyCode == 13) pl(n, e.target.value); if (e.keyCode == 32) { pauseall(); e.preventDefault(); } }); } function audio_addkeybindings (n, pre_id) { var c = document.getElementById(pre_id).children; for (var i in c) if (c[i].tagName == "INPUT") audio_addkeybindings_to_input(n, c[i]); } function audio_activate (n, pre_id) { to_pre(pre_id, audio_htmlize(n, from_pre(pre_id))); audio_addkeybindings(n, pre_id); } function audio_activate_from_textarea (n, textarea_id, pre_id) { to_pre(pre_id, audio_htmlize(n, from_textarea(textarea_id))); audio_addkeybindings(n, pre_id); } function activate_audio_links_a (pre_id) { audio_activate (0, pre_id); } function activate_audio_links_b (pre_id) { audio_activate (1, pre_id); } function activate_audio_links_c (pre_id) { audio_activate (2, pre_id); } // unused: location_t = function () { var A = window.location.href.match(/[?&]t=([^&]+)/); if (A) { return A[1]; } } // Typical uses: // if we have a textarea with id="input_a" and a pre with id="output_a", // audio_activate_from_textarea(0, "input_a", "output_a") // if we have a pre with id="pre_b", // audio_activate(0, "pre_b")