├── img └── 4.jpg ├── .gitignore ├── fonts ├── FontAwesome.otf ├── fontawesome-webfont.eot ├── fontawesome-webfont.ttf ├── fontawesome-webfont.woff └── fontawesome-webfont.woff2 ├── README.md ├── docs ├── api.md ├── demo2.html └── demo.html ├── LICENSE └── dist ├── photoClip.min.js ├── hammer.min.js ├── photoClip.js ├── iscroll-zoom.min.js └── jquery.min.js /img/4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topoadmin/photoClip/HEAD/img/4.jpg -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | static 2 | .project 3 | node_modules 4 | gulpfile.js 5 | package.json 6 | -------------------------------------------------------------------------------- /fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topoadmin/photoClip/HEAD/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topoadmin/photoClip/HEAD/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topoadmin/photoClip/HEAD/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topoadmin/photoClip/HEAD/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /fonts/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/topoadmin/photoClip/HEAD/fonts/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # jQuery photoClip 2 | ## qq群:82447172 3 | --- 4 | 5 | ### photoClip 6 | jQuery 图片裁剪 7 | 8 | - [使用示例1](http://topoadmin.github.io/photoClip/docs/demo.html) 9 | - [使用示例2](http://topoadmin.github.io/photoClip/docs/demo2.html) 10 | - [API文档](http://github.com/topoadmin/photoClip/blob/master/docs/api.md) 11 | 12 | **使用说明:** 13 | 1. 获取 jQuery photoClip 14 | 15 | - [直接下载](https://github.com/topoadmin/photoClip/archive/master.zip) 16 | 17 | 2. 引入 Amaze UI 样式 18 | 19 | 20 | ```html 21 | 22 | ``` 23 | 24 | 3. 引入 photoClip 插件(`dist` 目录下的 JS): 25 | ```html 26 | 27 | 28 | 29 | 30 | 31 | ``` 32 | 33 | 4. 使用方法目前请看 DEMO 34 | 35 | 36 | -------------------------------------------------------------------------------- /docs/api.md: -------------------------------------------------------------------------------- 1 | # photoClip API 2 | --- 3 | 4 | ## 选项 5 | 6 | 选项 | 类型 | 默认值 | 描述 7 | --- | ---- | ------- | ----------- 8 | width | Int | `200` | 裁剪框宽 9 | height | Int | `200` | 裁剪框高 10 | fileMinSize | Int | `20` | 图片质量最小值(kb) 11 | defaultImg | String | `'图片路径'` | 初始图片路径(未完善) 12 | file | dom | `null` | (必须) file按钮 13 | ok | dom | `null` | (必须) 确定裁剪按钮 14 | outputType | String | `'jpg'` | 指定输出图片的类型,可选 "jpg" 和 "png" 两种种类型,默认为 "jpg" 15 | strictSize | Boolean | `false` | 是否严格按照截取区域宽高裁剪。默认为false,表示截取区域宽高仅用于约束宽高比例。如果设置为true,则表示截取出的图像宽高严格按照截取区域宽高输出。 16 | customOutput | Boolean | `false` | 自定义选择完毕输出,不执行内部填充函数 17 | loadStart | Function| `null` | 开始加载的回调函数。this指向 fileReader 对象,并将正在加载的 file 对象作为参数传入。 18 | loadProgress | Function| `null` | 加载中的回调,传入参数 加载百分比 19 | loadComplete | Function| `null` | 加载完成的回调函数。this指向图片对象,并将图片地址作为参数传入。 20 | loadError | Function| `null` | 加载失败的回调函数。this指向 fileReader 对象,并将错误事件的 event 对象作为参数传入。 21 | clipFinish | Function| `null` | 裁剪完成的回调函数。this指向图片对象,会将裁剪出的图像数据DataURL作为参数传入。 22 | formatError | Function| `null` | 图片格式错误 23 | imgSizeMin | Function| `null` | 图片质量小于设置范围时回调 24 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2016 Gaoshi 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 | -------------------------------------------------------------------------------- /docs/demo2.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 裁剪图片演示-带初始值 11 | 12 | 18 | 19 | 20 | 21 |
22 | 23 |
24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 72 | 73 | 74 | 75 | -------------------------------------------------------------------------------- /docs/demo.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 裁剪图片演示 11 | 12 | 18 | 19 | 20 | 21 |
22 |
23 |
24 |

裁剪图片

25 | × 26 |
27 |
28 | 29 |
30 | 31 | 34 | 35 | 36 |
37 |
38 |
39 | 40 |
41 | 42 |
43 | 44 |
45 | 46 | 47 | 48 | 49 | 50 | 51 | 92 | 93 | 94 | 95 | -------------------------------------------------------------------------------- /dist/photoClip.min.js: -------------------------------------------------------------------------------- 1 | !function(a,b){"use strict";"function"==typeof define&&define.amd?define(["jquery","iscroll-zoom","hammer"],b):"object"==typeof exports?module.exports=b(require("jquery"),require("iscroll-zoom"),require("hammer")):b(a.jQuery,a.IScroll,a.Hammer)}(this,function(a,b,c){"use strict";function d(d,g){function O(){z=!0,D.append(this),_.call(this,w,function(){x=this.naturalWidth,y=this.naturalHeight}),_(C,function(){Q()}),q.call(this,this.src)}function P(){var a={zoom:!0,scrollX:!0,scrollY:!0,freeScroll:!0,mouseWheel:!0,wheelAction:"zoom"};F=new b(B[0],a)}function Q(){L=0,M=0,N=0,D.css({width:x,height:y}),fb(D,L,M,N),cb(x,y),F.zoom(F.options.zoomStart),R(x,y);var a=.5*(h-x*F.options.zoomStart),b=.5*(i-y*F.options.zoomStart);F.scrollTo(a,b)}function R(a,b){C.css({width:a,height:b}),B.append(C),F.refresh()}function S(){var b,d,e,a=!!navigator.userAgent.match(/mobile/i);a?(b=new c(C[0]),b.add(new c.Rotate),b.on("rotatemove",function(a){K||(d=a.rotation,d>180?d-=360:-180>d&&(d+=360),e=d>0?1:0>d?-1:0)}),b.on("rotateend",function(a){K||Math.abs(d)>30&&(1==e?T(a.center):-1==e&&U(a.center))})):C.on("dblclick",function(a){T({x:a.clientX,y:a.clientY})})}function T(a){V(90,a)}function U(a){V(-90,a)}function V(a,b){var c,n,o,d,e,f,g,j,k,l,m;K||(K=!0,c=b?$(C,b.x,b.y):Z(C,B,.5*h,.5*i),d=ab(N,c),e=d.x,f=d.y,g=0,j=0,k=0,l=0,m=N+a,90==m||-270==m?(g=e+f,j=f-e,m>N?(k=y-e-f,l=e-f):N>m&&(k=y-f-(x-e),l=e+f-y),n=y,o=x):180==m||-180==m?(g=2*e,j=2*f,m>N?(k=x-e-(y-f),l=y-(e+f)):N>m&&(k=x-(e+f),l=y-f-(x-e)),n=x,o=y):270==m||-90==m?(g=e-f,j=e+f,m>N?(k=e+f-x,l=x-e-(y-f)):N>m&&(k=f-e,l=x-e-f),n=y,o=x):(0==m||360==m||-360==m)&&(g=0,j=0,m>N?(k=e-f,l=e+f-x):N>m&&(k=e+f-y,l=f-e),n=x,o=y),0==N?(L=0,M=0):90==N||-270==N?(L-=e+f,M-=f-e):180==N||-180==N?(L-=2*e,M-=2*f):(270==N||-90==N)&&(L-=e-f,M-=e+f),L=L.toFixed(2)-0,M=M.toFixed(2)-0,fb(D,L,M,N,e,f),gb(D,L,M,m,200,function(){K=!1,N=m%360,L+=g+k,M+=j+l,L=L.toFixed(2)-0,M=M.toFixed(2)-0,fb(D,L,M,N),F.scrollTo(F.x-k*F.scale,F.y-l*F.scale),cb(n,o),F.scalef?e:f}function cb(a,b){F.options.zoomMin=bb(h,i,a,b),F.options.zoomMax=Math.max(1,F.options.zoomMin),F.options.zoomStart=Math.min(F.options.zoomMax,bb(G,H,a,b))}function db(a,b,c,d){var e,f,g,h,i,j,k,l;return b=b||.8,c=c||0,e=d||"image/jpeg",f=a.naturalWidth,g=a.naturalHeight,h=Math.max(f,g),h>1024&&(i=Math.min(f,g),i=1024*(i/h),h=1024,f>g?(f=h,g=i):(f=i,g=h)),j=document.createElement("canvas"),k=j.getContext("2d"),c?(j.width=g,j.height=f,k.translate(g,0),k.rotate(c*Math.PI/180)):(j.width=f,j.height=g),k.drawImage(a,0,0,f,g),l=j.toDataURL(e,b||.8)}function eb(b){w&&w.length&&(w.remove(),delete w[0]),w=a("").css({"user-select":"none","pointer-events":"none"}),w.load(O),w.attr("src",b)}function fb(a,b,c,d,f,g){f=f||0,g=g||0;var h={};h[e+"transform"]="translateZ(0) translate("+b+"px,"+c+"px) rotate("+d+"deg)",h[e+"transform-origin"]=f+"px "+g+"px",a.css(h)}function gb(a,b,c,d,g,h){a.css(e+"transform"),a.css(e+"transition",e+"transform "+g+"ms"),a.one(f,function(){a.css(e+"transition",""),h.call(this)}),a.css(e+"transform","translateZ(0) translate("+b+"px,"+c+"px) rotate("+d+"deg)")}function hb(){A=a(d).css({"user-select":"none",overflow:"hidden"}),"static"==A.css("position")&&A.css("position","relative"),B=a("
").css({position:"absolute",left:"50%",top:"50%",width:h,height:i,"margin-left":-h/2,"margin-top":-i/2}).appendTo(A),C=a("
").appendTo(B),D=a("
").appendTo(C);var b=a("
").css({position:"absolute",left:0,top:0,width:"100%",height:"100%","pointer-events":"none"}).appendTo(A);a("
").css({position:"absolute",left:0,right:"50%",top:"50%",bottom:"50%",width:"auto",height:i,"margin-right":h/2,"margin-top":-i/2,"margin-bottom":-i/2,"background-color":"rgba(0,0,0,.5)"}).appendTo(b),a("
").css({position:"absolute",left:"50%",right:0,top:"50%",bottom:"50%","margin-left":h/2,"margin-top":-i/2,"margin-bottom":-i/2,"background-color":"rgba(0,0,0,.5)"}).appendTo(b),a("
").css({position:"absolute",left:0,right:0,top:0,bottom:"50%","margin-bottom":i/2,"background-color":"rgba(0,0,0,.5)"}).appendTo(b),a("
").css({position:"absolute",left:0,right:0,top:"50%",bottom:0,"margin-top":i/2,"background-color":"rgba(0,0,0,.5)"}).appendTo(b),a("
").css({border:"1px dashed #ddd",position:"absolute",left:"50%",top:"50%",width:h,height:i,"margin-left":-h/2-1,"margin-top":-i/2-1}).appendTo(b)}var v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,h=g.width,i=g.height,j=g.defaultImg,k=g.file,l=g.ok,m=g.fileMinSize,n=g.outputType||"image/jpeg",o=g.strictSize,p=g.loadStart,q=g.loadComplete,r=g.loadError,s=g.clipFinish,t=g.loadProgress,u=g.formatError;"jpg"===n?n="image/jpeg":"png"===n&&(n="image/png"),v=a(k),v.length&&(j&&eb(j),v.change(function(){if(this.files.length){if(!/image\/\w+/.test(this.files[0].type))return a.isFunction(u)?u():alert("图片格式不正确,请选择正确格式的图片文件!"),!1;var b=new FileReader;b.onprogress=function(b){a.isFunction(t)&&t((100*(b.loaded/b.total)).toFixed())},b.onload=function(b){var d,e,c=b.total/1024;c>1024?(d=1024/c,e=a("").hide(),e.load(function(){var c,f,a=this.naturalWidth,b=this.naturalHeight;e.appendTo(document.body),e.remove(),e=null,c=0,a==b&&(c=90),f=db(this,d,c,n),eb(f)}),e.attr("src",this.result)):m>c?a.isFunction(imgSizeMin)&&imgSizeMin(c):eb(this.result)},b.onerror=function(a){r.call(this,a)},b.readAsDataURL(this.files[0]),p.call(b,this.files[0])}}),v.click(function(){this.value=""}),hb(),P(),S(),W(),I=a(l),I.length&&I.click(function(){X()}),J=a(window),Y(),J.resize(Y))}a.fn.photoClip=function(b){var c,e;return window.FileReader?(c={width:200,height:200,fileMinSize:20,defaultImg:"",file:"",ok:"",outputType:"jpg",strictSize:!1,loadStart:function(){},loadProgress:function(){},loadComplete:function(){},loadError:function(){},clipFinish:function(){},formatError:function(){},imgSizeMin:function(){}},e=a.extend(c,b),new d(this,e),this):(alert("您的浏览器不支持 HTML5 的 FileReader API, 因此无法初始化图片裁剪插件,请更换最新的浏览器!"),void 0)};var f,e="";return function(){var a,g,b={Webkit:"webkit",Moz:"",O:"o"},c=document.documentElement,d=function(b){return a?a+b:b.toLowerCase()};for(g in b)if(void 0!==c.style[g+"TransitionProperty"]){e="-"+g.toLowerCase()+"-",a=b[g];break}f=d("TransitionEnd")}(),a}); -------------------------------------------------------------------------------- /dist/hammer.min.js: -------------------------------------------------------------------------------- 1 | !function(a,b,c,d){"use strict";function k(a,b,c){return setTimeout(q(a,c),b)}function l(a,b,c){return Array.isArray(a)?(m(a,c[b],c),!0):!1}function m(a,b,c){var e;if(a)if(a.forEach)a.forEach(b,c);else if(a.length!==d)for(e=0;e-1}function x(a){return a.trim().split(/\s+/g)}function y(a,b,c){if(a.indexOf&&!c)return a.indexOf(b);for(var d=0;dc[b]}):d.sort()),d}function B(a,b){for(var c,f,g=b[0].toUpperCase()+b.slice(1),h=0;h1&&!c.firstMultiple?c.firstMultiple=gb(b):1===e&&(c.firstMultiple=!1),f=c.firstInput,g=c.firstMultiple,h=g?g.center:f.center,i=b.center=hb(d),b.timeStamp=j(),b.deltaTime=b.timeStamp-f.timeStamp,b.angle=lb(h,i),b.distance=kb(h,i),eb(c,b),b.offsetDirection=jb(b.deltaX,b.deltaY),b.scale=g?nb(g.pointers,d):1,b.rotation=g?mb(g.pointers,d):0,fb(c,b),k=a.element,v(b.srcEvent.target,k)&&(k=b.srcEvent.target),b.target=k}function eb(a,b){var c=b.center,d=a.offsetDelta||{},e=a.prevDelta||{},f=a.prevInput||{};(b.eventType===O||f.eventType===Q)&&(e=a.prevDelta={x:f.deltaX||0,y:f.deltaY||0},d=a.offsetDelta={x:c.x,y:c.y}),b.deltaX=e.x+(c.x-d.x),b.deltaY=e.y+(c.y-d.y)}function fb(a,b){var f,g,h,j,k,l,m,c=a.lastInterval||b,e=b.timeStamp-c.timeStamp;b.eventType!=R&&(e>N||c.velocity===d)?(k=c.deltaX-b.deltaX,l=c.deltaY-b.deltaY,m=ib(e,k,l),g=m.x,h=m.y,f=i(m.x)>i(m.y)?m.x:m.y,j=jb(k,l),a.lastInterval=b):(f=c.velocity,g=c.velocityX,h=c.velocityY,j=c.direction),b.velocity=f,b.velocityX=g,b.velocityY=h,b.direction=j}function gb(a){for(var b=[],c=0;ce;)c+=a[e].clientX,d+=a[e].clientY,e++;return{x:h(c/b),y:h(d/b)}}function ib(a,b,c){return{x:b/a||0,y:c/a||0}}function jb(a,b){return a===b?S:i(a)>=i(b)?a>0?T:U:b>0?V:W}function kb(a,b,c){c||(c=$);var d=b[c[0]]-a[c[0]],e=b[c[1]]-a[c[1]];return Math.sqrt(d*d+e*e)}function lb(a,b,c){c||(c=$);var d=b[c[0]]-a[c[0]],e=b[c[1]]-a[c[1]];return 180*Math.atan2(e,d)/Math.PI}function mb(a,b){return lb(b[1],b[0],_)-lb(a[1],a[0],_)}function nb(a,b){return kb(b[0],b[1],_)/kb(a[0],a[1],_)}function rb(){this.evEl=pb,this.evWin=qb,this.allow=!0,this.pressed=!1,ab.apply(this,arguments)}function wb(){this.evEl=ub,this.evWin=vb,ab.apply(this,arguments),this.store=this.manager.session.pointerEvents=[]}function Ab(){this.evTarget=yb,this.evWin=zb,this.started=!1,ab.apply(this,arguments)}function Bb(a,b){var c=z(a.touches),d=z(a.changedTouches);return b&(Q|R)&&(c=A(c.concat(d),"identifier",!0)),[c,d]}function Eb(){this.evTarget=Db,this.targetIds={},ab.apply(this,arguments)}function Fb(a,b){var e,f,g,h,i,c=z(a.touches),d=this.targetIds;if(b&(O|P)&&1===c.length)return d[c[0].identifier]=!0,[c,c];if(g=z(a.changedTouches),h=[],i=this.target,f=c.filter(function(a){return v(a.target,i)}),b===O)for(e=0;eh&&(b.push(a),h=b.length-1):e&(Q|R)&&(c=!0),0>h||(b[h]=a,this.callback(this.manager,e,{pointers:b,changedPointers:[a],pointerType:f,srcEvent:a}),c&&b.splice(h,1))}}),xb={touchstart:O,touchmove:P,touchend:Q,touchcancel:R},yb="touchstart",zb="touchstart touchmove touchend touchcancel",p(Ab,ab,{handler:function(a){var c,b=xb[a.type];b===O&&(this.started=!0),this.started&&(c=Bb.call(this,a,b),b&(Q|R)&&0===c[0].length-c[1].length&&(this.started=!1),this.callback(this.manager,b,{pointers:c[0],changedPointers:c[1],pointerType:J,srcEvent:a}))}}),Cb={touchstart:O,touchmove:P,touchend:Q,touchcancel:R},Db="touchstart touchmove touchend touchcancel",p(Eb,ab,{handler:function(a){var b=Cb[a.type],c=Fb.call(this,a,b);c&&this.callback(this.manager,b,{pointers:c[0],changedPointers:c[1],pointerType:J,srcEvent:a})}}),p(Gb,ab,{handler:function(a,b,c){var d=c.pointerType==J,e=c.pointerType==L;if(d)this.mouse.allow=!1;else if(e&&!this.mouse.allow)return;b&(Q|R)&&(this.mouse.allow=!0),this.callback(a,b,c)},destroy:function(){this.touch.destroy(),this.mouse.destroy()}}),Hb=B(f.style,"touchAction"),Ib=Hb!==d,Jb="compute",Kb="auto",Lb="manipulation",Mb="none",Nb="pan-x",Ob="pan-y",Pb.prototype={set:function(a){a==Jb&&(a=this.compute()),Ib&&(this.manager.element.style[Hb]=a),this.actions=a.toLowerCase().trim()},update:function(){this.set(this.manager.options.touchAction)},compute:function(){var a=[];return m(this.manager.recognizers,function(b){r(b.options.enable,[b])&&(a=a.concat(b.getTouchAction()))}),Qb(a.join(" "))},preventDefaults:function(a){var b,c,d,e,f,g;if(!Ib)return b=a.srcEvent,c=a.offsetDirection,this.manager.session.prevented?(b.preventDefault(),void 0):(d=this.actions,e=w(d,Mb),f=w(d,Ob),g=w(d,Nb),e||f&&c&X||g&&c&Y?this.preventSrc(b):void 0)},preventSrc:function(a){this.manager.session.prevented=!0,a.preventDefault()}},Rb=1,Sb=2,Tb=4,Ub=8,Vb=Ub,Wb=16,Xb=32,Yb.prototype={defaults:{},set:function(a){return n(this.options,a),this.manager&&this.manager.touchAction.update(),this},recognizeWith:function(a){if(l(a,"recognizeWith",this))return this;var b=this.simultaneous;return a=_b(a,this),b[a.id]||(b[a.id]=a,a.recognizeWith(this)),this},dropRecognizeWith:function(a){return l(a,"dropRecognizeWith",this)?this:(a=_b(a,this),delete this.simultaneous[a.id],this)},requireFailure:function(a){if(l(a,"requireFailure",this))return this;var b=this.requireFail;return a=_b(a,this),-1===y(b,a)&&(b.push(a),a.requireFailure(this)),this},dropRequireFailure:function(a){if(l(a,"dropRequireFailure",this))return this;a=_b(a,this);var b=y(this.requireFail,a);return b>-1&&this.requireFail.splice(b,1),this},hasRequireFailures:function(){return this.requireFail.length>0},canRecognizeWith:function(a){return!!this.simultaneous[a.id]},emit:function(a){function d(d){b.manager.emit(b.options.event+(d?Zb(c):""),a)}var b=this,c=this.state;Ub>c&&d(!0),d(),c>=Ub&&d(!0)},tryEmit:function(a){return this.canEmit()?this.emit(a):(this.state=Xb,void 0)},canEmit:function(){for(var a=0;af?T:U,c=f!=this.pX,d=Math.abs(a.deltaX)):(e=0===g?S:0>g?V:W,c=g!=this.pY,d=Math.abs(a.deltaY))),a.direction=e,c&&d>b.threshold&&e&b.direction},attrTest:function(a){return ac.prototype.attrTest.call(this,a)&&(this.state&Sb||!(this.state&Sb)&&this.directionTest(a))},emit:function(a){this.pX=a.deltaX,this.pY=a.deltaY;var b=$b(a.direction);b&&this.manager.emit(this.options.event+b,a),this._super.emit.call(this,a)}}),p(cc,ac,{defaults:{event:"pinch",threshold:0,pointers:2},getTouchAction:function(){return[Mb]},attrTest:function(a){return this._super.attrTest.call(this,a)&&(Math.abs(a.scale-1)>this.options.threshold||this.state&Sb)},emit:function(a){if(this._super.emit.call(this,a),1!==a.scale){var b=a.scale<1?"in":"out";this.manager.emit(this.options.event+b,a)}}}),p(dc,Yb,{defaults:{event:"press",pointers:1,time:500,threshold:5},getTouchAction:function(){return[Kb]},process:function(a){var b=this.options,c=a.pointers.length===b.pointers,d=a.distanceb.time;if(this._input=a,!d||!c||a.eventType&(Q|R)&&!e)this.reset();else if(a.eventType&O)this.reset(),this._timer=k(function(){this.state=Vb,this.tryEmit()},b.time,this);else if(a.eventType&Q)return Vb;return Xb},reset:function(){clearTimeout(this._timer)},emit:function(a){this.state===Vb&&(a&&a.eventType&Q?this.manager.emit(this.options.event+"up",a):(this._input.timeStamp=j(),this.manager.emit(this.options.event,this._input)))}}),p(ec,ac,{defaults:{event:"rotate",threshold:0,pointers:2},getTouchAction:function(){return[Mb]},attrTest:function(a){return this._super.attrTest.call(this,a)&&(Math.abs(a.rotation)>this.options.threshold||this.state&Sb)}}),p(fc,ac,{defaults:{event:"swipe",threshold:10,velocity:.65,direction:X|Y,pointers:1},getTouchAction:function(){return bc.prototype.getTouchAction.call(this)},attrTest:function(a){var c,b=this.options.direction;return b&(X|Y)?c=a.velocity:b&X?c=a.velocityX:b&Y&&(c=a.velocityY),this._super.attrTest.call(this,a)&&b&a.direction&&a.distance>this.options.threshold&&i(c)>this.options.velocity&&a.eventType&Q},emit:function(a){var b=$b(a.direction);b&&this.manager.emit(this.options.event+b,a),this.manager.emit(this.options.event,a)}}),p(gc,Yb,{defaults:{event:"tap",pointers:1,taps:1,interval:300,time:250,threshold:2,posThreshold:10},getTouchAction:function(){return[Lb]},process:function(a){var f,g,h,b=this.options,c=a.pointers.length===b.pointers,d=a.distance 1024) { 126 | // 图片大于1M,需要压缩 127 | var quality = 1024 / kbs; 128 | var $tempImg = $("").hide(); 129 | $tempImg.load(function() { 130 | // IOS 设备中,如果的照片是竖屏拍摄的,虽然实际在网页中显示出的方向也是垂直,但图片数据依然是以横屏方向展示 131 | var sourceWidth = this.naturalWidth; // 在没有加入文档前,jQuery无法获得正确宽高,但可以通过原生属性来读取 132 | var realityHeight = this.naturalHeight; 133 | $tempImg.appendTo(document.body); 134 | $tempImg.remove(); 135 | $tempImg = null; 136 | var angleOffset = 0; 137 | if(sourceWidth == realityHeight) { 138 | angleOffset = 90; 139 | } 140 | // 将图片进行压缩 141 | var newDataURL = compressImg(this, quality, angleOffset, outputType); 142 | createImg(newDataURL); 143 | }); 144 | $tempImg.attr("src", this.result); 145 | } else if(kbs < fileMinSize) { 146 | if($.isFunction(imgSizeMin)) { 147 | imgSizeMin(kbs); 148 | } 149 | } else { 150 | createImg(this.result); 151 | } 152 | }; 153 | // 加载图片失败 154 | fileReader.onerror = function(e) { 155 | loadError.call(this, e); 156 | }; 157 | fileReader.readAsDataURL(this.files[0]); // 读取文件内容 158 | loadStart.call(fileReader, this.files[0]); // 开始加载图片 159 | } 160 | }); 161 | 162 | $file.click(function() { 163 | this.value = ""; 164 | }); 165 | 166 | var $container, // 容器,包含裁剪视图层和遮罩层 167 | $clipView, // 裁剪视图层,包含移动层 168 | $moveLayer, // 移动层,包含旋转层 169 | $rotateLayer, // 旋转层 170 | canvas, // 图片裁剪用到的画布 171 | myScroll, // 图片的scroll对象,包含图片的位置与缩放信息 172 | containerWidth, 173 | containerHeight; 174 | 175 | init(); 176 | initScroll(); 177 | initEvent(); 178 | initClip(); 179 | 180 | var $ok = $(ok); 181 | if($ok.length) { 182 | $ok.click(function() { 183 | clipImg(); 184 | }); 185 | } 186 | 187 | var $win = $(window); 188 | resize(); 189 | $win.resize(resize); 190 | 191 | var atRotation, // 是否正在旋转中 192 | curX, // 旋转层的当前X坐标 193 | curY, // 旋转层的当前Y坐标 194 | curAngle; // 旋转层的当前角度 195 | 196 | function imgLoad() { 197 | imgLoaded = true; 198 | 199 | $rotateLayer.append(this); 200 | 201 | hideAction.call(this, $img, function() { 202 | imgWidth = this.naturalWidth; 203 | imgHeight = this.naturalHeight; 204 | }); 205 | 206 | hideAction($moveLayer, function() { 207 | resetScroll(); 208 | }); 209 | 210 | loadComplete.call(this, this.src); 211 | } 212 | 213 | function initScroll() { 214 | var options = { 215 | zoom: true, 216 | scrollX: true, 217 | scrollY: true, 218 | freeScroll: true, 219 | mouseWheel: true, 220 | wheelAction: "zoom" 221 | } 222 | myScroll = new IScroll($clipView[0], options); 223 | } 224 | 225 | function resetScroll() { 226 | curX = 0; 227 | curY = 0; 228 | curAngle = 0; 229 | 230 | $rotateLayer.css({ 231 | "width": imgWidth, 232 | "height": imgHeight 233 | }); 234 | setTransform($rotateLayer, curX, curY, curAngle); 235 | 236 | calculateScale(imgWidth, imgHeight); 237 | myScroll.zoom(myScroll.options.zoomStart); 238 | refreshScroll(imgWidth, imgHeight); 239 | 240 | var posX = (clipWidth - imgWidth * myScroll.options.zoomStart) * .5, 241 | posY = (clipHeight - imgHeight * myScroll.options.zoomStart) * .5; 242 | myScroll.scrollTo(posX, posY); 243 | } 244 | 245 | function refreshScroll(width, height) { 246 | $moveLayer.css({ 247 | "width": width, 248 | "height": height 249 | }); 250 | // 在移动设备上,尤其是Android设备,当为一个元素重置了宽高时 251 | // 该元素的offsetWidth/offsetHeight、clientWidth/clientHeight等属性并不会立即更新,导致相关的js程序出现错误 252 | // iscroll 在刷新方法中正是使用了 offsetWidth/offsetHeight 来获取scroller元素($moveLayer)的宽高 253 | // 因此需要手动将元素重新添加进文档,迫使浏览器强制更新元素的宽高 254 | $clipView.append($moveLayer); 255 | myScroll.refresh(); 256 | } 257 | 258 | function initEvent() { 259 | // 移动设备 260 | var is_mobile = !!navigator.userAgent.match(/mobile/i); 261 | 262 | if(is_mobile) { 263 | var hammerManager = new Hammer($moveLayer[0]); 264 | hammerManager.add(new Hammer.Rotate()); 265 | 266 | var rotation, rotateDirection; 267 | hammerManager.on("rotatemove", function(e) { 268 | if(atRotation) return; 269 | rotation = e.rotation; 270 | if(rotation > 180) { 271 | rotation -= 360; 272 | } else if(rotation < -180) { 273 | rotation += 360; 274 | } 275 | rotateDirection = rotation > 0 ? 1 : rotation < 0 ? -1 : 0; 276 | }); 277 | hammerManager.on("rotateend", function(e) { 278 | if(atRotation) return; 279 | 280 | if(Math.abs(rotation) > 30) { 281 | if(rotateDirection == 1) { 282 | // 顺时针 283 | rotateCW(e.center); 284 | } else if(rotateDirection == -1) { 285 | // 逆时针 286 | rotateCCW(e.center); 287 | } 288 | } 289 | }); 290 | } else { 291 | $moveLayer.on("dblclick", function(e) { 292 | rotateCW({ 293 | x: e.clientX, 294 | y: e.clientY 295 | }); 296 | }); 297 | } 298 | } 299 | 300 | function rotateCW(point) { 301 | rotateBy(90, point); 302 | } 303 | 304 | function rotateCCW(point) { 305 | rotateBy(-90, point); 306 | } 307 | 308 | function rotateBy(angle, point) { 309 | if(atRotation) return; 310 | atRotation = true; 311 | 312 | var loacl; 313 | if(!point) { 314 | loacl = loaclToLoacl($moveLayer, $clipView, clipWidth * .5, clipHeight * .5); 315 | } else { 316 | loacl = globalToLoacl($moveLayer, point.x, point.y); 317 | } 318 | var origin = calculateOrigin(curAngle, loacl), // 旋转中使用的参考点坐标 319 | originX = origin.x, 320 | originY = origin.y, 321 | 322 | // 旋转层以零位为参考点旋转到新角度后的位置,与以当前计算的参考点“从零度”旋转到新角度后的位置,之间的左上角偏移量 323 | offsetX = 0, 324 | offsetY = 0, 325 | // 移动层当前的位置(即旋转层旋转前的位置),与旋转层以当前计算的参考点从当前角度旋转到新角度后的位置,之间的左上角偏移量 326 | parentOffsetX = 0, 327 | parentOffsetY = 0, 328 | 329 | newAngle = curAngle + angle, 330 | 331 | curImgWidth, // 移动层的当前宽度 332 | curImgHeight; // 移动层的当前高度 333 | 334 | if(newAngle == 90 || newAngle == -270) { 335 | offsetX = originX + originY; 336 | offsetY = originY - originX; 337 | 338 | if(newAngle > curAngle) { 339 | parentOffsetX = imgHeight - originX - originY; 340 | parentOffsetY = originX - originY; 341 | } else if(newAngle < curAngle) { 342 | parentOffsetX = (imgHeight - originY) - (imgWidth - originX); 343 | parentOffsetY = originX + originY - imgHeight; 344 | } 345 | 346 | curImgWidth = imgHeight; 347 | curImgHeight = imgWidth; 348 | } else if(newAngle == 180 || newAngle == -180) { 349 | offsetX = originX * 2; 350 | offsetY = originY * 2; 351 | 352 | if(newAngle > curAngle) { 353 | parentOffsetX = (imgWidth - originX) - (imgHeight - originY); 354 | parentOffsetY = imgHeight - (originX + originY); 355 | } else if(newAngle < curAngle) { 356 | parentOffsetX = imgWidth - (originX + originY); 357 | parentOffsetY = (imgHeight - originY) - (imgWidth - originX); 358 | } 359 | 360 | curImgWidth = imgWidth; 361 | curImgHeight = imgHeight; 362 | } else if(newAngle == 270 || newAngle == -90) { 363 | offsetX = originX - originY; 364 | offsetY = originX + originY; 365 | 366 | if(newAngle > curAngle) { 367 | parentOffsetX = originX + originY - imgWidth; 368 | parentOffsetY = (imgWidth - originX) - (imgHeight - originY); 369 | } else if(newAngle < curAngle) { 370 | parentOffsetX = originY - originX; 371 | parentOffsetY = imgWidth - originX - originY; 372 | } 373 | 374 | curImgWidth = imgHeight; 375 | curImgHeight = imgWidth; 376 | } else if(newAngle == 0 || newAngle == 360 || newAngle == -360) { 377 | offsetX = 0; 378 | offsetY = 0; 379 | 380 | if(newAngle > curAngle) { 381 | parentOffsetX = originX - originY; 382 | parentOffsetY = originX + originY - imgWidth; 383 | } else if(newAngle < curAngle) { 384 | parentOffsetX = originX + originY - imgHeight; 385 | parentOffsetY = originY - originX; 386 | } 387 | 388 | curImgWidth = imgWidth; 389 | curImgHeight = imgHeight; 390 | } 391 | 392 | // 将触摸点设为旋转时的参考点 393 | // 改变参考点的同时,要计算坐标的偏移,从而保证图片位置不发生变化 394 | if(curAngle == 0) { 395 | curX = 0; 396 | curY = 0; 397 | } else if(curAngle == 90 || curAngle == -270) { 398 | curX -= originX + originY; 399 | curY -= originY - originX; 400 | } else if(curAngle == 180 || curAngle == -180) { 401 | curX -= originX * 2; 402 | curY -= originY * 2; 403 | } else if(curAngle == 270 || curAngle == -90) { 404 | curX -= originX - originY; 405 | curY -= originX + originY; 406 | } 407 | curX = curX.toFixed(2) - 0; 408 | curY = curY.toFixed(2) - 0; 409 | setTransform($rotateLayer, curX, curY, curAngle, originX, originY); 410 | 411 | // 开始旋转 412 | setTransition($rotateLayer, curX, curY, newAngle, 200, function() { 413 | atRotation = false; 414 | curAngle = newAngle % 360; 415 | // 旋转完成后将参考点设回零位 416 | // 同时加上偏移,保证图片位置看上去没有变化 417 | // 这里要另外要加上父容器(移动层)零位与自身之间的偏移量 418 | curX += offsetX + parentOffsetX; 419 | curY += offsetY + parentOffsetY; 420 | curX = curX.toFixed(2) - 0; 421 | curY = curY.toFixed(2) - 0; 422 | setTransform($rotateLayer, curX, curY, curAngle); 423 | // 相应的父容器(移动层)要减去与旋转层之间的偏移量 424 | // 这样看上去就好像图片没有移动 425 | myScroll.scrollTo( 426 | myScroll.x - parentOffsetX * myScroll.scale, 427 | myScroll.y - parentOffsetY * myScroll.scale 428 | ); 429 | calculateScale(curImgWidth, curImgHeight); 430 | if(myScroll.scale < myScroll.options.zoomMin) { 431 | myScroll.zoom(myScroll.options.zoomMin); 432 | } 433 | 434 | refreshScroll(curImgWidth, curImgHeight); 435 | }); 436 | } 437 | 438 | function initClip() { 439 | canvas = document.createElement("canvas"); 440 | canvas.width = clipWidth; 441 | canvas.height = clipHeight; 442 | } 443 | 444 | function clipImg() { 445 | if(!imgLoaded) { 446 | //alert("亲,当前没有图片可以裁剪!"); 447 | return; 448 | } 449 | var local = loaclToLoacl($moveLayer, $clipView); 450 | var scale = myScroll.scale; 451 | var ctx = canvas.getContext("2d"); 452 | ctx.clearRect(0, 0, canvas.width, canvas.height); 453 | ctx.save(); 454 | 455 | if(strictSize) { 456 | ctx.scale(scale, scale); 457 | } else { 458 | canvas.width = clipWidth / scale; 459 | canvas.height = clipHeight / scale; 460 | } 461 | 462 | ctx.translate(curX - local.x / scale, curY - local.y / scale); 463 | ctx.rotate(curAngle * Math.PI / 180); 464 | 465 | ctx.drawImage($img[0], 0, 0); 466 | ctx.restore(); 467 | 468 | var dataURL = canvas.toDataURL(outputType, 1); 469 | clipFinish.call($img[0], dataURL); 470 | } 471 | 472 | function resize() { 473 | hideAction($container, function() { 474 | containerWidth = $container.width(); 475 | containerHeight = $container.height(); 476 | }); 477 | } 478 | 479 | function loaclToLoacl($layerOne, $layerTwo, x, y) { // 计算$layerTwo上的x、y坐标在$layerOne上的坐标 480 | x = x || 0; 481 | y = y || 0; 482 | var layerOneOffset, layerTwoOffset; 483 | hideAction($layerOne, function() { 484 | layerOneOffset = $layerOne.offset(); 485 | }); 486 | hideAction($layerTwo, function() { 487 | layerTwoOffset = $layerTwo.offset(); 488 | }); 489 | return { 490 | x: layerTwoOffset.left - layerOneOffset.left + x, 491 | y: layerTwoOffset.top - layerOneOffset.top + y 492 | }; 493 | } 494 | 495 | function globalToLoacl($layer, x, y) { // 计算相对于窗口的x、y坐标在$layer上的坐标 496 | x = x || 0; 497 | y = y || 0; 498 | var layerOffset; 499 | hideAction($layer, function() { 500 | layerOffset = $layer.offset(); 501 | }); 502 | return { 503 | x: x + $win.scrollLeft() - layerOffset.left, 504 | y: y + $win.scrollTop() - layerOffset.top 505 | }; 506 | } 507 | 508 | function hideAction(jq, func) { 509 | var $hide = $(); 510 | $.each(jq, function(i, n) { 511 | var $n = $(n); 512 | var $hidden = $n.parents().andSelf().filter(":hidden"); 513 | var $none; 514 | for(var i = 0; i < $hidden.length; i++) { 515 | if(!$n.is(":hidden")) break; 516 | $none = $hidden.eq(i); 517 | if($none.css("display") == "none") $hide = $hide.add($none.show()); 518 | } 519 | }); 520 | if(typeof(func) == "function") func.call(this); 521 | $hide.hide(); 522 | } 523 | 524 | function calculateOrigin(curAngle, point) { 525 | var scale = myScroll.scale; 526 | var origin = {}; 527 | if(curAngle == 0) { 528 | origin.x = point.x / scale; 529 | origin.y = point.y / scale; 530 | } else if(curAngle == 90 || curAngle == -270) { 531 | origin.x = point.y / scale; 532 | origin.y = imgHeight - point.x / scale; 533 | } else if(curAngle == 180 || curAngle == -180) { 534 | origin.x = imgWidth - point.x / scale; 535 | origin.y = imgHeight - point.y / scale; 536 | } else if(curAngle == 270 || curAngle == -90) { 537 | origin.x = imgWidth - point.y / scale; 538 | origin.y = point.x / scale; 539 | } 540 | return origin; 541 | } 542 | 543 | function getScale(w1, h1, w2, h2) { 544 | var sx = w1 / w2; 545 | var sy = h1 / h2; 546 | return sx > sy ? sx : sy; 547 | } 548 | 549 | function calculateScale(width, height) { 550 | myScroll.options.zoomMin = getScale(clipWidth, clipHeight, width, height); 551 | myScroll.options.zoomMax = Math.max(1, myScroll.options.zoomMin); 552 | myScroll.options.zoomStart = Math.min(myScroll.options.zoomMax, getScale(containerWidth, containerHeight, width, height)); 553 | } 554 | 555 | function compressImg(sourceImgObj, quality, angleOffset, outputFormat) { 556 | quality = quality || .8; 557 | angleOffset = angleOffset || 0; 558 | var mimeType = outputFormat || "image/jpeg"; 559 | 560 | var drawWidth = sourceImgObj.naturalWidth, 561 | drawHeight = sourceImgObj.naturalHeight; 562 | // IOS 设备上 canvas 宽或高如果大于 1024,就有可能导致应用崩溃闪退 563 | // 因此这里需要缩放 564 | var maxSide = Math.max(drawWidth, drawHeight); 565 | if(maxSide > 1024) { 566 | var minSide = Math.min(drawWidth, drawHeight); 567 | minSide = minSide / maxSide * 1024; 568 | maxSide = 1024; 569 | if(drawWidth > drawHeight) { 570 | drawWidth = maxSide; 571 | drawHeight = minSide; 572 | } else { 573 | drawWidth = minSide; 574 | drawHeight = maxSide; 575 | } 576 | } 577 | 578 | var cvs = document.createElement('canvas'); 579 | var ctx = cvs.getContext("2d"); 580 | if(angleOffset) { 581 | cvs.width = drawHeight; 582 | cvs.height = drawWidth; 583 | ctx.translate(drawHeight, 0); 584 | ctx.rotate(angleOffset * Math.PI / 180); 585 | } else { 586 | cvs.width = drawWidth; 587 | cvs.height = drawHeight; 588 | } 589 | 590 | ctx.drawImage(sourceImgObj, 0, 0, drawWidth, drawHeight); 591 | var newImageData = cvs.toDataURL(mimeType, quality || .8); 592 | return newImageData; 593 | } 594 | 595 | function createImg(src) { 596 | if($img &&  $img.length) { 597 | // 删除旧的图片以释放内存,防止IOS设备的webview崩溃 598 | $img.remove(); 599 | delete $img[0]; 600 | } 601 | $img = $("").css({ 602 | "user-select": "none", 603 | "pointer-events": "none" 604 | }); 605 | $img.load(imgLoad); 606 | $img.attr("src", src); // 设置图片base64值 607 | } 608 | 609 | function setTransform($obj, x, y, angle, originX, originY) { 610 | originX = originX || 0; 611 | originY = originY || 0; 612 | var style = {}; 613 | style[prefix + "transform"] = "translateZ(0) translate(" + x + "px," + y + "px) rotate(" + angle + "deg)"; 614 | style[prefix + "transform-origin"] = originX + "px " + originY + "px"; 615 | $obj.css(style); 616 | } 617 | 618 | function setTransition($obj, x, y, angle, dur, fn) { 619 | // 这里需要先读取之前设置好的transform样式,强制浏览器将该样式值渲染到元素 620 | // 否则浏览器可能出于性能考虑,将暂缓样式渲染,等到之后所有样式设置完成后再统一渲染 621 | // 这样就会导致之前设置的位移也被应用到动画中 622 | $obj.css(prefix + "transform"); 623 | $obj.css(prefix + "transition", prefix + "transform " + dur + "ms"); 624 | $obj.one(transitionEnd, function() { 625 | $obj.css(prefix + "transition", ""); 626 | fn.call(this); 627 | }); 628 | $obj.css(prefix + "transform", "translateZ(0) translate(" + x + "px," + y + "px) rotate(" + angle + "deg)"); 629 | } 630 | 631 | function init() { 632 | // 初始化容器 633 | $container = $(container).css({ 634 | "user-select": "none", 635 | "overflow": "hidden" 636 | }); 637 | if($container.css("position") == "static") $container.css("position", "relative"); 638 | 639 | // 创建裁剪视图层 640 | $clipView = $("
").css({ 641 | "position": "absolute", 642 | "left": "50%", 643 | "top": "50%", 644 | "width": clipWidth, 645 | "height": clipHeight, 646 | "margin-left": -clipWidth / 2, 647 | "margin-top": -clipHeight / 2 648 | }).appendTo($container); 649 | 650 | $moveLayer = $("
").appendTo($clipView); 651 | 652 | $rotateLayer = $("
").appendTo($moveLayer); 653 | 654 | // 创建遮罩 655 | var $mask = $("
").css({ 656 | "position": "absolute", 657 | "left": 0, 658 | "top": 0, 659 | "width": "100%", 660 | "height": "100%", 661 | "pointer-events": "none" 662 | }).appendTo($container); 663 | var $mask_left = $("
").css({ 664 | "position": "absolute", 665 | "left": 0, 666 | "right": "50%", 667 | "top": "50%", 668 | "bottom": "50%", 669 | "width": "auto", 670 | "height": clipHeight, 671 | "margin-right": clipWidth / 2, 672 | "margin-top": -clipHeight / 2, 673 | "margin-bottom": -clipHeight / 2, 674 | "background-color": "rgba(0,0,0,.5)" 675 | }).appendTo($mask); 676 | var $mask_right = $("
").css({ 677 | "position": "absolute", 678 | "left": "50%", 679 | "right": 0, 680 | "top": "50%", 681 | "bottom": "50%", 682 | "margin-left": clipWidth / 2, 683 | "margin-top": -clipHeight / 2, 684 | "margin-bottom": -clipHeight / 2, 685 | "background-color": "rgba(0,0,0,.5)" 686 | }).appendTo($mask); 687 | var $mask_top = $("
").css({ 688 | "position": "absolute", 689 | "left": 0, 690 | "right": 0, 691 | "top": 0, 692 | "bottom": "50%", 693 | "margin-bottom": clipHeight / 2, 694 | "background-color": "rgba(0,0,0,.5)" 695 | }).appendTo($mask); 696 | var $mask_bottom = $("
").css({ 697 | "position": "absolute", 698 | "left": 0, 699 | "right": 0, 700 | "top": "50%", 701 | "bottom": 0, 702 | "margin-top": clipHeight / 2, 703 | "background-color": "rgba(0,0,0,.5)" 704 | }).appendTo($mask); 705 | // 创建截取区域 706 | var $clip_area = $("
").css({ 707 | "border": "1px dashed #ddd", 708 | "position": "absolute", 709 | "left": "50%", 710 | "top": "50%", 711 | "width": clipWidth, 712 | "height": clipHeight, 713 | "margin-left": -clipWidth / 2 - 1, 714 | "margin-top": -clipHeight / 2 - 1 715 | }).appendTo($mask); 716 | 717 | } 718 | } 719 | 720 | var prefix = '', 721 | transitionEnd; 722 | 723 | (function() { 724 | 725 | var eventPrefix, 726 | vendors = { 727 | Webkit: 'webkit', 728 | Moz: '', 729 | O: 'o' 730 | }, 731 | testEl = document.documentElement, 732 | normalizeEvent = function(name) { 733 | return eventPrefix ? eventPrefix + name : name.toLowerCase() 734 | }; 735 | 736 | for(var i in vendors) { 737 | if(testEl.style[i + 'TransitionProperty'] !== undefined) { 738 | prefix = '-' + i.toLowerCase() + '-'; 739 | eventPrefix = vendors[i]; 740 | break; 741 | } 742 | } 743 | 744 | transitionEnd = normalizeEvent('TransitionEnd'); 745 | 746 | })(); 747 | 748 | return $; 749 | })); 750 | -------------------------------------------------------------------------------- /dist/iscroll-zoom.min.js: -------------------------------------------------------------------------------- 1 | !function(a,b,c){function f(a,d){this.wrapper="string"==typeof a?b.querySelector(a):a,this.scroller=this.wrapper.children[0],this.scrollerStyle=this.scroller.style,this.options={zoomMin:1,zoomMax:4,zoomStart:1,resizeScrollbars:!0,mouseWheelSpeed:20,snapThreshold:.334,startX:0,startY:0,scrollY:!0,directionLockThreshold:5,momentum:!0,bounce:!0,bounceTime:600,bounceEasing:"",preventDefault:!0,preventDefaultException:{tagName:/^(INPUT|TEXTAREA|BUTTON|SELECT)$/},HWCompositing:!0,useTransition:!0,useTransform:!0};for(var f in d)this.options[f]=d[f];this.translateZ=this.options.HWCompositing&&e.hasPerspective?" translateZ(0)":"",this.options.useTransition=e.hasTransition&&this.options.useTransition,this.options.useTransform=e.hasTransform&&this.options.useTransform,this.options.eventPassthrough=this.options.eventPassthrough===!0?"vertical":this.options.eventPassthrough,this.options.preventDefault=!this.options.eventPassthrough&&this.options.preventDefault,this.options.scrollY="vertical"==this.options.eventPassthrough?!1:this.options.scrollY,this.options.scrollX="horizontal"==this.options.eventPassthrough?!1:this.options.scrollX,this.options.freeScroll=this.options.freeScroll&&!this.options.eventPassthrough,this.options.directionLockThreshold=this.options.eventPassthrough?0:this.options.directionLockThreshold,this.options.bounceEasing="string"==typeof this.options.bounceEasing?e.ease[this.options.bounceEasing]||e.ease.circular:this.options.bounceEasing,this.options.resizePolling=void 0===this.options.resizePolling?60:this.options.resizePolling,this.options.tap===!0&&(this.options.tap="tap"),"scale"==this.options.shrinkScrollbars&&(this.options.useTransition=!1),this.options.invertWheelDirection=this.options.invertWheelDirection?-1:1,this.x=0,this.y=0,this.directionX=0,this.directionY=0,this._events={},this.scale=c.min(c.max(this.options.zoomStart,this.options.zoomMin),this.options.zoomMax),this._init(),this.refresh(),this.scrollTo(this.options.startX,this.options.startY),this.enable()}function g(a,c,d){var e=b.createElement("div"),f=b.createElement("div");return d===!0&&(e.style.cssText="position:absolute;z-index:9999",f.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;position:absolute;background:rgba(0,0,0,0.5);border:1px solid rgba(255,255,255,0.9);border-radius:3px"),f.className="iScrollIndicator","h"==a?(d===!0&&(e.style.cssText+=";height:7px;left:2px;right:2px;bottom:0",f.style.height="100%"),e.className="iScrollHorizontalScrollbar"):(d===!0&&(e.style.cssText+=";width:7px;bottom:2px;top:2px;right:1px",f.style.width="100%"),e.className="iScrollVerticalScrollbar"),e.style.cssText+=";overflow:hidden",c||(e.style.pointerEvents="none"),e.appendChild(f),e}function h(c,d){this.wrapper="string"==typeof d.el?b.querySelector(d.el):d.el,this.wrapperStyle=this.wrapper.style,this.indicator=this.wrapper.children[0],this.indicatorStyle=this.indicator.style,this.scroller=c,this.options={listenX:!0,listenY:!0,interactive:!1,resize:!0,defaultScrollbars:!1,shrink:!1,fade:!1,speedRatioX:0,speedRatioY:0};for(var f in d)this.options[f]=d[f];this.sizeRatioX=1,this.sizeRatioY=1,this.maxPosX=0,this.maxPosY=0,this.options.interactive&&(this.options.disableTouch||(e.addEvent(this.indicator,"touchstart",this),e.addEvent(a,"touchend",this)),this.options.disablePointer||(e.addEvent(this.indicator,e.prefixPointerEvent("pointerdown"),this),e.addEvent(a,e.prefixPointerEvent("pointerup"),this)),this.options.disableMouse||(e.addEvent(this.indicator,"mousedown",this),e.addEvent(a,"mouseup",this))),this.options.fade&&(this.wrapperStyle[e.style.transform]=this.scroller.translateZ,this.wrapperStyle[e.style.transitionDuration]=e.isBadAndroid?"0.001s":"0ms",this.wrapperStyle.opacity="0")}var d=a.requestAnimationFrame||a.webkitRequestAnimationFrame||a.mozRequestAnimationFrame||a.oRequestAnimationFrame||a.msRequestAnimationFrame||function(b){a.setTimeout(b,1e3/60)},e=function(){function g(a){return f===!1?!1:""===f?a:f+a.charAt(0).toUpperCase()+a.substr(1)}var h,d={},e=b.createElement("div").style,f=function(){for(var b,a=["t","webkitT","MozT","msT","OT"],c=0,d=a.length;d>c;c++)if(b=a[c]+"ransform",b in e)return a[c].substr(0,a[c].length-1);return!1}();return d.getTime=Date.now||function(){return(new Date).getTime()},d.extend=function(a,b){for(var c in b)a[c]=b[c]},d.addEvent=function(a,b,c,d){a.addEventListener(b,c,!!d)},d.removeEvent=function(a,b,c,d){a.removeEventListener(b,c,!!d)},d.prefixPointerEvent=function(b){return a.MSPointerEvent?"MSPointer"+b.charAt(9).toUpperCase()+b.substr(10):b},d.momentum=function(a,b,d,e,f,g){var j,k,h=a-b,i=c.abs(h)/d;return g=void 0===g?6e-4:g,j=a+i*i/(2*g)*(0>h?-1:1),k=i/g,e>j?(j=f?e-f/2.5*(i/8):e,h=c.abs(j-a),k=h/i):j>0&&(j=f?f/2.5*(i/8):0,h=c.abs(a)+j,k=h/i),{destination:c.round(j),duration:k}},h=g("transform"),d.extend(d,{hasTransform:h!==!1,hasPerspective:g("perspective")in e,hasTouch:"ontouchstart"in a,hasPointer:a.PointerEvent||a.MSPointerEvent,hasTransition:g("transition")in e}),d.isBadAndroid=/Android /.test(a.navigator.appVersion)&&!/Chrome\/\d/.test(a.navigator.appVersion),d.extend(d.style={},{transform:h,transitionTimingFunction:g("transitionTimingFunction"),transitionDuration:g("transitionDuration"),transitionDelay:g("transitionDelay"),transformOrigin:g("transformOrigin")}),d.hasClass=function(a,b){var c=new RegExp("(^|\\s)"+b+"(\\s|$)");return c.test(a.className)},d.addClass=function(a,b){if(!d.hasClass(a,b)){var c=a.className.split(" ");c.push(b),a.className=c.join(" ")}},d.removeClass=function(a,b){if(d.hasClass(a,b)){var c=new RegExp("(^|\\s)"+b+"(\\s|$)","g");a.className=a.className.replace(c," ")}},d.offset=function(a){for(var b=-a.offsetLeft,c=-a.offsetTop;a=a.offsetParent;)b-=a.offsetLeft,c-=a.offsetTop;return{left:b,top:c}},d.preventDefaultException=function(a,b){for(var c in b)if(b[c].test(a[c]))return!0;return!1},d.extend(d.eventType={},{touchstart:1,touchmove:1,touchend:1,mousedown:2,mousemove:2,mouseup:2,pointerdown:3,pointermove:3,pointerup:3,MSPointerDown:3,MSPointerMove:3,MSPointerUp:3}),d.extend(d.ease={},{quadratic:{style:"cubic-bezier(0.25, 0.46, 0.45, 0.94)",fn:function(a){return a*(2-a)}},circular:{style:"cubic-bezier(0.1, 0.57, 0.1, 1)",fn:function(a){return c.sqrt(1- --a*a)}},back:{style:"cubic-bezier(0.175, 0.885, 0.32, 1.275)",fn:function(a){var b=4;return(a-=1)*a*((b+1)*a+b)+1}},bounce:{style:"",fn:function(a){return(a/=1)<1/2.75?7.5625*a*a:2/2.75>a?7.5625*(a-=1.5/2.75)*a+.75:2.5/2.75>a?7.5625*(a-=2.25/2.75)*a+.9375:7.5625*(a-=2.625/2.75)*a+.984375}},elastic:{style:"",fn:function(a){var b=.22,d=.4;return 0===a?0:1==a?1:d*c.pow(2,-10*a)*c.sin((a-b/4)*2*c.PI/b)+1}}}),d.tap=function(a,c){var d=b.createEvent("Event");d.initEvent(c,!0,!0),d.pageX=a.pageX,d.pageY=a.pageY,a.target.dispatchEvent(d)},d.click=function(a){var d,c=a.target;/(SELECT|INPUT|TEXTAREA)/i.test(c.tagName)||(d=b.createEvent("MouseEvents"),d.initMouseEvent("click",!0,!0,a.view,1,c.screenX,c.screenY,c.clientX,c.clientY,a.ctrlKey,a.altKey,a.shiftKey,a.metaKey,0,null),d._constructed=!0,c.dispatchEvent(d))},d}();f.prototype={version:"5.1.3",_init:function(){this._initEvents(),this.options.zoom&&this._initZoom(),(this.options.scrollbars||this.options.indicators)&&this._initIndicators(),this.options.mouseWheel&&this._initWheel(),this.options.snap&&this._initSnap(),this.options.keyBindings&&this._initKeys()},destroy:function(){this._initEvents(!0),this._execEvent("destroy")},_transitionEnd:function(a){a.target==this.scroller&&this.isInTransition&&(this._transitionTime(),this.resetPosition(this.options.bounceTime)||(this.isInTransition=!1,this._execEvent("scrollEnd")))},_start:function(a){if(!(1!=e.eventType[a.type]&&0!==a.button||!this.enabled||this.initiated&&e.eventType[a.type]!==this.initiated)){!this.options.preventDefault||e.isBadAndroid||e.preventDefaultException(a.target,this.options.preventDefaultException)||a.preventDefault();var d,b=a.touches?a.touches[0]:a;this.initiated=e.eventType[a.type],this.moved=!1,this.distX=0,this.distY=0,this.directionX=0,this.directionY=0,this.directionLocked=0,this._transitionTime(),this.startTime=e.getTime(),this.options.useTransition&&this.isInTransition?(this.isInTransition=!1,d=this.getComputedPosition(),this._translate(c.round(d.x),c.round(d.y)),this._execEvent("scrollEnd")):!this.options.useTransition&&this.isAnimating&&(this.isAnimating=!1,this._execEvent("scrollEnd")),this.startX=this.x,this.startY=this.y,this.absStartX=this.x,this.absStartY=this.y,this.pointX=b.pageX,this.pointY=b.pageY,this._execEvent("beforeScrollStart")}},_move:function(a){if(this.enabled&&e.eventType[a.type]===this.initiated){this.options.preventDefault&&a.preventDefault();var h,i,j,k,b=a.touches?a.touches[0]:a,d=b.pageX-this.pointX,f=b.pageY-this.pointY,g=e.getTime();if(this.pointX=b.pageX,this.pointY=b.pageY,this.distX+=d,this.distY+=f,j=c.abs(this.distX),k=c.abs(this.distY),!(g-this.endTime>300&&10>j&&10>k)){if(this.directionLocked||this.options.freeScroll||(this.directionLocked=j>k+this.options.directionLockThreshold?"h":k>=j+this.options.directionLockThreshold?"v":"n"),"h"==this.directionLocked){if("vertical"==this.options.eventPassthrough)a.preventDefault();else if("horizontal"==this.options.eventPassthrough)return this.initiated=!1,void 0;f=0}else if("v"==this.directionLocked){if("horizontal"==this.options.eventPassthrough)a.preventDefault();else if("vertical"==this.options.eventPassthrough)return this.initiated=!1,void 0;d=0}d=this.hasHorizontalScroll?d:0,f=this.hasVerticalScroll?f:0,h=this.x+d,i=this.y+f,(h>0||h0?0:this.maxScrollX),(i>0||i0?0:this.maxScrollY),this.directionX=d>0?-1:0>d?1:0,this.directionY=f>0?-1:0>f?1:0,this.moved||this._execEvent("scrollStart"),this.moved=!0,this._translate(h,i),g-this.startTime>300&&(this.startTime=g,this.startX=this.x,this.startY=this.y)}}},_end:function(a){var d,f,g,h,i,j,k,l,m,n;if(this.enabled&&e.eventType[a.type]===this.initiated&&(this.options.preventDefault&&!e.preventDefaultException(a.target,this.options.preventDefaultException)&&a.preventDefault(),a.changedTouches?a.changedTouches[0]:a,g=e.getTime()-this.startTime,h=c.round(this.x),i=c.round(this.y),j=c.abs(h-this.startX),k=c.abs(i-this.startY),l=0,m="",this.isInTransition=0,this.initiated=0,this.endTime=e.getTime(),!this.resetPosition(this.options.bounceTime)))return this.scrollTo(h,i),this.moved?this._events.flick&&200>g&&100>j&&100>k?(this._execEvent("flick"),void 0):(this.options.momentum&&300>g&&(d=this.hasHorizontalScroll?e.momentum(this.x,this.startX,g,this.maxScrollX,this.options.bounce?this.wrapperWidth:0,this.options.deceleration):{destination:h,duration:0},f=this.hasVerticalScroll?e.momentum(this.y,this.startY,g,this.maxScrollY,this.options.bounce?this.wrapperHeight:0,this.options.deceleration):{destination:i,duration:0},h=d.destination,i=f.destination,l=c.max(d.duration,f.duration),this.isInTransition=1),this.options.snap&&(n=this._nearestSnap(h,i),this.currentPage=n,l=this.options.snapSpeed||c.max(c.max(c.min(c.abs(h-n.x),1e3),c.min(c.abs(i-n.y),1e3)),300),h=n.x,i=n.y,this.directionX=0,this.directionY=0,m=this.options.bounceEasing),h!=this.x||i!=this.y?((h>0||h0||i0?b=0:this.x0?c=0:this.y-1&&this._events[a].splice(c,1)}},_execEvent:function(a){if(this._events[a]){var b=0,c=this._events[a].length;if(c)for(;c>b;b++)this._events[a][b].apply(this,[].slice.call(arguments,1))}},scrollBy:function(a,b,c,d){a=this.x+a,b=this.y+b,c=c||0,this.scrollTo(a,b,c,d)},scrollTo:function(a,b,c,d){d=d||e.ease.circular,this.isInTransition=this.options.useTransition&&c>0,!c||this.options.useTransition&&d.style?(this._transitionTimingFunction(d.style),this._transitionTime(c),this._translate(a,b)):this._animate(a,b,c,d.fn)},scrollToElement:function(a,b,d,f,g){if(a=a.nodeType?a:this.scroller.querySelector(a)){var h=e.offset(a);h.left-=this.wrapperOffset.left,h.top-=this.wrapperOffset.top,d===!0&&(d=c.round(a.offsetWidth/2-this.wrapper.offsetWidth/2)),f===!0&&(f=c.round(a.offsetHeight/2-this.wrapper.offsetHeight/2)),h.left-=d||0,h.top-=f||0,h.left=h.left>0?0:h.left0?0:h.topthis.options.zoomMax&&(g=2*this.options.zoomMax*c.pow(.5,this.options.zoomMax/g)),h=g/this.startScale,i=this.originX-this.originX*h+this.startX,j=this.originY-this.originY*h+this.startY,this.scale=g,this.scrollTo(i,j,0)}},_zoomEnd:function(a){if(this.enabled&&e.eventType[a.type]===this.initiated){this.options.preventDefault&&a.preventDefault();var b,c,d;this.isInTransition=0,this.initiated=0,this.scale>this.options.zoomMax?this.scale=this.options.zoomMax:this.scale0?b=0:b0?c=0:cthis.options.zoomMax&&(a=this.options.zoomMax),a!=this.scale){var e=a/this.scale;b=void 0===b?this.wrapperWidth/2-this.wrapperOffset.left:b,c=void 0===c?this.wrapperHeight/2-this.wrapperOffset.top:c,d=void 0===d?300:d,b=b+this.wrapperOffset.left-this.x,c=c+this.wrapperOffset.top-this.y,b=b-b*e+this.x,c=c-c*e+this.y,this.scale=a,this.refresh(),b>0?b=0:b0?c=0:c0?e--:0>b&&e++,d>0?f--:0>d&&f++,this.goToPage(e,f),void 0;e=this.x+c.round(this.hasHorizontalScroll?b:0),f=this.y+c.round(this.hasVerticalScroll?d:0),e>0?e=0:e0?f=0:f-this.scrollerWidth;){for(this.pages[a]=[],b=0,i=0;i>-this.scrollerHeight;)this.pages[a][b]={x:c.max(h,this.maxScrollX),y:c.max(i,this.maxScrollY),width:j,height:k,cx:h-f,cy:i-g},i-=k,b++;h-=j,a++}else for(l=this.options.snap,b=l.length,e=-1;b>a;a++)(0===a||l[a].offsetLeft<=l[a-1].offsetLeft)&&(d=0,e++),this.pages[d]||(this.pages[d]=[]),h=c.max(-l[a].offsetLeft,this.maxScrollX),i=c.max(-l[a].offsetTop,this.maxScrollY),f=h-c.round(l[a].offsetWidth/2),g=i-c.round(l[a].offsetHeight/2),this.pages[d][e]={x:h,y:i,width:l[a].offsetWidth,height:l[a].offsetHeight,cx:f,cy:g},h>this.maxScrollX&&d++;this.goToPage(this.currentPage.pageX||0,this.currentPage.pageY||0,0),0===this.options.snapThreshold%1?(this.snapThresholdX=this.options.snapThreshold,this.snapThresholdY=this.options.snapThreshold):(this.snapThresholdX=c.round(this.pages[this.currentPage.pageX][this.currentPage.pageY].width*this.options.snapThreshold),this.snapThresholdY=c.round(this.pages[this.currentPage.pageX][this.currentPage.pageY].height*this.options.snapThreshold))}}),this.on("flick",function(){var a=this.options.snapSpeed||c.max(c.max(c.min(c.abs(this.x-this.startX),1e3),c.min(c.abs(this.y-this.startY),1e3)),300);this.goToPage(this.currentPage.pageX+this.directionX,this.currentPage.pageY+this.directionY,a)})},_nearestSnap:function(a,b){if(!this.pages.length)return{x:0,y:0,pageX:0,pageY:0};var d=0,e=this.pages.length,f=0;if(c.abs(a-this.absStartX)0?a=0:a0?b=0:bd;d++)if(a>=this.pages[d][0].cx){a=this.pages[d][0].x;break}for(e=this.pages[d].length;e>f;f++)if(b>=this.pages[0][f].cy){b=this.pages[0][f].y;break}return d==this.currentPage.pageX&&(d+=this.directionX,0>d?d=0:d>=this.pages.length&&(d=this.pages.length-1),a=this.pages[d][0].x),f==this.currentPage.pageY&&(f+=this.directionY,0>f?f=0:f>=this.pages[0].length&&(f=this.pages[0].length-1),b=this.pages[0][f].y),{x:a,y:b,pageX:d,pageY:f}},goToPage:function(a,b,d,e){e=e||this.options.bounceEasing,a>=this.pages.length?a=this.pages.length-1:0>a&&(a=0),b>=this.pages[a].length?b=this.pages[a].length-1:0>b&&(b=0);var f=this.pages[a][b].x,g=this.pages[a][b].y;d=void 0===d?this.options.snapSpeed||c.max(c.max(c.min(c.abs(f-this.x),1e3),c.min(c.abs(g-this.y),1e3)),300):d,this.currentPage={x:f,y:g,pageX:a,pageY:b},this.scrollTo(f,g,d,e)},next:function(a,b){var c=this.currentPage.pageX,d=this.currentPage.pageY;c++,c>=this.pages.length&&this.hasVerticalScroll&&(c=0,d++),this.goToPage(c,d,a,b)},prev:function(a,b){var c=this.currentPage.pageX,d=this.currentPage.pageY;c--,0>c&&this.hasVerticalScroll&&(c=0,d--),this.goToPage(c,d,a,b)},_initKeys:function(){var d,c={pageUp:33,pageDown:34,end:35,home:36,left:37,up:38,right:39,down:40};if("object"==typeof this.options.keyBindings)for(d in this.options.keyBindings)"string"==typeof this.options.keyBindings[d]&&(this.options.keyBindings[d]=this.options.keyBindings[d].toUpperCase().charCodeAt(0));else this.options.keyBindings={};for(d in c)this.options.keyBindings[d]=this.options.keyBindings[d]||c[d];e.addEvent(a,"keydown",this),this.on("destroy",function(){e.removeEvent(a,"keydown",this)})},_key:function(a){if(this.enabled){var j,b=this.options.snap,d=b?this.currentPage.pageX:this.x,f=b?this.currentPage.pageY:this.y,g=e.getTime(),h=this.keyTime||0,i=.25;switch(this.options.useTransition&&this.isInTransition&&(j=this.getComputedPosition(),this._translate(c.round(j.x),c.round(j.y)),this.isInTransition=!1),this.keyAcceleration=200>g-h?c.min(this.keyAcceleration+i,50):0,a.keyCode){case this.options.keyBindings.pageUp:this.hasHorizontalScroll&&!this.hasVerticalScroll?d+=b?1:this.wrapperWidth:f+=b?1:this.wrapperHeight;break;case this.options.keyBindings.pageDown:this.hasHorizontalScroll&&!this.hasVerticalScroll?d-=b?1:this.wrapperWidth:f-=b?1:this.wrapperHeight;break;case this.options.keyBindings.end:d=b?this.pages.length-1:this.maxScrollX,f=b?this.pages[0].length-1:this.maxScrollY;break;case this.options.keyBindings.home:d=0,f=0;break;case this.options.keyBindings.left:d+=b?-1:5+this.keyAcceleration>>0;break;case this.options.keyBindings.up:f+=b?1:5+this.keyAcceleration>>0;break;case this.options.keyBindings.right:d-=b?-1:5+this.keyAcceleration>>0;break;case this.options.keyBindings.down:f-=b?1:5+this.keyAcceleration>>0;break;default:return}if(b)return this.goToPage(d,f),void 0;d>0?(d=0,this.keyAcceleration=0):d0?(f=0,this.keyAcceleration=0):f=k?(g.isAnimating=!1,g._translate(a,b),g.resetPosition(g.options.bounceTime)||g._execEvent("scrollEnd"),void 0):(m=(m-j)/c,p=f(m),n=(a-h)*p+h,o=(b-i)*p+i,g._translate(n,o),g.isAnimating&&d(l),void 0)}var g=this,h=this.x,i=this.y,j=e.getTime(),k=j+c;this.isAnimating=!0,l()},handleEvent:function(a){switch(a.type){case"touchstart":case"pointerdown":case"MSPointerDown":case"mousedown":this._start(a),this.options.zoom&&a.touches&&a.touches.length>1&&this._zoomStart(a);break;case"touchmove":case"pointermove":case"MSPointerMove":case"mousemove":if(this.options.zoom&&a.touches&&a.touches[1])return this._zoom(a),void 0;this._move(a);break;case"touchend":case"pointerup":case"MSPointerUp":case"mouseup":case"touchcancel":case"pointercancel":case"MSPointerCancel":case"mousecancel":if(this.scaled)return this._zoomEnd(a),void 0;this._end(a);break;case"orientationchange":case"resize":this._resize();break;case"transitionend":case"webkitTransitionEnd":case"oTransitionEnd":case"MSTransitionEnd":this._transitionEnd(a);break;case"wheel":case"DOMMouseScroll":case"mousewheel":if("zoom"==this.options.wheelAction)return this._wheelZoom(a),void 0;this._wheel(a);break;case"keydown":this._key(a)}}},h.prototype={handleEvent:function(a){switch(a.type){case"touchstart":case"pointerdown":case"MSPointerDown":case"mousedown":this._start(a);break;case"touchmove":case"pointermove":case"MSPointerMove":case"mousemove":this._move(a);break;case"touchend":case"pointerup":case"MSPointerUp":case"mouseup":case"touchcancel":case"pointercancel":case"MSPointerCancel":case"mousecancel":this._end(a)}},destroy:function(){this.options.interactive&&(e.removeEvent(this.indicator,"touchstart",this),e.removeEvent(this.indicator,e.prefixPointerEvent("pointerdown"),this),e.removeEvent(this.indicator,"mousedown",this),e.removeEvent(a,"touchmove",this),e.removeEvent(a,e.prefixPointerEvent("pointermove"),this),e.removeEvent(a,"mousemove",this),e.removeEvent(a,"touchend",this),e.removeEvent(a,e.prefixPointerEvent("pointerup"),this),e.removeEvent(a,"mouseup",this)),this.options.defaultScrollbars&&this.wrapper.parentNode.removeChild(this.wrapper)},_start:function(b){var c=b.touches?b.touches[0]:b;b.preventDefault(),b.stopPropagation(),this.transitionTime(),this.initiated=!0,this.moved=!1,this.lastPointX=c.pageX,this.lastPointY=c.pageY,this.startTime=e.getTime(),this.options.disableTouch||e.addEvent(a,"touchmove",this),this.options.disablePointer||e.addEvent(a,e.prefixPointerEvent("pointermove"),this),this.options.disableMouse||e.addEvent(a,"mousemove",this),this.scroller._execEvent("beforeScrollStart")},_move:function(a){var c,d,f,g,b=a.touches?a.touches[0]:a;e.getTime(),this.moved||this.scroller._execEvent("scrollStart"),this.moved=!0,c=b.pageX-this.lastPointX,this.lastPointX=b.pageX,d=b.pageY-this.lastPointY,this.lastPointY=b.pageY,f=this.x+c,g=this.y+d,this._pos(f,g),a.preventDefault(),a.stopPropagation()},_end:function(b){var d,f;this.initiated&&(this.initiated=!1,b.preventDefault(),b.stopPropagation(),e.removeEvent(a,"touchmove",this),e.removeEvent(a,e.prefixPointerEvent("pointermove"),this),e.removeEvent(a,"mousemove",this),this.scroller.options.snap&&(d=this.scroller._nearestSnap(this.scroller.x,this.scroller.y),f=this.options.snapSpeed||c.max(c.max(c.min(c.abs(this.scroller.x-d.x),1e3),c.min(c.abs(this.scroller.y-d.y),1e3)),300),(this.scroller.x!=d.x||this.scroller.y!=d.y)&&(this.scroller.directionX=0,this.scroller.directionY=0,this.scroller.currentPage=d,this.scroller.scrollTo(d.x,d.y,f,this.scroller.options.bounceEasing))),this.moved&&this.scroller._execEvent("scrollEnd"))},transitionTime:function(a){a=a||0,this.indicatorStyle[e.style.transitionDuration]=a+"ms",!a&&e.isBadAndroid&&(this.indicatorStyle[e.style.transitionDuration]="0.001s")},transitionTimingFunction:function(a){this.indicatorStyle[e.style.transitionTimingFunction]=a},refresh:function(){this.transitionTime(),this.indicatorStyle.display=this.options.listenX&&!this.options.listenY?this.scroller.hasHorizontalScroll?"block":"none":this.options.listenY&&!this.options.listenX?this.scroller.hasVerticalScroll?"block":"none":this.scroller.hasHorizontalScroll||this.scroller.hasVerticalScroll?"block":"none",this.scroller.hasHorizontalScroll&&this.scroller.hasVerticalScroll?(e.addClass(this.wrapper,"iScrollBothScrollbars"),e.removeClass(this.wrapper,"iScrollLoneScrollbar"),this.options.defaultScrollbars&&this.options.customStyle&&(this.options.listenX?this.wrapper.style.right="8px":this.wrapper.style.bottom="8px")):(e.removeClass(this.wrapper,"iScrollBothScrollbars"),e.addClass(this.wrapper,"iScrollLoneScrollbar"),this.options.defaultScrollbars&&this.options.customStyle&&(this.options.listenX?this.wrapper.style.right="2px":this.wrapper.style.bottom="2px")),this.wrapper.offsetHeight,this.options.listenX&&(this.wrapperWidth=this.wrapper.clientWidth,this.options.resize?(this.indicatorWidth=c.max(c.round(this.wrapperWidth*this.wrapperWidth/(this.scroller.scrollerWidth||this.wrapperWidth||1)),8),this.indicatorStyle.width=this.indicatorWidth+"px"):this.indicatorWidth=this.indicator.clientWidth,this.maxPosX=this.wrapperWidth-this.indicatorWidth,"clip"==this.options.shrink?(this.minBoundaryX=-this.indicatorWidth+8,this.maxBoundaryX=this.wrapperWidth-8):(this.minBoundaryX=0,this.maxBoundaryX=this.maxPosX),this.sizeRatioX=this.options.speedRatioX||this.scroller.maxScrollX&&this.maxPosX/this.scroller.maxScrollX),this.options.listenY&&(this.wrapperHeight=this.wrapper.clientHeight,this.options.resize?(this.indicatorHeight=c.max(c.round(this.wrapperHeight*this.wrapperHeight/(this.scroller.scrollerHeight||this.wrapperHeight||1)),8),this.indicatorStyle.height=this.indicatorHeight+"px"):this.indicatorHeight=this.indicator.clientHeight,this.maxPosY=this.wrapperHeight-this.indicatorHeight,"clip"==this.options.shrink?(this.minBoundaryY=-this.indicatorHeight+8,this.maxBoundaryY=this.wrapperHeight-8):(this.minBoundaryY=0,this.maxBoundaryY=this.maxPosY),this.maxPosY=this.wrapperHeight-this.indicatorHeight,this.sizeRatioY=this.options.speedRatioY||this.scroller.maxScrollY&&this.maxPosY/this.scroller.maxScrollY),this.updatePosition() 2 | },updatePosition:function(){var a=this.options.listenX&&c.round(this.sizeRatioX*this.scroller.x)||0,b=this.options.listenY&&c.round(this.sizeRatioY*this.scroller.y)||0;this.options.ignoreBoundaries||(athis.maxBoundaryX?"scale"==this.options.shrink?(this.width=c.max(this.indicatorWidth-(a-this.maxPosX),8),this.indicatorStyle.width=this.width+"px",a=this.maxPosX+this.indicatorWidth-this.width):a=this.maxBoundaryX:"scale"==this.options.shrink&&this.width!=this.indicatorWidth&&(this.width=this.indicatorWidth,this.indicatorStyle.width=this.width+"px"),bthis.maxBoundaryY?"scale"==this.options.shrink?(this.height=c.max(this.indicatorHeight-3*(b-this.maxPosY),8),this.indicatorStyle.height=this.height+"px",b=this.maxPosY+this.indicatorHeight-this.height):b=this.maxBoundaryY:"scale"==this.options.shrink&&this.height!=this.indicatorHeight&&(this.height=this.indicatorHeight,this.indicatorStyle.height=this.height+"px")),this.x=a,this.y=b,this.scroller.options.useTransform?this.indicatorStyle[e.style.transform]="translate("+a+"px,"+b+"px)"+this.scroller.translateZ:(this.indicatorStyle.left=a+"px",this.indicatorStyle.top=b+"px")},_pos:function(a,b){0>a?a=0:a>this.maxPosX&&(a=this.maxPosX),0>b?b=0:b>this.maxPosY&&(b=this.maxPosY),a=this.options.listenX?c.round(a/this.sizeRatioX):this.scroller.x,b=this.options.listenY?c.round(b/this.sizeRatioY):this.scroller.y,this.scroller.scrollTo(a,b)},fade:function(a,b){if(!b||this.visible){clearTimeout(this.fadeTimeout),this.fadeTimeout=null;var c=a?250:500,d=a?0:300;a=a?"1":"0",this.wrapperStyle[e.style.transitionDuration]=c+"ms",this.fadeTimeout=setTimeout(function(a){this.wrapperStyle.opacity=a,this.visible=+a}.bind(this,a),d)}}},f.utils=e,"function"==typeof define&&(define.amd||define.cmd)?define(function(a,b,c){c.exports=f}):a.IScroll=f}(window,document,Math); -------------------------------------------------------------------------------- /dist/jquery.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery v2.2.3 | (c) jQuery Foundation | jquery.org/license */ 2 | !function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=a.document,e=c.slice,f=c.concat,g=c.push,h=c.indexOf,i={},j=i.toString,k=i.hasOwnProperty,l={},m="2.2.3",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return e.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:e.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a){return n.each(this,a)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(e.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor()},push:g,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(n.isPlainObject(d)||(e=n.isArray(d)))?(e?(e=!1,f=c&&n.isArray(c)?c:[]):f=c&&n.isPlainObject(c)?c:{},g[b]=n.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){var b=a&&a.toString();return!n.isArray(a)&&b-parseFloat(b)+1>=0},isPlainObject:function(a){var b;if("object"!==n.type(a)||a.nodeType||n.isWindow(a))return!1;if(a.constructor&&!k.call(a,"constructor")&&!k.call(a.constructor.prototype||{},"isPrototypeOf"))return!1;for(b in a);return void 0===b||k.call(a,b)},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?i[j.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=n.trim(a),a&&(1===a.indexOf("use strict")?(b=d.createElement("script"),b.text=a,d.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b){var c,d=0;if(s(a)){for(c=a.length;c>d;d++)if(b.call(a[d],d,a[d])===!1)break}else for(d in a)if(b.call(a[d],d,a[d])===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):g.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:h.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,e,g=0,h=[];if(s(a))for(d=a.length;d>g;g++)e=b(a[g],g,c),null!=e&&h.push(e);else for(g in a)e=b(a[g],g,c),null!=e&&h.push(e);return f.apply([],h)},guid:1,proxy:function(a,b){var c,d,f;return"string"==typeof b&&(c=a[b],b=a,a=c),n.isFunction(a)?(d=e.call(arguments,2),f=function(){return a.apply(b||this,d.concat(e.call(arguments)))},f.guid=a.guid=a.guid||n.guid++,f):void 0},now:Date.now,support:l}),"function"==typeof Symbol&&(n.fn[Symbol.iterator]=c[Symbol.iterator]),n.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(a,b){i["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=!!a&&"length"in a&&a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ga(),z=ga(),A=ga(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+M+"))|)"+L+"*\\]",O=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+N+")*)|.*)\\)|)",P=new RegExp(L+"+","g"),Q=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),R=new RegExp("^"+L+"*,"+L+"*"),S=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),T=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),U=new RegExp(O),V=new RegExp("^"+M+"$"),W={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M+"|[*])"),ATTR:new RegExp("^"+N),PSEUDO:new RegExp("^"+O),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},X=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Z=/^[^{]+\{\s*\[native \w/,$=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,_=/[+~]/,aa=/'|\\/g,ba=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),ca=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},da=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(ea){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fa(a,b,d,e){var f,h,j,k,l,o,r,s,w=b&&b.ownerDocument,x=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==x&&9!==x&&11!==x)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==x&&(o=$.exec(a)))if(f=o[1]){if(9===x){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(w&&(j=w.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(o[2])return H.apply(d,b.getElementsByTagName(a)),d;if((f=o[3])&&c.getElementsByClassName&&b.getElementsByClassName)return H.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==x)w=b,s=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(aa,"\\$&"):b.setAttribute("id",k=u),r=g(a),h=r.length,l=V.test(k)?"#"+k:"[id='"+k+"']";while(h--)r[h]=l+" "+qa(r[h]);s=r.join(","),w=_.test(a)&&oa(b.parentNode)||b}if(s)try{return H.apply(d,w.querySelectorAll(s)),d}catch(y){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(Q,"$1"),b,d,e)}function ga(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ha(a){return a[u]=!0,a}function ia(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ja(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function ka(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function la(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function na(a){return ha(function(b){return b=+b,ha(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function oa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=fa.support={},f=fa.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fa.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ia(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ia(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Z.test(n.getElementsByClassName),c.getById=ia(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return"undefined"!=typeof b.getElementsByClassName&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=Z.test(n.querySelectorAll))&&(ia(function(a){o.appendChild(a).innerHTML="",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ia(function(a){var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Z.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ia(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",O)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Z.test(o.compareDocumentPosition),t=b||Z.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return ka(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?ka(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},fa.matches=function(a,b){return fa(a,null,null,b)},fa.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(T,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fa(b,n,null,[a]).length>0},fa.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fa.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fa.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fa.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fa.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fa.selectors={cacheLength:50,createPseudo:ha,match:W,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ba,ca),a[3]=(a[3]||a[4]||a[5]||"").replace(ba,ca),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fa.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fa.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return W.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&U.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ba,ca).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fa.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(P," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fa.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ha(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ha(function(a){var b=[],c=[],d=h(a.replace(Q,"$1"));return d[u]?ha(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ha(function(a){return function(b){return fa(a,b).length>0}}),contains:ha(function(a){return a=a.replace(ba,ca),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ha(function(a){return V.test(a||"")||fa.error("unsupported lang: "+a),a=a.replace(ba,ca).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Y.test(a.nodeName)},input:function(a){return X.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:na(function(){return[0]}),last:na(function(a,b){return[b-1]}),eq:na(function(a,b,c){return[0>c?c+b:c]}),even:na(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:na(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:na(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:na(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function ra(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j,k=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(j=b[u]||(b[u]={}),i=j[b.uniqueID]||(j[b.uniqueID]={}),(h=i[d])&&h[0]===w&&h[1]===f)return k[2]=h[2];if(i[d]=k,k[2]=a(b,c,g))return!0}}}function sa(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ta(a,b,c){for(var d=0,e=b.length;e>d;d++)fa(a,b[d],c);return c}function ua(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(c&&!c(f,d,e)||(g.push(f),j&&b.push(h)));return g}function va(a,b,c,d,e,f){return d&&!d[u]&&(d=va(d)),e&&!e[u]&&(e=va(e,f)),ha(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ta(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ua(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ua(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ua(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function wa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ra(function(a){return a===b},h,!0),l=ra(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[ra(sa(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return va(i>1&&sa(m),i>1&&qa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(Q,"$1"),c,e>i&&wa(a.slice(i,e)),f>e&&wa(a=a.slice(e)),f>e&&qa(a))}m.push(c)}return sa(m)}function xa(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=F.call(i));u=ua(u)}H.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&fa.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ha(f):f}return h=fa.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xa(e,d)),f.selector=a}return f},i=fa.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ba,ca),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=W.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ba,ca),_.test(j[0].type)&&oa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qa(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,!b||_.test(a)&&oa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ia(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ia(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||ja("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ia(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ja("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ia(function(a){return null==a.getAttribute("disabled")})||ja(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fa}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.uniqueSort=n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},v=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},w=n.expr.match.needsContext,x=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,y=/^.[^:#\[\.,]*$/;function z(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(y.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return h.call(b,a)>-1!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;c>b;b++)if(n.contains(e[b],this))return!0}));for(b=0;c>b;b++)n.find(a,e[b],d);return d=this.pushStack(c>1?n.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(z(this,a||[],!1))},not:function(a){return this.pushStack(z(this,a||[],!0))},is:function(a){return!!z(this,"string"==typeof a&&w.test(a)?n(a):a||[],!1).length}});var A,B=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=n.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||A,"string"==typeof a){if(e="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:B.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),x.test(e[1])&&n.isPlainObject(b))for(e in b)n.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}return f=d.getElementById(e[2]),f&&f.parentNode&&(this.length=1,this[0]=f),this.context=d,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?void 0!==c.ready?c.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};C.prototype=n.fn,A=n(d);var D=/^(?:parents|prev(?:Until|All))/,E={children:!0,contents:!0,next:!0,prev:!0};n.fn.extend({has:function(a){var b=n(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(n.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=w.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?h.call(n(a),this[0]):h.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.uniqueSort(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function F(a,b){while((a=a[b])&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return u(a,"parentNode")},parentsUntil:function(a,b,c){return u(a,"parentNode",c)},next:function(a){return F(a,"nextSibling")},prev:function(a){return F(a,"previousSibling")},nextAll:function(a){return u(a,"nextSibling")},prevAll:function(a){return u(a,"previousSibling")},nextUntil:function(a,b,c){return u(a,"nextSibling",c)},prevUntil:function(a,b,c){return u(a,"previousSibling",c)},siblings:function(a){return v((a.parentNode||{}).firstChild,a)},children:function(a){return v(a.firstChild)},contents:function(a){return a.contentDocument||n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(E[a]||n.uniqueSort(e),D.test(a)&&e.reverse()),this.pushStack(e)}});var G=/\S+/g;function H(a){var b={};return n.each(a.match(G)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?H(a):n.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h-1)f.splice(c,1),h>=c&&h--}),this},has:function(a){return a?n.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=g=[],c||(f=c=""),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().progress(c.notify).done(c.resolve).fail(c.reject):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=e.call(arguments),d=c.length,f=1!==d||a&&n.isFunction(a.promise)?d:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?e.call(arguments):d,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(d>1)for(i=new Array(d),j=new Array(d),k=new Array(d);d>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().progress(h(b,j,i)).done(h(b,k,c)).fail(g.reject):--f;return f||g.resolveWith(k,c),g.promise()}});var I;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(I.resolveWith(d,[n]),n.fn.triggerHandler&&(n(d).triggerHandler("ready"),n(d).off("ready"))))}});function J(){d.removeEventListener("DOMContentLoaded",J),a.removeEventListener("load",J),n.ready()}n.ready.promise=function(b){return I||(I=n.Deferred(),"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll?a.setTimeout(n.ready):(d.addEventListener("DOMContentLoaded",J),a.addEventListener("load",J))),I.promise(b)},n.ready.promise();var K=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)K(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},L=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function M(){this.expando=n.expando+M.uid++}M.uid=1,M.prototype={register:function(a,b){var c=b||{};return a.nodeType?a[this.expando]=c:Object.defineProperty(a,this.expando,{value:c,writable:!0,configurable:!0}),a[this.expando]},cache:function(a){if(!L(a))return{};var b=a[this.expando];return b||(b={},L(a)&&(a.nodeType?a[this.expando]=b:Object.defineProperty(a,this.expando,{value:b,configurable:!0}))),b},set:function(a,b,c){var d,e=this.cache(a);if("string"==typeof b)e[b]=c;else for(d in b)e[d]=b[d];return e},get:function(a,b){return void 0===b?this.cache(a):a[this.expando]&&a[this.expando][b]},access:function(a,b,c){var d;return void 0===b||b&&"string"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,n.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=a[this.expando];if(void 0!==f){if(void 0===b)this.register(a);else{n.isArray(b)?d=b.concat(b.map(n.camelCase)):(e=n.camelCase(b),b in f?d=[b,e]:(d=e,d=d in f?[d]:d.match(G)||[])),c=d.length;while(c--)delete f[d[c]]}(void 0===b||n.isEmptyObject(f))&&(a.nodeType?a[this.expando]=void 0:delete a[this.expando])}},hasData:function(a){var b=a[this.expando];return void 0!==b&&!n.isEmptyObject(b)}};var N=new M,O=new M,P=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,Q=/[A-Z]/g;function R(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(Q,"-$&").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:P.test(c)?n.parseJSON(c):c; 3 | }catch(e){}O.set(a,b,c)}else c=void 0;return c}n.extend({hasData:function(a){return O.hasData(a)||N.hasData(a)},data:function(a,b,c){return O.access(a,b,c)},removeData:function(a,b){O.remove(a,b)},_data:function(a,b,c){return N.access(a,b,c)},_removeData:function(a,b){N.remove(a,b)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=O.get(f),1===f.nodeType&&!N.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),R(f,d,e[d])));N.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){O.set(this,a)}):K(this,function(b){var c,d;if(f&&void 0===b){if(c=O.get(f,a)||O.get(f,a.replace(Q,"-$&").toLowerCase()),void 0!==c)return c;if(d=n.camelCase(a),c=O.get(f,d),void 0!==c)return c;if(c=R(f,d,void 0),void 0!==c)return c}else d=n.camelCase(a),this.each(function(){var c=O.get(this,d);O.set(this,d,b),a.indexOf("-")>-1&&void 0!==c&&O.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){O.remove(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=N.get(a,b),c&&(!d||n.isArray(c)?d=N.access(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return N.get(a,c)||N.access(a,c,{empty:n.Callbacks("once memory").add(function(){N.remove(a,[b+"queue",c])})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length",""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};$.optgroup=$.option,$.tbody=$.tfoot=$.colgroup=$.caption=$.thead,$.th=$.td;function _(a,b){var c="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&n.nodeName(a,b)?n.merge([a],c):c}function aa(a,b){for(var c=0,d=a.length;d>c;c++)N.set(a[c],"globalEval",!b||N.get(b[c],"globalEval"))}var ba=/<|&#?\w+;/;function ca(a,b,c,d,e){for(var f,g,h,i,j,k,l=b.createDocumentFragment(),m=[],o=0,p=a.length;p>o;o++)if(f=a[o],f||0===f)if("object"===n.type(f))n.merge(m,f.nodeType?[f]:f);else if(ba.test(f)){g=g||l.appendChild(b.createElement("div")),h=(Y.exec(f)||["",""])[1].toLowerCase(),i=$[h]||$._default,g.innerHTML=i[1]+n.htmlPrefilter(f)+i[2],k=i[0];while(k--)g=g.lastChild;n.merge(m,g.childNodes),g=l.firstChild,g.textContent=""}else m.push(b.createTextNode(f));l.textContent="",o=0;while(f=m[o++])if(d&&n.inArray(f,d)>-1)e&&e.push(f);else if(j=n.contains(f.ownerDocument,f),g=_(l.appendChild(f),"script"),j&&aa(g),c){k=0;while(f=g[k++])Z.test(f.type||"")&&c.push(f)}return l}!function(){var a=d.createDocumentFragment(),b=a.appendChild(d.createElement("div")),c=d.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),l.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="",l.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var da=/^key/,ea=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,fa=/^([^.]*)(?:\.(.+)|)/;function ga(){return!0}function ha(){return!1}function ia(){try{return d.activeElement}catch(a){}}function ja(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)ja(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=ha;else if(!e)return a;return 1===f&&(g=e,e=function(a){return n().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=n.guid++)),a.each(function(){n.event.add(this,b,e,d,c)})}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=N.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=n.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return"undefined"!=typeof n&&n.event.triggered!==b.type?n.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(G)||[""],j=b.length;while(j--)h=fa.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o&&(l=n.event.special[o]||{},o=(e?l.delegateType:l.bindType)||o,l=n.event.special[o]||{},k=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},f),(m=i[o])||(m=i[o]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(o,g)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),n.event.global[o]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=N.hasData(a)&&N.get(a);if(r&&(i=r.events)){b=(b||"").match(G)||[""],j=b.length;while(j--)if(h=fa.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=i[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&q!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete i[o])}else for(o in i)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(i)&&N.remove(a,"handle events")}},dispatch:function(a){a=n.event.fix(a);var b,c,d,f,g,h=[],i=e.call(arguments),j=(N.get(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())a.rnamespace&&!a.rnamespace.test(g.namespace)||(a.handleObj=g,a.data=g.data,d=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==d&&(a.result=d)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&("click"!==a.type||isNaN(a.button)||a.button<1))for(;i!==this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>-1:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h]*)\/>/gi,la=/\s*$/g;function pa(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function qa(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function ra(a){var b=na.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function sa(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(N.hasData(a)&&(f=N.access(a),g=N.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)n.event.add(b,e,j[e][c])}O.hasData(a)&&(h=O.access(a),i=n.extend({},h),O.set(b,i))}}function ta(a,b){var c=b.nodeName.toLowerCase();"input"===c&&X.test(a.type)?b.checked=a.checked:"input"!==c&&"textarea"!==c||(b.defaultValue=a.defaultValue)}function ua(a,b,c,d){b=f.apply([],b);var e,g,h,i,j,k,m=0,o=a.length,p=o-1,q=b[0],r=n.isFunction(q);if(r||o>1&&"string"==typeof q&&!l.checkClone&&ma.test(q))return a.each(function(e){var f=a.eq(e);r&&(b[0]=q.call(this,e,f.html())),ua(f,b,c,d)});if(o&&(e=ca(b,a[0].ownerDocument,!1,a,d),g=e.firstChild,1===e.childNodes.length&&(e=g),g||d)){for(h=n.map(_(e,"script"),qa),i=h.length;o>m;m++)j=e,m!==p&&(j=n.clone(j,!0,!0),i&&n.merge(h,_(j,"script"))),c.call(a[m],j,m);if(i)for(k=h[h.length-1].ownerDocument,n.map(h,ra),m=0;i>m;m++)j=h[m],Z.test(j.type||"")&&!N.access(j,"globalEval")&&n.contains(k,j)&&(j.src?n._evalUrl&&n._evalUrl(j.src):n.globalEval(j.textContent.replace(oa,"")))}return a}function va(a,b,c){for(var d,e=b?n.filter(b,a):a,f=0;null!=(d=e[f]);f++)c||1!==d.nodeType||n.cleanData(_(d)),d.parentNode&&(c&&n.contains(d.ownerDocument,d)&&aa(_(d,"script")),d.parentNode.removeChild(d));return a}n.extend({htmlPrefilter:function(a){return a.replace(ka,"<$1>")},clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=n.contains(a.ownerDocument,a);if(!(l.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(g=_(h),f=_(a),d=0,e=f.length;e>d;d++)ta(f[d],g[d]);if(b)if(c)for(f=f||_(a),g=g||_(h),d=0,e=f.length;e>d;d++)sa(f[d],g[d]);else sa(a,h);return g=_(h,"script"),g.length>0&&aa(g,!i&&_(a,"script")),h},cleanData:function(a){for(var b,c,d,e=n.event.special,f=0;void 0!==(c=a[f]);f++)if(L(c)){if(b=c[N.expando]){if(b.events)for(d in b.events)e[d]?n.event.remove(c,d):n.removeEvent(c,d,b.handle);c[N.expando]=void 0}c[O.expando]&&(c[O.expando]=void 0)}}}),n.fn.extend({domManip:ua,detach:function(a){return va(this,a,!0)},remove:function(a){return va(this,a)},text:function(a){return K(this,function(a){return void 0===a?n.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=a)})},null,a,arguments.length)},append:function(){return ua(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=pa(this,a);b.appendChild(a)}})},prepend:function(){return ua(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=pa(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return ua(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return ua(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(n.cleanData(_(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return K(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!la.test(a)&&!$[(Y.exec(a)||["",""])[1].toLowerCase()]){a=n.htmlPrefilter(a);try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(_(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=[];return ua(this,arguments,function(b){var c=this.parentNode;n.inArray(this,a)<0&&(n.cleanData(_(this)),c&&c.replaceChild(b,this))},a)}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=[],e=n(a),f=e.length-1,h=0;f>=h;h++)c=h===f?this:this.clone(!0),n(e[h])[b](c),g.apply(d,c.get());return this.pushStack(d)}});var wa,xa={HTML:"block",BODY:"block"};function ya(a,b){var c=n(b.createElement(a)).appendTo(b.body),d=n.css(c[0],"display");return c.detach(),d}function za(a){var b=d,c=xa[a];return c||(c=ya(a,b),"none"!==c&&c||(wa=(wa||n("