From 5b9394757ee1bced32be2b8dce9be4f2ac866517 Mon Sep 17 00:00:00 2001 From: samczhang Date: Fri, 29 Jul 2016 07:45:02 +0800 Subject: [PATCH] add demo image --- dist/audio.min.js | 4 +-- dist/audio.min.js.map | 2 +- doc/player.png | Bin 0 -> 162752 bytes doc/qrcode.png | Bin 0 -> 18387 bytes src/audio.js | 80 +++++++++++++++++++++++------------------- 5 files changed, 47 insertions(+), 39 deletions(-) create mode 100644 doc/player.png create mode 100644 doc/qrcode.png diff --git a/dist/audio.min.js b/dist/audio.min.js index 0d0174b..8e9d4be 100644 --- a/dist/audio.min.js +++ b/dist/audio.min.js @@ -3,6 +3,6 @@ * Copyright 2016, zhangchen2397@126.com * MIT license */ -!function(t,e){if("object"==typeof exports&&"object"==typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var n=e();for(var i in n)("object"==typeof exports?exports:t)[i]=n[i]}}(this,function(){return function(t){function e(i){if(n[i])return n[i].exports;var r=n[i]={exports:{},id:i,loaded:!1};return t[i].call(r.exports,r,r.exports,e),r.loaded=!0,r.exports}var n={};return e.m=t,e.c=n,e.p="",e(0)}([function(t,e,n){"use strict";function i(t){return t&&t.__esModule?t:{"default":t}}function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0}),e.AudioPlayer=void 0;var a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol?"symbol":typeof t},o=function(){function t(t,e){for(var n=0;nthis.totalNum-1&&(t=0),this.switchPlay(t)}},{key:"_toggleOrderLoop",value:function(t){switch(this.loopType){case"order":this.loopType="none",this.loopBtn.addClass("gray");break;case"none":this.loopType="order",this.loopBtn.removeClass("gray")}}},{key:"setLoopType",value:function(t){this.loopType=t}},{key:"addtoPlayList",value:function(t){this.totalNum++,this.data.push(t),t.idx=this.totalNum,this.playListWrap.append((0,c["default"])(y["default"],t)),l["default"].trigger(this,"afterAddtoPlayList",[{song:t}])}},{key:"switchPlay",value:function(t){var e=(this.config,this.playListItems),n=t;if("object"===("undefined"==typeof t?"undefined":a(t))&&(n=(0,l["default"])(t.currentTarget).data("idx")),this.playIdx!==n){var i=this.data[n];e.removeClass("cur"),(0,l["default"])(e.get(n)).addClass("cur"),this.pause(),this.audio.setAttribute("src",i.src),this.playIdx=n,this.play(),this.cover.attr("src",i.cover),this.title.html(i.title+""+i.author+"")}}},{key:"_togglePlayList",value:function(t){var e=(this.config,this.playListWrap);"show"===this.playListStatus?(e.css("height",0),this.playListStatus="hide"):(e.css("height",this.playListHeight),this.playListStatus="show")}},{key:"_mousedownCb",value:function(){var t=this.playPointer;t.on("mousemove",this.tempMovePlaybar),t.on("mouseup",this.tempMouseupCb)}},{key:"_mouseupCb",value:function(t){var e=this.playPointer;e.unbind("mousemove",this.tempMovePlaybar),e.unbind("mouseup",this.tempMouseupCb),this.assignPlay(t)}},{key:"_movePlaybar",value:function(t){t.preventDefault(),t.stopPropagation(),this.clearPlayTimer();var e=t.clientX||t.touches[0].clientX,n=e-this.playBarClientX,i=Math.min(n/this.playBarWidth,1);this.playedBar.css("width",100*i+"%"),this.playTime.html(this.formatSeconds(this.audio.duration*i))}},{key:"assignPlay",value:function(t){t.preventDefault(),t.stopPropagation();var e=this.audio,n=t.clientX||t.changedTouches[0].clientX,i=(n-this.playBarClientX)/this.playBarWidth;e.currentTime=e.duration*i,this.playedBar.css("width",100*i+"%"),this.playTimer||this.startPlayTimer()}},{key:"play",value:function(){var t=this,e=(this.config,this.audio);e.play(),this.playStatus="play",this.startPlayTimer(),this.el&&(this.playBtn.addClass("icon-pause"),this.coverPlayBtn.addClass("icon-pause"),this.playBtn.removeClass("icon-play"),this.coverPlayBtn.removeClass("icon-play")),l["default"].trigger(this,"play",[{song:t.data[this.playIdx]}])}},{key:"pause",value:function(){var t=this,e=(this.config,this.audio);e.pause(),this.playStatus="pause",this.clearPlayTimer(),this.playBtn.removeClass("icon-pause"),this.coverPlayBtn.removeClass("icon-pause"),this.playBtn.addClass("icon-play"),this.coverPlayBtn.addClass("icon-play"),l["default"].trigger(this,"pause",[{songInfo:t.data[this.playIdx]}])}},{key:"startPlayTimer",value:function(){var t=this,e=this.audio;this.playTimer=setInterval(function(){var n=e.currentTime/e.duration;t.playedBar.css("width",100*n+"%"),t.playTime.html(t.formatSeconds(e.currentTime))},500)}},{key:"clearPlayTimer",value:function(){this.playTimer&&(clearInterval(this.playTimer),this.playTimer=null)}},{key:"togglePlay",value:function(t){"play"===this.playStatus?this.pause():this.play()}},{key:"formatSeconds",value:function(t){var e=parseInt(t/60,10),n=parseInt(t-60*e,10),i=function(t){var e="";return e=t<1?"00":t>=1&&t<10?"0"+t:t};return e=i(e),n=i(n),e+":"+n}},{key:"extend",value:function(t){for(var e,n=Array.prototype.slice.call(arguments,1),i=0;e=n[i];i++)if(e)for(var r in e)t[r]=e[r];return t}}]),t}();e.AudioPlayer=m},function(t,e,n){var i,r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol?"symbol":typeof t};!function(r,a){i=function(){return a(r)}.call(e,n,e,t),!(void 0!==i&&(t.exports=i))}("undefined"!=typeof window?window:void 0,function(t){var e=function(){function e(t){return null==t?String(t):Y[G.call(t)]||"object"}function n(t){return"function"==e(t)}function i(t){return null!=t&&t==t.window}function a(t){return null!=t&&t.nodeType==t.DOCUMENT_NODE}function o(t){return"object"==e(t)}function s(t){return o(t)&&!i(t)&&Object.getPrototypeOf(t)==Object.prototype}function l(t){var e=!!t&&"length"in t&&t.length,n=_.type(t);return"function"!=n&&!i(t)&&("array"==n||0===e||"number"==typeof e&&e>0&&e-1 in t)}function u(t){return B.call(t,function(t){return null!=t})}function c(t){return t.length>0?_.fn.concat.apply([],t):t}function f(t){return t.replace(/::/g,"/").replace(/([A-Z]+)([A-Z][a-z])/g,"$1_$2").replace(/([a-z\d])([A-Z])/g,"$1_$2").replace(/_/g,"-").toLowerCase()}function h(t){return t in M?M[t]:M[t]=new RegExp("(^|\\s)"+t+"(\\s|$)")}function p(t,e){return"number"!=typeof e||D[f(t)]?e:e+"px"}function d(t){var e,n;return I[t]||(e=O.createElement(t),O.body.appendChild(e),n=getComputedStyle(e,"").getPropertyValue("display"),e.parentNode.removeChild(e),"none"==n&&(n="block"),I[t]=n),I[t]}function y(t){return"children"in t?A.call(t.children):_.map(t.childNodes,function(t){if(1==t.nodeType)return t})}function v(t,e){var n,i=t?t.length:0;for(n=0;n]*>/,R=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,F=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,H=/^(?:body|html)$/i,z=/([A-Z])/g,Z=["val","css","html","text","data","width","height","offset"],q=["after","prepend","before","append"],X=O.createElement("table"),W=O.createElement("tr"),V={tr:O.createElement("tbody"),tbody:X,thead:X,tfoot:X,td:W,th:W,"*":O.createElement("div")},U=/complete|loaded|interactive/,J=/^[\w-]*$/,Y={},G=Y.toString,K={},Q=O.createElement("div"),tt={tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},et=Array.isArray||function(t){return t instanceof Array};return K.matches=function(t,e){if(!e||!t||1!==t.nodeType)return!1;var n=t.matches||t.webkitMatchesSelector||t.mozMatchesSelector||t.oMatchesSelector||t.matchesSelector;if(n)return n.call(t,e);var i,r=t.parentNode,a=!r;return a&&(r=Q).appendChild(t),i=~K.qsa(r,e).indexOf(t),a&&Q.removeChild(t),i},j=function(t){return t.replace(/-+(.)?/g,function(t,e){return e?e.toUpperCase():""})},k=function(t){return B.call(t,function(e,n){return t.indexOf(e)==n})},K.fragment=function(t,e,n){var i,r,a;return R.test(t)&&(i=_(O.createElement(RegExp.$1))),i||(t.replace&&(t=t.replace(F,"<$1>")),e===w&&(e=$.test(t)&&RegExp.$1),e in V||(e="*"),a=V[e],a.innerHTML=""+t,i=_.each(A.call(a.childNodes),function(){a.removeChild(this)})),s(n)&&(r=_(i),_.each(n,function(t,e){Z.indexOf(t)>-1?r[t](e):r.attr(t,e)})),i},K.Z=function(t,e){return new v(t,e)},K.isZ=function(t){return t instanceof K.Z},K.init=function(t,e){var i;if(!t)return K.Z();if("string"==typeof t)if(t=t.trim(),"<"==t[0]&&$.test(t))i=K.fragment(t,RegExp.$1,e),t=null;else{if(e!==w)return _(e).find(t);i=K.qsa(O,t)}else{if(n(t))return _(O).ready(t);if(K.isZ(t))return t;if(et(t))i=u(t);else if(o(t))i=[t],t=null;else if($.test(t))i=K.fragment(t.trim(),RegExp.$1,e),t=null;else{if(e!==w)return _(e).find(t);i=K.qsa(O,t)}}return K.Z(i,t)},_=function(t,e){return K.init(t,e)},_.extend=function(t){var e,n=A.call(arguments,1);return"boolean"==typeof t&&(e=t,t=n.shift()),n.forEach(function(n){m(t,n,e)}),t},K.qsa=function(t,e){var n,i="#"==e[0],r=!i&&"."==e[0],a=i||r?e.slice(1):e,o=J.test(a);return t.getElementById&&o&&i?(n=t.getElementById(a))?[n]:[]:1!==t.nodeType&&9!==t.nodeType&&11!==t.nodeType?[]:A.call(o&&!i&&t.getElementsByClassName?r?t.getElementsByClassName(a):t.getElementsByTagName(e):t.querySelectorAll(e))},_.contains=O.documentElement.contains?function(t,e){return t!==e&&t.contains(e)}:function(t,e){for(;e&&(e=e.parentNode);)if(e===t)return!0;return!1},_.type=e,_.isFunction=n,_.isWindow=i,_.isArray=et,_.isPlainObject=s,_.isEmptyObject=function(t){var e;for(e in t)return!1;return!0},_.isNumeric=function(t){var e=Number(t),n="undefined"==typeof t?"undefined":r(t);return null!=t&&"boolean"!=n&&("string"!=n||t.length)&&!isNaN(e)&&isFinite(e)||!1},_.inArray=function(t,e,n){return L.indexOf.call(e,t,n)},_.camelCase=j,_.trim=function(t){return null==t?"":String.prototype.trim.call(t)},_.uuid=0,_.support={},_.expr={},_.noop=function(){},_.map=function(t,e){var n,i,r,a=[];if(l(t))for(i=0;i=0?t:t+this.length]},toArray:function(){return this.get()},size:function(){return this.length},remove:function(){return this.each(function(){null!=this.parentNode&&this.parentNode.removeChild(this)})},each:function(t){return L.every.call(this,function(e,n){return t.call(e,n,e)!==!1}),this},filter:function(t){return n(t)?this.not(this.not(t)):_(B.call(this,function(e){return K.matches(e,t)}))},add:function(t,e){return _(k(this.concat(_(t,e))))},is:function(t){return this.length>0&&K.matches(this[0],t)},not:function(t){var e=[];if(n(t)&&t.call!==w)this.each(function(n){t.call(this,n)||e.push(this)});else{var i="string"==typeof t?this.filter(t):l(t)&&n(t.item)?A.call(t):_(t);this.forEach(function(t){i.indexOf(t)<0&&e.push(t)})}return _(e)},has:function(t){return this.filter(function(){return o(t)?_.contains(this,t):_(this).find(t).size()})},eq:function(t){return t===-1?this.slice(t):this.slice(t,+t+1)},first:function(){var t=this[0];return t&&!o(t)?t:_(t)},last:function(){var t=this[this.length-1];return t&&!o(t)?t:_(t)},find:function(t){var e,n=this;return e=t?"object"==("undefined"==typeof t?"undefined":r(t))?_(t).filter(function(){var t=this;return L.some.call(n,function(e){return _.contains(e,t)})}):1==this.length?_(K.qsa(this[0],t)):this.map(function(){return K.qsa(this,t)}):_()},closest:function(t,e){var n=[],i="object"==("undefined"==typeof t?"undefined":r(t))&&_(t);return this.each(function(r,o){for(;o&&!(i?i.indexOf(o)>=0:K.matches(o,t));)o=o!==e&&!a(o)&&o.parentNode;o&&n.indexOf(o)<0&&n.push(o)}),_(n)},parents:function(t){for(var e=[],n=this;n.length>0;)n=_.map(n,function(t){if((t=t.parentNode)&&!a(t)&&e.indexOf(t)<0)return e.push(t),t});return g(e,t)},parent:function(t){return g(k(this.pluck("parentNode")),t)},children:function(t){return g(this.map(function(){return y(this)}),t)},contents:function(){return this.map(function(){return this.contentDocument||A.call(this.childNodes)})},siblings:function(t){return g(this.map(function(t,e){return B.call(y(e.parentNode),function(t){return t!==e})}),t)},empty:function(){return this.each(function(){this.innerHTML=""})},pluck:function(t){return _.map(this,function(e){return e[t]})},show:function(){return this.each(function(){"none"==this.style.display&&(this.style.display=""),"none"==getComputedStyle(this,"").getPropertyValue("display")&&(this.style.display=d(this.nodeName))})},replaceWith:function(t){return this.before(t).remove()},wrap:function(t){var e=n(t);if(this[0]&&!e)var i=_(t).get(0),r=i.parentNode||this.length>1;return this.each(function(n){_(this).wrapAll(e?t.call(this,n):r?i.cloneNode(!0):i)})},wrapAll:function(t){if(this[0]){_(this[0]).before(t=_(t));for(var e;(e=t.children()).length;)t=e.first();_(t).append(this)}return this},wrapInner:function(t){var e=n(t);return this.each(function(n){var i=_(this),r=i.contents(),a=e?t.call(this,n):t;r.length?r.wrapAll(a):i.append(a)})},unwrap:function(){return this.parent().each(function(){_(this).replaceWith(_(this).children())}),this},clone:function(){return this.map(function(){return this.cloneNode(!0)})},hide:function(){return this.css("display","none")},toggle:function(t){return this.each(function(){var e=_(this);(t===w?"none"==e.css("display"):t)?e.show():e.hide()})},prev:function(t){return _(this.pluck("previousElementSibling")).filter(t||"*")},next:function(t){return _(this.pluck("nextElementSibling")).filter(t||"*")},html:function(t){return 0 in arguments?this.each(function(e){var n=this.innerHTML;_(this).empty().append(x(this,t,e,n))}):0 in this?this[0].innerHTML:null},text:function(t){return 0 in arguments?this.each(function(e){var n=x(this,t,e,this.textContent);this.textContent=null==n?"":""+n}):0 in this?this.pluck("textContent").join(""):null},attr:function(t,e){var n;return"string"!=typeof t||1 in arguments?this.each(function(n){if(1===this.nodeType)if(o(t))for(S in t)b(this,S,t[S]);else b(this,t,x(this,e,n,this.getAttribute(t)))}):0 in this&&1==this[0].nodeType&&null!=(n=this[0].getAttribute(t))?n:w},removeAttr:function(t){return this.each(function(){1===this.nodeType&&t.split(" ").forEach(function(t){b(this,t)},this)})},prop:function(t,e){return t=tt[t]||t,1 in arguments?this.each(function(n){this[t]=x(this,e,n,this[t])}):this[0]&&this[0][t]},removeProp:function(t){return t=tt[t]||t,this.each(function(){delete this[t]})},data:function nt(t,e){var n="data-"+t.replace(z,"-$1").toLowerCase(),nt=1 in arguments?this.attr(n,e):this.attr(n);return null!==nt?E(nt):w},val:function(t){return 0 in arguments?(null==t&&(t=""),this.each(function(e){this.value=x(this,t,e,this.value)})):this[0]&&(this[0].multiple?_(this[0]).find("option").filter(function(){return this.selected}).pluck("value"):this[0].value)},offset:function(e){if(e)return this.each(function(t){var n=_(this),i=x(this,e,t,n.offset()),r=n.offsetParent().offset(),a={top:i.top-r.top,left:i.left-r.left};"static"==n.css("position")&&(a.position="relative"),n.css(a)});if(!this.length)return null;if(O.documentElement!==this[0]&&!_.contains(O.documentElement,this[0]))return{top:0,left:0};var n=this[0].getBoundingClientRect();return{left:n.left+t.pageXOffset,top:n.top+t.pageYOffset,width:Math.round(n.width),height:Math.round(n.height)}},css:function it(t,n){if(arguments.length<2){var i=this[0];if("string"==typeof t){if(!i)return;return i.style[j(t)]||getComputedStyle(i,"").getPropertyValue(t)}if(et(t)){if(!i)return;var r={},a=getComputedStyle(i,"");return _.each(t,function(t,e){r[e]=i.style[j(e)]||a.getPropertyValue(e)}),r}}var it="";if("string"==e(t))n||0===n?it=f(t)+":"+p(t,n):this.each(function(){this.style.removeProperty(f(t))});else for(S in t)t[S]||0===t[S]?it+=f(S)+":"+p(S,t[S])+";":this.each(function(){this.style.removeProperty(f(S))});return this.each(function(){this.style.cssText+=";"+it})},index:function(t){return t?this.indexOf(_(t)[0]):this.parent().children().indexOf(this[0])},hasClass:function(t){return!!t&&L.some.call(this,function(t){return this.test(P(t))},h(t))},addClass:function(t){return t?this.each(function(e){if("className"in this){C=[];var n=P(this),i=x(this,t,e,n);i.split(/\s+/g).forEach(function(t){_(this).hasClass(t)||C.push(t)},this),C.length&&P(this,n+(n?" ":"")+C.join(" "))}}):this},removeClass:function(t){return this.each(function(e){if("className"in this){if(t===w)return P(this,"");C=P(this),x(this,t,e,C).split(/\s+/g).forEach(function(t){C=C.replace(h(t)," ")}),P(this,C.trim())}})},toggleClass:function(t,e){return t?this.each(function(n){var i=_(this),r=x(this,t,n,P(this));r.split(/\s+/g).forEach(function(t){(e===w?!i.hasClass(t):e)?i.addClass(t):i.removeClass(t)})}):this},scrollTop:function(t){if(this.length){var e="scrollTop"in this[0];return t===w?e?this[0].scrollTop:this[0].pageYOffset:this.each(e?function(){this.scrollTop=t}:function(){this.scrollTo(this.scrollX,t)})}},scrollLeft:function(t){if(this.length){var e="scrollLeft"in this[0];return t===w?e?this[0].scrollLeft:this[0].pageXOffset:this.each(e?function(){this.scrollLeft=t}:function(){this.scrollTo(t,this.scrollY)})}},position:function(){if(this.length){var t=this[0],e=this.offsetParent(),n=this.offset(),i=H.test(e[0].nodeName)?{top:0,left:0}:e.offset();return n.top-=parseFloat(_(t).css("margin-top"))||0,n.left-=parseFloat(_(t).css("margin-left"))||0,i.top+=parseFloat(_(e[0]).css("border-top-width"))||0,i.left+=parseFloat(_(e[0]).css("border-left-width"))||0,{top:n.top-i.top,left:n.left-i.left}}},offsetParent:function(){return this.map(function(){for(var t=this.offsetParent||O.body;t&&!H.test(t.nodeName)&&"static"==_(t).css("position");)t=t.offsetParent;return t})}},_.fn.detach=_.fn.remove,["width","height"].forEach(function(t){var e=t.replace(/./,function(t){return t[0].toUpperCase()});_.fn[t]=function(n){var r,o=this[0];return n===w?i(o)?o["inner"+e]:a(o)?o.documentElement["scroll"+e]:(r=this.offset())&&r[t]:this.each(function(e){o=_(this),o.css(t,x(this,n,e,o[t]()))})}}),q.forEach(function(n,i){var r=i%2;_.fn[n]=function(){var n,a,o=_.map(arguments,function(t){var i=[];return n=e(t),"array"==n?(t.forEach(function(t){return t.nodeType!==w?i.push(t):_.zepto.isZ(t)?i=i.concat(t.get()):void(i=i.concat(K.fragment(t)))}),i):"object"==n||null==t?t:K.fragment(t)}),s=this.length>1;return o.length<1?this:this.each(function(e,n){a=r?n:n.parentNode,n=0==i?n.nextSibling:1==i?n.firstChild:2==i?n:null;var l=_.contains(O.documentElement,a);o.forEach(function(e){if(s)e=e.cloneNode(!0);else if(!a)return _(e).remove();a.insertBefore(e,n),l&&T(e,function(e){if(!(null==e.nodeName||"SCRIPT"!==e.nodeName.toUpperCase()||e.type&&"text/javascript"!==e.type||e.src)){var n=e.ownerDocument?e.ownerDocument.defaultView:t;n.eval.call(n,e.innerHTML)}})})})},_.fn[r?n+"To":"insert"+(i?"Before":"After")]=function(t){return _(t)[n](this),this}}),K.Z.prototype=v.prototype=_.fn,K.uniq=k,K.deserializeValue=E,_.zepto=K,_}();return t.Zepto=e,void 0===t.$&&(t.$=e),function(e){function n(t){return t._zid||(t._zid=p++)}function i(t,e,i,o){if(e=r(e),e.ns)var s=a(e.ns);return(m[n(t)]||[]).filter(function(t){return t&&(!e.e||t.e==e.e)&&(!e.ns||s.test(t.ns))&&(!i||n(t.fn)===n(i))&&(!o||t.sel==o)})}function r(t){var e=(""+t).split(".");return{e:e[0],ns:e.slice(1).sort().join(" ")}}function a(t){return new RegExp("(?:^| )"+t.replace(" "," .* ?")+"(?: |$)")}function o(t,e){return t.del&&!x&&t.e in b||!!e}function s(t){return P[t]||x&&b[t]||t}function l(t,i,a,l,u,f,p){var d=n(t),y=m[d]||(m[d]=[]);i.split(/\s/).forEach(function(n){if("ready"==n)return e(document).ready(a);var i=r(n);i.fn=a,i.sel=u,i.e in P&&(a=function(t){var n=t.relatedTarget;if(!n||n!==this&&!e.contains(this,n))return i.fn.apply(this,arguments)}),i.del=f;var d=f||a;i.proxy=function(e){if(e=c(e),!e.isImmediatePropagationStopped()){e.data=l;var n=d.apply(t,e._args==h?[e]:[e].concat(e._args));return n===!1&&(e.preventDefault(),e.stopPropagation()),n}},i.i=y.length,y.push(i),"addEventListener"in t&&t.addEventListener(s(i.e),i.proxy,o(i,p))})}function u(t,e,r,a,l){var u=n(t);(e||"").split(/\s/).forEach(function(e){i(t,e,r,a).forEach(function(e){delete m[u][e.i],"removeEventListener"in t&&t.removeEventListener(s(e.e),e.proxy,o(e,l))})})}function c(t,n){return!n&&t.isDefaultPrevented||(n||(n=t),e.each(S,function(e,i){var r=n[e];t[e]=function(){return this[i]=E,r&&r.apply(n,arguments)},t[i]=T}),t.timeStamp||(t.timeStamp=Date.now()),(n.defaultPrevented!==h?n.defaultPrevented:"returnValue"in n?n.returnValue===!1:n.getPreventDefault&&n.getPreventDefault())&&(t.isDefaultPrevented=E)),t}function f(t){var e,n={originalEvent:t};for(e in t)w.test(e)||t[e]===h||(n[e]=t[e]);return c(n,t)}var h,p=1,d=Array.prototype.slice,y=e.isFunction,v=function(t){return"string"==typeof t},m={},g={},x="onfocusin"in t,b={focus:"focusin",blur:"focusout"},P={mouseenter:"mouseover",mouseleave:"mouseout"};g.click=g.mousedown=g.mouseup=g.mousemove="MouseEvents",e.event={add:l,remove:u},e.proxy=function(t,i){var r=2 in arguments&&d.call(arguments,2);if(y(t)){var a=function(){return t.apply(i,r?r.concat(d.call(arguments)):arguments)};return a._zid=n(t),a}if(v(i))return r?(r.unshift(t[i],t),e.proxy.apply(null,r)):e.proxy(t[i],t);throw new TypeError("expected function")},e.fn.bind=function(t,e,n){return this.on(t,e,n)},e.fn.unbind=function(t,e){return this.off(t,e)},e.fn.one=function(t,e,n,i){return this.on(t,e,n,i,1)};var E=function(){return!0},T=function(){return!1},w=/^([A-Z]|returnValue$|layer[XY]$|webkitMovement[XY]$)/,S={preventDefault:"isDefaultPrevented",stopImmediatePropagation:"isImmediatePropagationStopped",stopPropagation:"isPropagationStopped"};e.fn.delegate=function(t,e,n){return this.on(e,t,n)},e.fn.undelegate=function(t,e,n){return this.off(e,t,n)},e.fn.live=function(t,n){return e(document.body).delegate(this.selector,t,n),this},e.fn.die=function(t,n){return e(document.body).undelegate(this.selector,t,n),this},e.fn.on=function(t,n,i,r,a){var o,s,c=this;return t&&!v(t)?(e.each(t,function(t,e){c.on(t,n,i,e,a)}),c):(v(n)||y(r)||r===!1||(r=i,i=n,n=h),r!==h&&i!==!1||(r=i,i=h),r===!1&&(r=T),c.each(function(c,h){a&&(o=function(t){return u(h,t.type,r),r.apply(this,arguments)}),n&&(s=function(t){var i,a=e(t.target).closest(n,h).get(0);if(a&&a!==h)return i=e.extend(f(t),{currentTarget:a,liveFired:h}),(o||r).apply(a,[i].concat(d.call(arguments,1)))}),l(h,t,r,i,n,s||o)}))},e.fn.off=function(t,n,i){var r=this;return t&&!v(t)?(e.each(t,function(t,e){r.off(t,n,e)}),r):(v(n)||y(i)||i===!1||(i=n,n=h),i===!1&&(i=T),r.each(function(){u(this,t,i,n)}))},e.fn.trigger=function(t,n){return t=v(t)||e.isPlainObject(t)?e.Event(t):c(t),t._args=n,this.each(function(){t.type in b&&"function"==typeof this[t.type]?this[t.type]():"dispatchEvent"in this?this.dispatchEvent(t):e(this).triggerHandler(t,n)})},e.fn.triggerHandler=function(t,n){var r,a;return this.each(function(o,s){r=f(v(t)?e.Event(t):t),r._args=n,r.target=s,e.each(i(s,t.type||t),function(t,e){if(a=e.proxy(r),r.isImmediatePropagationStopped())return!1})}),a},"focusin focusout focus blur load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select keydown keypress keyup error".split(" ").forEach(function(t){e.fn[t]=function(e){return 0 in arguments?this.bind(t,e):this.trigger(t)}}),e.Event=function(t,e){v(t)||(e=t,t=e.type);var n=document.createEvent(g[t]||"Events"),i=!0;if(e)for(var r in e)"bubbles"==r?i=!!e[r]:n[r]=e[r];return n.initEvent(t,i,!0),c(n)}}(e),function(e){function n(t,n,i){var r=e.Event(n);return e(t).trigger(r,i),!r.isDefaultPrevented()}function i(t,e,i,r){if(t.global)return n(e||b,i,r)}function r(t){t.global&&0===e.active++&&i(t,null,"ajaxStart")}function a(t){t.global&&!--e.active&&i(t,null,"ajaxStop")}function o(t,e){var n=e.context;return e.beforeSend.call(n,t,e)!==!1&&i(e,n,"ajaxBeforeSend",[t,e])!==!1&&void i(e,n,"ajaxSend",[t,e])}function s(t,e,n,r){var a=n.context,o="success";n.success.call(a,t,o,e),r&&r.resolveWith(a,[t,o,e]),i(n,a,"ajaxSuccess",[e,n,t]),u(o,e,n)}function l(t,e,n,r,a){var o=r.context;r.error.call(o,n,e,t),a&&a.rejectWith(o,[n,e,t]),i(r,o,"ajaxError",[n,r,t||e]),u(e,n,r)}function u(t,e,n){var r=n.context;n.complete.call(r,e,t),i(n,r,"ajaxComplete",[e,n]),a(n)}function c(t,e,n){if(n.dataFilter==f)return t;var i=n.context;return n.dataFilter.call(i,t,e)}function f(){}function h(t){return t&&(t=t.split(";",2)[0]),t&&(t==S?"html":t==w?"json":E.test(t)?"script":T.test(t)&&"xml")||"text"}function p(t,e){return""==e?t:(t+"&"+e).replace(/[&?]{1,2}/,"?")}function d(t){t.processData&&t.data&&"string"!=e.type(t.data)&&(t.data=e.param(t.data,t.traditional)),!t.data||t.type&&"GET"!=t.type.toUpperCase()&&"jsonp"!=t.dataType||(t.url=p(t.url,t.data),t.data=void 0)}function y(t,n,i,r){return e.isFunction(n)&&(r=i,i=n,n=void 0),e.isFunction(i)||(r=i,i=void 0),{url:t,data:n,success:i,dataType:r}}function v(t,n,i,r){var a,o=e.isArray(n),s=e.isPlainObject(n);e.each(n,function(n,l){a=e.type(l),r&&(n=i?r:r+"["+(s||"object"==a||"array"==a?n:"")+"]"),!r&&o?t.add(l.name,l.value):"array"==a||!i&&"object"==a?v(t,l,i,n):t.add(n,l)})}var m,g,x=+new Date,b=t.document,P=/)<[^<]*)*<\/script>/gi,E=/^(?:text|application)\/javascript/i,T=/^(?:text|application)\/xml/i,w="application/json",S="text/html",_=/^\s*$/,C=b.createElement("a");C.href=t.location.href,e.active=0,e.ajaxJSONP=function(n,i){if(!("type"in n))return e.ajax(n);var r,a,u=n.jsonpCallback,c=(e.isFunction(u)?u():u)||"Zepto"+x++,f=b.createElement("script"),h=t[c],p=function(t){e(f).triggerHandler("error",t||"abort")},d={abort:p};return i&&i.promise(d),e(f).on("load error",function(o,u){clearTimeout(a),e(f).off().remove(),"error"!=o.type&&r?s(r[0],d,n,i):l(null,u||"error",d,n,i),t[c]=h,r&&e.isFunction(h)&&h(r[0]),h=r=void 0}),o(d,n)===!1?(p("abort"),d):(t[c]=function(){r=arguments},f.src=n.url.replace(/\?(.+)=\?/,"?$1="+c),b.head.appendChild(f),n.timeout>0&&(a=setTimeout(function(){p("timeout")},n.timeout)),d)},e.ajaxSettings={type:"GET",beforeSend:f,success:f,error:f,complete:f,context:null,global:!0,xhr:function(){return new t.XMLHttpRequest},accepts:{script:"text/javascript, application/javascript, application/x-javascript",json:w,xml:"application/xml, text/xml",html:S,text:"text/plain"},crossDomain:!1,timeout:0,processData:!0,cache:!0,dataFilter:f},e.ajax=function(n){var i,a,u=e.extend({},n||{}),y=e.Deferred&&e.Deferred();for(m in e.ajaxSettings)void 0===u[m]&&(u[m]=e.ajaxSettings[m]);r(u),u.crossDomain||(i=b.createElement("a"),i.href=u.url,i.href=i.href,u.crossDomain=C.protocol+"//"+C.host!=i.protocol+"//"+i.host),u.url||(u.url=t.location.toString()),(a=u.url.indexOf("#"))>-1&&(u.url=u.url.slice(0,a)),d(u);var v=u.dataType,x=/\?.+=\?/.test(u.url);if(x&&(v="jsonp"),u.cache!==!1&&(n&&n.cache===!0||"script"!=v&&"jsonp"!=v)||(u.url=p(u.url,"_="+Date.now())),"jsonp"==v)return x||(u.url=p(u.url,u.jsonp?u.jsonp+"=?":u.jsonp===!1?"":"callback=?")), -e.ajaxJSONP(u,y);var P,E=u.accepts[v],T={},w=function(t,e){T[t.toLowerCase()]=[t,e]},S=/^([\w-]+:)\/\//.test(u.url)?RegExp.$1:t.location.protocol,j=u.xhr(),k=j.setRequestHeader;if(y&&y.promise(j),u.crossDomain||w("X-Requested-With","XMLHttpRequest"),w("Accept",E||"*/*"),(E=u.mimeType||E)&&(E.indexOf(",")>-1&&(E=E.split(",",2)[0]),j.overrideMimeType&&j.overrideMimeType(E)),(u.contentType||u.contentType!==!1&&u.data&&"GET"!=u.type.toUpperCase())&&w("Content-Type",u.contentType||"application/x-www-form-urlencoded"),u.headers)for(g in u.headers)w(g,u.headers[g]);if(j.setRequestHeader=w,j.onreadystatechange=function(){if(4==j.readyState){j.onreadystatechange=f,clearTimeout(P);var t,n=!1;if(j.status>=200&&j.status<300||304==j.status||0==j.status&&"file:"==S){if(v=v||h(u.mimeType||j.getResponseHeader("content-type")),"arraybuffer"==j.responseType||"blob"==j.responseType)t=j.response;else{t=j.responseText;try{t=c(t,v,u),"script"==v?(0,eval)(t):"xml"==v?t=j.responseXML:"json"==v&&(t=_.test(t)?null:e.parseJSON(t))}catch(i){n=i}if(n)return l(n,"parsererror",j,u,y)}s(t,j,u,y)}else l(j.statusText||null,j.status?"error":"abort",j,u,y)}},o(j,u)===!1)return j.abort(),l(null,"abort",j,u,y),j;var L=!("async"in u)||u.async;if(j.open(u.type,u.url,L,u.username,u.password),u.xhrFields)for(g in u.xhrFields)j[g]=u.xhrFields[g];for(g in T)k.apply(j,T[g]);return u.timeout>0&&(P=setTimeout(function(){j.onreadystatechange=f,j.abort(),l(null,"timeout",j,u,y)},u.timeout)),j.send(u.data?u.data:null),j},e.get=function(){return e.ajax(y.apply(null,arguments))},e.post=function(){var t=y.apply(null,arguments);return t.type="POST",e.ajax(t)},e.getJSON=function(){var t=y.apply(null,arguments);return t.dataType="json",e.ajax(t)},e.fn.load=function(t,n,i){if(!this.length)return this;var r,a=this,o=t.split(/\s/),s=y(t,n,i),l=s.success;return o.length>1&&(s.url=o[0],r=o[1]),s.success=function(t){a.html(r?e("
").html(t.replace(P,"")).find(r):t),l&&l.apply(a,arguments)},e.ajax(s),this};var j=encodeURIComponent;e.param=function(t,n){var i=[];return i.add=function(t,n){e.isFunction(n)&&(n=n()),null==n&&(n=""),this.push(j(t)+"="+j(n))},v(i,t,n),i.join("&").replace(/%20/g,"+")}}(e),function(t){t.fn.serializeArray=function(){var e,n,i=[],r=function a(t){return t.forEach?t.forEach(a):void i.push({name:e,value:t})};return this[0]&&t.each(this[0].elements,function(i,a){n=a.type,e=a.name,e&&"fieldset"!=a.nodeName.toLowerCase()&&!a.disabled&&"submit"!=n&&"reset"!=n&&"button"!=n&&"file"!=n&&("radio"!=n&&"checkbox"!=n||a.checked)&&r(t(a).val())}),i},t.fn.serialize=function(){var t=[];return this.serializeArray().forEach(function(e){t.push(encodeURIComponent(e.name)+"="+encodeURIComponent(e.value))}),t.join("&")},t.fn.submit=function(e){if(0 in arguments)this.bind("submit",e);else if(this.length){var n=t.Event("submit");this.eq(0).trigger(n),n.isDefaultPrevented()||this.get(0).submit()}return this}}(e),function(){try{getComputedStyle(void 0)}catch(e){var n=getComputedStyle;t.getComputedStyle=function(t,e){try{return n(t,e)}catch(i){return null}}}}(),e})},function(t,e){"use strict";function n(t,e,n,r,a){var o=this,s=e,l=document.getElementById(t),u=l?l.innerHTML:t,a=void 0==a||a,c=[],f=function(){},h=function(t,e){return e||(t=t.replace(/>/g,">").replace(/"),!(u.indexOf(T)>-1&&u.indexOf(w)>-1))return u;var S,_=function(t,e){var n=e?"\n":"";g=e?"":g,x=e?"":x;var i=function(t){return t.replace(/([.*+?^=!:${}()|[\]\/\\])/g,"\\$1")}(w),r=new RegExp(m+"(?:(?!"+i+")[\\s\\S])*"+i+"|('+)","g");return u.replace(/)[\s\S])*-->/g,function(t){var e=v.length++;return v[e]=t,"mTpl_comment"+e+";"}).split("\\").join("\\\\").replace(/[\r]/g,g).replace(/[\n]/g,x).split(T).join(m).replace(r,function(t,e){return e?new Array(e.length+1).join("\r"):t}).replace(new RegExp(m+"=(.*?)"+w,"g"),"';"+n+" s+=mTpl_htmlEncode(String($1));"+n+" s+='").replace(new RegExp(m+"!=(.*?)"+w,"g"),"';"+n+" s+=mTpl_htmlEncode(String($1),true);"+n+" s+='").split(m).join("';"+n).split(w).join(n+" s+='").split("\r").join("\\'")},C=[];for(S in s)C.push(S),c.push(s[S]);f=p(C,_(t)),a&&(i[t]={parsefn:f,propList:C})}var j;try{j=f.apply(o,c)}catch(k){f=p(C,_(t,!0)),j=f.apply(o,c)}return y(j)}Object.defineProperty(e,"__esModule",{value:!0}),e["default"]=n;var i={}},function(t,e,n){"use strict";function i(t){return t&&t.__esModule?t:{"default":t}}var r=n(1),a=i(r);a["default"].bind=function(t,e,n){t.__events||(t.__events={}),a["default"].isArray(e)||(e=[e]);for(var i=0;i
/>

<%= curInfo.title %><%= curInfo.author %>

  • 00:00
  • 00:00
    <% for (var i = 0; i < data.length; i++) { %> <% var idx = i + 1; %> <% var item = data[i]; %>
  • <% if (i === 0) { %> class=cur <% } %>> <%= idx %> <%= item.title %> <%= item.author %>
  • <% } %>
'},function(t,e){t.exports='
  • <%= idx %> <%= title %> <%= author %>
  • '}])}); +!function(t,e){if("object"==typeof exports&&"object"==typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var n=e();for(var i in n)("object"==typeof exports?exports:t)[i]=n[i]}}(this,function(){return function(t){function e(i){if(n[i])return n[i].exports;var r=n[i]={exports:{},id:i,loaded:!1};return t[i].call(r.exports,r,r.exports,e),r.loaded=!0,r.exports}var n={};return e.m=t,e.c=n,e.p="",e(0)}([function(t,e,n){"use strict";function i(t){return t&&t.__esModule?t:{"default":t}}function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0}),e.AudioPlayer=void 0;var a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol?"symbol":typeof t},o=function(){function t(t,e){for(var n=0;nthis.totalNum-1&&(t=0),this.switchPlay(t)}},{key:"_toggleOrderLoop",value:function(t){switch(this.loopType){case"order":this.loopType="none",this.loopBtn.addClass("gray");break;case"none":this.loopType="order",this.loopBtn.removeClass("gray")}}},{key:"setLoopType",value:function(t){this.loopType=t}},{key:"addtoPlayList",value:function(t){this.totalNum++,this.data.push(t),t.idx=this.totalNum,this.playListWrap.append((0,c["default"])(y["default"],t)),l["default"].trigger(this,"afterAddtoPlayList",[{song:t}])}},{key:"switchPlay",value:function(t){var e=(this.config,this.playListItems),n=t;if("object"===("undefined"==typeof t?"undefined":a(t))&&(n=(0,l["default"])(t.currentTarget).data("idx")),this.playIdx!==n){var i=this.data[n];e.removeClass("cur"),(0,l["default"])(e.get(n)).addClass("cur"),this.pause(),this.audio.setAttribute("src",i.src),this.playIdx=n,this.play(),this.cover.attr("src",i.cover),this.title.html(i.title+""+i.author+"")}}},{key:"_togglePlayList",value:function(t){var e=(this.config,this.playListWrap);"show"===this.playListStatus?(e.css("height",0),this.playListStatus="hide"):(e.css("height",this.playListHeight),this.playListStatus="show")}},{key:"_mousedownCb",value:function(){var t=this.playPointer;t.on("mousemove",this.tempMovePlaybar),t.on("mouseup",this.tempMouseupCb)}},{key:"_mouseupCb",value:function(t){var e=this.playPointer;e.unbind("mousemove",this.tempMovePlaybar),e.unbind("mouseup",this.tempMouseupCb),this.assignPlay(t)}},{key:"_movePlaybar",value:function(t){t.preventDefault(),t.stopPropagation(),this.clearPlayTimer();var e=t.clientX||t.touches[0].clientX,n=e-this.playBarClientX,i=Math.min(n/this.playBarWidth,1);this.playedBar.css("width",100*i+"%"),this.playTime.html(this.formatSeconds(this.audio.duration*i))}},{key:"assignPlay",value:function(t){t.preventDefault(),t.stopPropagation();var e=this.audio,n=t.clientX||t.changedTouches[0].clientX,i=(n-this.playBarClientX)/this.playBarWidth;e.currentTime=e.duration*i,this.playedBar.css("width",100*i+"%"),this.playTimer||this.startPlayTimer()}},{key:"play",value:function(){var t=this,e=(this.config,this.audio);e.play(),this.playStatus="play",this.startPlayTimer(),this.el&&(this.playBtn.addClass("icon-pause"),this.coverPlayBtn.addClass("icon-pause"),this.playBtn.removeClass("icon-play"),this.coverPlayBtn.removeClass("icon-play")),l["default"].trigger(this,"play",[{song:t.data[this.playIdx]}])}},{key:"pause",value:function(){var t=this,e=(this.config,this.audio);e.pause(),this.playStatus="pause",this.clearPlayTimer(),this.playBtn.removeClass("icon-pause"),this.coverPlayBtn.removeClass("icon-pause"),this.playBtn.addClass("icon-play"),this.coverPlayBtn.addClass("icon-play"),l["default"].trigger(this,"pause",[{songInfo:t.data[this.playIdx]}])}},{key:"startPlayTimer",value:function(){var t=this,e=this.audio;this.playTimer=setInterval(function(){var n=e.currentTime/e.duration;t.playedBar.css("width",100*n+"%"),t.playTime.html(t.formatSeconds(e.currentTime))},500)}},{key:"clearPlayTimer",value:function(){this.playTimer&&(clearInterval(this.playTimer),this.playTimer=null)}},{key:"togglePlay",value:function(t){"play"===this.playStatus?this.pause():this.play()}},{key:"formatSeconds",value:function(t){var e=parseInt(t/60,10),n=parseInt(t-60*e,10),i=function(t){var e="";return e=t<1?"00":t>=1&&t<10?"0"+t:t};return e=i(e),n=i(n),e+":"+n}},{key:"extend",value:function(t){for(var e,n=Array.prototype.slice.call(arguments,1),i=0;e=n[i];i++)if(e)for(var r in e)t[r]=e[r];return t}}]),t}();e.AudioPlayer=m},function(t,e,n){var i,r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol?"symbol":typeof t};!function(r,a){i=function(){return a(r)}.call(e,n,e,t),!(void 0!==i&&(t.exports=i))}("undefined"!=typeof window?window:void 0,function(t){var e=function(){function e(t){return null==t?String(t):Y[G.call(t)]||"object"}function n(t){return"function"==e(t)}function i(t){return null!=t&&t==t.window}function a(t){return null!=t&&t.nodeType==t.DOCUMENT_NODE}function o(t){return"object"==e(t)}function s(t){return o(t)&&!i(t)&&Object.getPrototypeOf(t)==Object.prototype}function l(t){var e=!!t&&"length"in t&&t.length,n=C.type(t);return"function"!=n&&!i(t)&&("array"==n||0===e||"number"==typeof e&&e>0&&e-1 in t)}function u(t){return B.call(t,function(t){return null!=t})}function c(t){return t.length>0?C.fn.concat.apply([],t):t}function f(t){return t.replace(/::/g,"/").replace(/([A-Z]+)([A-Z][a-z])/g,"$1_$2").replace(/([a-z\d])([A-Z])/g,"$1_$2").replace(/_/g,"-").toLowerCase()}function h(t){return t in M?M[t]:M[t]=new RegExp("(^|\\s)"+t+"(\\s|$)")}function p(t,e){return"number"!=typeof e||D[f(t)]?e:e+"px"}function d(t){var e,n;return I[t]||(e=O.createElement(t),O.body.appendChild(e),n=getComputedStyle(e,"").getPropertyValue("display"),e.parentNode.removeChild(e),"none"==n&&(n="block"),I[t]=n),I[t]}function y(t){return"children"in t?A.call(t.children):C.map(t.childNodes,function(t){if(1==t.nodeType)return t})}function v(t,e){var n,i=t?t.length:0;for(n=0;n]*>/,R=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,F=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,H=/^(?:body|html)$/i,z=/([A-Z])/g,Z=["val","css","html","text","data","width","height","offset"],q=["after","prepend","before","append"],X=O.createElement("table"),W=O.createElement("tr"),V={tr:O.createElement("tbody"),tbody:X,thead:X,tfoot:X,td:W,th:W,"*":O.createElement("div")},U=/complete|loaded|interactive/,J=/^[\w-]*$/,Y={},G=Y.toString,K={},Q=O.createElement("div"),tt={tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},et=Array.isArray||function(t){return t instanceof Array};return K.matches=function(t,e){if(!e||!t||1!==t.nodeType)return!1;var n=t.matches||t.webkitMatchesSelector||t.mozMatchesSelector||t.oMatchesSelector||t.matchesSelector;if(n)return n.call(t,e);var i,r=t.parentNode,a=!r;return a&&(r=Q).appendChild(t),i=~K.qsa(r,e).indexOf(t),a&&Q.removeChild(t),i},j=function(t){return t.replace(/-+(.)?/g,function(t,e){return e?e.toUpperCase():""})},k=function(t){return B.call(t,function(e,n){return t.indexOf(e)==n})},K.fragment=function(t,e,n){var i,r,a;return R.test(t)&&(i=C(O.createElement(RegExp.$1))),i||(t.replace&&(t=t.replace(F,"<$1>")),e===w&&(e=$.test(t)&&RegExp.$1),e in V||(e="*"),a=V[e],a.innerHTML=""+t,i=C.each(A.call(a.childNodes),function(){a.removeChild(this)})),s(n)&&(r=C(i),C.each(n,function(t,e){Z.indexOf(t)>-1?r[t](e):r.attr(t,e)})),i},K.Z=function(t,e){return new v(t,e)},K.isZ=function(t){return t instanceof K.Z},K.init=function(t,e){var i;if(!t)return K.Z();if("string"==typeof t)if(t=t.trim(),"<"==t[0]&&$.test(t))i=K.fragment(t,RegExp.$1,e),t=null;else{if(e!==w)return C(e).find(t);i=K.qsa(O,t)}else{if(n(t))return C(O).ready(t);if(K.isZ(t))return t;if(et(t))i=u(t);else if(o(t))i=[t],t=null;else if($.test(t))i=K.fragment(t.trim(),RegExp.$1,e),t=null;else{if(e!==w)return C(e).find(t);i=K.qsa(O,t)}}return K.Z(i,t)},C=function(t,e){return K.init(t,e)},C.extend=function(t){var e,n=A.call(arguments,1);return"boolean"==typeof t&&(e=t,t=n.shift()),n.forEach(function(n){m(t,n,e)}),t},K.qsa=function(t,e){var n,i="#"==e[0],r=!i&&"."==e[0],a=i||r?e.slice(1):e,o=J.test(a);return t.getElementById&&o&&i?(n=t.getElementById(a))?[n]:[]:1!==t.nodeType&&9!==t.nodeType&&11!==t.nodeType?[]:A.call(o&&!i&&t.getElementsByClassName?r?t.getElementsByClassName(a):t.getElementsByTagName(e):t.querySelectorAll(e))},C.contains=O.documentElement.contains?function(t,e){return t!==e&&t.contains(e)}:function(t,e){for(;e&&(e=e.parentNode);)if(e===t)return!0;return!1},C.type=e,C.isFunction=n,C.isWindow=i,C.isArray=et,C.isPlainObject=s,C.isEmptyObject=function(t){var e;for(e in t)return!1;return!0},C.isNumeric=function(t){var e=Number(t),n="undefined"==typeof t?"undefined":r(t);return null!=t&&"boolean"!=n&&("string"!=n||t.length)&&!isNaN(e)&&isFinite(e)||!1},C.inArray=function(t,e,n){return L.indexOf.call(e,t,n)},C.camelCase=j,C.trim=function(t){return null==t?"":String.prototype.trim.call(t)},C.uuid=0,C.support={},C.expr={},C.noop=function(){},C.map=function(t,e){var n,i,r,a=[];if(l(t))for(i=0;i=0?t:t+this.length]},toArray:function(){return this.get()},size:function(){return this.length},remove:function(){return this.each(function(){null!=this.parentNode&&this.parentNode.removeChild(this)})},each:function(t){return L.every.call(this,function(e,n){return t.call(e,n,e)!==!1}),this},filter:function(t){return n(t)?this.not(this.not(t)):C(B.call(this,function(e){return K.matches(e,t)}))},add:function(t,e){return C(k(this.concat(C(t,e))))},is:function(t){return this.length>0&&K.matches(this[0],t)},not:function(t){var e=[];if(n(t)&&t.call!==w)this.each(function(n){t.call(this,n)||e.push(this)});else{var i="string"==typeof t?this.filter(t):l(t)&&n(t.item)?A.call(t):C(t);this.forEach(function(t){i.indexOf(t)<0&&e.push(t)})}return C(e)},has:function(t){return this.filter(function(){return o(t)?C.contains(this,t):C(this).find(t).size()})},eq:function(t){return t===-1?this.slice(t):this.slice(t,+t+1)},first:function(){var t=this[0];return t&&!o(t)?t:C(t)},last:function(){var t=this[this.length-1];return t&&!o(t)?t:C(t)},find:function(t){var e,n=this;return e=t?"object"==("undefined"==typeof t?"undefined":r(t))?C(t).filter(function(){var t=this;return L.some.call(n,function(e){return C.contains(e,t)})}):1==this.length?C(K.qsa(this[0],t)):this.map(function(){return K.qsa(this,t)}):C()},closest:function(t,e){var n=[],i="object"==("undefined"==typeof t?"undefined":r(t))&&C(t);return this.each(function(r,o){for(;o&&!(i?i.indexOf(o)>=0:K.matches(o,t));)o=o!==e&&!a(o)&&o.parentNode;o&&n.indexOf(o)<0&&n.push(o)}),C(n)},parents:function(t){for(var e=[],n=this;n.length>0;)n=C.map(n,function(t){if((t=t.parentNode)&&!a(t)&&e.indexOf(t)<0)return e.push(t),t});return g(e,t)},parent:function(t){return g(k(this.pluck("parentNode")),t)},children:function(t){return g(this.map(function(){return y(this)}),t)},contents:function(){return this.map(function(){return this.contentDocument||A.call(this.childNodes)})},siblings:function(t){return g(this.map(function(t,e){return B.call(y(e.parentNode),function(t){return t!==e})}),t)},empty:function(){return this.each(function(){this.innerHTML=""})},pluck:function(t){return C.map(this,function(e){return e[t]})},show:function(){return this.each(function(){"none"==this.style.display&&(this.style.display=""),"none"==getComputedStyle(this,"").getPropertyValue("display")&&(this.style.display=d(this.nodeName))})},replaceWith:function(t){return this.before(t).remove()},wrap:function(t){var e=n(t);if(this[0]&&!e)var i=C(t).get(0),r=i.parentNode||this.length>1;return this.each(function(n){C(this).wrapAll(e?t.call(this,n):r?i.cloneNode(!0):i)})},wrapAll:function(t){if(this[0]){C(this[0]).before(t=C(t));for(var e;(e=t.children()).length;)t=e.first();C(t).append(this)}return this},wrapInner:function(t){var e=n(t);return this.each(function(n){var i=C(this),r=i.contents(),a=e?t.call(this,n):t;r.length?r.wrapAll(a):i.append(a)})},unwrap:function(){return this.parent().each(function(){C(this).replaceWith(C(this).children())}),this},clone:function(){return this.map(function(){return this.cloneNode(!0)})},hide:function(){return this.css("display","none")},toggle:function(t){return this.each(function(){var e=C(this);(t===w?"none"==e.css("display"):t)?e.show():e.hide()})},prev:function(t){return C(this.pluck("previousElementSibling")).filter(t||"*")},next:function(t){return C(this.pluck("nextElementSibling")).filter(t||"*")},html:function(t){return 0 in arguments?this.each(function(e){var n=this.innerHTML;C(this).empty().append(x(this,t,e,n))}):0 in this?this[0].innerHTML:null},text:function(t){return 0 in arguments?this.each(function(e){var n=x(this,t,e,this.textContent);this.textContent=null==n?"":""+n}):0 in this?this.pluck("textContent").join(""):null},attr:function(t,e){var n;return"string"!=typeof t||1 in arguments?this.each(function(n){if(1===this.nodeType)if(o(t))for(_ in t)b(this,_,t[_]);else b(this,t,x(this,e,n,this.getAttribute(t)))}):0 in this&&1==this[0].nodeType&&null!=(n=this[0].getAttribute(t))?n:w},removeAttr:function(t){return this.each(function(){1===this.nodeType&&t.split(" ").forEach(function(t){b(this,t)},this)})},prop:function(t,e){return t=tt[t]||t,1 in arguments?this.each(function(n){this[t]=x(this,e,n,this[t])}):this[0]&&this[0][t]},removeProp:function(t){return t=tt[t]||t,this.each(function(){delete this[t]})},data:function nt(t,e){var n="data-"+t.replace(z,"-$1").toLowerCase(),nt=1 in arguments?this.attr(n,e):this.attr(n);return null!==nt?E(nt):w},val:function(t){return 0 in arguments?(null==t&&(t=""),this.each(function(e){this.value=x(this,t,e,this.value)})):this[0]&&(this[0].multiple?C(this[0]).find("option").filter(function(){return this.selected}).pluck("value"):this[0].value)},offset:function(e){if(e)return this.each(function(t){var n=C(this),i=x(this,e,t,n.offset()),r=n.offsetParent().offset(),a={top:i.top-r.top,left:i.left-r.left};"static"==n.css("position")&&(a.position="relative"),n.css(a)});if(!this.length)return null;if(O.documentElement!==this[0]&&!C.contains(O.documentElement,this[0]))return{top:0,left:0};var n=this[0].getBoundingClientRect();return{left:n.left+t.pageXOffset,top:n.top+t.pageYOffset,width:Math.round(n.width),height:Math.round(n.height)}},css:function it(t,n){if(arguments.length<2){var i=this[0];if("string"==typeof t){if(!i)return;return i.style[j(t)]||getComputedStyle(i,"").getPropertyValue(t)}if(et(t)){if(!i)return;var r={},a=getComputedStyle(i,"");return C.each(t,function(t,e){r[e]=i.style[j(e)]||a.getPropertyValue(e)}),r}}var it="";if("string"==e(t))n||0===n?it=f(t)+":"+p(t,n):this.each(function(){this.style.removeProperty(f(t))});else for(_ in t)t[_]||0===t[_]?it+=f(_)+":"+p(_,t[_])+";":this.each(function(){this.style.removeProperty(f(_))});return this.each(function(){this.style.cssText+=";"+it})},index:function(t){return t?this.indexOf(C(t)[0]):this.parent().children().indexOf(this[0])},hasClass:function(t){return!!t&&L.some.call(this,function(t){return this.test(P(t))},h(t))},addClass:function(t){return t?this.each(function(e){if("className"in this){S=[];var n=P(this),i=x(this,t,e,n);i.split(/\s+/g).forEach(function(t){C(this).hasClass(t)||S.push(t)},this),S.length&&P(this,n+(n?" ":"")+S.join(" "))}}):this},removeClass:function(t){return this.each(function(e){if("className"in this){if(t===w)return P(this,"");S=P(this),x(this,t,e,S).split(/\s+/g).forEach(function(t){S=S.replace(h(t)," ")}),P(this,S.trim())}})},toggleClass:function(t,e){return t?this.each(function(n){var i=C(this),r=x(this,t,n,P(this));r.split(/\s+/g).forEach(function(t){(e===w?!i.hasClass(t):e)?i.addClass(t):i.removeClass(t)})}):this},scrollTop:function(t){if(this.length){var e="scrollTop"in this[0];return t===w?e?this[0].scrollTop:this[0].pageYOffset:this.each(e?function(){this.scrollTop=t}:function(){this.scrollTo(this.scrollX,t)})}},scrollLeft:function(t){if(this.length){var e="scrollLeft"in this[0];return t===w?e?this[0].scrollLeft:this[0].pageXOffset:this.each(e?function(){this.scrollLeft=t}:function(){this.scrollTo(t,this.scrollY)})}},position:function(){if(this.length){var t=this[0],e=this.offsetParent(),n=this.offset(),i=H.test(e[0].nodeName)?{top:0,left:0}:e.offset();return n.top-=parseFloat(C(t).css("margin-top"))||0,n.left-=parseFloat(C(t).css("margin-left"))||0,i.top+=parseFloat(C(e[0]).css("border-top-width"))||0,i.left+=parseFloat(C(e[0]).css("border-left-width"))||0,{top:n.top-i.top,left:n.left-i.left}}},offsetParent:function(){return this.map(function(){for(var t=this.offsetParent||O.body;t&&!H.test(t.nodeName)&&"static"==C(t).css("position");)t=t.offsetParent;return t})}},C.fn.detach=C.fn.remove,["width","height"].forEach(function(t){var e=t.replace(/./,function(t){return t[0].toUpperCase()});C.fn[t]=function(n){var r,o=this[0];return n===w?i(o)?o["inner"+e]:a(o)?o.documentElement["scroll"+e]:(r=this.offset())&&r[t]:this.each(function(e){o=C(this),o.css(t,x(this,n,e,o[t]()))})}}),q.forEach(function(n,i){var r=i%2;C.fn[n]=function(){var n,a,o=C.map(arguments,function(t){var i=[];return n=e(t),"array"==n?(t.forEach(function(t){return t.nodeType!==w?i.push(t):C.zepto.isZ(t)?i=i.concat(t.get()):void(i=i.concat(K.fragment(t)))}),i):"object"==n||null==t?t:K.fragment(t)}),s=this.length>1;return o.length<1?this:this.each(function(e,n){a=r?n:n.parentNode,n=0==i?n.nextSibling:1==i?n.firstChild:2==i?n:null;var l=C.contains(O.documentElement,a);o.forEach(function(e){if(s)e=e.cloneNode(!0);else if(!a)return C(e).remove();a.insertBefore(e,n),l&&T(e,function(e){if(!(null==e.nodeName||"SCRIPT"!==e.nodeName.toUpperCase()||e.type&&"text/javascript"!==e.type||e.src)){var n=e.ownerDocument?e.ownerDocument.defaultView:t;n.eval.call(n,e.innerHTML)}})})})},C.fn[r?n+"To":"insert"+(i?"Before":"After")]=function(t){return C(t)[n](this),this}}),K.Z.prototype=v.prototype=C.fn,K.uniq=k,K.deserializeValue=E,C.zepto=K,C}();return t.Zepto=e,void 0===t.$&&(t.$=e),function(e){function n(t){return t._zid||(t._zid=p++)}function i(t,e,i,o){if(e=r(e),e.ns)var s=a(e.ns);return(m[n(t)]||[]).filter(function(t){return t&&(!e.e||t.e==e.e)&&(!e.ns||s.test(t.ns))&&(!i||n(t.fn)===n(i))&&(!o||t.sel==o)})}function r(t){var e=(""+t).split(".");return{e:e[0],ns:e.slice(1).sort().join(" ")}}function a(t){return new RegExp("(?:^| )"+t.replace(" "," .* ?")+"(?: |$)")}function o(t,e){return t.del&&!x&&t.e in b||!!e}function s(t){return P[t]||x&&b[t]||t}function l(t,i,a,l,u,f,p){var d=n(t),y=m[d]||(m[d]=[]);i.split(/\s/).forEach(function(n){if("ready"==n)return e(document).ready(a);var i=r(n);i.fn=a,i.sel=u,i.e in P&&(a=function(t){var n=t.relatedTarget;if(!n||n!==this&&!e.contains(this,n))return i.fn.apply(this,arguments)}),i.del=f;var d=f||a;i.proxy=function(e){if(e=c(e),!e.isImmediatePropagationStopped()){e.data=l;var n=d.apply(t,e._args==h?[e]:[e].concat(e._args));return n===!1&&(e.preventDefault(),e.stopPropagation()),n}},i.i=y.length,y.push(i),"addEventListener"in t&&t.addEventListener(s(i.e),i.proxy,o(i,p))})}function u(t,e,r,a,l){var u=n(t);(e||"").split(/\s/).forEach(function(e){i(t,e,r,a).forEach(function(e){delete m[u][e.i],"removeEventListener"in t&&t.removeEventListener(s(e.e),e.proxy,o(e,l))})})}function c(t,n){return!n&&t.isDefaultPrevented||(n||(n=t),e.each(_,function(e,i){var r=n[e];t[e]=function(){return this[i]=E,r&&r.apply(n,arguments)},t[i]=T}),t.timeStamp||(t.timeStamp=Date.now()),(n.defaultPrevented!==h?n.defaultPrevented:"returnValue"in n?n.returnValue===!1:n.getPreventDefault&&n.getPreventDefault())&&(t.isDefaultPrevented=E)),t}function f(t){var e,n={originalEvent:t};for(e in t)w.test(e)||t[e]===h||(n[e]=t[e]);return c(n,t)}var h,p=1,d=Array.prototype.slice,y=e.isFunction,v=function(t){return"string"==typeof t},m={},g={},x="onfocusin"in t,b={focus:"focusin",blur:"focusout"},P={mouseenter:"mouseover",mouseleave:"mouseout"};g.click=g.mousedown=g.mouseup=g.mousemove="MouseEvents",e.event={add:l,remove:u},e.proxy=function(t,i){var r=2 in arguments&&d.call(arguments,2);if(y(t)){var a=function(){return t.apply(i,r?r.concat(d.call(arguments)):arguments)};return a._zid=n(t),a}if(v(i))return r?(r.unshift(t[i],t),e.proxy.apply(null,r)):e.proxy(t[i],t);throw new TypeError("expected function")},e.fn.bind=function(t,e,n){return this.on(t,e,n)},e.fn.unbind=function(t,e){return this.off(t,e)},e.fn.one=function(t,e,n,i){return this.on(t,e,n,i,1)};var E=function(){return!0},T=function(){return!1},w=/^([A-Z]|returnValue$|layer[XY]$|webkitMovement[XY]$)/,_={preventDefault:"isDefaultPrevented",stopImmediatePropagation:"isImmediatePropagationStopped",stopPropagation:"isPropagationStopped"};e.fn.delegate=function(t,e,n){return this.on(e,t,n)},e.fn.undelegate=function(t,e,n){return this.off(e,t,n)},e.fn.live=function(t,n){return e(document.body).delegate(this.selector,t,n),this},e.fn.die=function(t,n){return e(document.body).undelegate(this.selector,t,n),this},e.fn.on=function(t,n,i,r,a){var o,s,c=this;return t&&!v(t)?(e.each(t,function(t,e){c.on(t,n,i,e,a)}),c):(v(n)||y(r)||r===!1||(r=i,i=n,n=h),r!==h&&i!==!1||(r=i,i=h),r===!1&&(r=T),c.each(function(c,h){a&&(o=function(t){return u(h,t.type,r),r.apply(this,arguments)}),n&&(s=function(t){var i,a=e(t.target).closest(n,h).get(0);if(a&&a!==h)return i=e.extend(f(t),{currentTarget:a,liveFired:h}),(o||r).apply(a,[i].concat(d.call(arguments,1)))}),l(h,t,r,i,n,s||o)}))},e.fn.off=function(t,n,i){var r=this;return t&&!v(t)?(e.each(t,function(t,e){r.off(t,n,e)}),r):(v(n)||y(i)||i===!1||(i=n,n=h),i===!1&&(i=T),r.each(function(){u(this,t,i,n)}))},e.fn.trigger=function(t,n){return t=v(t)||e.isPlainObject(t)?e.Event(t):c(t),t._args=n,this.each(function(){t.type in b&&"function"==typeof this[t.type]?this[t.type]():"dispatchEvent"in this?this.dispatchEvent(t):e(this).triggerHandler(t,n)})},e.fn.triggerHandler=function(t,n){var r,a;return this.each(function(o,s){r=f(v(t)?e.Event(t):t),r._args=n,r.target=s,e.each(i(s,t.type||t),function(t,e){if(a=e.proxy(r),r.isImmediatePropagationStopped())return!1})}),a},"focusin focusout focus blur load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select keydown keypress keyup error".split(" ").forEach(function(t){e.fn[t]=function(e){return 0 in arguments?this.bind(t,e):this.trigger(t)}}),e.Event=function(t,e){v(t)||(e=t,t=e.type);var n=document.createEvent(g[t]||"Events"),i=!0;if(e)for(var r in e)"bubbles"==r?i=!!e[r]:n[r]=e[r];return n.initEvent(t,i,!0),c(n)}}(e),function(e){function n(t,n,i){var r=e.Event(n);return e(t).trigger(r,i),!r.isDefaultPrevented()}function i(t,e,i,r){if(t.global)return n(e||b,i,r)}function r(t){t.global&&0===e.active++&&i(t,null,"ajaxStart")}function a(t){t.global&&!--e.active&&i(t,null,"ajaxStop")}function o(t,e){var n=e.context;return e.beforeSend.call(n,t,e)!==!1&&i(e,n,"ajaxBeforeSend",[t,e])!==!1&&void i(e,n,"ajaxSend",[t,e])}function s(t,e,n,r){var a=n.context,o="success";n.success.call(a,t,o,e),r&&r.resolveWith(a,[t,o,e]),i(n,a,"ajaxSuccess",[e,n,t]),u(o,e,n)}function l(t,e,n,r,a){var o=r.context;r.error.call(o,n,e,t),a&&a.rejectWith(o,[n,e,t]),i(r,o,"ajaxError",[n,r,t||e]),u(e,n,r)}function u(t,e,n){var r=n.context;n.complete.call(r,e,t),i(n,r,"ajaxComplete",[e,n]),a(n)}function c(t,e,n){if(n.dataFilter==f)return t;var i=n.context;return n.dataFilter.call(i,t,e)}function f(){}function h(t){return t&&(t=t.split(";",2)[0]),t&&(t==_?"html":t==w?"json":E.test(t)?"script":T.test(t)&&"xml")||"text"}function p(t,e){return""==e?t:(t+"&"+e).replace(/[&?]{1,2}/,"?")}function d(t){t.processData&&t.data&&"string"!=e.type(t.data)&&(t.data=e.param(t.data,t.traditional)),!t.data||t.type&&"GET"!=t.type.toUpperCase()&&"jsonp"!=t.dataType||(t.url=p(t.url,t.data),t.data=void 0)}function y(t,n,i,r){return e.isFunction(n)&&(r=i,i=n,n=void 0),e.isFunction(i)||(r=i,i=void 0),{url:t,data:n,success:i,dataType:r}}function v(t,n,i,r){var a,o=e.isArray(n),s=e.isPlainObject(n);e.each(n,function(n,l){a=e.type(l),r&&(n=i?r:r+"["+(s||"object"==a||"array"==a?n:"")+"]"),!r&&o?t.add(l.name,l.value):"array"==a||!i&&"object"==a?v(t,l,i,n):t.add(n,l)})}var m,g,x=+new Date,b=t.document,P=/)<[^<]*)*<\/script>/gi,E=/^(?:text|application)\/javascript/i,T=/^(?:text|application)\/xml/i,w="application/json",_="text/html",C=/^\s*$/,S=b.createElement("a");S.href=t.location.href,e.active=0,e.ajaxJSONP=function(n,i){if(!("type"in n))return e.ajax(n);var r,a,u=n.jsonpCallback,c=(e.isFunction(u)?u():u)||"Zepto"+x++,f=b.createElement("script"),h=t[c],p=function(t){e(f).triggerHandler("error",t||"abort")},d={abort:p};return i&&i.promise(d),e(f).on("load error",function(o,u){clearTimeout(a),e(f).off().remove(),"error"!=o.type&&r?s(r[0],d,n,i):l(null,u||"error",d,n,i),t[c]=h,r&&e.isFunction(h)&&h(r[0]),h=r=void 0}),o(d,n)===!1?(p("abort"),d):(t[c]=function(){r=arguments},f.src=n.url.replace(/\?(.+)=\?/,"?$1="+c),b.head.appendChild(f),n.timeout>0&&(a=setTimeout(function(){p("timeout")},n.timeout)),d)},e.ajaxSettings={type:"GET",beforeSend:f,success:f,error:f,complete:f,context:null,global:!0,xhr:function(){return new t.XMLHttpRequest},accepts:{script:"text/javascript, application/javascript, application/x-javascript",json:w,xml:"application/xml, text/xml",html:_,text:"text/plain"},crossDomain:!1,timeout:0,processData:!0,cache:!0,dataFilter:f},e.ajax=function(n){var i,a,u=e.extend({},n||{}),y=e.Deferred&&e.Deferred();for(m in e.ajaxSettings)void 0===u[m]&&(u[m]=e.ajaxSettings[m]);r(u),u.crossDomain||(i=b.createElement("a"),i.href=u.url,i.href=i.href,u.crossDomain=S.protocol+"//"+S.host!=i.protocol+"//"+i.host),u.url||(u.url=t.location.toString()), +(a=u.url.indexOf("#"))>-1&&(u.url=u.url.slice(0,a)),d(u);var v=u.dataType,x=/\?.+=\?/.test(u.url);if(x&&(v="jsonp"),u.cache!==!1&&(n&&n.cache===!0||"script"!=v&&"jsonp"!=v)||(u.url=p(u.url,"_="+Date.now())),"jsonp"==v)return x||(u.url=p(u.url,u.jsonp?u.jsonp+"=?":u.jsonp===!1?"":"callback=?")),e.ajaxJSONP(u,y);var P,E=u.accepts[v],T={},w=function(t,e){T[t.toLowerCase()]=[t,e]},_=/^([\w-]+:)\/\//.test(u.url)?RegExp.$1:t.location.protocol,j=u.xhr(),k=j.setRequestHeader;if(y&&y.promise(j),u.crossDomain||w("X-Requested-With","XMLHttpRequest"),w("Accept",E||"*/*"),(E=u.mimeType||E)&&(E.indexOf(",")>-1&&(E=E.split(",",2)[0]),j.overrideMimeType&&j.overrideMimeType(E)),(u.contentType||u.contentType!==!1&&u.data&&"GET"!=u.type.toUpperCase())&&w("Content-Type",u.contentType||"application/x-www-form-urlencoded"),u.headers)for(g in u.headers)w(g,u.headers[g]);if(j.setRequestHeader=w,j.onreadystatechange=function(){if(4==j.readyState){j.onreadystatechange=f,clearTimeout(P);var t,n=!1;if(j.status>=200&&j.status<300||304==j.status||0==j.status&&"file:"==_){if(v=v||h(u.mimeType||j.getResponseHeader("content-type")),"arraybuffer"==j.responseType||"blob"==j.responseType)t=j.response;else{t=j.responseText;try{t=c(t,v,u),"script"==v?(0,eval)(t):"xml"==v?t=j.responseXML:"json"==v&&(t=C.test(t)?null:e.parseJSON(t))}catch(i){n=i}if(n)return l(n,"parsererror",j,u,y)}s(t,j,u,y)}else l(j.statusText||null,j.status?"error":"abort",j,u,y)}},o(j,u)===!1)return j.abort(),l(null,"abort",j,u,y),j;var L=!("async"in u)||u.async;if(j.open(u.type,u.url,L,u.username,u.password),u.xhrFields)for(g in u.xhrFields)j[g]=u.xhrFields[g];for(g in T)k.apply(j,T[g]);return u.timeout>0&&(P=setTimeout(function(){j.onreadystatechange=f,j.abort(),l(null,"timeout",j,u,y)},u.timeout)),j.send(u.data?u.data:null),j},e.get=function(){return e.ajax(y.apply(null,arguments))},e.post=function(){var t=y.apply(null,arguments);return t.type="POST",e.ajax(t)},e.getJSON=function(){var t=y.apply(null,arguments);return t.dataType="json",e.ajax(t)},e.fn.load=function(t,n,i){if(!this.length)return this;var r,a=this,o=t.split(/\s/),s=y(t,n,i),l=s.success;return o.length>1&&(s.url=o[0],r=o[1]),s.success=function(t){a.html(r?e("
    ").html(t.replace(P,"")).find(r):t),l&&l.apply(a,arguments)},e.ajax(s),this};var j=encodeURIComponent;e.param=function(t,n){var i=[];return i.add=function(t,n){e.isFunction(n)&&(n=n()),null==n&&(n=""),this.push(j(t)+"="+j(n))},v(i,t,n),i.join("&").replace(/%20/g,"+")}}(e),function(t){t.fn.serializeArray=function(){var e,n,i=[],r=function a(t){return t.forEach?t.forEach(a):void i.push({name:e,value:t})};return this[0]&&t.each(this[0].elements,function(i,a){n=a.type,e=a.name,e&&"fieldset"!=a.nodeName.toLowerCase()&&!a.disabled&&"submit"!=n&&"reset"!=n&&"button"!=n&&"file"!=n&&("radio"!=n&&"checkbox"!=n||a.checked)&&r(t(a).val())}),i},t.fn.serialize=function(){var t=[];return this.serializeArray().forEach(function(e){t.push(encodeURIComponent(e.name)+"="+encodeURIComponent(e.value))}),t.join("&")},t.fn.submit=function(e){if(0 in arguments)this.bind("submit",e);else if(this.length){var n=t.Event("submit");this.eq(0).trigger(n),n.isDefaultPrevented()||this.get(0).submit()}return this}}(e),function(){try{getComputedStyle(void 0)}catch(e){var n=getComputedStyle;t.getComputedStyle=function(t,e){try{return n(t,e)}catch(i){return null}}}}(),e})},function(t,e){"use strict";function n(t,e,n,r,a){var o=this,s=e,l=document.getElementById(t),u=l?l.innerHTML:t,a=void 0==a||a,c=[],f=function(){},h=function(t,e){return e||(t=t.replace(/>/g,">").replace(/"),!(u.indexOf(T)>-1&&u.indexOf(w)>-1))return u;var _,C=function(t,e){var n=e?"\n":"";g=e?"":g,x=e?"":x;var i=function(t){return t.replace(/([.*+?^=!:${}()|[\]\/\\])/g,"\\$1")}(w),r=new RegExp(m+"(?:(?!"+i+")[\\s\\S])*"+i+"|('+)","g");return u.replace(/)[\s\S])*-->/g,function(t){var e=v.length++;return v[e]=t,"mTpl_comment"+e+";"}).split("\\").join("\\\\").replace(/[\r]/g,g).replace(/[\n]/g,x).split(T).join(m).replace(r,function(t,e){return e?new Array(e.length+1).join("\r"):t}).replace(new RegExp(m+"=(.*?)"+w,"g"),"';"+n+" s+=mTpl_htmlEncode(String($1));"+n+" s+='").replace(new RegExp(m+"!=(.*?)"+w,"g"),"';"+n+" s+=mTpl_htmlEncode(String($1),true);"+n+" s+='").split(m).join("';"+n).split(w).join(n+" s+='").split("\r").join("\\'")},S=[];for(_ in s)S.push(_),c.push(s[_]);f=p(S,C(t)),a&&(i[t]={parsefn:f,propList:S})}var j;try{j=f.apply(o,c)}catch(k){f=p(S,C(t,!0)),j=f.apply(o,c)}return y(j)}Object.defineProperty(e,"__esModule",{value:!0}),e["default"]=n;var i={}},function(t,e,n){"use strict";function i(t){return t&&t.__esModule?t:{"default":t}}var r=n(1),a=i(r);a["default"].bind=function(t,e,n){t.__events||(t.__events={}),a["default"].isArray(e)||(e=[e]);for(var i=0;i
    />

    <%= curInfo.title %><%= curInfo.author %>

    • 00:00
    • 00:00
      <% for (var i = 0; i < data.length; i++) { %> <% var idx = i + 1; %> <% var item = data[i]; %>
    • <% if (i === 0) { %> class=cur <% } %>> <%= idx %> <%= item.title %> <%= item.author %>
    • <% } %>
    '},function(t,e){t.exports='
  • <%= idx %> <%= title %> <%= author %>
  • '}])}); //# sourceMappingURL=audio.min.js.map \ No newline at end of file diff --git a/dist/audio.min.js.map b/dist/audio.min.js.map index 6e877a5..7cf09ba 100644 --- a/dist/audio.min.js.map +++ b/dist/audio.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///audio.min.js","webpack:///webpack/bootstrap 9644cb9c799fd4823691","webpack:///./src/audio.js","webpack:///./src/lib/zepto.js","webpack:///./src/lib/render.js","webpack:///./src/lib/customEvent.js","webpack:///./src/audio.html","webpack:///./src/list.html"],"names":["root","factory","exports","module","define","amd","a","i","this","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","_interopRequireDefault","obj","__esModule","default","_classCallCheck","instance","Constructor","TypeError","Object","defineProperty","value","AudioPlayer","undefined","_typeof","Symbol","iterator","constructor","_createClass","defineProperties","target","props","length","descriptor","enumerable","configurable","writable","key","protoProps","staticProps","prototype","_zepto","_zepto2","_render","_render2","_customEvent","_audio","_audio2","_list","_list2","defaultConfig","isAutoplay","tpl","loopType","data","config","extend","init","_initStatus","_createAudio","_createPlayer","_cache","_setPlaybarPos","_setPlayListHeight","_initEvent","audio","document","createElement","setAttribute","src","play","body","appendChild","playStatus","playListStatus","playIdx","totalNum","playIcon","el","html","playTime","find","totalTime","playBar","loadedBar","playedBar","playPointer","playListBtn","playListWrap","playListItems","nextBtn","preBtn","cover","title","loopBtn","playBtn","coverPlayBtn","tempMovePlaybar","proxy","_movePlaybar","tempMouseupCb","_mouseupCb","playBarPos","getBoundingClientRect","playBarClientX","left","playBarWidth","width","playListHeight","height","css","_this","me","addEventListener","event","formatSeconds","duration","loadedPercent","buffered","end","trigger","song","nextPlay","switchPlay","togglePlay","window","on","assignPlay","_toggleOrderLoop","_mousedownCb","_togglePlayList","prePlay","idx","addClass","removeClass","type","push","append","currentTarget","songData","get","pause","attr","author","unbind","preventDefault","stopPropagation","clearPlayTimer","pointerClientX","clientX","touches","offsetX","curPercent","Math","min","changedTouches","currentTime","playTimer","startPlayTimer","songInfo","_this2","setInterval","playedPercent","clearInterval","seconds","minute","parseInt","second","actNum","num","rst","object","source","args","Array","slice","arguments","property","__WEBPACK_AMD_DEFINE_RESULT__","global","Zepto","String","class2type","toString","isFunction","isWindow","isDocument","nodeType","DOCUMENT_NODE","isObject","isPlainObject","getPrototypeOf","likeArray","$","compact","array","_filter","item","flatten","fn","concat","apply","dasherize","str","replace","toLowerCase","classRE","name","classCache","RegExp","maybeAddPx","cssNumber","defaultDisplay","nodeName","element","display","elementDisplay","getComputedStyle","getPropertyValue","parentNode","removeChild","_children","_slice","children","map","childNodes","node","Z","dom","selector","len","deep","isArray","filtered","nodes","filter","funcArg","context","arg","payload","removeAttribute","className","klass","svg","baseVal","deserializeValue","test","parseJSON","e","traverseNode","fun","classList","camelize","uniq","emptyArray","_concat","column-count","columns","font-weight","line-height","opacity","z-index","zoom","fragmentRE","singleTagRE","tagExpanderRE","rootNodeRE","capitalRE","methodAttributes","adjacencyOperators","table","tableRow","containers","tr","tbody","thead","tfoot","td","th","*","readyRE","simpleSelectorRE","zepto","tempParent","propMap","tabindex","readonly","for","class","maxlength","cellspacing","cellpadding","rowspan","colspan","usemap","frameborder","contenteditable","matches","matchesSelector","webkitMatchesSelector","mozMatchesSelector","oMatchesSelector","match","parent","temp","qsa","indexOf","chr","toUpperCase","fragment","properties","container","$1","innerHTML","each","isZ","trim","ready","shift","forEach","found","maybeID","maybeClass","nameOnly","isSimple","getElementById","getElementsByClassName","getElementsByTagName","querySelectorAll","contains","documentElement","isEmptyObject","isNumeric","val","Number","isNaN","isFinite","inArray","elem","camelCase","uuid","support","expr","noop","elements","callback","values","grep","JSON","parse","split","reduce","sort","splice","toArray","readyState","size","remove","every","not","add","is","excludes","has","eq","first","last","result","$this","some","closest","collection","_","parents","ancestors","pluck","contents","contentDocument","siblings","child","empty","show","style","replaceWith","newContent","before","wrap","structure","func","clone","index","wrapAll","cloneNode","wrapInner","self","unwrap","hide","toggle","setting","prev","next","_html","originHtml","text","_text","newText","textContent","join","getAttribute","removeAttr","attribute","prop","removeProp","attrName","multiple","selected","offset","coordinates","coords","parentOffset","offsetParent","top","pageXOffset","pageYOffset","round","computedStyle","removeProperty","cssText","hasClass","cls","newName","toggleClass","when","names","scrollTop","hasScrollTop","scrollTo","scrollX","scrollLeft","hasScrollLeft","scrollY","position","parseFloat","detach","dimension","dimensionProperty","operator","operatorIndex","inside","argType","arr","copyByClone","nextSibling","firstChild","parentInDocument","insertBefore","ownerDocument","defaultView","zid","_zid","findHandlers","ns","matcher","matcherFor","handlers","handler","sel","parts","eventCapture","captureSetting","del","focusinSupported","focus","realEvent","hover","events","delegator","capture","set","related","relatedTarget","compatible","isImmediatePropagationStopped","_args","removeEventListener","isDefaultPrevented","eventMethods","predicate","sourceMethod","returnTrue","returnFalse","timeStamp","Date","now","defaultPrevented","returnValue","getPreventDefault","createProxy","originalEvent","ignoreProperties","isString","specialEvents","blur","mouseenter","mouseleave","click","mousedown","mouseup","mousemove","proxyFn","unshift","bind","off","one","stopImmediatePropagation","delegate","undelegate","live","die","autoRemove","evt","liveFired","Event","dispatchEvent","triggerHandler","createEvent","bubbles","initEvent","triggerAndReturn","eventName","triggerGlobal","settings","ajaxStart","active","ajaxStop","ajaxBeforeSend","xhr","beforeSend","ajaxSuccess","deferred","status","success","resolveWith","ajaxComplete","ajaxError","error","rejectWith","complete","ajaxDataFilter","dataFilter","mimeToDataType","mime","htmlType","jsonType","scriptTypeRE","xmlTypeRE","appendQuery","url","query","serializeData","options","processData","param","traditional","dataType","parseArguments","serialize","params","scope","hash","jsonpID","rscript","blankRE","originAnchor","href","location","ajaxJSONP","ajax","responseData","abortTimeout","_callbackName","jsonpCallback","callbackName","script","originalCallback","abort","errorType","promise","clearTimeout","head","timeout","setTimeout","ajaxSettings","XMLHttpRequest","accepts","json","xml","crossDomain","cache","urlAnchor","hashIndex","Deferred","protocol","host","hasPlaceholder","jsonp","headers","setHeader","nativeSetHeader","setRequestHeader","mimeType","overrideMimeType","contentType","onreadystatechange","getResponseHeader","responseType","response","responseText","eval","responseXML","statusText","async","open","username","password","xhrFields","send","post","getJSON","load","escape","encodeURIComponent","serializeArray","field","disabled","checked","elm","submit","nativeGetComputedStyle","pseudoElement","mTpl","startSelector","endSelector","isCache","t","d","valueArr","htmlEncode","s","n","compileFn","strFormatTpl","Function","propArr","resetChar","recoverChar","r","l","mTpl_comment","list","propList","parsefn","b","formatTpl","isError","N","eb","reg","ev","f","__events","ret","evts","j"],"mappings":"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","file":"audio.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function() {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/","/*!\n * audioPlayer v0.0.1 (https://github.com/zhangchen2397/audioPlayer.git)\n * Copyright 2016, zhangchen2397@126.com\n * MIT license\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\texports.AudioPlayer = undefined;\n\t\n\tvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol ? \"symbol\" : typeof obj; };\n\t\n\tvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); /**\n\t * html5 audio player 音频播放器组件\n\t * 可调用封装好的api,包装各种皮肤的播放器\n\t * 提供(播放进度条,拖拽定位/快进/快退播放,连播/播放列表/循环播放,上下曲)\n\t * @date 2016-07-28\n\t * @author samczhang@tencent.com\n\t * --------------------------------------\n\t *\n\t * 对外调用接口及自定义事件\n\t * @method play 播放\n\t * @method pause 暂停\n\t * @method prePlay 上一首\n\t * @method nextPlay 下一首\n\t * @method switchPlay 指定列表索引播放\n\t * @method togglePlay 切换播放与暂停\n\t * @method setLoopType 设置循环播放方式\n\t * @method addtoPlayList 添加歌曲到播放列表\n\t *\n\t * @customEvent play 开始播放\n\t * @customEvent pause 暂停播放\n\t * @customEvent playing 播放中\n\t * @customEvent ended 播放结束\n\t * --------------------------------------\n\t *\n\t * 使用demo\n\t * new AudioPlayer({\n\t * data: [{\n\t * title: '曾经的你',\n\t * author: '许巍',\n\t * src: '/example/asset/music/once.mp3',\n\t * cover: '/example/asset/image/cover_once.jpeg'\n\t * }, {\n\t * title: 'You\\'re Beautiful',\n\t * author: 'James Blunt',\n\t * src: '/example/asset/music/you_are_beautiful.mp4',\n\t * cover: '/example/asset/image/cover_yab.jpg'\n\t * }, {\n\t * title: 'I\\'m Yours',\n\t * author: 'Jason Mraz',\n\t * src: '/example/asset/music/i_am_yours.mp4',\n\t * cover: '/example/asset/image/cover_iay.jpg'\n\t * }]\n\t * });\n\t * \n\t */\n\t\n\tvar _zepto = __webpack_require__(1);\n\t\n\tvar _zepto2 = _interopRequireDefault(_zepto);\n\t\n\tvar _render = __webpack_require__(2);\n\t\n\tvar _render2 = _interopRequireDefault(_render);\n\t\n\tvar _customEvent = __webpack_require__(3);\n\t\n\tvar _customEvent2 = _interopRequireDefault(_customEvent);\n\t\n\t__webpack_require__(4);\n\t\n\tvar _audio = __webpack_require__(12);\n\t\n\tvar _audio2 = _interopRequireDefault(_audio);\n\t\n\tvar _list = __webpack_require__(13);\n\t\n\tvar _list2 = _interopRequireDefault(_list);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\tfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\t\n\tvar defaultConfig = {\n\t id: 'player-wrap', //播放器容器id\n\t isAutoplay: true, //是否自动播放\n\t tpl: _audio2.default, //音频播放器模板\n\t\n\t /**\n\t * loopType {string} 播放循环方式\n\t * none: 不循环,\n\t * single: 单曲循环\n\t * order: 顺序循环\n\t */\n\t loopType: 'order',\n\t\n\t /**\n\t * data {array} 音频数据,数组的每一项为对象\n\t * title: 歌名\n\t * author: 作者\n\t * src: 音频地址\n\t * cover: 音频封面图\n\t */\n\t data: []\n\t};\n\t\n\tvar AudioPlayer = function () {\n\t function AudioPlayer(config) {\n\t _classCallCheck(this, AudioPlayer);\n\t\n\t this.config = this.extend({}, defaultConfig, config || {});\n\t this.init();\n\t }\n\t\n\t _createClass(AudioPlayer, [{\n\t key: 'init',\n\t value: function init() {\n\t this._initStatus();\n\t this._createAudio();\n\t this._createPlayer();\n\t this._cache();\n\t this._setPlaybarPos();\n\t this._setPlayListHeight();\n\t this._initEvent();\n\t }\n\t }, {\n\t key: '_createAudio',\n\t value: function _createAudio() {\n\t var me = this,\n\t config = this.config;\n\t\n\t this.audio = document.createElement('audio');\n\t this.audio.setAttribute('src', this.data[0].src);\n\t this.audio.setAttribute('preload', 'metadata');\n\t\n\t if (config.isAutoplay) {\n\t this.play();\n\t }\n\t\n\t document.body.appendChild(this.audio);\n\t }\n\t }, {\n\t key: '_initStatus',\n\t value: function _initStatus() {\n\t var me = this,\n\t config = this.config;\n\t\n\t this.playStatus = config.isAutoplay ? 'play' : 'pause';\n\t this.playListStatus = 'show';\n\t this.playIdx = 0;\n\t this.data = config.data;\n\t this.loopType = config.loopType;\n\t this.totalNum = this.data.length;\n\t }\n\t }, {\n\t key: '_createPlayer',\n\t value: function _createPlayer() {\n\t var me = this,\n\t config = this.config,\n\t playIcon = this.playStatus === 'play' ? 'pause' : 'play';\n\t\n\t this.el = (0, _zepto2.default)('#' + config.id);\n\t this.el.html((0, _render2.default)(config.tpl, {\n\t data: this.data,\n\t playIcon: playIcon\n\t }));\n\t }\n\t }, {\n\t key: '_cache',\n\t value: function _cache() {\n\t var me = this,\n\t config = this.config,\n\t el = this.el;\n\t\n\t //dom cache\n\t this.playTime = el.find('.play-time');\n\t this.totalTime = el.find('.total-time');\n\t this.playBar = el.find('.play-bar');\n\t this.loadedBar = el.find('.loaded');\n\t this.playedBar = el.find('.played');\n\t this.playPointer = el.find('.pointer');\n\t this.playListBtn = el.find('.icon-list');\n\t this.playListWrap = el.find('.play-list');\n\t this.playListItems = this.playListWrap.find('li');\n\t\n\t this.nextBtn = el.find('.icon-nextsong');\n\t this.preBtn = el.find('.icon-presong');\n\t this.cover = el.find('img.cover');\n\t this.title = el.find('.info h3');\n\t this.loopBtn = el.find('.icon-loop');\n\t this.playBtn = el.find('.play-btn');\n\t this.coverPlayBtn = el.find('.cover-play-btn');\n\t\n\t //event callback cache\n\t this.tempMovePlaybar = _zepto2.default.proxy(this._movePlaybar, this);\n\t this.tempMouseupCb = _zepto2.default.proxy(this._mouseupCb, this);\n\t }\n\t\n\t //设置及缓存播放进度条位置信息,方便计算百分比\n\t\n\t }, {\n\t key: '_setPlaybarPos',\n\t value: function _setPlaybarPos() {\n\t var playBarPos = this.playBar[0].getBoundingClientRect();\n\t this.playBarClientX = playBarPos.left;\n\t this.playBarWidth = playBarPos.width;\n\t }\n\t\n\t //初始化及缓存播放列表高度,做动画需要\n\t\n\t }, {\n\t key: '_setPlayListHeight',\n\t value: function _setPlayListHeight() {\n\t var playListWrap = this.playListWrap;\n\t this.playListHeight = playListWrap.height();\n\t playListWrap.css('height', this.playListHeight);\n\t }\n\t }, {\n\t key: '_initEvent',\n\t value: function _initEvent() {\n\t var _this = this;\n\t\n\t var me = this,\n\t config = this.config,\n\t playPointer = this.playPointer,\n\t audio = this.audio;\n\t\n\t audio.addEventListener('durationchange', function (event) {\n\t me.totalTime.html(me.formatSeconds(audio.duration));\n\t }, false);\n\t\n\t audio.addEventListener('progress', function (event) {\n\t var loadedPercent = audio.buffered.length ? audio.buffered.end(audio.buffered.length - 1) / audio.duration : 0;\n\t\n\t me.loadedBar.css('width', loadedPercent * 100 + '%');\n\t\n\t _zepto2.default.trigger(_this, 'playing', [{\n\t song: me.data[_this.playIdx],\n\t loadedPercent: loadedPercent\n\t }]);\n\t }, false);\n\t\n\t audio.addEventListener('ended', function (event) {\n\t switch (_this.loopType) {\n\t case 'order':\n\t _this.nextPlay();\n\t break;\n\t case 'single':\n\t _this.switchPlay(_this.playIdx);\n\t break;\n\t case 'none':\n\t _this.togglePlay();\n\t break;\n\t default:\n\t break;\n\t }\n\t\n\t _zepto2.default.trigger(_this, 'ended', [{\n\t song: me.data[_this.playIdx]\n\t }]);\n\t }, false);\n\t\n\t (0, _zepto2.default)(window).on('resize', _zepto2.default.proxy(this._setPlaybarPos, this));\n\t (0, _zepto2.default)(window).on('orientationchange', _zepto2.default.proxy(this._setPlaybarPos, this));\n\t\n\t this.el.on('click', '.play-btn, .cover-play-btn', _zepto2.default.proxy(this.togglePlay, this));\n\t this.playBar.on('click', _zepto2.default.proxy(this.assignPlay, this));\n\t this.loopBtn.on('click', _zepto2.default.proxy(this._toggleOrderLoop, this));\n\t\n\t playPointer.on('touchmove', _zepto2.default.proxy(this._movePlaybar, this));\n\t playPointer.on('touchend', _zepto2.default.proxy(this.assignPlay, this));\n\t playPointer.on('mousedown', _zepto2.default.proxy(this._mousedownCb, this));\n\t\n\t this.playListBtn.on('click', _zepto2.default.proxy(this._togglePlayList, this));\n\t this.playListWrap.on('click', 'li', _zepto2.default.proxy(this.switchPlay, this));\n\t\n\t this.preBtn.on('click', _zepto2.default.proxy(this.prePlay, this));\n\t this.nextBtn.on('click', _zepto2.default.proxy(this.nextPlay, this));\n\t }\n\t }, {\n\t key: 'prePlay',\n\t value: function prePlay() {\n\t var idx = this.playIdx - 1;\n\t if (idx < 0) {\n\t idx = this.totalNum - 1;\n\t }\n\t\n\t this.switchPlay(idx);\n\t }\n\t }, {\n\t key: 'nextPlay',\n\t value: function nextPlay() {\n\t var idx = this.playIdx + 1;\n\t if (idx > this.totalNum - 1) {\n\t idx = 0;\n\t }\n\t\n\t this.switchPlay(idx);\n\t }\n\t }, {\n\t key: '_toggleOrderLoop',\n\t value: function _toggleOrderLoop(event) {\n\t switch (this.loopType) {\n\t case 'order':\n\t this.loopType = 'none';\n\t this.loopBtn.addClass('gray');\n\t break;\n\t case 'none':\n\t this.loopType = 'order';\n\t this.loopBtn.removeClass('gray');\n\t break;\n\t default:\n\t break;\n\t }\n\t }\n\t\n\t /**\n\t * 设置循环播放方式\n\t * type {string} 循环播放方式\n\t * none: 不循环\n\t * order: 顺序循环\n\t * single: 单曲循环\n\t */\n\t\n\t }, {\n\t key: 'setLoopType',\n\t value: function setLoopType(type) {\n\t this.loopType = type;\n\t }\n\t\n\t /**\n\t * 添加新歌曲到播放列表\n\t * song {object} 需要添加的歌曲对象\n\t * title: 歌名\n\t * author: 作者\n\t * src: 音频地址\n\t * cover: 音频封面图\n\t */\n\t\n\t }, {\n\t key: 'addtoPlayList',\n\t value: function addtoPlayList(song) {\n\t this.totalNum++;\n\t this.data.push(song);\n\t\n\t //render list template\n\t song.idx = this.totalNum;\n\t this.playListWrap.append((0, _render2.default)(_list2.default, song));\n\t\n\t _zepto2.default.trigger(this, 'afterAddtoPlayList', [{\n\t song: song\n\t }]);\n\t }\n\t\n\t /**\n\t * 歌曲播放切换\n\t * event {event object | idx}\n\t * 接收参数有两种方式\n\t * 一种通过事件event找到需要播放的idx\n\t * 直接传入需要播放的idx\n\t * idx 从0开始\n\t */\n\t\n\t }, {\n\t key: 'switchPlay',\n\t value: function switchPlay(event) {\n\t var me = this,\n\t config = this.config,\n\t playListItems = this.playListItems,\n\t idx = event;\n\t\n\t if ((typeof event === 'undefined' ? 'undefined' : _typeof(event)) === 'object') {\n\t idx = (0, _zepto2.default)(event.currentTarget).data('idx');\n\t }\n\t\n\t if (this.playIdx === idx) return;\n\t\n\t var songData = this.data[idx];\n\t playListItems.removeClass('cur');\n\t (0, _zepto2.default)(playListItems.get(idx)).addClass('cur');\n\t\n\t this.pause();\n\t this.audio.setAttribute('src', songData.src);\n\t this.playIdx = idx;\n\t this.play();\n\t\n\t this.cover.attr('src', songData.cover);\n\t this.title.html(songData.title + '' + songData.author + '');\n\t }\n\t }, {\n\t key: '_togglePlayList',\n\t value: function _togglePlayList(event) {\n\t var me = this,\n\t config = this.config,\n\t playListWrap = this.playListWrap;\n\t\n\t if (this.playListStatus === 'show') {\n\t playListWrap.css('height', 0);\n\t this.playListStatus = 'hide';\n\t } else {\n\t playListWrap.css('height', this.playListHeight);\n\t this.playListStatus = 'show';\n\t }\n\t }\n\t }, {\n\t key: '_mousedownCb',\n\t value: function _mousedownCb() {\n\t var me = this;\n\t var playPointer = this.playPointer;\n\t playPointer.on('mousemove', this.tempMovePlaybar);\n\t playPointer.on('mouseup', this.tempMouseupCb);\n\t }\n\t }, {\n\t key: '_mouseupCb',\n\t value: function _mouseupCb(event) {\n\t var me = this;\n\t var playPointer = this.playPointer;\n\t\n\t playPointer.unbind('mousemove', this.tempMovePlaybar);\n\t playPointer.unbind('mouseup', this.tempMouseupCb);\n\t\n\t this.assignPlay(event);\n\t }\n\t }, {\n\t key: '_movePlaybar',\n\t value: function _movePlaybar(event) {\n\t event.preventDefault();\n\t event.stopPropagation();\n\t\n\t this.clearPlayTimer();\n\t\n\t //根据不同的事件取相应的坐标值\n\t var pointerClientX = event.clientX || event.touches[0].clientX;\n\t var offsetX = pointerClientX - this.playBarClientX;\n\t var curPercent = Math.min(offsetX / this.playBarWidth, 1);\n\t\n\t this.playedBar.css('width', curPercent * 100 + '%');\n\t this.playTime.html(this.formatSeconds(this.audio.duration * curPercent));\n\t }\n\t }, {\n\t key: 'assignPlay',\n\t value: function assignPlay(event) {\n\t event.preventDefault();\n\t event.stopPropagation();\n\t\n\t var audio = this.audio;\n\t\n\t //分点击事件和touchend事件,获取坐标的方式不一样\n\t var pointerClientX = event.clientX || event.changedTouches[0].clientX;\n\t var curPercent = (pointerClientX - this.playBarClientX) / this.playBarWidth;\n\t\n\t //指定位置播放,立即更新播放指示点\n\t //已播放时间及已播放进度条通过playTimer自动更新\n\t audio.currentTime = audio.duration * curPercent;\n\t this.playedBar.css('width', curPercent * 100 + '%');\n\t\n\t //如果是通过拖拽播放,需要重新开启playtimer\n\t if (!this.playTimer) {\n\t this.startPlayTimer();\n\t }\n\t }\n\t }, {\n\t key: 'play',\n\t value: function play() {\n\t var me = this,\n\t config = this.config,\n\t audio = this.audio;\n\t\n\t audio.play();\n\t this.playStatus = 'play';\n\t this.startPlayTimer();\n\t\n\t if (this.el) {\n\t this.playBtn.addClass('icon-pause');\n\t this.coverPlayBtn.addClass('icon-pause');\n\t this.playBtn.removeClass('icon-play');\n\t this.coverPlayBtn.removeClass('icon-play');\n\t }\n\t\n\t _zepto2.default.trigger(this, 'play', [{\n\t song: me.data[this.playIdx]\n\t }]);\n\t }\n\t }, {\n\t key: 'pause',\n\t value: function pause() {\n\t var me = this,\n\t config = this.config,\n\t audio = this.audio;\n\t\n\t audio.pause();\n\t this.playStatus = 'pause';\n\t\n\t this.clearPlayTimer();\n\t\n\t this.playBtn.removeClass('icon-pause');\n\t this.coverPlayBtn.removeClass('icon-pause');\n\t this.playBtn.addClass('icon-play');\n\t this.coverPlayBtn.addClass('icon-play');\n\t\n\t _zepto2.default.trigger(this, 'pause', [{\n\t songInfo: me.data[this.playIdx]\n\t }]);\n\t }\n\t }, {\n\t key: 'startPlayTimer',\n\t value: function startPlayTimer() {\n\t var _this2 = this;\n\t\n\t var audio = this.audio;\n\t\n\t this.playTimer = setInterval(function () {\n\t var playedPercent = audio.currentTime / audio.duration;\n\t _this2.playedBar.css('width', playedPercent * 100 + '%');\n\t _this2.playTime.html(_this2.formatSeconds(audio.currentTime));\n\t }, 500);\n\t }\n\t }, {\n\t key: 'clearPlayTimer',\n\t value: function clearPlayTimer() {\n\t if (this.playTimer) {\n\t clearInterval(this.playTimer);\n\t this.playTimer = null;\n\t }\n\t }\n\t }, {\n\t key: 'togglePlay',\n\t value: function togglePlay(event) {\n\t if (this.playStatus === 'play') {\n\t this.pause();\n\t } else {\n\t this.play();\n\t }\n\t }\n\t }, {\n\t key: 'formatSeconds',\n\t value: function formatSeconds(seconds) {\n\t var minute = parseInt(seconds / 60, 10);\n\t var second = parseInt(seconds - minute * 60, 10);\n\t var actNum = function actNum(num) {\n\t var rst = '';\n\t if (num < 1) {\n\t rst = '00';\n\t } else if (num >= 1 && num < 10) {\n\t rst = '0' + num;\n\t } else {\n\t rst = num;\n\t }\n\t\n\t return rst;\n\t };\n\t\n\t minute = actNum(minute);\n\t second = actNum(second);\n\t\n\t return minute + ':' + second;\n\t }\n\t }, {\n\t key: 'extend',\n\t value: function extend(object) {\n\t var args = Array.prototype.slice.call(arguments, 1);\n\t\n\t for (var i = 0, source; source = args[i]; i++) {\n\t if (!source) continue;\n\t for (var property in source) {\n\t object[property] = source[property];\n\t }\n\t }\n\t\n\t return object;\n\t }\n\t }]);\n\t\n\t return AudioPlayer;\n\t}();\n\t\n\texports.AudioPlayer = AudioPlayer;\n\n/***/ },\n/* 1 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_RESULT__;'use strict';\n\t\n\tvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol ? \"symbol\" : typeof obj; };\n\t\n\t/* Zepto v1.2.0 - zepto event ajax form ie - zeptojs.com/license */\n\t(function (global, factory) {\n\t if (true) !(__WEBPACK_AMD_DEFINE_RESULT__ = function () {\n\t return factory(global);\n\t }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));else factory(global);\n\t})(typeof window !== \"undefined\" ? window : undefined, function (window) {\n\t var Zepto = function () {\n\t var undefined,\n\t key,\n\t $,\n\t classList,\n\t emptyArray = [],\n\t _concat = emptyArray.concat,\n\t _filter = emptyArray.filter,\n\t _slice = emptyArray.slice,\n\t document = window.document,\n\t elementDisplay = {},\n\t classCache = {},\n\t cssNumber = { 'column-count': 1, 'columns': 1, 'font-weight': 1, 'line-height': 1, 'opacity': 1, 'z-index': 1, 'zoom': 1 },\n\t fragmentRE = /^\\s*<(\\w+|!)[^>]*>/,\n\t singleTagRE = /^<(\\w+)\\s*\\/?>(?:<\\/\\1>|)$/,\n\t tagExpanderRE = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:]+)[^>]*)\\/>/ig,\n\t rootNodeRE = /^(?:body|html)$/i,\n\t capitalRE = /([A-Z])/g,\n\t\n\t\n\t // special attributes that should be get/set via method calls\n\t methodAttributes = ['val', 'css', 'html', 'text', 'data', 'width', 'height', 'offset'],\n\t adjacencyOperators = ['after', 'prepend', 'before', 'append'],\n\t table = document.createElement('table'),\n\t tableRow = document.createElement('tr'),\n\t containers = {\n\t 'tr': document.createElement('tbody'),\n\t 'tbody': table, 'thead': table, 'tfoot': table,\n\t 'td': tableRow, 'th': tableRow,\n\t '*': document.createElement('div')\n\t },\n\t readyRE = /complete|loaded|interactive/,\n\t simpleSelectorRE = /^[\\w-]*$/,\n\t class2type = {},\n\t toString = class2type.toString,\n\t zepto = {},\n\t camelize,\n\t uniq,\n\t tempParent = document.createElement('div'),\n\t propMap = {\n\t 'tabindex': 'tabIndex',\n\t 'readonly': 'readOnly',\n\t 'for': 'htmlFor',\n\t 'class': 'className',\n\t 'maxlength': 'maxLength',\n\t 'cellspacing': 'cellSpacing',\n\t 'cellpadding': 'cellPadding',\n\t 'rowspan': 'rowSpan',\n\t 'colspan': 'colSpan',\n\t 'usemap': 'useMap',\n\t 'frameborder': 'frameBorder',\n\t 'contenteditable': 'contentEditable'\n\t },\n\t isArray = Array.isArray || function (object) {\n\t return object instanceof Array;\n\t };\n\t\n\t zepto.matches = function (element, selector) {\n\t if (!selector || !element || element.nodeType !== 1) return false;\n\t var matchesSelector = element.matches || element.webkitMatchesSelector || element.mozMatchesSelector || element.oMatchesSelector || element.matchesSelector;\n\t if (matchesSelector) return matchesSelector.call(element, selector);\n\t // fall back to performing a selector:\n\t var match,\n\t parent = element.parentNode,\n\t temp = !parent;\n\t if (temp) (parent = tempParent).appendChild(element);\n\t match = ~zepto.qsa(parent, selector).indexOf(element);\n\t temp && tempParent.removeChild(element);\n\t return match;\n\t };\n\t\n\t function type(obj) {\n\t return obj == null ? String(obj) : class2type[toString.call(obj)] || \"object\";\n\t }\n\t\n\t function isFunction(value) {\n\t return type(value) == \"function\";\n\t }\n\t function isWindow(obj) {\n\t return obj != null && obj == obj.window;\n\t }\n\t function isDocument(obj) {\n\t return obj != null && obj.nodeType == obj.DOCUMENT_NODE;\n\t }\n\t function isObject(obj) {\n\t return type(obj) == \"object\";\n\t }\n\t function isPlainObject(obj) {\n\t return isObject(obj) && !isWindow(obj) && Object.getPrototypeOf(obj) == Object.prototype;\n\t }\n\t\n\t function likeArray(obj) {\n\t var length = !!obj && 'length' in obj && obj.length,\n\t type = $.type(obj);\n\t\n\t return 'function' != type && !isWindow(obj) && ('array' == type || length === 0 || typeof length == 'number' && length > 0 && length - 1 in obj);\n\t }\n\t\n\t function compact(array) {\n\t return _filter.call(array, function (item) {\n\t return item != null;\n\t });\n\t }\n\t function flatten(array) {\n\t return array.length > 0 ? $.fn.concat.apply([], array) : array;\n\t }\n\t camelize = function camelize(str) {\n\t return str.replace(/-+(.)?/g, function (match, chr) {\n\t return chr ? chr.toUpperCase() : '';\n\t });\n\t };\n\t function dasherize(str) {\n\t return str.replace(/::/g, '/').replace(/([A-Z]+)([A-Z][a-z])/g, '$1_$2').replace(/([a-z\\d])([A-Z])/g, '$1_$2').replace(/_/g, '-').toLowerCase();\n\t }\n\t uniq = function uniq(array) {\n\t return _filter.call(array, function (item, idx) {\n\t return array.indexOf(item) == idx;\n\t });\n\t };\n\t\n\t function classRE(name) {\n\t return name in classCache ? classCache[name] : classCache[name] = new RegExp('(^|\\\\s)' + name + '(\\\\s|$)');\n\t }\n\t\n\t function maybeAddPx(name, value) {\n\t return typeof value == \"number\" && !cssNumber[dasherize(name)] ? value + \"px\" : value;\n\t }\n\t\n\t function defaultDisplay(nodeName) {\n\t var element, display;\n\t if (!elementDisplay[nodeName]) {\n\t element = document.createElement(nodeName);\n\t document.body.appendChild(element);\n\t display = getComputedStyle(element, '').getPropertyValue(\"display\");\n\t element.parentNode.removeChild(element);\n\t display == \"none\" && (display = \"block\");\n\t elementDisplay[nodeName] = display;\n\t }\n\t return elementDisplay[nodeName];\n\t }\n\t\n\t function _children(element) {\n\t return 'children' in element ? _slice.call(element.children) : $.map(element.childNodes, function (node) {\n\t if (node.nodeType == 1) return node;\n\t });\n\t }\n\t\n\t function Z(dom, selector) {\n\t var i,\n\t len = dom ? dom.length : 0;\n\t for (i = 0; i < len; i++) {\n\t this[i] = dom[i];\n\t }this.length = len;\n\t this.selector = selector || '';\n\t }\n\t\n\t // `$.zepto.fragment` takes a html string and an optional tag name\n\t // to generate DOM nodes from the given html string.\n\t // The generated DOM nodes are returned as an array.\n\t // This function can be overridden in plugins for example to make\n\t // it compatible with browsers that don't support the DOM fully.\n\t zepto.fragment = function (html, name, properties) {\n\t var dom, nodes, container;\n\t\n\t // A special case optimization for a single tag\n\t if (singleTagRE.test(html)) dom = $(document.createElement(RegExp.$1));\n\t\n\t if (!dom) {\n\t if (html.replace) html = html.replace(tagExpanderRE, \"<$1>\");\n\t if (name === undefined) name = fragmentRE.test(html) && RegExp.$1;\n\t if (!(name in containers)) name = '*';\n\t\n\t container = containers[name];\n\t container.innerHTML = '' + html;\n\t dom = $.each(_slice.call(container.childNodes), function () {\n\t container.removeChild(this);\n\t });\n\t }\n\t\n\t if (isPlainObject(properties)) {\n\t nodes = $(dom);\n\t $.each(properties, function (key, value) {\n\t if (methodAttributes.indexOf(key) > -1) nodes[key](value);else nodes.attr(key, value);\n\t });\n\t }\n\t\n\t return dom;\n\t };\n\t\n\t // `$.zepto.Z` swaps out the prototype of the given `dom` array\n\t // of nodes with `$.fn` and thus supplying all the Zepto functions\n\t // to the array. This method can be overridden in plugins.\n\t zepto.Z = function (dom, selector) {\n\t return new Z(dom, selector);\n\t };\n\t\n\t // `$.zepto.isZ` should return `true` if the given object is a Zepto\n\t // collection. This method can be overridden in plugins.\n\t zepto.isZ = function (object) {\n\t return object instanceof zepto.Z;\n\t };\n\t\n\t // `$.zepto.init` is Zepto's counterpart to jQuery's `$.fn.init` and\n\t // takes a CSS selector and an optional context (and handles various\n\t // special cases).\n\t // This method can be overridden in plugins.\n\t zepto.init = function (selector, context) {\n\t var dom;\n\t // If nothing given, return an empty Zepto collection\n\t if (!selector) return zepto.Z();\n\t // Optimize for string selectors\n\t else if (typeof selector == 'string') {\n\t selector = selector.trim();\n\t // If it's a html fragment, create nodes from it\n\t // Note: In both Chrome 21 and Firefox 15, DOM error 12\n\t // is thrown if the fragment doesn't begin with <\n\t if (selector[0] == '<' && fragmentRE.test(selector)) dom = zepto.fragment(selector, RegExp.$1, context), selector = null;\n\t // If there's a context, create a collection on that context first, and select\n\t // nodes from there\n\t else if (context !== undefined) return $(context).find(selector);\n\t // If it's a CSS selector, use it to select nodes.\n\t else dom = zepto.qsa(document, selector);\n\t }\n\t // If a function is given, call it when the DOM is ready\n\t else if (isFunction(selector)) return $(document).ready(selector);\n\t // If a Zepto collection is given, just return it\n\t else if (zepto.isZ(selector)) return selector;else {\n\t // normalize array if an array of nodes is given\n\t if (isArray(selector)) dom = compact(selector);\n\t // Wrap DOM nodes.\n\t else if (isObject(selector)) dom = [selector], selector = null;\n\t // If it's a html fragment, create nodes from it\n\t else if (fragmentRE.test(selector)) dom = zepto.fragment(selector.trim(), RegExp.$1, context), selector = null;\n\t // If there's a context, create a collection on that context first, and select\n\t // nodes from there\n\t else if (context !== undefined) return $(context).find(selector);\n\t // And last but no least, if it's a CSS selector, use it to select nodes.\n\t else dom = zepto.qsa(document, selector);\n\t }\n\t // create a new Zepto collection from the nodes found\n\t return zepto.Z(dom, selector);\n\t };\n\t\n\t // `$` will be the base `Zepto` object. When calling this\n\t // function just call `$.zepto.init, which makes the implementation\n\t // details of selecting nodes and creating Zepto collections\n\t // patchable in plugins.\n\t $ = function $(selector, context) {\n\t return zepto.init(selector, context);\n\t };\n\t\n\t function extend(target, source, deep) {\n\t for (key in source) {\n\t if (deep && (isPlainObject(source[key]) || isArray(source[key]))) {\n\t if (isPlainObject(source[key]) && !isPlainObject(target[key])) target[key] = {};\n\t if (isArray(source[key]) && !isArray(target[key])) target[key] = [];\n\t extend(target[key], source[key], deep);\n\t } else if (source[key] !== undefined) target[key] = source[key];\n\t }\n\t }\n\t\n\t // Copy all but undefined properties from one or more\n\t // objects to the `target` object.\n\t $.extend = function (target) {\n\t var deep,\n\t args = _slice.call(arguments, 1);\n\t if (typeof target == 'boolean') {\n\t deep = target;\n\t target = args.shift();\n\t }\n\t args.forEach(function (arg) {\n\t extend(target, arg, deep);\n\t });\n\t return target;\n\t };\n\t\n\t // `$.zepto.qsa` is Zepto's CSS selector implementation which\n\t // uses `document.querySelectorAll` and optimizes for some special cases, like `#id`.\n\t // This method can be overridden in plugins.\n\t zepto.qsa = function (element, selector) {\n\t var found,\n\t maybeID = selector[0] == '#',\n\t maybeClass = !maybeID && selector[0] == '.',\n\t nameOnly = maybeID || maybeClass ? selector.slice(1) : selector,\n\t // Ensure that a 1 char tag name still gets checked\n\t isSimple = simpleSelectorRE.test(nameOnly);\n\t return element.getElementById && isSimple && maybeID ? // Safari DocumentFragment doesn't have getElementById\n\t (found = element.getElementById(nameOnly)) ? [found] : [] : element.nodeType !== 1 && element.nodeType !== 9 && element.nodeType !== 11 ? [] : _slice.call(isSimple && !maybeID && element.getElementsByClassName ? // DocumentFragment doesn't have getElementsByClassName/TagName\n\t maybeClass ? element.getElementsByClassName(nameOnly) : // If it's simple, it could be a class\n\t element.getElementsByTagName(selector) : // Or a tag\n\t element.querySelectorAll(selector) // Or it's not simple, and we need to query all\n\t );\n\t };\n\t\n\t function filtered(nodes, selector) {\n\t return selector == null ? $(nodes) : $(nodes).filter(selector);\n\t }\n\t\n\t $.contains = document.documentElement.contains ? function (parent, node) {\n\t return parent !== node && parent.contains(node);\n\t } : function (parent, node) {\n\t while (node && (node = node.parentNode)) {\n\t if (node === parent) return true;\n\t }return false;\n\t };\n\t\n\t function funcArg(context, arg, idx, payload) {\n\t return isFunction(arg) ? arg.call(context, idx, payload) : arg;\n\t }\n\t\n\t function setAttribute(node, name, value) {\n\t value == null ? node.removeAttribute(name) : node.setAttribute(name, value);\n\t }\n\t\n\t // access className property while respecting SVGAnimatedString\n\t function className(node, value) {\n\t var klass = node.className || '',\n\t svg = klass && klass.baseVal !== undefined;\n\t\n\t if (value === undefined) return svg ? klass.baseVal : klass;\n\t svg ? klass.baseVal = value : node.className = value;\n\t }\n\t\n\t // \"true\" => true\n\t // \"false\" => false\n\t // \"null\" => null\n\t // \"42\" => 42\n\t // \"42.5\" => 42.5\n\t // \"08\" => \"08\"\n\t // JSON => parse if valid\n\t // String => self\n\t function deserializeValue(value) {\n\t try {\n\t return value ? value == \"true\" || (value == \"false\" ? false : value == \"null\" ? null : +value + \"\" == value ? +value : /^[\\[\\{]/.test(value) ? $.parseJSON(value) : value) : value;\n\t } catch (e) {\n\t return value;\n\t }\n\t }\n\t\n\t $.type = type;\n\t $.isFunction = isFunction;\n\t $.isWindow = isWindow;\n\t $.isArray = isArray;\n\t $.isPlainObject = isPlainObject;\n\t\n\t $.isEmptyObject = function (obj) {\n\t var name;\n\t for (name in obj) {\n\t return false;\n\t }return true;\n\t };\n\t\n\t $.isNumeric = function (val) {\n\t var num = Number(val),\n\t type = typeof val === 'undefined' ? 'undefined' : _typeof(val);\n\t return val != null && type != 'boolean' && (type != 'string' || val.length) && !isNaN(num) && isFinite(num) || false;\n\t };\n\t\n\t $.inArray = function (elem, array, i) {\n\t return emptyArray.indexOf.call(array, elem, i);\n\t };\n\t\n\t $.camelCase = camelize;\n\t $.trim = function (str) {\n\t return str == null ? \"\" : String.prototype.trim.call(str);\n\t };\n\t\n\t // plugin compatibility\n\t $.uuid = 0;\n\t $.support = {};\n\t $.expr = {};\n\t $.noop = function () {};\n\t\n\t $.map = function (elements, callback) {\n\t var value,\n\t values = [],\n\t i,\n\t key;\n\t if (likeArray(elements)) for (i = 0; i < elements.length; i++) {\n\t value = callback(elements[i], i);\n\t if (value != null) values.push(value);\n\t } else for (key in elements) {\n\t value = callback(elements[key], key);\n\t if (value != null) values.push(value);\n\t }\n\t return flatten(values);\n\t };\n\t\n\t $.each = function (elements, callback) {\n\t var i, key;\n\t if (likeArray(elements)) {\n\t for (i = 0; i < elements.length; i++) {\n\t if (callback.call(elements[i], i, elements[i]) === false) return elements;\n\t }\n\t } else {\n\t for (key in elements) {\n\t if (callback.call(elements[key], key, elements[key]) === false) return elements;\n\t }\n\t }\n\t\n\t return elements;\n\t };\n\t\n\t $.grep = function (elements, callback) {\n\t return _filter.call(elements, callback);\n\t };\n\t\n\t if (window.JSON) $.parseJSON = JSON.parse;\n\t\n\t // Populate the class2type map\n\t $.each(\"Boolean Number String Function Array Date RegExp Object Error\".split(\" \"), function (i, name) {\n\t class2type[\"[object \" + name + \"]\"] = name.toLowerCase();\n\t });\n\t\n\t // Define methods that will be available on all\n\t // Zepto collections\n\t $.fn = {\n\t constructor: zepto.Z,\n\t length: 0,\n\t\n\t // Because a collection acts like an array\n\t // copy over these useful array functions.\n\t forEach: emptyArray.forEach,\n\t reduce: emptyArray.reduce,\n\t push: emptyArray.push,\n\t sort: emptyArray.sort,\n\t splice: emptyArray.splice,\n\t indexOf: emptyArray.indexOf,\n\t concat: function concat() {\n\t var i,\n\t value,\n\t args = [];\n\t for (i = 0; i < arguments.length; i++) {\n\t value = arguments[i];\n\t args[i] = zepto.isZ(value) ? value.toArray() : value;\n\t }\n\t return _concat.apply(zepto.isZ(this) ? this.toArray() : this, args);\n\t },\n\t\n\t // `map` and `slice` in the jQuery API work differently\n\t // from their array counterparts\n\t map: function map(fn) {\n\t return $($.map(this, function (el, i) {\n\t return fn.call(el, i, el);\n\t }));\n\t },\n\t slice: function slice() {\n\t return $(_slice.apply(this, arguments));\n\t },\n\t\n\t ready: function ready(callback) {\n\t // need to check if document.body exists for IE as that browser reports\n\t // document ready when it hasn't yet created the body element\n\t if (readyRE.test(document.readyState) && document.body) callback($);else document.addEventListener('DOMContentLoaded', function () {\n\t callback($);\n\t }, false);\n\t return this;\n\t },\n\t get: function get(idx) {\n\t return idx === undefined ? _slice.call(this) : this[idx >= 0 ? idx : idx + this.length];\n\t },\n\t toArray: function toArray() {\n\t return this.get();\n\t },\n\t size: function size() {\n\t return this.length;\n\t },\n\t remove: function remove() {\n\t return this.each(function () {\n\t if (this.parentNode != null) this.parentNode.removeChild(this);\n\t });\n\t },\n\t each: function each(callback) {\n\t emptyArray.every.call(this, function (el, idx) {\n\t return callback.call(el, idx, el) !== false;\n\t });\n\t return this;\n\t },\n\t filter: function filter(selector) {\n\t if (isFunction(selector)) return this.not(this.not(selector));\n\t return $(_filter.call(this, function (element) {\n\t return zepto.matches(element, selector);\n\t }));\n\t },\n\t add: function add(selector, context) {\n\t return $(uniq(this.concat($(selector, context))));\n\t },\n\t is: function is(selector) {\n\t return this.length > 0 && zepto.matches(this[0], selector);\n\t },\n\t not: function not(selector) {\n\t var nodes = [];\n\t if (isFunction(selector) && selector.call !== undefined) this.each(function (idx) {\n\t if (!selector.call(this, idx)) nodes.push(this);\n\t });else {\n\t var excludes = typeof selector == 'string' ? this.filter(selector) : likeArray(selector) && isFunction(selector.item) ? _slice.call(selector) : $(selector);\n\t this.forEach(function (el) {\n\t if (excludes.indexOf(el) < 0) nodes.push(el);\n\t });\n\t }\n\t return $(nodes);\n\t },\n\t has: function has(selector) {\n\t return this.filter(function () {\n\t return isObject(selector) ? $.contains(this, selector) : $(this).find(selector).size();\n\t });\n\t },\n\t eq: function eq(idx) {\n\t return idx === -1 ? this.slice(idx) : this.slice(idx, +idx + 1);\n\t },\n\t first: function first() {\n\t var el = this[0];\n\t return el && !isObject(el) ? el : $(el);\n\t },\n\t last: function last() {\n\t var el = this[this.length - 1];\n\t return el && !isObject(el) ? el : $(el);\n\t },\n\t find: function find(selector) {\n\t var result,\n\t $this = this;\n\t if (!selector) result = $();else if ((typeof selector === 'undefined' ? 'undefined' : _typeof(selector)) == 'object') result = $(selector).filter(function () {\n\t var node = this;\n\t return emptyArray.some.call($this, function (parent) {\n\t return $.contains(parent, node);\n\t });\n\t });else if (this.length == 1) result = $(zepto.qsa(this[0], selector));else result = this.map(function () {\n\t return zepto.qsa(this, selector);\n\t });\n\t return result;\n\t },\n\t closest: function closest(selector, context) {\n\t var nodes = [],\n\t collection = (typeof selector === 'undefined' ? 'undefined' : _typeof(selector)) == 'object' && $(selector);\n\t this.each(function (_, node) {\n\t while (node && !(collection ? collection.indexOf(node) >= 0 : zepto.matches(node, selector))) {\n\t node = node !== context && !isDocument(node) && node.parentNode;\n\t }if (node && nodes.indexOf(node) < 0) nodes.push(node);\n\t });\n\t return $(nodes);\n\t },\n\t parents: function parents(selector) {\n\t var ancestors = [],\n\t nodes = this;\n\t while (nodes.length > 0) {\n\t nodes = $.map(nodes, function (node) {\n\t if ((node = node.parentNode) && !isDocument(node) && ancestors.indexOf(node) < 0) {\n\t ancestors.push(node);\n\t return node;\n\t }\n\t });\n\t }return filtered(ancestors, selector);\n\t },\n\t parent: function parent(selector) {\n\t return filtered(uniq(this.pluck('parentNode')), selector);\n\t },\n\t children: function children(selector) {\n\t return filtered(this.map(function () {\n\t return _children(this);\n\t }), selector);\n\t },\n\t contents: function contents() {\n\t return this.map(function () {\n\t return this.contentDocument || _slice.call(this.childNodes);\n\t });\n\t },\n\t siblings: function siblings(selector) {\n\t return filtered(this.map(function (i, el) {\n\t return _filter.call(_children(el.parentNode), function (child) {\n\t return child !== el;\n\t });\n\t }), selector);\n\t },\n\t empty: function empty() {\n\t return this.each(function () {\n\t this.innerHTML = '';\n\t });\n\t },\n\t // `pluck` is borrowed from Prototype.js\n\t pluck: function pluck(property) {\n\t return $.map(this, function (el) {\n\t return el[property];\n\t });\n\t },\n\t show: function show() {\n\t return this.each(function () {\n\t this.style.display == \"none\" && (this.style.display = '');\n\t if (getComputedStyle(this, '').getPropertyValue(\"display\") == \"none\") this.style.display = defaultDisplay(this.nodeName);\n\t });\n\t },\n\t replaceWith: function replaceWith(newContent) {\n\t return this.before(newContent).remove();\n\t },\n\t wrap: function wrap(structure) {\n\t var func = isFunction(structure);\n\t if (this[0] && !func) var dom = $(structure).get(0),\n\t clone = dom.parentNode || this.length > 1;\n\t\n\t return this.each(function (index) {\n\t $(this).wrapAll(func ? structure.call(this, index) : clone ? dom.cloneNode(true) : dom);\n\t });\n\t },\n\t wrapAll: function wrapAll(structure) {\n\t if (this[0]) {\n\t $(this[0]).before(structure = $(structure));\n\t var children;\n\t // drill down to the inmost element\n\t while ((children = structure.children()).length) {\n\t structure = children.first();\n\t }$(structure).append(this);\n\t }\n\t return this;\n\t },\n\t wrapInner: function wrapInner(structure) {\n\t var func = isFunction(structure);\n\t return this.each(function (index) {\n\t var self = $(this),\n\t contents = self.contents(),\n\t dom = func ? structure.call(this, index) : structure;\n\t contents.length ? contents.wrapAll(dom) : self.append(dom);\n\t });\n\t },\n\t unwrap: function unwrap() {\n\t this.parent().each(function () {\n\t $(this).replaceWith($(this).children());\n\t });\n\t return this;\n\t },\n\t clone: function clone() {\n\t return this.map(function () {\n\t return this.cloneNode(true);\n\t });\n\t },\n\t hide: function hide() {\n\t return this.css(\"display\", \"none\");\n\t },\n\t toggle: function toggle(setting) {\n\t return this.each(function () {\n\t var el = $(this);(setting === undefined ? el.css(\"display\") == \"none\" : setting) ? el.show() : el.hide();\n\t });\n\t },\n\t prev: function prev(selector) {\n\t return $(this.pluck('previousElementSibling')).filter(selector || '*');\n\t },\n\t next: function next(selector) {\n\t return $(this.pluck('nextElementSibling')).filter(selector || '*');\n\t },\n\t html: function html(_html) {\n\t return 0 in arguments ? this.each(function (idx) {\n\t var originHtml = this.innerHTML;\n\t $(this).empty().append(funcArg(this, _html, idx, originHtml));\n\t }) : 0 in this ? this[0].innerHTML : null;\n\t },\n\t text: function text(_text) {\n\t return 0 in arguments ? this.each(function (idx) {\n\t var newText = funcArg(this, _text, idx, this.textContent);\n\t this.textContent = newText == null ? '' : '' + newText;\n\t }) : 0 in this ? this.pluck('textContent').join(\"\") : null;\n\t },\n\t attr: function attr(name, value) {\n\t var result;\n\t return typeof name == 'string' && !(1 in arguments) ? 0 in this && this[0].nodeType == 1 && (result = this[0].getAttribute(name)) != null ? result : undefined : this.each(function (idx) {\n\t if (this.nodeType !== 1) return;\n\t if (isObject(name)) for (key in name) {\n\t setAttribute(this, key, name[key]);\n\t } else setAttribute(this, name, funcArg(this, value, idx, this.getAttribute(name)));\n\t });\n\t },\n\t removeAttr: function removeAttr(name) {\n\t return this.each(function () {\n\t this.nodeType === 1 && name.split(' ').forEach(function (attribute) {\n\t setAttribute(this, attribute);\n\t }, this);\n\t });\n\t },\n\t prop: function prop(name, value) {\n\t name = propMap[name] || name;\n\t return 1 in arguments ? this.each(function (idx) {\n\t this[name] = funcArg(this, value, idx, this[name]);\n\t }) : this[0] && this[0][name];\n\t },\n\t removeProp: function removeProp(name) {\n\t name = propMap[name] || name;\n\t return this.each(function () {\n\t delete this[name];\n\t });\n\t },\n\t data: function data(name, value) {\n\t var attrName = 'data-' + name.replace(capitalRE, '-$1').toLowerCase();\n\t\n\t var data = 1 in arguments ? this.attr(attrName, value) : this.attr(attrName);\n\t\n\t return data !== null ? deserializeValue(data) : undefined;\n\t },\n\t val: function val(value) {\n\t if (0 in arguments) {\n\t if (value == null) value = \"\";\n\t return this.each(function (idx) {\n\t this.value = funcArg(this, value, idx, this.value);\n\t });\n\t } else {\n\t return this[0] && (this[0].multiple ? $(this[0]).find('option').filter(function () {\n\t return this.selected;\n\t }).pluck('value') : this[0].value);\n\t }\n\t },\n\t offset: function offset(coordinates) {\n\t if (coordinates) return this.each(function (index) {\n\t var $this = $(this),\n\t coords = funcArg(this, coordinates, index, $this.offset()),\n\t parentOffset = $this.offsetParent().offset(),\n\t props = {\n\t top: coords.top - parentOffset.top,\n\t left: coords.left - parentOffset.left\n\t };\n\t\n\t if ($this.css('position') == 'static') props['position'] = 'relative';\n\t $this.css(props);\n\t });\n\t if (!this.length) return null;\n\t if (document.documentElement !== this[0] && !$.contains(document.documentElement, this[0])) return { top: 0, left: 0 };\n\t var obj = this[0].getBoundingClientRect();\n\t return {\n\t left: obj.left + window.pageXOffset,\n\t top: obj.top + window.pageYOffset,\n\t width: Math.round(obj.width),\n\t height: Math.round(obj.height)\n\t };\n\t },\n\t css: function css(property, value) {\n\t if (arguments.length < 2) {\n\t var element = this[0];\n\t if (typeof property == 'string') {\n\t if (!element) return;\n\t return element.style[camelize(property)] || getComputedStyle(element, '').getPropertyValue(property);\n\t } else if (isArray(property)) {\n\t if (!element) return;\n\t var props = {};\n\t var computedStyle = getComputedStyle(element, '');\n\t $.each(property, function (_, prop) {\n\t props[prop] = element.style[camelize(prop)] || computedStyle.getPropertyValue(prop);\n\t });\n\t return props;\n\t }\n\t }\n\t\n\t var css = '';\n\t if (type(property) == 'string') {\n\t if (!value && value !== 0) this.each(function () {\n\t this.style.removeProperty(dasherize(property));\n\t });else css = dasherize(property) + \":\" + maybeAddPx(property, value);\n\t } else {\n\t for (key in property) {\n\t if (!property[key] && property[key] !== 0) this.each(function () {\n\t this.style.removeProperty(dasherize(key));\n\t });else css += dasherize(key) + ':' + maybeAddPx(key, property[key]) + ';';\n\t }\n\t }\n\t\n\t return this.each(function () {\n\t this.style.cssText += ';' + css;\n\t });\n\t },\n\t index: function index(element) {\n\t return element ? this.indexOf($(element)[0]) : this.parent().children().indexOf(this[0]);\n\t },\n\t hasClass: function hasClass(name) {\n\t if (!name) return false;\n\t return emptyArray.some.call(this, function (el) {\n\t return this.test(className(el));\n\t }, classRE(name));\n\t },\n\t addClass: function addClass(name) {\n\t if (!name) return this;\n\t return this.each(function (idx) {\n\t if (!('className' in this)) return;\n\t classList = [];\n\t var cls = className(this),\n\t newName = funcArg(this, name, idx, cls);\n\t newName.split(/\\s+/g).forEach(function (klass) {\n\t if (!$(this).hasClass(klass)) classList.push(klass);\n\t }, this);\n\t classList.length && className(this, cls + (cls ? \" \" : \"\") + classList.join(\" \"));\n\t });\n\t },\n\t removeClass: function removeClass(name) {\n\t return this.each(function (idx) {\n\t if (!('className' in this)) return;\n\t if (name === undefined) return className(this, '');\n\t classList = className(this);\n\t funcArg(this, name, idx, classList).split(/\\s+/g).forEach(function (klass) {\n\t classList = classList.replace(classRE(klass), \" \");\n\t });\n\t className(this, classList.trim());\n\t });\n\t },\n\t toggleClass: function toggleClass(name, when) {\n\t if (!name) return this;\n\t return this.each(function (idx) {\n\t var $this = $(this),\n\t names = funcArg(this, name, idx, className(this));\n\t names.split(/\\s+/g).forEach(function (klass) {\n\t (when === undefined ? !$this.hasClass(klass) : when) ? $this.addClass(klass) : $this.removeClass(klass);\n\t });\n\t });\n\t },\n\t scrollTop: function scrollTop(value) {\n\t if (!this.length) return;\n\t var hasScrollTop = 'scrollTop' in this[0];\n\t if (value === undefined) return hasScrollTop ? this[0].scrollTop : this[0].pageYOffset;\n\t return this.each(hasScrollTop ? function () {\n\t this.scrollTop = value;\n\t } : function () {\n\t this.scrollTo(this.scrollX, value);\n\t });\n\t },\n\t scrollLeft: function scrollLeft(value) {\n\t if (!this.length) return;\n\t var hasScrollLeft = 'scrollLeft' in this[0];\n\t if (value === undefined) return hasScrollLeft ? this[0].scrollLeft : this[0].pageXOffset;\n\t return this.each(hasScrollLeft ? function () {\n\t this.scrollLeft = value;\n\t } : function () {\n\t this.scrollTo(value, this.scrollY);\n\t });\n\t },\n\t position: function position() {\n\t if (!this.length) return;\n\t\n\t var elem = this[0],\n\t\n\t // Get *real* offsetParent\n\t offsetParent = this.offsetParent(),\n\t\n\t // Get correct offsets\n\t offset = this.offset(),\n\t parentOffset = rootNodeRE.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset();\n\t\n\t // Subtract element margins\n\t // note: when an element has margin: auto the offsetLeft and marginLeft\n\t // are the same in Safari causing offset.left to incorrectly be 0\n\t offset.top -= parseFloat($(elem).css('margin-top')) || 0;\n\t offset.left -= parseFloat($(elem).css('margin-left')) || 0;\n\t\n\t // Add offsetParent borders\n\t parentOffset.top += parseFloat($(offsetParent[0]).css('border-top-width')) || 0;\n\t parentOffset.left += parseFloat($(offsetParent[0]).css('border-left-width')) || 0;\n\t\n\t // Subtract the two offsets\n\t return {\n\t top: offset.top - parentOffset.top,\n\t left: offset.left - parentOffset.left\n\t };\n\t },\n\t offsetParent: function offsetParent() {\n\t return this.map(function () {\n\t var parent = this.offsetParent || document.body;\n\t while (parent && !rootNodeRE.test(parent.nodeName) && $(parent).css(\"position\") == \"static\") {\n\t parent = parent.offsetParent;\n\t }return parent;\n\t });\n\t }\n\t };\n\t\n\t // for now\n\t $.fn.detach = $.fn.remove\n\t\n\t // Generate the `width` and `height` functions\n\t ;['width', 'height'].forEach(function (dimension) {\n\t var dimensionProperty = dimension.replace(/./, function (m) {\n\t return m[0].toUpperCase();\n\t });\n\t\n\t $.fn[dimension] = function (value) {\n\t var offset,\n\t el = this[0];\n\t if (value === undefined) return isWindow(el) ? el['inner' + dimensionProperty] : isDocument(el) ? el.documentElement['scroll' + dimensionProperty] : (offset = this.offset()) && offset[dimension];else return this.each(function (idx) {\n\t el = $(this);\n\t el.css(dimension, funcArg(this, value, idx, el[dimension]()));\n\t });\n\t };\n\t });\n\t\n\t function traverseNode(node, fun) {\n\t fun(node);\n\t for (var i = 0, len = node.childNodes.length; i < len; i++) {\n\t traverseNode(node.childNodes[i], fun);\n\t }\n\t }\n\t\n\t // Generate the `after`, `prepend`, `before`, `append`,\n\t // `insertAfter`, `insertBefore`, `appendTo`, and `prependTo` methods.\n\t adjacencyOperators.forEach(function (operator, operatorIndex) {\n\t var inside = operatorIndex % 2; //=> prepend, append\n\t\n\t $.fn[operator] = function () {\n\t // arguments can be nodes, arrays of nodes, Zepto objects and HTML strings\n\t var argType,\n\t nodes = $.map(arguments, function (arg) {\n\t var arr = [];\n\t argType = type(arg);\n\t if (argType == \"array\") {\n\t arg.forEach(function (el) {\n\t if (el.nodeType !== undefined) return arr.push(el);else if ($.zepto.isZ(el)) return arr = arr.concat(el.get());\n\t arr = arr.concat(zepto.fragment(el));\n\t });\n\t return arr;\n\t }\n\t return argType == \"object\" || arg == null ? arg : zepto.fragment(arg);\n\t }),\n\t parent,\n\t copyByClone = this.length > 1;\n\t if (nodes.length < 1) return this;\n\t\n\t return this.each(function (_, target) {\n\t parent = inside ? target : target.parentNode;\n\t\n\t // convert all methods to a \"before\" operation\n\t target = operatorIndex == 0 ? target.nextSibling : operatorIndex == 1 ? target.firstChild : operatorIndex == 2 ? target : null;\n\t\n\t var parentInDocument = $.contains(document.documentElement, parent);\n\t\n\t nodes.forEach(function (node) {\n\t if (copyByClone) node = node.cloneNode(true);else if (!parent) return $(node).remove();\n\t\n\t parent.insertBefore(node, target);\n\t if (parentInDocument) traverseNode(node, function (el) {\n\t if (el.nodeName != null && el.nodeName.toUpperCase() === 'SCRIPT' && (!el.type || el.type === 'text/javascript') && !el.src) {\n\t var target = el.ownerDocument ? el.ownerDocument.defaultView : window;\n\t target['eval'].call(target, el.innerHTML);\n\t }\n\t });\n\t });\n\t });\n\t };\n\t\n\t // after => insertAfter\n\t // prepend => prependTo\n\t // before => insertBefore\n\t // append => appendTo\n\t $.fn[inside ? operator + 'To' : 'insert' + (operatorIndex ? 'Before' : 'After')] = function (html) {\n\t $(html)[operator](this);\n\t return this;\n\t };\n\t });\n\t\n\t zepto.Z.prototype = Z.prototype = $.fn;\n\t\n\t // Export internal API functions in the `$.zepto` namespace\n\t zepto.uniq = uniq;\n\t zepto.deserializeValue = deserializeValue;\n\t $.zepto = zepto;\n\t\n\t return $;\n\t }();\n\t\n\t window.Zepto = Zepto;\n\t window.$ === undefined && (window.$ = Zepto);(function ($) {\n\t var _zid = 1,\n\t undefined,\n\t slice = Array.prototype.slice,\n\t isFunction = $.isFunction,\n\t isString = function isString(obj) {\n\t return typeof obj == 'string';\n\t },\n\t handlers = {},\n\t specialEvents = {},\n\t focusinSupported = 'onfocusin' in window,\n\t focus = { focus: 'focusin', blur: 'focusout' },\n\t hover = { mouseenter: 'mouseover', mouseleave: 'mouseout' };\n\t\n\t specialEvents.click = specialEvents.mousedown = specialEvents.mouseup = specialEvents.mousemove = 'MouseEvents';\n\t\n\t function zid(element) {\n\t return element._zid || (element._zid = _zid++);\n\t }\n\t function findHandlers(element, event, fn, selector) {\n\t event = parse(event);\n\t if (event.ns) var matcher = matcherFor(event.ns);\n\t return (handlers[zid(element)] || []).filter(function (handler) {\n\t return handler && (!event.e || handler.e == event.e) && (!event.ns || matcher.test(handler.ns)) && (!fn || zid(handler.fn) === zid(fn)) && (!selector || handler.sel == selector);\n\t });\n\t }\n\t function parse(event) {\n\t var parts = ('' + event).split('.');\n\t return { e: parts[0], ns: parts.slice(1).sort().join(' ') };\n\t }\n\t function matcherFor(ns) {\n\t return new RegExp('(?:^| )' + ns.replace(' ', ' .* ?') + '(?: |$)');\n\t }\n\t\n\t function eventCapture(handler, captureSetting) {\n\t return handler.del && !focusinSupported && handler.e in focus || !!captureSetting;\n\t }\n\t\n\t function realEvent(type) {\n\t return hover[type] || focusinSupported && focus[type] || type;\n\t }\n\t\n\t function add(element, events, fn, data, selector, delegator, capture) {\n\t var id = zid(element),\n\t set = handlers[id] || (handlers[id] = []);\n\t events.split(/\\s/).forEach(function (event) {\n\t if (event == 'ready') return $(document).ready(fn);\n\t var handler = parse(event);\n\t handler.fn = fn;\n\t handler.sel = selector;\n\t // emulate mouseenter, mouseleave\n\t if (handler.e in hover) fn = function fn(e) {\n\t var related = e.relatedTarget;\n\t if (!related || related !== this && !$.contains(this, related)) return handler.fn.apply(this, arguments);\n\t };\n\t handler.del = delegator;\n\t var callback = delegator || fn;\n\t handler.proxy = function (e) {\n\t e = compatible(e);\n\t if (e.isImmediatePropagationStopped()) return;\n\t e.data = data;\n\t var result = callback.apply(element, e._args == undefined ? [e] : [e].concat(e._args));\n\t if (result === false) e.preventDefault(), e.stopPropagation();\n\t return result;\n\t };\n\t handler.i = set.length;\n\t set.push(handler);\n\t if ('addEventListener' in element) element.addEventListener(realEvent(handler.e), handler.proxy, eventCapture(handler, capture));\n\t });\n\t }\n\t function remove(element, events, fn, selector, capture) {\n\t var id = zid(element);(events || '').split(/\\s/).forEach(function (event) {\n\t findHandlers(element, event, fn, selector).forEach(function (handler) {\n\t delete handlers[id][handler.i];\n\t if ('removeEventListener' in element) element.removeEventListener(realEvent(handler.e), handler.proxy, eventCapture(handler, capture));\n\t });\n\t });\n\t }\n\t\n\t $.event = { add: add, remove: remove };\n\t\n\t $.proxy = function (fn, context) {\n\t var args = 2 in arguments && slice.call(arguments, 2);\n\t if (isFunction(fn)) {\n\t var proxyFn = function proxyFn() {\n\t return fn.apply(context, args ? args.concat(slice.call(arguments)) : arguments);\n\t };\n\t proxyFn._zid = zid(fn);\n\t return proxyFn;\n\t } else if (isString(context)) {\n\t if (args) {\n\t args.unshift(fn[context], fn);\n\t return $.proxy.apply(null, args);\n\t } else {\n\t return $.proxy(fn[context], fn);\n\t }\n\t } else {\n\t throw new TypeError(\"expected function\");\n\t }\n\t };\n\t\n\t $.fn.bind = function (event, data, callback) {\n\t return this.on(event, data, callback);\n\t };\n\t $.fn.unbind = function (event, callback) {\n\t return this.off(event, callback);\n\t };\n\t $.fn.one = function (event, selector, data, callback) {\n\t return this.on(event, selector, data, callback, 1);\n\t };\n\t\n\t var returnTrue = function returnTrue() {\n\t return true;\n\t },\n\t returnFalse = function returnFalse() {\n\t return false;\n\t },\n\t ignoreProperties = /^([A-Z]|returnValue$|layer[XY]$|webkitMovement[XY]$)/,\n\t eventMethods = {\n\t preventDefault: 'isDefaultPrevented',\n\t stopImmediatePropagation: 'isImmediatePropagationStopped',\n\t stopPropagation: 'isPropagationStopped'\n\t };\n\t\n\t function compatible(event, source) {\n\t if (source || !event.isDefaultPrevented) {\n\t source || (source = event);\n\t\n\t $.each(eventMethods, function (name, predicate) {\n\t var sourceMethod = source[name];\n\t event[name] = function () {\n\t this[predicate] = returnTrue;\n\t return sourceMethod && sourceMethod.apply(source, arguments);\n\t };\n\t event[predicate] = returnFalse;\n\t });\n\t\n\t event.timeStamp || (event.timeStamp = Date.now());\n\t\n\t if (source.defaultPrevented !== undefined ? source.defaultPrevented : 'returnValue' in source ? source.returnValue === false : source.getPreventDefault && source.getPreventDefault()) event.isDefaultPrevented = returnTrue;\n\t }\n\t return event;\n\t }\n\t\n\t function createProxy(event) {\n\t var key,\n\t proxy = { originalEvent: event };\n\t for (key in event) {\n\t if (!ignoreProperties.test(key) && event[key] !== undefined) proxy[key] = event[key];\n\t }return compatible(proxy, event);\n\t }\n\t\n\t $.fn.delegate = function (selector, event, callback) {\n\t return this.on(event, selector, callback);\n\t };\n\t $.fn.undelegate = function (selector, event, callback) {\n\t return this.off(event, selector, callback);\n\t };\n\t\n\t $.fn.live = function (event, callback) {\n\t $(document.body).delegate(this.selector, event, callback);\n\t return this;\n\t };\n\t $.fn.die = function (event, callback) {\n\t $(document.body).undelegate(this.selector, event, callback);\n\t return this;\n\t };\n\t\n\t $.fn.on = function (event, selector, data, callback, one) {\n\t var autoRemove,\n\t delegator,\n\t $this = this;\n\t if (event && !isString(event)) {\n\t $.each(event, function (type, fn) {\n\t $this.on(type, selector, data, fn, one);\n\t });\n\t return $this;\n\t }\n\t\n\t if (!isString(selector) && !isFunction(callback) && callback !== false) callback = data, data = selector, selector = undefined;\n\t if (callback === undefined || data === false) callback = data, data = undefined;\n\t\n\t if (callback === false) callback = returnFalse;\n\t\n\t return $this.each(function (_, element) {\n\t if (one) autoRemove = function autoRemove(e) {\n\t remove(element, e.type, callback);\n\t return callback.apply(this, arguments);\n\t };\n\t\n\t if (selector) delegator = function delegator(e) {\n\t var evt,\n\t match = $(e.target).closest(selector, element).get(0);\n\t if (match && match !== element) {\n\t evt = $.extend(createProxy(e), { currentTarget: match, liveFired: element });\n\t return (autoRemove || callback).apply(match, [evt].concat(slice.call(arguments, 1)));\n\t }\n\t };\n\t\n\t add(element, event, callback, data, selector, delegator || autoRemove);\n\t });\n\t };\n\t $.fn.off = function (event, selector, callback) {\n\t var $this = this;\n\t if (event && !isString(event)) {\n\t $.each(event, function (type, fn) {\n\t $this.off(type, selector, fn);\n\t });\n\t return $this;\n\t }\n\t\n\t if (!isString(selector) && !isFunction(callback) && callback !== false) callback = selector, selector = undefined;\n\t\n\t if (callback === false) callback = returnFalse;\n\t\n\t return $this.each(function () {\n\t remove(this, event, callback, selector);\n\t });\n\t };\n\t\n\t $.fn.trigger = function (event, args) {\n\t event = isString(event) || $.isPlainObject(event) ? $.Event(event) : compatible(event);\n\t event._args = args;\n\t return this.each(function () {\n\t // handle focus(), blur() by calling them directly\n\t if (event.type in focus && typeof this[event.type] == \"function\") this[event.type]();\n\t // items in the collection might not be DOM elements\n\t else if ('dispatchEvent' in this) this.dispatchEvent(event);else $(this).triggerHandler(event, args);\n\t });\n\t };\n\t\n\t // triggers event handlers on current element just as if an event occurred,\n\t // doesn't trigger an actual event, doesn't bubble\n\t $.fn.triggerHandler = function (event, args) {\n\t var e, result;\n\t this.each(function (i, element) {\n\t e = createProxy(isString(event) ? $.Event(event) : event);\n\t e._args = args;\n\t e.target = element;\n\t $.each(findHandlers(element, event.type || event), function (i, handler) {\n\t result = handler.proxy(e);\n\t if (e.isImmediatePropagationStopped()) return false;\n\t });\n\t });\n\t return result;\n\t }\n\t\n\t // shortcut methods for `.bind(event, fn)` for each event type\n\t ;('focusin focusout focus blur load resize scroll unload click dblclick ' + 'mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave ' + 'change select keydown keypress keyup error').split(' ').forEach(function (event) {\n\t $.fn[event] = function (callback) {\n\t return 0 in arguments ? this.bind(event, callback) : this.trigger(event);\n\t };\n\t });\n\t\n\t $.Event = function (type, props) {\n\t if (!isString(type)) props = type, type = props.type;\n\t var event = document.createEvent(specialEvents[type] || 'Events'),\n\t bubbles = true;\n\t if (props) for (var name in props) {\n\t name == 'bubbles' ? bubbles = !!props[name] : event[name] = props[name];\n\t }event.initEvent(type, bubbles, true);\n\t return compatible(event);\n\t };\n\t })(Zepto);(function ($) {\n\t var jsonpID = +new Date(),\n\t document = window.document,\n\t key,\n\t name,\n\t rscript = /)<[^<]*)*<\\/script>/gi,\n\t scriptTypeRE = /^(?:text|application)\\/javascript/i,\n\t xmlTypeRE = /^(?:text|application)\\/xml/i,\n\t jsonType = 'application/json',\n\t htmlType = 'text/html',\n\t blankRE = /^\\s*$/,\n\t originAnchor = document.createElement('a');\n\t\n\t originAnchor.href = window.location.href;\n\t\n\t // trigger a custom event and return false if it was cancelled\n\t function triggerAndReturn(context, eventName, data) {\n\t var event = $.Event(eventName);\n\t $(context).trigger(event, data);\n\t return !event.isDefaultPrevented();\n\t }\n\t\n\t // trigger an Ajax \"global\" event\n\t function triggerGlobal(settings, context, eventName, data) {\n\t if (settings.global) return triggerAndReturn(context || document, eventName, data);\n\t }\n\t\n\t // Number of active Ajax requests\n\t $.active = 0;\n\t\n\t function ajaxStart(settings) {\n\t if (settings.global && $.active++ === 0) triggerGlobal(settings, null, 'ajaxStart');\n\t }\n\t function ajaxStop(settings) {\n\t if (settings.global && ! --$.active) triggerGlobal(settings, null, 'ajaxStop');\n\t }\n\t\n\t // triggers an extra global event \"ajaxBeforeSend\" that's like \"ajaxSend\" but cancelable\n\t function ajaxBeforeSend(xhr, settings) {\n\t var context = settings.context;\n\t if (settings.beforeSend.call(context, xhr, settings) === false || triggerGlobal(settings, context, 'ajaxBeforeSend', [xhr, settings]) === false) return false;\n\t\n\t triggerGlobal(settings, context, 'ajaxSend', [xhr, settings]);\n\t }\n\t function ajaxSuccess(data, xhr, settings, deferred) {\n\t var context = settings.context,\n\t status = 'success';\n\t settings.success.call(context, data, status, xhr);\n\t if (deferred) deferred.resolveWith(context, [data, status, xhr]);\n\t triggerGlobal(settings, context, 'ajaxSuccess', [xhr, settings, data]);\n\t ajaxComplete(status, xhr, settings);\n\t }\n\t // type: \"timeout\", \"error\", \"abort\", \"parsererror\"\n\t function ajaxError(error, type, xhr, settings, deferred) {\n\t var context = settings.context;\n\t settings.error.call(context, xhr, type, error);\n\t if (deferred) deferred.rejectWith(context, [xhr, type, error]);\n\t triggerGlobal(settings, context, 'ajaxError', [xhr, settings, error || type]);\n\t ajaxComplete(type, xhr, settings);\n\t }\n\t // status: \"success\", \"notmodified\", \"error\", \"timeout\", \"abort\", \"parsererror\"\n\t function ajaxComplete(status, xhr, settings) {\n\t var context = settings.context;\n\t settings.complete.call(context, xhr, status);\n\t triggerGlobal(settings, context, 'ajaxComplete', [xhr, settings]);\n\t ajaxStop(settings);\n\t }\n\t\n\t function ajaxDataFilter(data, type, settings) {\n\t if (settings.dataFilter == empty) return data;\n\t var context = settings.context;\n\t return settings.dataFilter.call(context, data, type);\n\t }\n\t\n\t // Empty function, used as default callback\n\t function empty() {}\n\t\n\t $.ajaxJSONP = function (options, deferred) {\n\t if (!('type' in options)) return $.ajax(options);\n\t\n\t var _callbackName = options.jsonpCallback,\n\t callbackName = ($.isFunction(_callbackName) ? _callbackName() : _callbackName) || 'Zepto' + jsonpID++,\n\t script = document.createElement('script'),\n\t originalCallback = window[callbackName],\n\t responseData,\n\t abort = function abort(errorType) {\n\t $(script).triggerHandler('error', errorType || 'abort');\n\t },\n\t xhr = { abort: abort },\n\t abortTimeout;\n\t\n\t if (deferred) deferred.promise(xhr);\n\t\n\t $(script).on('load error', function (e, errorType) {\n\t clearTimeout(abortTimeout);\n\t $(script).off().remove();\n\t\n\t if (e.type == 'error' || !responseData) {\n\t ajaxError(null, errorType || 'error', xhr, options, deferred);\n\t } else {\n\t ajaxSuccess(responseData[0], xhr, options, deferred);\n\t }\n\t\n\t window[callbackName] = originalCallback;\n\t if (responseData && $.isFunction(originalCallback)) originalCallback(responseData[0]);\n\t\n\t originalCallback = responseData = undefined;\n\t });\n\t\n\t if (ajaxBeforeSend(xhr, options) === false) {\n\t abort('abort');\n\t return xhr;\n\t }\n\t\n\t window[callbackName] = function () {\n\t responseData = arguments;\n\t };\n\t\n\t script.src = options.url.replace(/\\?(.+)=\\?/, '?$1=' + callbackName);\n\t document.head.appendChild(script);\n\t\n\t if (options.timeout > 0) abortTimeout = setTimeout(function () {\n\t abort('timeout');\n\t }, options.timeout);\n\t\n\t return xhr;\n\t };\n\t\n\t $.ajaxSettings = {\n\t // Default type of request\n\t type: 'GET',\n\t // Callback that is executed before request\n\t beforeSend: empty,\n\t // Callback that is executed if the request succeeds\n\t success: empty,\n\t // Callback that is executed the the server drops error\n\t error: empty,\n\t // Callback that is executed on request complete (both: error and success)\n\t complete: empty,\n\t // The context for the callbacks\n\t context: null,\n\t // Whether to trigger \"global\" Ajax events\n\t global: true,\n\t // Transport\n\t xhr: function xhr() {\n\t return new window.XMLHttpRequest();\n\t },\n\t // MIME types mapping\n\t // IIS returns Javascript as \"application/x-javascript\"\n\t accepts: {\n\t script: 'text/javascript, application/javascript, application/x-javascript',\n\t json: jsonType,\n\t xml: 'application/xml, text/xml',\n\t html: htmlType,\n\t text: 'text/plain'\n\t },\n\t // Whether the request is to another domain\n\t crossDomain: false,\n\t // Default timeout\n\t timeout: 0,\n\t // Whether data should be serialized to string\n\t processData: true,\n\t // Whether the browser should be allowed to cache GET responses\n\t cache: true,\n\t //Used to handle the raw response data of XMLHttpRequest.\n\t //This is a pre-filtering function to sanitize the response.\n\t //The sanitized response should be returned\n\t dataFilter: empty\n\t };\n\t\n\t function mimeToDataType(mime) {\n\t if (mime) mime = mime.split(';', 2)[0];\n\t return mime && (mime == htmlType ? 'html' : mime == jsonType ? 'json' : scriptTypeRE.test(mime) ? 'script' : xmlTypeRE.test(mime) && 'xml') || 'text';\n\t }\n\t\n\t function appendQuery(url, query) {\n\t if (query == '') return url;\n\t return (url + '&' + query).replace(/[&?]{1,2}/, '?');\n\t }\n\t\n\t // serialize payload and append it to the URL for GET requests\n\t function serializeData(options) {\n\t if (options.processData && options.data && $.type(options.data) != \"string\") options.data = $.param(options.data, options.traditional);\n\t if (options.data && (!options.type || options.type.toUpperCase() == 'GET' || 'jsonp' == options.dataType)) options.url = appendQuery(options.url, options.data), options.data = undefined;\n\t }\n\t\n\t $.ajax = function (options) {\n\t var settings = $.extend({}, options || {}),\n\t deferred = $.Deferred && $.Deferred(),\n\t urlAnchor,\n\t hashIndex;\n\t for (key in $.ajaxSettings) {\n\t if (settings[key] === undefined) settings[key] = $.ajaxSettings[key];\n\t }ajaxStart(settings);\n\t\n\t if (!settings.crossDomain) {\n\t urlAnchor = document.createElement('a');\n\t urlAnchor.href = settings.url;\n\t // cleans up URL for .href (IE only), see https://github.com/madrobby/zepto/pull/1049\n\t urlAnchor.href = urlAnchor.href;\n\t settings.crossDomain = originAnchor.protocol + '//' + originAnchor.host !== urlAnchor.protocol + '//' + urlAnchor.host;\n\t }\n\t\n\t if (!settings.url) settings.url = window.location.toString();\n\t if ((hashIndex = settings.url.indexOf('#')) > -1) settings.url = settings.url.slice(0, hashIndex);\n\t serializeData(settings);\n\t\n\t var dataType = settings.dataType,\n\t hasPlaceholder = /\\?.+=\\?/.test(settings.url);\n\t if (hasPlaceholder) dataType = 'jsonp';\n\t\n\t if (settings.cache === false || (!options || options.cache !== true) && ('script' == dataType || 'jsonp' == dataType)) settings.url = appendQuery(settings.url, '_=' + Date.now());\n\t\n\t if ('jsonp' == dataType) {\n\t if (!hasPlaceholder) settings.url = appendQuery(settings.url, settings.jsonp ? settings.jsonp + '=?' : settings.jsonp === false ? '' : 'callback=?');\n\t return $.ajaxJSONP(settings, deferred);\n\t }\n\t\n\t var mime = settings.accepts[dataType],\n\t headers = {},\n\t setHeader = function setHeader(name, value) {\n\t headers[name.toLowerCase()] = [name, value];\n\t },\n\t protocol = /^([\\w-]+:)\\/\\//.test(settings.url) ? RegExp.$1 : window.location.protocol,\n\t xhr = settings.xhr(),\n\t nativeSetHeader = xhr.setRequestHeader,\n\t abortTimeout;\n\t\n\t if (deferred) deferred.promise(xhr);\n\t\n\t if (!settings.crossDomain) setHeader('X-Requested-With', 'XMLHttpRequest');\n\t setHeader('Accept', mime || '*/*');\n\t if (mime = settings.mimeType || mime) {\n\t if (mime.indexOf(',') > -1) mime = mime.split(',', 2)[0];\n\t xhr.overrideMimeType && xhr.overrideMimeType(mime);\n\t }\n\t if (settings.contentType || settings.contentType !== false && settings.data && settings.type.toUpperCase() != 'GET') setHeader('Content-Type', settings.contentType || 'application/x-www-form-urlencoded');\n\t\n\t if (settings.headers) for (name in settings.headers) {\n\t setHeader(name, settings.headers[name]);\n\t }xhr.setRequestHeader = setHeader;\n\t\n\t xhr.onreadystatechange = function () {\n\t if (xhr.readyState == 4) {\n\t xhr.onreadystatechange = empty;\n\t clearTimeout(abortTimeout);\n\t var result,\n\t error = false;\n\t if (xhr.status >= 200 && xhr.status < 300 || xhr.status == 304 || xhr.status == 0 && protocol == 'file:') {\n\t dataType = dataType || mimeToDataType(settings.mimeType || xhr.getResponseHeader('content-type'));\n\t\n\t if (xhr.responseType == 'arraybuffer' || xhr.responseType == 'blob') result = xhr.response;else {\n\t result = xhr.responseText;\n\t\n\t try {\n\t // http://perfectionkills.com/global-eval-what-are-the-options/\n\t // sanitize response accordingly if data filter callback provided\n\t result = ajaxDataFilter(result, dataType, settings);\n\t if (dataType == 'script') (1, eval)(result);else if (dataType == 'xml') result = xhr.responseXML;else if (dataType == 'json') result = blankRE.test(result) ? null : $.parseJSON(result);\n\t } catch (e) {\n\t error = e;\n\t }\n\t\n\t if (error) return ajaxError(error, 'parsererror', xhr, settings, deferred);\n\t }\n\t\n\t ajaxSuccess(result, xhr, settings, deferred);\n\t } else {\n\t ajaxError(xhr.statusText || null, xhr.status ? 'error' : 'abort', xhr, settings, deferred);\n\t }\n\t }\n\t };\n\t\n\t if (ajaxBeforeSend(xhr, settings) === false) {\n\t xhr.abort();\n\t ajaxError(null, 'abort', xhr, settings, deferred);\n\t return xhr;\n\t }\n\t\n\t var async = 'async' in settings ? settings.async : true;\n\t xhr.open(settings.type, settings.url, async, settings.username, settings.password);\n\t\n\t if (settings.xhrFields) for (name in settings.xhrFields) {\n\t xhr[name] = settings.xhrFields[name];\n\t }for (name in headers) {\n\t nativeSetHeader.apply(xhr, headers[name]);\n\t }if (settings.timeout > 0) abortTimeout = setTimeout(function () {\n\t xhr.onreadystatechange = empty;\n\t xhr.abort();\n\t ajaxError(null, 'timeout', xhr, settings, deferred);\n\t }, settings.timeout);\n\t\n\t // avoid sending empty string (#319)\n\t xhr.send(settings.data ? settings.data : null);\n\t return xhr;\n\t };\n\t\n\t // handle optional data/success arguments\n\t function parseArguments(url, data, success, dataType) {\n\t if ($.isFunction(data)) dataType = success, success = data, data = undefined;\n\t if (!$.isFunction(success)) dataType = success, success = undefined;\n\t return {\n\t url: url,\n\t data: data,\n\t success: success,\n\t dataType: dataType\n\t };\n\t }\n\t\n\t $.get = function () /* url, data, success, dataType */{\n\t return $.ajax(parseArguments.apply(null, arguments));\n\t };\n\t\n\t $.post = function () /* url, data, success, dataType */{\n\t var options = parseArguments.apply(null, arguments);\n\t options.type = 'POST';\n\t return $.ajax(options);\n\t };\n\t\n\t $.getJSON = function () /* url, data, success */{\n\t var options = parseArguments.apply(null, arguments);\n\t options.dataType = 'json';\n\t return $.ajax(options);\n\t };\n\t\n\t $.fn.load = function (url, data, success) {\n\t if (!this.length) return this;\n\t var self = this,\n\t parts = url.split(/\\s/),\n\t selector,\n\t options = parseArguments(url, data, success),\n\t callback = options.success;\n\t if (parts.length > 1) options.url = parts[0], selector = parts[1];\n\t options.success = function (response) {\n\t self.html(selector ? $('
    ').html(response.replace(rscript, \"\")).find(selector) : response);\n\t callback && callback.apply(self, arguments);\n\t };\n\t $.ajax(options);\n\t return this;\n\t };\n\t\n\t var escape = encodeURIComponent;\n\t\n\t function serialize(params, obj, traditional, scope) {\n\t var type,\n\t array = $.isArray(obj),\n\t hash = $.isPlainObject(obj);\n\t $.each(obj, function (key, value) {\n\t type = $.type(value);\n\t if (scope) key = traditional ? scope : scope + '[' + (hash || type == 'object' || type == 'array' ? key : '') + ']';\n\t // handle data in serializeArray() format\n\t if (!scope && array) params.add(value.name, value.value);\n\t // recurse into nested objects\n\t else if (type == \"array\" || !traditional && type == \"object\") serialize(params, value, traditional, key);else params.add(key, value);\n\t });\n\t }\n\t\n\t $.param = function (obj, traditional) {\n\t var params = [];\n\t params.add = function (key, value) {\n\t if ($.isFunction(value)) value = value();\n\t if (value == null) value = \"\";\n\t this.push(escape(key) + '=' + escape(value));\n\t };\n\t serialize(params, obj, traditional);\n\t return params.join('&').replace(/%20/g, '+');\n\t };\n\t })(Zepto);(function ($) {\n\t $.fn.serializeArray = function () {\n\t var name,\n\t type,\n\t result = [],\n\t add = function add(value) {\n\t if (value.forEach) return value.forEach(add);\n\t result.push({ name: name, value: value });\n\t };\n\t if (this[0]) $.each(this[0].elements, function (_, field) {\n\t type = field.type, name = field.name;\n\t if (name && field.nodeName.toLowerCase() != 'fieldset' && !field.disabled && type != 'submit' && type != 'reset' && type != 'button' && type != 'file' && (type != 'radio' && type != 'checkbox' || field.checked)) add($(field).val());\n\t });\n\t return result;\n\t };\n\t\n\t $.fn.serialize = function () {\n\t var result = [];\n\t this.serializeArray().forEach(function (elm) {\n\t result.push(encodeURIComponent(elm.name) + '=' + encodeURIComponent(elm.value));\n\t });\n\t return result.join('&');\n\t };\n\t\n\t $.fn.submit = function (callback) {\n\t if (0 in arguments) this.bind('submit', callback);else if (this.length) {\n\t var event = $.Event('submit');\n\t this.eq(0).trigger(event);\n\t if (!event.isDefaultPrevented()) this.get(0).submit();\n\t }\n\t return this;\n\t };\n\t })(Zepto);(function () {\n\t // getComputedStyle shouldn't freak out when called\n\t // without a valid element as argument\n\t try {\n\t getComputedStyle(undefined);\n\t } catch (e) {\n\t var nativeGetComputedStyle = getComputedStyle;\n\t window.getComputedStyle = function (element, pseudoElement) {\n\t try {\n\t return nativeGetComputedStyle(element, pseudoElement);\n\t } catch (e) {\n\t return null;\n\t }\n\t };\n\t }\n\t })();\n\t return Zepto;\n\t});\n\n/***/ },\n/* 2 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\texports.default = mTpl;\n\tvar cache = {};\n\t\n\tfunction mTpl(str, data, startSelector, endSelector, isCache) {\n\t var t = this,\n\t d = data,\n\t el = document.getElementById(str),\n\t tpl = el ? el.innerHTML : str,\n\t isCache = isCache != undefined ? isCache : true,\n\t valueArr = [],\n\t fn = function fn() {},\n\t htmlEncode = function htmlEncode(s, n) {\n\t if (!n) {\n\t s = s.replace(/>/g, '>').replace(/';\n\t }\n\t if (!(tpl.indexOf(a) > -1 && tpl.indexOf(b) > -1)) {\n\t return tpl;\n\t }\n\t\n\t var formatTpl = function formatTpl(str, isError) {\n\t var N = isError ? '\\n' : '';\n\t r = isError ? '' : r;\n\t n = isError ? '' : n;\n\t\n\t var eb = function (s) {\n\t return s.replace(/([.*+?^=!:${}()|[\\]\\/\\\\])/g, '\\\\$1');\n\t }(b),\n\t reg = new RegExp(l + '(?:(?!' + eb + ')[\\\\s\\\\S])*' + eb + '|(\\'+)', 'g');\n\t\n\t return tpl.replace(/)[\\s\\S])*-->/g, function (l) {\n\t var i = mTpl_comment.length++;\n\t mTpl_comment[i] = l;\n\t return 'mTpl_comment' + i + ';';\n\t }).split('\\\\').join('\\\\\\\\').replace(/[\\r]/g, r).replace(/[\\n]/g, n).split(a).join(l).replace(reg, function (l, $1) {\n\t return $1 ? new Array($1.length + 1).join('\\r') : l;\n\t }).replace(new RegExp(l + '=(.*?)' + b, 'g'), \"';\" + N + \" s+=mTpl_htmlEncode(String($1));\" + N + \" s+='\").replace(new RegExp(l + '\\!=(.*?)' + b, 'g'), \"';\" + N + \" s+=mTpl_htmlEncode(String($1),true);\" + N + \" s+='\").split(l).join(\"';\" + N).split(b).join(N + ' s+=\\'').split('\\r').join('\\\\\\'');\n\t };\n\t\n\t var p,\n\t propArr = [];\n\t for (p in d) {\n\t propArr.push(p);\n\t valueArr.push(d[p]);\n\t }\n\t\n\t fn = compileFn(propArr, formatTpl(str));\n\t isCache && (cache[str] = {\n\t parsefn: fn,\n\t propList: propArr\n\t });\n\t }\n\t\n\t var s;\n\t\n\t try {\n\t s = fn.apply(t, valueArr);\n\t } catch (e) {\n\t fn = compileFn(propArr, formatTpl(str, true));\n\t s = fn.apply(t, valueArr);\n\t }\n\t\n\t return recoverChar(s);\n\t}\n\n/***/ },\n/* 3 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _zepto = __webpack_require__(1);\n\t\n\tvar _zepto2 = _interopRequireDefault(_zepto);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\t/**\n\t* Bind an event to an object instead of a DOM Node\n\t```\n\t$.bind(this,'event',function(){});\n\t```\n\t* @param {Object} object\n\t* @param {String} event name\n\t* @param {Function} function to execute\n\t* @title $.bind(object,event,function);\n\t*/\n\t_zepto2.default.bind = function (obj, ev, f) {\n\t if (!obj.__events) obj.__events = {};\n\t if (!_zepto2.default.isArray(ev)) ev = [ev];\n\t for (var i = 0; i < ev.length; i++) {\n\t if (!obj.__events[ev[i]]) obj.__events[ev[i]] = [];\n\t obj.__events[ev[i]].push(f);\n\t }\n\t};\n\t\n\t/**\n\t* Trigger an event to an object instead of a DOM Node\n\t```\n\t$.trigger(this,'event',arguments);\n\t```\n\t* @param {Object} object\n\t* @param {String} event name\n\t* @param {Array} arguments\n\t* @title $.trigger(object,event,argments);\n\t*/\n\t_zepto2.default.trigger = function (obj, ev, args) {\n\t var ret = true;\n\t if (!obj.__events) return ret;\n\t if (!_zepto2.default.isArray(ev)) ev = [ev];\n\t if (!_zepto2.default.isArray(args)) args = [];\n\t for (var i = 0; i < ev.length; i++) {\n\t if (obj.__events[ev[i]]) {\n\t var evts = obj.__events[ev[i]];\n\t for (var j = 0; j < evts.length; j++) {\n\t if (_zepto2.default.isFunction(evts[j]) && evts[j].apply(obj, args) === false) ret = false;\n\t }\n\t }\n\t }\n\t return ret;\n\t};\n\t/**\n\t* Unbind an event to an object instead of a DOM Node\n\t```\n\t$.unbind(this,'event',function(){});\n\t```\n\t* @param {Object} object\n\t* @param {String} event name\n\t* @param {Function} function to execute\n\t* @title $.unbind(object,event,function);\n\t*/\n\t_zepto2.default.unbind = function (obj, ev, f) {\n\t if (!obj.__events) return ret;\n\t if (!_zepto2.default.isArray(ev)) ev = [ev];\n\t for (var i = 0; i < ev.length; i++) {\n\t if (obj.__events[ev[i]]) {\n\t var evts = obj.__events[ev[i]];\n\t for (var j = 0; j < evts.length; j++) {\n\t if (f == undefined) delete evts[j];\n\t if (evts[j] == f) {\n\t evts.splice(j, 1);\n\t break;\n\t }\n\t }\n\t }\n\t }\n\t};\n\n/***/ },\n/* 4 */\n/***/ function(module, exports) {\n\n\t// removed by extract-text-webpack-plugin\n\n/***/ },\n/* 5 */,\n/* 6 */,\n/* 7 */,\n/* 8 */,\n/* 9 */,\n/* 10 */,\n/* 11 */,\n/* 12 */\n/***/ function(module, exports) {\n\n\tmodule.exports = \"<% var curInfo = data[0]; %>
    /> \\\">

    <%= curInfo.title %><%= curInfo.author %>

    • 00:00
    • 00:00
    • \\\">
      <% for (var i = 0; i < data.length; i++) { %> <% var idx = i + 1; %> <% var item = data[i]; %>
    • <% if (i === 0) { %> class=cur <% } %>> <%= idx %> <%= item.title %> <%= item.author %>
    • <% } %>
    \";\n\n/***/ },\n/* 13 */\n/***/ function(module, exports) {\n\n\tmodule.exports = \"
  • \\\"> <%= idx %> <%= title %> <%= author %>
  • \";\n\n/***/ }\n/******/ ])\n});\n;\n\n\n/** WEBPACK FOOTER **\n ** audio.min.js\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap 9644cb9c799fd4823691\n **/","/**\n * html5 audio player 音频播放器组件\n * 可调用封装好的api,包装各种皮肤的播放器\n * 提供(播放进度条,拖拽定位/快进/快退播放,连播/播放列表/循环播放,上下曲)\n * @date 2016-07-28\n * @author samczhang@tencent.com\n * --------------------------------------\n *\n * 对外调用接口及自定义事件\n * @method play 播放\n * @method pause 暂停\n * @method prePlay 上一首\n * @method nextPlay 下一首\n * @method switchPlay 指定列表索引播放\n * @method togglePlay 切换播放与暂停\n * @method setLoopType 设置循环播放方式\n * @method addtoPlayList 添加歌曲到播放列表\n *\n * @customEvent play 开始播放\n * @customEvent pause 暂停播放\n * @customEvent playing 播放中\n * @customEvent ended 播放结束\n * --------------------------------------\n *\n * 使用demo\n * new AudioPlayer({\n * data: [{\n * title: '曾经的你',\n * author: '许巍',\n * src: '/example/asset/music/once.mp3',\n * cover: '/example/asset/image/cover_once.jpeg'\n * }, {\n * title: 'You\\'re Beautiful',\n * author: 'James Blunt',\n * src: '/example/asset/music/you_are_beautiful.mp4',\n * cover: '/example/asset/image/cover_yab.jpg'\n * }, {\n * title: 'I\\'m Yours',\n * author: 'Jason Mraz',\n * src: '/example/asset/music/i_am_yours.mp4',\n * cover: '/example/asset/image/cover_iay.jpg'\n * }]\n * });\n * \n */\n\nimport $ from './lib/zepto.js';\nimport render from './lib/render.js';\nimport customEvent from './lib/customEvent.js'\n\nimport './audio.less';\nimport tpl from './audio.html';\nimport listTpl from './list.html';\n\nconst defaultConfig = {\n id: 'player-wrap', //播放器容器id\n isAutoplay: true, //是否自动播放\n tpl: tpl, //音频播放器模板\n\n /**\n * loopType {string} 播放循环方式\n * none: 不循环,\n * single: 单曲循环\n * order: 顺序循环\n */\n loopType: 'order',\n\n /**\n * data {array} 音频数据,数组的每一项为对象\n * title: 歌名\n * author: 作者\n * src: 音频地址\n * cover: 音频封面图\n */\n data: []\n};\n\nclass AudioPlayer {\n constructor(config) {\n this.config = this.extend({}, defaultConfig, config || {});\n this.init();\n }\n\n init() {\n this._initStatus();\n this._createAudio();\n this._createPlayer();\n this._cache();\n this._setPlaybarPos();\n this._setPlayListHeight();\n this._initEvent();\n }\n\n _createAudio() {\n let me = this,\n config = this.config;\n\n this.audio = document.createElement('audio');\n this.audio.setAttribute('src', this.data[0].src);\n this.audio.setAttribute('preload', 'metadata');\n\n if (config.isAutoplay) {\n this.play();\n }\n\n document.body.appendChild(this.audio);\n }\n\n _initStatus() {\n let me = this,\n config = this.config;\n\n this.playStatus = config.isAutoplay ? 'play' : 'pause';\n this.playListStatus = 'show';\n this.playIdx = 0;\n this.data = config.data;\n this.loopType = config.loopType;\n this.totalNum = this.data.length;\n }\n\n _createPlayer() {\n let me = this,\n config = this.config,\n playIcon = (this.playStatus === 'play') ? 'pause' : 'play';\n\n this.el = $(`#${config.id}`);\n this.el.html(render(config.tpl, {\n data: this.data,\n playIcon: playIcon\n }));\n }\n\n _cache() {\n let me = this,\n config = this.config,\n el = this.el;\n\n //dom cache\n this.playTime = el.find('.play-time');\n this.totalTime = el.find('.total-time');\n this.playBar = el.find('.play-bar');\n this.loadedBar = el.find('.loaded');\n this.playedBar = el.find('.played');\n this.playPointer = el.find('.pointer');\n this.playListBtn = el.find('.icon-list');\n this.playListWrap = el.find('.play-list');\n this.playListItems = this.playListWrap.find('li');\n\n this.nextBtn = el.find('.icon-nextsong');\n this.preBtn = el.find('.icon-presong');\n this.cover = el.find('img.cover');\n this.title = el.find('.info h3');\n this.loopBtn = el.find('.icon-loop');\n this.playBtn = el.find('.play-btn');\n this.coverPlayBtn = el.find('.cover-play-btn');\n\n //event callback cache\n this.tempMovePlaybar = $.proxy(this._movePlaybar, this);\n this.tempMouseupCb = $.proxy(this._mouseupCb, this);\n }\n\n //设置及缓存播放进度条位置信息,方便计算百分比\n _setPlaybarPos() {\n let playBarPos = this.playBar[0].getBoundingClientRect();\n this.playBarClientX = playBarPos.left;\n this.playBarWidth = playBarPos.width;\n }\n\n //初始化及缓存播放列表高度,做动画需要\n _setPlayListHeight() {\n let playListWrap = this.playListWrap;\n this.playListHeight = playListWrap.height();\n playListWrap.css('height', this.playListHeight);\n }\n\n _initEvent() {\n let me = this,\n config = this.config,\n playPointer = this.playPointer,\n audio = this.audio;\n\n audio.addEventListener('durationchange', (event) => {\n me.totalTime.html(me.formatSeconds(audio.duration));\n }, false);\n\n audio.addEventListener('progress', (event) => {\n let loadedPercent = audio.buffered.length ? \n audio.buffered.end(audio.buffered.length - 1) / audio.duration : 0;\n\n me.loadedBar.css('width', loadedPercent * 100 + '%');\n\n $.trigger(this, 'playing', [{\n song: me.data[this.playIdx],\n loadedPercent: loadedPercent\n }]);\n }, false);\n\n audio.addEventListener('ended', (event) => {\n switch(this.loopType) {\n case 'order':\n this.nextPlay();\n break;\n case 'single':\n this.switchPlay(this.playIdx);\n break;\n case 'none':\n this.togglePlay();\n break;\n default:\n break;\n }\n\n $.trigger(this, 'ended', [{\n song: me.data[this.playIdx]\n }]);\n }, false);\n\n $(window).on('resize', $.proxy(this._setPlaybarPos, this));\n $(window).on('orientationchange', $.proxy(this._setPlaybarPos, this));\n\n this.el.on('click', '.play-btn, .cover-play-btn', $.proxy(this.togglePlay, this));\n this.playBar.on('click', $.proxy(this.assignPlay, this));\n this.loopBtn.on('click', $.proxy(this._toggleOrderLoop, this));\n\n playPointer.on('touchmove', $.proxy(this._movePlaybar, this));\n playPointer.on('touchend', $.proxy(this.assignPlay, this));\n playPointer.on('mousedown', $.proxy(this._mousedownCb, this));\n\n this.playListBtn.on('click', $.proxy(this._togglePlayList, this));\n this.playListWrap.on('click', 'li', $.proxy(this.switchPlay, this));\n\n this.preBtn.on('click', $.proxy(this.prePlay, this));\n this.nextBtn.on('click', $.proxy(this.nextPlay, this));\n }\n\n prePlay() {\n let idx = this.playIdx - 1;\n if (idx < 0) {\n idx = this.totalNum - 1;\n }\n\n this.switchPlay(idx);\n }\n\n nextPlay() {\n let idx = this.playIdx + 1;\n if (idx > this.totalNum - 1) {\n idx = 0;\n }\n\n this.switchPlay(idx);\n }\n\n _toggleOrderLoop(event) {\n switch(this.loopType) {\n case 'order':\n this.loopType = 'none';\n this.loopBtn.addClass('gray');\n break;\n case 'none':\n this.loopType = 'order';\n this.loopBtn.removeClass('gray');\n break;\n default:\n break;\n }\n }\n\n /**\n * 设置循环播放方式\n * type {string} 循环播放方式\n * none: 不循环\n * order: 顺序循环\n * single: 单曲循环\n */\n setLoopType(type) {\n this.loopType = type;\n }\n\n /**\n * 添加新歌曲到播放列表\n * song {object} 需要添加的歌曲对象\n * title: 歌名\n * author: 作者\n * src: 音频地址\n * cover: 音频封面图\n */\n addtoPlayList(song) {\n this.totalNum++;\n this.data.push(song);\n\n //render list template\n song.idx = this.totalNum;\n this.playListWrap.append(render(listTpl, song));\n\n $.trigger(this, 'afterAddtoPlayList', [{\n song: song\n }]);\n }\n\n /**\n * 歌曲播放切换\n * event {event object | idx}\n * 接收参数有两种方式\n * 一种通过事件event找到需要播放的idx\n * 直接传入需要播放的idx\n * idx 从0开始\n */\n switchPlay(event) {\n let me = this,\n config = this.config,\n playListItems = this.playListItems,\n idx = event;\n\n if (typeof event === 'object') {\n idx = $(event.currentTarget).data('idx')\n }\n\n if (this.playIdx === idx) return;\n\n let songData = this.data[idx];\n playListItems.removeClass('cur');\n $(playListItems.get(idx)).addClass('cur');\n\n this.pause();\n this.audio.setAttribute('src', songData.src);\n this.playIdx = idx;\n this.play();\n\n this.cover.attr('src', songData.cover);\n this.title.html(`${songData.title}${songData.author}`);\n }\n\n _togglePlayList(event) {\n let me = this,\n config = this.config,\n playListWrap = this.playListWrap;\n\n if (this.playListStatus === 'show') {\n playListWrap.css('height', 0);\n this.playListStatus = 'hide';\n } else {\n playListWrap.css('height', this.playListHeight);\n this.playListStatus = 'show';\n }\n }\n\n _mousedownCb() {\n let me = this;\n let playPointer = this.playPointer;\n playPointer.on('mousemove', this.tempMovePlaybar);\n playPointer.on('mouseup', this.tempMouseupCb);\n }\n\n _mouseupCb(event) {\n let me = this;\n let playPointer = this.playPointer;\n\n playPointer.unbind('mousemove', this.tempMovePlaybar);\n playPointer.unbind('mouseup', this.tempMouseupCb);\n\n this.assignPlay(event);\n }\n\n _movePlaybar(event) {\n event.preventDefault();\n event.stopPropagation();\n\n this.clearPlayTimer();\n\n //根据不同的事件取相应的坐标值\n let pointerClientX = event.clientX || event.touches[0].clientX;\n let offsetX = pointerClientX - this.playBarClientX;\n let curPercent = Math.min(offsetX / this.playBarWidth, 1);\n\n this.playedBar.css('width', curPercent * 100 + '%');\n this.playTime.html(this.formatSeconds(this.audio.duration * curPercent));\n }\n\n assignPlay(event) {\n event.preventDefault();\n event.stopPropagation();\n\n let audio = this.audio;\n\n //分点击事件和touchend事件,获取坐标的方式不一样\n let pointerClientX = event.clientX || event.changedTouches[0].clientX;\n let curPercent = (pointerClientX - this.playBarClientX) / this.playBarWidth;\n\n //指定位置播放,立即更新播放指示点\n //已播放时间及已播放进度条通过playTimer自动更新\n audio.currentTime = audio.duration * curPercent;\n this.playedBar.css('width', curPercent * 100 + '%');\n\n //如果是通过拖拽播放,需要重新开启playtimer\n if (!this.playTimer) {\n this.startPlayTimer();\n }\n }\n\n play() {\n var me = this,\n config = this.config,\n audio = this.audio;\n\n audio.play();\n this.playStatus = 'play';\n this.startPlayTimer();\n\n if (this.el) {\n this.playBtn.addClass('icon-pause');\n this.coverPlayBtn.addClass('icon-pause');\n this.playBtn.removeClass('icon-play');\n this.coverPlayBtn.removeClass('icon-play');\n }\n\n $.trigger(this, 'play', [{\n song: me.data[this.playIdx]\n }]);\n }\n\n pause() {\n var me = this,\n config = this.config,\n audio = this.audio;\n\n audio.pause();\n this.playStatus = 'pause';\n\n this.clearPlayTimer();\n\n this.playBtn.removeClass('icon-pause');\n this.coverPlayBtn.removeClass('icon-pause');\n this.playBtn.addClass('icon-play');\n this.coverPlayBtn.addClass('icon-play');\n\n $.trigger(this, 'pause', [{\n songInfo: me.data[this.playIdx]\n }]);\n }\n\n startPlayTimer() {\n let audio = this.audio;\n\n this.playTimer = setInterval(() => {\n let playedPercent = audio.currentTime / audio.duration;\n this.playedBar.css('width', playedPercent * 100 + '%');\n this.playTime.html(this.formatSeconds(audio.currentTime));\n }, 500);\n }\n\n clearPlayTimer() {\n if (this.playTimer) {\n clearInterval(this.playTimer);\n this.playTimer = null;\n }\n }\n\n togglePlay(event) {\n if (this.playStatus === 'play') {\n this.pause();\n } else {\n this.play();\n }\n }\n\n formatSeconds(seconds) {\n let minute = parseInt(seconds / 60, 10);\n let second = parseInt(seconds - minute * 60, 10);\n let actNum = (num) => {\n let rst = '';\n if (num < 1) {\n rst = '00';\n } else if (num >= 1 && num < 10) {\n rst = `0${num}`;\n } else {\n rst = num;\n }\n\n return rst;\n }\n\n minute = actNum(minute);\n second = actNum(second);\n\n return `${minute}:${second}`;\n }\n\n extend(object) {\n let args = Array.prototype.slice.call(arguments, 1);\n\n for (let i = 0, source; source = args[i]; i++) {\n if (!source) continue;\n for (let property in source) {\n object[property] = source[property];\n }\n }\n\n return object;\n }\n}\n\nexport {AudioPlayer};\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/audio.js\n **/","/* Zepto v1.2.0 - zepto event ajax form ie - zeptojs.com/license */\n(function(global, factory) {\n if (typeof define === 'function' && define.amd)\n define(function() { return factory(global) })\n else\n factory(global)\n}(typeof window !== \"undefined\" ? window : this, function(window) {\n var Zepto = (function() {\n var undefined, key, $, classList, emptyArray = [], concat = emptyArray.concat, filter = emptyArray.filter, slice = emptyArray.slice,\n document = window.document,\n elementDisplay = {}, classCache = {},\n cssNumber = { 'column-count': 1, 'columns': 1, 'font-weight': 1, 'line-height': 1,'opacity': 1, 'z-index': 1, 'zoom': 1 },\n fragmentRE = /^\\s*<(\\w+|!)[^>]*>/,\n singleTagRE = /^<(\\w+)\\s*\\/?>(?:<\\/\\1>|)$/,\n tagExpanderRE = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:]+)[^>]*)\\/>/ig,\n rootNodeRE = /^(?:body|html)$/i,\n capitalRE = /([A-Z])/g,\n\n // special attributes that should be get/set via method calls\n methodAttributes = ['val', 'css', 'html', 'text', 'data', 'width', 'height', 'offset'],\n\n adjacencyOperators = [ 'after', 'prepend', 'before', 'append' ],\n table = document.createElement('table'),\n tableRow = document.createElement('tr'),\n containers = {\n 'tr': document.createElement('tbody'),\n 'tbody': table, 'thead': table, 'tfoot': table,\n 'td': tableRow, 'th': tableRow,\n '*': document.createElement('div')\n },\n readyRE = /complete|loaded|interactive/,\n simpleSelectorRE = /^[\\w-]*$/,\n class2type = {},\n toString = class2type.toString,\n zepto = {},\n camelize, uniq,\n tempParent = document.createElement('div'),\n propMap = {\n 'tabindex': 'tabIndex',\n 'readonly': 'readOnly',\n 'for': 'htmlFor',\n 'class': 'className',\n 'maxlength': 'maxLength',\n 'cellspacing': 'cellSpacing',\n 'cellpadding': 'cellPadding',\n 'rowspan': 'rowSpan',\n 'colspan': 'colSpan',\n 'usemap': 'useMap',\n 'frameborder': 'frameBorder',\n 'contenteditable': 'contentEditable'\n },\n isArray = Array.isArray ||\n function(object){ return object instanceof Array }\n\n zepto.matches = function(element, selector) {\n if (!selector || !element || element.nodeType !== 1) return false\n var matchesSelector = element.matches || element.webkitMatchesSelector ||\n element.mozMatchesSelector || element.oMatchesSelector ||\n element.matchesSelector\n if (matchesSelector) return matchesSelector.call(element, selector)\n // fall back to performing a selector:\n var match, parent = element.parentNode, temp = !parent\n if (temp) (parent = tempParent).appendChild(element)\n match = ~zepto.qsa(parent, selector).indexOf(element)\n temp && tempParent.removeChild(element)\n return match\n }\n\n function type(obj) {\n return obj == null ? String(obj) :\n class2type[toString.call(obj)] || \"object\"\n }\n\n function isFunction(value) { return type(value) == \"function\" }\n function isWindow(obj) { return obj != null && obj == obj.window }\n function isDocument(obj) { return obj != null && obj.nodeType == obj.DOCUMENT_NODE }\n function isObject(obj) { return type(obj) == \"object\" }\n function isPlainObject(obj) {\n return isObject(obj) && !isWindow(obj) && Object.getPrototypeOf(obj) == Object.prototype\n }\n\n function likeArray(obj) {\n var length = !!obj && 'length' in obj && obj.length,\n type = $.type(obj)\n\n return 'function' != type && !isWindow(obj) && (\n 'array' == type || length === 0 ||\n (typeof length == 'number' && length > 0 && (length - 1) in obj)\n )\n }\n\n function compact(array) { return filter.call(array, function(item){ return item != null }) }\n function flatten(array) { return array.length > 0 ? $.fn.concat.apply([], array) : array }\n camelize = function(str){ return str.replace(/-+(.)?/g, function(match, chr){ return chr ? chr.toUpperCase() : '' }) }\n function dasherize(str) {\n return str.replace(/::/g, '/')\n .replace(/([A-Z]+)([A-Z][a-z])/g, '$1_$2')\n .replace(/([a-z\\d])([A-Z])/g, '$1_$2')\n .replace(/_/g, '-')\n .toLowerCase()\n }\n uniq = function(array){ return filter.call(array, function(item, idx){ return array.indexOf(item) == idx }) }\n\n function classRE(name) {\n return name in classCache ?\n classCache[name] : (classCache[name] = new RegExp('(^|\\\\s)' + name + '(\\\\s|$)'))\n }\n\n function maybeAddPx(name, value) {\n return (typeof value == \"number\" && !cssNumber[dasherize(name)]) ? value + \"px\" : value\n }\n\n function defaultDisplay(nodeName) {\n var element, display\n if (!elementDisplay[nodeName]) {\n element = document.createElement(nodeName)\n document.body.appendChild(element)\n display = getComputedStyle(element, '').getPropertyValue(\"display\")\n element.parentNode.removeChild(element)\n display == \"none\" && (display = \"block\")\n elementDisplay[nodeName] = display\n }\n return elementDisplay[nodeName]\n }\n\n function children(element) {\n return 'children' in element ?\n slice.call(element.children) :\n $.map(element.childNodes, function(node){ if (node.nodeType == 1) return node })\n }\n\n function Z(dom, selector) {\n var i, len = dom ? dom.length : 0\n for (i = 0; i < len; i++) this[i] = dom[i]\n this.length = len\n this.selector = selector || ''\n }\n\n // `$.zepto.fragment` takes a html string and an optional tag name\n // to generate DOM nodes from the given html string.\n // The generated DOM nodes are returned as an array.\n // This function can be overridden in plugins for example to make\n // it compatible with browsers that don't support the DOM fully.\n zepto.fragment = function(html, name, properties) {\n var dom, nodes, container\n\n // A special case optimization for a single tag\n if (singleTagRE.test(html)) dom = $(document.createElement(RegExp.$1))\n\n if (!dom) {\n if (html.replace) html = html.replace(tagExpanderRE, \"<$1>\")\n if (name === undefined) name = fragmentRE.test(html) && RegExp.$1\n if (!(name in containers)) name = '*'\n\n container = containers[name]\n container.innerHTML = '' + html\n dom = $.each(slice.call(container.childNodes), function(){\n container.removeChild(this)\n })\n }\n\n if (isPlainObject(properties)) {\n nodes = $(dom)\n $.each(properties, function(key, value) {\n if (methodAttributes.indexOf(key) > -1) nodes[key](value)\n else nodes.attr(key, value)\n })\n }\n\n return dom\n }\n\n // `$.zepto.Z` swaps out the prototype of the given `dom` array\n // of nodes with `$.fn` and thus supplying all the Zepto functions\n // to the array. This method can be overridden in plugins.\n zepto.Z = function(dom, selector) {\n return new Z(dom, selector)\n }\n\n // `$.zepto.isZ` should return `true` if the given object is a Zepto\n // collection. This method can be overridden in plugins.\n zepto.isZ = function(object) {\n return object instanceof zepto.Z\n }\n\n // `$.zepto.init` is Zepto's counterpart to jQuery's `$.fn.init` and\n // takes a CSS selector and an optional context (and handles various\n // special cases).\n // This method can be overridden in plugins.\n zepto.init = function(selector, context) {\n var dom\n // If nothing given, return an empty Zepto collection\n if (!selector) return zepto.Z()\n // Optimize for string selectors\n else if (typeof selector == 'string') {\n selector = selector.trim()\n // If it's a html fragment, create nodes from it\n // Note: In both Chrome 21 and Firefox 15, DOM error 12\n // is thrown if the fragment doesn't begin with <\n if (selector[0] == '<' && fragmentRE.test(selector))\n dom = zepto.fragment(selector, RegExp.$1, context), selector = null\n // If there's a context, create a collection on that context first, and select\n // nodes from there\n else if (context !== undefined) return $(context).find(selector)\n // If it's a CSS selector, use it to select nodes.\n else dom = zepto.qsa(document, selector)\n }\n // If a function is given, call it when the DOM is ready\n else if (isFunction(selector)) return $(document).ready(selector)\n // If a Zepto collection is given, just return it\n else if (zepto.isZ(selector)) return selector\n else {\n // normalize array if an array of nodes is given\n if (isArray(selector)) dom = compact(selector)\n // Wrap DOM nodes.\n else if (isObject(selector))\n dom = [selector], selector = null\n // If it's a html fragment, create nodes from it\n else if (fragmentRE.test(selector))\n dom = zepto.fragment(selector.trim(), RegExp.$1, context), selector = null\n // If there's a context, create a collection on that context first, and select\n // nodes from there\n else if (context !== undefined) return $(context).find(selector)\n // And last but no least, if it's a CSS selector, use it to select nodes.\n else dom = zepto.qsa(document, selector)\n }\n // create a new Zepto collection from the nodes found\n return zepto.Z(dom, selector)\n }\n\n // `$` will be the base `Zepto` object. When calling this\n // function just call `$.zepto.init, which makes the implementation\n // details of selecting nodes and creating Zepto collections\n // patchable in plugins.\n $ = function(selector, context){\n return zepto.init(selector, context)\n }\n\n function extend(target, source, deep) {\n for (key in source)\n if (deep && (isPlainObject(source[key]) || isArray(source[key]))) {\n if (isPlainObject(source[key]) && !isPlainObject(target[key]))\n target[key] = {}\n if (isArray(source[key]) && !isArray(target[key]))\n target[key] = []\n extend(target[key], source[key], deep)\n }\n else if (source[key] !== undefined) target[key] = source[key]\n }\n\n // Copy all but undefined properties from one or more\n // objects to the `target` object.\n $.extend = function(target){\n var deep, args = slice.call(arguments, 1)\n if (typeof target == 'boolean') {\n deep = target\n target = args.shift()\n }\n args.forEach(function(arg){ extend(target, arg, deep) })\n return target\n }\n\n // `$.zepto.qsa` is Zepto's CSS selector implementation which\n // uses `document.querySelectorAll` and optimizes for some special cases, like `#id`.\n // This method can be overridden in plugins.\n zepto.qsa = function(element, selector){\n var found,\n maybeID = selector[0] == '#',\n maybeClass = !maybeID && selector[0] == '.',\n nameOnly = maybeID || maybeClass ? selector.slice(1) : selector, // Ensure that a 1 char tag name still gets checked\n isSimple = simpleSelectorRE.test(nameOnly)\n return (element.getElementById && isSimple && maybeID) ? // Safari DocumentFragment doesn't have getElementById\n ( (found = element.getElementById(nameOnly)) ? [found] : [] ) :\n (element.nodeType !== 1 && element.nodeType !== 9 && element.nodeType !== 11) ? [] :\n slice.call(\n isSimple && !maybeID && element.getElementsByClassName ? // DocumentFragment doesn't have getElementsByClassName/TagName\n maybeClass ? element.getElementsByClassName(nameOnly) : // If it's simple, it could be a class\n element.getElementsByTagName(selector) : // Or a tag\n element.querySelectorAll(selector) // Or it's not simple, and we need to query all\n )\n }\n\n function filtered(nodes, selector) {\n return selector == null ? $(nodes) : $(nodes).filter(selector)\n }\n\n $.contains = document.documentElement.contains ?\n function(parent, node) {\n return parent !== node && parent.contains(node)\n } :\n function(parent, node) {\n while (node && (node = node.parentNode))\n if (node === parent) return true\n return false\n }\n\n function funcArg(context, arg, idx, payload) {\n return isFunction(arg) ? arg.call(context, idx, payload) : arg\n }\n\n function setAttribute(node, name, value) {\n value == null ? node.removeAttribute(name) : node.setAttribute(name, value)\n }\n\n // access className property while respecting SVGAnimatedString\n function className(node, value){\n var klass = node.className || '',\n svg = klass && klass.baseVal !== undefined\n\n if (value === undefined) return svg ? klass.baseVal : klass\n svg ? (klass.baseVal = value) : (node.className = value)\n }\n\n // \"true\" => true\n // \"false\" => false\n // \"null\" => null\n // \"42\" => 42\n // \"42.5\" => 42.5\n // \"08\" => \"08\"\n // JSON => parse if valid\n // String => self\n function deserializeValue(value) {\n try {\n return value ?\n value == \"true\" ||\n ( value == \"false\" ? false :\n value == \"null\" ? null :\n +value + \"\" == value ? +value :\n /^[\\[\\{]/.test(value) ? $.parseJSON(value) :\n value )\n : value\n } catch(e) {\n return value\n }\n }\n\n $.type = type\n $.isFunction = isFunction\n $.isWindow = isWindow\n $.isArray = isArray\n $.isPlainObject = isPlainObject\n\n $.isEmptyObject = function(obj) {\n var name\n for (name in obj) return false\n return true\n }\n\n $.isNumeric = function(val) {\n var num = Number(val), type = typeof val\n return val != null && type != 'boolean' &&\n (type != 'string' || val.length) &&\n !isNaN(num) && isFinite(num) || false\n }\n\n $.inArray = function(elem, array, i){\n return emptyArray.indexOf.call(array, elem, i)\n }\n\n $.camelCase = camelize\n $.trim = function(str) {\n return str == null ? \"\" : String.prototype.trim.call(str)\n }\n\n // plugin compatibility\n $.uuid = 0\n $.support = { }\n $.expr = { }\n $.noop = function() {}\n\n $.map = function(elements, callback){\n var value, values = [], i, key\n if (likeArray(elements))\n for (i = 0; i < elements.length; i++) {\n value = callback(elements[i], i)\n if (value != null) values.push(value)\n }\n else\n for (key in elements) {\n value = callback(elements[key], key)\n if (value != null) values.push(value)\n }\n return flatten(values)\n }\n\n $.each = function(elements, callback){\n var i, key\n if (likeArray(elements)) {\n for (i = 0; i < elements.length; i++)\n if (callback.call(elements[i], i, elements[i]) === false) return elements\n } else {\n for (key in elements)\n if (callback.call(elements[key], key, elements[key]) === false) return elements\n }\n\n return elements\n }\n\n $.grep = function(elements, callback){\n return filter.call(elements, callback)\n }\n\n if (window.JSON) $.parseJSON = JSON.parse\n\n // Populate the class2type map\n $.each(\"Boolean Number String Function Array Date RegExp Object Error\".split(\" \"), function(i, name) {\n class2type[ \"[object \" + name + \"]\" ] = name.toLowerCase()\n })\n\n // Define methods that will be available on all\n // Zepto collections\n $.fn = {\n constructor: zepto.Z,\n length: 0,\n\n // Because a collection acts like an array\n // copy over these useful array functions.\n forEach: emptyArray.forEach,\n reduce: emptyArray.reduce,\n push: emptyArray.push,\n sort: emptyArray.sort,\n splice: emptyArray.splice,\n indexOf: emptyArray.indexOf,\n concat: function(){\n var i, value, args = []\n for (i = 0; i < arguments.length; i++) {\n value = arguments[i]\n args[i] = zepto.isZ(value) ? value.toArray() : value\n }\n return concat.apply(zepto.isZ(this) ? this.toArray() : this, args)\n },\n\n // `map` and `slice` in the jQuery API work differently\n // from their array counterparts\n map: function(fn){\n return $($.map(this, function(el, i){ return fn.call(el, i, el) }))\n },\n slice: function(){\n return $(slice.apply(this, arguments))\n },\n\n ready: function(callback){\n // need to check if document.body exists for IE as that browser reports\n // document ready when it hasn't yet created the body element\n if (readyRE.test(document.readyState) && document.body) callback($)\n else document.addEventListener('DOMContentLoaded', function(){ callback($) }, false)\n return this\n },\n get: function(idx){\n return idx === undefined ? slice.call(this) : this[idx >= 0 ? idx : idx + this.length]\n },\n toArray: function(){ return this.get() },\n size: function(){\n return this.length\n },\n remove: function(){\n return this.each(function(){\n if (this.parentNode != null)\n this.parentNode.removeChild(this)\n })\n },\n each: function(callback){\n emptyArray.every.call(this, function(el, idx){\n return callback.call(el, idx, el) !== false\n })\n return this\n },\n filter: function(selector){\n if (isFunction(selector)) return this.not(this.not(selector))\n return $(filter.call(this, function(element){\n return zepto.matches(element, selector)\n }))\n },\n add: function(selector,context){\n return $(uniq(this.concat($(selector,context))))\n },\n is: function(selector){\n return this.length > 0 && zepto.matches(this[0], selector)\n },\n not: function(selector){\n var nodes=[]\n if (isFunction(selector) && selector.call !== undefined)\n this.each(function(idx){\n if (!selector.call(this,idx)) nodes.push(this)\n })\n else {\n var excludes = typeof selector == 'string' ? this.filter(selector) :\n (likeArray(selector) && isFunction(selector.item)) ? slice.call(selector) : $(selector)\n this.forEach(function(el){\n if (excludes.indexOf(el) < 0) nodes.push(el)\n })\n }\n return $(nodes)\n },\n has: function(selector){\n return this.filter(function(){\n return isObject(selector) ?\n $.contains(this, selector) :\n $(this).find(selector).size()\n })\n },\n eq: function(idx){\n return idx === -1 ? this.slice(idx) : this.slice(idx, + idx + 1)\n },\n first: function(){\n var el = this[0]\n return el && !isObject(el) ? el : $(el)\n },\n last: function(){\n var el = this[this.length - 1]\n return el && !isObject(el) ? el : $(el)\n },\n find: function(selector){\n var result, $this = this\n if (!selector) result = $()\n else if (typeof selector == 'object')\n result = $(selector).filter(function(){\n var node = this\n return emptyArray.some.call($this, function(parent){\n return $.contains(parent, node)\n })\n })\n else if (this.length == 1) result = $(zepto.qsa(this[0], selector))\n else result = this.map(function(){ return zepto.qsa(this, selector) })\n return result\n },\n closest: function(selector, context){\n var nodes = [], collection = typeof selector == 'object' && $(selector)\n this.each(function(_, node){\n while (node && !(collection ? collection.indexOf(node) >= 0 : zepto.matches(node, selector)))\n node = node !== context && !isDocument(node) && node.parentNode\n if (node && nodes.indexOf(node) < 0) nodes.push(node)\n })\n return $(nodes)\n },\n parents: function(selector){\n var ancestors = [], nodes = this\n while (nodes.length > 0)\n nodes = $.map(nodes, function(node){\n if ((node = node.parentNode) && !isDocument(node) && ancestors.indexOf(node) < 0) {\n ancestors.push(node)\n return node\n }\n })\n return filtered(ancestors, selector)\n },\n parent: function(selector){\n return filtered(uniq(this.pluck('parentNode')), selector)\n },\n children: function(selector){\n return filtered(this.map(function(){ return children(this) }), selector)\n },\n contents: function() {\n return this.map(function() { return this.contentDocument || slice.call(this.childNodes) })\n },\n siblings: function(selector){\n return filtered(this.map(function(i, el){\n return filter.call(children(el.parentNode), function(child){ return child!==el })\n }), selector)\n },\n empty: function(){\n return this.each(function(){ this.innerHTML = '' })\n },\n // `pluck` is borrowed from Prototype.js\n pluck: function(property){\n return $.map(this, function(el){ return el[property] })\n },\n show: function(){\n return this.each(function(){\n this.style.display == \"none\" && (this.style.display = '')\n if (getComputedStyle(this, '').getPropertyValue(\"display\") == \"none\")\n this.style.display = defaultDisplay(this.nodeName)\n })\n },\n replaceWith: function(newContent){\n return this.before(newContent).remove()\n },\n wrap: function(structure){\n var func = isFunction(structure)\n if (this[0] && !func)\n var dom = $(structure).get(0),\n clone = dom.parentNode || this.length > 1\n\n return this.each(function(index){\n $(this).wrapAll(\n func ? structure.call(this, index) :\n clone ? dom.cloneNode(true) : dom\n )\n })\n },\n wrapAll: function(structure){\n if (this[0]) {\n $(this[0]).before(structure = $(structure))\n var children\n // drill down to the inmost element\n while ((children = structure.children()).length) structure = children.first()\n $(structure).append(this)\n }\n return this\n },\n wrapInner: function(structure){\n var func = isFunction(structure)\n return this.each(function(index){\n var self = $(this), contents = self.contents(),\n dom = func ? structure.call(this, index) : structure\n contents.length ? contents.wrapAll(dom) : self.append(dom)\n })\n },\n unwrap: function(){\n this.parent().each(function(){\n $(this).replaceWith($(this).children())\n })\n return this\n },\n clone: function(){\n return this.map(function(){ return this.cloneNode(true) })\n },\n hide: function(){\n return this.css(\"display\", \"none\")\n },\n toggle: function(setting){\n return this.each(function(){\n var el = $(this)\n ;(setting === undefined ? el.css(\"display\") == \"none\" : setting) ? el.show() : el.hide()\n })\n },\n prev: function(selector){ return $(this.pluck('previousElementSibling')).filter(selector || '*') },\n next: function(selector){ return $(this.pluck('nextElementSibling')).filter(selector || '*') },\n html: function(html){\n return 0 in arguments ?\n this.each(function(idx){\n var originHtml = this.innerHTML\n $(this).empty().append( funcArg(this, html, idx, originHtml) )\n }) :\n (0 in this ? this[0].innerHTML : null)\n },\n text: function(text){\n return 0 in arguments ?\n this.each(function(idx){\n var newText = funcArg(this, text, idx, this.textContent)\n this.textContent = newText == null ? '' : ''+newText\n }) :\n (0 in this ? this.pluck('textContent').join(\"\") : null)\n },\n attr: function(name, value){\n var result\n return (typeof name == 'string' && !(1 in arguments)) ?\n (0 in this && this[0].nodeType == 1 && (result = this[0].getAttribute(name)) != null ? result : undefined) :\n this.each(function(idx){\n if (this.nodeType !== 1) return\n if (isObject(name)) for (key in name) setAttribute(this, key, name[key])\n else setAttribute(this, name, funcArg(this, value, idx, this.getAttribute(name)))\n })\n },\n removeAttr: function(name){\n return this.each(function(){ this.nodeType === 1 && name.split(' ').forEach(function(attribute){\n setAttribute(this, attribute)\n }, this)})\n },\n prop: function(name, value){\n name = propMap[name] || name\n return (1 in arguments) ?\n this.each(function(idx){\n this[name] = funcArg(this, value, idx, this[name])\n }) :\n (this[0] && this[0][name])\n },\n removeProp: function(name){\n name = propMap[name] || name\n return this.each(function(){ delete this[name] })\n },\n data: function(name, value){\n var attrName = 'data-' + name.replace(capitalRE, '-$1').toLowerCase()\n\n var data = (1 in arguments) ?\n this.attr(attrName, value) :\n this.attr(attrName)\n\n return data !== null ? deserializeValue(data) : undefined\n },\n val: function(value){\n if (0 in arguments) {\n if (value == null) value = \"\"\n return this.each(function(idx){\n this.value = funcArg(this, value, idx, this.value)\n })\n } else {\n return this[0] && (this[0].multiple ?\n $(this[0]).find('option').filter(function(){ return this.selected }).pluck('value') :\n this[0].value)\n }\n },\n offset: function(coordinates){\n if (coordinates) return this.each(function(index){\n var $this = $(this),\n coords = funcArg(this, coordinates, index, $this.offset()),\n parentOffset = $this.offsetParent().offset(),\n props = {\n top: coords.top - parentOffset.top,\n left: coords.left - parentOffset.left\n }\n\n if ($this.css('position') == 'static') props['position'] = 'relative'\n $this.css(props)\n })\n if (!this.length) return null\n if (document.documentElement !== this[0] && !$.contains(document.documentElement, this[0]))\n return {top: 0, left: 0}\n var obj = this[0].getBoundingClientRect()\n return {\n left: obj.left + window.pageXOffset,\n top: obj.top + window.pageYOffset,\n width: Math.round(obj.width),\n height: Math.round(obj.height)\n }\n },\n css: function(property, value){\n if (arguments.length < 2) {\n var element = this[0]\n if (typeof property == 'string') {\n if (!element) return\n return element.style[camelize(property)] || getComputedStyle(element, '').getPropertyValue(property)\n } else if (isArray(property)) {\n if (!element) return\n var props = {}\n var computedStyle = getComputedStyle(element, '')\n $.each(property, function(_, prop){\n props[prop] = (element.style[camelize(prop)] || computedStyle.getPropertyValue(prop))\n })\n return props\n }\n }\n\n var css = ''\n if (type(property) == 'string') {\n if (!value && value !== 0)\n this.each(function(){ this.style.removeProperty(dasherize(property)) })\n else\n css = dasherize(property) + \":\" + maybeAddPx(property, value)\n } else {\n for (key in property)\n if (!property[key] && property[key] !== 0)\n this.each(function(){ this.style.removeProperty(dasherize(key)) })\n else\n css += dasherize(key) + ':' + maybeAddPx(key, property[key]) + ';'\n }\n\n return this.each(function(){ this.style.cssText += ';' + css })\n },\n index: function(element){\n return element ? this.indexOf($(element)[0]) : this.parent().children().indexOf(this[0])\n },\n hasClass: function(name){\n if (!name) return false\n return emptyArray.some.call(this, function(el){\n return this.test(className(el))\n }, classRE(name))\n },\n addClass: function(name){\n if (!name) return this\n return this.each(function(idx){\n if (!('className' in this)) return\n classList = []\n var cls = className(this), newName = funcArg(this, name, idx, cls)\n newName.split(/\\s+/g).forEach(function(klass){\n if (!$(this).hasClass(klass)) classList.push(klass)\n }, this)\n classList.length && className(this, cls + (cls ? \" \" : \"\") + classList.join(\" \"))\n })\n },\n removeClass: function(name){\n return this.each(function(idx){\n if (!('className' in this)) return\n if (name === undefined) return className(this, '')\n classList = className(this)\n funcArg(this, name, idx, classList).split(/\\s+/g).forEach(function(klass){\n classList = classList.replace(classRE(klass), \" \")\n })\n className(this, classList.trim())\n })\n },\n toggleClass: function(name, when){\n if (!name) return this\n return this.each(function(idx){\n var $this = $(this), names = funcArg(this, name, idx, className(this))\n names.split(/\\s+/g).forEach(function(klass){\n (when === undefined ? !$this.hasClass(klass) : when) ?\n $this.addClass(klass) : $this.removeClass(klass)\n })\n })\n },\n scrollTop: function(value){\n if (!this.length) return\n var hasScrollTop = 'scrollTop' in this[0]\n if (value === undefined) return hasScrollTop ? this[0].scrollTop : this[0].pageYOffset\n return this.each(hasScrollTop ?\n function(){ this.scrollTop = value } :\n function(){ this.scrollTo(this.scrollX, value) })\n },\n scrollLeft: function(value){\n if (!this.length) return\n var hasScrollLeft = 'scrollLeft' in this[0]\n if (value === undefined) return hasScrollLeft ? this[0].scrollLeft : this[0].pageXOffset\n return this.each(hasScrollLeft ?\n function(){ this.scrollLeft = value } :\n function(){ this.scrollTo(value, this.scrollY) })\n },\n position: function() {\n if (!this.length) return\n\n var elem = this[0],\n // Get *real* offsetParent\n offsetParent = this.offsetParent(),\n // Get correct offsets\n offset = this.offset(),\n parentOffset = rootNodeRE.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset()\n\n // Subtract element margins\n // note: when an element has margin: auto the offsetLeft and marginLeft\n // are the same in Safari causing offset.left to incorrectly be 0\n offset.top -= parseFloat( $(elem).css('margin-top') ) || 0\n offset.left -= parseFloat( $(elem).css('margin-left') ) || 0\n\n // Add offsetParent borders\n parentOffset.top += parseFloat( $(offsetParent[0]).css('border-top-width') ) || 0\n parentOffset.left += parseFloat( $(offsetParent[0]).css('border-left-width') ) || 0\n\n // Subtract the two offsets\n return {\n top: offset.top - parentOffset.top,\n left: offset.left - parentOffset.left\n }\n },\n offsetParent: function() {\n return this.map(function(){\n var parent = this.offsetParent || document.body\n while (parent && !rootNodeRE.test(parent.nodeName) && $(parent).css(\"position\") == \"static\")\n parent = parent.offsetParent\n return parent\n })\n }\n }\n\n // for now\n $.fn.detach = $.fn.remove\n\n // Generate the `width` and `height` functions\n ;['width', 'height'].forEach(function(dimension){\n var dimensionProperty =\n dimension.replace(/./, function(m){ return m[0].toUpperCase() })\n\n $.fn[dimension] = function(value){\n var offset, el = this[0]\n if (value === undefined) return isWindow(el) ? el['inner' + dimensionProperty] :\n isDocument(el) ? el.documentElement['scroll' + dimensionProperty] :\n (offset = this.offset()) && offset[dimension]\n else return this.each(function(idx){\n el = $(this)\n el.css(dimension, funcArg(this, value, idx, el[dimension]()))\n })\n }\n })\n\n function traverseNode(node, fun) {\n fun(node)\n for (var i = 0, len = node.childNodes.length; i < len; i++)\n traverseNode(node.childNodes[i], fun)\n }\n\n // Generate the `after`, `prepend`, `before`, `append`,\n // `insertAfter`, `insertBefore`, `appendTo`, and `prependTo` methods.\n adjacencyOperators.forEach(function(operator, operatorIndex) {\n var inside = operatorIndex % 2 //=> prepend, append\n\n $.fn[operator] = function(){\n // arguments can be nodes, arrays of nodes, Zepto objects and HTML strings\n var argType, nodes = $.map(arguments, function(arg) {\n var arr = []\n argType = type(arg)\n if (argType == \"array\") {\n arg.forEach(function(el) {\n if (el.nodeType !== undefined) return arr.push(el)\n else if ($.zepto.isZ(el)) return arr = arr.concat(el.get())\n arr = arr.concat(zepto.fragment(el))\n })\n return arr\n }\n return argType == \"object\" || arg == null ?\n arg : zepto.fragment(arg)\n }),\n parent, copyByClone = this.length > 1\n if (nodes.length < 1) return this\n\n return this.each(function(_, target){\n parent = inside ? target : target.parentNode\n\n // convert all methods to a \"before\" operation\n target = operatorIndex == 0 ? target.nextSibling :\n operatorIndex == 1 ? target.firstChild :\n operatorIndex == 2 ? target :\n null\n\n var parentInDocument = $.contains(document.documentElement, parent)\n\n nodes.forEach(function(node){\n if (copyByClone) node = node.cloneNode(true)\n else if (!parent) return $(node).remove()\n\n parent.insertBefore(node, target)\n if (parentInDocument) traverseNode(node, function(el){\n if (el.nodeName != null && el.nodeName.toUpperCase() === 'SCRIPT' &&\n (!el.type || el.type === 'text/javascript') && !el.src){\n var target = el.ownerDocument ? el.ownerDocument.defaultView : window\n target['eval'].call(target, el.innerHTML)\n }\n })\n })\n })\n }\n\n // after => insertAfter\n // prepend => prependTo\n // before => insertBefore\n // append => appendTo\n $.fn[inside ? operator+'To' : 'insert'+(operatorIndex ? 'Before' : 'After')] = function(html){\n $(html)[operator](this)\n return this\n }\n })\n\n zepto.Z.prototype = Z.prototype = $.fn\n\n // Export internal API functions in the `$.zepto` namespace\n zepto.uniq = uniq\n zepto.deserializeValue = deserializeValue\n $.zepto = zepto\n\n return $\n})()\n\nwindow.Zepto = Zepto\nwindow.$ === undefined && (window.$ = Zepto)\n\n;(function($){\n var _zid = 1, undefined,\n slice = Array.prototype.slice,\n isFunction = $.isFunction,\n isString = function(obj){ return typeof obj == 'string' },\n handlers = {},\n specialEvents={},\n focusinSupported = 'onfocusin' in window,\n focus = { focus: 'focusin', blur: 'focusout' },\n hover = { mouseenter: 'mouseover', mouseleave: 'mouseout' }\n\n specialEvents.click = specialEvents.mousedown = specialEvents.mouseup = specialEvents.mousemove = 'MouseEvents'\n\n function zid(element) {\n return element._zid || (element._zid = _zid++)\n }\n function findHandlers(element, event, fn, selector) {\n event = parse(event)\n if (event.ns) var matcher = matcherFor(event.ns)\n return (handlers[zid(element)] || []).filter(function(handler) {\n return handler\n && (!event.e || handler.e == event.e)\n && (!event.ns || matcher.test(handler.ns))\n && (!fn || zid(handler.fn) === zid(fn))\n && (!selector || handler.sel == selector)\n })\n }\n function parse(event) {\n var parts = ('' + event).split('.')\n return {e: parts[0], ns: parts.slice(1).sort().join(' ')}\n }\n function matcherFor(ns) {\n return new RegExp('(?:^| )' + ns.replace(' ', ' .* ?') + '(?: |$)')\n }\n\n function eventCapture(handler, captureSetting) {\n return handler.del &&\n (!focusinSupported && (handler.e in focus)) ||\n !!captureSetting\n }\n\n function realEvent(type) {\n return hover[type] || (focusinSupported && focus[type]) || type\n }\n\n function add(element, events, fn, data, selector, delegator, capture){\n var id = zid(element), set = (handlers[id] || (handlers[id] = []))\n events.split(/\\s/).forEach(function(event){\n if (event == 'ready') return $(document).ready(fn)\n var handler = parse(event)\n handler.fn = fn\n handler.sel = selector\n // emulate mouseenter, mouseleave\n if (handler.e in hover) fn = function(e){\n var related = e.relatedTarget\n if (!related || (related !== this && !$.contains(this, related)))\n return handler.fn.apply(this, arguments)\n }\n handler.del = delegator\n var callback = delegator || fn\n handler.proxy = function(e){\n e = compatible(e)\n if (e.isImmediatePropagationStopped()) return\n e.data = data\n var result = callback.apply(element, e._args == undefined ? [e] : [e].concat(e._args))\n if (result === false) e.preventDefault(), e.stopPropagation()\n return result\n }\n handler.i = set.length\n set.push(handler)\n if ('addEventListener' in element)\n element.addEventListener(realEvent(handler.e), handler.proxy, eventCapture(handler, capture))\n })\n }\n function remove(element, events, fn, selector, capture){\n var id = zid(element)\n ;(events || '').split(/\\s/).forEach(function(event){\n findHandlers(element, event, fn, selector).forEach(function(handler){\n delete handlers[id][handler.i]\n if ('removeEventListener' in element)\n element.removeEventListener(realEvent(handler.e), handler.proxy, eventCapture(handler, capture))\n })\n })\n }\n\n $.event = { add: add, remove: remove }\n\n $.proxy = function(fn, context) {\n var args = (2 in arguments) && slice.call(arguments, 2)\n if (isFunction(fn)) {\n var proxyFn = function(){ return fn.apply(context, args ? args.concat(slice.call(arguments)) : arguments) }\n proxyFn._zid = zid(fn)\n return proxyFn\n } else if (isString(context)) {\n if (args) {\n args.unshift(fn[context], fn)\n return $.proxy.apply(null, args)\n } else {\n return $.proxy(fn[context], fn)\n }\n } else {\n throw new TypeError(\"expected function\")\n }\n }\n\n $.fn.bind = function(event, data, callback){\n return this.on(event, data, callback)\n }\n $.fn.unbind = function(event, callback){\n return this.off(event, callback)\n }\n $.fn.one = function(event, selector, data, callback){\n return this.on(event, selector, data, callback, 1)\n }\n\n var returnTrue = function(){return true},\n returnFalse = function(){return false},\n ignoreProperties = /^([A-Z]|returnValue$|layer[XY]$|webkitMovement[XY]$)/,\n eventMethods = {\n preventDefault: 'isDefaultPrevented',\n stopImmediatePropagation: 'isImmediatePropagationStopped',\n stopPropagation: 'isPropagationStopped'\n }\n\n function compatible(event, source) {\n if (source || !event.isDefaultPrevented) {\n source || (source = event)\n\n $.each(eventMethods, function(name, predicate) {\n var sourceMethod = source[name]\n event[name] = function(){\n this[predicate] = returnTrue\n return sourceMethod && sourceMethod.apply(source, arguments)\n }\n event[predicate] = returnFalse\n })\n\n event.timeStamp || (event.timeStamp = Date.now())\n\n if (source.defaultPrevented !== undefined ? source.defaultPrevented :\n 'returnValue' in source ? source.returnValue === false :\n source.getPreventDefault && source.getPreventDefault())\n event.isDefaultPrevented = returnTrue\n }\n return event\n }\n\n function createProxy(event) {\n var key, proxy = { originalEvent: event }\n for (key in event)\n if (!ignoreProperties.test(key) && event[key] !== undefined) proxy[key] = event[key]\n\n return compatible(proxy, event)\n }\n\n $.fn.delegate = function(selector, event, callback){\n return this.on(event, selector, callback)\n }\n $.fn.undelegate = function(selector, event, callback){\n return this.off(event, selector, callback)\n }\n\n $.fn.live = function(event, callback){\n $(document.body).delegate(this.selector, event, callback)\n return this\n }\n $.fn.die = function(event, callback){\n $(document.body).undelegate(this.selector, event, callback)\n return this\n }\n\n $.fn.on = function(event, selector, data, callback, one){\n var autoRemove, delegator, $this = this\n if (event && !isString(event)) {\n $.each(event, function(type, fn){\n $this.on(type, selector, data, fn, one)\n })\n return $this\n }\n\n if (!isString(selector) && !isFunction(callback) && callback !== false)\n callback = data, data = selector, selector = undefined\n if (callback === undefined || data === false)\n callback = data, data = undefined\n\n if (callback === false) callback = returnFalse\n\n return $this.each(function(_, element){\n if (one) autoRemove = function(e){\n remove(element, e.type, callback)\n return callback.apply(this, arguments)\n }\n\n if (selector) delegator = function(e){\n var evt, match = $(e.target).closest(selector, element).get(0)\n if (match && match !== element) {\n evt = $.extend(createProxy(e), {currentTarget: match, liveFired: element})\n return (autoRemove || callback).apply(match, [evt].concat(slice.call(arguments, 1)))\n }\n }\n\n add(element, event, callback, data, selector, delegator || autoRemove)\n })\n }\n $.fn.off = function(event, selector, callback){\n var $this = this\n if (event && !isString(event)) {\n $.each(event, function(type, fn){\n $this.off(type, selector, fn)\n })\n return $this\n }\n\n if (!isString(selector) && !isFunction(callback) && callback !== false)\n callback = selector, selector = undefined\n\n if (callback === false) callback = returnFalse\n\n return $this.each(function(){\n remove(this, event, callback, selector)\n })\n }\n\n $.fn.trigger = function(event, args){\n event = (isString(event) || $.isPlainObject(event)) ? $.Event(event) : compatible(event)\n event._args = args\n return this.each(function(){\n // handle focus(), blur() by calling them directly\n if (event.type in focus && typeof this[event.type] == \"function\") this[event.type]()\n // items in the collection might not be DOM elements\n else if ('dispatchEvent' in this) this.dispatchEvent(event)\n else $(this).triggerHandler(event, args)\n })\n }\n\n // triggers event handlers on current element just as if an event occurred,\n // doesn't trigger an actual event, doesn't bubble\n $.fn.triggerHandler = function(event, args){\n var e, result\n this.each(function(i, element){\n e = createProxy(isString(event) ? $.Event(event) : event)\n e._args = args\n e.target = element\n $.each(findHandlers(element, event.type || event), function(i, handler){\n result = handler.proxy(e)\n if (e.isImmediatePropagationStopped()) return false\n })\n })\n return result\n }\n\n // shortcut methods for `.bind(event, fn)` for each event type\n ;('focusin focusout focus blur load resize scroll unload click dblclick '+\n 'mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave '+\n 'change select keydown keypress keyup error').split(' ').forEach(function(event) {\n $.fn[event] = function(callback) {\n return (0 in arguments) ?\n this.bind(event, callback) :\n this.trigger(event)\n }\n })\n\n $.Event = function(type, props) {\n if (!isString(type)) props = type, type = props.type\n var event = document.createEvent(specialEvents[type] || 'Events'), bubbles = true\n if (props) for (var name in props) (name == 'bubbles') ? (bubbles = !!props[name]) : (event[name] = props[name])\n event.initEvent(type, bubbles, true)\n return compatible(event)\n }\n\n})(Zepto)\n\n;(function($){\n var jsonpID = +new Date(),\n document = window.document,\n key,\n name,\n rscript = /)<[^<]*)*<\\/script>/gi,\n scriptTypeRE = /^(?:text|application)\\/javascript/i,\n xmlTypeRE = /^(?:text|application)\\/xml/i,\n jsonType = 'application/json',\n htmlType = 'text/html',\n blankRE = /^\\s*$/,\n originAnchor = document.createElement('a')\n\n originAnchor.href = window.location.href\n\n // trigger a custom event and return false if it was cancelled\n function triggerAndReturn(context, eventName, data) {\n var event = $.Event(eventName)\n $(context).trigger(event, data)\n return !event.isDefaultPrevented()\n }\n\n // trigger an Ajax \"global\" event\n function triggerGlobal(settings, context, eventName, data) {\n if (settings.global) return triggerAndReturn(context || document, eventName, data)\n }\n\n // Number of active Ajax requests\n $.active = 0\n\n function ajaxStart(settings) {\n if (settings.global && $.active++ === 0) triggerGlobal(settings, null, 'ajaxStart')\n }\n function ajaxStop(settings) {\n if (settings.global && !(--$.active)) triggerGlobal(settings, null, 'ajaxStop')\n }\n\n // triggers an extra global event \"ajaxBeforeSend\" that's like \"ajaxSend\" but cancelable\n function ajaxBeforeSend(xhr, settings) {\n var context = settings.context\n if (settings.beforeSend.call(context, xhr, settings) === false ||\n triggerGlobal(settings, context, 'ajaxBeforeSend', [xhr, settings]) === false)\n return false\n\n triggerGlobal(settings, context, 'ajaxSend', [xhr, settings])\n }\n function ajaxSuccess(data, xhr, settings, deferred) {\n var context = settings.context, status = 'success'\n settings.success.call(context, data, status, xhr)\n if (deferred) deferred.resolveWith(context, [data, status, xhr])\n triggerGlobal(settings, context, 'ajaxSuccess', [xhr, settings, data])\n ajaxComplete(status, xhr, settings)\n }\n // type: \"timeout\", \"error\", \"abort\", \"parsererror\"\n function ajaxError(error, type, xhr, settings, deferred) {\n var context = settings.context\n settings.error.call(context, xhr, type, error)\n if (deferred) deferred.rejectWith(context, [xhr, type, error])\n triggerGlobal(settings, context, 'ajaxError', [xhr, settings, error || type])\n ajaxComplete(type, xhr, settings)\n }\n // status: \"success\", \"notmodified\", \"error\", \"timeout\", \"abort\", \"parsererror\"\n function ajaxComplete(status, xhr, settings) {\n var context = settings.context\n settings.complete.call(context, xhr, status)\n triggerGlobal(settings, context, 'ajaxComplete', [xhr, settings])\n ajaxStop(settings)\n }\n\n function ajaxDataFilter(data, type, settings) {\n if (settings.dataFilter == empty) return data\n var context = settings.context\n return settings.dataFilter.call(context, data, type)\n }\n\n // Empty function, used as default callback\n function empty() {}\n\n $.ajaxJSONP = function(options, deferred){\n if (!('type' in options)) return $.ajax(options)\n\n var _callbackName = options.jsonpCallback,\n callbackName = ($.isFunction(_callbackName) ?\n _callbackName() : _callbackName) || ('Zepto' + (jsonpID++)),\n script = document.createElement('script'),\n originalCallback = window[callbackName],\n responseData,\n abort = function(errorType) {\n $(script).triggerHandler('error', errorType || 'abort')\n },\n xhr = { abort: abort }, abortTimeout\n\n if (deferred) deferred.promise(xhr)\n\n $(script).on('load error', function(e, errorType){\n clearTimeout(abortTimeout)\n $(script).off().remove()\n\n if (e.type == 'error' || !responseData) {\n ajaxError(null, errorType || 'error', xhr, options, deferred)\n } else {\n ajaxSuccess(responseData[0], xhr, options, deferred)\n }\n\n window[callbackName] = originalCallback\n if (responseData && $.isFunction(originalCallback))\n originalCallback(responseData[0])\n\n originalCallback = responseData = undefined\n })\n\n if (ajaxBeforeSend(xhr, options) === false) {\n abort('abort')\n return xhr\n }\n\n window[callbackName] = function(){\n responseData = arguments\n }\n\n script.src = options.url.replace(/\\?(.+)=\\?/, '?$1=' + callbackName)\n document.head.appendChild(script)\n\n if (options.timeout > 0) abortTimeout = setTimeout(function(){\n abort('timeout')\n }, options.timeout)\n\n return xhr\n }\n\n $.ajaxSettings = {\n // Default type of request\n type: 'GET',\n // Callback that is executed before request\n beforeSend: empty,\n // Callback that is executed if the request succeeds\n success: empty,\n // Callback that is executed the the server drops error\n error: empty,\n // Callback that is executed on request complete (both: error and success)\n complete: empty,\n // The context for the callbacks\n context: null,\n // Whether to trigger \"global\" Ajax events\n global: true,\n // Transport\n xhr: function () {\n return new window.XMLHttpRequest()\n },\n // MIME types mapping\n // IIS returns Javascript as \"application/x-javascript\"\n accepts: {\n script: 'text/javascript, application/javascript, application/x-javascript',\n json: jsonType,\n xml: 'application/xml, text/xml',\n html: htmlType,\n text: 'text/plain'\n },\n // Whether the request is to another domain\n crossDomain: false,\n // Default timeout\n timeout: 0,\n // Whether data should be serialized to string\n processData: true,\n // Whether the browser should be allowed to cache GET responses\n cache: true,\n //Used to handle the raw response data of XMLHttpRequest.\n //This is a pre-filtering function to sanitize the response.\n //The sanitized response should be returned\n dataFilter: empty\n }\n\n function mimeToDataType(mime) {\n if (mime) mime = mime.split(';', 2)[0]\n return mime && ( mime == htmlType ? 'html' :\n mime == jsonType ? 'json' :\n scriptTypeRE.test(mime) ? 'script' :\n xmlTypeRE.test(mime) && 'xml' ) || 'text'\n }\n\n function appendQuery(url, query) {\n if (query == '') return url\n return (url + '&' + query).replace(/[&?]{1,2}/, '?')\n }\n\n // serialize payload and append it to the URL for GET requests\n function serializeData(options) {\n if (options.processData && options.data && $.type(options.data) != \"string\")\n options.data = $.param(options.data, options.traditional)\n if (options.data && (!options.type || options.type.toUpperCase() == 'GET' || 'jsonp' == options.dataType))\n options.url = appendQuery(options.url, options.data), options.data = undefined\n }\n\n $.ajax = function(options){\n var settings = $.extend({}, options || {}),\n deferred = $.Deferred && $.Deferred(),\n urlAnchor, hashIndex\n for (key in $.ajaxSettings) if (settings[key] === undefined) settings[key] = $.ajaxSettings[key]\n\n ajaxStart(settings)\n\n if (!settings.crossDomain) {\n urlAnchor = document.createElement('a')\n urlAnchor.href = settings.url\n // cleans up URL for .href (IE only), see https://github.com/madrobby/zepto/pull/1049\n urlAnchor.href = urlAnchor.href\n settings.crossDomain = (originAnchor.protocol + '//' + originAnchor.host) !== (urlAnchor.protocol + '//' + urlAnchor.host)\n }\n\n if (!settings.url) settings.url = window.location.toString()\n if ((hashIndex = settings.url.indexOf('#')) > -1) settings.url = settings.url.slice(0, hashIndex)\n serializeData(settings)\n\n var dataType = settings.dataType, hasPlaceholder = /\\?.+=\\?/.test(settings.url)\n if (hasPlaceholder) dataType = 'jsonp'\n\n if (settings.cache === false || (\n (!options || options.cache !== true) &&\n ('script' == dataType || 'jsonp' == dataType)\n ))\n settings.url = appendQuery(settings.url, '_=' + Date.now())\n\n if ('jsonp' == dataType) {\n if (!hasPlaceholder)\n settings.url = appendQuery(settings.url,\n settings.jsonp ? (settings.jsonp + '=?') : settings.jsonp === false ? '' : 'callback=?')\n return $.ajaxJSONP(settings, deferred)\n }\n\n var mime = settings.accepts[dataType],\n headers = { },\n setHeader = function(name, value) { headers[name.toLowerCase()] = [name, value] },\n protocol = /^([\\w-]+:)\\/\\//.test(settings.url) ? RegExp.$1 : window.location.protocol,\n xhr = settings.xhr(),\n nativeSetHeader = xhr.setRequestHeader,\n abortTimeout\n\n if (deferred) deferred.promise(xhr)\n\n if (!settings.crossDomain) setHeader('X-Requested-With', 'XMLHttpRequest')\n setHeader('Accept', mime || '*/*')\n if (mime = settings.mimeType || mime) {\n if (mime.indexOf(',') > -1) mime = mime.split(',', 2)[0]\n xhr.overrideMimeType && xhr.overrideMimeType(mime)\n }\n if (settings.contentType || (settings.contentType !== false && settings.data && settings.type.toUpperCase() != 'GET'))\n setHeader('Content-Type', settings.contentType || 'application/x-www-form-urlencoded')\n\n if (settings.headers) for (name in settings.headers) setHeader(name, settings.headers[name])\n xhr.setRequestHeader = setHeader\n\n xhr.onreadystatechange = function(){\n if (xhr.readyState == 4) {\n xhr.onreadystatechange = empty\n clearTimeout(abortTimeout)\n var result, error = false\n if ((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304 || (xhr.status == 0 && protocol == 'file:')) {\n dataType = dataType || mimeToDataType(settings.mimeType || xhr.getResponseHeader('content-type'))\n\n if (xhr.responseType == 'arraybuffer' || xhr.responseType == 'blob')\n result = xhr.response\n else {\n result = xhr.responseText\n\n try {\n // http://perfectionkills.com/global-eval-what-are-the-options/\n // sanitize response accordingly if data filter callback provided\n result = ajaxDataFilter(result, dataType, settings)\n if (dataType == 'script') (1,eval)(result)\n else if (dataType == 'xml') result = xhr.responseXML\n else if (dataType == 'json') result = blankRE.test(result) ? null : $.parseJSON(result)\n } catch (e) { error = e }\n\n if (error) return ajaxError(error, 'parsererror', xhr, settings, deferred)\n }\n\n ajaxSuccess(result, xhr, settings, deferred)\n } else {\n ajaxError(xhr.statusText || null, xhr.status ? 'error' : 'abort', xhr, settings, deferred)\n }\n }\n }\n\n if (ajaxBeforeSend(xhr, settings) === false) {\n xhr.abort()\n ajaxError(null, 'abort', xhr, settings, deferred)\n return xhr\n }\n\n var async = 'async' in settings ? settings.async : true\n xhr.open(settings.type, settings.url, async, settings.username, settings.password)\n\n if (settings.xhrFields) for (name in settings.xhrFields) xhr[name] = settings.xhrFields[name]\n\n for (name in headers) nativeSetHeader.apply(xhr, headers[name])\n\n if (settings.timeout > 0) abortTimeout = setTimeout(function(){\n xhr.onreadystatechange = empty\n xhr.abort()\n ajaxError(null, 'timeout', xhr, settings, deferred)\n }, settings.timeout)\n\n // avoid sending empty string (#319)\n xhr.send(settings.data ? settings.data : null)\n return xhr\n }\n\n // handle optional data/success arguments\n function parseArguments(url, data, success, dataType) {\n if ($.isFunction(data)) dataType = success, success = data, data = undefined\n if (!$.isFunction(success)) dataType = success, success = undefined\n return {\n url: url\n , data: data\n , success: success\n , dataType: dataType\n }\n }\n\n $.get = function(/* url, data, success, dataType */){\n return $.ajax(parseArguments.apply(null, arguments))\n }\n\n $.post = function(/* url, data, success, dataType */){\n var options = parseArguments.apply(null, arguments)\n options.type = 'POST'\n return $.ajax(options)\n }\n\n $.getJSON = function(/* url, data, success */){\n var options = parseArguments.apply(null, arguments)\n options.dataType = 'json'\n return $.ajax(options)\n }\n\n $.fn.load = function(url, data, success){\n if (!this.length) return this\n var self = this, parts = url.split(/\\s/), selector,\n options = parseArguments(url, data, success),\n callback = options.success\n if (parts.length > 1) options.url = parts[0], selector = parts[1]\n options.success = function(response){\n self.html(selector ?\n $('
    ').html(response.replace(rscript, \"\")).find(selector)\n : response)\n callback && callback.apply(self, arguments)\n }\n $.ajax(options)\n return this\n }\n\n var escape = encodeURIComponent\n\n function serialize(params, obj, traditional, scope){\n var type, array = $.isArray(obj), hash = $.isPlainObject(obj)\n $.each(obj, function(key, value) {\n type = $.type(value)\n if (scope) key = traditional ? scope :\n scope + '[' + (hash || type == 'object' || type == 'array' ? key : '') + ']'\n // handle data in serializeArray() format\n if (!scope && array) params.add(value.name, value.value)\n // recurse into nested objects\n else if (type == \"array\" || (!traditional && type == \"object\"))\n serialize(params, value, traditional, key)\n else params.add(key, value)\n })\n }\n\n $.param = function(obj, traditional){\n var params = []\n params.add = function(key, value) {\n if ($.isFunction(value)) value = value()\n if (value == null) value = \"\"\n this.push(escape(key) + '=' + escape(value))\n }\n serialize(params, obj, traditional)\n return params.join('&').replace(/%20/g, '+')\n }\n})(Zepto)\n\n;(function($){\n $.fn.serializeArray = function() {\n var name, type, result = [],\n add = function(value) {\n if (value.forEach) return value.forEach(add)\n result.push({ name: name, value: value })\n }\n if (this[0]) $.each(this[0].elements, function(_, field){\n type = field.type, name = field.name\n if (name && field.nodeName.toLowerCase() != 'fieldset' &&\n !field.disabled && type != 'submit' && type != 'reset' && type != 'button' && type != 'file' &&\n ((type != 'radio' && type != 'checkbox') || field.checked))\n add($(field).val())\n })\n return result\n }\n\n $.fn.serialize = function(){\n var result = []\n this.serializeArray().forEach(function(elm){\n result.push(encodeURIComponent(elm.name) + '=' + encodeURIComponent(elm.value))\n })\n return result.join('&')\n }\n\n $.fn.submit = function(callback) {\n if (0 in arguments) this.bind('submit', callback)\n else if (this.length) {\n var event = $.Event('submit')\n this.eq(0).trigger(event)\n if (!event.isDefaultPrevented()) this.get(0).submit()\n }\n return this\n }\n\n})(Zepto)\n\n;(function(){\n // getComputedStyle shouldn't freak out when called\n // without a valid element as argument\n try {\n getComputedStyle(undefined)\n } catch(e) {\n var nativeGetComputedStyle = getComputedStyle\n window.getComputedStyle = function(element, pseudoElement){\n try {\n return nativeGetComputedStyle(element, pseudoElement)\n } catch(e) {\n return null\n }\n }\n }\n})()\n return Zepto\n}))\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/lib/zepto.js\n **/","var cache = {};\n\nexport default function mTpl(str, data, startSelector, endSelector, isCache) {\n var t = this,\n d = data,\n el = document.getElementById(str),\n tpl = el ? el.innerHTML : str,\n isCache = isCache != undefined ? isCache : true,\n valueArr = [],\n fn = function() {},\n htmlEncode = function(s, n) {\n if (!n) {\n s = s.replace(/>/g, '>')\n .replace(/';\n }\n if (!(tpl.indexOf(a) > -1 && tpl.indexOf(b) > -1)) {\n return tpl\n }\n\n var formatTpl = function(str, isError) {\n var N = isError ? '\\n' : '';\n r = isError ? '' : r;\n n = isError ? '' : n;\n\n var eb = (function(s) {\n return s.replace(/([.*+?^=!:${}()|[\\]\\/\\\\])/g, '\\\\$1')\n })(b),\n reg = new RegExp(l + '(?:(?!' + eb + ')[\\\\s\\\\S])*' + eb + '|(\\'+)', 'g');\n\n return tpl\n .replace(/)[\\s\\S])*-->/g, function(l) {\n var i = mTpl_comment.length++;\n mTpl_comment[i] = l;\n return 'mTpl_comment' + i + ';';\n })\n .split('\\\\').join('\\\\\\\\')\n .replace(/[\\r]/g, r)\n .replace(/[\\n]/g, n)\n .split(a).join(l)\n .replace(reg, function(l, $1) {\n return $1 ? new Array($1.length + 1).join('\\r') : l\n })\n .replace(new RegExp(l + '=(.*?)' + b, 'g'), \"';\" + N + \" s+=mTpl_htmlEncode(String($1));\" + N + \" s+='\")\n .replace(new RegExp(l + '\\!=(.*?)' + b, 'g'), \"';\" + N + \" s+=mTpl_htmlEncode(String($1),true);\" + N + \" s+='\")\n .split(l).join(\"';\" + N)\n .split(b).join(N + ' s+=\\'')\n .split('\\r').join('\\\\\\'');\n };\n\n var p, propArr = [];\n for (p in d) {\n propArr.push(p);\n valueArr.push(d[p]);\n }\n\n fn = compileFn(propArr, formatTpl(str));\n isCache && (cache[str] = {\n parsefn: fn,\n propList: propArr\n });\n }\n\n var s;\n\n try {\n s = fn.apply(t, valueArr);\n } catch (e) {\n fn = compileFn(propArr, formatTpl(str, true));\n s = fn.apply(t, valueArr);\n }\n\n return recoverChar(s);\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/lib/render.js\n **/","import $ from './zepto.js';\n\n/**\n* Bind an event to an object instead of a DOM Node\n```\n$.bind(this,'event',function(){});\n```\n* @param {Object} object\n* @param {String} event name\n* @param {Function} function to execute\n* @title $.bind(object,event,function);\n*/\n$.bind = function(obj, ev, f){\n if(!obj.__events) obj.__events = {};\n if(!$.isArray(ev)) ev = [ev];\n for(var i=0; i
    /> \\\">

    <%= curInfo.title %><%= curInfo.author %>

    • 00:00
    • 00:00
    • \\\">
      <% for (var i = 0; i < data.length; i++) { %> <% var idx = i + 1; %> <% var item = data[i]; %>
    • <% if (i === 0) { %> class=cur <% } %>> <%= idx %> <%= item.title %> <%= item.author %>
    • <% } %>
    \";\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/audio.html\n ** module id = 12\n ** module chunks = 0\n **/","module.exports = \"
  • \\\"> <%= idx %> <%= title %> <%= author %>
  • \";\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/list.html\n ** module id = 13\n ** module chunks = 0\n **/"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///audio.min.js","webpack:///webpack/bootstrap ece41897dfb342f90dfb","webpack:///./src/audio.js","webpack:///./src/lib/zepto.js","webpack:///./src/lib/render.js","webpack:///./src/lib/customEvent.js","webpack:///./src/audio.html","webpack:///./src/list.html"],"names":["root","factory","exports","module","define","amd","a","i","this","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","_interopRequireDefault","obj","__esModule","default","_classCallCheck","instance","Constructor","TypeError","Object","defineProperty","value","AudioPlayer","undefined","_typeof","Symbol","iterator","constructor","_createClass","defineProperties","target","props","length","descriptor","enumerable","configurable","writable","key","protoProps","staticProps","prototype","_zepto","_zepto2","_render","_render2","_customEvent","_audio","_audio2","_list","_list2","defaultConfig","isAutoplay","tpl","loopType","data","config","extend","init","_initStatus","_createAudio","_createPlayer","_cache","_setPlaybarPos","_setPlayListHeight","_initEvent","audio","document","createElement","setAttribute","src","play","body","appendChild","playStatus","playListStatus","playIdx","totalNum","playIcon","el","html","playTime","find","totalTime","playBar","loadedBar","playedBar","playPointer","playListBtn","playListWrap","playListItems","nextBtn","preBtn","cover","title","loopBtn","playBtn","coverPlayBtn","tempMovePlaybar","proxy","_movePlaybar","tempMouseupCb","_mouseupCb","playBarPos","getBoundingClientRect","playBarClientX","left","playBarWidth","width","playListHeight","height","css","addEventListener","_durationchangeCb","_progressCb","_endedCb","window","on","togglePlay","assignPlay","_toggleOrderLoop","_mousedownCb","_togglePlayList","switchPlay","prePlay","nextPlay","formatSeconds","duration","event","loadedPercent","buffered","end","trigger","song","idx","addClass","removeClass","type","push","append","currentTarget","songData","get","pause","attr","author","unbind","preventDefault","stopPropagation","clearPlayTimer","pointerClientX","clientX","touches","offsetX","curPercent","Math","min","changedTouches","currentTime","playTimer","startPlayTimer","me","songInfo","_this","setInterval","playedPercent","clearInterval","seconds","minute","parseInt","second","actNum","num","rst","object","source","args","Array","slice","arguments","property","__WEBPACK_AMD_DEFINE_RESULT__","global","Zepto","String","class2type","toString","isFunction","isWindow","isDocument","nodeType","DOCUMENT_NODE","isObject","isPlainObject","getPrototypeOf","likeArray","$","compact","array","_filter","item","flatten","fn","concat","apply","dasherize","str","replace","toLowerCase","classRE","name","classCache","RegExp","maybeAddPx","cssNumber","defaultDisplay","nodeName","element","display","elementDisplay","getComputedStyle","getPropertyValue","parentNode","removeChild","_children","_slice","children","map","childNodes","node","Z","dom","selector","len","deep","isArray","filtered","nodes","filter","funcArg","context","arg","payload","removeAttribute","className","klass","svg","baseVal","deserializeValue","test","parseJSON","e","traverseNode","fun","classList","camelize","uniq","emptyArray","_concat","column-count","columns","font-weight","line-height","opacity","z-index","zoom","fragmentRE","singleTagRE","tagExpanderRE","rootNodeRE","capitalRE","methodAttributes","adjacencyOperators","table","tableRow","containers","tr","tbody","thead","tfoot","td","th","*","readyRE","simpleSelectorRE","zepto","tempParent","propMap","tabindex","readonly","for","class","maxlength","cellspacing","cellpadding","rowspan","colspan","usemap","frameborder","contenteditable","matches","matchesSelector","webkitMatchesSelector","mozMatchesSelector","oMatchesSelector","match","parent","temp","qsa","indexOf","chr","toUpperCase","fragment","properties","container","$1","innerHTML","each","isZ","trim","ready","shift","forEach","found","maybeID","maybeClass","nameOnly","isSimple","getElementById","getElementsByClassName","getElementsByTagName","querySelectorAll","contains","documentElement","isEmptyObject","isNumeric","val","Number","isNaN","isFinite","inArray","elem","camelCase","uuid","support","expr","noop","elements","callback","values","grep","JSON","parse","split","reduce","sort","splice","toArray","readyState","size","remove","every","not","add","is","excludes","has","eq","first","last","result","$this","some","closest","collection","_","parents","ancestors","pluck","contents","contentDocument","siblings","child","empty","show","style","replaceWith","newContent","before","wrap","structure","func","clone","index","wrapAll","cloneNode","wrapInner","self","unwrap","hide","toggle","setting","prev","next","_html","originHtml","text","_text","newText","textContent","join","getAttribute","removeAttr","attribute","prop","removeProp","attrName","multiple","selected","offset","coordinates","coords","parentOffset","offsetParent","top","pageXOffset","pageYOffset","round","computedStyle","removeProperty","cssText","hasClass","cls","newName","toggleClass","when","names","scrollTop","hasScrollTop","scrollTo","scrollX","scrollLeft","hasScrollLeft","scrollY","position","parseFloat","detach","dimension","dimensionProperty","operator","operatorIndex","inside","argType","arr","copyByClone","nextSibling","firstChild","parentInDocument","insertBefore","ownerDocument","defaultView","zid","_zid","findHandlers","ns","matcher","matcherFor","handlers","handler","sel","parts","eventCapture","captureSetting","del","focusinSupported","focus","realEvent","hover","events","delegator","capture","set","related","relatedTarget","compatible","isImmediatePropagationStopped","_args","removeEventListener","isDefaultPrevented","eventMethods","predicate","sourceMethod","returnTrue","returnFalse","timeStamp","Date","now","defaultPrevented","returnValue","getPreventDefault","createProxy","originalEvent","ignoreProperties","isString","specialEvents","blur","mouseenter","mouseleave","click","mousedown","mouseup","mousemove","proxyFn","unshift","bind","off","one","stopImmediatePropagation","delegate","undelegate","live","die","autoRemove","evt","liveFired","Event","dispatchEvent","triggerHandler","createEvent","bubbles","initEvent","triggerAndReturn","eventName","triggerGlobal","settings","ajaxStart","active","ajaxStop","ajaxBeforeSend","xhr","beforeSend","ajaxSuccess","deferred","status","success","resolveWith","ajaxComplete","ajaxError","error","rejectWith","complete","ajaxDataFilter","dataFilter","mimeToDataType","mime","htmlType","jsonType","scriptTypeRE","xmlTypeRE","appendQuery","url","query","serializeData","options","processData","param","traditional","dataType","parseArguments","serialize","params","scope","hash","jsonpID","rscript","blankRE","originAnchor","href","location","ajaxJSONP","ajax","responseData","abortTimeout","_callbackName","jsonpCallback","callbackName","script","originalCallback","abort","errorType","promise","clearTimeout","head","timeout","setTimeout","ajaxSettings","XMLHttpRequest","accepts","json","xml","crossDomain","cache","urlAnchor","hashIndex","Deferred","protocol","host","hasPlaceholder","jsonp","headers","setHeader","nativeSetHeader","setRequestHeader","mimeType","overrideMimeType","contentType","onreadystatechange","getResponseHeader","responseType","response","responseText","eval","responseXML","statusText","async","open","username","password","xhrFields","send","post","getJSON","load","escape","encodeURIComponent","serializeArray","field","disabled","checked","elm","submit","nativeGetComputedStyle","pseudoElement","mTpl","startSelector","endSelector","isCache","t","d","valueArr","htmlEncode","s","n","compileFn","strFormatTpl","Function","propArr","resetChar","recoverChar","r","l","mTpl_comment","list","propList","parsefn","b","formatTpl","isError","N","eb","reg","ev","f","__events","ret","evts","j"],"mappings":"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","file":"audio.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function() {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/","/*!\n * audioPlayer v0.0.1 (https://github.com/zhangchen2397/audioPlayer.git)\n * Copyright 2016, zhangchen2397@126.com\n * MIT license\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\texports.AudioPlayer = undefined;\n\t\n\tvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol ? \"symbol\" : typeof obj; };\n\t\n\tvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); /**\n\t * html5 audio player 音频播放器组件\n\t * 适用于pc及移动端,可单独定制皮肤\n\t * 提供(播放进度条,拖拽定位/快进/快退播放,连播/播放列表/循环播放,上下曲)\n\t * @date 2016-07-28\n\t * @author samczhang@tencent.com\n\t * --------------------------------------\n\t *\n\t * 对外调用接口及自定义事件\n\t * @method play 播放\n\t * @method pause 暂停\n\t * @method prePlay 上一首\n\t * @method nextPlay 下一首\n\t * @method switchPlay 指定列表索引播放\n\t * @method togglePlay 切换播放与暂停\n\t * @method setLoopType 设置循环播放方式\n\t * @method addtoPlayList 添加歌曲到播放列表\n\t *\n\t * @customEvent play 开始播放\n\t * @customEvent pause 暂停播放\n\t * @customEvent playing 播放中\n\t * @customEvent ended 播放结束\n\t * --------------------------------------\n\t *\n\t * 使用demo\n\t * new AudioPlayer({\n\t * data: [{\n\t * title: '曾经的你',\n\t * author: '许巍',\n\t * src: '/example/asset/music/once.mp3',\n\t * cover: '/example/asset/image/cover_once.jpeg'\n\t * }, {\n\t * title: 'You\\'re Beautiful',\n\t * author: 'James Blunt',\n\t * src: '/example/asset/music/you_are_beautiful.mp4',\n\t * cover: '/example/asset/image/cover_yab.jpg'\n\t * }, {\n\t * title: 'I\\'m Yours',\n\t * author: 'Jason Mraz',\n\t * src: '/example/asset/music/i_am_yours.mp4',\n\t * cover: '/example/asset/image/cover_iay.jpg'\n\t * }]\n\t * });\n\t * \n\t */\n\t\n\tvar _zepto = __webpack_require__(1);\n\t\n\tvar _zepto2 = _interopRequireDefault(_zepto);\n\t\n\tvar _render = __webpack_require__(2);\n\t\n\tvar _render2 = _interopRequireDefault(_render);\n\t\n\tvar _customEvent = __webpack_require__(3);\n\t\n\tvar _customEvent2 = _interopRequireDefault(_customEvent);\n\t\n\t__webpack_require__(4);\n\t\n\tvar _audio = __webpack_require__(12);\n\t\n\tvar _audio2 = _interopRequireDefault(_audio);\n\t\n\tvar _list = __webpack_require__(13);\n\t\n\tvar _list2 = _interopRequireDefault(_list);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\tfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\t\n\tvar defaultConfig = {\n\t id: 'player-wrap', //播放器容器id\n\t isAutoplay: true, //是否自动播放\n\t tpl: _audio2.default, //音频播放器模板\n\t\n\t /**\n\t * loopType {string} 播放循环方式\n\t * none: 不循环,\n\t * single: 单曲循环\n\t * order: 顺序循环\n\t */\n\t loopType: 'order',\n\t\n\t /**\n\t * data {array} 音频数据,数组的每一项为对象\n\t * title: 歌名\n\t * author: 作者\n\t * src: 音频地址\n\t * cover: 音频封面图\n\t */\n\t data: []\n\t};\n\t\n\tvar AudioPlayer = function () {\n\t function AudioPlayer(config) {\n\t _classCallCheck(this, AudioPlayer);\n\t\n\t this.config = this.extend({}, defaultConfig, config || {});\n\t this.init();\n\t }\n\t\n\t _createClass(AudioPlayer, [{\n\t key: 'init',\n\t value: function init() {\n\t this._initStatus();\n\t this._createAudio();\n\t this._createPlayer();\n\t this._cache();\n\t this._setPlaybarPos();\n\t this._setPlayListHeight();\n\t this._initEvent();\n\t }\n\t }, {\n\t key: '_createAudio',\n\t value: function _createAudio() {\n\t var me = this,\n\t config = this.config;\n\t\n\t this.audio = document.createElement('audio');\n\t this.audio.setAttribute('src', this.data[0].src);\n\t this.audio.setAttribute('preload', 'metadata');\n\t\n\t if (config.isAutoplay) {\n\t this.play();\n\t }\n\t\n\t document.body.appendChild(this.audio);\n\t }\n\t }, {\n\t key: '_initStatus',\n\t value: function _initStatus() {\n\t var me = this,\n\t config = this.config;\n\t\n\t this.playStatus = config.isAutoplay ? 'play' : 'pause';\n\t this.playListStatus = 'show';\n\t this.playIdx = 0;\n\t this.data = config.data;\n\t this.loopType = config.loopType;\n\t this.totalNum = this.data.length;\n\t }\n\t }, {\n\t key: '_createPlayer',\n\t value: function _createPlayer() {\n\t var me = this,\n\t config = this.config,\n\t playIcon = this.playStatus === 'play' ? 'pause' : 'play';\n\t\n\t this.el = (0, _zepto2.default)('#' + config.id);\n\t this.el.html((0, _render2.default)(config.tpl, {\n\t data: this.data,\n\t playIcon: playIcon\n\t }));\n\t }\n\t }, {\n\t key: '_cache',\n\t value: function _cache() {\n\t var me = this,\n\t config = this.config,\n\t el = this.el;\n\t\n\t //dom cache\n\t this.playTime = el.find('.play-time');\n\t this.totalTime = el.find('.total-time');\n\t this.playBar = el.find('.play-bar');\n\t this.loadedBar = el.find('.loaded');\n\t this.playedBar = el.find('.played');\n\t this.playPointer = el.find('.pointer');\n\t this.playListBtn = el.find('.icon-list');\n\t this.playListWrap = el.find('.play-list');\n\t this.playListItems = this.playListWrap.find('li');\n\t\n\t this.nextBtn = el.find('.icon-nextsong');\n\t this.preBtn = el.find('.icon-presong');\n\t this.cover = el.find('img.cover');\n\t this.title = el.find('.info h3');\n\t this.loopBtn = el.find('.icon-loop');\n\t this.playBtn = el.find('.play-btn');\n\t this.coverPlayBtn = el.find('.cover-play-btn');\n\t\n\t //event callback cache\n\t this.tempMovePlaybar = _zepto2.default.proxy(this._movePlaybar, this);\n\t this.tempMouseupCb = _zepto2.default.proxy(this._mouseupCb, this);\n\t }\n\t\n\t //设置及缓存播放进度条位置信息,方便计算百分比\n\t\n\t }, {\n\t key: '_setPlaybarPos',\n\t value: function _setPlaybarPos() {\n\t var playBarPos = this.playBar[0].getBoundingClientRect();\n\t this.playBarClientX = playBarPos.left;\n\t this.playBarWidth = playBarPos.width;\n\t }\n\t\n\t //初始化及缓存播放列表高度,做动画需要\n\t\n\t }, {\n\t key: '_setPlayListHeight',\n\t value: function _setPlayListHeight() {\n\t var playListWrap = this.playListWrap;\n\t this.playListHeight = playListWrap.height();\n\t playListWrap.css('height', this.playListHeight);\n\t }\n\t }, {\n\t key: '_initEvent',\n\t value: function _initEvent() {\n\t var me = this,\n\t config = this.config,\n\t playPointer = this.playPointer,\n\t audio = this.audio;\n\t\n\t audio.addEventListener('durationchange', _zepto2.default.proxy(this._durationchangeCb, this), false);\n\t audio.addEventListener('progress', _zepto2.default.proxy(this._progressCb, this), false);\n\t audio.addEventListener('ended', _zepto2.default.proxy(this._endedCb, this), false);\n\t\n\t (0, _zepto2.default)(window).on('resize', _zepto2.default.proxy(this._setPlaybarPos, this));\n\t (0, _zepto2.default)(window).on('orientationchange', _zepto2.default.proxy(this._setPlaybarPos, this));\n\t\n\t this.el.on('click', '.play-btn, .cover-play-btn', _zepto2.default.proxy(this.togglePlay, this));\n\t this.playBar.on('click', _zepto2.default.proxy(this.assignPlay, this));\n\t this.loopBtn.on('click', _zepto2.default.proxy(this._toggleOrderLoop, this));\n\t\n\t playPointer.on('touchmove', _zepto2.default.proxy(this._movePlaybar, this));\n\t playPointer.on('touchend', _zepto2.default.proxy(this.assignPlay, this));\n\t playPointer.on('mousedown', _zepto2.default.proxy(this._mousedownCb, this));\n\t\n\t this.playListBtn.on('click', _zepto2.default.proxy(this._togglePlayList, this));\n\t this.playListWrap.on('click', 'li', _zepto2.default.proxy(this.switchPlay, this));\n\t\n\t this.preBtn.on('click', _zepto2.default.proxy(this.prePlay, this));\n\t this.nextBtn.on('click', _zepto2.default.proxy(this.nextPlay, this));\n\t }\n\t }, {\n\t key: '_durationchangeCb',\n\t value: function _durationchangeCb() {\n\t this.totalTime.html(this.formatSeconds(this.audio.duration));\n\t }\n\t }, {\n\t key: '_progressCb',\n\t value: function _progressCb(event) {\n\t var me = this,\n\t config = this.config,\n\t audio = this.audio;\n\t\n\t var loadedPercent = audio.buffered.length ? audio.buffered.end(audio.buffered.length - 1) / audio.duration : 0;\n\t\n\t this.loadedBar.css('width', loadedPercent * 100 + '%');\n\t\n\t _zepto2.default.trigger(this, 'playing', [{\n\t song: this.data[this.playIdx],\n\t loadedPercent: loadedPercent\n\t }]);\n\t }\n\t }, {\n\t key: '_endedCb',\n\t value: function _endedCb(event) {\n\t switch (this.loopType) {\n\t case 'order':\n\t this.nextPlay();\n\t break;\n\t case 'single':\n\t this.switchPlay(this.playIdx);\n\t break;\n\t case 'none':\n\t this.togglePlay();\n\t break;\n\t default:\n\t break;\n\t }\n\t\n\t _zepto2.default.trigger(this, 'ended', [{\n\t song: this.data[this.playIdx]\n\t }]);\n\t }\n\t }, {\n\t key: 'prePlay',\n\t value: function prePlay() {\n\t var idx = this.playIdx - 1;\n\t if (idx < 0) {\n\t idx = this.totalNum - 1;\n\t }\n\t\n\t this.switchPlay(idx);\n\t }\n\t }, {\n\t key: 'nextPlay',\n\t value: function nextPlay() {\n\t var idx = this.playIdx + 1;\n\t if (idx > this.totalNum - 1) {\n\t idx = 0;\n\t }\n\t\n\t this.switchPlay(idx);\n\t }\n\t }, {\n\t key: '_toggleOrderLoop',\n\t value: function _toggleOrderLoop(event) {\n\t switch (this.loopType) {\n\t case 'order':\n\t this.loopType = 'none';\n\t this.loopBtn.addClass('gray');\n\t break;\n\t case 'none':\n\t this.loopType = 'order';\n\t this.loopBtn.removeClass('gray');\n\t break;\n\t default:\n\t break;\n\t }\n\t }\n\t\n\t /**\n\t * 设置循环播放方式\n\t * type {string} 循环播放方式\n\t * none: 不循环\n\t * order: 顺序循环\n\t * single: 单曲循环\n\t */\n\t\n\t }, {\n\t key: 'setLoopType',\n\t value: function setLoopType(type) {\n\t this.loopType = type;\n\t }\n\t\n\t /**\n\t * 添加新歌曲到播放列表\n\t * song {object} 需要添加的歌曲对象\n\t * title: 歌名\n\t * author: 作者\n\t * src: 音频地址\n\t * cover: 音频封面图\n\t */\n\t\n\t }, {\n\t key: 'addtoPlayList',\n\t value: function addtoPlayList(song) {\n\t this.totalNum++;\n\t this.data.push(song);\n\t\n\t //render list template\n\t song.idx = this.totalNum;\n\t this.playListWrap.append((0, _render2.default)(_list2.default, song));\n\t\n\t _zepto2.default.trigger(this, 'afterAddtoPlayList', [{\n\t song: song\n\t }]);\n\t }\n\t\n\t /**\n\t * 歌曲播放切换\n\t * event {event object | idx}\n\t * 接收参数有两种方式\n\t * 一种通过事件event找到需要播放的idx\n\t * 直接传入需要播放的idx\n\t * idx 从0开始\n\t */\n\t\n\t }, {\n\t key: 'switchPlay',\n\t value: function switchPlay(event) {\n\t var me = this,\n\t config = this.config,\n\t playListItems = this.playListItems,\n\t idx = event;\n\t\n\t if ((typeof event === 'undefined' ? 'undefined' : _typeof(event)) === 'object') {\n\t idx = (0, _zepto2.default)(event.currentTarget).data('idx');\n\t }\n\t\n\t if (this.playIdx === idx) return;\n\t\n\t var songData = this.data[idx];\n\t playListItems.removeClass('cur');\n\t (0, _zepto2.default)(playListItems.get(idx)).addClass('cur');\n\t\n\t this.pause();\n\t this.audio.setAttribute('src', songData.src);\n\t this.playIdx = idx;\n\t this.play();\n\t\n\t this.cover.attr('src', songData.cover);\n\t this.title.html(songData.title + '' + songData.author + '');\n\t }\n\t }, {\n\t key: '_togglePlayList',\n\t value: function _togglePlayList(event) {\n\t var me = this,\n\t config = this.config,\n\t playListWrap = this.playListWrap;\n\t\n\t if (this.playListStatus === 'show') {\n\t playListWrap.css('height', 0);\n\t this.playListStatus = 'hide';\n\t } else {\n\t playListWrap.css('height', this.playListHeight);\n\t this.playListStatus = 'show';\n\t }\n\t }\n\t }, {\n\t key: '_mousedownCb',\n\t value: function _mousedownCb() {\n\t var me = this;\n\t var playPointer = this.playPointer;\n\t playPointer.on('mousemove', this.tempMovePlaybar);\n\t playPointer.on('mouseup', this.tempMouseupCb);\n\t }\n\t }, {\n\t key: '_mouseupCb',\n\t value: function _mouseupCb(event) {\n\t var me = this;\n\t var playPointer = this.playPointer;\n\t\n\t playPointer.unbind('mousemove', this.tempMovePlaybar);\n\t playPointer.unbind('mouseup', this.tempMouseupCb);\n\t\n\t this.assignPlay(event);\n\t }\n\t }, {\n\t key: '_movePlaybar',\n\t value: function _movePlaybar(event) {\n\t event.preventDefault();\n\t event.stopPropagation();\n\t\n\t this.clearPlayTimer();\n\t\n\t //根据不同的事件取相应的坐标值\n\t var pointerClientX = event.clientX || event.touches[0].clientX;\n\t var offsetX = pointerClientX - this.playBarClientX;\n\t var curPercent = Math.min(offsetX / this.playBarWidth, 1);\n\t\n\t this.playedBar.css('width', curPercent * 100 + '%');\n\t this.playTime.html(this.formatSeconds(this.audio.duration * curPercent));\n\t }\n\t }, {\n\t key: 'assignPlay',\n\t value: function assignPlay(event) {\n\t event.preventDefault();\n\t event.stopPropagation();\n\t\n\t var audio = this.audio;\n\t\n\t //分点击事件和touchend事件,获取坐标的方式不一样\n\t var pointerClientX = event.clientX || event.changedTouches[0].clientX;\n\t var curPercent = (pointerClientX - this.playBarClientX) / this.playBarWidth;\n\t\n\t //指定位置播放,立即更新播放指示点\n\t //已播放时间及已播放进度条通过playTimer自动更新\n\t audio.currentTime = audio.duration * curPercent;\n\t this.playedBar.css('width', curPercent * 100 + '%');\n\t\n\t //如果是通过拖拽播放,需要重新开启playtimer\n\t if (!this.playTimer) {\n\t this.startPlayTimer();\n\t }\n\t }\n\t }, {\n\t key: 'play',\n\t value: function play() {\n\t var me = this,\n\t config = this.config,\n\t audio = this.audio;\n\t\n\t audio.play();\n\t this.playStatus = 'play';\n\t this.startPlayTimer();\n\t\n\t if (this.el) {\n\t this.playBtn.addClass('icon-pause');\n\t this.coverPlayBtn.addClass('icon-pause');\n\t this.playBtn.removeClass('icon-play');\n\t this.coverPlayBtn.removeClass('icon-play');\n\t }\n\t\n\t _zepto2.default.trigger(this, 'play', [{\n\t song: me.data[this.playIdx]\n\t }]);\n\t }\n\t }, {\n\t key: 'pause',\n\t value: function pause() {\n\t var me = this,\n\t config = this.config,\n\t audio = this.audio;\n\t\n\t audio.pause();\n\t this.playStatus = 'pause';\n\t\n\t this.clearPlayTimer();\n\t\n\t this.playBtn.removeClass('icon-pause');\n\t this.coverPlayBtn.removeClass('icon-pause');\n\t this.playBtn.addClass('icon-play');\n\t this.coverPlayBtn.addClass('icon-play');\n\t\n\t _zepto2.default.trigger(this, 'pause', [{\n\t songInfo: me.data[this.playIdx]\n\t }]);\n\t }\n\t }, {\n\t key: 'startPlayTimer',\n\t value: function startPlayTimer() {\n\t var _this = this;\n\t\n\t var audio = this.audio;\n\t\n\t this.playTimer = setInterval(function () {\n\t var playedPercent = audio.currentTime / audio.duration;\n\t _this.playedBar.css('width', playedPercent * 100 + '%');\n\t _this.playTime.html(_this.formatSeconds(audio.currentTime));\n\t }, 500);\n\t }\n\t }, {\n\t key: 'clearPlayTimer',\n\t value: function clearPlayTimer() {\n\t if (this.playTimer) {\n\t clearInterval(this.playTimer);\n\t this.playTimer = null;\n\t }\n\t }\n\t }, {\n\t key: 'togglePlay',\n\t value: function togglePlay(event) {\n\t if (this.playStatus === 'play') {\n\t this.pause();\n\t } else {\n\t this.play();\n\t }\n\t }\n\t }, {\n\t key: 'formatSeconds',\n\t value: function formatSeconds(seconds) {\n\t var minute = parseInt(seconds / 60, 10);\n\t var second = parseInt(seconds - minute * 60, 10);\n\t var actNum = function actNum(num) {\n\t var rst = '';\n\t if (num < 1) {\n\t rst = '00';\n\t } else if (num >= 1 && num < 10) {\n\t rst = '0' + num;\n\t } else {\n\t rst = num;\n\t }\n\t\n\t return rst;\n\t };\n\t\n\t minute = actNum(minute);\n\t second = actNum(second);\n\t\n\t return minute + ':' + second;\n\t }\n\t }, {\n\t key: 'extend',\n\t value: function extend(object) {\n\t var args = Array.prototype.slice.call(arguments, 1);\n\t\n\t for (var i = 0, source; source = args[i]; i++) {\n\t if (!source) continue;\n\t for (var property in source) {\n\t object[property] = source[property];\n\t }\n\t }\n\t\n\t return object;\n\t }\n\t }]);\n\t\n\t return AudioPlayer;\n\t}();\n\t\n\texports.AudioPlayer = AudioPlayer;\n\n/***/ },\n/* 1 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_RESULT__;'use strict';\n\t\n\tvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol ? \"symbol\" : typeof obj; };\n\t\n\t/* Zepto v1.2.0 - zepto event ajax form ie - zeptojs.com/license */\n\t(function (global, factory) {\n\t if (true) !(__WEBPACK_AMD_DEFINE_RESULT__ = function () {\n\t return factory(global);\n\t }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));else factory(global);\n\t})(typeof window !== \"undefined\" ? window : undefined, function (window) {\n\t var Zepto = function () {\n\t var undefined,\n\t key,\n\t $,\n\t classList,\n\t emptyArray = [],\n\t _concat = emptyArray.concat,\n\t _filter = emptyArray.filter,\n\t _slice = emptyArray.slice,\n\t document = window.document,\n\t elementDisplay = {},\n\t classCache = {},\n\t cssNumber = { 'column-count': 1, 'columns': 1, 'font-weight': 1, 'line-height': 1, 'opacity': 1, 'z-index': 1, 'zoom': 1 },\n\t fragmentRE = /^\\s*<(\\w+|!)[^>]*>/,\n\t singleTagRE = /^<(\\w+)\\s*\\/?>(?:<\\/\\1>|)$/,\n\t tagExpanderRE = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:]+)[^>]*)\\/>/ig,\n\t rootNodeRE = /^(?:body|html)$/i,\n\t capitalRE = /([A-Z])/g,\n\t\n\t\n\t // special attributes that should be get/set via method calls\n\t methodAttributes = ['val', 'css', 'html', 'text', 'data', 'width', 'height', 'offset'],\n\t adjacencyOperators = ['after', 'prepend', 'before', 'append'],\n\t table = document.createElement('table'),\n\t tableRow = document.createElement('tr'),\n\t containers = {\n\t 'tr': document.createElement('tbody'),\n\t 'tbody': table, 'thead': table, 'tfoot': table,\n\t 'td': tableRow, 'th': tableRow,\n\t '*': document.createElement('div')\n\t },\n\t readyRE = /complete|loaded|interactive/,\n\t simpleSelectorRE = /^[\\w-]*$/,\n\t class2type = {},\n\t toString = class2type.toString,\n\t zepto = {},\n\t camelize,\n\t uniq,\n\t tempParent = document.createElement('div'),\n\t propMap = {\n\t 'tabindex': 'tabIndex',\n\t 'readonly': 'readOnly',\n\t 'for': 'htmlFor',\n\t 'class': 'className',\n\t 'maxlength': 'maxLength',\n\t 'cellspacing': 'cellSpacing',\n\t 'cellpadding': 'cellPadding',\n\t 'rowspan': 'rowSpan',\n\t 'colspan': 'colSpan',\n\t 'usemap': 'useMap',\n\t 'frameborder': 'frameBorder',\n\t 'contenteditable': 'contentEditable'\n\t },\n\t isArray = Array.isArray || function (object) {\n\t return object instanceof Array;\n\t };\n\t\n\t zepto.matches = function (element, selector) {\n\t if (!selector || !element || element.nodeType !== 1) return false;\n\t var matchesSelector = element.matches || element.webkitMatchesSelector || element.mozMatchesSelector || element.oMatchesSelector || element.matchesSelector;\n\t if (matchesSelector) return matchesSelector.call(element, selector);\n\t // fall back to performing a selector:\n\t var match,\n\t parent = element.parentNode,\n\t temp = !parent;\n\t if (temp) (parent = tempParent).appendChild(element);\n\t match = ~zepto.qsa(parent, selector).indexOf(element);\n\t temp && tempParent.removeChild(element);\n\t return match;\n\t };\n\t\n\t function type(obj) {\n\t return obj == null ? String(obj) : class2type[toString.call(obj)] || \"object\";\n\t }\n\t\n\t function isFunction(value) {\n\t return type(value) == \"function\";\n\t }\n\t function isWindow(obj) {\n\t return obj != null && obj == obj.window;\n\t }\n\t function isDocument(obj) {\n\t return obj != null && obj.nodeType == obj.DOCUMENT_NODE;\n\t }\n\t function isObject(obj) {\n\t return type(obj) == \"object\";\n\t }\n\t function isPlainObject(obj) {\n\t return isObject(obj) && !isWindow(obj) && Object.getPrototypeOf(obj) == Object.prototype;\n\t }\n\t\n\t function likeArray(obj) {\n\t var length = !!obj && 'length' in obj && obj.length,\n\t type = $.type(obj);\n\t\n\t return 'function' != type && !isWindow(obj) && ('array' == type || length === 0 || typeof length == 'number' && length > 0 && length - 1 in obj);\n\t }\n\t\n\t function compact(array) {\n\t return _filter.call(array, function (item) {\n\t return item != null;\n\t });\n\t }\n\t function flatten(array) {\n\t return array.length > 0 ? $.fn.concat.apply([], array) : array;\n\t }\n\t camelize = function camelize(str) {\n\t return str.replace(/-+(.)?/g, function (match, chr) {\n\t return chr ? chr.toUpperCase() : '';\n\t });\n\t };\n\t function dasherize(str) {\n\t return str.replace(/::/g, '/').replace(/([A-Z]+)([A-Z][a-z])/g, '$1_$2').replace(/([a-z\\d])([A-Z])/g, '$1_$2').replace(/_/g, '-').toLowerCase();\n\t }\n\t uniq = function uniq(array) {\n\t return _filter.call(array, function (item, idx) {\n\t return array.indexOf(item) == idx;\n\t });\n\t };\n\t\n\t function classRE(name) {\n\t return name in classCache ? classCache[name] : classCache[name] = new RegExp('(^|\\\\s)' + name + '(\\\\s|$)');\n\t }\n\t\n\t function maybeAddPx(name, value) {\n\t return typeof value == \"number\" && !cssNumber[dasherize(name)] ? value + \"px\" : value;\n\t }\n\t\n\t function defaultDisplay(nodeName) {\n\t var element, display;\n\t if (!elementDisplay[nodeName]) {\n\t element = document.createElement(nodeName);\n\t document.body.appendChild(element);\n\t display = getComputedStyle(element, '').getPropertyValue(\"display\");\n\t element.parentNode.removeChild(element);\n\t display == \"none\" && (display = \"block\");\n\t elementDisplay[nodeName] = display;\n\t }\n\t return elementDisplay[nodeName];\n\t }\n\t\n\t function _children(element) {\n\t return 'children' in element ? _slice.call(element.children) : $.map(element.childNodes, function (node) {\n\t if (node.nodeType == 1) return node;\n\t });\n\t }\n\t\n\t function Z(dom, selector) {\n\t var i,\n\t len = dom ? dom.length : 0;\n\t for (i = 0; i < len; i++) {\n\t this[i] = dom[i];\n\t }this.length = len;\n\t this.selector = selector || '';\n\t }\n\t\n\t // `$.zepto.fragment` takes a html string and an optional tag name\n\t // to generate DOM nodes from the given html string.\n\t // The generated DOM nodes are returned as an array.\n\t // This function can be overridden in plugins for example to make\n\t // it compatible with browsers that don't support the DOM fully.\n\t zepto.fragment = function (html, name, properties) {\n\t var dom, nodes, container;\n\t\n\t // A special case optimization for a single tag\n\t if (singleTagRE.test(html)) dom = $(document.createElement(RegExp.$1));\n\t\n\t if (!dom) {\n\t if (html.replace) html = html.replace(tagExpanderRE, \"<$1>\");\n\t if (name === undefined) name = fragmentRE.test(html) && RegExp.$1;\n\t if (!(name in containers)) name = '*';\n\t\n\t container = containers[name];\n\t container.innerHTML = '' + html;\n\t dom = $.each(_slice.call(container.childNodes), function () {\n\t container.removeChild(this);\n\t });\n\t }\n\t\n\t if (isPlainObject(properties)) {\n\t nodes = $(dom);\n\t $.each(properties, function (key, value) {\n\t if (methodAttributes.indexOf(key) > -1) nodes[key](value);else nodes.attr(key, value);\n\t });\n\t }\n\t\n\t return dom;\n\t };\n\t\n\t // `$.zepto.Z` swaps out the prototype of the given `dom` array\n\t // of nodes with `$.fn` and thus supplying all the Zepto functions\n\t // to the array. This method can be overridden in plugins.\n\t zepto.Z = function (dom, selector) {\n\t return new Z(dom, selector);\n\t };\n\t\n\t // `$.zepto.isZ` should return `true` if the given object is a Zepto\n\t // collection. This method can be overridden in plugins.\n\t zepto.isZ = function (object) {\n\t return object instanceof zepto.Z;\n\t };\n\t\n\t // `$.zepto.init` is Zepto's counterpart to jQuery's `$.fn.init` and\n\t // takes a CSS selector and an optional context (and handles various\n\t // special cases).\n\t // This method can be overridden in plugins.\n\t zepto.init = function (selector, context) {\n\t var dom;\n\t // If nothing given, return an empty Zepto collection\n\t if (!selector) return zepto.Z();\n\t // Optimize for string selectors\n\t else if (typeof selector == 'string') {\n\t selector = selector.trim();\n\t // If it's a html fragment, create nodes from it\n\t // Note: In both Chrome 21 and Firefox 15, DOM error 12\n\t // is thrown if the fragment doesn't begin with <\n\t if (selector[0] == '<' && fragmentRE.test(selector)) dom = zepto.fragment(selector, RegExp.$1, context), selector = null;\n\t // If there's a context, create a collection on that context first, and select\n\t // nodes from there\n\t else if (context !== undefined) return $(context).find(selector);\n\t // If it's a CSS selector, use it to select nodes.\n\t else dom = zepto.qsa(document, selector);\n\t }\n\t // If a function is given, call it when the DOM is ready\n\t else if (isFunction(selector)) return $(document).ready(selector);\n\t // If a Zepto collection is given, just return it\n\t else if (zepto.isZ(selector)) return selector;else {\n\t // normalize array if an array of nodes is given\n\t if (isArray(selector)) dom = compact(selector);\n\t // Wrap DOM nodes.\n\t else if (isObject(selector)) dom = [selector], selector = null;\n\t // If it's a html fragment, create nodes from it\n\t else if (fragmentRE.test(selector)) dom = zepto.fragment(selector.trim(), RegExp.$1, context), selector = null;\n\t // If there's a context, create a collection on that context first, and select\n\t // nodes from there\n\t else if (context !== undefined) return $(context).find(selector);\n\t // And last but no least, if it's a CSS selector, use it to select nodes.\n\t else dom = zepto.qsa(document, selector);\n\t }\n\t // create a new Zepto collection from the nodes found\n\t return zepto.Z(dom, selector);\n\t };\n\t\n\t // `$` will be the base `Zepto` object. When calling this\n\t // function just call `$.zepto.init, which makes the implementation\n\t // details of selecting nodes and creating Zepto collections\n\t // patchable in plugins.\n\t $ = function $(selector, context) {\n\t return zepto.init(selector, context);\n\t };\n\t\n\t function extend(target, source, deep) {\n\t for (key in source) {\n\t if (deep && (isPlainObject(source[key]) || isArray(source[key]))) {\n\t if (isPlainObject(source[key]) && !isPlainObject(target[key])) target[key] = {};\n\t if (isArray(source[key]) && !isArray(target[key])) target[key] = [];\n\t extend(target[key], source[key], deep);\n\t } else if (source[key] !== undefined) target[key] = source[key];\n\t }\n\t }\n\t\n\t // Copy all but undefined properties from one or more\n\t // objects to the `target` object.\n\t $.extend = function (target) {\n\t var deep,\n\t args = _slice.call(arguments, 1);\n\t if (typeof target == 'boolean') {\n\t deep = target;\n\t target = args.shift();\n\t }\n\t args.forEach(function (arg) {\n\t extend(target, arg, deep);\n\t });\n\t return target;\n\t };\n\t\n\t // `$.zepto.qsa` is Zepto's CSS selector implementation which\n\t // uses `document.querySelectorAll` and optimizes for some special cases, like `#id`.\n\t // This method can be overridden in plugins.\n\t zepto.qsa = function (element, selector) {\n\t var found,\n\t maybeID = selector[0] == '#',\n\t maybeClass = !maybeID && selector[0] == '.',\n\t nameOnly = maybeID || maybeClass ? selector.slice(1) : selector,\n\t // Ensure that a 1 char tag name still gets checked\n\t isSimple = simpleSelectorRE.test(nameOnly);\n\t return element.getElementById && isSimple && maybeID ? // Safari DocumentFragment doesn't have getElementById\n\t (found = element.getElementById(nameOnly)) ? [found] : [] : element.nodeType !== 1 && element.nodeType !== 9 && element.nodeType !== 11 ? [] : _slice.call(isSimple && !maybeID && element.getElementsByClassName ? // DocumentFragment doesn't have getElementsByClassName/TagName\n\t maybeClass ? element.getElementsByClassName(nameOnly) : // If it's simple, it could be a class\n\t element.getElementsByTagName(selector) : // Or a tag\n\t element.querySelectorAll(selector) // Or it's not simple, and we need to query all\n\t );\n\t };\n\t\n\t function filtered(nodes, selector) {\n\t return selector == null ? $(nodes) : $(nodes).filter(selector);\n\t }\n\t\n\t $.contains = document.documentElement.contains ? function (parent, node) {\n\t return parent !== node && parent.contains(node);\n\t } : function (parent, node) {\n\t while (node && (node = node.parentNode)) {\n\t if (node === parent) return true;\n\t }return false;\n\t };\n\t\n\t function funcArg(context, arg, idx, payload) {\n\t return isFunction(arg) ? arg.call(context, idx, payload) : arg;\n\t }\n\t\n\t function setAttribute(node, name, value) {\n\t value == null ? node.removeAttribute(name) : node.setAttribute(name, value);\n\t }\n\t\n\t // access className property while respecting SVGAnimatedString\n\t function className(node, value) {\n\t var klass = node.className || '',\n\t svg = klass && klass.baseVal !== undefined;\n\t\n\t if (value === undefined) return svg ? klass.baseVal : klass;\n\t svg ? klass.baseVal = value : node.className = value;\n\t }\n\t\n\t // \"true\" => true\n\t // \"false\" => false\n\t // \"null\" => null\n\t // \"42\" => 42\n\t // \"42.5\" => 42.5\n\t // \"08\" => \"08\"\n\t // JSON => parse if valid\n\t // String => self\n\t function deserializeValue(value) {\n\t try {\n\t return value ? value == \"true\" || (value == \"false\" ? false : value == \"null\" ? null : +value + \"\" == value ? +value : /^[\\[\\{]/.test(value) ? $.parseJSON(value) : value) : value;\n\t } catch (e) {\n\t return value;\n\t }\n\t }\n\t\n\t $.type = type;\n\t $.isFunction = isFunction;\n\t $.isWindow = isWindow;\n\t $.isArray = isArray;\n\t $.isPlainObject = isPlainObject;\n\t\n\t $.isEmptyObject = function (obj) {\n\t var name;\n\t for (name in obj) {\n\t return false;\n\t }return true;\n\t };\n\t\n\t $.isNumeric = function (val) {\n\t var num = Number(val),\n\t type = typeof val === 'undefined' ? 'undefined' : _typeof(val);\n\t return val != null && type != 'boolean' && (type != 'string' || val.length) && !isNaN(num) && isFinite(num) || false;\n\t };\n\t\n\t $.inArray = function (elem, array, i) {\n\t return emptyArray.indexOf.call(array, elem, i);\n\t };\n\t\n\t $.camelCase = camelize;\n\t $.trim = function (str) {\n\t return str == null ? \"\" : String.prototype.trim.call(str);\n\t };\n\t\n\t // plugin compatibility\n\t $.uuid = 0;\n\t $.support = {};\n\t $.expr = {};\n\t $.noop = function () {};\n\t\n\t $.map = function (elements, callback) {\n\t var value,\n\t values = [],\n\t i,\n\t key;\n\t if (likeArray(elements)) for (i = 0; i < elements.length; i++) {\n\t value = callback(elements[i], i);\n\t if (value != null) values.push(value);\n\t } else for (key in elements) {\n\t value = callback(elements[key], key);\n\t if (value != null) values.push(value);\n\t }\n\t return flatten(values);\n\t };\n\t\n\t $.each = function (elements, callback) {\n\t var i, key;\n\t if (likeArray(elements)) {\n\t for (i = 0; i < elements.length; i++) {\n\t if (callback.call(elements[i], i, elements[i]) === false) return elements;\n\t }\n\t } else {\n\t for (key in elements) {\n\t if (callback.call(elements[key], key, elements[key]) === false) return elements;\n\t }\n\t }\n\t\n\t return elements;\n\t };\n\t\n\t $.grep = function (elements, callback) {\n\t return _filter.call(elements, callback);\n\t };\n\t\n\t if (window.JSON) $.parseJSON = JSON.parse;\n\t\n\t // Populate the class2type map\n\t $.each(\"Boolean Number String Function Array Date RegExp Object Error\".split(\" \"), function (i, name) {\n\t class2type[\"[object \" + name + \"]\"] = name.toLowerCase();\n\t });\n\t\n\t // Define methods that will be available on all\n\t // Zepto collections\n\t $.fn = {\n\t constructor: zepto.Z,\n\t length: 0,\n\t\n\t // Because a collection acts like an array\n\t // copy over these useful array functions.\n\t forEach: emptyArray.forEach,\n\t reduce: emptyArray.reduce,\n\t push: emptyArray.push,\n\t sort: emptyArray.sort,\n\t splice: emptyArray.splice,\n\t indexOf: emptyArray.indexOf,\n\t concat: function concat() {\n\t var i,\n\t value,\n\t args = [];\n\t for (i = 0; i < arguments.length; i++) {\n\t value = arguments[i];\n\t args[i] = zepto.isZ(value) ? value.toArray() : value;\n\t }\n\t return _concat.apply(zepto.isZ(this) ? this.toArray() : this, args);\n\t },\n\t\n\t // `map` and `slice` in the jQuery API work differently\n\t // from their array counterparts\n\t map: function map(fn) {\n\t return $($.map(this, function (el, i) {\n\t return fn.call(el, i, el);\n\t }));\n\t },\n\t slice: function slice() {\n\t return $(_slice.apply(this, arguments));\n\t },\n\t\n\t ready: function ready(callback) {\n\t // need to check if document.body exists for IE as that browser reports\n\t // document ready when it hasn't yet created the body element\n\t if (readyRE.test(document.readyState) && document.body) callback($);else document.addEventListener('DOMContentLoaded', function () {\n\t callback($);\n\t }, false);\n\t return this;\n\t },\n\t get: function get(idx) {\n\t return idx === undefined ? _slice.call(this) : this[idx >= 0 ? idx : idx + this.length];\n\t },\n\t toArray: function toArray() {\n\t return this.get();\n\t },\n\t size: function size() {\n\t return this.length;\n\t },\n\t remove: function remove() {\n\t return this.each(function () {\n\t if (this.parentNode != null) this.parentNode.removeChild(this);\n\t });\n\t },\n\t each: function each(callback) {\n\t emptyArray.every.call(this, function (el, idx) {\n\t return callback.call(el, idx, el) !== false;\n\t });\n\t return this;\n\t },\n\t filter: function filter(selector) {\n\t if (isFunction(selector)) return this.not(this.not(selector));\n\t return $(_filter.call(this, function (element) {\n\t return zepto.matches(element, selector);\n\t }));\n\t },\n\t add: function add(selector, context) {\n\t return $(uniq(this.concat($(selector, context))));\n\t },\n\t is: function is(selector) {\n\t return this.length > 0 && zepto.matches(this[0], selector);\n\t },\n\t not: function not(selector) {\n\t var nodes = [];\n\t if (isFunction(selector) && selector.call !== undefined) this.each(function (idx) {\n\t if (!selector.call(this, idx)) nodes.push(this);\n\t });else {\n\t var excludes = typeof selector == 'string' ? this.filter(selector) : likeArray(selector) && isFunction(selector.item) ? _slice.call(selector) : $(selector);\n\t this.forEach(function (el) {\n\t if (excludes.indexOf(el) < 0) nodes.push(el);\n\t });\n\t }\n\t return $(nodes);\n\t },\n\t has: function has(selector) {\n\t return this.filter(function () {\n\t return isObject(selector) ? $.contains(this, selector) : $(this).find(selector).size();\n\t });\n\t },\n\t eq: function eq(idx) {\n\t return idx === -1 ? this.slice(idx) : this.slice(idx, +idx + 1);\n\t },\n\t first: function first() {\n\t var el = this[0];\n\t return el && !isObject(el) ? el : $(el);\n\t },\n\t last: function last() {\n\t var el = this[this.length - 1];\n\t return el && !isObject(el) ? el : $(el);\n\t },\n\t find: function find(selector) {\n\t var result,\n\t $this = this;\n\t if (!selector) result = $();else if ((typeof selector === 'undefined' ? 'undefined' : _typeof(selector)) == 'object') result = $(selector).filter(function () {\n\t var node = this;\n\t return emptyArray.some.call($this, function (parent) {\n\t return $.contains(parent, node);\n\t });\n\t });else if (this.length == 1) result = $(zepto.qsa(this[0], selector));else result = this.map(function () {\n\t return zepto.qsa(this, selector);\n\t });\n\t return result;\n\t },\n\t closest: function closest(selector, context) {\n\t var nodes = [],\n\t collection = (typeof selector === 'undefined' ? 'undefined' : _typeof(selector)) == 'object' && $(selector);\n\t this.each(function (_, node) {\n\t while (node && !(collection ? collection.indexOf(node) >= 0 : zepto.matches(node, selector))) {\n\t node = node !== context && !isDocument(node) && node.parentNode;\n\t }if (node && nodes.indexOf(node) < 0) nodes.push(node);\n\t });\n\t return $(nodes);\n\t },\n\t parents: function parents(selector) {\n\t var ancestors = [],\n\t nodes = this;\n\t while (nodes.length > 0) {\n\t nodes = $.map(nodes, function (node) {\n\t if ((node = node.parentNode) && !isDocument(node) && ancestors.indexOf(node) < 0) {\n\t ancestors.push(node);\n\t return node;\n\t }\n\t });\n\t }return filtered(ancestors, selector);\n\t },\n\t parent: function parent(selector) {\n\t return filtered(uniq(this.pluck('parentNode')), selector);\n\t },\n\t children: function children(selector) {\n\t return filtered(this.map(function () {\n\t return _children(this);\n\t }), selector);\n\t },\n\t contents: function contents() {\n\t return this.map(function () {\n\t return this.contentDocument || _slice.call(this.childNodes);\n\t });\n\t },\n\t siblings: function siblings(selector) {\n\t return filtered(this.map(function (i, el) {\n\t return _filter.call(_children(el.parentNode), function (child) {\n\t return child !== el;\n\t });\n\t }), selector);\n\t },\n\t empty: function empty() {\n\t return this.each(function () {\n\t this.innerHTML = '';\n\t });\n\t },\n\t // `pluck` is borrowed from Prototype.js\n\t pluck: function pluck(property) {\n\t return $.map(this, function (el) {\n\t return el[property];\n\t });\n\t },\n\t show: function show() {\n\t return this.each(function () {\n\t this.style.display == \"none\" && (this.style.display = '');\n\t if (getComputedStyle(this, '').getPropertyValue(\"display\") == \"none\") this.style.display = defaultDisplay(this.nodeName);\n\t });\n\t },\n\t replaceWith: function replaceWith(newContent) {\n\t return this.before(newContent).remove();\n\t },\n\t wrap: function wrap(structure) {\n\t var func = isFunction(structure);\n\t if (this[0] && !func) var dom = $(structure).get(0),\n\t clone = dom.parentNode || this.length > 1;\n\t\n\t return this.each(function (index) {\n\t $(this).wrapAll(func ? structure.call(this, index) : clone ? dom.cloneNode(true) : dom);\n\t });\n\t },\n\t wrapAll: function wrapAll(structure) {\n\t if (this[0]) {\n\t $(this[0]).before(structure = $(structure));\n\t var children;\n\t // drill down to the inmost element\n\t while ((children = structure.children()).length) {\n\t structure = children.first();\n\t }$(structure).append(this);\n\t }\n\t return this;\n\t },\n\t wrapInner: function wrapInner(structure) {\n\t var func = isFunction(structure);\n\t return this.each(function (index) {\n\t var self = $(this),\n\t contents = self.contents(),\n\t dom = func ? structure.call(this, index) : structure;\n\t contents.length ? contents.wrapAll(dom) : self.append(dom);\n\t });\n\t },\n\t unwrap: function unwrap() {\n\t this.parent().each(function () {\n\t $(this).replaceWith($(this).children());\n\t });\n\t return this;\n\t },\n\t clone: function clone() {\n\t return this.map(function () {\n\t return this.cloneNode(true);\n\t });\n\t },\n\t hide: function hide() {\n\t return this.css(\"display\", \"none\");\n\t },\n\t toggle: function toggle(setting) {\n\t return this.each(function () {\n\t var el = $(this);(setting === undefined ? el.css(\"display\") == \"none\" : setting) ? el.show() : el.hide();\n\t });\n\t },\n\t prev: function prev(selector) {\n\t return $(this.pluck('previousElementSibling')).filter(selector || '*');\n\t },\n\t next: function next(selector) {\n\t return $(this.pluck('nextElementSibling')).filter(selector || '*');\n\t },\n\t html: function html(_html) {\n\t return 0 in arguments ? this.each(function (idx) {\n\t var originHtml = this.innerHTML;\n\t $(this).empty().append(funcArg(this, _html, idx, originHtml));\n\t }) : 0 in this ? this[0].innerHTML : null;\n\t },\n\t text: function text(_text) {\n\t return 0 in arguments ? this.each(function (idx) {\n\t var newText = funcArg(this, _text, idx, this.textContent);\n\t this.textContent = newText == null ? '' : '' + newText;\n\t }) : 0 in this ? this.pluck('textContent').join(\"\") : null;\n\t },\n\t attr: function attr(name, value) {\n\t var result;\n\t return typeof name == 'string' && !(1 in arguments) ? 0 in this && this[0].nodeType == 1 && (result = this[0].getAttribute(name)) != null ? result : undefined : this.each(function (idx) {\n\t if (this.nodeType !== 1) return;\n\t if (isObject(name)) for (key in name) {\n\t setAttribute(this, key, name[key]);\n\t } else setAttribute(this, name, funcArg(this, value, idx, this.getAttribute(name)));\n\t });\n\t },\n\t removeAttr: function removeAttr(name) {\n\t return this.each(function () {\n\t this.nodeType === 1 && name.split(' ').forEach(function (attribute) {\n\t setAttribute(this, attribute);\n\t }, this);\n\t });\n\t },\n\t prop: function prop(name, value) {\n\t name = propMap[name] || name;\n\t return 1 in arguments ? this.each(function (idx) {\n\t this[name] = funcArg(this, value, idx, this[name]);\n\t }) : this[0] && this[0][name];\n\t },\n\t removeProp: function removeProp(name) {\n\t name = propMap[name] || name;\n\t return this.each(function () {\n\t delete this[name];\n\t });\n\t },\n\t data: function data(name, value) {\n\t var attrName = 'data-' + name.replace(capitalRE, '-$1').toLowerCase();\n\t\n\t var data = 1 in arguments ? this.attr(attrName, value) : this.attr(attrName);\n\t\n\t return data !== null ? deserializeValue(data) : undefined;\n\t },\n\t val: function val(value) {\n\t if (0 in arguments) {\n\t if (value == null) value = \"\";\n\t return this.each(function (idx) {\n\t this.value = funcArg(this, value, idx, this.value);\n\t });\n\t } else {\n\t return this[0] && (this[0].multiple ? $(this[0]).find('option').filter(function () {\n\t return this.selected;\n\t }).pluck('value') : this[0].value);\n\t }\n\t },\n\t offset: function offset(coordinates) {\n\t if (coordinates) return this.each(function (index) {\n\t var $this = $(this),\n\t coords = funcArg(this, coordinates, index, $this.offset()),\n\t parentOffset = $this.offsetParent().offset(),\n\t props = {\n\t top: coords.top - parentOffset.top,\n\t left: coords.left - parentOffset.left\n\t };\n\t\n\t if ($this.css('position') == 'static') props['position'] = 'relative';\n\t $this.css(props);\n\t });\n\t if (!this.length) return null;\n\t if (document.documentElement !== this[0] && !$.contains(document.documentElement, this[0])) return { top: 0, left: 0 };\n\t var obj = this[0].getBoundingClientRect();\n\t return {\n\t left: obj.left + window.pageXOffset,\n\t top: obj.top + window.pageYOffset,\n\t width: Math.round(obj.width),\n\t height: Math.round(obj.height)\n\t };\n\t },\n\t css: function css(property, value) {\n\t if (arguments.length < 2) {\n\t var element = this[0];\n\t if (typeof property == 'string') {\n\t if (!element) return;\n\t return element.style[camelize(property)] || getComputedStyle(element, '').getPropertyValue(property);\n\t } else if (isArray(property)) {\n\t if (!element) return;\n\t var props = {};\n\t var computedStyle = getComputedStyle(element, '');\n\t $.each(property, function (_, prop) {\n\t props[prop] = element.style[camelize(prop)] || computedStyle.getPropertyValue(prop);\n\t });\n\t return props;\n\t }\n\t }\n\t\n\t var css = '';\n\t if (type(property) == 'string') {\n\t if (!value && value !== 0) this.each(function () {\n\t this.style.removeProperty(dasherize(property));\n\t });else css = dasherize(property) + \":\" + maybeAddPx(property, value);\n\t } else {\n\t for (key in property) {\n\t if (!property[key] && property[key] !== 0) this.each(function () {\n\t this.style.removeProperty(dasherize(key));\n\t });else css += dasherize(key) + ':' + maybeAddPx(key, property[key]) + ';';\n\t }\n\t }\n\t\n\t return this.each(function () {\n\t this.style.cssText += ';' + css;\n\t });\n\t },\n\t index: function index(element) {\n\t return element ? this.indexOf($(element)[0]) : this.parent().children().indexOf(this[0]);\n\t },\n\t hasClass: function hasClass(name) {\n\t if (!name) return false;\n\t return emptyArray.some.call(this, function (el) {\n\t return this.test(className(el));\n\t }, classRE(name));\n\t },\n\t addClass: function addClass(name) {\n\t if (!name) return this;\n\t return this.each(function (idx) {\n\t if (!('className' in this)) return;\n\t classList = [];\n\t var cls = className(this),\n\t newName = funcArg(this, name, idx, cls);\n\t newName.split(/\\s+/g).forEach(function (klass) {\n\t if (!$(this).hasClass(klass)) classList.push(klass);\n\t }, this);\n\t classList.length && className(this, cls + (cls ? \" \" : \"\") + classList.join(\" \"));\n\t });\n\t },\n\t removeClass: function removeClass(name) {\n\t return this.each(function (idx) {\n\t if (!('className' in this)) return;\n\t if (name === undefined) return className(this, '');\n\t classList = className(this);\n\t funcArg(this, name, idx, classList).split(/\\s+/g).forEach(function (klass) {\n\t classList = classList.replace(classRE(klass), \" \");\n\t });\n\t className(this, classList.trim());\n\t });\n\t },\n\t toggleClass: function toggleClass(name, when) {\n\t if (!name) return this;\n\t return this.each(function (idx) {\n\t var $this = $(this),\n\t names = funcArg(this, name, idx, className(this));\n\t names.split(/\\s+/g).forEach(function (klass) {\n\t (when === undefined ? !$this.hasClass(klass) : when) ? $this.addClass(klass) : $this.removeClass(klass);\n\t });\n\t });\n\t },\n\t scrollTop: function scrollTop(value) {\n\t if (!this.length) return;\n\t var hasScrollTop = 'scrollTop' in this[0];\n\t if (value === undefined) return hasScrollTop ? this[0].scrollTop : this[0].pageYOffset;\n\t return this.each(hasScrollTop ? function () {\n\t this.scrollTop = value;\n\t } : function () {\n\t this.scrollTo(this.scrollX, value);\n\t });\n\t },\n\t scrollLeft: function scrollLeft(value) {\n\t if (!this.length) return;\n\t var hasScrollLeft = 'scrollLeft' in this[0];\n\t if (value === undefined) return hasScrollLeft ? this[0].scrollLeft : this[0].pageXOffset;\n\t return this.each(hasScrollLeft ? function () {\n\t this.scrollLeft = value;\n\t } : function () {\n\t this.scrollTo(value, this.scrollY);\n\t });\n\t },\n\t position: function position() {\n\t if (!this.length) return;\n\t\n\t var elem = this[0],\n\t\n\t // Get *real* offsetParent\n\t offsetParent = this.offsetParent(),\n\t\n\t // Get correct offsets\n\t offset = this.offset(),\n\t parentOffset = rootNodeRE.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset();\n\t\n\t // Subtract element margins\n\t // note: when an element has margin: auto the offsetLeft and marginLeft\n\t // are the same in Safari causing offset.left to incorrectly be 0\n\t offset.top -= parseFloat($(elem).css('margin-top')) || 0;\n\t offset.left -= parseFloat($(elem).css('margin-left')) || 0;\n\t\n\t // Add offsetParent borders\n\t parentOffset.top += parseFloat($(offsetParent[0]).css('border-top-width')) || 0;\n\t parentOffset.left += parseFloat($(offsetParent[0]).css('border-left-width')) || 0;\n\t\n\t // Subtract the two offsets\n\t return {\n\t top: offset.top - parentOffset.top,\n\t left: offset.left - parentOffset.left\n\t };\n\t },\n\t offsetParent: function offsetParent() {\n\t return this.map(function () {\n\t var parent = this.offsetParent || document.body;\n\t while (parent && !rootNodeRE.test(parent.nodeName) && $(parent).css(\"position\") == \"static\") {\n\t parent = parent.offsetParent;\n\t }return parent;\n\t });\n\t }\n\t };\n\t\n\t // for now\n\t $.fn.detach = $.fn.remove\n\t\n\t // Generate the `width` and `height` functions\n\t ;['width', 'height'].forEach(function (dimension) {\n\t var dimensionProperty = dimension.replace(/./, function (m) {\n\t return m[0].toUpperCase();\n\t });\n\t\n\t $.fn[dimension] = function (value) {\n\t var offset,\n\t el = this[0];\n\t if (value === undefined) return isWindow(el) ? el['inner' + dimensionProperty] : isDocument(el) ? el.documentElement['scroll' + dimensionProperty] : (offset = this.offset()) && offset[dimension];else return this.each(function (idx) {\n\t el = $(this);\n\t el.css(dimension, funcArg(this, value, idx, el[dimension]()));\n\t });\n\t };\n\t });\n\t\n\t function traverseNode(node, fun) {\n\t fun(node);\n\t for (var i = 0, len = node.childNodes.length; i < len; i++) {\n\t traverseNode(node.childNodes[i], fun);\n\t }\n\t }\n\t\n\t // Generate the `after`, `prepend`, `before`, `append`,\n\t // `insertAfter`, `insertBefore`, `appendTo`, and `prependTo` methods.\n\t adjacencyOperators.forEach(function (operator, operatorIndex) {\n\t var inside = operatorIndex % 2; //=> prepend, append\n\t\n\t $.fn[operator] = function () {\n\t // arguments can be nodes, arrays of nodes, Zepto objects and HTML strings\n\t var argType,\n\t nodes = $.map(arguments, function (arg) {\n\t var arr = [];\n\t argType = type(arg);\n\t if (argType == \"array\") {\n\t arg.forEach(function (el) {\n\t if (el.nodeType !== undefined) return arr.push(el);else if ($.zepto.isZ(el)) return arr = arr.concat(el.get());\n\t arr = arr.concat(zepto.fragment(el));\n\t });\n\t return arr;\n\t }\n\t return argType == \"object\" || arg == null ? arg : zepto.fragment(arg);\n\t }),\n\t parent,\n\t copyByClone = this.length > 1;\n\t if (nodes.length < 1) return this;\n\t\n\t return this.each(function (_, target) {\n\t parent = inside ? target : target.parentNode;\n\t\n\t // convert all methods to a \"before\" operation\n\t target = operatorIndex == 0 ? target.nextSibling : operatorIndex == 1 ? target.firstChild : operatorIndex == 2 ? target : null;\n\t\n\t var parentInDocument = $.contains(document.documentElement, parent);\n\t\n\t nodes.forEach(function (node) {\n\t if (copyByClone) node = node.cloneNode(true);else if (!parent) return $(node).remove();\n\t\n\t parent.insertBefore(node, target);\n\t if (parentInDocument) traverseNode(node, function (el) {\n\t if (el.nodeName != null && el.nodeName.toUpperCase() === 'SCRIPT' && (!el.type || el.type === 'text/javascript') && !el.src) {\n\t var target = el.ownerDocument ? el.ownerDocument.defaultView : window;\n\t target['eval'].call(target, el.innerHTML);\n\t }\n\t });\n\t });\n\t });\n\t };\n\t\n\t // after => insertAfter\n\t // prepend => prependTo\n\t // before => insertBefore\n\t // append => appendTo\n\t $.fn[inside ? operator + 'To' : 'insert' + (operatorIndex ? 'Before' : 'After')] = function (html) {\n\t $(html)[operator](this);\n\t return this;\n\t };\n\t });\n\t\n\t zepto.Z.prototype = Z.prototype = $.fn;\n\t\n\t // Export internal API functions in the `$.zepto` namespace\n\t zepto.uniq = uniq;\n\t zepto.deserializeValue = deserializeValue;\n\t $.zepto = zepto;\n\t\n\t return $;\n\t }();\n\t\n\t window.Zepto = Zepto;\n\t window.$ === undefined && (window.$ = Zepto);(function ($) {\n\t var _zid = 1,\n\t undefined,\n\t slice = Array.prototype.slice,\n\t isFunction = $.isFunction,\n\t isString = function isString(obj) {\n\t return typeof obj == 'string';\n\t },\n\t handlers = {},\n\t specialEvents = {},\n\t focusinSupported = 'onfocusin' in window,\n\t focus = { focus: 'focusin', blur: 'focusout' },\n\t hover = { mouseenter: 'mouseover', mouseleave: 'mouseout' };\n\t\n\t specialEvents.click = specialEvents.mousedown = specialEvents.mouseup = specialEvents.mousemove = 'MouseEvents';\n\t\n\t function zid(element) {\n\t return element._zid || (element._zid = _zid++);\n\t }\n\t function findHandlers(element, event, fn, selector) {\n\t event = parse(event);\n\t if (event.ns) var matcher = matcherFor(event.ns);\n\t return (handlers[zid(element)] || []).filter(function (handler) {\n\t return handler && (!event.e || handler.e == event.e) && (!event.ns || matcher.test(handler.ns)) && (!fn || zid(handler.fn) === zid(fn)) && (!selector || handler.sel == selector);\n\t });\n\t }\n\t function parse(event) {\n\t var parts = ('' + event).split('.');\n\t return { e: parts[0], ns: parts.slice(1).sort().join(' ') };\n\t }\n\t function matcherFor(ns) {\n\t return new RegExp('(?:^| )' + ns.replace(' ', ' .* ?') + '(?: |$)');\n\t }\n\t\n\t function eventCapture(handler, captureSetting) {\n\t return handler.del && !focusinSupported && handler.e in focus || !!captureSetting;\n\t }\n\t\n\t function realEvent(type) {\n\t return hover[type] || focusinSupported && focus[type] || type;\n\t }\n\t\n\t function add(element, events, fn, data, selector, delegator, capture) {\n\t var id = zid(element),\n\t set = handlers[id] || (handlers[id] = []);\n\t events.split(/\\s/).forEach(function (event) {\n\t if (event == 'ready') return $(document).ready(fn);\n\t var handler = parse(event);\n\t handler.fn = fn;\n\t handler.sel = selector;\n\t // emulate mouseenter, mouseleave\n\t if (handler.e in hover) fn = function fn(e) {\n\t var related = e.relatedTarget;\n\t if (!related || related !== this && !$.contains(this, related)) return handler.fn.apply(this, arguments);\n\t };\n\t handler.del = delegator;\n\t var callback = delegator || fn;\n\t handler.proxy = function (e) {\n\t e = compatible(e);\n\t if (e.isImmediatePropagationStopped()) return;\n\t e.data = data;\n\t var result = callback.apply(element, e._args == undefined ? [e] : [e].concat(e._args));\n\t if (result === false) e.preventDefault(), e.stopPropagation();\n\t return result;\n\t };\n\t handler.i = set.length;\n\t set.push(handler);\n\t if ('addEventListener' in element) element.addEventListener(realEvent(handler.e), handler.proxy, eventCapture(handler, capture));\n\t });\n\t }\n\t function remove(element, events, fn, selector, capture) {\n\t var id = zid(element);(events || '').split(/\\s/).forEach(function (event) {\n\t findHandlers(element, event, fn, selector).forEach(function (handler) {\n\t delete handlers[id][handler.i];\n\t if ('removeEventListener' in element) element.removeEventListener(realEvent(handler.e), handler.proxy, eventCapture(handler, capture));\n\t });\n\t });\n\t }\n\t\n\t $.event = { add: add, remove: remove };\n\t\n\t $.proxy = function (fn, context) {\n\t var args = 2 in arguments && slice.call(arguments, 2);\n\t if (isFunction(fn)) {\n\t var proxyFn = function proxyFn() {\n\t return fn.apply(context, args ? args.concat(slice.call(arguments)) : arguments);\n\t };\n\t proxyFn._zid = zid(fn);\n\t return proxyFn;\n\t } else if (isString(context)) {\n\t if (args) {\n\t args.unshift(fn[context], fn);\n\t return $.proxy.apply(null, args);\n\t } else {\n\t return $.proxy(fn[context], fn);\n\t }\n\t } else {\n\t throw new TypeError(\"expected function\");\n\t }\n\t };\n\t\n\t $.fn.bind = function (event, data, callback) {\n\t return this.on(event, data, callback);\n\t };\n\t $.fn.unbind = function (event, callback) {\n\t return this.off(event, callback);\n\t };\n\t $.fn.one = function (event, selector, data, callback) {\n\t return this.on(event, selector, data, callback, 1);\n\t };\n\t\n\t var returnTrue = function returnTrue() {\n\t return true;\n\t },\n\t returnFalse = function returnFalse() {\n\t return false;\n\t },\n\t ignoreProperties = /^([A-Z]|returnValue$|layer[XY]$|webkitMovement[XY]$)/,\n\t eventMethods = {\n\t preventDefault: 'isDefaultPrevented',\n\t stopImmediatePropagation: 'isImmediatePropagationStopped',\n\t stopPropagation: 'isPropagationStopped'\n\t };\n\t\n\t function compatible(event, source) {\n\t if (source || !event.isDefaultPrevented) {\n\t source || (source = event);\n\t\n\t $.each(eventMethods, function (name, predicate) {\n\t var sourceMethod = source[name];\n\t event[name] = function () {\n\t this[predicate] = returnTrue;\n\t return sourceMethod && sourceMethod.apply(source, arguments);\n\t };\n\t event[predicate] = returnFalse;\n\t });\n\t\n\t event.timeStamp || (event.timeStamp = Date.now());\n\t\n\t if (source.defaultPrevented !== undefined ? source.defaultPrevented : 'returnValue' in source ? source.returnValue === false : source.getPreventDefault && source.getPreventDefault()) event.isDefaultPrevented = returnTrue;\n\t }\n\t return event;\n\t }\n\t\n\t function createProxy(event) {\n\t var key,\n\t proxy = { originalEvent: event };\n\t for (key in event) {\n\t if (!ignoreProperties.test(key) && event[key] !== undefined) proxy[key] = event[key];\n\t }return compatible(proxy, event);\n\t }\n\t\n\t $.fn.delegate = function (selector, event, callback) {\n\t return this.on(event, selector, callback);\n\t };\n\t $.fn.undelegate = function (selector, event, callback) {\n\t return this.off(event, selector, callback);\n\t };\n\t\n\t $.fn.live = function (event, callback) {\n\t $(document.body).delegate(this.selector, event, callback);\n\t return this;\n\t };\n\t $.fn.die = function (event, callback) {\n\t $(document.body).undelegate(this.selector, event, callback);\n\t return this;\n\t };\n\t\n\t $.fn.on = function (event, selector, data, callback, one) {\n\t var autoRemove,\n\t delegator,\n\t $this = this;\n\t if (event && !isString(event)) {\n\t $.each(event, function (type, fn) {\n\t $this.on(type, selector, data, fn, one);\n\t });\n\t return $this;\n\t }\n\t\n\t if (!isString(selector) && !isFunction(callback) && callback !== false) callback = data, data = selector, selector = undefined;\n\t if (callback === undefined || data === false) callback = data, data = undefined;\n\t\n\t if (callback === false) callback = returnFalse;\n\t\n\t return $this.each(function (_, element) {\n\t if (one) autoRemove = function autoRemove(e) {\n\t remove(element, e.type, callback);\n\t return callback.apply(this, arguments);\n\t };\n\t\n\t if (selector) delegator = function delegator(e) {\n\t var evt,\n\t match = $(e.target).closest(selector, element).get(0);\n\t if (match && match !== element) {\n\t evt = $.extend(createProxy(e), { currentTarget: match, liveFired: element });\n\t return (autoRemove || callback).apply(match, [evt].concat(slice.call(arguments, 1)));\n\t }\n\t };\n\t\n\t add(element, event, callback, data, selector, delegator || autoRemove);\n\t });\n\t };\n\t $.fn.off = function (event, selector, callback) {\n\t var $this = this;\n\t if (event && !isString(event)) {\n\t $.each(event, function (type, fn) {\n\t $this.off(type, selector, fn);\n\t });\n\t return $this;\n\t }\n\t\n\t if (!isString(selector) && !isFunction(callback) && callback !== false) callback = selector, selector = undefined;\n\t\n\t if (callback === false) callback = returnFalse;\n\t\n\t return $this.each(function () {\n\t remove(this, event, callback, selector);\n\t });\n\t };\n\t\n\t $.fn.trigger = function (event, args) {\n\t event = isString(event) || $.isPlainObject(event) ? $.Event(event) : compatible(event);\n\t event._args = args;\n\t return this.each(function () {\n\t // handle focus(), blur() by calling them directly\n\t if (event.type in focus && typeof this[event.type] == \"function\") this[event.type]();\n\t // items in the collection might not be DOM elements\n\t else if ('dispatchEvent' in this) this.dispatchEvent(event);else $(this).triggerHandler(event, args);\n\t });\n\t };\n\t\n\t // triggers event handlers on current element just as if an event occurred,\n\t // doesn't trigger an actual event, doesn't bubble\n\t $.fn.triggerHandler = function (event, args) {\n\t var e, result;\n\t this.each(function (i, element) {\n\t e = createProxy(isString(event) ? $.Event(event) : event);\n\t e._args = args;\n\t e.target = element;\n\t $.each(findHandlers(element, event.type || event), function (i, handler) {\n\t result = handler.proxy(e);\n\t if (e.isImmediatePropagationStopped()) return false;\n\t });\n\t });\n\t return result;\n\t }\n\t\n\t // shortcut methods for `.bind(event, fn)` for each event type\n\t ;('focusin focusout focus blur load resize scroll unload click dblclick ' + 'mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave ' + 'change select keydown keypress keyup error').split(' ').forEach(function (event) {\n\t $.fn[event] = function (callback) {\n\t return 0 in arguments ? this.bind(event, callback) : this.trigger(event);\n\t };\n\t });\n\t\n\t $.Event = function (type, props) {\n\t if (!isString(type)) props = type, type = props.type;\n\t var event = document.createEvent(specialEvents[type] || 'Events'),\n\t bubbles = true;\n\t if (props) for (var name in props) {\n\t name == 'bubbles' ? bubbles = !!props[name] : event[name] = props[name];\n\t }event.initEvent(type, bubbles, true);\n\t return compatible(event);\n\t };\n\t })(Zepto);(function ($) {\n\t var jsonpID = +new Date(),\n\t document = window.document,\n\t key,\n\t name,\n\t rscript = /)<[^<]*)*<\\/script>/gi,\n\t scriptTypeRE = /^(?:text|application)\\/javascript/i,\n\t xmlTypeRE = /^(?:text|application)\\/xml/i,\n\t jsonType = 'application/json',\n\t htmlType = 'text/html',\n\t blankRE = /^\\s*$/,\n\t originAnchor = document.createElement('a');\n\t\n\t originAnchor.href = window.location.href;\n\t\n\t // trigger a custom event and return false if it was cancelled\n\t function triggerAndReturn(context, eventName, data) {\n\t var event = $.Event(eventName);\n\t $(context).trigger(event, data);\n\t return !event.isDefaultPrevented();\n\t }\n\t\n\t // trigger an Ajax \"global\" event\n\t function triggerGlobal(settings, context, eventName, data) {\n\t if (settings.global) return triggerAndReturn(context || document, eventName, data);\n\t }\n\t\n\t // Number of active Ajax requests\n\t $.active = 0;\n\t\n\t function ajaxStart(settings) {\n\t if (settings.global && $.active++ === 0) triggerGlobal(settings, null, 'ajaxStart');\n\t }\n\t function ajaxStop(settings) {\n\t if (settings.global && ! --$.active) triggerGlobal(settings, null, 'ajaxStop');\n\t }\n\t\n\t // triggers an extra global event \"ajaxBeforeSend\" that's like \"ajaxSend\" but cancelable\n\t function ajaxBeforeSend(xhr, settings) {\n\t var context = settings.context;\n\t if (settings.beforeSend.call(context, xhr, settings) === false || triggerGlobal(settings, context, 'ajaxBeforeSend', [xhr, settings]) === false) return false;\n\t\n\t triggerGlobal(settings, context, 'ajaxSend', [xhr, settings]);\n\t }\n\t function ajaxSuccess(data, xhr, settings, deferred) {\n\t var context = settings.context,\n\t status = 'success';\n\t settings.success.call(context, data, status, xhr);\n\t if (deferred) deferred.resolveWith(context, [data, status, xhr]);\n\t triggerGlobal(settings, context, 'ajaxSuccess', [xhr, settings, data]);\n\t ajaxComplete(status, xhr, settings);\n\t }\n\t // type: \"timeout\", \"error\", \"abort\", \"parsererror\"\n\t function ajaxError(error, type, xhr, settings, deferred) {\n\t var context = settings.context;\n\t settings.error.call(context, xhr, type, error);\n\t if (deferred) deferred.rejectWith(context, [xhr, type, error]);\n\t triggerGlobal(settings, context, 'ajaxError', [xhr, settings, error || type]);\n\t ajaxComplete(type, xhr, settings);\n\t }\n\t // status: \"success\", \"notmodified\", \"error\", \"timeout\", \"abort\", \"parsererror\"\n\t function ajaxComplete(status, xhr, settings) {\n\t var context = settings.context;\n\t settings.complete.call(context, xhr, status);\n\t triggerGlobal(settings, context, 'ajaxComplete', [xhr, settings]);\n\t ajaxStop(settings);\n\t }\n\t\n\t function ajaxDataFilter(data, type, settings) {\n\t if (settings.dataFilter == empty) return data;\n\t var context = settings.context;\n\t return settings.dataFilter.call(context, data, type);\n\t }\n\t\n\t // Empty function, used as default callback\n\t function empty() {}\n\t\n\t $.ajaxJSONP = function (options, deferred) {\n\t if (!('type' in options)) return $.ajax(options);\n\t\n\t var _callbackName = options.jsonpCallback,\n\t callbackName = ($.isFunction(_callbackName) ? _callbackName() : _callbackName) || 'Zepto' + jsonpID++,\n\t script = document.createElement('script'),\n\t originalCallback = window[callbackName],\n\t responseData,\n\t abort = function abort(errorType) {\n\t $(script).triggerHandler('error', errorType || 'abort');\n\t },\n\t xhr = { abort: abort },\n\t abortTimeout;\n\t\n\t if (deferred) deferred.promise(xhr);\n\t\n\t $(script).on('load error', function (e, errorType) {\n\t clearTimeout(abortTimeout);\n\t $(script).off().remove();\n\t\n\t if (e.type == 'error' || !responseData) {\n\t ajaxError(null, errorType || 'error', xhr, options, deferred);\n\t } else {\n\t ajaxSuccess(responseData[0], xhr, options, deferred);\n\t }\n\t\n\t window[callbackName] = originalCallback;\n\t if (responseData && $.isFunction(originalCallback)) originalCallback(responseData[0]);\n\t\n\t originalCallback = responseData = undefined;\n\t });\n\t\n\t if (ajaxBeforeSend(xhr, options) === false) {\n\t abort('abort');\n\t return xhr;\n\t }\n\t\n\t window[callbackName] = function () {\n\t responseData = arguments;\n\t };\n\t\n\t script.src = options.url.replace(/\\?(.+)=\\?/, '?$1=' + callbackName);\n\t document.head.appendChild(script);\n\t\n\t if (options.timeout > 0) abortTimeout = setTimeout(function () {\n\t abort('timeout');\n\t }, options.timeout);\n\t\n\t return xhr;\n\t };\n\t\n\t $.ajaxSettings = {\n\t // Default type of request\n\t type: 'GET',\n\t // Callback that is executed before request\n\t beforeSend: empty,\n\t // Callback that is executed if the request succeeds\n\t success: empty,\n\t // Callback that is executed the the server drops error\n\t error: empty,\n\t // Callback that is executed on request complete (both: error and success)\n\t complete: empty,\n\t // The context for the callbacks\n\t context: null,\n\t // Whether to trigger \"global\" Ajax events\n\t global: true,\n\t // Transport\n\t xhr: function xhr() {\n\t return new window.XMLHttpRequest();\n\t },\n\t // MIME types mapping\n\t // IIS returns Javascript as \"application/x-javascript\"\n\t accepts: {\n\t script: 'text/javascript, application/javascript, application/x-javascript',\n\t json: jsonType,\n\t xml: 'application/xml, text/xml',\n\t html: htmlType,\n\t text: 'text/plain'\n\t },\n\t // Whether the request is to another domain\n\t crossDomain: false,\n\t // Default timeout\n\t timeout: 0,\n\t // Whether data should be serialized to string\n\t processData: true,\n\t // Whether the browser should be allowed to cache GET responses\n\t cache: true,\n\t //Used to handle the raw response data of XMLHttpRequest.\n\t //This is a pre-filtering function to sanitize the response.\n\t //The sanitized response should be returned\n\t dataFilter: empty\n\t };\n\t\n\t function mimeToDataType(mime) {\n\t if (mime) mime = mime.split(';', 2)[0];\n\t return mime && (mime == htmlType ? 'html' : mime == jsonType ? 'json' : scriptTypeRE.test(mime) ? 'script' : xmlTypeRE.test(mime) && 'xml') || 'text';\n\t }\n\t\n\t function appendQuery(url, query) {\n\t if (query == '') return url;\n\t return (url + '&' + query).replace(/[&?]{1,2}/, '?');\n\t }\n\t\n\t // serialize payload and append it to the URL for GET requests\n\t function serializeData(options) {\n\t if (options.processData && options.data && $.type(options.data) != \"string\") options.data = $.param(options.data, options.traditional);\n\t if (options.data && (!options.type || options.type.toUpperCase() == 'GET' || 'jsonp' == options.dataType)) options.url = appendQuery(options.url, options.data), options.data = undefined;\n\t }\n\t\n\t $.ajax = function (options) {\n\t var settings = $.extend({}, options || {}),\n\t deferred = $.Deferred && $.Deferred(),\n\t urlAnchor,\n\t hashIndex;\n\t for (key in $.ajaxSettings) {\n\t if (settings[key] === undefined) settings[key] = $.ajaxSettings[key];\n\t }ajaxStart(settings);\n\t\n\t if (!settings.crossDomain) {\n\t urlAnchor = document.createElement('a');\n\t urlAnchor.href = settings.url;\n\t // cleans up URL for .href (IE only), see https://github.com/madrobby/zepto/pull/1049\n\t urlAnchor.href = urlAnchor.href;\n\t settings.crossDomain = originAnchor.protocol + '//' + originAnchor.host !== urlAnchor.protocol + '//' + urlAnchor.host;\n\t }\n\t\n\t if (!settings.url) settings.url = window.location.toString();\n\t if ((hashIndex = settings.url.indexOf('#')) > -1) settings.url = settings.url.slice(0, hashIndex);\n\t serializeData(settings);\n\t\n\t var dataType = settings.dataType,\n\t hasPlaceholder = /\\?.+=\\?/.test(settings.url);\n\t if (hasPlaceholder) dataType = 'jsonp';\n\t\n\t if (settings.cache === false || (!options || options.cache !== true) && ('script' == dataType || 'jsonp' == dataType)) settings.url = appendQuery(settings.url, '_=' + Date.now());\n\t\n\t if ('jsonp' == dataType) {\n\t if (!hasPlaceholder) settings.url = appendQuery(settings.url, settings.jsonp ? settings.jsonp + '=?' : settings.jsonp === false ? '' : 'callback=?');\n\t return $.ajaxJSONP(settings, deferred);\n\t }\n\t\n\t var mime = settings.accepts[dataType],\n\t headers = {},\n\t setHeader = function setHeader(name, value) {\n\t headers[name.toLowerCase()] = [name, value];\n\t },\n\t protocol = /^([\\w-]+:)\\/\\//.test(settings.url) ? RegExp.$1 : window.location.protocol,\n\t xhr = settings.xhr(),\n\t nativeSetHeader = xhr.setRequestHeader,\n\t abortTimeout;\n\t\n\t if (deferred) deferred.promise(xhr);\n\t\n\t if (!settings.crossDomain) setHeader('X-Requested-With', 'XMLHttpRequest');\n\t setHeader('Accept', mime || '*/*');\n\t if (mime = settings.mimeType || mime) {\n\t if (mime.indexOf(',') > -1) mime = mime.split(',', 2)[0];\n\t xhr.overrideMimeType && xhr.overrideMimeType(mime);\n\t }\n\t if (settings.contentType || settings.contentType !== false && settings.data && settings.type.toUpperCase() != 'GET') setHeader('Content-Type', settings.contentType || 'application/x-www-form-urlencoded');\n\t\n\t if (settings.headers) for (name in settings.headers) {\n\t setHeader(name, settings.headers[name]);\n\t }xhr.setRequestHeader = setHeader;\n\t\n\t xhr.onreadystatechange = function () {\n\t if (xhr.readyState == 4) {\n\t xhr.onreadystatechange = empty;\n\t clearTimeout(abortTimeout);\n\t var result,\n\t error = false;\n\t if (xhr.status >= 200 && xhr.status < 300 || xhr.status == 304 || xhr.status == 0 && protocol == 'file:') {\n\t dataType = dataType || mimeToDataType(settings.mimeType || xhr.getResponseHeader('content-type'));\n\t\n\t if (xhr.responseType == 'arraybuffer' || xhr.responseType == 'blob') result = xhr.response;else {\n\t result = xhr.responseText;\n\t\n\t try {\n\t // http://perfectionkills.com/global-eval-what-are-the-options/\n\t // sanitize response accordingly if data filter callback provided\n\t result = ajaxDataFilter(result, dataType, settings);\n\t if (dataType == 'script') (1, eval)(result);else if (dataType == 'xml') result = xhr.responseXML;else if (dataType == 'json') result = blankRE.test(result) ? null : $.parseJSON(result);\n\t } catch (e) {\n\t error = e;\n\t }\n\t\n\t if (error) return ajaxError(error, 'parsererror', xhr, settings, deferred);\n\t }\n\t\n\t ajaxSuccess(result, xhr, settings, deferred);\n\t } else {\n\t ajaxError(xhr.statusText || null, xhr.status ? 'error' : 'abort', xhr, settings, deferred);\n\t }\n\t }\n\t };\n\t\n\t if (ajaxBeforeSend(xhr, settings) === false) {\n\t xhr.abort();\n\t ajaxError(null, 'abort', xhr, settings, deferred);\n\t return xhr;\n\t }\n\t\n\t var async = 'async' in settings ? settings.async : true;\n\t xhr.open(settings.type, settings.url, async, settings.username, settings.password);\n\t\n\t if (settings.xhrFields) for (name in settings.xhrFields) {\n\t xhr[name] = settings.xhrFields[name];\n\t }for (name in headers) {\n\t nativeSetHeader.apply(xhr, headers[name]);\n\t }if (settings.timeout > 0) abortTimeout = setTimeout(function () {\n\t xhr.onreadystatechange = empty;\n\t xhr.abort();\n\t ajaxError(null, 'timeout', xhr, settings, deferred);\n\t }, settings.timeout);\n\t\n\t // avoid sending empty string (#319)\n\t xhr.send(settings.data ? settings.data : null);\n\t return xhr;\n\t };\n\t\n\t // handle optional data/success arguments\n\t function parseArguments(url, data, success, dataType) {\n\t if ($.isFunction(data)) dataType = success, success = data, data = undefined;\n\t if (!$.isFunction(success)) dataType = success, success = undefined;\n\t return {\n\t url: url,\n\t data: data,\n\t success: success,\n\t dataType: dataType\n\t };\n\t }\n\t\n\t $.get = function () /* url, data, success, dataType */{\n\t return $.ajax(parseArguments.apply(null, arguments));\n\t };\n\t\n\t $.post = function () /* url, data, success, dataType */{\n\t var options = parseArguments.apply(null, arguments);\n\t options.type = 'POST';\n\t return $.ajax(options);\n\t };\n\t\n\t $.getJSON = function () /* url, data, success */{\n\t var options = parseArguments.apply(null, arguments);\n\t options.dataType = 'json';\n\t return $.ajax(options);\n\t };\n\t\n\t $.fn.load = function (url, data, success) {\n\t if (!this.length) return this;\n\t var self = this,\n\t parts = url.split(/\\s/),\n\t selector,\n\t options = parseArguments(url, data, success),\n\t callback = options.success;\n\t if (parts.length > 1) options.url = parts[0], selector = parts[1];\n\t options.success = function (response) {\n\t self.html(selector ? $('
    ').html(response.replace(rscript, \"\")).find(selector) : response);\n\t callback && callback.apply(self, arguments);\n\t };\n\t $.ajax(options);\n\t return this;\n\t };\n\t\n\t var escape = encodeURIComponent;\n\t\n\t function serialize(params, obj, traditional, scope) {\n\t var type,\n\t array = $.isArray(obj),\n\t hash = $.isPlainObject(obj);\n\t $.each(obj, function (key, value) {\n\t type = $.type(value);\n\t if (scope) key = traditional ? scope : scope + '[' + (hash || type == 'object' || type == 'array' ? key : '') + ']';\n\t // handle data in serializeArray() format\n\t if (!scope && array) params.add(value.name, value.value);\n\t // recurse into nested objects\n\t else if (type == \"array\" || !traditional && type == \"object\") serialize(params, value, traditional, key);else params.add(key, value);\n\t });\n\t }\n\t\n\t $.param = function (obj, traditional) {\n\t var params = [];\n\t params.add = function (key, value) {\n\t if ($.isFunction(value)) value = value();\n\t if (value == null) value = \"\";\n\t this.push(escape(key) + '=' + escape(value));\n\t };\n\t serialize(params, obj, traditional);\n\t return params.join('&').replace(/%20/g, '+');\n\t };\n\t })(Zepto);(function ($) {\n\t $.fn.serializeArray = function () {\n\t var name,\n\t type,\n\t result = [],\n\t add = function add(value) {\n\t if (value.forEach) return value.forEach(add);\n\t result.push({ name: name, value: value });\n\t };\n\t if (this[0]) $.each(this[0].elements, function (_, field) {\n\t type = field.type, name = field.name;\n\t if (name && field.nodeName.toLowerCase() != 'fieldset' && !field.disabled && type != 'submit' && type != 'reset' && type != 'button' && type != 'file' && (type != 'radio' && type != 'checkbox' || field.checked)) add($(field).val());\n\t });\n\t return result;\n\t };\n\t\n\t $.fn.serialize = function () {\n\t var result = [];\n\t this.serializeArray().forEach(function (elm) {\n\t result.push(encodeURIComponent(elm.name) + '=' + encodeURIComponent(elm.value));\n\t });\n\t return result.join('&');\n\t };\n\t\n\t $.fn.submit = function (callback) {\n\t if (0 in arguments) this.bind('submit', callback);else if (this.length) {\n\t var event = $.Event('submit');\n\t this.eq(0).trigger(event);\n\t if (!event.isDefaultPrevented()) this.get(0).submit();\n\t }\n\t return this;\n\t };\n\t })(Zepto);(function () {\n\t // getComputedStyle shouldn't freak out when called\n\t // without a valid element as argument\n\t try {\n\t getComputedStyle(undefined);\n\t } catch (e) {\n\t var nativeGetComputedStyle = getComputedStyle;\n\t window.getComputedStyle = function (element, pseudoElement) {\n\t try {\n\t return nativeGetComputedStyle(element, pseudoElement);\n\t } catch (e) {\n\t return null;\n\t }\n\t };\n\t }\n\t })();\n\t return Zepto;\n\t});\n\n/***/ },\n/* 2 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\texports.default = mTpl;\n\tvar cache = {};\n\t\n\tfunction mTpl(str, data, startSelector, endSelector, isCache) {\n\t var t = this,\n\t d = data,\n\t el = document.getElementById(str),\n\t tpl = el ? el.innerHTML : str,\n\t isCache = isCache != undefined ? isCache : true,\n\t valueArr = [],\n\t fn = function fn() {},\n\t htmlEncode = function htmlEncode(s, n) {\n\t if (!n) {\n\t s = s.replace(/>/g, '>').replace(/';\n\t }\n\t if (!(tpl.indexOf(a) > -1 && tpl.indexOf(b) > -1)) {\n\t return tpl;\n\t }\n\t\n\t var formatTpl = function formatTpl(str, isError) {\n\t var N = isError ? '\\n' : '';\n\t r = isError ? '' : r;\n\t n = isError ? '' : n;\n\t\n\t var eb = function (s) {\n\t return s.replace(/([.*+?^=!:${}()|[\\]\\/\\\\])/g, '\\\\$1');\n\t }(b),\n\t reg = new RegExp(l + '(?:(?!' + eb + ')[\\\\s\\\\S])*' + eb + '|(\\'+)', 'g');\n\t\n\t return tpl.replace(/)[\\s\\S])*-->/g, function (l) {\n\t var i = mTpl_comment.length++;\n\t mTpl_comment[i] = l;\n\t return 'mTpl_comment' + i + ';';\n\t }).split('\\\\').join('\\\\\\\\').replace(/[\\r]/g, r).replace(/[\\n]/g, n).split(a).join(l).replace(reg, function (l, $1) {\n\t return $1 ? new Array($1.length + 1).join('\\r') : l;\n\t }).replace(new RegExp(l + '=(.*?)' + b, 'g'), \"';\" + N + \" s+=mTpl_htmlEncode(String($1));\" + N + \" s+='\").replace(new RegExp(l + '\\!=(.*?)' + b, 'g'), \"';\" + N + \" s+=mTpl_htmlEncode(String($1),true);\" + N + \" s+='\").split(l).join(\"';\" + N).split(b).join(N + ' s+=\\'').split('\\r').join('\\\\\\'');\n\t };\n\t\n\t var p,\n\t propArr = [];\n\t for (p in d) {\n\t propArr.push(p);\n\t valueArr.push(d[p]);\n\t }\n\t\n\t fn = compileFn(propArr, formatTpl(str));\n\t isCache && (cache[str] = {\n\t parsefn: fn,\n\t propList: propArr\n\t });\n\t }\n\t\n\t var s;\n\t\n\t try {\n\t s = fn.apply(t, valueArr);\n\t } catch (e) {\n\t fn = compileFn(propArr, formatTpl(str, true));\n\t s = fn.apply(t, valueArr);\n\t }\n\t\n\t return recoverChar(s);\n\t}\n\n/***/ },\n/* 3 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _zepto = __webpack_require__(1);\n\t\n\tvar _zepto2 = _interopRequireDefault(_zepto);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\t/**\n\t* Bind an event to an object instead of a DOM Node\n\t```\n\t$.bind(this,'event',function(){});\n\t```\n\t* @param {Object} object\n\t* @param {String} event name\n\t* @param {Function} function to execute\n\t* @title $.bind(object,event,function);\n\t*/\n\t_zepto2.default.bind = function (obj, ev, f) {\n\t if (!obj.__events) obj.__events = {};\n\t if (!_zepto2.default.isArray(ev)) ev = [ev];\n\t for (var i = 0; i < ev.length; i++) {\n\t if (!obj.__events[ev[i]]) obj.__events[ev[i]] = [];\n\t obj.__events[ev[i]].push(f);\n\t }\n\t};\n\t\n\t/**\n\t* Trigger an event to an object instead of a DOM Node\n\t```\n\t$.trigger(this,'event',arguments);\n\t```\n\t* @param {Object} object\n\t* @param {String} event name\n\t* @param {Array} arguments\n\t* @title $.trigger(object,event,argments);\n\t*/\n\t_zepto2.default.trigger = function (obj, ev, args) {\n\t var ret = true;\n\t if (!obj.__events) return ret;\n\t if (!_zepto2.default.isArray(ev)) ev = [ev];\n\t if (!_zepto2.default.isArray(args)) args = [];\n\t for (var i = 0; i < ev.length; i++) {\n\t if (obj.__events[ev[i]]) {\n\t var evts = obj.__events[ev[i]];\n\t for (var j = 0; j < evts.length; j++) {\n\t if (_zepto2.default.isFunction(evts[j]) && evts[j].apply(obj, args) === false) ret = false;\n\t }\n\t }\n\t }\n\t return ret;\n\t};\n\t/**\n\t* Unbind an event to an object instead of a DOM Node\n\t```\n\t$.unbind(this,'event',function(){});\n\t```\n\t* @param {Object} object\n\t* @param {String} event name\n\t* @param {Function} function to execute\n\t* @title $.unbind(object,event,function);\n\t*/\n\t_zepto2.default.unbind = function (obj, ev, f) {\n\t if (!obj.__events) return ret;\n\t if (!_zepto2.default.isArray(ev)) ev = [ev];\n\t for (var i = 0; i < ev.length; i++) {\n\t if (obj.__events[ev[i]]) {\n\t var evts = obj.__events[ev[i]];\n\t for (var j = 0; j < evts.length; j++) {\n\t if (f == undefined) delete evts[j];\n\t if (evts[j] == f) {\n\t evts.splice(j, 1);\n\t break;\n\t }\n\t }\n\t }\n\t }\n\t};\n\n/***/ },\n/* 4 */\n/***/ function(module, exports) {\n\n\t// removed by extract-text-webpack-plugin\n\n/***/ },\n/* 5 */,\n/* 6 */,\n/* 7 */,\n/* 8 */,\n/* 9 */,\n/* 10 */,\n/* 11 */,\n/* 12 */\n/***/ function(module, exports) {\n\n\tmodule.exports = \"<% var curInfo = data[0]; %>
    /> \\\">

    <%= curInfo.title %><%= curInfo.author %>

    • 00:00
    • 00:00
    • \\\">
      <% for (var i = 0; i < data.length; i++) { %> <% var idx = i + 1; %> <% var item = data[i]; %>
    • <% if (i === 0) { %> class=cur <% } %>> <%= idx %> <%= item.title %> <%= item.author %>
    • <% } %>
    \";\n\n/***/ },\n/* 13 */\n/***/ function(module, exports) {\n\n\tmodule.exports = \"
  • \\\"> <%= idx %> <%= title %> <%= author %>
  • \";\n\n/***/ }\n/******/ ])\n});\n;\n\n\n/** WEBPACK FOOTER **\n ** audio.min.js\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap ece41897dfb342f90dfb\n **/","/**\n * html5 audio player 音频播放器组件\n * 适用于pc及移动端,可单独定制皮肤\n * 提供(播放进度条,拖拽定位/快进/快退播放,连播/播放列表/循环播放,上下曲)\n * @date 2016-07-28\n * @author samczhang@tencent.com\n * --------------------------------------\n *\n * 对外调用接口及自定义事件\n * @method play 播放\n * @method pause 暂停\n * @method prePlay 上一首\n * @method nextPlay 下一首\n * @method switchPlay 指定列表索引播放\n * @method togglePlay 切换播放与暂停\n * @method setLoopType 设置循环播放方式\n * @method addtoPlayList 添加歌曲到播放列表\n *\n * @customEvent play 开始播放\n * @customEvent pause 暂停播放\n * @customEvent playing 播放中\n * @customEvent ended 播放结束\n * --------------------------------------\n *\n * 使用demo\n * new AudioPlayer({\n * data: [{\n * title: '曾经的你',\n * author: '许巍',\n * src: '/example/asset/music/once.mp3',\n * cover: '/example/asset/image/cover_once.jpeg'\n * }, {\n * title: 'You\\'re Beautiful',\n * author: 'James Blunt',\n * src: '/example/asset/music/you_are_beautiful.mp4',\n * cover: '/example/asset/image/cover_yab.jpg'\n * }, {\n * title: 'I\\'m Yours',\n * author: 'Jason Mraz',\n * src: '/example/asset/music/i_am_yours.mp4',\n * cover: '/example/asset/image/cover_iay.jpg'\n * }]\n * });\n * \n */\n\nimport $ from './lib/zepto.js';\nimport render from './lib/render.js';\nimport customEvent from './lib/customEvent.js'\n\nimport './audio.less';\nimport tpl from './audio.html';\nimport listTpl from './list.html';\n\nconst defaultConfig = {\n id: 'player-wrap', //播放器容器id\n isAutoplay: true, //是否自动播放\n tpl: tpl, //音频播放器模板\n\n /**\n * loopType {string} 播放循环方式\n * none: 不循环,\n * single: 单曲循环\n * order: 顺序循环\n */\n loopType: 'order',\n\n /**\n * data {array} 音频数据,数组的每一项为对象\n * title: 歌名\n * author: 作者\n * src: 音频地址\n * cover: 音频封面图\n */\n data: []\n};\n\nclass AudioPlayer {\n constructor(config) {\n this.config = this.extend({}, defaultConfig, config || {});\n this.init();\n }\n\n init() {\n this._initStatus();\n this._createAudio();\n this._createPlayer();\n this._cache();\n this._setPlaybarPos();\n this._setPlayListHeight();\n this._initEvent();\n }\n\n _createAudio() {\n let me = this,\n config = this.config;\n\n this.audio = document.createElement('audio');\n this.audio.setAttribute('src', this.data[0].src);\n this.audio.setAttribute('preload', 'metadata');\n\n if (config.isAutoplay) {\n this.play();\n }\n\n document.body.appendChild(this.audio);\n }\n\n _initStatus() {\n let me = this,\n config = this.config;\n\n this.playStatus = config.isAutoplay ? 'play' : 'pause';\n this.playListStatus = 'show';\n this.playIdx = 0;\n this.data = config.data;\n this.loopType = config.loopType;\n this.totalNum = this.data.length;\n }\n\n _createPlayer() {\n let me = this,\n config = this.config,\n playIcon = (this.playStatus === 'play') ? 'pause' : 'play';\n\n this.el = $(`#${config.id}`);\n this.el.html(render(config.tpl, {\n data: this.data,\n playIcon: playIcon\n }));\n }\n\n _cache() {\n let me = this,\n config = this.config,\n el = this.el;\n\n //dom cache\n this.playTime = el.find('.play-time');\n this.totalTime = el.find('.total-time');\n this.playBar = el.find('.play-bar');\n this.loadedBar = el.find('.loaded');\n this.playedBar = el.find('.played');\n this.playPointer = el.find('.pointer');\n this.playListBtn = el.find('.icon-list');\n this.playListWrap = el.find('.play-list');\n this.playListItems = this.playListWrap.find('li');\n\n this.nextBtn = el.find('.icon-nextsong');\n this.preBtn = el.find('.icon-presong');\n this.cover = el.find('img.cover');\n this.title = el.find('.info h3');\n this.loopBtn = el.find('.icon-loop');\n this.playBtn = el.find('.play-btn');\n this.coverPlayBtn = el.find('.cover-play-btn');\n\n //event callback cache\n this.tempMovePlaybar = $.proxy(this._movePlaybar, this);\n this.tempMouseupCb = $.proxy(this._mouseupCb, this);\n }\n\n //设置及缓存播放进度条位置信息,方便计算百分比\n _setPlaybarPos() {\n let playBarPos = this.playBar[0].getBoundingClientRect();\n this.playBarClientX = playBarPos.left;\n this.playBarWidth = playBarPos.width;\n }\n\n //初始化及缓存播放列表高度,做动画需要\n _setPlayListHeight() {\n let playListWrap = this.playListWrap;\n this.playListHeight = playListWrap.height();\n playListWrap.css('height', this.playListHeight);\n }\n\n _initEvent() {\n let me = this,\n config = this.config,\n playPointer = this.playPointer,\n audio = this.audio;\n\n audio.addEventListener('durationchange', $.proxy(this._durationchangeCb, this), false);\n audio.addEventListener('progress', $.proxy(this._progressCb, this), false);\n audio.addEventListener('ended', $.proxy(this._endedCb, this), false);\n\n $(window).on('resize', $.proxy(this._setPlaybarPos, this));\n $(window).on('orientationchange', $.proxy(this._setPlaybarPos, this));\n\n this.el.on('click', '.play-btn, .cover-play-btn', $.proxy(this.togglePlay, this));\n this.playBar.on('click', $.proxy(this.assignPlay, this));\n this.loopBtn.on('click', $.proxy(this._toggleOrderLoop, this));\n\n playPointer.on('touchmove', $.proxy(this._movePlaybar, this));\n playPointer.on('touchend', $.proxy(this.assignPlay, this));\n playPointer.on('mousedown', $.proxy(this._mousedownCb, this));\n\n this.playListBtn.on('click', $.proxy(this._togglePlayList, this));\n this.playListWrap.on('click', 'li', $.proxy(this.switchPlay, this));\n\n this.preBtn.on('click', $.proxy(this.prePlay, this));\n this.nextBtn.on('click', $.proxy(this.nextPlay, this));\n }\n\n _durationchangeCb() {\n this.totalTime.html(this.formatSeconds(this.audio.duration));\n }\n\n _progressCb(event) {\n let me = this,\n config = this.config,\n audio = this.audio;\n\n let loadedPercent = audio.buffered.length ? \n audio.buffered.end(audio.buffered.length - 1) / audio.duration : 0;\n\n this.loadedBar.css('width', loadedPercent * 100 + '%');\n\n $.trigger(this, 'playing', [{\n song: this.data[this.playIdx],\n loadedPercent: loadedPercent\n }]);\n }\n\n _endedCb(event) {\n switch(this.loopType) {\n case 'order':\n this.nextPlay();\n break;\n case 'single':\n this.switchPlay(this.playIdx);\n break;\n case 'none':\n this.togglePlay();\n break;\n default:\n break;\n }\n\n $.trigger(this, 'ended', [{\n song: this.data[this.playIdx]\n }]);\n }\n\n prePlay() {\n let idx = this.playIdx - 1;\n if (idx < 0) {\n idx = this.totalNum - 1;\n }\n\n this.switchPlay(idx);\n }\n\n nextPlay() {\n let idx = this.playIdx + 1;\n if (idx > this.totalNum - 1) {\n idx = 0;\n }\n\n this.switchPlay(idx);\n }\n\n _toggleOrderLoop(event) {\n switch(this.loopType) {\n case 'order':\n this.loopType = 'none';\n this.loopBtn.addClass('gray');\n break;\n case 'none':\n this.loopType = 'order';\n this.loopBtn.removeClass('gray');\n break;\n default:\n break;\n }\n }\n\n /**\n * 设置循环播放方式\n * type {string} 循环播放方式\n * none: 不循环\n * order: 顺序循环\n * single: 单曲循环\n */\n setLoopType(type) {\n this.loopType = type;\n }\n\n /**\n * 添加新歌曲到播放列表\n * song {object} 需要添加的歌曲对象\n * title: 歌名\n * author: 作者\n * src: 音频地址\n * cover: 音频封面图\n */\n addtoPlayList(song) {\n this.totalNum++;\n this.data.push(song);\n\n //render list template\n song.idx = this.totalNum;\n this.playListWrap.append(render(listTpl, song));\n\n $.trigger(this, 'afterAddtoPlayList', [{\n song: song\n }]);\n }\n\n /**\n * 歌曲播放切换\n * event {event object | idx}\n * 接收参数有两种方式\n * 一种通过事件event找到需要播放的idx\n * 直接传入需要播放的idx\n * idx 从0开始\n */\n switchPlay(event) {\n let me = this,\n config = this.config,\n playListItems = this.playListItems,\n idx = event;\n\n if (typeof event === 'object') {\n idx = $(event.currentTarget).data('idx')\n }\n\n if (this.playIdx === idx) return;\n\n let songData = this.data[idx];\n playListItems.removeClass('cur');\n $(playListItems.get(idx)).addClass('cur');\n\n this.pause();\n this.audio.setAttribute('src', songData.src);\n this.playIdx = idx;\n this.play();\n\n this.cover.attr('src', songData.cover);\n this.title.html(`${songData.title}${songData.author}`);\n }\n\n _togglePlayList(event) {\n let me = this,\n config = this.config,\n playListWrap = this.playListWrap;\n\n if (this.playListStatus === 'show') {\n playListWrap.css('height', 0);\n this.playListStatus = 'hide';\n } else {\n playListWrap.css('height', this.playListHeight);\n this.playListStatus = 'show';\n }\n }\n\n _mousedownCb() {\n let me = this;\n let playPointer = this.playPointer;\n playPointer.on('mousemove', this.tempMovePlaybar);\n playPointer.on('mouseup', this.tempMouseupCb);\n }\n\n _mouseupCb(event) {\n let me = this;\n let playPointer = this.playPointer;\n\n playPointer.unbind('mousemove', this.tempMovePlaybar);\n playPointer.unbind('mouseup', this.tempMouseupCb);\n\n this.assignPlay(event);\n }\n\n _movePlaybar(event) {\n event.preventDefault();\n event.stopPropagation();\n\n this.clearPlayTimer();\n\n //根据不同的事件取相应的坐标值\n let pointerClientX = event.clientX || event.touches[0].clientX;\n let offsetX = pointerClientX - this.playBarClientX;\n let curPercent = Math.min(offsetX / this.playBarWidth, 1);\n\n this.playedBar.css('width', curPercent * 100 + '%');\n this.playTime.html(this.formatSeconds(this.audio.duration * curPercent));\n }\n\n assignPlay(event) {\n event.preventDefault();\n event.stopPropagation();\n\n let audio = this.audio;\n\n //分点击事件和touchend事件,获取坐标的方式不一样\n let pointerClientX = event.clientX || event.changedTouches[0].clientX;\n let curPercent = (pointerClientX - this.playBarClientX) / this.playBarWidth;\n\n //指定位置播放,立即更新播放指示点\n //已播放时间及已播放进度条通过playTimer自动更新\n audio.currentTime = audio.duration * curPercent;\n this.playedBar.css('width', curPercent * 100 + '%');\n\n //如果是通过拖拽播放,需要重新开启playtimer\n if (!this.playTimer) {\n this.startPlayTimer();\n }\n }\n\n play() {\n var me = this,\n config = this.config,\n audio = this.audio;\n\n audio.play();\n this.playStatus = 'play';\n this.startPlayTimer();\n\n if (this.el) {\n this.playBtn.addClass('icon-pause');\n this.coverPlayBtn.addClass('icon-pause');\n this.playBtn.removeClass('icon-play');\n this.coverPlayBtn.removeClass('icon-play');\n }\n\n $.trigger(this, 'play', [{\n song: me.data[this.playIdx]\n }]);\n }\n\n pause() {\n var me = this,\n config = this.config,\n audio = this.audio;\n\n audio.pause();\n this.playStatus = 'pause';\n\n this.clearPlayTimer();\n\n this.playBtn.removeClass('icon-pause');\n this.coverPlayBtn.removeClass('icon-pause');\n this.playBtn.addClass('icon-play');\n this.coverPlayBtn.addClass('icon-play');\n\n $.trigger(this, 'pause', [{\n songInfo: me.data[this.playIdx]\n }]);\n }\n\n startPlayTimer() {\n let audio = this.audio;\n\n this.playTimer = setInterval(() => {\n let playedPercent = audio.currentTime / audio.duration;\n this.playedBar.css('width', playedPercent * 100 + '%');\n this.playTime.html(this.formatSeconds(audio.currentTime));\n }, 500);\n }\n\n clearPlayTimer() {\n if (this.playTimer) {\n clearInterval(this.playTimer);\n this.playTimer = null;\n }\n }\n\n togglePlay(event) {\n if (this.playStatus === 'play') {\n this.pause();\n } else {\n this.play();\n }\n }\n\n formatSeconds(seconds) {\n let minute = parseInt(seconds / 60, 10);\n let second = parseInt(seconds - minute * 60, 10);\n let actNum = (num) => {\n let rst = '';\n if (num < 1) {\n rst = '00';\n } else if (num >= 1 && num < 10) {\n rst = `0${num}`;\n } else {\n rst = num;\n }\n\n return rst;\n }\n\n minute = actNum(minute);\n second = actNum(second);\n\n return `${minute}:${second}`;\n }\n\n extend(object) {\n let args = Array.prototype.slice.call(arguments, 1);\n\n for (let i = 0, source; source = args[i]; i++) {\n if (!source) continue;\n for (let property in source) {\n object[property] = source[property];\n }\n }\n\n return object;\n }\n}\n\nexport {AudioPlayer};\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/audio.js\n **/","/* Zepto v1.2.0 - zepto event ajax form ie - zeptojs.com/license */\n(function(global, factory) {\n if (typeof define === 'function' && define.amd)\n define(function() { return factory(global) })\n else\n factory(global)\n}(typeof window !== \"undefined\" ? window : this, function(window) {\n var Zepto = (function() {\n var undefined, key, $, classList, emptyArray = [], concat = emptyArray.concat, filter = emptyArray.filter, slice = emptyArray.slice,\n document = window.document,\n elementDisplay = {}, classCache = {},\n cssNumber = { 'column-count': 1, 'columns': 1, 'font-weight': 1, 'line-height': 1,'opacity': 1, 'z-index': 1, 'zoom': 1 },\n fragmentRE = /^\\s*<(\\w+|!)[^>]*>/,\n singleTagRE = /^<(\\w+)\\s*\\/?>(?:<\\/\\1>|)$/,\n tagExpanderRE = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:]+)[^>]*)\\/>/ig,\n rootNodeRE = /^(?:body|html)$/i,\n capitalRE = /([A-Z])/g,\n\n // special attributes that should be get/set via method calls\n methodAttributes = ['val', 'css', 'html', 'text', 'data', 'width', 'height', 'offset'],\n\n adjacencyOperators = [ 'after', 'prepend', 'before', 'append' ],\n table = document.createElement('table'),\n tableRow = document.createElement('tr'),\n containers = {\n 'tr': document.createElement('tbody'),\n 'tbody': table, 'thead': table, 'tfoot': table,\n 'td': tableRow, 'th': tableRow,\n '*': document.createElement('div')\n },\n readyRE = /complete|loaded|interactive/,\n simpleSelectorRE = /^[\\w-]*$/,\n class2type = {},\n toString = class2type.toString,\n zepto = {},\n camelize, uniq,\n tempParent = document.createElement('div'),\n propMap = {\n 'tabindex': 'tabIndex',\n 'readonly': 'readOnly',\n 'for': 'htmlFor',\n 'class': 'className',\n 'maxlength': 'maxLength',\n 'cellspacing': 'cellSpacing',\n 'cellpadding': 'cellPadding',\n 'rowspan': 'rowSpan',\n 'colspan': 'colSpan',\n 'usemap': 'useMap',\n 'frameborder': 'frameBorder',\n 'contenteditable': 'contentEditable'\n },\n isArray = Array.isArray ||\n function(object){ return object instanceof Array }\n\n zepto.matches = function(element, selector) {\n if (!selector || !element || element.nodeType !== 1) return false\n var matchesSelector = element.matches || element.webkitMatchesSelector ||\n element.mozMatchesSelector || element.oMatchesSelector ||\n element.matchesSelector\n if (matchesSelector) return matchesSelector.call(element, selector)\n // fall back to performing a selector:\n var match, parent = element.parentNode, temp = !parent\n if (temp) (parent = tempParent).appendChild(element)\n match = ~zepto.qsa(parent, selector).indexOf(element)\n temp && tempParent.removeChild(element)\n return match\n }\n\n function type(obj) {\n return obj == null ? String(obj) :\n class2type[toString.call(obj)] || \"object\"\n }\n\n function isFunction(value) { return type(value) == \"function\" }\n function isWindow(obj) { return obj != null && obj == obj.window }\n function isDocument(obj) { return obj != null && obj.nodeType == obj.DOCUMENT_NODE }\n function isObject(obj) { return type(obj) == \"object\" }\n function isPlainObject(obj) {\n return isObject(obj) && !isWindow(obj) && Object.getPrototypeOf(obj) == Object.prototype\n }\n\n function likeArray(obj) {\n var length = !!obj && 'length' in obj && obj.length,\n type = $.type(obj)\n\n return 'function' != type && !isWindow(obj) && (\n 'array' == type || length === 0 ||\n (typeof length == 'number' && length > 0 && (length - 1) in obj)\n )\n }\n\n function compact(array) { return filter.call(array, function(item){ return item != null }) }\n function flatten(array) { return array.length > 0 ? $.fn.concat.apply([], array) : array }\n camelize = function(str){ return str.replace(/-+(.)?/g, function(match, chr){ return chr ? chr.toUpperCase() : '' }) }\n function dasherize(str) {\n return str.replace(/::/g, '/')\n .replace(/([A-Z]+)([A-Z][a-z])/g, '$1_$2')\n .replace(/([a-z\\d])([A-Z])/g, '$1_$2')\n .replace(/_/g, '-')\n .toLowerCase()\n }\n uniq = function(array){ return filter.call(array, function(item, idx){ return array.indexOf(item) == idx }) }\n\n function classRE(name) {\n return name in classCache ?\n classCache[name] : (classCache[name] = new RegExp('(^|\\\\s)' + name + '(\\\\s|$)'))\n }\n\n function maybeAddPx(name, value) {\n return (typeof value == \"number\" && !cssNumber[dasherize(name)]) ? value + \"px\" : value\n }\n\n function defaultDisplay(nodeName) {\n var element, display\n if (!elementDisplay[nodeName]) {\n element = document.createElement(nodeName)\n document.body.appendChild(element)\n display = getComputedStyle(element, '').getPropertyValue(\"display\")\n element.parentNode.removeChild(element)\n display == \"none\" && (display = \"block\")\n elementDisplay[nodeName] = display\n }\n return elementDisplay[nodeName]\n }\n\n function children(element) {\n return 'children' in element ?\n slice.call(element.children) :\n $.map(element.childNodes, function(node){ if (node.nodeType == 1) return node })\n }\n\n function Z(dom, selector) {\n var i, len = dom ? dom.length : 0\n for (i = 0; i < len; i++) this[i] = dom[i]\n this.length = len\n this.selector = selector || ''\n }\n\n // `$.zepto.fragment` takes a html string and an optional tag name\n // to generate DOM nodes from the given html string.\n // The generated DOM nodes are returned as an array.\n // This function can be overridden in plugins for example to make\n // it compatible with browsers that don't support the DOM fully.\n zepto.fragment = function(html, name, properties) {\n var dom, nodes, container\n\n // A special case optimization for a single tag\n if (singleTagRE.test(html)) dom = $(document.createElement(RegExp.$1))\n\n if (!dom) {\n if (html.replace) html = html.replace(tagExpanderRE, \"<$1>\")\n if (name === undefined) name = fragmentRE.test(html) && RegExp.$1\n if (!(name in containers)) name = '*'\n\n container = containers[name]\n container.innerHTML = '' + html\n dom = $.each(slice.call(container.childNodes), function(){\n container.removeChild(this)\n })\n }\n\n if (isPlainObject(properties)) {\n nodes = $(dom)\n $.each(properties, function(key, value) {\n if (methodAttributes.indexOf(key) > -1) nodes[key](value)\n else nodes.attr(key, value)\n })\n }\n\n return dom\n }\n\n // `$.zepto.Z` swaps out the prototype of the given `dom` array\n // of nodes with `$.fn` and thus supplying all the Zepto functions\n // to the array. This method can be overridden in plugins.\n zepto.Z = function(dom, selector) {\n return new Z(dom, selector)\n }\n\n // `$.zepto.isZ` should return `true` if the given object is a Zepto\n // collection. This method can be overridden in plugins.\n zepto.isZ = function(object) {\n return object instanceof zepto.Z\n }\n\n // `$.zepto.init` is Zepto's counterpart to jQuery's `$.fn.init` and\n // takes a CSS selector and an optional context (and handles various\n // special cases).\n // This method can be overridden in plugins.\n zepto.init = function(selector, context) {\n var dom\n // If nothing given, return an empty Zepto collection\n if (!selector) return zepto.Z()\n // Optimize for string selectors\n else if (typeof selector == 'string') {\n selector = selector.trim()\n // If it's a html fragment, create nodes from it\n // Note: In both Chrome 21 and Firefox 15, DOM error 12\n // is thrown if the fragment doesn't begin with <\n if (selector[0] == '<' && fragmentRE.test(selector))\n dom = zepto.fragment(selector, RegExp.$1, context), selector = null\n // If there's a context, create a collection on that context first, and select\n // nodes from there\n else if (context !== undefined) return $(context).find(selector)\n // If it's a CSS selector, use it to select nodes.\n else dom = zepto.qsa(document, selector)\n }\n // If a function is given, call it when the DOM is ready\n else if (isFunction(selector)) return $(document).ready(selector)\n // If a Zepto collection is given, just return it\n else if (zepto.isZ(selector)) return selector\n else {\n // normalize array if an array of nodes is given\n if (isArray(selector)) dom = compact(selector)\n // Wrap DOM nodes.\n else if (isObject(selector))\n dom = [selector], selector = null\n // If it's a html fragment, create nodes from it\n else if (fragmentRE.test(selector))\n dom = zepto.fragment(selector.trim(), RegExp.$1, context), selector = null\n // If there's a context, create a collection on that context first, and select\n // nodes from there\n else if (context !== undefined) return $(context).find(selector)\n // And last but no least, if it's a CSS selector, use it to select nodes.\n else dom = zepto.qsa(document, selector)\n }\n // create a new Zepto collection from the nodes found\n return zepto.Z(dom, selector)\n }\n\n // `$` will be the base `Zepto` object. When calling this\n // function just call `$.zepto.init, which makes the implementation\n // details of selecting nodes and creating Zepto collections\n // patchable in plugins.\n $ = function(selector, context){\n return zepto.init(selector, context)\n }\n\n function extend(target, source, deep) {\n for (key in source)\n if (deep && (isPlainObject(source[key]) || isArray(source[key]))) {\n if (isPlainObject(source[key]) && !isPlainObject(target[key]))\n target[key] = {}\n if (isArray(source[key]) && !isArray(target[key]))\n target[key] = []\n extend(target[key], source[key], deep)\n }\n else if (source[key] !== undefined) target[key] = source[key]\n }\n\n // Copy all but undefined properties from one or more\n // objects to the `target` object.\n $.extend = function(target){\n var deep, args = slice.call(arguments, 1)\n if (typeof target == 'boolean') {\n deep = target\n target = args.shift()\n }\n args.forEach(function(arg){ extend(target, arg, deep) })\n return target\n }\n\n // `$.zepto.qsa` is Zepto's CSS selector implementation which\n // uses `document.querySelectorAll` and optimizes for some special cases, like `#id`.\n // This method can be overridden in plugins.\n zepto.qsa = function(element, selector){\n var found,\n maybeID = selector[0] == '#',\n maybeClass = !maybeID && selector[0] == '.',\n nameOnly = maybeID || maybeClass ? selector.slice(1) : selector, // Ensure that a 1 char tag name still gets checked\n isSimple = simpleSelectorRE.test(nameOnly)\n return (element.getElementById && isSimple && maybeID) ? // Safari DocumentFragment doesn't have getElementById\n ( (found = element.getElementById(nameOnly)) ? [found] : [] ) :\n (element.nodeType !== 1 && element.nodeType !== 9 && element.nodeType !== 11) ? [] :\n slice.call(\n isSimple && !maybeID && element.getElementsByClassName ? // DocumentFragment doesn't have getElementsByClassName/TagName\n maybeClass ? element.getElementsByClassName(nameOnly) : // If it's simple, it could be a class\n element.getElementsByTagName(selector) : // Or a tag\n element.querySelectorAll(selector) // Or it's not simple, and we need to query all\n )\n }\n\n function filtered(nodes, selector) {\n return selector == null ? $(nodes) : $(nodes).filter(selector)\n }\n\n $.contains = document.documentElement.contains ?\n function(parent, node) {\n return parent !== node && parent.contains(node)\n } :\n function(parent, node) {\n while (node && (node = node.parentNode))\n if (node === parent) return true\n return false\n }\n\n function funcArg(context, arg, idx, payload) {\n return isFunction(arg) ? arg.call(context, idx, payload) : arg\n }\n\n function setAttribute(node, name, value) {\n value == null ? node.removeAttribute(name) : node.setAttribute(name, value)\n }\n\n // access className property while respecting SVGAnimatedString\n function className(node, value){\n var klass = node.className || '',\n svg = klass && klass.baseVal !== undefined\n\n if (value === undefined) return svg ? klass.baseVal : klass\n svg ? (klass.baseVal = value) : (node.className = value)\n }\n\n // \"true\" => true\n // \"false\" => false\n // \"null\" => null\n // \"42\" => 42\n // \"42.5\" => 42.5\n // \"08\" => \"08\"\n // JSON => parse if valid\n // String => self\n function deserializeValue(value) {\n try {\n return value ?\n value == \"true\" ||\n ( value == \"false\" ? false :\n value == \"null\" ? null :\n +value + \"\" == value ? +value :\n /^[\\[\\{]/.test(value) ? $.parseJSON(value) :\n value )\n : value\n } catch(e) {\n return value\n }\n }\n\n $.type = type\n $.isFunction = isFunction\n $.isWindow = isWindow\n $.isArray = isArray\n $.isPlainObject = isPlainObject\n\n $.isEmptyObject = function(obj) {\n var name\n for (name in obj) return false\n return true\n }\n\n $.isNumeric = function(val) {\n var num = Number(val), type = typeof val\n return val != null && type != 'boolean' &&\n (type != 'string' || val.length) &&\n !isNaN(num) && isFinite(num) || false\n }\n\n $.inArray = function(elem, array, i){\n return emptyArray.indexOf.call(array, elem, i)\n }\n\n $.camelCase = camelize\n $.trim = function(str) {\n return str == null ? \"\" : String.prototype.trim.call(str)\n }\n\n // plugin compatibility\n $.uuid = 0\n $.support = { }\n $.expr = { }\n $.noop = function() {}\n\n $.map = function(elements, callback){\n var value, values = [], i, key\n if (likeArray(elements))\n for (i = 0; i < elements.length; i++) {\n value = callback(elements[i], i)\n if (value != null) values.push(value)\n }\n else\n for (key in elements) {\n value = callback(elements[key], key)\n if (value != null) values.push(value)\n }\n return flatten(values)\n }\n\n $.each = function(elements, callback){\n var i, key\n if (likeArray(elements)) {\n for (i = 0; i < elements.length; i++)\n if (callback.call(elements[i], i, elements[i]) === false) return elements\n } else {\n for (key in elements)\n if (callback.call(elements[key], key, elements[key]) === false) return elements\n }\n\n return elements\n }\n\n $.grep = function(elements, callback){\n return filter.call(elements, callback)\n }\n\n if (window.JSON) $.parseJSON = JSON.parse\n\n // Populate the class2type map\n $.each(\"Boolean Number String Function Array Date RegExp Object Error\".split(\" \"), function(i, name) {\n class2type[ \"[object \" + name + \"]\" ] = name.toLowerCase()\n })\n\n // Define methods that will be available on all\n // Zepto collections\n $.fn = {\n constructor: zepto.Z,\n length: 0,\n\n // Because a collection acts like an array\n // copy over these useful array functions.\n forEach: emptyArray.forEach,\n reduce: emptyArray.reduce,\n push: emptyArray.push,\n sort: emptyArray.sort,\n splice: emptyArray.splice,\n indexOf: emptyArray.indexOf,\n concat: function(){\n var i, value, args = []\n for (i = 0; i < arguments.length; i++) {\n value = arguments[i]\n args[i] = zepto.isZ(value) ? value.toArray() : value\n }\n return concat.apply(zepto.isZ(this) ? this.toArray() : this, args)\n },\n\n // `map` and `slice` in the jQuery API work differently\n // from their array counterparts\n map: function(fn){\n return $($.map(this, function(el, i){ return fn.call(el, i, el) }))\n },\n slice: function(){\n return $(slice.apply(this, arguments))\n },\n\n ready: function(callback){\n // need to check if document.body exists for IE as that browser reports\n // document ready when it hasn't yet created the body element\n if (readyRE.test(document.readyState) && document.body) callback($)\n else document.addEventListener('DOMContentLoaded', function(){ callback($) }, false)\n return this\n },\n get: function(idx){\n return idx === undefined ? slice.call(this) : this[idx >= 0 ? idx : idx + this.length]\n },\n toArray: function(){ return this.get() },\n size: function(){\n return this.length\n },\n remove: function(){\n return this.each(function(){\n if (this.parentNode != null)\n this.parentNode.removeChild(this)\n })\n },\n each: function(callback){\n emptyArray.every.call(this, function(el, idx){\n return callback.call(el, idx, el) !== false\n })\n return this\n },\n filter: function(selector){\n if (isFunction(selector)) return this.not(this.not(selector))\n return $(filter.call(this, function(element){\n return zepto.matches(element, selector)\n }))\n },\n add: function(selector,context){\n return $(uniq(this.concat($(selector,context))))\n },\n is: function(selector){\n return this.length > 0 && zepto.matches(this[0], selector)\n },\n not: function(selector){\n var nodes=[]\n if (isFunction(selector) && selector.call !== undefined)\n this.each(function(idx){\n if (!selector.call(this,idx)) nodes.push(this)\n })\n else {\n var excludes = typeof selector == 'string' ? this.filter(selector) :\n (likeArray(selector) && isFunction(selector.item)) ? slice.call(selector) : $(selector)\n this.forEach(function(el){\n if (excludes.indexOf(el) < 0) nodes.push(el)\n })\n }\n return $(nodes)\n },\n has: function(selector){\n return this.filter(function(){\n return isObject(selector) ?\n $.contains(this, selector) :\n $(this).find(selector).size()\n })\n },\n eq: function(idx){\n return idx === -1 ? this.slice(idx) : this.slice(idx, + idx + 1)\n },\n first: function(){\n var el = this[0]\n return el && !isObject(el) ? el : $(el)\n },\n last: function(){\n var el = this[this.length - 1]\n return el && !isObject(el) ? el : $(el)\n },\n find: function(selector){\n var result, $this = this\n if (!selector) result = $()\n else if (typeof selector == 'object')\n result = $(selector).filter(function(){\n var node = this\n return emptyArray.some.call($this, function(parent){\n return $.contains(parent, node)\n })\n })\n else if (this.length == 1) result = $(zepto.qsa(this[0], selector))\n else result = this.map(function(){ return zepto.qsa(this, selector) })\n return result\n },\n closest: function(selector, context){\n var nodes = [], collection = typeof selector == 'object' && $(selector)\n this.each(function(_, node){\n while (node && !(collection ? collection.indexOf(node) >= 0 : zepto.matches(node, selector)))\n node = node !== context && !isDocument(node) && node.parentNode\n if (node && nodes.indexOf(node) < 0) nodes.push(node)\n })\n return $(nodes)\n },\n parents: function(selector){\n var ancestors = [], nodes = this\n while (nodes.length > 0)\n nodes = $.map(nodes, function(node){\n if ((node = node.parentNode) && !isDocument(node) && ancestors.indexOf(node) < 0) {\n ancestors.push(node)\n return node\n }\n })\n return filtered(ancestors, selector)\n },\n parent: function(selector){\n return filtered(uniq(this.pluck('parentNode')), selector)\n },\n children: function(selector){\n return filtered(this.map(function(){ return children(this) }), selector)\n },\n contents: function() {\n return this.map(function() { return this.contentDocument || slice.call(this.childNodes) })\n },\n siblings: function(selector){\n return filtered(this.map(function(i, el){\n return filter.call(children(el.parentNode), function(child){ return child!==el })\n }), selector)\n },\n empty: function(){\n return this.each(function(){ this.innerHTML = '' })\n },\n // `pluck` is borrowed from Prototype.js\n pluck: function(property){\n return $.map(this, function(el){ return el[property] })\n },\n show: function(){\n return this.each(function(){\n this.style.display == \"none\" && (this.style.display = '')\n if (getComputedStyle(this, '').getPropertyValue(\"display\") == \"none\")\n this.style.display = defaultDisplay(this.nodeName)\n })\n },\n replaceWith: function(newContent){\n return this.before(newContent).remove()\n },\n wrap: function(structure){\n var func = isFunction(structure)\n if (this[0] && !func)\n var dom = $(structure).get(0),\n clone = dom.parentNode || this.length > 1\n\n return this.each(function(index){\n $(this).wrapAll(\n func ? structure.call(this, index) :\n clone ? dom.cloneNode(true) : dom\n )\n })\n },\n wrapAll: function(structure){\n if (this[0]) {\n $(this[0]).before(structure = $(structure))\n var children\n // drill down to the inmost element\n while ((children = structure.children()).length) structure = children.first()\n $(structure).append(this)\n }\n return this\n },\n wrapInner: function(structure){\n var func = isFunction(structure)\n return this.each(function(index){\n var self = $(this), contents = self.contents(),\n dom = func ? structure.call(this, index) : structure\n contents.length ? contents.wrapAll(dom) : self.append(dom)\n })\n },\n unwrap: function(){\n this.parent().each(function(){\n $(this).replaceWith($(this).children())\n })\n return this\n },\n clone: function(){\n return this.map(function(){ return this.cloneNode(true) })\n },\n hide: function(){\n return this.css(\"display\", \"none\")\n },\n toggle: function(setting){\n return this.each(function(){\n var el = $(this)\n ;(setting === undefined ? el.css(\"display\") == \"none\" : setting) ? el.show() : el.hide()\n })\n },\n prev: function(selector){ return $(this.pluck('previousElementSibling')).filter(selector || '*') },\n next: function(selector){ return $(this.pluck('nextElementSibling')).filter(selector || '*') },\n html: function(html){\n return 0 in arguments ?\n this.each(function(idx){\n var originHtml = this.innerHTML\n $(this).empty().append( funcArg(this, html, idx, originHtml) )\n }) :\n (0 in this ? this[0].innerHTML : null)\n },\n text: function(text){\n return 0 in arguments ?\n this.each(function(idx){\n var newText = funcArg(this, text, idx, this.textContent)\n this.textContent = newText == null ? '' : ''+newText\n }) :\n (0 in this ? this.pluck('textContent').join(\"\") : null)\n },\n attr: function(name, value){\n var result\n return (typeof name == 'string' && !(1 in arguments)) ?\n (0 in this && this[0].nodeType == 1 && (result = this[0].getAttribute(name)) != null ? result : undefined) :\n this.each(function(idx){\n if (this.nodeType !== 1) return\n if (isObject(name)) for (key in name) setAttribute(this, key, name[key])\n else setAttribute(this, name, funcArg(this, value, idx, this.getAttribute(name)))\n })\n },\n removeAttr: function(name){\n return this.each(function(){ this.nodeType === 1 && name.split(' ').forEach(function(attribute){\n setAttribute(this, attribute)\n }, this)})\n },\n prop: function(name, value){\n name = propMap[name] || name\n return (1 in arguments) ?\n this.each(function(idx){\n this[name] = funcArg(this, value, idx, this[name])\n }) :\n (this[0] && this[0][name])\n },\n removeProp: function(name){\n name = propMap[name] || name\n return this.each(function(){ delete this[name] })\n },\n data: function(name, value){\n var attrName = 'data-' + name.replace(capitalRE, '-$1').toLowerCase()\n\n var data = (1 in arguments) ?\n this.attr(attrName, value) :\n this.attr(attrName)\n\n return data !== null ? deserializeValue(data) : undefined\n },\n val: function(value){\n if (0 in arguments) {\n if (value == null) value = \"\"\n return this.each(function(idx){\n this.value = funcArg(this, value, idx, this.value)\n })\n } else {\n return this[0] && (this[0].multiple ?\n $(this[0]).find('option').filter(function(){ return this.selected }).pluck('value') :\n this[0].value)\n }\n },\n offset: function(coordinates){\n if (coordinates) return this.each(function(index){\n var $this = $(this),\n coords = funcArg(this, coordinates, index, $this.offset()),\n parentOffset = $this.offsetParent().offset(),\n props = {\n top: coords.top - parentOffset.top,\n left: coords.left - parentOffset.left\n }\n\n if ($this.css('position') == 'static') props['position'] = 'relative'\n $this.css(props)\n })\n if (!this.length) return null\n if (document.documentElement !== this[0] && !$.contains(document.documentElement, this[0]))\n return {top: 0, left: 0}\n var obj = this[0].getBoundingClientRect()\n return {\n left: obj.left + window.pageXOffset,\n top: obj.top + window.pageYOffset,\n width: Math.round(obj.width),\n height: Math.round(obj.height)\n }\n },\n css: function(property, value){\n if (arguments.length < 2) {\n var element = this[0]\n if (typeof property == 'string') {\n if (!element) return\n return element.style[camelize(property)] || getComputedStyle(element, '').getPropertyValue(property)\n } else if (isArray(property)) {\n if (!element) return\n var props = {}\n var computedStyle = getComputedStyle(element, '')\n $.each(property, function(_, prop){\n props[prop] = (element.style[camelize(prop)] || computedStyle.getPropertyValue(prop))\n })\n return props\n }\n }\n\n var css = ''\n if (type(property) == 'string') {\n if (!value && value !== 0)\n this.each(function(){ this.style.removeProperty(dasherize(property)) })\n else\n css = dasherize(property) + \":\" + maybeAddPx(property, value)\n } else {\n for (key in property)\n if (!property[key] && property[key] !== 0)\n this.each(function(){ this.style.removeProperty(dasherize(key)) })\n else\n css += dasherize(key) + ':' + maybeAddPx(key, property[key]) + ';'\n }\n\n return this.each(function(){ this.style.cssText += ';' + css })\n },\n index: function(element){\n return element ? this.indexOf($(element)[0]) : this.parent().children().indexOf(this[0])\n },\n hasClass: function(name){\n if (!name) return false\n return emptyArray.some.call(this, function(el){\n return this.test(className(el))\n }, classRE(name))\n },\n addClass: function(name){\n if (!name) return this\n return this.each(function(idx){\n if (!('className' in this)) return\n classList = []\n var cls = className(this), newName = funcArg(this, name, idx, cls)\n newName.split(/\\s+/g).forEach(function(klass){\n if (!$(this).hasClass(klass)) classList.push(klass)\n }, this)\n classList.length && className(this, cls + (cls ? \" \" : \"\") + classList.join(\" \"))\n })\n },\n removeClass: function(name){\n return this.each(function(idx){\n if (!('className' in this)) return\n if (name === undefined) return className(this, '')\n classList = className(this)\n funcArg(this, name, idx, classList).split(/\\s+/g).forEach(function(klass){\n classList = classList.replace(classRE(klass), \" \")\n })\n className(this, classList.trim())\n })\n },\n toggleClass: function(name, when){\n if (!name) return this\n return this.each(function(idx){\n var $this = $(this), names = funcArg(this, name, idx, className(this))\n names.split(/\\s+/g).forEach(function(klass){\n (when === undefined ? !$this.hasClass(klass) : when) ?\n $this.addClass(klass) : $this.removeClass(klass)\n })\n })\n },\n scrollTop: function(value){\n if (!this.length) return\n var hasScrollTop = 'scrollTop' in this[0]\n if (value === undefined) return hasScrollTop ? this[0].scrollTop : this[0].pageYOffset\n return this.each(hasScrollTop ?\n function(){ this.scrollTop = value } :\n function(){ this.scrollTo(this.scrollX, value) })\n },\n scrollLeft: function(value){\n if (!this.length) return\n var hasScrollLeft = 'scrollLeft' in this[0]\n if (value === undefined) return hasScrollLeft ? this[0].scrollLeft : this[0].pageXOffset\n return this.each(hasScrollLeft ?\n function(){ this.scrollLeft = value } :\n function(){ this.scrollTo(value, this.scrollY) })\n },\n position: function() {\n if (!this.length) return\n\n var elem = this[0],\n // Get *real* offsetParent\n offsetParent = this.offsetParent(),\n // Get correct offsets\n offset = this.offset(),\n parentOffset = rootNodeRE.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset()\n\n // Subtract element margins\n // note: when an element has margin: auto the offsetLeft and marginLeft\n // are the same in Safari causing offset.left to incorrectly be 0\n offset.top -= parseFloat( $(elem).css('margin-top') ) || 0\n offset.left -= parseFloat( $(elem).css('margin-left') ) || 0\n\n // Add offsetParent borders\n parentOffset.top += parseFloat( $(offsetParent[0]).css('border-top-width') ) || 0\n parentOffset.left += parseFloat( $(offsetParent[0]).css('border-left-width') ) || 0\n\n // Subtract the two offsets\n return {\n top: offset.top - parentOffset.top,\n left: offset.left - parentOffset.left\n }\n },\n offsetParent: function() {\n return this.map(function(){\n var parent = this.offsetParent || document.body\n while (parent && !rootNodeRE.test(parent.nodeName) && $(parent).css(\"position\") == \"static\")\n parent = parent.offsetParent\n return parent\n })\n }\n }\n\n // for now\n $.fn.detach = $.fn.remove\n\n // Generate the `width` and `height` functions\n ;['width', 'height'].forEach(function(dimension){\n var dimensionProperty =\n dimension.replace(/./, function(m){ return m[0].toUpperCase() })\n\n $.fn[dimension] = function(value){\n var offset, el = this[0]\n if (value === undefined) return isWindow(el) ? el['inner' + dimensionProperty] :\n isDocument(el) ? el.documentElement['scroll' + dimensionProperty] :\n (offset = this.offset()) && offset[dimension]\n else return this.each(function(idx){\n el = $(this)\n el.css(dimension, funcArg(this, value, idx, el[dimension]()))\n })\n }\n })\n\n function traverseNode(node, fun) {\n fun(node)\n for (var i = 0, len = node.childNodes.length; i < len; i++)\n traverseNode(node.childNodes[i], fun)\n }\n\n // Generate the `after`, `prepend`, `before`, `append`,\n // `insertAfter`, `insertBefore`, `appendTo`, and `prependTo` methods.\n adjacencyOperators.forEach(function(operator, operatorIndex) {\n var inside = operatorIndex % 2 //=> prepend, append\n\n $.fn[operator] = function(){\n // arguments can be nodes, arrays of nodes, Zepto objects and HTML strings\n var argType, nodes = $.map(arguments, function(arg) {\n var arr = []\n argType = type(arg)\n if (argType == \"array\") {\n arg.forEach(function(el) {\n if (el.nodeType !== undefined) return arr.push(el)\n else if ($.zepto.isZ(el)) return arr = arr.concat(el.get())\n arr = arr.concat(zepto.fragment(el))\n })\n return arr\n }\n return argType == \"object\" || arg == null ?\n arg : zepto.fragment(arg)\n }),\n parent, copyByClone = this.length > 1\n if (nodes.length < 1) return this\n\n return this.each(function(_, target){\n parent = inside ? target : target.parentNode\n\n // convert all methods to a \"before\" operation\n target = operatorIndex == 0 ? target.nextSibling :\n operatorIndex == 1 ? target.firstChild :\n operatorIndex == 2 ? target :\n null\n\n var parentInDocument = $.contains(document.documentElement, parent)\n\n nodes.forEach(function(node){\n if (copyByClone) node = node.cloneNode(true)\n else if (!parent) return $(node).remove()\n\n parent.insertBefore(node, target)\n if (parentInDocument) traverseNode(node, function(el){\n if (el.nodeName != null && el.nodeName.toUpperCase() === 'SCRIPT' &&\n (!el.type || el.type === 'text/javascript') && !el.src){\n var target = el.ownerDocument ? el.ownerDocument.defaultView : window\n target['eval'].call(target, el.innerHTML)\n }\n })\n })\n })\n }\n\n // after => insertAfter\n // prepend => prependTo\n // before => insertBefore\n // append => appendTo\n $.fn[inside ? operator+'To' : 'insert'+(operatorIndex ? 'Before' : 'After')] = function(html){\n $(html)[operator](this)\n return this\n }\n })\n\n zepto.Z.prototype = Z.prototype = $.fn\n\n // Export internal API functions in the `$.zepto` namespace\n zepto.uniq = uniq\n zepto.deserializeValue = deserializeValue\n $.zepto = zepto\n\n return $\n})()\n\nwindow.Zepto = Zepto\nwindow.$ === undefined && (window.$ = Zepto)\n\n;(function($){\n var _zid = 1, undefined,\n slice = Array.prototype.slice,\n isFunction = $.isFunction,\n isString = function(obj){ return typeof obj == 'string' },\n handlers = {},\n specialEvents={},\n focusinSupported = 'onfocusin' in window,\n focus = { focus: 'focusin', blur: 'focusout' },\n hover = { mouseenter: 'mouseover', mouseleave: 'mouseout' }\n\n specialEvents.click = specialEvents.mousedown = specialEvents.mouseup = specialEvents.mousemove = 'MouseEvents'\n\n function zid(element) {\n return element._zid || (element._zid = _zid++)\n }\n function findHandlers(element, event, fn, selector) {\n event = parse(event)\n if (event.ns) var matcher = matcherFor(event.ns)\n return (handlers[zid(element)] || []).filter(function(handler) {\n return handler\n && (!event.e || handler.e == event.e)\n && (!event.ns || matcher.test(handler.ns))\n && (!fn || zid(handler.fn) === zid(fn))\n && (!selector || handler.sel == selector)\n })\n }\n function parse(event) {\n var parts = ('' + event).split('.')\n return {e: parts[0], ns: parts.slice(1).sort().join(' ')}\n }\n function matcherFor(ns) {\n return new RegExp('(?:^| )' + ns.replace(' ', ' .* ?') + '(?: |$)')\n }\n\n function eventCapture(handler, captureSetting) {\n return handler.del &&\n (!focusinSupported && (handler.e in focus)) ||\n !!captureSetting\n }\n\n function realEvent(type) {\n return hover[type] || (focusinSupported && focus[type]) || type\n }\n\n function add(element, events, fn, data, selector, delegator, capture){\n var id = zid(element), set = (handlers[id] || (handlers[id] = []))\n events.split(/\\s/).forEach(function(event){\n if (event == 'ready') return $(document).ready(fn)\n var handler = parse(event)\n handler.fn = fn\n handler.sel = selector\n // emulate mouseenter, mouseleave\n if (handler.e in hover) fn = function(e){\n var related = e.relatedTarget\n if (!related || (related !== this && !$.contains(this, related)))\n return handler.fn.apply(this, arguments)\n }\n handler.del = delegator\n var callback = delegator || fn\n handler.proxy = function(e){\n e = compatible(e)\n if (e.isImmediatePropagationStopped()) return\n e.data = data\n var result = callback.apply(element, e._args == undefined ? [e] : [e].concat(e._args))\n if (result === false) e.preventDefault(), e.stopPropagation()\n return result\n }\n handler.i = set.length\n set.push(handler)\n if ('addEventListener' in element)\n element.addEventListener(realEvent(handler.e), handler.proxy, eventCapture(handler, capture))\n })\n }\n function remove(element, events, fn, selector, capture){\n var id = zid(element)\n ;(events || '').split(/\\s/).forEach(function(event){\n findHandlers(element, event, fn, selector).forEach(function(handler){\n delete handlers[id][handler.i]\n if ('removeEventListener' in element)\n element.removeEventListener(realEvent(handler.e), handler.proxy, eventCapture(handler, capture))\n })\n })\n }\n\n $.event = { add: add, remove: remove }\n\n $.proxy = function(fn, context) {\n var args = (2 in arguments) && slice.call(arguments, 2)\n if (isFunction(fn)) {\n var proxyFn = function(){ return fn.apply(context, args ? args.concat(slice.call(arguments)) : arguments) }\n proxyFn._zid = zid(fn)\n return proxyFn\n } else if (isString(context)) {\n if (args) {\n args.unshift(fn[context], fn)\n return $.proxy.apply(null, args)\n } else {\n return $.proxy(fn[context], fn)\n }\n } else {\n throw new TypeError(\"expected function\")\n }\n }\n\n $.fn.bind = function(event, data, callback){\n return this.on(event, data, callback)\n }\n $.fn.unbind = function(event, callback){\n return this.off(event, callback)\n }\n $.fn.one = function(event, selector, data, callback){\n return this.on(event, selector, data, callback, 1)\n }\n\n var returnTrue = function(){return true},\n returnFalse = function(){return false},\n ignoreProperties = /^([A-Z]|returnValue$|layer[XY]$|webkitMovement[XY]$)/,\n eventMethods = {\n preventDefault: 'isDefaultPrevented',\n stopImmediatePropagation: 'isImmediatePropagationStopped',\n stopPropagation: 'isPropagationStopped'\n }\n\n function compatible(event, source) {\n if (source || !event.isDefaultPrevented) {\n source || (source = event)\n\n $.each(eventMethods, function(name, predicate) {\n var sourceMethod = source[name]\n event[name] = function(){\n this[predicate] = returnTrue\n return sourceMethod && sourceMethod.apply(source, arguments)\n }\n event[predicate] = returnFalse\n })\n\n event.timeStamp || (event.timeStamp = Date.now())\n\n if (source.defaultPrevented !== undefined ? source.defaultPrevented :\n 'returnValue' in source ? source.returnValue === false :\n source.getPreventDefault && source.getPreventDefault())\n event.isDefaultPrevented = returnTrue\n }\n return event\n }\n\n function createProxy(event) {\n var key, proxy = { originalEvent: event }\n for (key in event)\n if (!ignoreProperties.test(key) && event[key] !== undefined) proxy[key] = event[key]\n\n return compatible(proxy, event)\n }\n\n $.fn.delegate = function(selector, event, callback){\n return this.on(event, selector, callback)\n }\n $.fn.undelegate = function(selector, event, callback){\n return this.off(event, selector, callback)\n }\n\n $.fn.live = function(event, callback){\n $(document.body).delegate(this.selector, event, callback)\n return this\n }\n $.fn.die = function(event, callback){\n $(document.body).undelegate(this.selector, event, callback)\n return this\n }\n\n $.fn.on = function(event, selector, data, callback, one){\n var autoRemove, delegator, $this = this\n if (event && !isString(event)) {\n $.each(event, function(type, fn){\n $this.on(type, selector, data, fn, one)\n })\n return $this\n }\n\n if (!isString(selector) && !isFunction(callback) && callback !== false)\n callback = data, data = selector, selector = undefined\n if (callback === undefined || data === false)\n callback = data, data = undefined\n\n if (callback === false) callback = returnFalse\n\n return $this.each(function(_, element){\n if (one) autoRemove = function(e){\n remove(element, e.type, callback)\n return callback.apply(this, arguments)\n }\n\n if (selector) delegator = function(e){\n var evt, match = $(e.target).closest(selector, element).get(0)\n if (match && match !== element) {\n evt = $.extend(createProxy(e), {currentTarget: match, liveFired: element})\n return (autoRemove || callback).apply(match, [evt].concat(slice.call(arguments, 1)))\n }\n }\n\n add(element, event, callback, data, selector, delegator || autoRemove)\n })\n }\n $.fn.off = function(event, selector, callback){\n var $this = this\n if (event && !isString(event)) {\n $.each(event, function(type, fn){\n $this.off(type, selector, fn)\n })\n return $this\n }\n\n if (!isString(selector) && !isFunction(callback) && callback !== false)\n callback = selector, selector = undefined\n\n if (callback === false) callback = returnFalse\n\n return $this.each(function(){\n remove(this, event, callback, selector)\n })\n }\n\n $.fn.trigger = function(event, args){\n event = (isString(event) || $.isPlainObject(event)) ? $.Event(event) : compatible(event)\n event._args = args\n return this.each(function(){\n // handle focus(), blur() by calling them directly\n if (event.type in focus && typeof this[event.type] == \"function\") this[event.type]()\n // items in the collection might not be DOM elements\n else if ('dispatchEvent' in this) this.dispatchEvent(event)\n else $(this).triggerHandler(event, args)\n })\n }\n\n // triggers event handlers on current element just as if an event occurred,\n // doesn't trigger an actual event, doesn't bubble\n $.fn.triggerHandler = function(event, args){\n var e, result\n this.each(function(i, element){\n e = createProxy(isString(event) ? $.Event(event) : event)\n e._args = args\n e.target = element\n $.each(findHandlers(element, event.type || event), function(i, handler){\n result = handler.proxy(e)\n if (e.isImmediatePropagationStopped()) return false\n })\n })\n return result\n }\n\n // shortcut methods for `.bind(event, fn)` for each event type\n ;('focusin focusout focus blur load resize scroll unload click dblclick '+\n 'mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave '+\n 'change select keydown keypress keyup error').split(' ').forEach(function(event) {\n $.fn[event] = function(callback) {\n return (0 in arguments) ?\n this.bind(event, callback) :\n this.trigger(event)\n }\n })\n\n $.Event = function(type, props) {\n if (!isString(type)) props = type, type = props.type\n var event = document.createEvent(specialEvents[type] || 'Events'), bubbles = true\n if (props) for (var name in props) (name == 'bubbles') ? (bubbles = !!props[name]) : (event[name] = props[name])\n event.initEvent(type, bubbles, true)\n return compatible(event)\n }\n\n})(Zepto)\n\n;(function($){\n var jsonpID = +new Date(),\n document = window.document,\n key,\n name,\n rscript = /)<[^<]*)*<\\/script>/gi,\n scriptTypeRE = /^(?:text|application)\\/javascript/i,\n xmlTypeRE = /^(?:text|application)\\/xml/i,\n jsonType = 'application/json',\n htmlType = 'text/html',\n blankRE = /^\\s*$/,\n originAnchor = document.createElement('a')\n\n originAnchor.href = window.location.href\n\n // trigger a custom event and return false if it was cancelled\n function triggerAndReturn(context, eventName, data) {\n var event = $.Event(eventName)\n $(context).trigger(event, data)\n return !event.isDefaultPrevented()\n }\n\n // trigger an Ajax \"global\" event\n function triggerGlobal(settings, context, eventName, data) {\n if (settings.global) return triggerAndReturn(context || document, eventName, data)\n }\n\n // Number of active Ajax requests\n $.active = 0\n\n function ajaxStart(settings) {\n if (settings.global && $.active++ === 0) triggerGlobal(settings, null, 'ajaxStart')\n }\n function ajaxStop(settings) {\n if (settings.global && !(--$.active)) triggerGlobal(settings, null, 'ajaxStop')\n }\n\n // triggers an extra global event \"ajaxBeforeSend\" that's like \"ajaxSend\" but cancelable\n function ajaxBeforeSend(xhr, settings) {\n var context = settings.context\n if (settings.beforeSend.call(context, xhr, settings) === false ||\n triggerGlobal(settings, context, 'ajaxBeforeSend', [xhr, settings]) === false)\n return false\n\n triggerGlobal(settings, context, 'ajaxSend', [xhr, settings])\n }\n function ajaxSuccess(data, xhr, settings, deferred) {\n var context = settings.context, status = 'success'\n settings.success.call(context, data, status, xhr)\n if (deferred) deferred.resolveWith(context, [data, status, xhr])\n triggerGlobal(settings, context, 'ajaxSuccess', [xhr, settings, data])\n ajaxComplete(status, xhr, settings)\n }\n // type: \"timeout\", \"error\", \"abort\", \"parsererror\"\n function ajaxError(error, type, xhr, settings, deferred) {\n var context = settings.context\n settings.error.call(context, xhr, type, error)\n if (deferred) deferred.rejectWith(context, [xhr, type, error])\n triggerGlobal(settings, context, 'ajaxError', [xhr, settings, error || type])\n ajaxComplete(type, xhr, settings)\n }\n // status: \"success\", \"notmodified\", \"error\", \"timeout\", \"abort\", \"parsererror\"\n function ajaxComplete(status, xhr, settings) {\n var context = settings.context\n settings.complete.call(context, xhr, status)\n triggerGlobal(settings, context, 'ajaxComplete', [xhr, settings])\n ajaxStop(settings)\n }\n\n function ajaxDataFilter(data, type, settings) {\n if (settings.dataFilter == empty) return data\n var context = settings.context\n return settings.dataFilter.call(context, data, type)\n }\n\n // Empty function, used as default callback\n function empty() {}\n\n $.ajaxJSONP = function(options, deferred){\n if (!('type' in options)) return $.ajax(options)\n\n var _callbackName = options.jsonpCallback,\n callbackName = ($.isFunction(_callbackName) ?\n _callbackName() : _callbackName) || ('Zepto' + (jsonpID++)),\n script = document.createElement('script'),\n originalCallback = window[callbackName],\n responseData,\n abort = function(errorType) {\n $(script).triggerHandler('error', errorType || 'abort')\n },\n xhr = { abort: abort }, abortTimeout\n\n if (deferred) deferred.promise(xhr)\n\n $(script).on('load error', function(e, errorType){\n clearTimeout(abortTimeout)\n $(script).off().remove()\n\n if (e.type == 'error' || !responseData) {\n ajaxError(null, errorType || 'error', xhr, options, deferred)\n } else {\n ajaxSuccess(responseData[0], xhr, options, deferred)\n }\n\n window[callbackName] = originalCallback\n if (responseData && $.isFunction(originalCallback))\n originalCallback(responseData[0])\n\n originalCallback = responseData = undefined\n })\n\n if (ajaxBeforeSend(xhr, options) === false) {\n abort('abort')\n return xhr\n }\n\n window[callbackName] = function(){\n responseData = arguments\n }\n\n script.src = options.url.replace(/\\?(.+)=\\?/, '?$1=' + callbackName)\n document.head.appendChild(script)\n\n if (options.timeout > 0) abortTimeout = setTimeout(function(){\n abort('timeout')\n }, options.timeout)\n\n return xhr\n }\n\n $.ajaxSettings = {\n // Default type of request\n type: 'GET',\n // Callback that is executed before request\n beforeSend: empty,\n // Callback that is executed if the request succeeds\n success: empty,\n // Callback that is executed the the server drops error\n error: empty,\n // Callback that is executed on request complete (both: error and success)\n complete: empty,\n // The context for the callbacks\n context: null,\n // Whether to trigger \"global\" Ajax events\n global: true,\n // Transport\n xhr: function () {\n return new window.XMLHttpRequest()\n },\n // MIME types mapping\n // IIS returns Javascript as \"application/x-javascript\"\n accepts: {\n script: 'text/javascript, application/javascript, application/x-javascript',\n json: jsonType,\n xml: 'application/xml, text/xml',\n html: htmlType,\n text: 'text/plain'\n },\n // Whether the request is to another domain\n crossDomain: false,\n // Default timeout\n timeout: 0,\n // Whether data should be serialized to string\n processData: true,\n // Whether the browser should be allowed to cache GET responses\n cache: true,\n //Used to handle the raw response data of XMLHttpRequest.\n //This is a pre-filtering function to sanitize the response.\n //The sanitized response should be returned\n dataFilter: empty\n }\n\n function mimeToDataType(mime) {\n if (mime) mime = mime.split(';', 2)[0]\n return mime && ( mime == htmlType ? 'html' :\n mime == jsonType ? 'json' :\n scriptTypeRE.test(mime) ? 'script' :\n xmlTypeRE.test(mime) && 'xml' ) || 'text'\n }\n\n function appendQuery(url, query) {\n if (query == '') return url\n return (url + '&' + query).replace(/[&?]{1,2}/, '?')\n }\n\n // serialize payload and append it to the URL for GET requests\n function serializeData(options) {\n if (options.processData && options.data && $.type(options.data) != \"string\")\n options.data = $.param(options.data, options.traditional)\n if (options.data && (!options.type || options.type.toUpperCase() == 'GET' || 'jsonp' == options.dataType))\n options.url = appendQuery(options.url, options.data), options.data = undefined\n }\n\n $.ajax = function(options){\n var settings = $.extend({}, options || {}),\n deferred = $.Deferred && $.Deferred(),\n urlAnchor, hashIndex\n for (key in $.ajaxSettings) if (settings[key] === undefined) settings[key] = $.ajaxSettings[key]\n\n ajaxStart(settings)\n\n if (!settings.crossDomain) {\n urlAnchor = document.createElement('a')\n urlAnchor.href = settings.url\n // cleans up URL for .href (IE only), see https://github.com/madrobby/zepto/pull/1049\n urlAnchor.href = urlAnchor.href\n settings.crossDomain = (originAnchor.protocol + '//' + originAnchor.host) !== (urlAnchor.protocol + '//' + urlAnchor.host)\n }\n\n if (!settings.url) settings.url = window.location.toString()\n if ((hashIndex = settings.url.indexOf('#')) > -1) settings.url = settings.url.slice(0, hashIndex)\n serializeData(settings)\n\n var dataType = settings.dataType, hasPlaceholder = /\\?.+=\\?/.test(settings.url)\n if (hasPlaceholder) dataType = 'jsonp'\n\n if (settings.cache === false || (\n (!options || options.cache !== true) &&\n ('script' == dataType || 'jsonp' == dataType)\n ))\n settings.url = appendQuery(settings.url, '_=' + Date.now())\n\n if ('jsonp' == dataType) {\n if (!hasPlaceholder)\n settings.url = appendQuery(settings.url,\n settings.jsonp ? (settings.jsonp + '=?') : settings.jsonp === false ? '' : 'callback=?')\n return $.ajaxJSONP(settings, deferred)\n }\n\n var mime = settings.accepts[dataType],\n headers = { },\n setHeader = function(name, value) { headers[name.toLowerCase()] = [name, value] },\n protocol = /^([\\w-]+:)\\/\\//.test(settings.url) ? RegExp.$1 : window.location.protocol,\n xhr = settings.xhr(),\n nativeSetHeader = xhr.setRequestHeader,\n abortTimeout\n\n if (deferred) deferred.promise(xhr)\n\n if (!settings.crossDomain) setHeader('X-Requested-With', 'XMLHttpRequest')\n setHeader('Accept', mime || '*/*')\n if (mime = settings.mimeType || mime) {\n if (mime.indexOf(',') > -1) mime = mime.split(',', 2)[0]\n xhr.overrideMimeType && xhr.overrideMimeType(mime)\n }\n if (settings.contentType || (settings.contentType !== false && settings.data && settings.type.toUpperCase() != 'GET'))\n setHeader('Content-Type', settings.contentType || 'application/x-www-form-urlencoded')\n\n if (settings.headers) for (name in settings.headers) setHeader(name, settings.headers[name])\n xhr.setRequestHeader = setHeader\n\n xhr.onreadystatechange = function(){\n if (xhr.readyState == 4) {\n xhr.onreadystatechange = empty\n clearTimeout(abortTimeout)\n var result, error = false\n if ((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304 || (xhr.status == 0 && protocol == 'file:')) {\n dataType = dataType || mimeToDataType(settings.mimeType || xhr.getResponseHeader('content-type'))\n\n if (xhr.responseType == 'arraybuffer' || xhr.responseType == 'blob')\n result = xhr.response\n else {\n result = xhr.responseText\n\n try {\n // http://perfectionkills.com/global-eval-what-are-the-options/\n // sanitize response accordingly if data filter callback provided\n result = ajaxDataFilter(result, dataType, settings)\n if (dataType == 'script') (1,eval)(result)\n else if (dataType == 'xml') result = xhr.responseXML\n else if (dataType == 'json') result = blankRE.test(result) ? null : $.parseJSON(result)\n } catch (e) { error = e }\n\n if (error) return ajaxError(error, 'parsererror', xhr, settings, deferred)\n }\n\n ajaxSuccess(result, xhr, settings, deferred)\n } else {\n ajaxError(xhr.statusText || null, xhr.status ? 'error' : 'abort', xhr, settings, deferred)\n }\n }\n }\n\n if (ajaxBeforeSend(xhr, settings) === false) {\n xhr.abort()\n ajaxError(null, 'abort', xhr, settings, deferred)\n return xhr\n }\n\n var async = 'async' in settings ? settings.async : true\n xhr.open(settings.type, settings.url, async, settings.username, settings.password)\n\n if (settings.xhrFields) for (name in settings.xhrFields) xhr[name] = settings.xhrFields[name]\n\n for (name in headers) nativeSetHeader.apply(xhr, headers[name])\n\n if (settings.timeout > 0) abortTimeout = setTimeout(function(){\n xhr.onreadystatechange = empty\n xhr.abort()\n ajaxError(null, 'timeout', xhr, settings, deferred)\n }, settings.timeout)\n\n // avoid sending empty string (#319)\n xhr.send(settings.data ? settings.data : null)\n return xhr\n }\n\n // handle optional data/success arguments\n function parseArguments(url, data, success, dataType) {\n if ($.isFunction(data)) dataType = success, success = data, data = undefined\n if (!$.isFunction(success)) dataType = success, success = undefined\n return {\n url: url\n , data: data\n , success: success\n , dataType: dataType\n }\n }\n\n $.get = function(/* url, data, success, dataType */){\n return $.ajax(parseArguments.apply(null, arguments))\n }\n\n $.post = function(/* url, data, success, dataType */){\n var options = parseArguments.apply(null, arguments)\n options.type = 'POST'\n return $.ajax(options)\n }\n\n $.getJSON = function(/* url, data, success */){\n var options = parseArguments.apply(null, arguments)\n options.dataType = 'json'\n return $.ajax(options)\n }\n\n $.fn.load = function(url, data, success){\n if (!this.length) return this\n var self = this, parts = url.split(/\\s/), selector,\n options = parseArguments(url, data, success),\n callback = options.success\n if (parts.length > 1) options.url = parts[0], selector = parts[1]\n options.success = function(response){\n self.html(selector ?\n $('
    ').html(response.replace(rscript, \"\")).find(selector)\n : response)\n callback && callback.apply(self, arguments)\n }\n $.ajax(options)\n return this\n }\n\n var escape = encodeURIComponent\n\n function serialize(params, obj, traditional, scope){\n var type, array = $.isArray(obj), hash = $.isPlainObject(obj)\n $.each(obj, function(key, value) {\n type = $.type(value)\n if (scope) key = traditional ? scope :\n scope + '[' + (hash || type == 'object' || type == 'array' ? key : '') + ']'\n // handle data in serializeArray() format\n if (!scope && array) params.add(value.name, value.value)\n // recurse into nested objects\n else if (type == \"array\" || (!traditional && type == \"object\"))\n serialize(params, value, traditional, key)\n else params.add(key, value)\n })\n }\n\n $.param = function(obj, traditional){\n var params = []\n params.add = function(key, value) {\n if ($.isFunction(value)) value = value()\n if (value == null) value = \"\"\n this.push(escape(key) + '=' + escape(value))\n }\n serialize(params, obj, traditional)\n return params.join('&').replace(/%20/g, '+')\n }\n})(Zepto)\n\n;(function($){\n $.fn.serializeArray = function() {\n var name, type, result = [],\n add = function(value) {\n if (value.forEach) return value.forEach(add)\n result.push({ name: name, value: value })\n }\n if (this[0]) $.each(this[0].elements, function(_, field){\n type = field.type, name = field.name\n if (name && field.nodeName.toLowerCase() != 'fieldset' &&\n !field.disabled && type != 'submit' && type != 'reset' && type != 'button' && type != 'file' &&\n ((type != 'radio' && type != 'checkbox') || field.checked))\n add($(field).val())\n })\n return result\n }\n\n $.fn.serialize = function(){\n var result = []\n this.serializeArray().forEach(function(elm){\n result.push(encodeURIComponent(elm.name) + '=' + encodeURIComponent(elm.value))\n })\n return result.join('&')\n }\n\n $.fn.submit = function(callback) {\n if (0 in arguments) this.bind('submit', callback)\n else if (this.length) {\n var event = $.Event('submit')\n this.eq(0).trigger(event)\n if (!event.isDefaultPrevented()) this.get(0).submit()\n }\n return this\n }\n\n})(Zepto)\n\n;(function(){\n // getComputedStyle shouldn't freak out when called\n // without a valid element as argument\n try {\n getComputedStyle(undefined)\n } catch(e) {\n var nativeGetComputedStyle = getComputedStyle\n window.getComputedStyle = function(element, pseudoElement){\n try {\n return nativeGetComputedStyle(element, pseudoElement)\n } catch(e) {\n return null\n }\n }\n }\n})()\n return Zepto\n}))\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/lib/zepto.js\n **/","var cache = {};\n\nexport default function mTpl(str, data, startSelector, endSelector, isCache) {\n var t = this,\n d = data,\n el = document.getElementById(str),\n tpl = el ? el.innerHTML : str,\n isCache = isCache != undefined ? isCache : true,\n valueArr = [],\n fn = function() {},\n htmlEncode = function(s, n) {\n if (!n) {\n s = s.replace(/>/g, '>')\n .replace(/';\n }\n if (!(tpl.indexOf(a) > -1 && tpl.indexOf(b) > -1)) {\n return tpl\n }\n\n var formatTpl = function(str, isError) {\n var N = isError ? '\\n' : '';\n r = isError ? '' : r;\n n = isError ? '' : n;\n\n var eb = (function(s) {\n return s.replace(/([.*+?^=!:${}()|[\\]\\/\\\\])/g, '\\\\$1')\n })(b),\n reg = new RegExp(l + '(?:(?!' + eb + ')[\\\\s\\\\S])*' + eb + '|(\\'+)', 'g');\n\n return tpl\n .replace(/)[\\s\\S])*-->/g, function(l) {\n var i = mTpl_comment.length++;\n mTpl_comment[i] = l;\n return 'mTpl_comment' + i + ';';\n })\n .split('\\\\').join('\\\\\\\\')\n .replace(/[\\r]/g, r)\n .replace(/[\\n]/g, n)\n .split(a).join(l)\n .replace(reg, function(l, $1) {\n return $1 ? new Array($1.length + 1).join('\\r') : l\n })\n .replace(new RegExp(l + '=(.*?)' + b, 'g'), \"';\" + N + \" s+=mTpl_htmlEncode(String($1));\" + N + \" s+='\")\n .replace(new RegExp(l + '\\!=(.*?)' + b, 'g'), \"';\" + N + \" s+=mTpl_htmlEncode(String($1),true);\" + N + \" s+='\")\n .split(l).join(\"';\" + N)\n .split(b).join(N + ' s+=\\'')\n .split('\\r').join('\\\\\\'');\n };\n\n var p, propArr = [];\n for (p in d) {\n propArr.push(p);\n valueArr.push(d[p]);\n }\n\n fn = compileFn(propArr, formatTpl(str));\n isCache && (cache[str] = {\n parsefn: fn,\n propList: propArr\n });\n }\n\n var s;\n\n try {\n s = fn.apply(t, valueArr);\n } catch (e) {\n fn = compileFn(propArr, formatTpl(str, true));\n s = fn.apply(t, valueArr);\n }\n\n return recoverChar(s);\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/lib/render.js\n **/","import $ from './zepto.js';\n\n/**\n* Bind an event to an object instead of a DOM Node\n```\n$.bind(this,'event',function(){});\n```\n* @param {Object} object\n* @param {String} event name\n* @param {Function} function to execute\n* @title $.bind(object,event,function);\n*/\n$.bind = function(obj, ev, f){\n if(!obj.__events) obj.__events = {};\n if(!$.isArray(ev)) ev = [ev];\n for(var i=0; i
    /> \\\">

    <%= curInfo.title %><%= curInfo.author %>

    • 00:00
    • 00:00
    • \\\">
      <% for (var i = 0; i < data.length; i++) { %> <% var idx = i + 1; %> <% var item = data[i]; %>
    • <% if (i === 0) { %> class=cur <% } %>> <%= idx %> <%= item.title %> <%= item.author %>
    • <% } %>
    \";\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/audio.html\n ** module id = 12\n ** module chunks = 0\n **/","module.exports = \"
  • \\\"> <%= idx %> <%= title %> <%= author %>
  • \";\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/list.html\n ** module id = 13\n ** module chunks = 0\n **/"],"sourceRoot":""} \ No newline at end of file diff --git a/doc/player.png b/doc/player.png new file mode 100644 index 0000000000000000000000000000000000000000..c8cb6ec07c800be6308d6a9bd3ebbcb94d296bbd GIT binary patch literal 162752 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 ||@Edl*n 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

    }mNm2m^@4#3XiPQReZ2S5xr>7WhO~bjYCX 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 b@<_$0E9yL_shnQQNg*_t92z+( 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 J(%X-N{tqIxJPQB- literal 0 HcmV?d00001 diff --git a/doc/qrcode.png b/doc/qrcode.png new file mode 100644 index 0000000000000000000000000000000000000000..ab981b3eae6c3ea5ef64ed21fe60714871e28163 GIT binary patch literal 18387 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 { - me.totalTime.html(me.formatSeconds(audio.duration)); - }, false); - - audio.addEventListener('progress', (event) => { - let loadedPercent = audio.buffered.length ? - audio.buffered.end(audio.buffered.length - 1) / audio.duration : 0; - - me.loadedBar.css('width', loadedPercent * 100 + '%'); - - $.trigger(this, 'playing', [{ - song: me.data[this.playIdx], - loadedPercent: loadedPercent - }]); - }, false); - - audio.addEventListener('ended', (event) => { - switch(this.loopType) { - case 'order': - this.nextPlay(); - break; - case 'single': - this.switchPlay(this.playIdx); - break; - case 'none': - this.togglePlay(); - break; - default: - break; - } - - $.trigger(this, 'ended', [{ - song: me.data[this.playIdx] - }]); - }, false); + audio.addEventListener('durationchange', $.proxy(this._durationchangeCb, this), false); + audio.addEventListener('progress', $.proxy(this._progressCb, this), false); + audio.addEventListener('ended', $.proxy(this._endedCb, this), false); $(window).on('resize', $.proxy(this._setPlaybarPos, this)); $(window).on('orientationchange', $.proxy(this._setPlaybarPos, this)); @@ -233,6 +201,46 @@ class AudioPlayer { this.nextBtn.on('click', $.proxy(this.nextPlay, this)); } + _durationchangeCb() { + this.totalTime.html(this.formatSeconds(this.audio.duration)); + } + + _progressCb(event) { + let me = this, + config = this.config, + audio = this.audio; + + let loadedPercent = audio.buffered.length ? + audio.buffered.end(audio.buffered.length - 1) / audio.duration : 0; + + this.loadedBar.css('width', loadedPercent * 100 + '%'); + + $.trigger(this, 'playing', [{ + song: this.data[this.playIdx], + loadedPercent: loadedPercent + }]); + } + + _endedCb(event) { + switch(this.loopType) { + case 'order': + this.nextPlay(); + break; + case 'single': + this.switchPlay(this.playIdx); + break; + case 'none': + this.togglePlay(); + break; + default: + break; + } + + $.trigger(this, 'ended', [{ + song: this.data[this.playIdx] + }]); + } + prePlay() { let idx = this.playIdx - 1; if (idx < 0) {