Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // ==UserScript==
- // @name Archive.org comfort audiobook player
- // @namespace archive.org
- // @version 0.0.2.1
- // @author AHOHNMYC
- // @match https://archive.org/embed/*
- // @match https://archive.org/details/*
- // @grant none
- // @noframes
- // ==/UserScript==
- /* Добавляет кнопку для перехода в Embedded-mode, в который вживлены:
- * * Пробел для Паузы/Прололжения
- * * Поддержка медиа-кнопок (работают только когда вкладка активна)
- * * Ползунок для остановки через определённое количество времени (например, для того чтобы засыпать под книгу :з)
- */
- let defaultStopValue = 60*30;
- if (/^\/embed/.test(location.pathname)) {
- initStopController();
- } else {
- addEmbedButton();
- }
- function addEmbedButton() {
- let newButton = document.querySelector('.action-buttons').appendChild(document.createElement('div'));
- newButton.classList.add('topinblock');
- newButton = newButton.appendChild(document.createElement('a'));
- newButton.classList.add('button');
- newButton.dataOriginalTitle = 'Embed';
- newButton.textContent = 'Embed';
- newButton.href = '/embed' + location.pathname.match(/^\/details(\/[^\/]+)/)[1] + '?playlist=true';
- }
- function initStopController() {
- document.addEventListener('keydown', ({key:k})=>{
- if (k=='MediaPlayPause' || k==' ') document.querySelector('.jwplay button').click();
- if (k=='MediaTrackPrevious') document.querySelector('.jwprev button').click();
- if (k=='MediaTrackNext') document.querySelector('.jwnext button').click();
- });
- function addEl(el, newEl) { return el.appendChild(document.createElement(newEl)); }
- let mainEl = addEl(document.body, 'div');
- let button = addEl(mainEl, 'button');
- addEl(mainEl, 'br');
- let timer = addEl(mainEl, 'input');
- let timerC = {
- state: false,
- start: ()=>{
- t = setInterval(()=>{
- timer.value--;
- timerC.updateTablo();
- if (timer.valueAsNumber) return;
- let el = document.querySelector('.jwplay');
- if ( el && el.classList.contains('jwtoggle') ) el.querySelector('button').click();
- timerC.toggle();
- }, 1000);
- },
- stop: ()=>{ clearInterval(t); },
- toggle: ()=>{
- timerC[(timerC.state?'stop':'start')]();
- timerC.state = !timerC.state;
- timerC.updateTablo();
- },
- updateTablo: ()=>{
- let m = Math.trunc(timer.value/60),
- s = timer.value%60;
- button.textContent = (timerC.state?'Остановка через ':'') + (m<10?'0':'') + m + ':' + (s<10?'0':'') + s;
- }
- };
- mainEl.style = 'position: fixed; top:0; left:0';
- timer.type = 'range';
- timer.min = 0;
- timer.max = 60*90;
- timer.value = defaultStopValue;
- timer.style.width = '900px';
- timer.style.display = 'none';
- mainEl.addEventListener('mouseover', ()=>{timer.style.display = '';});
- mainEl.addEventListener('mouseout', ()=>{timer.style.display = 'none';});
- ['change', 'mousemove'].forEach(trigger=>{ timer.addEventListener(trigger, timerC.updateTablo); });
- button.addEventListener('click', timerC.toggle);
- timerC.updateTablo();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement