-
Notifications
You must be signed in to change notification settings - Fork 0
/
lyricer.min.js
1 lines (1 loc) · 2.31 KB
/
lyricer.min.js
1
!function(){var e=function(e){if(this.divID="lyricer",this.currentcss="lyricer-current-line",this.lineidPrefix="lyricer-line",this.showLines=8,this.clickable=!0,this.clickEventName="lyricerclick",e)for(var t in e)"undefined"!=typeof this[t]&&e.hasOwnProperty(t)&&(this[t]=e[t])};e.prototype.setLrc=function(e){this.tags={},this.lrc=[],this.rangeLrc=[];for(var i=/\[([a-z]+):(.*)\].*/,r=/(\[[0-9.:\[\]]*\])+(.*)/,n=/\[([0-9]+):([0-9.]+)\]/,s=e.split(/[\r\n]/),a=0;a<s.length;a++){var c=i.exec(s[a]);if(c&&c[0])this.tags[c[1]]=c[2];else{var l=r.exec(s[a]);if(l&&l[0])for(var o=l[1].replace(/\]\[/g,"],[").split(","),h=0;h<o.length;h++){var d=n.exec(o[h]);d&&d[0]&&this.lrc.push({starttime:60*parseInt(d[1],10)+parseFloat(d[2]),line:l[2]})}}}this.lrc.sort(function(e,t){return e.starttime-t.starttime});for(var a=0;a<this.showLines;a++)this.rangeLrc.push({starttime:-1,endtime:0,line:" "});for(var m=0,u="",a=0;a<this.lrc.length;a++)endtime=parseFloat(this.lrc[a].starttime),this.rangeLrc.push({starttime:m,endtime:endtime,line:u}),m=endtime,u=this.lrc[a].line;this.rangeLrc.push({starttime:m,endtime:999.99,line:u});for(var a=0;a<this.showLines;a++)this.rangeLrc.push({starttime:-1,endtime:0,line:" "});this.totalLines=this.rangeLrc.length,t(this),this.move(0)};var t=function(e){e.currentLine=0;var t=document.getElementById(e.divID);t.innerHTML="";var r=document.createElement("ul");t.appendChild(r);for(var n=0;n<e.totalLines;n++){var s=document.createElement("li");s.innerHTML=e.rangeLrc[n].line,s.innerHTML||(s.innerHTML=" "),s.setAttribute("id",e.lineidPrefix+n),e.clickable&&(s.onclick=i(e,n),s.style.cursor="pointer"),r.appendChild(s)}for(var n=e.showLines;n<e.totalLines;n++)document.getElementById(e.lineidPrefix+n).style.display="none"},i=function(e,t){return function(){var i={time:e.rangeLrc[t].starttime},r=new CustomEvent(e.clickEventName,{detail:i,bubbles:!0}),n=document.getElementById(e.lineidPrefix+t);n.dispatchEvent(r)}};e.prototype.move=function(e){for(var t=0;t<this.totalLines;t++)if(e>=this.rangeLrc[t].starttime&&e<this.rangeLrc[t].endtime)return this.currentLine=t,void r(this,this.currentLine)};var r=function(e,t){for(var i=t-e.showLines,r=t+e.showLines,n=0;n<e.totalLines;n++){var s=document.getElementById(e.lineidPrefix+n);s.style.display=n>=i&&r>=n?"block":"none",s.className=n==t?e.currentcss:""}};window.Lyricer=e}();