From 45dba0654aa9c8ba210b8d5b80cdc388c408beef Mon Sep 17 00:00:00 2001 From: 135e2 <135e2@135e2.tk> Date: Thu, 2 Jun 2022 00:28:08 +0800 Subject: chore: load css & js locally... ... for better loading speed since jsDelivr sucks --- source/js/shikwasa.chapter.min.js | 1 + source/js/shikwasa.min.js | 1 + 2 files changed, 2 insertions(+) create mode 100644 source/js/shikwasa.chapter.min.js create mode 100644 source/js/shikwasa.min.js (limited to 'source/js') diff --git a/source/js/shikwasa.chapter.min.js b/source/js/shikwasa.chapter.min.js new file mode 100644 index 0000000..070e180 --- /dev/null +++ b/source/js/shikwasa.chapter.min.js @@ -0,0 +1 @@ +(function(a,b){"object"==typeof exports&&"undefined"!=typeof module?module.exports=b():"function"==typeof define&&define.amd?define(b):(a="undefined"==typeof globalThis?a||self:globalThis,a.Chapter=b())})(this,function(){"use strict";var a=Math.round;function b(a,b){var c=Object.keys(a);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(a);b&&(d=d.filter(function(b){return Object.getOwnPropertyDescriptor(a,b).enumerable})),c.push.apply(c,d)}return c}function c(a){for(var c,e=1;ee?"0"+e:e,f=10>f?"0"+f:f,0===d)?"".concat(e,":").concat(f):(d=10>d?"0"+d:d,"".concat(d,":").concat(e,":").concat(f))}function f(a,b){var c=2{b.classList.add(a)})),a.attrs&&Object.keys(a.attrs).forEach(c=>{b.setAttribute(c,a.attrs[c])}),a.innerHTML&&(b.innerHTML=a.innerHTML),b}function h(a,b){return"function"==typeof a.toggleAttribute?void a.toggleAttribute(b):void(a.hasAttribute(b)?a.removeAttribute(b):a.setAttribute(b,""))}function i(a,b,c,d,e,f){var g=(a-b)/1e3/c;f.scrollTop=d+e*g,1>g&&window.requestAnimationFrame(a=>{i(a,b,c,d,e,f)})}var j;class k{constructor(a){this.ctx=a,this.list=[],this.initEvents(),this.current=null,this._currentSrc=null,this._chapterPatched=!1}init(){this.patchPlayer(),this.ui=new l(this.ctx),this.ctx.on("chapterchange",a=>{var b=a&&a.newVal?a.newVal.id:null;this.ui.setChapterActive(b)})}initEvents(){this.ctx.on("audioupdate",a=>{this._chapterPatched||(this.init(),this._chapterPatched=!0),this.updateList(a)}),this.ctx.on("audioparse",a=>{this.updateList(a)}),this.ctx.on("timeupdate",this.onTimeupdate.bind(this))}clearList(){this.ui.chapterList.innerHTML="",this.list=[],this.current=null}updateList(a){this.list.length&&this.clearList(),a.chapters.length&&(this.list=this.handleChapters(a),this.ui.renderChapterList(this.ctx.chapters),this.clickChapterHandler()),this.ui.handleChapterPanel(this.ctx,a)}handleChapters(a){if(a.chapters&&a.chapters.length)return a.chapters.map((a,b)=>(/^ch\d+$/.test(a.id)||(a.id="ch".concat(b)),a))}patchPlayer(){var a=this;Object.defineProperties(this.ctx,{chapters:{get(){return a.list}},currentChapter:{get(){return a.current}}}),this.ctx.events.playerEvents.push("chapterchange"),this.ctx.updateChapter=function(a){this.setCurrent(this.list[a]),this.ctx.seek(this.current.startTime),this.ctx.play()}.bind(a)}setCurrent(a){var b=this.current?c({},this.current):null;this.current=a,this.ctx.events.trigger("chapterchange",{newVal:this.current,oldVal:b})}onTimeupdate(a){if(this._currentSrc!==a.currentTarget.src)return void(this._currentSrc=a.currentTarget.src);var b=this.searchDirection(this.ctx.currentTime,this.current);if(b){var c,d=this.list.indexOf(this.current);c=-1===d?this.list:1===b?this.list.slice(d):this.list.slice(0,d+1);var e=c.find(a=>!this.searchDirection(this.ctx.currentTime,a));this.setCurrent(e)}}searchDirection(b,c){return b=a(b),!c||"object"!=typeof c||c.endTime<=b?1:c.startTime>b?-1:0}clickChapterHandler(){Array.from(this.ui.chapterList.children).forEach(a=>{a.addEventListener("click",()=>{if(this.ctx.seekable){var b=a.getAttribute("data-id").match(/\d+$/);b&&this.ctx.updateChapter(+b[0])}})})}destroy(){this.ui.destroy()}}class l{constructor(a,b){this.initEl(a),this.initEvents(a,b),this.renderChapterList(a.chapters),a.ui.el.append(this.el),this.activeChapterEl=null}initEl(a){this.el=g({className:"shk-chapter",innerHTML:"\n
\n
    \n
    \n \n"});var b={title:"view chapters","aria-label":"view chapters"};a.seekable||(b.disabled=""),this.chapterBtn=g({tag:"button",className:["shk-btn","shk-btn_chapter"],attrs:b,innerHTML:"\n \n \n \n "}),a.ui.seekControls.push(this.chapterBtn),a.ui.extraControls.append(this.chapterBtn),this.closeBtn=this.el.querySelector(".shk-btn_close"),this.chapterList=this.el.querySelector(".shk-chapter_list"),this.overflowLayer=this.el.querySelector(".shk-chapter_main")}initEvents(a){this.chapterBtn.addEventListener("click",()=>{h(a.el,"data-show-chapter")}),a.ui.hideExtraControl(this.chapterBtn),this.closeBtn.addEventListener("click",()=>{a.el.removeAttribute("data-show-chapter")}),j=()=>{if(this.activeChapterEl){var a=this.activeChapterEl.querySelector(".shk-chapter_title_wrap"),b=this.activeChapterEl.querySelector(".shk-chapter_title");f.call(this,a,b)}},window.addEventListener("resize",j)}handleChapterPanel(a,b){b.chapters.length?a.el.setAttribute("data-has-chapter",""):a.el.removeAttribute("data-has-chapter"),b.chapters.length&&a.seekable||a.el.removeAttribute("data-show-chapter")}renderChapterList(a){a.length&&a.forEach(a=>{var b=this.renderChapterItem(a);this.chapterList.append(b)})}renderChapterItem(a){var b=e(a.startTime),c="\n \n ");return g({tag:"li",className:"shk-chapter_item",innerHTML:c,attrs:{"data-id":a.id}})}setChapterActive(a){this.chapterList.querySelectorAll(".shk-chapter_item").forEach(b=>{if(b.getAttribute("data-id")===a){b.setAttribute("data-active",""),this.scrollIntoView(b),this.activeChapterEl=b;var c=b.querySelector(".shk-chapter_title"),d=b.querySelector(".shk-chapter_title_wrap");f(d,c)}else b.removeAttribute("data-active")})}scrollIntoView(a){if("hidden"!==this.el.style.visibility){var b=window.getComputedStyle(this.overflowLayer).marginTop,c=window.getComputedStyle(this.chapterList).marginTop,d=parseInt(b)+parseInt(c),e=0e?"0"+e:e,f=10>f?"0"+f:f,0===d)?"".concat(e,":").concat(f):(d=10>d?"0"+d:d,"".concat(d,":").concat(e,":").concat(f))}function f(a){var b=parseFloat(a).toFixed(2);return"0"===b.slice(-1)?b.slice(0,-1):b}function g(a,b){var c=2{b[a]=b[a]||"boolean"==typeof b[a]?b[a]:r[a]}),"function"==typeof b.container&&(b.container=b.container());var c=s.fixedOptions.find(a=>a===b.fixed.type);return c||(b.fixed.type=r.fixed.type),Array.isArray(b.speedOptions)||(b.speedOptions=[b.speedOptions]),-1===b.speedOptions.indexOf(1)&&b.speedOptions.push(1),b.speedOptions=b.speedOptions.map(a=>parseFloat(a)).filter(a=>!isNaN(a)),1c-a),b}function i(){var a=0{c[a]=c[a]||b[a]||s.audioOptions[a]}),c}function j(){return k.apply(this,arguments)}function k(){return k=d(function*(){var a=0{b.read(a,{onSuccess:c,onError:d})})}function m(){var a,b,c,d=0"CHAP"===a.id).map(a=>!!(a.data&&a.data.subFrames&&a.data.subFrames.TIT2)&&{id:a.data.id,startTime:a.data.startTime/1e3,endTime:a.data.endTime/1e3,title:a.data.subFrames.TIT2.data}).sort((c,a)=>c.id-a.id)),{title:e,artist:f,cover:a,duration:c,chapters:b}}function n(a){a.tag=a.tag||"div";var b=document.createElement(a.tag);return a.className&&("string"==typeof a.className?b.classList.add(a.className):a.className.forEach(a=>{b.classList.add(a)})),a.attrs&&Object.keys(a.attrs).forEach(c=>{b.setAttribute(c,a.attrs[c])}),a.innerHTML&&(b.innerHTML=a.innerHTML),b}function o(a,b){return"function"==typeof a.toggleAttribute?void a.toggleAttribute(b):void(a.hasAttribute(b)?a.removeAttribute(b):a.setAttribute(b,""))}function p(a,b){function c(a){return!!(a&&a!==document&&"HTML"!==a.nodeName&&"BODY"!==a.nodeName&&"classList"in a&&"contains"in a.classList)}function d(a){a.classList.contains("focus-visible")||(a.classList.add("focus-visible"),a.setAttribute("data-focus-visible-added",""))}function f(a){a.hasAttribute("data-focus-visible-added")&&(a.classList.remove("focus-visible"),a.removeAttribute("data-focus-visible-added"))}function g(){n=!1}function h(a){!c(a.target)||n&&d(a.target)}function i(a){!c(a.target)||(a.target.classList.contains("focus-visible")||a.target.hasAttribute("data-focus-visible-added"))&&(o=!0,window.clearTimeout(p),p=window.setTimeout(function(){o=!1},100),f(a.target))}function j(){"hidden"===document.visibilityState&&(o&&(n=!0),k())}function k(){a.addEventListener("mousemove",m),a.addEventListener("mousedown",m),a.addEventListener("mouseup",m),a.addEventListener("pointermove",m),a.addEventListener("pointerdown",m),a.addEventListener("pointerup",m),a.addEventListener("touchmove",m,!!b&&{passive:!0}),a.addEventListener("touchstart",m,!!b&&{passive:!0}),a.addEventListener("touchend",m,!!b&&{passive:!0})}function l(c){a.removeEventListener("mousemove",m),a.removeEventListener("mousedown",m),a.removeEventListener("mouseup",m),a.removeEventListener("pointermove",c),a.removeEventListener("pointerdown",m),a.removeEventListener("pointerup",m),a.removeEventListener("touchmove",m,!!b&&{passive:!0}),a.removeEventListener("touchstart",m,!!b&&{passive:!0}),a.removeEventListener("touchend",m,!!b&&{passive:!0})}function m(){n=!1,l()}var n=!0,o=!1,p=null;a.addEventListener("keydown",function(b){b.metaKey||b.altKey||b.ctrlKey||(c(document.activeElement)&&a.contains(document.activeElement)&&d(document.activeElement),n=!0)},!0),a.addEventListener("mousedown",g,!0),a.addEventListener("pointerdown",g,!0),a.addEventListener("touchstart",g,!b||{passive:!0,capture:!0}),a.addEventListener("visibilitychange",j,!0),k(),a.addEventListener("focus",h,!0),a.addEventListener("blur",i,!0),a.classList.add("js-focus-visible")}var q,r={container:()=>document.querySelector("body"),parser:null,fixed:{type:"auto",position:"bottom"},download:!1,themeColor:"#0d6efd",theme:"auto",autoPlay:!1,muted:!1,preload:"metadata",speedOptions:[.5,.75,1,1.25,1.5],audio:null},s={fixedOptions:["auto","static","fixed"],audioOptions:{title:"Unknown Title",artist:"Unknown Artist",duration:NaN,cover:null,chapters:[],src:null,album:"",live:!1}},t=null,u=!0;class v{constructor(a){this.mounted=!1,this.icons=n({className:"shk-icons",innerHTML:"\n \n \n \n \n\n \n \n \n\n \n \n \n\n \n \n \n\n \n \n \n\n \n \n \n\n \n \n \n\n \n \n \n\n \n \n \n\n \n \n \n \n"}),this.initEl(),this.initOptions(a)}initEl(){var a=this;return d(function*(){a.el=n({className:["shk","shikwasa"],attrs:{"data-name":"shikwasa"},innerHTML:"\n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n \n \n \n \n \n
    \n
    \n \n
    \n
    \n
    \n \n loading\n \n \n \n \n \n \n \n \n \n \n 00:0000:00\n \n
    live
    \n
    \n
    \n
    \n
    \n"}),a.playBtn=a.el.querySelector(".shk-btn_toggle"),a.fwdBtn=a.el.querySelector(".shk-btn_forward"),a.bwdBtn=a.el.querySelector(".shk-btn_backward"),a.speedBtn=a.el.querySelector(".shk-btn_speed"),a.moreBtn=a.el.querySelector(".shk-btn_more"),a.muteBtn=a.el.querySelector(".shk-btn_volume"),a.extraControls=a.el.querySelector(".shk-controls_extra"),a.texts=a.el.querySelector(".shk-text"),a.artist=a.el.querySelector(".shk-artist"),a.artistWrap=a.el.querySelector(".shk-artist_wrap"),a.titleWrap=a.el.querySelector(".shk-title_wrap"),a.titleInner=a.el.querySelector(".shk-title_inner"),a.title=a.el.querySelector(".shk-title"),a.currentTime=a.el.querySelector(".shk-time_now"),a.duration=a.el.querySelector(".shk-time_duration"),a.bar=a.el.querySelector(".shk-bar"),a.barWrap=a.el.querySelector(".shk-bar_wrap"),a.audioPlayed=a.el.querySelector(".shk-bar_played"),a.audioLoaded=a.el.querySelector(".shk-bar_loaded"),a.handle=a.el.querySelector(".shk-bar-handle"),a.cover=a.el.querySelector(".shk-cover"),a.seekControls=[a.fwdBtn,a.bwdBtn,a.handle]})()}initOptions(a){this.el.style="--color-primary: ".concat(a.themeColor),this.el.setAttribute("data-theme",a.theme),a.download&&a.audio&&a.audio.src&&(this.downloadBtn=n({tag:"a",className:["shk-btn","shk-btn_download"],attrs:{title:"download","aria-label":"download",href:"string"==typeof a.download?a.download:a.audio.src,download:"",target:"_blank",rel:"noopener noreferrer"},innerHTML:"\n \n \n \n "}),this.extraControls.append(this.downloadBtn)),this.el.setAttribute("data-fixed-type",a.fixed.type),"static"!==a.fixed.type&&"top"===a.fixed.position&&this.el.setAttribute("data-fixed-pos",a.fixed.position);var b=a.autoPlay?"playing":"paused";this.el.setAttribute("data-play",b),a.muted&&this.el.setAttribute("data-mute","")}initEvents(a){this.moreBtn.addEventListener("click",()=>{o(this.el,"data-extra")}),Array.from(this.extraControls.children).forEach(a=>{this.hideExtraControl(a)}),p(this.el,a),q=()=>{u&&(u=!1,setTimeout(()=>u=!0,100),g.call(this,this.titleWrap,this.title))},window.addEventListener("resize",q)}setAudioInfo(){var a=0{setTimeout(()=>{this.el.removeAttribute("data-extra")},800)})}mount(a,b){a.innerHTML="",a.append(this.el),this.icons&&a.append(this.icons),this.mounted=!0,this.initEvents(b),g(this.titleWrap,this.title)}destroy(){window.removeEventListener("resize",q),t&&URL.revokeObjectURL(t)}}class w{constructor(){this.audioEvents=["abort","canplay","canplaythrough","complete","durationchange","emptied","ended","error","loadeddata","loadedmetadata","loadstart","pause","play","playing","progress","ratechange","seeked","seeking","stalled","suspend","timeupdate","volumechange","waiting"],this.playerEvents=["audioupdate","audioparse"],this.events={}}on(a,b){this.type(a)&&"function"==typeof b&&(!this.events[a]&&(this.events[a]=[]),this.events[a].push(b))}trigger(a){var b=1a(b))}type(a){return-1===this.playerEvents.indexOf(a)?-1===this.audioEvents.indexOf(a)?(console.error("Shikwasa: unknown event name: ".concat(a)),null):"audio":"player"}}var x=[],y=[],z="undefined"!=typeof window&&/mobile/i.test(window.navigator.userAgent),A=z?"touchstart":"mousedown",B=z?"touchmove":"mousemove",C=z?"touchend":"mouseup",D=!1;if("undefined"!=typeof window)try{var E=Object.defineProperty({},"passive",{get:function(){return D=!0,!1}});window.addEventListener("testPassvie",null,E),window.removeEventListener("testPassvie",null,E)}catch(a){D=!1}var F=D&&z;class G{constructor(a){this.id=x.length,x.push(this),this.comps={},this._audio={},this._hasMediaSession=!1,this._initSeek=0,this.live=!1,this._canplay=!1,this._dragging=!1,this.events=new w,this.options=h(a),this.renderComponents(),this.initUI(this.options),this.initAudio(),this.ui.mount(this.options.container,D)}get duration(){return this.audio&&this.audio.duration?this.audio.duration:this._audio.duration}get seekable(){return!this.live&&!!this.duration}set seekable(a){a?this.ui.seekControls.forEach(a=>{a.removeAttribute("disabled")}):this.ui.seekControls.forEach(a=>{a.setAttribute("disabled","")})}get currentTime(){return this.audio?this.audio.currentTime:void 0}get playbackRate(){return this.audio?this.audio.playbackRate:void 0}set playbackRate(a){this.audio&&(this.audio.playbackRate=a,this.audio.defaultPlaybackRate=a)}get muted(){return this.audio?this.audio.muted:void 0}set muted(a){this.audio&&(this.audio.muted=a,this.audio.defaultMuted=a)}initUI(){this.ui=new v(this.options),this.el=this.ui.el,this.initControlEvents(),this.initBarEvents()}initControlEvents(){this.ui.playBtn.addEventListener("click",()=>{this.toggle()}),this.ui.muteBtn.addEventListener("click",()=>{this.muted=!this.muted,o(this.el,"data-mute")}),this.ui.fwdBtn.addEventListener("click",()=>{this.seekBySpan()}),this.ui.bwdBtn.addEventListener("click",()=>{this.seekBySpan({forward:!1})}),this.ui.speedBtn.addEventListener("click",()=>{var a=this.options.speedOptions.indexOf(this.playbackRate),b=this.options.speedOptions;this.playbackRate=a+1>=b.length?b[0]:b[a+1],this.ui.setSpeed(this.playbackRate)})}initBarEvents(){var a=0,b=a=>{this.ui.setProgress(null,this.ui.getPercentByPos(a),this.duration)},c=d=>{d.preventDefault(),document.removeEventListener(B,b),document.removeEventListener(C,c),a=this.ui.getPercentByPos(d)*this.duration,this.seek(a),this._dragging=!1,setTimeout(()=>this.el.removeAttribute("data-seeking"),50)};this.ui.barWrap.addEventListener(A,a=>{this.seekable&&(a.preventDefault(),this.el.setAttribute("data-seeking",""),this._dragging=!0,document.addEventListener(B,b,!!F&&{passive:!0}),document.addEventListener(C,c))}),this.ui.handle.addEventListener("keydown",a=>{if(this.seekable){var b=a.key.replace("Arrow",""),c=["PageDown","PageUp"],d=["Home","End"],e=-1!==["Left","Down"].indexOf(b),f=-1!==["Right","Up"].indexOf(b),g=b===c[0],h=b===c[1],i=b===d[0],j=b===d[1];if(e||f||-1!==c.indexOf(b)||-1!==d.indexOf(b)){if(i)return void this.seek(0);if(j)return void this.seek(this.duration);var k=(h||g?.1:.01)*(f||h?1:-1),l=this._canplay?this.currentTime:this._initSeek,m=k*this.duration+l;this.seek(m)}}})}initAudio(){this.options.audio.src&&(this.audio=new Audio,this.initAudioEvents(),this.events.audioEvents.forEach(a=>{this.audio.addEventListener(a,b=>{this.events.trigger(a,b)})}),this.audio.preload=this.options.preload,this.muted=this.options.muted,this.update(this.options.audio))}initAudioEvents(){this.on("play",()=>{this.ui.setPlaying(),x.forEach(a=>{a.id!==this.id&&a.audio&&!a.audio.paused&&a.pause()})}),this.on("pause",()=>{this.ui.setPaused()}),this.on("ended",()=>{this.ui.setPaused(),this.seek(0)}),this.on("waiting",()=>{this.el.setAttribute("data-loading","")}),this.on("durationchange",()=>{this.duration!==1/0&&this.live&&(this.live=!1),this.duration&&1!==this.duration&&this.duration!==1/0&&(this.seekable=!0,this.ui.setTime("duration",this.duration))}),this.on("canplay",()=>{this._canplay||(this._canplay=!0,this._initSeek&&(this.seek(this._initSeek),this._initSeek=0)),this.duration!==1/0||this.live||(this.live=!0,this.ui.setLive(this.live))}),this.on("canplaythrough",()=>{this.el.removeAttribute("data-loading")}),this.on("progress",()=>{if(this.audio.buffered.length){var a=this.audio.buffered.length?this.audio.buffered.end(this.audio.buffered.length-1)/this.duration:0;this.ui.setBar("loaded",a)}}),this.on("timeupdate",()=>{this._dragging||this.ui.setProgress(this.audio.currentTime,null,this.duration)}),this.on("abort",()=>{this.ui.setPaused()}),this.on("audioupdate",a=>{this.seekable=a.duration&&a.duration!==1/0,this.updateMetadata(a)}),this.on("audioparse",a=>{this.seekable=a.duration&&a.duration!==1/0,this.updateMetadata(a)})}initMediaSession(){var a=this;if("mediaSession"in navigator){this._hasMediaSession=!0,this.setMediaMetadata(this._audio);var b={play:this.play.bind(a),pause:this.pause.bind(a),seekforward:this.seekBySpan.bind(a),seekbackward:()=>this.seekBySpan({forward:!1}),seekto:this.seek.bind(a)};Object.keys(b).forEach(a=>{navigator.mediaSession.setActionHandler(a,b[a])})}}setMediaMetadata(a){var b=a.cover?[{src:a.cover,sizes:"150x150"}]:void 0;navigator.mediaSession.metadata=new MediaMetadata({title:a.title,artist:a.artist,album:a.album,artwork:b})}on(a,b){this.events.on(a,b)}play(){if(this.audio.paused){var a=this.audio.play();return a instanceof Promise?(a.then(()=>{this.initMediaSession()}),a.catch(a=>{("NotAllowedError"===a.name||"NotSupportedError"===a.name)&&this.pause()})):this.initMediaSession(),a}}pause(){this.audio.paused||this.audio.pause()}toggle(){return this.audio.paused?this.play():this.pause()}seek(c){this.seekable&&(c=parseInt(c),isNaN(c)&&console.error("Shikwasa: seeking time is NaN"),c=b(c,this.duration),c=a(c,0),this.ui.setProgress(c,null,this.duration),this._canplay?this.audio.currentTime=c:this._initSeek=c)}seekBySpan(){var{time:a=10,forward:b=!0}=0{this._audio=a||this._audio,this.events.trigger("audioparse",this._audio)})}else throw new Error("Shikwasa: audio source is not specified")}updateMetadata(a){this.audio.title=a.title,this.ui.setAudioInfo(a),this._hasMediaSession&&this.setMediaMetadata(a)}destroyAudio(){this.audio.pause(),this.audio.src="",this.audio.load(),this.audio=null}destroy(){this.destroyAudio(),this.ui.destroy(),Object.keys(this.comps).forEach(a=>{this.comps[a].destroy&&"function"==typeof this.comps[a].destroy&&this.comps[a].destroy()}),this.comps=null,this.options.container.innerHTML=""}renderComponents(){y.length&&y.forEach(a=>{this.comps[a._name]=new a(this)})}}G.use=function(a){y.push(a)};return console.log("%c\uD83C\uDF4A%c Shikwasa Podcast Player v2.1.3 %c https://shikwasa.js.org","background-color:#00869B40;padding:4px;","background:#00869B80;color:#fff;padding:4px 0","padding: 2px 0;"),G}); \ No newline at end of file -- cgit v1.2.3