Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // not mine im just archiving it since i found it on canvas
- !function(){var t=window;if(t.__audioLinksAddon&&t.__audioLinksAddon.installed){console.warn("[Audio Links] You've already ran this script.");return}var e={},i={installed:!1,audio:null,currentId:null,currentTitle:null,currentUrl:null,panel:null,title:null,trackLabel:null,playButton:null,closeButton:null,seek:null,timeLabel:null,draggingSeek:!1,rafPending:!1,getUrlForRef:function(t){if(null==t)return null;var i=String(t).trim();return i?/^\d+$/.test(i)&&e.hasOwnProperty(i)?e[i]||null:/^(https?:\/\/|data:|blob:|\/)/i.test(i)?i:e[i]||null:null},parseAudioSpec:function(t){if("string"!=typeof t)return null;var e=t.trim();if(!e)return null;var i=e.match(/^audio:\[(.+?)\]\[(.*?)\]\s*$/i);if(i)return{ref:i[1].trim(),title:i[2].trim()};var n=e.match(/^audio:(.+)$/i);return n?{ref:n[1].trim(),title:""}:null},formatTime:function(t){if(!isFinite(t)||t<0)return"0:00";var e=Math.floor((t=Math.floor(t))/60),i=t%60;return e+":"+(i<10?"0"+i:i)},ensureAudio:function(){return this.audio||(this.audio=new Audio,this.audio.preload="auto",this.audio.addEventListener("play",this.syncUI.bind(this)),this.audio.addEventListener("pause",this.syncUI.bind(this)),this.audio.addEventListener("ended",this.syncUI.bind(this)),this.audio.addEventListener("loadedmetadata",this.syncUI.bind(this)),this.audio.addEventListener("timeupdate",this.syncUI.bind(this))),this.audio},buildPanel:function(){if(!this.panel){var t=document.createElement("div");t.id="audio_links_panel",t.style.cssText="position:fixed;left:50%;top:8px;transform:translateX(-50%);z-index:999999;min-width:min(720px, calc(100vw - 16px));max-width:calc(100vw - 16px);padding:0;border:1px solid #404040;border-radius:2px;background-color:#C3C3FF;color:#000;box-shadow:none;font:13px/1.3 Verdana, Arial, sans-serif;display:none;overflow:hidden";var e=document.createElement("div");e.style.cssText="padding:8px 10px;background-color:#E5E5FF;";var i=document.createElement("div");i.style.cssText="display:flex;align-items:center;gap:8px;flex-wrap:wrap;";var n=document.createElement("div");n.textContent="Audio player",n.style.cssText="font-weight:700;letter-spacing:0.02em;flex:1 1 auto;color:#000;",this.title=n;var a=document.createElement("div");a.textContent="No track loaded",a.style.cssText="font-size:12px;flex:0 1 auto;color:#000;",this.trackLabel=a;var r=document.createElement("button");r.type="button",r.textContent="Play",r.style.cssText=this.buttonStyle(),r.onclick=(function(){this.audio&&this.currentUrl&&(this.audio.paused?this.audio.play().catch(function(t){console.error("[Audio Links] Playback failed.",t)}):this.audio.pause(),this.syncUI())}).bind(this),this.playButton=r;var o=document.createElement("button");o.type="button",o.textContent="Close",o.style.cssText=this.closeButtonStyle(),o.onclick=(function(){this.hidePanel()}).bind(this),this.closeButton=o,i.appendChild(n),i.appendChild(a),i.appendChild(r),i.appendChild(o);var s=document.createElement("div");s.style.cssText="display:flex;align-items:center;gap:10px;margin-top:8px;";var d=document.createElement("input");d.type="range",d.min="0",d.max="1000",d.value="0",d.step="1",d.style.cssText="width:100%;flex:1 1 auto;accent-color:#B2B2FF;",d.addEventListener("pointerdown",(function(){this.draggingSeek=!0}).bind(this)),d.addEventListener("pointerup",(function(){this.draggingSeek=!1,this.seekAudioFromSlider()}).bind(this)),d.addEventListener("change",(function(){this.seekAudioFromSlider()}).bind(this)),d.addEventListener("input",(function(){this.draggingSeek&&this.updateTimeLabelFromSlider()}).bind(this)),this.seek=d;var l=document.createElement("div");l.textContent="0:00 / 0:00",l.style.cssText="min-width:86px;text-align:right;font-variant-numeric:tabular-nums;color:#000;",this.timeLabel=l,s.appendChild(d),s.appendChild(l),e.appendChild(i),e.appendChild(s),t.appendChild(e),document.body.appendChild(t),this.panel=t,this.syncUI()}},buttonStyle:function(){return"appearance:none;border:1px solid #404040;border-radius:2px;background-color:#B2B2FF;color:#000;padding:6px 10px;cursor:pointer;font:inherit"},closeButtonStyle:function(){return"appearance:none;border:1px solid #830000;border-radius:2px;background-color:red;color:#fff;padding:6px 10px;cursor:pointer;font:inherit"},showPanel:function(){this.buildPanel(),this.panel.style.display="",this.syncUI()},hidePanel:function(){this.panel&&(this.panel.style.display="none")},loadTrack:function(t){var e=this.getUrlForRef(t);if(!e)return console.warn("[Audio Links] No playable audio found for audio:"+t),!1;this.ensureAudio();try{this.audio.pause(),this.audio.currentTime=0}catch(i){}return this.currentId=t,this.currentTitle=this.currentTitle||"",this.currentUrl=e,this.audio.src=e,this.audio.load(),this.showPanel(),this.audio.play().catch(function(e){console.error("[Audio Links] Playback failed for audio:"+t,e)}),this.syncUI(),!0},seekAudioFromSlider:function(){if(this.audio&&isFinite(this.audio.duration)&&!(this.audio.duration<=0)){var t=parseFloat(this.seek.value)/1e3;try{this.audio.currentTime=this.audio.duration*t}catch(e){console.warn("[Audio Links] Seeking failed.",e)}this.syncUI()}},updateTimeLabelFromSlider:function(){if(this.audio&&isFinite(this.audio.duration)&&!(this.audio.duration<=0)){var t=parseFloat(this.seek.value)/1e3,e=this.audio.duration*t;this.timeLabel.textContent=this.formatTime(e)+" / "+this.formatTime(this.audio.duration)}},syncUI:function(){if(this.panel){var t=this.audio,e=!!(t&&this.currentUrl);if(this.trackLabel.textContent=e?this.currentTitle||"audio:"+this.currentId:"No track loaded",this.playButton.textContent=!t||t.paused||t.ended?"Play":"Pause",t&&isFinite(t.duration)&&t.duration>0){if(!this.draggingSeek){var i=Math.max(0,Math.min(1,t.currentTime/t.duration));this.seek.value=Math.round(1e3*i)}this.timeLabel.textContent=this.formatTime(t.currentTime)+" / "+this.formatTime(t.duration)}else this.draggingSeek||(this.seek.value=0),this.timeLabel.textContent="0:00 / 0:00"}},handleLinkClick:function(t){if(t&&t.url&&"string"==typeof t.url){var e=this.parseAudioSpec(t.url);if(e){var i=e.ref;i&&(this.currentTitle=e.title||"",this.loadTrack(i)&&(t.returnValue&&(t.returnValue[0]=!1),t.evt&&"function"==typeof t.evt.preventDefault&&t.evt.preventDefault(),t.evt&&"function"==typeof t.evt.stopImmediatePropagation?t.evt.stopImmediatePropagation():t.evt&&"function"==typeof t.evt.stopPropagation&&t.evt.stopPropagation()))}}},handleAnchorClick:function(e){var i=t.currentSelectedLink;if(i&&"string"==typeof i.url){var n=this.parseAudioSpec(i.url);if(n){var a=n.ref;a&&(e&&"function"==typeof e.preventDefault&&e.preventDefault(),e&&"function"==typeof e.stopImmediatePropagation?e.stopImmediatePropagation():e&&"function"==typeof e.stopPropagation&&e.stopPropagation(),this.currentTitle=n.title||"",this.loadTrack(a))}}}};function n(){return!!i.installed||!!t.w&&"function"==typeof t.w.on&&"function"==typeof Audio&&!!document.body&&(t.__audioLinksAddon=i,i.buildPanel(),t.w.on("linkClick",i.handleLinkClick.bind(i)),t.linkElm&&"function"==typeof t.linkElm.addEventListener&&t.linkElm.addEventListener("click",i.handleAnchorClick.bind(i),!0),window.addEventListener("resize",function(){i.syncUI()}),i.installed=!0,console.info("[Audio Links] Welcome to the Audio Links script. To get started, create an audio link starting with 'audio:' and your URL of choice."),console.info("[Audio Links] Check the console for errors if the playback fails."),!0)}if(!n())var a=0,r=t.setInterval(function(){a++,(n()||a>=100)&&(t.clearInterval(r),!(a>=100)||t.__audioLinksAddon&&t.__audioLinksAddon.installed||console.error("[Audio Links] Timed out waiting for the event system."))},100)}();
Advertisement
Add Comment
Please, Sign In to add comment