├── LICENSE
├── test.html
├── Zepto.SliderLock.min.js
├── README.md
├── Zepto.SliderLock.js
└── zepto.min.js
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2015 Rijn Bian
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
23 |
--------------------------------------------------------------------------------
/test.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Zepto.SliderLock.js
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
60 |
61 |
62 |
63 |
--------------------------------------------------------------------------------
/Zepto.SliderLock.min.js:
--------------------------------------------------------------------------------
1 | (function(k,p,q,u){function n(a){var c=a.option,d=c.color,b=c.secondaryColor,e=c.radius,f=c.containerHeight,g=c.containerWidth,h=c.barWidth,c=c.barMargin;a.holder.html('').children(".zepto-sliderlock").css({width:(g||0)+"px",height:(f||0)+"px",background:d||"#ffffff","border-radius":(e||0)+"px",position:"relative"}).children(".zepto-sliderlock-bar").css({height:f-2*c+"px",width:(h||0)+"px",background:b||"#ffffff","border-radius":(e||
2 | 0)+"px",margin:(c||0)+"px",position:"absolute"});a.bar=a.holder.find(".zepto-sliderlock-bar").first()}function m(){}function h(a,c){var d=this,b=d.token=Math.random(),b=g[b]=new m,e=b.holder=k(a);0!=e.length&&(b.object=d,c=b.option=k.extend({},h.defaults,c),n(b),"static"==e.css("position")&&e.css("position","relative"),b.option.init=(c.init||l)(),b.option.arrival=c.arrival||l,b.option.succeed=c.succeed||l,b.option.failed=c.failed||l,e.on("touchstart mousedown",function(a){r.call(this,a,d)}))}var l=
3 | function(){},g={},r=function(a,c){a.preventDefault();var d=g[c.token];if(!d.disabled){var b="touchstart"==a.type?"touchmove":"mousemove",e="touchstart"==a.type?"touchend":"mouseup";d.startPoint(a.pageX||a.touches[0].pageX);k(this).on(b+".bar-move",function(a){t.call(this,a,c)});k(q).one(e,function(){a.preventDefault();var b=g[c.token],d=b.option,e=d.containerWidth-d.barMargin-d.barWidth,h=b.getDistance().distance;b.holder.off(".bar-move");e-hd.triggerDistance&&b.option.failed()})}},t=function(a,c){a.preventDefault();var d=g[c.token],b=d.option,e=b.containerWidth-b.barMargin-b.barWidth,f=d.refreshDistance(a.pageX||a.touches[0].pageX).distance;!d.disabled&&f&&(f=f
13 |
14 | ```
15 |
16 | Than with simple initialization you have your slider lock.
17 |
18 | ```
19 | var sliderlock = new SliderLock("#sliderContainer");
20 | ```
21 |
22 | ## Settings and Defaults
23 |
24 | ```
25 | defaults = {
26 | color: '#dfdfdf',
27 | secondaryColor: '#64bd63',
28 | radius: 10,
29 | containerHeight: 40,
30 | containerWidth: 200,
31 | barWidth: 50,
32 | barMargin: 3,
33 | triggerDistance: 30,
34 | magnet: true
35 | };
36 | ```
37 |
38 | * `color`: color of the container.
39 | * `secondaryColor`: color of the slider bar.
40 | * `radius`: radius of the container and the bar.
41 | * `containerHeight`: the height of the container.
42 | * `containerWidth`: the width of the container.
43 | * `barWidth`: the width of the slider bar.
44 | * `barMargin`: margin of the slider bar. (barHeight + barMargin * 2 == containerHeight)
45 | * `triggerDistance`: if the distance is close to the arrival, it will return true.
46 | * `magnet`: the bar will attach to the arrival if the option is true.
47 |
48 | ## Methods
49 |
50 | ### enable && disable
51 |
52 | Use the method to make your slider lock active or inactive.
53 |
54 | ```
55 | sliderlock.enable();
56 | sliderlock.disable();
57 | ```
58 |
59 | ### lock
60 | Lock the slider lock will make the bar locked and ignore drag event until next touch.
61 |
62 | ```
63 | var sliderlock = new SliderLock("#sliderContainer", {
64 | arrival: function() {
65 | sliderlock.lock();
66 | }
67 | });
68 | ```
69 |
70 | ### reset
71 | Reset the slider lock will make the bar go back.
72 |
73 | ```
74 | sliderlock.reset();
75 | ```
76 |
77 | ## Subscribe
78 |
79 | After subscribing, the function will be called when the event happens.
80 |
81 | ### init
82 |
83 | The function will be called when the DOM be ready.
84 |
85 | ```
86 | var sliderlock = new SliderLock("#sliderContainer", {
87 | init: function() {
88 | console.log("DOM is ready, do something...");
89 | },
90 | });
91 | ```
92 |
93 | ### arrival
94 |
95 | The function will be called when the bar firstly be dragged to the arrival.
96 |
97 | ```
98 | var sliderlock = new SliderLock("#sliderContainer", {
99 | arrival: function() {
100 | console.log("The bar was dragged to the arrival firstly.");
101 | },
102 | });
103 | ```
104 |
105 | ### succeed
106 |
107 | The function will be called when the bar be released at the arrival.
108 |
109 | ```
110 | var sliderlock = new SliderLock("#sliderContainer", {
111 | succeed: function() {
112 | console.log("do something...");
113 | },
114 | });
115 | ```
116 |
117 | ### failed
118 |
119 | The function will be called when the bar be released at the rest of the container.
120 |
121 | ```
122 | var sliderlock = new SliderLock("#sliderContainer", {
123 | failed: function() {
124 | console.log("failed...");
125 | },
126 | });
127 | ```
128 |
129 | ## Copyright && License
130 |
131 | Code and documentation copyright 2015 Rijn, pixelnfinite.com. Code released under the MIT license.
132 |
133 |
--------------------------------------------------------------------------------
/Zepto.SliderLock.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Zepto.SliderLock.js
3 | * @author Rijn
4 | * @link [https://github.com/rijn/Zepto.SliderLock.js]
5 | */
6 |
7 | ;
8 | (function($, window, document, undefined) {
9 | "use strict";
10 |
11 | var nullFunc = function() {},
12 | objectHolder = {};
13 |
14 | /* insert dom */
15 | function readyDom(iObj) {
16 | var holder = iObj.holder,
17 | option = iObj.option,
18 | color = option.color,
19 | secondaryColor = option.secondaryColor,
20 | radius = option.radius,
21 | containerHeight = option.containerHeight,
22 | containerWidth = option.containerWidth,
23 | barWidth = option.barWidth,
24 | barMargin = option.barMargin,
25 | html = '';
26 |
27 | holder.html(html).children('.zepto-sliderlock').css({
28 | 'width': (containerWidth || 0) + 'px',
29 | 'height': (containerHeight || 0) + 'px',
30 | 'background': (color || "#ffffff"),
31 | 'border-radius': (radius || 0) + 'px',
32 | 'position': 'relative'
33 | }).children('.zepto-sliderlock-bar').css({
34 | 'height': (containerHeight - barMargin * 2) + 'px',
35 | 'width': (barWidth || 0) + 'px',
36 | 'background': (secondaryColor || "#ffffff"),
37 | 'border-radius': (radius || 0) + 'px',
38 | 'margin': (barMargin || 0) + 'px',
39 | 'position': 'absolute'
40 | });
41 |
42 | iObj.bar = iObj.holder.find('.zepto-sliderlock-bar').first();
43 |
44 | return;
45 | }
46 |
47 |
48 | var startHandler = function(e, obj) {
49 | e.preventDefault();
50 | var iObj = objectHolder[obj.token];
51 |
52 | if (iObj.disabled) return;
53 |
54 | var touchMove = e.type == "touchstart" ? "touchmove" : "mousemove",
55 | touchEnd = e.type == "touchstart" ? "touchend" : "mouseup";
56 |
57 | iObj.startPoint(e.pageX || e.touches[0].pageX);
58 |
59 | //assign events
60 | $(this).on(touchMove + '.bar-move', function(e) {
61 | moveHandler.call(this, e, obj);
62 | });
63 | $(document).one(touchEnd, function() {
64 | endHandler.call(this, e, obj);
65 | });
66 | },
67 | moveHandler = function(e, obj) {
68 |
69 | e.preventDefault();
70 |
71 | var x = e.pageX || e.touches[0].pageX,
72 | iObj = objectHolder[obj.token],
73 | option = iObj.option,
74 | maxDistance = option.containerWidth - option.barMargin - option.barWidth,
75 | posObj = iObj.refreshDistance(x),
76 | distance = posObj.distance;
77 |
78 | if (!iObj.disabled) {
79 | if (distance) {
80 | distance = distance < option.barMargin ? option.barMargin : distance;
81 | distance = distance < maxDistance ? distance : maxDistance;
82 |
83 | if (!!option.magnet) {
84 | if (maxDistance - distance < option.triggerDistance) {
85 | distance = maxDistance;
86 | };
87 | };
88 |
89 | iObj.bar.css({
90 | 'margin-left': distance + "px"
91 | });
92 |
93 |
94 | if (!!option.magnet) {
95 | if (maxDistance - distance < option.triggerDistance) {
96 | iObj.disabled = true;
97 | iObj.option.arrival();
98 | setTimeout(
99 | function() {
100 | iObj.disabled = false;
101 | },
102 | 0
103 | );
104 | };
105 | };
106 | };
107 | };
108 |
109 | },
110 | endHandler = function(e, obj) {
111 | e.preventDefault();
112 | var x = e.pageX || e.touches[0].pageX,
113 | iObj = objectHolder[obj.token],
114 | option = iObj.option,
115 | maxDistance = option.containerWidth - option.barMargin - option.barWidth,
116 | posObj = iObj.getDistance(),
117 | distance = posObj.distance;
118 |
119 | iObj.holder.off('.bar-move');
120 |
121 | if (maxDistance - distance < option.triggerDistance) {
122 | iObj.option.succeed();
123 | };
124 |
125 | iObj.bar.css({
126 | "margin-left": option.barMargin + "px"
127 | });
128 |
129 | if (maxDistance - distance > option.triggerDistance) {
130 | iObj.option.failed();
131 | };
132 | };
133 |
134 | /* Slider class */
135 | function Slider() {}
136 |
137 | Slider.prototype = {
138 | constructor: Slider,
139 | startPoint: function(x) {
140 | this.start = x;
141 | },
142 | refreshDistance: function(x) {
143 | var option = this.option,
144 | distance = x - this.start;
145 | this.distance = distance;
146 | return {
147 | distance: distance
148 | };
149 | },
150 | getDistance: function() {
151 | return {
152 | distance: this.distance
153 | };
154 | }
155 | };
156 |
157 | function SliderLock(selector, option) {
158 | var self = this,
159 | token = self.token = Math.random(),
160 | iObj = objectHolder[token] = new Slider(),
161 | holder = iObj.holder = $(selector);
162 |
163 | //if holder is not present return
164 | if (holder.length == 0) return;
165 |
166 | iObj.object = self;
167 | option = iObj.option = $.extend({}, SliderLock.defaults, option);
168 |
169 | readyDom(iObj);
170 |
171 | //change offset property of holder if it does not have any property
172 | if (holder.css('position') == "static") holder.css('position', 'relative');
173 |
174 | iObj.option.init = (option.init || nullFunc)();
175 | iObj.option.arrival = option.arrival || nullFunc;
176 | iObj.option.succeed = option.succeed || nullFunc;
177 | iObj.option.failed = option.failed || nullFunc;
178 |
179 | //assign event
180 | holder.on("touchstart mousedown", function(e) {
181 | startHandler.call(this, e, self);
182 | });
183 | };
184 |
185 | SliderLock.prototype = {
186 | constructor: SliderLock,
187 | //method to set options after initializtion
188 | option: function(key, val) {
189 | var iObj = objectHolder[this.token],
190 | option = iObj.option;
191 | //for set methods
192 | if (!val) {
193 | return option[key];
194 | }
195 | //for setter
196 | else {
197 | option[key] = val;
198 | if (key == "margin" || key == "matrix" || key == "radius") {
199 | readyDom(iObj);
200 | }
201 | }
202 | },
203 | enable: function() {
204 | var iObj = objectHolder[this.token];
205 | iObj.disabled = false;
206 | },
207 | disable: function() {
208 | var iObj = objectHolder[this.token];
209 | iObj.disabled = true;
210 | },
211 | lock: function() {
212 | var iObj = objectHolder[this.token];
213 | iObj.holder.off('.bar-move');
214 | },
215 | reset: function() {
216 | var iObj = objectHolder[this.token];
217 | iObj.holder.off('.bar-move');
218 |
219 | iObj.bar.css({
220 | "margin-left": iObj.option.barMargin + "px"
221 | });
222 | }
223 | };
224 |
225 | SliderLock.defaults = {
226 | color: '#dfdfdf',
227 | secondaryColor: '#64bd63',
228 | radius: 10,
229 | containerHeight: 40,
230 | containerWidth: 200,
231 | barWidth: 50,
232 | barMargin: 3,
233 | triggerDistance: 30,
234 | magnet: true
235 | };
236 |
237 | window.SliderLock = SliderLock;
238 |
239 | })(Zepto, window, document);
240 |
--------------------------------------------------------------------------------
/zepto.min.js:
--------------------------------------------------------------------------------
1 | /* Zepto v1.1.6 - zepto event ajax form ie - zeptojs.com/license */
2 | var Zepto=function(){function L(t){return null==t?String(t):j[S.call(t)]||"object"}function Z(t){return"function"==L(t)}function _(t){return null!=t&&t==t.window}function $(t){return null!=t&&t.nodeType==t.DOCUMENT_NODE}function D(t){return"object"==L(t)}function M(t){return D(t)&&!_(t)&&Object.getPrototypeOf(t)==Object.prototype}function R(t){return"number"==typeof t.length}function k(t){return s.call(t,function(t){return null!=t})}function z(t){return t.length>0?n.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 q(t){return t in f?f[t]:f[t]=new RegExp("(^|\\s)"+t+"(\\s|$)")}function H(t,e){return"number"!=typeof e||c[F(t)]?e:e+"px"}function I(t){var e,n;return u[t]||(e=a.createElement(t),a.body.appendChild(e),n=getComputedStyle(e,"").getPropertyValue("display"),e.parentNode.removeChild(e),"none"==n&&(n="block"),u[t]=n),u[t]}function V(t){return"children"in t?o.call(t.children):n.map(t.childNodes,function(t){return 1==t.nodeType?t:void 0})}function B(n,i,r){for(e in i)r&&(M(i[e])||A(i[e]))?(M(i[e])&&!M(n[e])&&(n[e]={}),A(i[e])&&!A(n[e])&&(n[e]=[]),B(n[e],i[e],r)):i[e]!==t&&(n[e]=i[e])}function U(t,e){return null==e?n(t):n(t).filter(e)}function J(t,e,n,i){return Z(e)?e.call(t,n,i):e}function X(t,e,n){null==n?t.removeAttribute(e):t.setAttribute(e,n)}function W(e,n){var i=e.className||"",r=i&&i.baseVal!==t;return n===t?r?i.baseVal:i:void(r?i.baseVal=n:e.className=n)}function Y(t){try{return t?"true"==t||("false"==t?!1:"null"==t?null:+t+""==t?+t:/^[\[\{]/.test(t)?n.parseJSON(t):t):t}catch(e){return t}}function G(t,e){e(t);for(var n=0,i=t.childNodes.length;i>n;n++)G(t.childNodes[n],e)}var t,e,n,i,C,N,r=[],o=r.slice,s=r.filter,a=window.document,u={},f={},c={"column-count":1,columns:1,"font-weight":1,"line-height":1,opacity:1,"z-index":1,zoom:1},l=/^\s*<(\w+|!)[^>]*>/,h=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,p=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,d=/^(?:body|html)$/i,m=/([A-Z])/g,g=["val","css","html","text","data","width","height","offset"],v=["after","prepend","before","append"],y=a.createElement("table"),x=a.createElement("tr"),b={tr:a.createElement("tbody"),tbody:y,thead:y,tfoot:y,td:x,th:x,"*":a.createElement("div")},w=/complete|loaded|interactive/,E=/^[\w-]*$/,j={},S=j.toString,T={},O=a.createElement("div"),P={tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},A=Array.isArray||function(t){return t instanceof Array};return T.matches=function(t,e){if(!e||!t||1!==t.nodeType)return!1;var n=t.webkitMatchesSelector||t.mozMatchesSelector||t.oMatchesSelector||t.matchesSelector;if(n)return n.call(t,e);var i,r=t.parentNode,o=!r;return o&&(r=O).appendChild(t),i=~T.qsa(r,e).indexOf(t),o&&O.removeChild(t),i},C=function(t){return t.replace(/-+(.)?/g,function(t,e){return e?e.toUpperCase():""})},N=function(t){return s.call(t,function(e,n){return t.indexOf(e)==n})},T.fragment=function(e,i,r){var s,u,f;return h.test(e)&&(s=n(a.createElement(RegExp.$1))),s||(e.replace&&(e=e.replace(p,"<$1>$2>")),i===t&&(i=l.test(e)&&RegExp.$1),i in b||(i="*"),f=b[i],f.innerHTML=""+e,s=n.each(o.call(f.childNodes),function(){f.removeChild(this)})),M(r)&&(u=n(s),n.each(r,function(t,e){g.indexOf(t)>-1?u[t](e):u.attr(t,e)})),s},T.Z=function(t,e){return t=t||[],t.__proto__=n.fn,t.selector=e||"",t},T.isZ=function(t){return t instanceof T.Z},T.init=function(e,i){var r;if(!e)return T.Z();if("string"==typeof e)if(e=e.trim(),"<"==e[0]&&l.test(e))r=T.fragment(e,RegExp.$1,i),e=null;else{if(i!==t)return n(i).find(e);r=T.qsa(a,e)}else{if(Z(e))return n(a).ready(e);if(T.isZ(e))return e;if(A(e))r=k(e);else if(D(e))r=[e],e=null;else if(l.test(e))r=T.fragment(e.trim(),RegExp.$1,i),e=null;else{if(i!==t)return n(i).find(e);r=T.qsa(a,e)}}return T.Z(r,e)},n=function(t,e){return T.init(t,e)},n.extend=function(t){var e,n=o.call(arguments,1);return"boolean"==typeof t&&(e=t,t=n.shift()),n.forEach(function(n){B(t,n,e)}),t},T.qsa=function(t,e){var n,i="#"==e[0],r=!i&&"."==e[0],s=i||r?e.slice(1):e,a=E.test(s);return $(t)&&a&&i?(n=t.getElementById(s))?[n]:[]:1!==t.nodeType&&9!==t.nodeType?[]:o.call(a&&!i?r?t.getElementsByClassName(s):t.getElementsByTagName(e):t.querySelectorAll(e))},n.contains=a.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},n.type=L,n.isFunction=Z,n.isWindow=_,n.isArray=A,n.isPlainObject=M,n.isEmptyObject=function(t){var e;for(e in t)return!1;return!0},n.inArray=function(t,e,n){return r.indexOf.call(e,t,n)},n.camelCase=C,n.trim=function(t){return null==t?"":String.prototype.trim.call(t)},n.uuid=0,n.support={},n.expr={},n.map=function(t,e){var n,r,o,i=[];if(R(t))for(r=0;r=0?e:e+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 r.every.call(this,function(e,n){return t.call(e,n,e)!==!1}),this},filter:function(t){return Z(t)?this.not(this.not(t)):n(s.call(this,function(e){return T.matches(e,t)}))},add:function(t,e){return n(N(this.concat(n(t,e))))},is:function(t){return this.length>0&&T.matches(this[0],t)},not:function(e){var i=[];if(Z(e)&&e.call!==t)this.each(function(t){e.call(this,t)||i.push(this)});else{var r="string"==typeof e?this.filter(e):R(e)&&Z(e.item)?o.call(e):n(e);this.forEach(function(t){r.indexOf(t)<0&&i.push(t)})}return n(i)},has:function(t){return this.filter(function(){return D(t)?n.contains(this,t):n(this).find(t).size()})},eq:function(t){return-1===t?this.slice(t):this.slice(t,+t+1)},first:function(){var t=this[0];return t&&!D(t)?t:n(t)},last:function(){var t=this[this.length-1];return t&&!D(t)?t:n(t)},find:function(t){var e,i=this;return e=t?"object"==typeof t?n(t).filter(function(){var t=this;return r.some.call(i,function(e){return n.contains(e,t)})}):1==this.length?n(T.qsa(this[0],t)):this.map(function(){return T.qsa(this,t)}):n()},closest:function(t,e){var i=this[0],r=!1;for("object"==typeof t&&(r=n(t));i&&!(r?r.indexOf(i)>=0:T.matches(i,t));)i=i!==e&&!$(i)&&i.parentNode;return n(i)},parents:function(t){for(var e=[],i=this;i.length>0;)i=n.map(i,function(t){return(t=t.parentNode)&&!$(t)&&e.indexOf(t)<0?(e.push(t),t):void 0});return U(e,t)},parent:function(t){return U(N(this.pluck("parentNode")),t)},children:function(t){return U(this.map(function(){return V(this)}),t)},contents:function(){return this.map(function(){return o.call(this.childNodes)})},siblings:function(t){return U(this.map(function(t,e){return s.call(V(e.parentNode),function(t){return t!==e})}),t)},empty:function(){return this.each(function(){this.innerHTML=""})},pluck:function(t){return n.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=I(this.nodeName))})},replaceWith:function(t){return this.before(t).remove()},wrap:function(t){var e=Z(t);if(this[0]&&!e)var i=n(t).get(0),r=i.parentNode||this.length>1;return this.each(function(o){n(this).wrapAll(e?t.call(this,o):r?i.cloneNode(!0):i)})},wrapAll:function(t){if(this[0]){n(this[0]).before(t=n(t));for(var e;(e=t.children()).length;)t=e.first();n(t).append(this)}return this},wrapInner:function(t){var e=Z(t);return this.each(function(i){var r=n(this),o=r.contents(),s=e?t.call(this,i):t;o.length?o.wrapAll(s):r.append(s)})},unwrap:function(){return this.parent().each(function(){n(this).replaceWith(n(this).children())}),this},clone:function(){return this.map(function(){return this.cloneNode(!0)})},hide:function(){return this.css("display","none")},toggle:function(e){return this.each(function(){var i=n(this);(e===t?"none"==i.css("display"):e)?i.show():i.hide()})},prev:function(t){return n(this.pluck("previousElementSibling")).filter(t||"*")},next:function(t){return n(this.pluck("nextElementSibling")).filter(t||"*")},html:function(t){return 0 in arguments?this.each(function(e){var i=this.innerHTML;n(this).empty().append(J(this,t,e,i))}):0 in this?this[0].innerHTML:null},text:function(t){return 0 in arguments?this.each(function(e){var n=J(this,t,e,this.textContent);this.textContent=null==n?"":""+n}):0 in this?this[0].textContent:null},attr:function(n,i){var r;return"string"!=typeof n||1 in arguments?this.each(function(t){if(1===this.nodeType)if(D(n))for(e in n)X(this,e,n[e]);else X(this,n,J(this,i,t,this.getAttribute(n)))}):this.length&&1===this[0].nodeType?!(r=this[0].getAttribute(n))&&n in this[0]?this[0][n]:r:t},removeAttr:function(t){return this.each(function(){1===this.nodeType&&t.split(" ").forEach(function(t){X(this,t)},this)})},prop:function(t,e){return t=P[t]||t,1 in arguments?this.each(function(n){this[t]=J(this,e,n,this[t])}):this[0]&&this[0][t]},data:function(e,n){var i="data-"+e.replace(m,"-$1").toLowerCase(),r=1 in arguments?this.attr(i,n):this.attr(i);return null!==r?Y(r):t},val:function(t){return 0 in arguments?this.each(function(e){this.value=J(this,t,e,this.value)}):this[0]&&(this[0].multiple?n(this[0]).find("option").filter(function(){return this.selected}).pluck("value"):this[0].value)},offset:function(t){if(t)return this.each(function(e){var i=n(this),r=J(this,t,e,i.offset()),o=i.offsetParent().offset(),s={top:r.top-o.top,left:r.left-o.left};"static"==i.css("position")&&(s.position="relative"),i.css(s)});if(!this.length)return null;var e=this[0].getBoundingClientRect();return{left:e.left+window.pageXOffset,top:e.top+window.pageYOffset,width:Math.round(e.width),height:Math.round(e.height)}},css:function(t,i){if(arguments.length<2){var r,o=this[0];if(!o)return;if(r=getComputedStyle(o,""),"string"==typeof t)return o.style[C(t)]||r.getPropertyValue(t);if(A(t)){var s={};return n.each(t,function(t,e){s[e]=o.style[C(e)]||r.getPropertyValue(e)}),s}}var a="";if("string"==L(t))i||0===i?a=F(t)+":"+H(t,i):this.each(function(){this.style.removeProperty(F(t))});else for(e in t)t[e]||0===t[e]?a+=F(e)+":"+H(e,t[e])+";":this.each(function(){this.style.removeProperty(F(e))});return this.each(function(){this.style.cssText+=";"+a})},index:function(t){return t?this.indexOf(n(t)[0]):this.parent().children().indexOf(this[0])},hasClass:function(t){return t?r.some.call(this,function(t){return this.test(W(t))},q(t)):!1},addClass:function(t){return t?this.each(function(e){if("className"in this){i=[];var r=W(this),o=J(this,t,e,r);o.split(/\s+/g).forEach(function(t){n(this).hasClass(t)||i.push(t)},this),i.length&&W(this,r+(r?" ":"")+i.join(" "))}}):this},removeClass:function(e){return this.each(function(n){if("className"in this){if(e===t)return W(this,"");i=W(this),J(this,e,n,i).split(/\s+/g).forEach(function(t){i=i.replace(q(t)," ")}),W(this,i.trim())}})},toggleClass:function(e,i){return e?this.each(function(r){var o=n(this),s=J(this,e,r,W(this));s.split(/\s+/g).forEach(function(e){(i===t?!o.hasClass(e):i)?o.addClass(e):o.removeClass(e)})}):this},scrollTop:function(e){if(this.length){var n="scrollTop"in this[0];return e===t?n?this[0].scrollTop:this[0].pageYOffset:this.each(n?function(){this.scrollTop=e}:function(){this.scrollTo(this.scrollX,e)})}},scrollLeft:function(e){if(this.length){var n="scrollLeft"in this[0];return e===t?n?this[0].scrollLeft:this[0].pageXOffset:this.each(n?function(){this.scrollLeft=e}:function(){this.scrollTo(e,this.scrollY)})}},position:function(){if(this.length){var t=this[0],e=this.offsetParent(),i=this.offset(),r=d.test(e[0].nodeName)?{top:0,left:0}:e.offset();return i.top-=parseFloat(n(t).css("margin-top"))||0,i.left-=parseFloat(n(t).css("margin-left"))||0,r.top+=parseFloat(n(e[0]).css("border-top-width"))||0,r.left+=parseFloat(n(e[0]).css("border-left-width"))||0,{top:i.top-r.top,left:i.left-r.left}}},offsetParent:function(){return this.map(function(){for(var t=this.offsetParent||a.body;t&&!d.test(t.nodeName)&&"static"==n(t).css("position");)t=t.offsetParent;return t})}},n.fn.detach=n.fn.remove,["width","height"].forEach(function(e){var i=e.replace(/./,function(t){return t[0].toUpperCase()});n.fn[e]=function(r){var o,s=this[0];return r===t?_(s)?s["inner"+i]:$(s)?s.documentElement["scroll"+i]:(o=this.offset())&&o[e]:this.each(function(t){s=n(this),s.css(e,J(this,r,t,s[e]()))})}}),v.forEach(function(t,e){var i=e%2;n.fn[t]=function(){var t,o,r=n.map(arguments,function(e){return t=L(e),"object"==t||"array"==t||null==e?e:T.fragment(e)}),s=this.length>1;return r.length<1?this:this.each(function(t,u){o=i?u:u.parentNode,u=0==e?u.nextSibling:1==e?u.firstChild:2==e?u:null;var f=n.contains(a.documentElement,o);r.forEach(function(t){if(s)t=t.cloneNode(!0);else if(!o)return n(t).remove();o.insertBefore(t,u),f&&G(t,function(t){null==t.nodeName||"SCRIPT"!==t.nodeName.toUpperCase()||t.type&&"text/javascript"!==t.type||t.src||window.eval.call(window,t.innerHTML)})})})},n.fn[i?t+"To":"insert"+(e?"Before":"After")]=function(e){return n(e)[t](this),this}}),T.Z.prototype=n.fn,T.uniq=N,T.deserializeValue=Y,n.zepto=T,n}();window.Zepto=Zepto,void 0===window.$&&(window.$=Zepto),function(t){function l(t){return t._zid||(t._zid=e++)}function h(t,e,n,i){if(e=p(e),e.ns)var r=d(e.ns);return(s[l(t)]||[]).filter(function(t){return!(!t||e.e&&t.e!=e.e||e.ns&&!r.test(t.ns)||n&&l(t.fn)!==l(n)||i&&t.sel!=i)})}function p(t){var e=(""+t).split(".");return{e:e[0],ns:e.slice(1).sort().join(" ")}}function d(t){return new RegExp("(?:^| )"+t.replace(" "," .* ?")+"(?: |$)")}function m(t,e){return t.del&&!u&&t.e in f||!!e}function g(t){return c[t]||u&&f[t]||t}function v(e,i,r,o,a,u,f){var h=l(e),d=s[h]||(s[h]=[]);i.split(/\s/).forEach(function(i){if("ready"==i)return t(document).ready(r);var s=p(i);s.fn=r,s.sel=a,s.e in c&&(r=function(e){var n=e.relatedTarget;return!n||n!==this&&!t.contains(this,n)?s.fn.apply(this,arguments):void 0}),s.del=u;var l=u||r;s.proxy=function(t){if(t=j(t),!t.isImmediatePropagationStopped()){t.data=o;var i=l.apply(e,t._args==n?[t]:[t].concat(t._args));return i===!1&&(t.preventDefault(),t.stopPropagation()),i}},s.i=d.length,d.push(s),"addEventListener"in e&&e.addEventListener(g(s.e),s.proxy,m(s,f))})}function y(t,e,n,i,r){var o=l(t);(e||"").split(/\s/).forEach(function(e){h(t,e,n,i).forEach(function(e){delete s[o][e.i],"removeEventListener"in t&&t.removeEventListener(g(e.e),e.proxy,m(e,r))})})}function j(e,i){return(i||!e.isDefaultPrevented)&&(i||(i=e),t.each(E,function(t,n){var r=i[t];e[t]=function(){return this[n]=x,r&&r.apply(i,arguments)},e[n]=b}),(i.defaultPrevented!==n?i.defaultPrevented:"returnValue"in i?i.returnValue===!1:i.getPreventDefault&&i.getPreventDefault())&&(e.isDefaultPrevented=x)),e}function S(t){var e,i={originalEvent:t};for(e in t)w.test(e)||t[e]===n||(i[e]=t[e]);return j(i,t)}var n,e=1,i=Array.prototype.slice,r=t.isFunction,o=function(t){return"string"==typeof t},s={},a={},u="onfocusin"in window,f={focus:"focusin",blur:"focusout"},c={mouseenter:"mouseover",mouseleave:"mouseout"};a.click=a.mousedown=a.mouseup=a.mousemove="MouseEvents",t.event={add:v,remove:y},t.proxy=function(e,n){var s=2 in arguments&&i.call(arguments,2);if(r(e)){var a=function(){return e.apply(n,s?s.concat(i.call(arguments)):arguments)};return a._zid=l(e),a}if(o(n))return s?(s.unshift(e[n],e),t.proxy.apply(null,s)):t.proxy(e[n],e);throw new TypeError("expected function")},t.fn.bind=function(t,e,n){return this.on(t,e,n)},t.fn.unbind=function(t,e){return this.off(t,e)},t.fn.one=function(t,e,n,i){return this.on(t,e,n,i,1)};var x=function(){return!0},b=function(){return!1},w=/^([A-Z]|returnValue$|layer[XY]$)/,E={preventDefault:"isDefaultPrevented",stopImmediatePropagation:"isImmediatePropagationStopped",stopPropagation:"isPropagationStopped"};t.fn.delegate=function(t,e,n){return this.on(e,t,n)},t.fn.undelegate=function(t,e,n){return this.off(e,t,n)},t.fn.live=function(e,n){return t(document.body).delegate(this.selector,e,n),this},t.fn.die=function(e,n){return t(document.body).undelegate(this.selector,e,n),this},t.fn.on=function(e,s,a,u,f){var c,l,h=this;return e&&!o(e)?(t.each(e,function(t,e){h.on(t,s,a,e,f)}),h):(o(s)||r(u)||u===!1||(u=a,a=s,s=n),(r(a)||a===!1)&&(u=a,a=n),u===!1&&(u=b),h.each(function(n,r){f&&(c=function(t){return y(r,t.type,u),u.apply(this,arguments)}),s&&(l=function(e){var n,o=t(e.target).closest(s,r).get(0);return o&&o!==r?(n=t.extend(S(e),{currentTarget:o,liveFired:r}),(c||u).apply(o,[n].concat(i.call(arguments,1)))):void 0}),v(r,e,u,a,s,l||c)}))},t.fn.off=function(e,i,s){var a=this;return e&&!o(e)?(t.each(e,function(t,e){a.off(t,i,e)}),a):(o(i)||r(s)||s===!1||(s=i,i=n),s===!1&&(s=b),a.each(function(){y(this,e,s,i)}))},t.fn.trigger=function(e,n){return e=o(e)||t.isPlainObject(e)?t.Event(e):j(e),e._args=n,this.each(function(){e.type in f&&"function"==typeof this[e.type]?this[e.type]():"dispatchEvent"in this?this.dispatchEvent(e):t(this).triggerHandler(e,n)})},t.fn.triggerHandler=function(e,n){var i,r;return this.each(function(s,a){i=S(o(e)?t.Event(e):e),i._args=n,i.target=a,t.each(h(a,e.type||e),function(t,e){return r=e.proxy(i),i.isImmediatePropagationStopped()?!1:void 0})}),r},"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(e){t.fn[e]=function(t){return 0 in arguments?this.bind(e,t):this.trigger(e)}}),t.Event=function(t,e){o(t)||(e=t,t=e.type);var n=document.createEvent(a[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),j(n)}}(Zepto),function(t){function h(e,n,i){var r=t.Event(n);return t(e).trigger(r,i),!r.isDefaultPrevented()}function p(t,e,i,r){return t.global?h(e||n,i,r):void 0}function d(e){e.global&&0===t.active++&&p(e,null,"ajaxStart")}function m(e){e.global&&!--t.active&&p(e,null,"ajaxStop")}function g(t,e){var n=e.context;return e.beforeSend.call(n,t,e)===!1||p(e,n,"ajaxBeforeSend",[t,e])===!1?!1:void p(e,n,"ajaxSend",[t,e])}function v(t,e,n,i){var r=n.context,o="success";n.success.call(r,t,o,e),i&&i.resolveWith(r,[t,o,e]),p(n,r,"ajaxSuccess",[e,n,t]),x(o,e,n)}function y(t,e,n,i,r){var o=i.context;i.error.call(o,n,e,t),r&&r.rejectWith(o,[n,e,t]),p(i,o,"ajaxError",[n,i,t||e]),x(e,n,i)}function x(t,e,n){var i=n.context;n.complete.call(i,e,t),p(n,i,"ajaxComplete",[e,n]),m(n)}function b(){}function w(t){return t&&(t=t.split(";",2)[0]),t&&(t==f?"html":t==u?"json":s.test(t)?"script":a.test(t)&&"xml")||"text"}function E(t,e){return""==e?t:(t+"&"+e).replace(/[&?]{1,2}/,"?")}function j(e){e.processData&&e.data&&"string"!=t.type(e.data)&&(e.data=t.param(e.data,e.traditional)),!e.data||e.type&&"GET"!=e.type.toUpperCase()||(e.url=E(e.url,e.data),e.data=void 0)}function S(e,n,i,r){return t.isFunction(n)&&(r=i,i=n,n=void 0),t.isFunction(i)||(r=i,i=void 0),{url:e,data:n,success:i,dataType:r}}function C(e,n,i,r){var o,s=t.isArray(n),a=t.isPlainObject(n);t.each(n,function(n,u){o=t.type(u),r&&(n=i?r:r+"["+(a||"object"==o||"array"==o?n:"")+"]"),!r&&s?e.add(u.name,u.value):"array"==o||!i&&"object"==o?C(e,u,i,n):e.add(n,u)})}var i,r,e=0,n=window.document,o=/