Add frontend assets and plugin bundles
Add the legacy frontend themes, scripts, and plugin assets required by the main SPOTA interfaces.
This commit is contained in:
21
js/PIE.htc
Normal file
21
js/PIE.htc
Normal file
@@ -0,0 +1,21 @@
|
||||
<!--
|
||||
PIE: CSS3 rendering for IE
|
||||
Version 2.0beta1
|
||||
http://css3pie.com
|
||||
Dual-licensed for use under the Apache License Version 2.0 or the General Public License (GPL) Version 2.
|
||||
-->
|
||||
<PUBLIC:COMPONENT lightWeight="true">
|
||||
<!-- saved from url=(0014)about:internet -->
|
||||
<PUBLIC:ATTACH EVENT="oncontentready" FOR="element" ONEVENT="init()" />
|
||||
<PUBLIC:ATTACH EVENT="ondocumentready" FOR="element" ONEVENT="init()" />
|
||||
<PUBLIC:ATTACH EVENT="ondetach" FOR="element" ONEVENT="cleanup()" />
|
||||
<script type="text/javascript">
|
||||
var d=element,g=d.document,j=g.documentMode||0;
|
||||
!window.PIE&&j<10&&function(){var a={},k,i,b,l,h;window.PIE={attach:function(c){a[c.uniqueID]=c},detach:function(c){delete a[c.uniqueID]}};b=g.createElement("div");b.innerHTML="<!--[if IE 6]><i></i><![endif]--\>";l=b.getElementsByTagName("i")[0];if(b=g.location.href.match(/pie-load-path=([^&]+)/))b=decodeURIComponent(b[1]);b||(b=g.documentElement.currentStyle.getAttribute((l?"":"-")+"pie-load-path"));if(!b){k=/BEHAVIOR: url\(([^\)]*PIE[^\)]*)/i;i=function(c){for(var f=c.length,e;f--;)if(e=(e=c[f].cssText.match(k))?
|
||||
e[1].substring(0,e[1].lastIndexOf("/")):i(c[f].imports))break;return e};b=i(g.styleSheets)}if(b){h=g.createElement("script");h.onreadystatechange=function(){var c=window.PIE,f=h.readyState,e;if(a&&(f==="complete"||f==="loaded"))if("version"in c){for(e in a)a.hasOwnProperty(e)&&c.attach(a[e]);a=0}};h.src=b+"/PIE_IE"+(j<9?"678":"9")+".js";(g.getElementsByTagName("head")[0]||g.body).appendChild(h)}}();function init(){if(g.media!=="print"){var a=window.PIE;a&&a.attach(d)}}
|
||||
function cleanup(){if(g.media!=="print"){var a=window.PIE;a&&a.detach(d)}d=0}d.readyState==="complete"&&init();
|
||||
|
||||
</script>
|
||||
|
||||
<script type="text/vbscript"></script>
|
||||
</PUBLIC:COMPONENT>
|
||||
72
js/PIE_IE678.js
Normal file
72
js/PIE_IE678.js
Normal file
@@ -0,0 +1,72 @@
|
||||
(function(O,H){var h=O.PIE||(O.PIE={});h.Fa=function(a){var b,d,e,c,g=arguments;b=1;for(d=g.length;b<d;b++){c=g[b];for(e in c)if(c.hasOwnProperty(e))a[e]=c[e]}return a};h.Fa(h,{z:"-pie-",qb:"Pie",Na:"pie_",uc:{TD:1,TH:1},Tb:{TABLE:1,THEAD:1,TBODY:1,TFOOT:1,TR:1,INPUT:1,TEXTAREA:1,SELECT:1,OPTION:1,IMG:1,HR:1},Zb:{A:1,INPUT:1,TEXTAREA:1,SELECT:1,BUTTON:1},Hd:{submit:1,button:1,reset:1},pd:function(){}});try{H.execCommand("BackgroundImageCache",false,true)}catch(ca){}(function(){for(var a=4,b=H.createElement("div"),
|
||||
d=b.getElementsByTagName("i");b.innerHTML="<!--[if gt IE "+ ++a+"]><i></i><![endif]--\>",d[0];);h.U=a;if(a===6)h.z=h.z.replace(/^-/,"");h.qa=H.documentMode||h.U;b.innerHTML='<v:shape adj="1"/>';a=b.firstChild;a.style.behavior="url(#default#VML)";h.tc=typeof a.adj==="object"})();(function(){var a=0,b={};h.Q={pa:function(d){return d&&d._pieId||(d._pieId="_"+a++)},Ac:function(d,e,c){var g=b[d],i,j;if(g)Object.prototype.toString.call(g)==="[object Array]"?g.push([e,c]):e.call(c,g);else{j=b[d]=[[e,c]];
|
||||
i=new Image;i.onload=function(){g=b[d]={f:i.width,e:i.height};for(var f=0,k=j.length;f<k;f++)j[f][0].call(j[f][1],g);i.onload=null};i.src=d}}}})();h.nb={ge:{top:0,right:90,bottom:180,left:270},xd:function(a,b,d,e){a=e.la;e=e.ab;var c;if(a)a=a.jd();else if(e)if(e[1]){a=e[0]=="top"||e[1]=="top"?b:-b;e=e[0]=="left"||e[1]=="left"?-d:d;a=Math.atan2(e,a)*180/Math.PI}else a=this.ge[e[0]];else a=180;for(;a<0;)a+=360;a%=360;c=h.nb.Od(b/2,d/2,a,a>=180?0:b,a<90||a>270?0:d);e=c[0];c=c[1];b=b-e;d=d-c;return{la:a,
|
||||
qd:e,rd:c,ae:b,be:d,Jd:h.nb.ld(b,d,e,c)}},Od:function(a,b,d,e,c){if(d===0||d===180)return[a,c];else if(d===90||d===270)return[e,b];else{d=Math.tan((d-90)*Math.PI/180);a=d*a-b;b=-1/d;e=b*e-c;c=b-d;return[(e-a)/c,(d*e-b*a)/c]}},ld:function(a,b,d,e){a=d-a;b=e-b;return Math.abs(a===0?b:b===0?a:Math.sqrt(a*a+b*b))}};h.ja=function(){this.Eb=[];this.hc={}};h.ja.prototype={ca:function(a){var b=h.Q.pa(a),d=this.hc,e=this.Eb;if(!(b in d)){d[b]=e.length;e.push(a)}},Ka:function(a){a=h.Q.pa(a);var b=this.hc;if(a&&
|
||||
a in b){delete this.Eb[b[a]];delete b[a]}},Da:function(){for(var a=this.Eb,b=a.length;b--;)a[b]&&a[b]()}};h.Pa=new h.ja;h.Pa.Ud=function(){var a=this,b;if(!a.Vd){b=H.documentElement.currentStyle.getAttribute(h.z+"poll-interval")||250;(function d(){a.Da();setTimeout(d,b)})();a.Vd=1}};(function(){function a(){h.J.Da();O.detachEvent("onunload",a);O.PIE=null}h.J=new h.ja;O.attachEvent("onunload",a);h.J.za=function(b,d,e){b.attachEvent(d,e);this.ca(function(){b.detachEvent(d,e)})}})();h.Sa=new h.ja;h.J.za(O,
|
||||
"onresize",function(){h.Sa.Da()});(function(){function a(){h.pb.Da()}h.pb=new h.ja;h.J.za(O,"onscroll",a);h.Sa.ca(a)})();(function(){function a(){d=h.mb.kd()}function b(){if(d){for(var e=0,c=d.length;e<c;e++)h.attach(d[e]);d=0}}var d;h.J.za(O,"onbeforeprint",a);h.J.za(O,"onafterprint",b)})();h.ob=new h.ja;h.J.za(H,"onmouseup",function(){h.ob.Da()});h.Qa=function(){function a(f){this.ha=f}var b=H.createElement("length-calc"),d=H.body||H.documentElement,e=b.style,c={},g=["mm","cm","in","pt","pc"],i=
|
||||
g.length,j={};e.position="absolute";e.top=e.left="-9999px";for(d.appendChild(b);i--;){e.width="100"+g[i];c[g[i]]=b.offsetWidth/100}d.removeChild(b);e.width="1em";a.prototype={Fb:/(px|em|ex|mm|cm|in|pt|pc|%)$/,dc:function(){var f=this.Md;if(f===void 0)f=this.Md=parseFloat(this.ha);return f},Ab:function(){var f=this.he;if(!f)f=this.he=(f=this.ha.match(this.Fb))&&f[0]||"px";return f},a:function(f,k){var l=this.dc(),m=this.Ab();switch(m){case "px":return l;case "%":return l*(typeof k==="function"?k():
|
||||
k)/100;case "em":return l*this.yb(f);case "ex":return l*this.yb(f)/2;default:return l*c[m]}},yb:function(f){var k=f.currentStyle.fontSize,l,m;if(k.indexOf("px")>0)return parseFloat(k);else if(f.tagName in h.Tb){m=this;l=f.parentNode;return h.m(k).a(l,function(){return m.yb(l)})}else{f.appendChild(b);k=b.offsetWidth;b.parentNode===f&&f.removeChild(b);return k}}};a.gb=function(f){return f/c.pt};h.m=function(f){return j[f]||(j[f]=new a(f))};return a}();h.kb=function(){function a(c){this.ga=c}var b=h.m("50%"),
|
||||
d={top:1,center:1,bottom:1},e={left:1,center:1,right:1};a.prototype={Bd:function(){if(!this.Rb){var c=this.ga,g=c.length,i=h.q,j=i.ya,f=h.m("0");j=j.W;f=["left",f,"top",f];if(g===1){c.push(new i.rb(j,"center"));g++}if(g===2){j&(c[0].h|c[1].h)&&c[0].c in d&&c[1].c in e&&c.push(c.shift());if(c[0].h&j)if(c[0].c==="center")f[1]=b;else f[0]=c[0].c;else if(c[0].G())f[1]=h.m(c[0].c);if(c[1].h&j)if(c[1].c==="center")f[3]=b;else f[2]=c[1].c;else if(c[1].G())f[3]=h.m(c[1].c)}this.Rb=f}return this.Rb},coords:function(c,
|
||||
g,i){var j=this.Bd(),f=j[1].a(c,g);c=j[3].a(c,i);return{x:j[0]==="right"?g-f:f,y:j[2]==="bottom"?i-c:c}}};return a}();h.Ma=function(){function a(b,d){this.f=b;this.e=d}a.prototype={a:function(b,d,e,c,g){var i=this.f,j=this.e,f=d/e;c=c/g;if(i==="contain"){i=c>f?d:e*c;j=c>f?d/c:e}else if(i==="cover"){i=c<f?d:e*c;j=c<f?d/c:e}else if(i==="auto"){j=j==="auto"?g:j.a(b,e);i=j*c}else{i=i.a(b,d);j=j==="auto"?i/c:j.a(b,e)}return{f:i,e:j}}};a.Jc=new a("auto","auto");return a}();h.Cc=function(){function a(b){this.ha=
|
||||
b}a.prototype={Fb:/[a-z]+$/i,Ab:function(){return this.Wc||(this.Wc=this.ha.match(this.Fb)[0].toLowerCase())},jd:function(){var b=this.Rc,d;if(b===undefined){b=this.Ab();d=parseFloat(this.ha,10);b=this.Rc=b==="deg"?d:b==="rad"?d/Math.PI*180:b==="grad"?d/400*360:b==="turn"?d*360:0}return b}};return a}();h.Ic=function(){function a(f,k,l){if(l<0)l+=1;else if(l>1)l-=1;return 255*(6*l<1?f+(k-f)*l*6:2*l<1?k:3*l<2?f+(k-f)*(2/3-l)*6:f)}function b(f){this.ha=f}var d={};b.Td=/\s*rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(,\s*(\d+|\d*\.\d+))?\s*\)\s*/;
|
||||
b.Fd=/\s*hsla?\(\s*(\d*\.?\d+)\s*,\s*(\d{1,3})%\s*,\s*(\d{1,3})%\s*(,\s*(\d+|\d*\.\d+))?\s*\)\s*/;b.db={};for(var e="black|0|navy|3k|darkblue|b|mediumblue|1u|blue|1e|darkgreen|jk1|green|5j4|teal|3k|darkcyan|26j|deepskyblue|ad0|darkturquoise|2xe|mediumspringgreen|8nd|lime|va|springgreen|3j|aqua|3k|cyan|0|midnightblue|xunl|dodgerblue|7ogf|lightseagreen|2zsb|forestgreen|2lbs|seagreen|guut|darkslategray|12pk|limegreen|4wkj|mediumseagreen|dwlb|turquoise|5v8f|royalblue|r2p|steelblue|75qr|darkslateblue|2fh3|mediumturquoise|ta9|indigo|32d2|darkolivegreen|emr1|cadetblue|ebu9|cornflowerblue|6z4d|mediumaquamarine|3459|dimgray|3nwf|slateblue|1bok|olivedrab|1opi|slategray|6y5p|lightslategray|9vk9|mediumslateblue|5g0l|lawngreen|27ma|chartreuse|48ao|aquamarine|5w|maroon|18|purple|3k|olive|p6o|gray|3k|lightslateblue|5j7j|skyblue|4q98|lightskyblue|f|blueviolet|3bhk|darkred|15we|darkmagenta|3v|saddlebrown|djc|darkseagreen|69vg|lightgreen|1og1|mediumpurple|3ivc|darkviolet|sfv|palegreen|6zt1|darkorchid|awk|yellowgreen|292e|sienna|7r3v|brown|6sxp|darkgray|6bgf|lightblue|5vlp|greenyellow|7k9|paleturquoise|2pxb|lightsteelblue|169c|powderblue|5jc|firebrick|1rgc|darkgoldenrod|8z55|mediumorchid|2jm0|rosybrown|34jg|darkkhaki|1mfw|silver|49jp|mediumvioletred|8w5h|indianred|8tef|peru|82r|violetred|3ntd|feldspar|212d|chocolate|16eh|tan|ewe|lightgrey|1kqv|palevioletred|6h8g|metle|fnp|orchid|2dj2|goldenrod|abu|crimson|20ik|gainsboro|13mo|plum|12pt|burlywood|1j8q|lightcyan|3794|lavender|8agr|darksalmon|3rsw|violet|6wz8|palegoldenrod|k3g|lightcoral|28k6|khaki|k5o|aliceblue|3n7|honeydew|1dd|azure|f|sandybrown|5469|wheat|1q37|beige|4kp|whitesmoke|p|mintcream|1z9|ghostwhite|46bp|salmon|25bn|antiquewhite|l7p|linen|zz|lightgoldenrodyellow|1yk|oldlace|46qc|red|1gka|magenta|73|fuchsia|0|deeppink|3v8|orangered|9kd|tomato|5zb|hotpink|19p|coral|49o|darkorange|2i8|lightsalmon|41m|orange|w6|lightpink|3i9|pink|1ze|gold|4dx|peachpuff|qh|navajowhite|s4|moccasin|16w|bisque|f|mistyrose|t|blanchedalmond|1d8|papayawhip|so|lavenderblush|80|seashell|zd|cornsilk|ku|lemonchiffon|dt|floralwhite|z|snow|a|yellow|sm|lightyellow|68|ivory|g|white|f".split("|"),
|
||||
c=0,g=e.length,i=0,j;c<g;c+=2){i+=parseInt(e[c+1],36);j=i.toString(16);b.db[e[c]]="#000000".slice(0,-j.length)+j}b.prototype={parse:function(){if(!this.tb){var f=this.ha,k;if(k=f.match(b.Td)){f=this.rc(+k[1],+k[2],+k[3]);k=k[5]?+k[5]:1}else if(k=f.match(b.Fd)){var l=k[1],m=k[2],o=k[3],s,q;f=Math.round;m/=100;o/=100;if(m){m=o<=0.5?o*(m+1):o+m-o*m;s=o*2-m;l=l%360/360;o=a(s,m,l+1/3);q=a(s,m,l);l=a(s,m,l-1/3)}else o=q=l=o*255;f={Rd:f(o),td:f(q),Zc:f(l)};f=this.rc(f.Rd,f.td,f.Zc);k=k[5]?+k[5]:1}else{if(b.db.hasOwnProperty(k=
|
||||
f.toLowerCase()))f=b.db[k];k=f==="transparent"?0:1}this.tb=f;this.Qc=k}},rc:function(f,k,l){return"#"+(f<16?"0":"")+f.toString(16)+(k<16?"0":"")+k.toString(16)+(l<16?"0":"")+l.toString(16)},M:function(f){this.parse();return this.tb==="currentColor"?h.aa(f.currentStyle.color).M(f):this.tb},Y:function(){this.parse();return this.Qc}};h.aa=function(f){return d[f]||(d[f]=new b(f))};return b}();h.q=function(){function a(d){this.$a=d;this.ch=0;this.ga=[];this.Ja=0}var b=a.ya={La:1,Lb:2,u:4,Kc:8,Mb:16,W:32,
|
||||
I:64,wa:128,xa:256,Ta:512,Nc:1024,URL:2048};a.rb=function(d,e){this.h=d;this.c=e};a.rb.prototype={Ea:function(){return this.h&b.I||this.h&b.wa&&this.c==="0"},G:function(){return this.Ea()||this.h&b.Ta}};a.prototype={je:/\s/,Nd:/^[\+\-]?(\d*\.)?\d+/,url:/^url\(\s*("([^"]*)"|'([^']*)'|([!#$%&*-~]*))\s*\)/i,gc:/^\-?[_a-z][\w-]*/i,ce:/^("([^"]*)"|'([^']*)')/,Dd:/^#([\da-f]{6}|[\da-f]{3})/i,ie:{px:b.I,em:b.I,ex:b.I,mm:b.I,cm:b.I,"in":b.I,pt:b.I,pc:b.I,deg:b.La,rad:b.La,grad:b.La},cd:{rgb:1,rgba:1,hsl:1,
|
||||
hsla:1},next:function(d){function e(o,s){o=new a.rb(o,s);if(!d){k.ga.push(o);k.Ja++}return o}function c(){k.Ja++;return null}var g,i,j,f,k=this;if(this.Ja<this.ga.length)return this.ga[this.Ja++];for(;this.je.test(this.$a.charAt(this.ch));)this.ch++;if(this.ch>=this.$a.length)return c();i=this.ch;g=this.$a.substring(this.ch);j=g.charAt(0);switch(j){case "#":if(f=g.match(this.Dd)){this.ch+=f[0].length;return e(b.u,f[0])}break;case '"':case "'":if(f=g.match(this.ce)){this.ch+=f[0].length;return e(b.Nc,
|
||||
f[2]||f[3]||"")}break;case "/":case ",":this.ch++;return e(b.xa,j);case "u":if(f=g.match(this.url)){this.ch+=f[0].length;return e(b.URL,f[2]||f[3]||f[4]||"")}}if(f=g.match(this.Nd)){j=f[0];this.ch+=j.length;if(g.charAt(j.length)==="%"){this.ch++;return e(b.Ta,j+"%")}if(f=g.substring(j.length).match(this.gc)){j+=f[0];this.ch+=f[0].length;return e(this.ie[f[0].toLowerCase()]||b.Kc,j)}return e(b.wa,j)}if(f=g.match(this.gc)){j=f[0];this.ch+=j.length;if(j.toLowerCase()in h.Ic.db||j==="currentColor"||j===
|
||||
"transparent")return e(b.u,j);if(g.charAt(j.length)==="("){this.ch++;if(j.toLowerCase()in this.cd){g=function(o){return o&&o.h&b.wa};f=function(o){return o&&o.h&(b.wa|b.Ta)};var l=function(o,s){return o&&o.c===s},m=function(){return k.next(1)};if((j.charAt(0)==="r"?f(m()):g(m()))&&l(m(),",")&&f(m())&&l(m(),",")&&f(m())&&(j==="rgb"||j==="hsa"||l(m(),",")&&g(m()))&&l(m(),")"))return e(b.u,this.$a.substring(i,this.ch));return c()}return e(b.Mb,j)}return e(b.W,j)}this.ch++;return e(b.Lb,j)},C:function(){return this.ga[this.Ja-- -
|
||||
2]},all:function(){for(;this.next(););return this.ga},va:function(d,e){for(var c=[],g,i;g=this.next();){if(d(g)){i=true;this.C();break}c.push(g)}return e&&!i?null:c}};return a}();h.Kb=function(a){this.d=a};h.Kb.prototype={X:0,oc:function(){var a=this.ub,b;return!a||(b=this.n())&&(a.x!==b.x||a.y!==b.y)},Yd:function(){var a=this.ub,b;return!a||(b=this.n())&&(a.f!==b.f||a.e!==b.e)},cc:function(){var a=this.d,b=a.getBoundingClientRect(),d=h.qa===9,e=h.U===7,c=b.right-b.left;return{x:b.left,y:b.top,f:d||
|
||||
e?a.offsetWidth:c,e:d||e?a.offsetHeight:b.bottom-b.top,jc:e&&c?a.offsetWidth/c:1}},n:function(){return this.X?this.Va||(this.Va=this.cc()):this.cc()},Cd:function(){return!!this.ub},cb:function(){++this.X},ib:function(){if(!--this.X){if(this.Va)this.ub=this.Va;this.Va=null}}};(function(){function a(b){var d=h.Q.pa(b);return function(){if(this.X){var e=this.Pb||(this.Pb={});return d in e?e[d]:(e[d]=b.call(this))}else return b.call(this)}}h.p={X:0,ba:function(b){function d(e){this.d=e;this.Ob=this.T()}
|
||||
h.Fa(d.prototype,h.p,b);d.Vc={};return d},i:function(){var b=this.T(),d=this.constructor.Vc;return b?b in d?d[b]:(d[b]=this.ea(b)):null},T:a(function(){var b=this.d,d=this.constructor,e=b.style;b=b.currentStyle;var c=this.Aa,g=this.Ia,i=d.Tc||(d.Tc=h.z+c);d=d.Uc||(d.Uc=h.qb+g.charAt(0).toUpperCase()+g.substring(1));return e[d]||b.getAttribute(i)||e[g]||b.getAttribute(c)}),j:a(function(){return!!this.i()}),L:a(function(){var b=this.T(),d=b!==this.Ob;this.Ob=b;return d}),oa:a,cb:function(){++this.X},
|
||||
ib:function(){--this.X||delete this.Pb}}})();h.Hb=h.p.ba({Aa:h.z+"background",Ia:h.qb+"Background",Yc:{scroll:1,fixed:1,local:1},hb:{"repeat-x":1,"repeat-y":1,repeat:1,"no-repeat":1},nc:{"padding-box":1,"border-box":1,"content-box":1},Qd:{top:1,right:1,bottom:1,left:1,center:1},Zd:{contain:1,cover:1},fe:{top:1,bottom:1},Kd:{left:1,right:1},fb:{Oa:"backgroundClip",u:"backgroundColor",ia:"backgroundImage",Ra:"backgroundOrigin",P:"backgroundPosition",ka:"backgroundRepeat",Ua:"backgroundSize"},ea:function(a){function b(r){return r&&
|
||||
(r.G()&&h.m(r.c)||r.c==="auto"&&"auto")}var d=this.d.currentStyle,e,c,g,i=h.q.ya,j=i.xa,f=i.W,k=i.u,l,m,o=0,s=this.Qd,q,t,n,u,p={R:[]};if(this.xb()){e=new h.q(a);for(g={};c=e.next();){l=c.h;m=c.c;if(!g.V&&l&i.Mb&&m==="linear-gradient"){q={ua:[],V:m};for(t={};c=e.next();){l=c.h;m=c.c;if(l&i.Lb&&m===")"){t.color&&q.ua.push(t);q.ua.length>1&&h.Fa(g,q);break}if(l&k){if(q.la||q.ab){c=e.C();if(c.h!==j)break;e.next()}t={color:h.aa(m)};c=e.next();if(c.G())t.lc=h.m(c.c);else e.C()}else if(l&i.La&&!q.la&&!q.ab&&
|
||||
!t.color&&!q.ua.length)q.la=new h.Cc(c.c);else if(l&i.W&&m==="to"&&!q.ab&&!q.la&&!t.color&&!q.ua.length){n=this.fe;u=this.Kd;c=e.va(function(r){return!(r&&r.h&i.W&&(r.c in n||r.c in u))});l=c.length;c=[c[0]&&c[0].c,c[1]&&c[1].c];if(l<1||l>2||l>1&&(c[0]in n&&c[1]in n||c[0]in u&&c[1]in u))break;q.ab=c}else if(l&j&&m===","){if(t.color){q.ua.push(t);t={}}}else break}}else if(!g.V&&l&i.URL){g.Cb=m;g.V="image"}else if((c&&c.G()||c.h&f&&c.c in s)&&!g.ma){e.C();g.ma=new h.kb(e.va(function(r){return!(r&&r.G()||
|
||||
r.h&f&&r.c in s)},false))}else if(l&f)if(m in this.hb&&!g.bb)g.bb=m;else if(m in this.nc&&!g.Ya){g.Ya=m;if((c=e.next())&&c.h&f&&c.c in this.nc)g.Xa=c.c;else{g.Xa=m;e.C()}}else if(m in this.Yc&&!g.$c)g.$c=m;else return null;else if(l&k&&!p.color)p.color=h.aa(m);else if(l&j&&m==="/"&&!g.Za&&g.ma){c=e.next();if(c.h&f&&c.c in this.Zd)g.Za=new h.Ma(c.c);else if(q=b(c)){t=b(e.next());if(!t){t=q;e.C()}g.Za=new h.Ma(q,t)}else return null}else if(l&j&&m===","&&g.V){g.mc=a.substring(o,e.ch-1);o=e.ch;p.R.push(g);
|
||||
g={}}else return null}if(g.V){g.mc=a.substring(o);p.R.push(g)}p.bd=g.Xa}else this.yc(h.qa<9?function(){var r=this.fb,v=d[r.P+"X"],C=d[r.P+"Y"],y=d[r.ia],B=d[r.u];if(B!=="transparent")p.color=h.aa(B);if(y!=="none")p.R=[{V:"image",Cb:(new h.q(y)).next().c,bb:d[r.ka],ma:new h.kb((new h.q(v+" "+C)).all())}]}:function(){var r=this.fb,v=/\s*,\s*/,C=d[r.ia].split(v),y=d[r.u],B,F,G,K,J,w;if(y!=="transparent")p.color=h.aa(y);if((K=C.length)&&C[0]!=="none"){y=d[r.ka].split(v);B=d[r.P].split(v);F=d[r.Ra].split(v);
|
||||
G=d[r.Oa].split(v);r=d[r.Ua].split(v);p.R=[];for(v=0;v<K;v++)if((J=C[v])&&J!=="none"){w=r[v].split(" ");p.R.push({mc:J+" "+y[v]+" "+B[v]+" / "+r[v]+" "+F[v]+" "+G[v],V:"image",Cb:(new h.q(J)).next().c,bb:y[v],ma:new h.kb((new h.q(B[v])).all()),Ya:F[v],Xa:G[v],Za:new h.Ma(w[0],w[1])})}}});return p.color||p.R[0]?p:null},yc:function(a){var b=h.qa>8,d=this.fb,e=this.d.runtimeStyle,c=e[d.ia],g=e[d.u],i=e[d.ka],j,f,k,l;if(c)e[d.ia]="";if(g)e[d.u]="";if(i)e[d.ka]="";if(b){j=e[d.Oa];f=e[d.Ra];l=e[d.P];k=
|
||||
e[d.Ua];if(j)e[d.Oa]="";if(f)e[d.Ra]="";if(l)e[d.P]="";if(k)e[d.Ua]=""}a=a.call(this);if(c)e[d.ia]=c;if(g)e[d.u]=g;if(i)e[d.ka]=i;if(b){if(j)e[d.Oa]=j;if(f)e[d.Ra]=f;if(l)e[d.P]=l;if(k)e[d.Ua]=k}return a},T:h.p.oa(function(){return this.xb()||this.yc(function(){var a=this.d.currentStyle,b=this.fb;return a[b.u]+" "+a[b.ia]+" "+a[b.ka]+" "+a[b.P+"X"]+" "+a[b.P+"Y"]})}),xb:h.p.oa(function(){var a=this.d;return a.style[this.Ia]||a.currentStyle.getAttribute(this.Aa)}),ud:function(a,b,d,e){var c=this.d,
|
||||
g=b.n();b=g.f;g=g.e;if(a!=="border-box")if((d=d.i())&&(d=d.O)){b-=d.l.a(c)+d.l.a(c);g-=d.t.a(c)+d.b.a(c)}if(a==="content-box")if(a=e.i()){b-=a.l.a(c)+a.l.a(c);g-=a.t.a(c)+a.b.a(c)}return{f:b,e:g}},ic:function(){var a=0;if(h.U<7){a=this.d;a=""+(a.style[h.qb+"PngFix"]||a.currentStyle.getAttribute(h.z+"png-fix"))==="true"}return a},j:h.p.oa(function(){return(this.xb()||this.ic())&&!!this.i()})});h.Jb=h.p.ba({sc:["Top","Right","Bottom","Left"],Ld:{thin:"1px",medium:"3px",thick:"5px"},ea:function(){var a=
|
||||
{},b={},d={},e=false,c=true,g=true,i=true;this.zc(function(){for(var j=this.d.currentStyle,f=0,k,l,m,o,s,q,t;f<4;f++){m=this.sc[f];t=m.charAt(0).toLowerCase();k=b[t]=j["border"+m+"Style"];l=j["border"+m+"Color"];m=j["border"+m+"Width"];if(f>0){if(k!==o)g=false;if(l!==s)c=false;if(m!==q)i=false}o=k;s=l;q=m;d[t]=h.aa(l);m=a[t]=h.m(b[t]==="none"?"0":this.Ld[m]||m);if(m.a(this.d)>0)e=true}});return e?{O:a,de:b,dd:d,qe:i,ed:c,ee:g}:null},T:h.p.oa(function(){var a=this.d,b=a.currentStyle,d;a.tagName in
|
||||
h.uc&&a.offsetParent.currentStyle.borderCollapse==="collapse"||this.zc(function(){d=b.borderWidth+"|"+b.borderStyle+"|"+b.borderColor});return d}),zc:function(a){var b=this.d.runtimeStyle,d=b.borderWidth,e=b.borderColor;if(d)b.borderWidth="";if(e)b.borderColor="";a=a.call(this);if(d)b.borderWidth=d;if(e)b.borderColor=e;return a}});(function(){h.lb=h.p.ba({Aa:"border-radius",Ia:"borderRadius",ea:function(b){var d=null,e,c,g,i,j=false;if(b){c=new h.q(b);var f=function(){for(var k=[],l;(g=c.next())&&
|
||||
g.G();){i=h.m(g.c);l=i.dc();if(l<0)return null;if(l>0)j=true;k.push(i)}return k.length>0&&k.length<5?{tl:k[0],tr:k[1]||k[0],br:k[2]||k[0],bl:k[3]||k[1]||k[0]}:null};if(b=f()){if(g){if(g.h&h.q.ya.xa&&g.c==="/")e=f()}else e=b;if(j&&b&&e)d={x:b,y:e}}}return d}});var a=h.m("0");a={tl:a,tr:a,br:a,bl:a};h.lb.Bc={x:a,y:a}})();h.Ib=h.p.ba({Aa:"border-image",Ia:"borderImage",hb:{stretch:1,round:1,repeat:1,space:1},ea:function(a){var b=null,d,e,c,g,i,j,f=0,k=h.q.ya,l=k.W,m=k.wa,o=k.Ta;if(a){d=new h.q(a);b=
|
||||
{};for(var s=function(n){return n&&n.h&k.xa&&n.c==="/"},q=function(n){return n&&n.h&l&&n.c==="fill"},t=function(){g=d.va(function(n){return!(n.h&(m|o))});if(q(d.next())&&!b.fill)b.fill=true;else d.C();if(s(d.next())){f++;i=d.va(function(n){return!n.G()&&!(n.h&l&&n.c==="auto")});if(s(d.next())){f++;j=d.va(function(n){return!n.Ea()})}}else d.C()};a=d.next();){e=a.h;c=a.c;if(e&(m|o)&&!g){d.C();t()}else if(q(a)&&!b.fill){b.fill=true;t()}else if(e&l&&this.hb[c]&&!b.repeat){b.repeat={e:c};if(a=d.next())if(a.h&
|
||||
l&&this.hb[a.c])b.repeat.wc=a.c;else d.C()}else if(e&k.URL&&!b.src)b.src=c;else return null}if(!b.src||!g||g.length<1||g.length>4||i&&i.length>4||f===1&&i.length<1||j&&j.length>4||f===2&&j.length<1)return null;if(!b.repeat)b.repeat={e:"stretch"};if(!b.repeat.wc)b.repeat.wc=b.repeat.e;a=function(n,u){return{t:u(n[0]),r:u(n[1]||n[0]),b:u(n[2]||n[0]),l:u(n[3]||n[1]||n[0])}};b.slice=a(g,function(n){return h.m(n.h&m?n.c+"px":n.c)});if(i&&i[0])b.O=a(i,function(n){return n.G()?h.m(n.c):n.c});if(j&&j[0])b.Ga=
|
||||
a(j,function(n){return n.Ea()?h.m(n.c):n.c})}return b}});h.Hc=h.p.ba({Aa:"box-shadow",Ia:"boxShadow",ea:function(a){var b,d=h.m,e=h.q.ya,c;if(a){c=new h.q(a);b={Ga:[],Db:[]};for(a=function(){for(var g,i,j,f,k,l;g=c.next();){j=g.c;i=g.h;if(i&e.xa&&j===",")break;else if(g.Ea()&&!k){c.C();k=c.va(function(m){return!m.Ea()})}else if(i&e.u&&!f)f=j;else if(i&e.W&&j==="inset"&&!l)l=true;else return false}g=k&&k.length;if(g>1&&g<5){(l?b.Db:b.Ga).push({ke:d(k[0].c),le:d(k[1].c),blur:d(k[2]?k[2].c:"0"),$d:d(k[3]?
|
||||
k[3].c:"0"),color:h.aa(f||"currentColor")});return true}return false};a(););}return b&&(b.Db.length||b.Ga.length)?b:null}});h.Nb=h.p.ba({ea:function(a){a=new h.q(a);for(var b=[],d;(d=a.next())&&d.G();)b.push(h.m(d.c));return b.length>0&&b.length<5?{t:b[0],r:b[1]||b[0],b:b[2]||b[0],l:b[3]||b[1]||b[0]}:null},T:h.p.oa(function(){var a=this.d,b=a.runtimeStyle,d=b.padding;if(d)b.padding="";a=a.currentStyle.padding;if(d)b.padding=d;return a})});h.Oc=h.p.ba({T:h.p.oa(function(){var a=this.d,b=a.runtimeStyle,
|
||||
d=a.currentStyle;a=b.visibility;b.visibility="";d=d.visibility+"|"+d.display;b.visibility=a;return d}),ea:function(){var a=this.T().split("|");return{xc:a[0]!=="hidden",Vb:a[1]!=="none"}},j:function(){return false}});h.Pc=function(){function a(c){return function(){var g=arguments,i,j=g.length,f,k,l;f=this[d+c]||(this[d+c]={});for(i=0;i<j;i+=2)f[g[i]]=g[i+1];if(f=this.B()){if(c)f=f[c];for(i=0;i<j;i+=2){k=g[i];if(l=e[k])l.call(this,f,k,g[i+1]);else f[k]=g[i+1]}}}}function b(c,g){this.Xb="_pie_"+(c||
|
||||
"shape")+h.Q.pa(this);this.eb=g||0}var d="_attrs_",e={colors:function(c,g,i){if(c[g])c[g].value=i;else c[g]=i},size:function(c,g,i){if(i){c[g].x=1;c[g]=i}else delete c[g]},"o:opacity2":function(c,g,i){if(i!==this.Id){this.B().insertAdjacentHTML("afterEnd",this.zb());this.k();this.Id=i}}};(function c(){try{H.namespaces.add("pievml","urn:schemas-microsoft-com:vml","#default#VML")}catch(g){setTimeout(c,1)}})();b.prototype={Sb:"behavior:url(#default#VML);",hd:"position:absolute;top:0px;left:0px;",gd:'coordorigin="1,1" stroked="false" ',
|
||||
tagName:"shape",kc:0,B:function(){return this.kc?this.Qb||(this.Qb=H.getElementById(this.Xb)):null},fa:a(""),Ha:a("style"),w:a("fill"),ta:function(c,g){this.Ha("width",c+"px","height",g+"px");this.fa("coordsize",c*2+","+g*2)},Ad:function(){var c=this[d+"style"]||{},g=[],i;for(i in c)c.hasOwnProperty(i)&&g.push(i+":"+c[i]);return this.Sb+this.hd+g.join(";")},zb:function(){function c(m){if(m)for(var o in m)m.hasOwnProperty(o)&&i.push(" "+o+'="'+m[o]+'"')}function g(m){var o=j[d+m];if(o){i.push(k+m);
|
||||
c(o);i.push(l)}}var i,j=this,f=j.tagName,k="<pievml:",l=' style="'+j.Sb+'" />';j.kc=1;i=[k,f,' id="',j.Xb,'" style="',j.Ad(),'" ',j.gd];c(j[d]);i.push(">");g("fill");i.push("</pievml:"+f+">");return i.join("")},k:function(){var c=this.B(),g=c&&c.parentNode;if(g){g.removeChild(c);delete this.Qb}}};return b}();h.v={sa:function(a){function b(d,e,c,g){this.d=d;this.o=e;this.g=c;this.parent=g}h.Fa(b.prototype,h.v,a);return b},ra:function(){return false},qc:h.pd,Gb:function(){this.j()?this.Ca():this.k()},
|
||||
Bb:function(){this.d.runtimeStyle.borderColor="transparent"},k:function(){}};h.Fa(h.v,{B:function(a,b){var d=this.wb||(this.wb={}),e=d[a];if(!e){e=d[a]=new h.Pc(a,b);this.parent.sd(e)}return e},Ba:function(a){var b=this.wb,d=b&&b[a];if(d){d.k();this.parent.Sd(d);delete b[a]}return!!d},zd:function(a){var b=this.d,d=this.o.n(),e=d.f,c=d.e,g,i,j,f,k,l;d=a.x.tl.a(b,e);g=a.y.tl.a(b,c);i=a.x.tr.a(b,e);j=a.y.tr.a(b,c);f=a.x.br.a(b,e);k=a.y.br.a(b,c);l=a.x.bl.a(b,e);a=a.y.bl.a(b,c);e=Math.min(e/(d+i),c/(j+
|
||||
k),e/(l+f),c/(g+a));if(e<1){d*=e;g*=e;i*=e;j*=e;f*=e;k*=e;l*=e;a*=e}return{x:{tl:d,tr:i,br:f,bl:l},y:{tl:g,tr:j,br:k,bl:a}}},Z:function(a,b,d,e,c,g){a=this.$(a,b,d,e,c,g);return"m"+a[0]+","+a[1]+"qy"+a[2]+","+a[3]+"l"+a[4]+","+a[5]+"qx"+a[6]+","+a[7]+"l"+a[8]+","+a[9]+"qy"+a[10]+","+a[11]+"l"+a[12]+","+a[13]+"qx"+a[14]+","+a[15]+"x"},$:function(a,b,d,e,c,g){var i=this.o.n(),j=i.f*c,f=i.e*c,k=Math;i=k.floor;var l=k.ceil,m=k.max;k=k.min;a*=c;b*=c;d*=c;e*=c;g||(g=this.g.F.i());if(g){g=this.zd(g);var o=
|
||||
g.x.tl*c,s=g.y.tl*c,q=g.x.tr*c,t=g.y.tr*c,n=g.x.br*c,u=g.y.br*c,p=g.x.bl*c;c=g.y.bl*c;e=[i(e),i(k(m(s,a),f-d)),i(k(m(o,e),j-b)),i(a),l(m(e,j-m(q,b))),i(a),l(j-b),i(k(m(t,a),f-d)),l(j-b),l(m(a,f-m(u,d))),l(m(e,j-m(n,b))),l(f-d),i(k(m(p,e),j-b)),l(f-d),i(e),l(m(a,f-m(c,d)))]}else{a=i(a);b=l(j-b);d=l(f-d);e=i(e);e=[e,a,e,a,b,a,b,a,b,d,b,d,e,d,e,d]}return e},Bb:function(){var a=this.d,b=a.currentStyle,d=a.runtimeStyle,e=a.tagName,c=h.U===6,g;if(c&&(e in h.Tb||e==="FIELDSET")||e==="BUTTON"||e==="INPUT"&&
|
||||
a.type in h.Hd){d.borderWidth="";e=this.g.s.sc;for(g=e.length;g--;){c=e[g];d["padding"+c]="";d["padding"+c]=h.m(b["padding"+c]).a(a)+h.m(b["border"+c+"Width"]).a(a)+(h.U!==8&&g%2?1:0)}d.borderWidth=0}else if(c){if(a.childNodes.length!==1||a.firstChild.tagName!=="ie6-mask"){b=H.createElement("ie6-mask");e=b.style;e.visibility="visible";for(e.zoom=1;e=a.firstChild;)b.appendChild(e);a.appendChild(b);d.visibility="hidden"}}else d.borderColor="transparent"},pe:function(){},k:function(){var a=this.wb,b;
|
||||
if(a)for(b in a)a.hasOwnProperty(b)&&this.Ba(b)}});h.Mc=h.v.sa({j:function(){var a=this.ad;for(var b in a)if(a.hasOwnProperty(b)&&a[b].j())return true;return false},ac:function(){var a=this.ec(),b=a,d;a=a.currentStyle;var e=a.position,c=0,g=0;g=this.o.n();var i=this.g.jb.i(),j=g.jc;if(e==="fixed"&&h.U>6){c=g.x*j;g=g.y*j;b=e}else{do b=b.offsetParent;while(b&&b.currentStyle.position==="static");if(b){d=b.getBoundingClientRect();b=b.currentStyle;c=(g.x-d.left)*j-(parseFloat(b.borderLeftWidth)||0);g=
|
||||
(g.y-d.top)*j-(parseFloat(b.borderTopWidth)||0)}else{b=H.documentElement;c=(g.x+b.scrollLeft-b.clientLeft)*j;g=(g.y+b.scrollTop-b.clientTop)*j}b="absolute"}return"direction:ltr;position:absolute;behavior:none !important;position:"+b+";left:"+c+"px;top:"+g+"px;z-index:"+(e==="static"?-1:a.zIndex)+";display:"+(i.xc&&i.Vb?"block":"none")},vc:function(){var a=this.bc();if(a&&(this.o.oc()||this.g.jb.L()))a.style.cssText=this.ac()},ec:function(){var a=this.d;return a.tagName in h.uc?a.offsetParent:a},bc:function(){var a=
|
||||
this.sb;if(!a)a=this.sb=H.getElementById("_pie"+h.Q.pa(this));return a},Gb:function(){var a=this.Wa,b,d,e,c,g,i;if(this.j())if(a)if(b=this.vb){d=0;for(e=a.length;d<e;d++){for(c=b.length;c--;)if(b[c].eb<a[d].eb)break;if(c<0){g=this.bc();i="afterBegin"}else{g=b[c].B();i="afterEnd"}g.insertAdjacentHTML(i,a[d].zb());b.splice(c<0?0:c,0,a[d])}this.Wa=0;this.vc()}else{d=this.g.jb.i();if(d.xc&&d.Vb){a.sort(this.Wd);b=['<css3pie id="_pie'+h.Q.pa(this)+'" style="'+this.ac()+'">'];d=0;for(e=a.length;d<e;d++)b.push(a[d].zb());
|
||||
b.push("</css3pie>");this.ec().insertAdjacentHTML("beforeBegin",b.join(""));this.vb=a;this.Wa=0}}else this.vc();else this.k()},Wd:function(a,b){return a.eb-b.eb},sd:function(a){(this.Wa||(this.Wa=[])).push(a)},Sd:function(a){var b=this.vb,d;if(b)for(d=b.length;d--;)if(b[d]===a){b.splice(d,1);break}},k:function(){var a=this.sb,b;if(a&&(b=a.parentNode))b.removeChild(a);delete this.sb;delete this.vb}});H.createElement("css3pie");h.Dc=h.v.sa({H:2,ra:function(){var a=this.g;return a.K.L()||a.F.L()},j:function(){var a=
|
||||
this.g;return a.D.j()||a.F.j()||a.K.j()||a.na.j()&&a.na.i().Db},Ca:function(){var a=this.o.n();if(a.f&&a.e){this.nd();this.od()}},nd:function(){var a=this.g.K.i(),b=this.o.n(),d=this.d,e=a&&a.color,c;if(e&&e.Y()>0){this.fc();c=this.B("bgColor",this.H);c.ta(b.f,b.e);c.fa("path",this.$b(b,a.bd));c.w("color",e.M(d));a=e.Y();a<1&&c.w("opacity",a)}else this.Ba("bgColor")},od:function(){var a=this.g.K.i(),b=this.o.n();a=a&&a.R;var d,e,c,g,i;if(a){this.fc();c=b.f;g=b.e;for(i=a.length;i--;){d=a[i];e=this.B("bgImage"+
|
||||
i,this.H+(0.5-i/1E3));e.fa("path",this.$b(b,d.Xa));e.ta(c,g);if(d.V==="linear-gradient")this.Xc(e,d);else{e.w("type","tile","color","none");this.Pd(e,d.Cb,i)}}}for(i=a?a.length:0;this.Ba("bgImage"+i++););},Pd:function(a,b,d){h.Q.Ac(b,function(e){var c=this.d,g=this.o.n(),i=g.f,j=g.e;if(i&&j){var f=this.g,k=f.K,l=k.i().R[d],m=k.ud(l.Ya,this.o,f.s,f.da);f=(l.Za||h.Ma.Jc).a(this.d,m.f,m.e,e.f,e.e);k=this.vd(l.Ya);c=l.ma?l.ma.coords(c,m.f-f.f,m.e-f.e):{x:0,y:0};l=l.bb;var o=0,s=0,q=i+1,t=j+1,n=h.U===
|
||||
8?0:1;m=Math.round(k.x+c.x)+0.5;k=Math.round(k.y+c.y)+0.5;a.w("src",b,"position",m/i+","+k/j,"size",f.f!==e.f||f.e!==e.e||g.jc!==1||screen.logicalXDPI/screen.deviceXDPI!==1?h.Qa.gb(f.f)+"pt,"+h.Qa.gb(f.e)+"pt":"");if(l&&l!=="repeat"){if(l==="repeat-x"||l==="no-repeat"){o=k+1;t=k+f.e+n}if(l==="repeat-y"||l==="no-repeat"){s=m+1;q=m+f.f+n}a.Ha("clip","rect("+o+"px,"+q+"px,"+t+"px,"+s+"px)")}}},this)},$b:function(a,b){var d=0,e=0,c=0,g=0,i=this.d,j=this.g,f;if(b&&b!=="border-box")if((f=j.s.i())&&(f=f.O)){d+=
|
||||
f.t.a(i);e+=f.r.a(i);c+=f.b.a(i);g+=f.l.a(i)}if(b==="content-box")if(b=j.da.i()){d+=b.t.a(i);e+=b.r.a(i);c+=b.b.a(i);g+=b.l.a(i)}return"m0,0r0,0m"+a.f*2+","+a.e*2+"r0,0"+this.Z(d,e,c,g,2)},vd:function(a){var b=this.d,d=this.g,e=0,c=0,g;if(a!=="border-box")if((g=d.s.i())&&(g=g.O)){e+=g.l.a(b);c+=g.t.a(b)}if(a==="content-box")if(a=d.da.i()){e+=a.l.a(b);c+=a.t.a(b)}return{x:e,y:c}},Xc:function(a,b){var d=this.d,e=this.o.n(),c=e.f,g=e.e;e=b.ua;var i=e.length,j=Math.PI,f=h.nb.xd(d,c,g,b),k=f.la;b=f.Jd;
|
||||
var l,m;for(c=k%90?Math.atan2(f.be-f.rd,(f.qd-f.ae)*c/g)/j*180-90:-k;c<0;)c+=360;c%=360;g=[];j=[];for(f=0;f<i;f++)j.push(e[f].lc?e[f].lc.a(d,b):f===0?0:f===i-1?b:null);for(f=1;f<i;f++){if(j[f]===null){l=j[f-1];k=f;do m=j[++k];while(m===null);j[f]=l+(m-l)/(k-f+1)}j[f]=Math.max(j[f],j[f-1])}for(f=0;f<i;f++)g.push(j[f]/b*100+"% "+e[f].color.M(d));a.w("angle",c,"type","gradient","method","sigma","color",e[0].color.M(d),"color2",e[i-1].color.M(d),"colors",g.join(","));i===2&&a.w("opacity",e[1].color.Y(),
|
||||
"o:opacity2",e[0].color.Y())},fc:function(){var a=this.d.runtimeStyle;a.backgroundImage="url(about:blank)";a.backgroundColor="transparent"},k:function(){h.v.k.call(this);var a=this.d.runtimeStyle;a.backgroundImage=a.backgroundColor=""}});h.Fc=h.v.sa({H:4,Xd:{t:[2,1,0,3,4,7,6,5,90],r:[4,7,6,5,10,9,8,11,0],b:[10,9,8,11,12,15,14,13,270],l:[12,15,14,13,2,1,0,3,180]},fd:{dotted:1,dashed:1},Ub:{groove:1,ridge:1,inset:1,outset:1},md:{groove:1,ridge:1,"double":1},ra:function(){var a=this.g;return a.s.L()||
|
||||
a.F.L()},j:function(){var a=this.g;return a.F.j()&&!a.D.j()&&a.s.j()},Ca:function(){var a=this.g.s.i(),b=this.o.n(),d,e,c,g;if(a){this.Bb();d=this.wd();e=c=0;for(g=d.length;e<g;e+=2){a=this.B("border"+c++,this.H);a.ta(b.f,b.e);a.fa("path",d[e]);a.w("color",d[e+1])}for(;this.Ba("border"+c++););}},S:function(a,b,d,e,c,g,i){i=e*(i==="dashed"?3:1);e=c+e;var j;if(i<d-b)for(b+=(d-b-i)/2%i;b<d;){j=Math.min(b+i,d);a.push(g?"m"+c+","+b+"l"+c+","+j+"l"+e+","+j+"l"+e+","+b+"x":"m"+b+","+c+"l"+j+","+c+"l"+j+
|
||||
","+e+"l"+b+","+e+"x");b+=i*2}},wd:function(){var a=this.g.s,b=[];if(a.j()){var d=this.d,e=this.o.n(),c=a.i(),g=c.O;a=c.de;var i=c.dd,j=Math,f=j.abs,k=j.round;j=k(g.t.a(d));var l=k(g.r.a(d)),m=k(g.b.a(d));g=k(g.l.a(d));k=[];var o,s,q,t=this.Xd,n,u=this.fd,p,r;if(c.ee&&c.ed&&!(a.t in this.Ub)){if(i.t.Y()>0){k[0]=this.Z(0,0,0,0,2);p=a.t;if(p==="double")k.push(this.Z(j/3,l/3,m/3,g/3,2)+this.Z(j*2/3,l*2/3,m*2/3,g*2/3,2));else if(p in u){c=this.$(j,l,m,g,2);this.S(k,c[2],c[4],j*2,0,0,a.t);this.S(k,c[7],
|
||||
c[9],l*2,(e.f-l)*2,1,a.r);this.S(k,c[12],c[10],m*2,(e.e-m)*2,0,a.b);this.S(k,c[1],c[15],g*2,0,1,a.l)}k.push(this.Z(j,l,m,g,2));b.push(k.join(""),i.t.M(d))}}else{o=this.$(0,0,0,0,2);c=this.$(j,l,m,g,2);for(n in t)if(t.hasOwnProperty(n)&&i[n].Y()>0){p=t[n];var v=p[0],C=p[1],y=p[2],B=p[3],F=p[4],G=p[5],K=p[6],J=p[7],w=p[8],P=n==="t"||n==="l";p=a[n];k[0]="al"+o[v]+","+o[C]+","+f(o[y]-o[v])+","+f(o[B]-o[C])+","+(w+45)*65535+",-2949075ae"+o[F]+","+o[G]+","+f(o[K]-o[F])+","+f(o[J]-o[G])+","+w*65535+",-2949075";
|
||||
if(p in this.md){if(!s)if(p==="double"){s=this.$(j/3,l/3,m/3,g/3,2);q=this.$(j*2/3,l*2/3,m*2/3,g*2/3,2)}else s=q=this.$(j/2,l/2,m/2,g/2,2);k.push("ae"+s[F]+","+s[G]+","+f(s[K]-s[F])+","+f(s[J]-s[G])+","+(w-45)*65535+",2949075ae"+s[v]+","+s[C]+","+f(s[y]-s[v])+","+f(s[B]-s[C])+","+w*65535+",2949075x");if(p!=="double"){r=i[n].M(d)+((p==="groove"?P:!P)?" darken(128)":" lighten(128)");b.push(k.join(""),r);k.length=0}k.push("al"+q[v]+","+q[C]+","+f(q[y]-q[v])+","+f(q[B]-q[C])+","+(w+45)*65535+",-2949075ae"+
|
||||
q[F]+","+q[G]+","+f(q[K]-q[F])+","+f(q[J]-q[G])+","+w*65535+",-2949075")}k.push("ae"+c[F]+","+c[G]+","+f(c[K]-c[F])+","+f(c[J]-c[G])+","+(w-45)*65535+",2949075ae"+c[v]+","+c[C]+","+f(c[y]-c[v])+","+f(c[B]-c[C])+","+w*65535+",2949075x");if(p in u)n==="t"?this.S(k,c[2],c[4],j*2,0,0,p):n==="r"?this.S(k,c[7],c[9],l*2,(e.f-l)*2,1,p):n==="b"?this.S(k,c[12],c[10],m*2,(e.e-m)*2,0,p):this.S(k,c[1],c[15],g*2,0,1,p);r=i[n].M(d);if(p in this.Ub)r+=(p==="groove"||p==="outset"?P:!P)?" lighten(128)":" darken(128)";
|
||||
b.push(k.join(""),r);k.length=0}}}return b},k:function(){if(this.Yb||!this.g.D.j())this.d.runtimeStyle.borderColor="";h.v.k.call(this)}});h.Ec=h.v.sa({H:5,ra:function(){return this.g.D.L()},j:function(){return this.g.D.j()},Ca:function(){var a=this.g.D.i(),b=this.g.s.i(),d=this.o.n(),e=this.d;h.Q.Ac(a.src,function(c){function g(r,v,C,y,B,F,G,K,J){var w=Math.max;if(!u||!p||!y||!B||!K||!J)r.Ha("display","none");else{y=w(y,0);B=w(B,0);r.fa("path","m0,0l"+y*2+",0l"+y*2+","+B*2+"l0,"+B*2+"x");r.w("src",
|
||||
n,"type","tile","position","0,0","origin",(F-0.5)/u+","+(G-0.5)/p,"size",h.Qa.gb(y*u/K)+"pt,"+h.Qa.gb(B*p/J)+"pt");r.ta(y,B);r.Ha("left",v+"px","top",C+"px","display","")}}var i=d.f,j=d.e,f=h.m("0"),k=a.O||(b?b.O:{t:f,r:f,b:f,l:f});f=k.t.a(e);var l=k.r.a(e),m=k.b.a(e);k=k.l.a(e);var o=a.slice,s=o.t.a(e),q=o.r.a(e),t=o.b.a(e);o=o.l.a(e);var n=a.src,u=c.f,p=c.e;g(this.N("tl"),0,0,k,f,0,0,o,s);g(this.N("t"),k,0,i-k-l,f,o,0,u-o-q,s);g(this.N("tr"),i-l,0,l,f,u-q,0,q,s);g(this.N("r"),i-l,f,l,j-f-m,u-q,
|
||||
s,q,p-s-t);g(this.N("br"),i-l,j-m,l,m,u-q,p-t,q,t);g(this.N("b"),k,j-m,i-k-l,m,o,p-t,u-o-q,t);g(this.N("bl"),0,j-m,k,m,0,p-t,o,t);g(this.N("l"),0,f,k,j-f-m,0,s,o,p-s-t);g(this.N("c"),k,f,i-k-l,j-f-m,o,s,a.fill?u-o-q:0,p-s-t)},this)},N:function(a){return this.B("borderImage_"+a,this.H)},qc:function(){if(this.j()){var a=this.d,b=a.runtimeStyle,d=this.g.D.i().O;b.borderStyle="solid";if(d){b.borderTopWidth=d.t.a(a);b.borderRightWidth=d.r.a(a);b.borderBottomWidth=d.b.a(a);b.borderLeftWidth=d.l.a(a)}this.Bb()}},
|
||||
k:function(){var a=this.d.runtimeStyle;a.borderStyle="";if(this.Yb||!this.g.s.j())a.borderColor=a.borderWidth="";h.v.k.call(this)}});h.Gc=h.v.sa({H:1,ra:function(){var a=this.g;return a.na.L()||a.F.L()},j:function(){var a=this.g.na;return a.j()&&a.i().Ga[0]},Ca:function(){var a=this.d,b=this.g,d=b.na.i().Ga;b=b.F.i();var e=d.length,c=e,g=this.o.n(),i=g.f;g=g.e;for(var j,f,k,l,m,o,s,q,t,n;c--;){j=d[c];k=j.ke.a(a);l=j.le.a(a);m=j.$d.a(a);o=j.blur.a(a);j=j.color;s=j.Y();j=j.M(a);f=-m-o;if(!b&&o)b=h.lb.Bc;
|
||||
q=this.Z(f,f,f,f,2,b);f=this.B("shadow"+c,this.H+(0.5-c/1E3));if(o){t=(m+o)*2+i;n=(m+o)*2+g;m=t?o*2/t:0;o=n?o*2/n:0;if(m>0.5||o>0.5){t=0.5/Math.max(m,o);m*=t;o*=t;s*=t*t}f.w("type","gradienttitle","color2",j,"focusposition",m+","+o,"focussize",1-m*2+","+(1-o*2),"opacity",0,"o:opacity2",s)}else f.w("type","solid","opacity",s);f.fa("path",q);f.w("color",j);f.Ha("left",k+"px","top",l+"px");f.ta(i,g)}for(;this.Ba("shadow"+e++););}});h.Lc=h.v.sa({H:6,ra:function(){var a=this.g;return this.d.src!==this.Sc||
|
||||
a.F.L()},j:function(){var a=this.g;return a.F.j()||a.K.ic()},Ca:function(){this.Sc=g;this.Ed();var a=this.B("img",this.H),b=this.o.n(),d=b.f;b=b.e;var e=this.g.s.i(),c=e&&e.O;e=this.d;var g=e.src,i=Math.round,j=this.g.da.i();if(!c||h.U<7){c=h.m("0");c={t:c,r:c,b:c,l:c}}a.fa("path",this.Z(i(c.t.a(e)+j.t.a(e)),i(c.r.a(e)+j.r.a(e)),i(c.b.a(e)+j.b.a(e)),i(c.l.a(e)+j.l.a(e)),2));a.w("type","frame","src",g,"position",(d?0.5/d:0)+","+(b?0.5/b:0));a.ta(d,b)},Ed:function(){this.d.runtimeStyle.filter="alpha(opacity=0)"},
|
||||
k:function(){h.v.k.call(this);this.d.runtimeStyle.filter=""}});h.mb=function(){function a(n,u){n.className+=" "+u}function b(n){var u=t.slice.call(arguments,1),p=u.length;setTimeout(function(){if(n)for(;p--;)a(n,u[p])},0)}function d(n){var u=t.slice.call(arguments,1),p=u.length;setTimeout(function(){if(n)for(;p--;){var r=u[p];r=q[r]||(q[r]=new RegExp("\\b"+r+"\\b","g"));n.className=n.className.replace(r,"")}},0)}function e(n){function u(){if(!T){var x,z,E=h.qa,N=n.currentStyle,I=N.getAttribute(g)===
|
||||
"true",Z=N.getAttribute(j)!=="false",$=N.getAttribute(f)!=="false";R=N.getAttribute(i);R=E>7?R!=="false":R==="true";if(!U){U=1;n.runtimeStyle.zoom=1;N=n;for(var aa=1;N=N.previousSibling;)if(N.nodeType===1){aa=0;break}aa&&a(n,o)}D.cb();if(I&&(z=D.n())&&(x=H.documentElement||H.body)&&(z.y>x.clientHeight||z.x>x.clientWidth||z.y+z.e<0||z.x+z.f<0)){if(!X){X=1;h.pb.ca(u)}}else{T=1;X=U=0;h.pb.Ka(u);if(E===9){A={K:new h.Hb(n),D:new h.Ib(n),s:new h.Jb(n),da:new h.Nb(n)};Q=[A.K,A.s,A.D,A.da];L=new h.oe(n,D,
|
||||
A);M=[new h.me(n,D,A,L),new h.ne(n,D,A,L)]}else{A={K:new h.Hb(n),s:new h.Jb(n),D:new h.Ib(n),F:new h.lb(n),na:new h.Hc(n),da:new h.Nb(n),jb:new h.Oc(n)};Q=[A.K,A.s,A.D,A.F,A.na,A.da,A.jb];L=new h.Mc(n,D,A);M=[new h.Gc(n,D,A,L),new h.Dc(n,D,A,L),new h.Fc(n,D,A,L),new h.Ec(n,D,A,L)];n.tagName==="IMG"&&M.push(new h.Lc(n,D,A,L));L.ad=M}if(x=n.currentStyle.getAttribute(h.z+"watch-ancestors")){x=parseInt(x,10);z=0;for(I=n.parentNode;I&&(x==="NaN"||z++<x);){w(I,"onpropertychange",J);w(I,"onmouseenter",C);
|
||||
w(I,"onmouseleave",y);w(I,"onmousedown",B);if(I.tagName in h.Zb){w(I,"onfocus",G);w(I,"onblur",K)}I=I.parentNode}}if(R){h.Pa.ca(r);h.Pa.Ud()}r(0,1)}if(!V){V=1;E<9&&w(n,"onmove",p);w(n,"onresize",p);w(n,"onpropertychange",v);$&&w(n,"onmouseenter",C);if($||Z)w(n,"onmouseleave",y);Z&&w(n,"onmousedown",B);if(n.tagName in h.Zb){w(n,"onfocus",G);w(n,"onblur",K)}h.Sa.ca(p);h.J.ca(P)}D.ib()}}function p(){D&&D.Cd()&&r()}function r(x,z){if(!Y)if(T){D.cb();for(var E=Q.length;E--;)Q[E].cb();E=0;for(var N=M.length,
|
||||
I=D.Yd();E<N;E++)M[E].qc();for(E=0;E<N;E++)if(z||I||x&&M[E].ra())M[E].Gb();if(z||I||x||D.oc())L.Gb();for(x=Q.length;x--;)Q[x].ib();D.ib()}else U||u()}function v(){T&&!(event&&event.propertyName in s)&&r(1)}function C(){b(n,k)}function y(){d(n,k,l)}function B(){b(n,l);h.ob.ca(F)}function F(){d(n,l);h.ob.Ka(F)}function G(){b(n,m)}function K(){d(n,m)}function J(){var x=event.propertyName;if(x==="className"||x==="id"||x.indexOf("style.")===0)v()}function w(x,z,E){x.attachEvent(z,E);W.push([x,z,E])}function P(){if(V){for(var x=
|
||||
W.length,z;x--;){z=W[x];z[0].detachEvent(z[1],z[2])}h.J.Ka(P);V=0;W=[]}}function ba(){if(!Y){var x,z;P();Y=1;if(M){x=0;for(z=M.length;x<z;x++){M[x].Yb=1;M[x].k()}}L.k();R&&h.Pa.Ka(r);h.Sa.Ka(r);M=L=D=A=Q=n=null;S.Wb=S=0}}var S=this,M,L,D=new h.Kb(n),A,Q,U,T,V,W=[],X,Y,R;S.Wb=n;S.Gd=u;S.k=ba}var c={},g=h.z+"lazy-init",i=h.z+"poll",j=h.z+"track-active",f=h.z+"track-hover",k=h.Na+"hover",l=h.Na+"active",m=h.Na+"focus",o=h.Na+"first-child",s={background:1,bgColor:1,display:1},q={},t=[];e.yd=function(n){var u=
|
||||
n.uniqueID;return c[u]||(c[u]=new e(n))};e.k=function(n){n=n.uniqueID;var u=c[n];if(u){u.k();delete c[n]}};e.kd=function(){var n=[],u;if(c){for(var p in c)if(c.hasOwnProperty(p)){u=c[p];n.push(u.Wb);u.k()}c={}}return n};return e}();h.version="2.0beta1";h.supportsVML=h.tc;h.attach=function(a){if(h.qa===9||h.qa<9&&h.tc)h.mb.yd(a).Gd()};h.detach=function(a){h.mb.k(a)}})(window,document);
|
||||
2276
js/bootstrap.js
vendored
Normal file
2276
js/bootstrap.js
vendored
Normal file
File diff suppressed because it is too large
Load Diff
6
js/bootstrap.min.js
vendored
Normal file
6
js/bootstrap.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
768
js/calendar.js
Normal file
768
js/calendar.js
Normal file
@@ -0,0 +1,768 @@
|
||||
/**
|
||||
* Bootstrap based calendar full view.
|
||||
*
|
||||
* https://github.com/Serhioromano/bootstrap-calendar
|
||||
*
|
||||
* User: Sergey Romanov <serg4172@mail.ru>
|
||||
* Version 0.1
|
||||
*/
|
||||
"use strict";
|
||||
|
||||
Date.prototype.getWeek = function() {
|
||||
var onejan = new Date(this.getFullYear(), 0, 1);
|
||||
return Math.ceil((((this.getTime() - onejan.getTime()) / 86400000) + onejan.getDay() + 1) / 7);
|
||||
}
|
||||
Date.prototype.getMonthFormatted = function() {
|
||||
var month = this.getMonth() + 1;
|
||||
return month < 10 ? '0' + month : month;
|
||||
}
|
||||
Date.prototype.getDateFormatted = function() {
|
||||
var date = this.getDate();
|
||||
return date < 10 ? '0' + date : date;
|
||||
}
|
||||
if(!String.prototype.format) {
|
||||
String.prototype.format = function() {
|
||||
var args = arguments;
|
||||
return this.replace(/{(\d+)}/g, function(match, number) {
|
||||
return typeof args[number] != 'undefined' ? args[number] : match;
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
;
|
||||
(function($) {
|
||||
|
||||
var defaults = {
|
||||
width: '100%', // maximum width of all calendar
|
||||
view: 'month', // month, week, day
|
||||
day: 'now', // what day to start with. No matter month, week or day this will be a starting point
|
||||
// format yyyy-mm-dd or now
|
||||
first_day: 1, // Which day is first 2 - sunday or 1 - monday
|
||||
events_url: '', // URL to return JSON list of events in special format.
|
||||
// {success:1, result: [....]} or for error {success:0, error:'Something terrible happened'}
|
||||
// events: [...] as described in events property description
|
||||
// The start and end variables will be sent to this url
|
||||
|
||||
/**
|
||||
* path to templates should end with slash /. It can be as relative
|
||||
*
|
||||
* /component/bootstrap-calendar/tmpls/
|
||||
*
|
||||
* or absolute
|
||||
*
|
||||
* http://localhost/component/bootstrap-calendar/tmpls/
|
||||
*/
|
||||
tmpl_path: 'tmpls/',
|
||||
classes: {
|
||||
months: {
|
||||
inmonth: 'cal-day-inmonth',
|
||||
outmonth: 'cal-day-outmonth',
|
||||
saturday: 'cal-day-weekend',
|
||||
sunday: 'cal-day-weekend',
|
||||
holidays: 'cal-day-holiday',
|
||||
today: 'cal-day-today'
|
||||
},
|
||||
week: {
|
||||
workday: 'cal-day-workday',
|
||||
saturday: 'cal-day-weekend',
|
||||
sunday: 'cal-day-weekend',
|
||||
holidays: 'cal-day-holiday',
|
||||
today: 'cal-day-today'
|
||||
}
|
||||
},
|
||||
enable_easter_holidays: false, // Set to true if you want to enable Easter and Easter Monday as holidays
|
||||
views: {
|
||||
year: {
|
||||
slide_events: 1,
|
||||
enable: 1
|
||||
},
|
||||
month: {
|
||||
slide_events: 1,
|
||||
enable: 1
|
||||
},
|
||||
week: {
|
||||
enable: 1
|
||||
},
|
||||
day: {
|
||||
enable: 1
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
// ------------------------------------------------------------
|
||||
// CALLBACKS. Events triggered by calendar class. You can use
|
||||
// those to affect you UI
|
||||
// ------------------------------------------------------------
|
||||
onAfterEventsLoad: function(events) {
|
||||
// Inside this function 'this' is the calendar instance
|
||||
},
|
||||
onBeforeEventsLoad: function(next) {
|
||||
// Inside this function 'this' is the calendar instance
|
||||
next();
|
||||
},
|
||||
onAfterViewLoad: function(view) {
|
||||
// Inside this function 'this' is the calendar instance
|
||||
},
|
||||
|
||||
// -------------------------------------------------------------
|
||||
// INTERNAL USE ONLY. DO NOT ASSIGN IT WILL BE OVERRIDDEN ANYWAY
|
||||
// -------------------------------------------------------------
|
||||
events: [],
|
||||
position: {
|
||||
start: new Date(),
|
||||
end: new Date()
|
||||
},
|
||||
templates: {
|
||||
year: '',
|
||||
month: '',
|
||||
week: '',
|
||||
day: ''
|
||||
},
|
||||
stop_cycling: false
|
||||
};
|
||||
|
||||
var strings = {
|
||||
error_noview: 'Calendar: View {0} not found',
|
||||
error_dateformat: 'Calendar: Wrong date format {0}. Should be either "now" or "yyyy-mm-dd"',
|
||||
error_loadurl: 'Calendar: Events load URL is not set',
|
||||
error_where: 'Calendar: Wrong navigation direction {0}. Can be only "next" or "prev" or "today"',
|
||||
|
||||
title_year: 'Year {0}',
|
||||
title_month: '{0} year {1}',
|
||||
title_week: '{0} week of year {1}',
|
||||
title_day: '{0} {1} {2} year {3}',
|
||||
|
||||
week:'Week',
|
||||
|
||||
m0: 'January',
|
||||
m1: 'February',
|
||||
m2: 'March',
|
||||
m3: 'April',
|
||||
m4: 'May',
|
||||
m5: 'June',
|
||||
m6: 'July',
|
||||
m7: 'August',
|
||||
m8: 'September',
|
||||
m9: 'October',
|
||||
m10: 'November',
|
||||
m11: 'December',
|
||||
|
||||
ms0: 'Jan',
|
||||
ms1: 'Feb',
|
||||
ms2: 'Mar',
|
||||
ms3: 'Apr',
|
||||
ms4: 'May',
|
||||
ms5: 'Jun',
|
||||
ms6: 'Jul',
|
||||
ms7: 'Aug',
|
||||
ms8: 'Sep',
|
||||
ms9: 'Oct',
|
||||
ms10: 'Nov',
|
||||
ms11: 'Dec',
|
||||
|
||||
d0: 'Sunday',
|
||||
d1: 'Monday',
|
||||
d2: 'Tuesday',
|
||||
d3: 'Wednesday',
|
||||
d4: 'Thursday',
|
||||
d5: 'Friday',
|
||||
d6: 'Saturday',
|
||||
|
||||
easter: 'Easter',
|
||||
easterMonday: 'Easter Monday'
|
||||
};
|
||||
|
||||
function buildEventsUrl(events_url, data) {
|
||||
var separator, key, url;
|
||||
url = events_url;
|
||||
separator = (events_url.indexOf('?') < 0) ? '?' : '&';
|
||||
for(key in data) {
|
||||
url += separator + key + '=' + encodeURIComponent(data[key]);
|
||||
separator = '&';
|
||||
}
|
||||
return url;
|
||||
}
|
||||
|
||||
function Calendar(params, context) {
|
||||
|
||||
this.options = $.extend(true, {}, defaults, params);
|
||||
this.setLanguage(this.options.language);
|
||||
this.context = context;
|
||||
|
||||
context.css('width', this.options.width);
|
||||
|
||||
this.view();
|
||||
return this;
|
||||
}
|
||||
|
||||
Calendar.prototype.setOptions = function(object) {
|
||||
$.extend(this.options, object);
|
||||
if('language' in object) {
|
||||
this.setLanguage(object.language);
|
||||
}
|
||||
}
|
||||
|
||||
Calendar.prototype.setLanguage = function(lang) {
|
||||
if(window.calendar_languages && (lang in window.calendar_languages)) {
|
||||
this.strings = $.extend(true, {}, strings, calendar_languages[lang]);
|
||||
this.options.language = lang;
|
||||
} else {
|
||||
this.strings = strings;
|
||||
delete this.options.language;
|
||||
}
|
||||
}
|
||||
|
||||
Calendar.prototype._render = function() {
|
||||
this.context.html('');
|
||||
this._loadTemplate(this.options.view);
|
||||
this.stop_cycling = false;
|
||||
|
||||
var data = {};
|
||||
data.events = [];
|
||||
data.cal = this;
|
||||
data.day = 1;
|
||||
|
||||
// Getting list of days in a week in correct order. Works for month and week views
|
||||
if(this.options.first_day == 1) {
|
||||
data.months = [this.strings.d1, this.strings.d2, this.strings.d3, this.strings.d4, this.strings.d5, this.strings.d6, this.strings.d0]
|
||||
} else {
|
||||
data.months = [this.strings.d0, this.strings.d1, this.strings.d2, this.strings.d3, this.strings.d4, this.strings.d5, this.strings.d6]
|
||||
}
|
||||
|
||||
// Get all events between start and end
|
||||
var start = parseInt(this.options.position.start.getTime());
|
||||
var end = parseInt(this.options.position.end.getTime());
|
||||
|
||||
$.each(this.options.events, function(k, event) {
|
||||
if((parseInt(event.start) <= end) && (parseInt(event.end) >= start)) {
|
||||
data.events.push(event);
|
||||
}
|
||||
});
|
||||
|
||||
switch(this.options.view) {
|
||||
case 'month':
|
||||
break;
|
||||
case 'week':
|
||||
break;
|
||||
case 'day':
|
||||
break;
|
||||
}
|
||||
|
||||
data.start = new Date(this.options.position.start.getTime());
|
||||
data.lang = this.strings;
|
||||
|
||||
this.context.append(this.options.templates[this.options.view](data));
|
||||
this._update();
|
||||
};
|
||||
|
||||
Calendar.prototype._week = function(event) {
|
||||
this._loadTemplate('week-days');
|
||||
|
||||
var t = {};
|
||||
var start = parseInt(this.options.position.start.getTime());
|
||||
var end = parseInt(this.options.position.end.getTime());
|
||||
var events = [];
|
||||
var self = this;
|
||||
|
||||
$.each(this.options.events, function(k, event) {
|
||||
if((parseInt(event.start) <= end) && (parseInt(event.end) >= start)) {
|
||||
|
||||
event.start_day = new Date(parseInt(event.start)).getDay();
|
||||
if(self.options.first_day == 1) {
|
||||
event.start_day = (event.start_day + 6) % 7;
|
||||
}
|
||||
if((event.end - event.start) <= 86400000) {
|
||||
event.days = 1;
|
||||
} else {
|
||||
event.days = ((event.end - event.start) / 86400000);
|
||||
}
|
||||
|
||||
if(event.start < start) {
|
||||
|
||||
event.days = event.days - ((start - event.start) / 86400000);
|
||||
event.start_day = 0;
|
||||
}
|
||||
|
||||
event.days = Math.ceil(event.days);
|
||||
|
||||
if(event.start_day + event.days > 7) {
|
||||
event.days = 7 - (event.start_day);
|
||||
}
|
||||
|
||||
if(self.options.first_day == 1) {
|
||||
|
||||
}
|
||||
events.push(event);
|
||||
}
|
||||
});
|
||||
t.events = events;
|
||||
t.cal = this;
|
||||
return self.options.templates['week-days'](t);
|
||||
|
||||
}
|
||||
Calendar.prototype._month = function(month) {
|
||||
|
||||
this._loadTemplate('year-month');
|
||||
|
||||
var t = {};
|
||||
var newmonth = month + 1;
|
||||
t.data_day = this.options.position.start.getFullYear() + '-' + (newmonth < 10 ? '0' + newmonth : newmonth) + '-' + '01';
|
||||
t.month_name = this.strings['m' + month];
|
||||
|
||||
var curdate = new Date(this.options.position.start.getFullYear(), month, 1, 0, 0, 0);
|
||||
var start = parseInt(curdate.getTime());
|
||||
var end = parseInt(new Date(this.options.position.start.getFullYear(), month + 1, 0, 0, 0, 0).getTime());
|
||||
var events = [];
|
||||
|
||||
$.each(this.options.events, function(k, event) {
|
||||
if((parseInt(event.start) <= end) && (parseInt(event.end) >= start)) {
|
||||
events.push(event);
|
||||
}
|
||||
});
|
||||
t.events = events;
|
||||
return this.options.templates['year-month'](t);
|
||||
}
|
||||
|
||||
Calendar.prototype._day = function(week, day) {
|
||||
|
||||
this._loadTemplate('month-day');
|
||||
|
||||
var t = {tooltip: ''};
|
||||
var cls = this.options.classes.months.outmonth;
|
||||
|
||||
var firstday = this.options.position.start.getDay();
|
||||
if(this.options.first_day == 2) {
|
||||
firstday++;
|
||||
} else {
|
||||
firstday = (firstday == 0 ? 7 : firstday);
|
||||
}
|
||||
|
||||
day = (day - firstday) + 1;
|
||||
var curdate = new Date(this.options.position.start.getFullYear(), this.options.position.start.getMonth(), day, 0, 0, 0);
|
||||
|
||||
// if day of the current month
|
||||
if(day > 0) {
|
||||
cls = this.options.classes.months.inmonth;
|
||||
}
|
||||
// stop cycling table rows;
|
||||
if((day + 1) > this.options.position.end.getDate()) {
|
||||
this.stop_cycling = true;
|
||||
}
|
||||
// if day of the next month
|
||||
if(day > this.options.position.end.getDate()) {
|
||||
day = day - this.options.position.end.getDate();
|
||||
cls = this.options.classes.months.outmonth;
|
||||
}
|
||||
|
||||
cls = $.trim(cls + " " + this._getDayClass("months", curdate));
|
||||
|
||||
if(day <= 0) {
|
||||
var daysinprevmonth = (new Date(this.options.position.start.getFullYear(), this.options.position.start.getMonth(), 0)).getDate();
|
||||
day = daysinprevmonth - Math.abs(day);
|
||||
cls += ' cal-month-first-row';
|
||||
}
|
||||
|
||||
var holiday = this._getHoliday(curdate);
|
||||
if(holiday !== false) {
|
||||
t.tooltip = holiday;
|
||||
}
|
||||
|
||||
t.data_day = curdate.getFullYear() + '-' + curdate.getMonthFormatted() + '-' + (day < 10 ? '0' + day : day);
|
||||
t.cls = cls;
|
||||
t.day = day;
|
||||
|
||||
var start = parseInt(curdate.getTime());
|
||||
var end = parseInt(start + 86400000);
|
||||
var events = [];
|
||||
|
||||
$.each(this.options.events, function(k, event) {
|
||||
if((parseInt(event.start) < end) && (parseInt(event.end) > start)) {
|
||||
events.push(event);
|
||||
}
|
||||
});
|
||||
|
||||
t.events = events;
|
||||
return this.options.templates['month-day'](t);
|
||||
}
|
||||
|
||||
Calendar.prototype._getHoliday = function(date) {
|
||||
if(this.options.enable_easter_holidays) {
|
||||
var easter = getEasterDate(date.getFullYear());
|
||||
if(easter.toDateString() == date.toDateString()) {
|
||||
return this.strings.easter;
|
||||
}
|
||||
var easterMonday = new Date();
|
||||
easterMonday.setTime(easter.getTime());
|
||||
easterMonday.setDate(easter.getDate() + 1);
|
||||
if(easterMonday.toDateString() == date.toDateString()) {
|
||||
return this.strings.easterMonday;
|
||||
}
|
||||
}
|
||||
if(this.options.holidays) {
|
||||
var date_str = date.getDateFormatted() + '-' + date.getMonthFormatted();
|
||||
if(date_str in this.options.holidays) {
|
||||
return this.options.holidays[date_str];
|
||||
}
|
||||
date_str += '-' + date.getFullYear();
|
||||
if(date_str in this.options.holidays) {
|
||||
return this.options.holidays[date_str];
|
||||
}
|
||||
}
|
||||
return false;
|
||||
};
|
||||
|
||||
Calendar.prototype._getHolidayName = function(date) {
|
||||
var holiday = this._getHoliday(date);
|
||||
return (holiday === false) ? "" : holiday;
|
||||
};
|
||||
|
||||
Calendar.prototype._getDayClass = function(class_group, date) {
|
||||
var self = this;
|
||||
var addClass = function(which, to) {
|
||||
var cls;
|
||||
cls = (self.options.classes && (class_group in self.options.classes) && (which in self.options.classes[class_group])) ? self.options.classes[class_group][which] : "";
|
||||
if((typeof(cls) == "string") && cls.length) {
|
||||
to.push(cls);
|
||||
}
|
||||
};
|
||||
var classes = [];
|
||||
if(date.toDateString() == (new Date()).toDateString()) {
|
||||
addClass("today", classes);
|
||||
}
|
||||
var holiday = this._getHoliday(date);
|
||||
if(holiday !== false) {
|
||||
addClass("holidays", classes);
|
||||
}
|
||||
switch(date.getDay()) {
|
||||
case 0:
|
||||
addClass("sunday", classes);
|
||||
break;
|
||||
case 6:
|
||||
addClass("saturday", classes);
|
||||
break;
|
||||
}
|
||||
return classes.join(" ");
|
||||
};
|
||||
|
||||
Calendar.prototype.view = function(view) {
|
||||
if(view) this.options.view = view;
|
||||
|
||||
this._init_position();
|
||||
this._loadEvents();
|
||||
this._render();
|
||||
|
||||
this.options.onAfterViewLoad.call(this, this.options.view);
|
||||
};
|
||||
|
||||
Calendar.prototype.navigate = function(where, next) {
|
||||
|
||||
var to = $.extend({}, this.options.position);
|
||||
if(where == 'next') {
|
||||
switch(this.options.view) {
|
||||
case 'year':
|
||||
to.start.setFullYear(this.options.position.start.getFullYear() + 1);
|
||||
break;
|
||||
case 'month':
|
||||
to.start.setMonth(this.options.position.start.getMonth() + 1);
|
||||
break;
|
||||
case 'week':
|
||||
to.start.setDate(this.options.position.start.getDate() + 7);
|
||||
break;
|
||||
case 'day':
|
||||
to.start.setDate(this.options.position.start.getDate() + 1);
|
||||
break;
|
||||
}
|
||||
} else if(where == 'prev') {
|
||||
switch(this.options.view) {
|
||||
case 'year':
|
||||
to.start.setFullYear(this.options.position.start.getFullYear() - 1);
|
||||
break;
|
||||
case 'month':
|
||||
to.start.setMonth(this.options.position.start.getMonth() - 1);
|
||||
break;
|
||||
case 'week':
|
||||
to.start.setDate(this.options.position.start.getDate() - 7);
|
||||
break;
|
||||
case 'day':
|
||||
to.start.setDate(this.options.position.start.getDate() - 1);
|
||||
break;
|
||||
}
|
||||
} else if(where == 'today') {
|
||||
to.start.setTime(new Date().getTime());
|
||||
}
|
||||
else {
|
||||
$.error(this.strings.error_where.format(where))
|
||||
}
|
||||
this.options.day = to.start.getFullYear() + '-' + to.start.getMonthFormatted() + '-' + to.start.getDateFormatted();
|
||||
this.view();
|
||||
if(_.isFunction(next)) {
|
||||
next();
|
||||
}
|
||||
};
|
||||
|
||||
Calendar.prototype._init_position = function() {
|
||||
var year, month, day;
|
||||
|
||||
if(this.options.day == 'now') {
|
||||
var date = new Date();
|
||||
year = date.getFullYear();
|
||||
month = date.getMonth();
|
||||
day = date.getDate();
|
||||
} else if(this.options.day.match(/^\d{4}-\d{2}-\d{2}$/g)) {
|
||||
var list = this.options.day.split('-');
|
||||
year = list[0];
|
||||
month = list[1] - 1;
|
||||
day = list[2];
|
||||
}
|
||||
else {
|
||||
$.error(this.strings.error_dateformat.format(this.options.day));
|
||||
}
|
||||
|
||||
switch(this.options.view) {
|
||||
case 'year':
|
||||
this.options.position.start.setTime(new Date(year, 0, 1).getTime());
|
||||
this.options.position.end.setTime(new Date(year, 12, 0, 23, 59, 59).getTime());
|
||||
break;
|
||||
case 'month':
|
||||
this.options.position.start.setTime(new Date(year, month, 1).getTime());
|
||||
this.options.position.end.setTime(new Date(year, month + 1, 0, 23, 59, 59).getTime());
|
||||
break;
|
||||
case 'day':
|
||||
this.options.position.start.setTime(new Date(year, month, day).getTime());
|
||||
this.options.position.end.setTime(new Date(year, month, day, 23, 59, 59).getTime());
|
||||
break;
|
||||
case 'week':
|
||||
var curr = new Date(year, month, day);
|
||||
var first = curr.getDate() - curr.getDay();
|
||||
if(this.options.first_day == 1) first += 1;
|
||||
var last = first + 6;
|
||||
|
||||
this.options.position.start.setTime(new Date(year, month, first).getTime());
|
||||
this.options.position.end.setTime(new Date(year, month, last, 23, 59, 59).getTime());
|
||||
break;
|
||||
default:
|
||||
$.error(this.strings.error_noview.format(this.options.view))
|
||||
}
|
||||
return this;
|
||||
};
|
||||
|
||||
Calendar.prototype.getTitle = function() {
|
||||
var p = this.options.position.start;
|
||||
switch(this.options.view) {
|
||||
case 'year':
|
||||
return this.strings.title_year.format(p.getFullYear());
|
||||
break;
|
||||
case 'month':
|
||||
return this.strings.title_month.format(this.strings['m' + p.getMonth()], p.getFullYear());
|
||||
break;
|
||||
case 'week':
|
||||
return this.strings.title_week.format(p.getWeek(), p.getFullYear());
|
||||
break;
|
||||
case 'day':
|
||||
return this.strings.title_day.format(this.strings['d' + p.getDay()], p.getDate(), this.strings['m' + p.getMonth()], p.getFullYear());
|
||||
break;
|
||||
}
|
||||
return;
|
||||
};
|
||||
|
||||
Calendar.prototype.isToday = function() {
|
||||
var now = new Date().getTime();
|
||||
|
||||
return ((now > this.options.position.start) && (now < this.options.position.end));
|
||||
}
|
||||
|
||||
Calendar.prototype.getStartDate = function() {
|
||||
return this.options.position.start;
|
||||
}
|
||||
|
||||
Calendar.prototype.getEndDate = function() {
|
||||
return this.options.position.end;
|
||||
}
|
||||
|
||||
Calendar.prototype._loadEvents = function() {
|
||||
if(!this.options.events_url) {
|
||||
$.error(this.strings.error_loadurl);
|
||||
}
|
||||
var self = this;
|
||||
this.options.onBeforeEventsLoad.call(this, function() {
|
||||
$.ajax({
|
||||
url: buildEventsUrl(self.options.events_url, {from: self.options.position.start.getTime(), to: self.options.position.end.getTime()}),
|
||||
dataType: 'json',
|
||||
type: 'GET',
|
||||
async: false
|
||||
}).done(function(json) {
|
||||
if(!json.success) {
|
||||
$.error(json.error);
|
||||
}
|
||||
self.options.events = json.result || [];
|
||||
self.options.onAfterEventsLoad.call(self, json.result);
|
||||
});
|
||||
});
|
||||
};
|
||||
Calendar.prototype._loadTemplate = function(name) {
|
||||
if(this.options.templates[name]) {
|
||||
return;
|
||||
}
|
||||
var self = this;
|
||||
$.ajax({
|
||||
url: this.options.tmpl_path + name + '.html',
|
||||
dataType: 'html',
|
||||
type: 'GET',
|
||||
async: false
|
||||
}).done(function(html) {
|
||||
self.options.templates[name] = _.template(html);
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
Calendar.prototype._update = function() {
|
||||
var self = this;
|
||||
|
||||
$('*[rel="tooltip"]').tooltip();
|
||||
|
||||
$('*[data-cal-date]').click(function() {
|
||||
var view = $(this).data('cal-view');
|
||||
if(!self.options.views[view].enable) {
|
||||
return;
|
||||
}
|
||||
self.options.day = $(this).data('cal-date');
|
||||
self.view(view);
|
||||
});
|
||||
$('.cal-cell').dblclick(function() {
|
||||
var view = $('[data-cal-date]', this).data('cal-view');
|
||||
if(!self.options.views[view].enable) {
|
||||
return;
|
||||
}
|
||||
self.options.day = $('[data-cal-date]', this).data('cal-date');
|
||||
self.view(view);
|
||||
});
|
||||
|
||||
this['_update_' + this.options.view]();
|
||||
};
|
||||
|
||||
Calendar.prototype._update_day = function() {
|
||||
|
||||
};
|
||||
Calendar.prototype._update_week = function() {
|
||||
|
||||
};
|
||||
Calendar.prototype._update_year = function() {
|
||||
this._update_month_year();
|
||||
|
||||
};
|
||||
Calendar.prototype._update_month = function() {
|
||||
this._update_month_year();
|
||||
|
||||
var week = $(document.createElement('div')).attr('id', 'cal-week-box');
|
||||
week.html(this.strings.week);
|
||||
var start = this.options.position.start.getFullYear() + '-' + this.options.position.start.getMonthFormatted() + '-';
|
||||
$('.cal-month-box .cal-row-fluid').each(function(k, v) {
|
||||
var row = $(v);
|
||||
row.bind('mouseenter',function() {
|
||||
var child = $('.cal-cell1:first-child .cal-month-day', row);
|
||||
var day = (child.hasClass('cal-month-first-row') ? 1 : $('[data-cal-date]', child).text());
|
||||
day = (day < 10 ? '0' + day : day);
|
||||
week.attr('data-cal-week', start + day).show().appendTo(child);
|
||||
}).bind('mouseleave', function() {
|
||||
week.hide();
|
||||
});
|
||||
});
|
||||
|
||||
var self = this;
|
||||
|
||||
week.click(function() {
|
||||
self.options.day = $(this).data('cal-week');
|
||||
self.view('week');
|
||||
});
|
||||
|
||||
$('a.event').mouseenter(function() {
|
||||
$('a.event' + $(this).data('event-id')).parents('.cal-cell1').addClass('day-highlight dh-' + $(this).data('event-class'));
|
||||
});
|
||||
$('a.event').mouseleave(function() {
|
||||
$('div.cal-cell1').removeClass('day-highlight dh-' + $(this).data('event-class'));
|
||||
});
|
||||
|
||||
};
|
||||
Calendar.prototype._update_month_year = function() {
|
||||
if(!this.options.views[this.options.view].slide_events) {
|
||||
return;
|
||||
}
|
||||
var activecell = 0;
|
||||
var self = this;
|
||||
var downbox = $(document.createElement('div')).attr('id', 'cal-day-box').html('<i class="icon-chevron-down"></i>');
|
||||
|
||||
$('.cal-month-day, .cal-year-box .span3').each(function(k, v) {
|
||||
$(v).bind('mouseenter', function() {
|
||||
if($('.events-list', v).length == 0) return;
|
||||
if($(v).children('[data-cal-date]').text() == activecell) return;
|
||||
downbox.show().appendTo(v);
|
||||
});
|
||||
$(v).bind('mouseleave', function() {
|
||||
downbox.hide();
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
var slider = $(document.createElement('div')).attr('id', 'cal-slide-box');
|
||||
slider.hide().click(function(event) {
|
||||
event.stopPropagation();
|
||||
});
|
||||
|
||||
this._loadTemplate('events-list');
|
||||
|
||||
downbox.click(function(event) {
|
||||
|
||||
event.stopPropagation();
|
||||
|
||||
var $this = $(this);
|
||||
var cell = $this.parents('.cal-cell');
|
||||
var row = $this.parents('.cal-row-fluid');
|
||||
var tick_position = cell.data('cal-row');
|
||||
|
||||
$this.fadeOut('fast');
|
||||
|
||||
slider.html(self.options.templates['events-list']({events: $('.events-list a.event', cell)}))
|
||||
.slideUp('fast', function() {
|
||||
row.after(slider);
|
||||
activecell = $('[data-cal-date]', cell).text();
|
||||
$('#cal-slide-tick').addClass('tick' + tick_position).show();
|
||||
slider.slideDown('fast', function() {
|
||||
$('body').one('click', function() {
|
||||
slider.slideUp('fast');
|
||||
activecell = 0;
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
$('a.event-item').mouseenter(function() {
|
||||
$('a.event' + $(this).data('event-id')).parents('.cal-cell1').addClass('day-highlight dh-' + $(this).data('event-class'));
|
||||
});
|
||||
$('a.event-item').mouseleave(function() {
|
||||
$('div.cal-cell1').removeClass('day-highlight dh-' + $(this).data('event-class'));
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
function getEasterDate(year) {
|
||||
var a = year % 19;
|
||||
var b = Math.floor(year / 100);
|
||||
var c = year % 100;
|
||||
var d = Math.floor(b / 4);
|
||||
var e = b % 4;
|
||||
var f = Math.floor((b + 8) / 25);
|
||||
var g = Math.floor((b - f + 1) / 3);
|
||||
var h = (19 * a + b - d - g + 15) % 30;
|
||||
var i = Math.floor(c / 4);
|
||||
var k = c % 4;
|
||||
var l = (32 + 2 * e + 2 * i - h - k) % 7;
|
||||
var m = Math.floor((a + 11 * h + 22 * l) / 451);
|
||||
var n0 = (h + l + 7 * m + 114)
|
||||
var n = Math.floor(n0 / 31) - 1;
|
||||
var p = n0 % 31 + 1;
|
||||
return new Date(year, n, p, 0, 0, 0);
|
||||
}
|
||||
|
||||
$.fn.calendar = function(params) {
|
||||
return new Calendar(params, this);
|
||||
}
|
||||
}(jQuery));
|
||||
3
js/calendar.min.js
vendored
Normal file
3
js/calendar.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
58
js/calender_config.js
Normal file
58
js/calender_config.js
Normal file
@@ -0,0 +1,58 @@
|
||||
(function($) {
|
||||
|
||||
//"use strict";
|
||||
var options = {
|
||||
events_url: 'agenda.json.php',
|
||||
view: 'month',
|
||||
tmpl_path: 'css/calender-template/',
|
||||
|
||||
/*holidays: {
|
||||
'08-03': 'International Women\'s Day',
|
||||
'25-12': 'Christmas\'s',
|
||||
'01-05': "International labor day"
|
||||
}, */
|
||||
first_day: 1,
|
||||
/*onAfterEventsLoad: function(events) {
|
||||
if(!events) {
|
||||
return;
|
||||
}
|
||||
var list = $('#eventlist');
|
||||
list.html('');
|
||||
|
||||
$.each(events, function(key, val) {
|
||||
$(document.createElement('li'))
|
||||
.html('<a href="' + val.url + '">' + val.title + '</a>')
|
||||
.appendTo(list);
|
||||
});
|
||||
}, */
|
||||
onAfterViewLoad: function(view) {
|
||||
$('.kalender-title').text(this.getTitle());
|
||||
$('.btn-group button').removeClass('btn-info');
|
||||
$('button[data-calendar-view="' + view + '"]').addClass('btn-info');
|
||||
},
|
||||
classes: {
|
||||
months: {
|
||||
general: 'label'
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
var calendar = $('#agendacalendar').calendar(options);
|
||||
|
||||
calendar.setLanguage('id-ID');
|
||||
calendar.view();
|
||||
|
||||
$('.btn-group button[data-calendar-nav]').each(function() {
|
||||
var $this = $(this);
|
||||
$this.click(function() {
|
||||
calendar.navigate($this.data('calendar-nav'));
|
||||
});
|
||||
});
|
||||
|
||||
$('.btn-group button[data-calendar-view]').each(function() {
|
||||
var $this = $(this);
|
||||
$this.click(function() {
|
||||
calendar.view($this.data('calendar-view'));
|
||||
});
|
||||
});
|
||||
}(jQuery));
|
||||
80
js/classie.js
Normal file
80
js/classie.js
Normal file
@@ -0,0 +1,80 @@
|
||||
/*!
|
||||
* classie - class helper functions
|
||||
* from bonzo https://github.com/ded/bonzo
|
||||
*
|
||||
* classie.has( elem, 'my-class' ) -> true/false
|
||||
* classie.add( elem, 'my-new-class' )
|
||||
* classie.remove( elem, 'my-unwanted-class' )
|
||||
* classie.toggle( elem, 'my-class' )
|
||||
*/
|
||||
|
||||
/*jshint browser: true, strict: true, undef: true */
|
||||
/*global define: false */
|
||||
|
||||
( function( window ) {
|
||||
|
||||
'use strict';
|
||||
|
||||
// class helper functions from bonzo https://github.com/ded/bonzo
|
||||
|
||||
function classReg( className ) {
|
||||
return new RegExp("(^|\\s+)" + className + "(\\s+|$)");
|
||||
}
|
||||
|
||||
// classList support for class management
|
||||
// altho to be fair, the api sucks because it won't accept multiple classes at once
|
||||
var hasClass, addClass, removeClass;
|
||||
|
||||
if ( 'classList' in document.documentElement ) {
|
||||
hasClass = function( elem, c ) {
|
||||
return elem.classList.contains( c );
|
||||
};
|
||||
addClass = function( elem, c ) {
|
||||
elem.classList.add( c );
|
||||
};
|
||||
removeClass = function( elem, c ) {
|
||||
elem.classList.remove( c );
|
||||
};
|
||||
}
|
||||
else {
|
||||
hasClass = function( elem, c ) {
|
||||
return classReg( c ).test( elem.className );
|
||||
};
|
||||
addClass = function( elem, c ) {
|
||||
if ( !hasClass( elem, c ) ) {
|
||||
elem.className = elem.className + ' ' + c;
|
||||
}
|
||||
};
|
||||
removeClass = function( elem, c ) {
|
||||
elem.className = elem.className.replace( classReg( c ), ' ' );
|
||||
};
|
||||
}
|
||||
|
||||
function toggleClass( elem, c ) {
|
||||
var fn = hasClass( elem, c ) ? removeClass : addClass;
|
||||
fn( elem, c );
|
||||
}
|
||||
|
||||
var classie = {
|
||||
// full names
|
||||
hasClass: hasClass,
|
||||
addClass: addClass,
|
||||
removeClass: removeClass,
|
||||
toggleClass: toggleClass,
|
||||
// short names
|
||||
has: hasClass,
|
||||
add: addClass,
|
||||
remove: removeClass,
|
||||
toggle: toggleClass
|
||||
};
|
||||
|
||||
// transport
|
||||
if ( typeof define === 'function' && define.amd ) {
|
||||
// AMD
|
||||
define( classie );
|
||||
} else {
|
||||
// browser global
|
||||
window.classie = classie;
|
||||
}
|
||||
|
||||
})( window );
|
||||
521
js/custom.js
Normal file
521
js/custom.js
Normal file
@@ -0,0 +1,521 @@
|
||||
/* =========================================================
|
||||
Comment Form
|
||||
============================================================ */
|
||||
jQuery(document).ready(function(){
|
||||
if(jQuery("#comments-form").length > 0){
|
||||
// Validate the contact form
|
||||
jQuery('#comments-form').validate({
|
||||
|
||||
// Add requirements to each of the fields
|
||||
rules: {
|
||||
name: {
|
||||
required: true,
|
||||
minlength: 2
|
||||
},
|
||||
email: {
|
||||
required: true,
|
||||
email: true
|
||||
},
|
||||
captcha:{
|
||||
required: true,
|
||||
minlength: 6
|
||||
},
|
||||
message: {
|
||||
required: true,
|
||||
minlength: 10
|
||||
}
|
||||
},
|
||||
|
||||
// Specify what error messages to display
|
||||
// when the user does something horrid
|
||||
messages: {
|
||||
name: {
|
||||
required: "Silakan isikan nama lengkap anda.",
|
||||
minlength: jQuery.format("Minimal {0} karakter.")
|
||||
},
|
||||
email: {
|
||||
required: "Silakan masukkan email anda.",
|
||||
email: "Silakan masukkan email yang valid."
|
||||
},
|
||||
captcha: {
|
||||
required: "Silakan masukkan kode captcha yang terlihat.",
|
||||
minlength: jQuery.format("Minimal {0} karakter.")
|
||||
},
|
||||
message: {
|
||||
required: "Silakan masukkan pesan/komentar anda.",
|
||||
minlength: jQuery.format("Minimal {0} karakter.")
|
||||
}
|
||||
},
|
||||
|
||||
// Use Ajax to send everything to processForm.php
|
||||
submitHandler: function(form) {
|
||||
jQuery("#submit-comment").attr("value", "Sending...");
|
||||
jQuery(form).ajaxSubmit({
|
||||
success: function(responseText, statusText, xhr, $form) {
|
||||
jQuery("#response").html(responseText).hide().slideDown("fast");
|
||||
jQuery("#submit-comment").attr("value", "Comment");
|
||||
}
|
||||
});
|
||||
return false;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
if(jQuery("#contact-form").length > 0){
|
||||
// Validate the contact form
|
||||
jQuery('#contact-form').validate({
|
||||
|
||||
// Add requirements to each of the fields
|
||||
rules: {
|
||||
name: {
|
||||
required: true,
|
||||
minlength: 2
|
||||
},
|
||||
email: {
|
||||
required: true,
|
||||
email: true
|
||||
},
|
||||
captcha:{
|
||||
required: true,
|
||||
minlength: 6
|
||||
},
|
||||
message: {
|
||||
required: true,
|
||||
minlength: 10
|
||||
}
|
||||
},
|
||||
|
||||
// Specify what error messages to display
|
||||
// when the user does something horrid
|
||||
messages: {
|
||||
name: {
|
||||
required: "Silakan isikan nama lengkap anda.",
|
||||
minlength: jQuery.format("Minimal {0} karakter.")
|
||||
},
|
||||
email: {
|
||||
required: "Silakan masukkan email anda.",
|
||||
email: "Silakan masukkan email yang valid."
|
||||
},
|
||||
url: {
|
||||
required: "Please enter your url.",
|
||||
url: "Please enter a valid url."
|
||||
},
|
||||
captcha: {
|
||||
required: "Silakan masukkan kode captcha yang terlihat.",
|
||||
minlength: jQuery.format("Minimal {0} karakter.")
|
||||
},
|
||||
message: {
|
||||
required: "Silakan masukkan pesan/komentar anda.",
|
||||
minlength: jQuery.format("Minimal {0} karakter.")
|
||||
}
|
||||
},
|
||||
|
||||
// Use Ajax to send everything to processForm.php
|
||||
submitHandler: function(form) {
|
||||
jQuery("#submit-contact").attr("value", "Sending...");
|
||||
jQuery(form).ajaxSubmit({
|
||||
success: function(responseText, statusText, xhr, $form) {
|
||||
jQuery("#response").html(responseText).hide().slideDown("fast");
|
||||
jQuery("#submit-contact").attr("value", "Submit");
|
||||
}
|
||||
});
|
||||
return false;
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
/* =========================================================
|
||||
HeadLine Scroller
|
||||
============================================================ */
|
||||
|
||||
jQuery(function() {
|
||||
var _scroll = {
|
||||
delay: 1000,
|
||||
easing: 'linear',
|
||||
items: 1,
|
||||
duration: 0.07,
|
||||
timeoutDuration: 0,
|
||||
pauseOnHover: 'immediate'
|
||||
};
|
||||
/*jQuery('.ticker-1').carouFredSel({
|
||||
width: 1000,
|
||||
align: false,
|
||||
items: {
|
||||
width: 'variable',
|
||||
height: 40,
|
||||
visible: 1
|
||||
},
|
||||
scroll: _scroll
|
||||
});*/
|
||||
|
||||
// set carousels to be 100% wide
|
||||
jQuery('.caroufredsel_wrapper').css('width', '100%');
|
||||
});
|
||||
|
||||
/* =========================================================
|
||||
Sub menu
|
||||
==========================================================*/
|
||||
(function($){ //create closure so we can safely use $ as alias for jQuery
|
||||
|
||||
jQuery(document).ready(function(){
|
||||
|
||||
// initialise plugin
|
||||
var example = jQuery('#main-menu').superfish({
|
||||
//add options here if required
|
||||
});
|
||||
});
|
||||
|
||||
})(jQuery);
|
||||
|
||||
/* =========================================================
|
||||
Mobile menu
|
||||
============================================================ */
|
||||
jQuery(document).ready(function () {
|
||||
|
||||
jQuery('#mobile-menu > span').click(function () {
|
||||
|
||||
var mobile_menu = jQuery('#toggle-view-menu');
|
||||
|
||||
if (mobile_menu.is(':hidden')) {
|
||||
mobile_menu.slideDown('300');
|
||||
jQuery(this).children('span').html('-');
|
||||
} else {
|
||||
mobile_menu.slideUp('300');
|
||||
jQuery(this).children('span').html('+');
|
||||
}
|
||||
|
||||
|
||||
|
||||
});
|
||||
|
||||
jQuery('#toggle-view-menu li').click(function () {
|
||||
|
||||
var text = jQuery(this).children('div.menu-panel');
|
||||
|
||||
if (text.is(':hidden')) {
|
||||
text.slideDown('300');
|
||||
jQuery(this).children('span').html('-');
|
||||
} else {
|
||||
text.slideUp('300');
|
||||
jQuery(this).children('span').html('+');
|
||||
}
|
||||
|
||||
jQuery(this).toggleClass('active');
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
/* =========================================================
|
||||
Flex Slider
|
||||
============================================================ */
|
||||
jQuery(window).load(function(){
|
||||
jQuery('.home-slider').flexslider({
|
||||
animation: "slide",
|
||||
start: function(slider){
|
||||
jQuery('body').removeClass('loading');
|
||||
}
|
||||
});
|
||||
|
||||
jQuery('.entry-thumb-slider').flexslider({
|
||||
animation: "slide",
|
||||
start: function(slider){
|
||||
jQuery('body').removeClass('loading');
|
||||
}
|
||||
});
|
||||
|
||||
jQuery('.gallery-slider').flexslider({
|
||||
animation: "slide",
|
||||
start: function(slider){
|
||||
jQuery('body').removeClass('loading');
|
||||
}
|
||||
});
|
||||
|
||||
jQuery('.kopa-single-slider').flexslider({
|
||||
animation: "slide",
|
||||
start: function(slider){
|
||||
jQuery('body').removeClass('loading');
|
||||
}
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
/* =========================================================
|
||||
Tabs
|
||||
============================================================ */
|
||||
jQuery(document).ready(function() {
|
||||
|
||||
if( jQuery(".tab-content-1").length > 0){
|
||||
//Default Action Product Tab
|
||||
jQuery(".tab-content-1").hide(); //Hide all content
|
||||
jQuery("ul.tabs-1 li:first").addClass("active").show(); //Activate first tab
|
||||
jQuery(".tab-content-1:first").show(); //Show first tab content
|
||||
//On Click Event Product Tab
|
||||
jQuery("ul.tabs-1 li").click(function() {
|
||||
jQuery("ul.tabs-1 li").removeClass("active"); //Remove any "active" class
|
||||
jQuery(this).addClass("active"); //Add "active" class to selected tab
|
||||
jQuery(".tab-content-1").hide(); //Hide all tab content
|
||||
var activeTab = jQuery(this).find("a").attr("href"); //Find the rel attribute value to identify the active tab + content
|
||||
jQuery(activeTab).fadeIn(); //Fade in the active content
|
||||
return false;
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
if( jQuery(".tab-content-2").length > 0){
|
||||
//Default Action Product Tab
|
||||
jQuery(".tab-content-2").hide(); //Hide all content
|
||||
jQuery("ul.tabs-2 li:first").addClass("active").show(); //Activate first tab
|
||||
jQuery(".tab-content-2:first").show(); //Show first tab content
|
||||
//On Click Event Product Tab
|
||||
jQuery("ul.tabs-2 li").click(function() {
|
||||
jQuery("ul.tabs-2 li").removeClass("active"); //Remove any "active" class
|
||||
jQuery(this).addClass("active"); //Add "active" class to selected tab
|
||||
jQuery(".tab-content-2").hide(); //Hide all tab content
|
||||
var activeTab = jQuery(this).find("a").attr("href"); //Find the rel attribute value to identify the active tab + content
|
||||
jQuery(activeTab).fadeIn(); //Fade in the active content
|
||||
return false;
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
if( jQuery(".tab-content-3").length > 0){
|
||||
//Default Action Product Tab
|
||||
jQuery(".tab-content-3").hide(); //Hide all content
|
||||
jQuery("ul.tabs-3 li:first").addClass("active").show(); //Activate first tab
|
||||
jQuery(".tab-content-3:first").show(); //Show first tab content
|
||||
//On Click Event Product Tab
|
||||
jQuery("ul.tabs-3 li").click(function() {
|
||||
jQuery("ul.tabs-3 li").removeClass("active"); //Remove any "active" class
|
||||
jQuery(this).addClass("active"); //Add "active" class to selected tab
|
||||
jQuery(".tab-content-3").hide(); //Hide all tab content
|
||||
var activeTab = jQuery(this).find("a").attr("href"); //Find the rel attribute value to identify the active tab + content
|
||||
jQuery(activeTab).fadeIn(); //Fade in the active content
|
||||
return false;
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
/* =========================================================
|
||||
Carousel
|
||||
============================================================ */
|
||||
/*jQuery(window).load(function() {
|
||||
|
||||
if( jQuery(".kopa-featured-news-carousel").length > 0){
|
||||
jQuery('.kopa-featured-news-carousel').carouFredSel({
|
||||
//responsive: true,
|
||||
prev: '#prev-1',
|
||||
next: '#next-1',
|
||||
width: '100%',
|
||||
align: 'left',
|
||||
scroll: 1,
|
||||
pagination: "#pager2",
|
||||
auto: false,
|
||||
items: {
|
||||
width: 234,
|
||||
height: 'auto',
|
||||
visible: {
|
||||
min: 1,
|
||||
max: 4
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
});*/
|
||||
|
||||
/* =========================================================
|
||||
prettyPhoto
|
||||
============================================================ */
|
||||
jQuery(document).ready(function(){
|
||||
init_image_effect();
|
||||
});
|
||||
|
||||
jQuery(window).resize(function(){
|
||||
init_image_effect();
|
||||
});
|
||||
|
||||
function init_image_effect(){
|
||||
|
||||
var view_p_w = jQuery(window).width();
|
||||
var pp_w = 500;
|
||||
var pp_h = 344;
|
||||
|
||||
if(view_p_w <= 479){
|
||||
pp_w = '120%';
|
||||
pp_h = '100%';
|
||||
}
|
||||
else if(view_p_w >= 480 && view_p_w <= 599){
|
||||
pp_w = '100%';
|
||||
pp_h = '170%';
|
||||
}
|
||||
|
||||
jQuery("a[rel^='prettyPhoto']").prettyPhoto({
|
||||
show_title: false,
|
||||
deeplinking:false,
|
||||
social_tools:false,
|
||||
default_width: pp_w,
|
||||
default_height: pp_h
|
||||
});
|
||||
}
|
||||
|
||||
/* =========================================================
|
||||
Twitter
|
||||
============================================================ */
|
||||
jQuery(function(){
|
||||
jQuery('#tweets').tweetable({
|
||||
username: 'philipbeel',
|
||||
time: true,
|
||||
rotate: false,
|
||||
speed: 4000,
|
||||
limit: 3,
|
||||
replies: false,
|
||||
position: 'append',
|
||||
failed: "Sorry, twitter is currently unavailable for this user.",
|
||||
html5: true,
|
||||
onComplete:function($ul){
|
||||
jQuery('time').timeago();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
/* =========================================================
|
||||
Accordion
|
||||
========================================================= */
|
||||
jQuery(document).ready(function() {
|
||||
var acc_wrapper=jQuery('.acc-wrapper');
|
||||
if (acc_wrapper.length >0)
|
||||
{
|
||||
|
||||
jQuery('.acc-wrapper .accordion-container').hide();
|
||||
jQuery.each(acc_wrapper, function(index, item){
|
||||
jQuery(this).find(jQuery('.accordion-title')).first().addClass('active').next().show();
|
||||
|
||||
});
|
||||
|
||||
jQuery('.accordion-title').on('click', function(e) {
|
||||
kopa_accordion_click(jQuery(this));
|
||||
e.preventDefault();
|
||||
});
|
||||
|
||||
var titles = jQuery('.accordion-title');
|
||||
|
||||
jQuery.each(titles,function(){
|
||||
kopa_accordion_click(jQuery(this));
|
||||
});
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
function kopa_accordion_click (obj) {
|
||||
if( obj.next().is(':hidden') ) {
|
||||
obj.parent().find(jQuery('.active')).removeClass('active').next().slideUp(300);
|
||||
obj.toggleClass('active').next().slideDown(300);
|
||||
|
||||
}
|
||||
jQuery('.accordion-title span').html('+');
|
||||
if (obj.hasClass('active')) {
|
||||
obj.find('span').first().html('-');
|
||||
}
|
||||
}
|
||||
|
||||
/* =========================================================
|
||||
Full Screen Background
|
||||
============================================================ */
|
||||
/*jQuery(document).ready(function(){
|
||||
var view_port_w;
|
||||
if(self.innerWidth!=undefined) view_port_w= self.innerWidth;
|
||||
else{
|
||||
var D= document.documentElement;
|
||||
if(D) view_port_w= D.clientWidth;
|
||||
}
|
||||
if(view_port_w > 1000){
|
||||
jQuery.backstretch([
|
||||
"placeholders/01.jpg",
|
||||
"placeholders/02.jpg",
|
||||
"placeholders/03.jpg"
|
||||
], {
|
||||
fade: 750,
|
||||
duration: 4000
|
||||
});
|
||||
}
|
||||
})
|
||||
*/
|
||||
/* =========================================================
|
||||
Toggle Boxes
|
||||
============================================================ */
|
||||
jQuery(document).ready(function () {
|
||||
|
||||
jQuery('#toggle-view li').click(function (event) {
|
||||
|
||||
var text = jQuery(this).children('div.panel');
|
||||
|
||||
if (text.is(':hidden')) {
|
||||
jQuery(this).addClass('active');
|
||||
text.slideDown('300');
|
||||
jQuery(this).children('span').html('-');
|
||||
} else {
|
||||
jQuery(this).removeClass('active');
|
||||
text.slideUp('300');
|
||||
jQuery(this).children('span').html('+');
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
/* =========================================================
|
||||
Gallery slider
|
||||
============================================================ */
|
||||
jQuery(window).load(function(){
|
||||
|
||||
jQuery('.kp-gallery-carousel').flexslider({
|
||||
animation: "slide",
|
||||
controlNav: false,
|
||||
slideshow: false,
|
||||
itemWidth: 149,
|
||||
itemMargin: 6,
|
||||
asNavFor: '.kp-gallery-slider'
|
||||
});
|
||||
|
||||
jQuery('.kp-gallery-slider').flexslider({
|
||||
animation: "slide",
|
||||
controlNav: false,
|
||||
slideshow: false,
|
||||
sync: ".kp-gallery-carousel",
|
||||
start: function(slider){
|
||||
jQuery('body').removeClass('loading');
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
/* =========================================================
|
||||
Scroll to top
|
||||
============================================================ */
|
||||
jQuery(document).ready(function(){
|
||||
|
||||
// hide #back-top first
|
||||
jQuery("#back-top").hide();
|
||||
|
||||
// fade in #back-top
|
||||
jQuery(function () {
|
||||
jQuery(window).scroll(function () {
|
||||
if (jQuery(this).scrollTop() > 200) {
|
||||
jQuery('#back-top').fadeIn();
|
||||
} else {
|
||||
jQuery('#back-top').fadeOut();
|
||||
}
|
||||
});
|
||||
|
||||
// scroll body to 0px on click
|
||||
jQuery('#back-top a').click(function () {
|
||||
jQuery('body,html').animate({
|
||||
scrollTop: 0
|
||||
}, 800);
|
||||
return false;
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
0
js/index.html
Normal file
0
js/index.html
Normal file
2
js/jquery-1.8.3.min.js
vendored
Normal file
2
js/jquery-1.8.3.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
361
js/jquery.backstretch.js
Normal file
361
js/jquery.backstretch.js
Normal file
@@ -0,0 +1,361 @@
|
||||
/*
|
||||
* Backstretch
|
||||
* http://srobbin.com/jquery-plugins/backstretch/
|
||||
*
|
||||
* Copyright (c) 2012 Scott Robbin
|
||||
* Licensed under the MIT license.
|
||||
*/
|
||||
|
||||
;(function ($, window, undefined) {
|
||||
'use strict';
|
||||
|
||||
/* PLUGIN DEFINITION
|
||||
* ========================= */
|
||||
|
||||
$.fn.backstretch = function (images, options) {
|
||||
// We need at least one image
|
||||
if (images === undefined || images.length === 0) {
|
||||
$.error("No images were supplied for Backstretch");
|
||||
}
|
||||
|
||||
/*
|
||||
* Scroll the page one pixel to get the right window height on iOS
|
||||
* Pretty harmless for everyone else
|
||||
*/
|
||||
if ($(window).scrollTop() === 0 ) {
|
||||
window.scrollTo(0, 0);
|
||||
}
|
||||
|
||||
return this.each(function () {
|
||||
var $this = $(this)
|
||||
, obj = $this.data('backstretch');
|
||||
|
||||
// If we've already attached Backstretch to this element, remove the old instance.
|
||||
if (obj) {
|
||||
// Merge the old options with the new
|
||||
options = $.extend(obj.options, options);
|
||||
|
||||
// Remove the old instance
|
||||
obj.destroy(true);
|
||||
}
|
||||
|
||||
obj = new Backstretch(this, images, options);
|
||||
$this.data('backstretch', obj);
|
||||
});
|
||||
};
|
||||
|
||||
// If no element is supplied, we'll attach to body
|
||||
$.backstretch = function (images, options) {
|
||||
// Return the instance
|
||||
return $('body')
|
||||
.backstretch(images, options)
|
||||
.data('backstretch');
|
||||
};
|
||||
|
||||
// Custom selector
|
||||
$.expr[':'].backstretch = function(elem) {
|
||||
return $(elem).data('backstretch') !== undefined;
|
||||
};
|
||||
|
||||
/* DEFAULTS
|
||||
* ========================= */
|
||||
|
||||
$.fn.backstretch.defaults = {
|
||||
centeredX: true // Should we center the image on the X axis?
|
||||
, centeredY: true // Should we center the image on the Y axis?
|
||||
, duration: 5000 // Amount of time in between slides (if slideshow)
|
||||
, fade: 0 // Speed of fade transition between slides
|
||||
};
|
||||
|
||||
/* STYLES
|
||||
*
|
||||
* Baked-in styles that we'll apply to our elements.
|
||||
* In an effort to keep the plugin simple, these are not exposed as options.
|
||||
* That said, anyone can override these in their own stylesheet.
|
||||
* ========================= */
|
||||
var styles = {
|
||||
wrap: {
|
||||
left: 0
|
||||
, top: 0
|
||||
, overflow: 'hidden'
|
||||
, margin: 0
|
||||
, padding: 0
|
||||
, height: '100%'
|
||||
, width: '100%'
|
||||
, zIndex: -999999
|
||||
}
|
||||
, img: {
|
||||
position: 'absolute'
|
||||
, display: 'none'
|
||||
, margin: 0
|
||||
, padding: 0
|
||||
, border: 'none'
|
||||
, width: 'auto'
|
||||
, height: 'auto'
|
||||
, maxWidth: 'none'
|
||||
, zIndex: -999999
|
||||
}
|
||||
};
|
||||
|
||||
/* CLASS DEFINITION
|
||||
* ========================= */
|
||||
var Backstretch = function (container, images, options) {
|
||||
this.options = $.extend({}, $.fn.backstretch.defaults, options || {});
|
||||
|
||||
/* In its simplest form, we allow Backstretch to be called on an image path.
|
||||
* e.g. $.backstretch('/path/to/image.jpg')
|
||||
* So, we need to turn this back into an array.
|
||||
*/
|
||||
this.images = $.isArray(images) ? images : [images];
|
||||
|
||||
// Preload images
|
||||
$.each(this.images, function () {
|
||||
$('<img />')[0].src = this;
|
||||
});
|
||||
|
||||
// Convenience reference to know if the container is body.
|
||||
this.isBody = container === document.body;
|
||||
|
||||
/* We're keeping track of a few different elements
|
||||
*
|
||||
* Container: the element that Backstretch was called on.
|
||||
* Wrap: a DIV that we place the image into, so we can hide the overflow.
|
||||
* Root: Convenience reference to help calculate the correct height.
|
||||
*/
|
||||
this.$container = $(container);
|
||||
this.$wrap = $('<div class="backstretch"></div>').css(styles.wrap).appendTo(this.$container);
|
||||
this.$root = this.isBody ? supportsFixedPosition ? $(window) : $(document) : this.$container;
|
||||
|
||||
// Non-body elements need some style adjustments
|
||||
if (!this.isBody) {
|
||||
// If the container is statically positioned, we need to make it relative,
|
||||
// and if no zIndex is defined, we should set it to zero.
|
||||
var position = this.$container.css('position')
|
||||
, zIndex = this.$container.css('zIndex');
|
||||
|
||||
this.$container.css({
|
||||
position: position === 'static' ? 'relative' : position
|
||||
, zIndex: zIndex === 'auto' ? 0 : zIndex
|
||||
, background: 'none'
|
||||
});
|
||||
|
||||
// Needs a higher z-index
|
||||
this.$wrap.css({zIndex: -999998});
|
||||
}
|
||||
|
||||
// Fixed or absolute positioning?
|
||||
this.$wrap.css({
|
||||
position: this.isBody && supportsFixedPosition ? 'fixed' : 'absolute'
|
||||
});
|
||||
|
||||
// Set the first image
|
||||
this.index = 0;
|
||||
this.show(this.index);
|
||||
|
||||
// Listen for resize
|
||||
$(window).on('resize.backstretch', $.proxy(this.resize, this))
|
||||
.on('orientationchange.backstretch', $.proxy(function () {
|
||||
// Need to do this in order to get the right window height
|
||||
if (this.isBody && window.pageYOffset === 0) {
|
||||
window.scrollTo(0, 1);
|
||||
this.resize();
|
||||
}
|
||||
}, this));
|
||||
};
|
||||
|
||||
/* PUBLIC METHODS
|
||||
* ========================= */
|
||||
Backstretch.prototype = {
|
||||
resize: function () {
|
||||
try {
|
||||
var bgCSS = {left: 0, top: 0}
|
||||
, rootWidth = this.isBody ? this.$root.width() : this.$root.innerWidth()
|
||||
, bgWidth = rootWidth
|
||||
, rootHeight = this.isBody ? ( window.innerHeight ? window.innerHeight : this.$root.height() ) : this.$root.innerHeight()
|
||||
, bgHeight = bgWidth / this.$img.data('ratio')
|
||||
, bgOffset;
|
||||
|
||||
// Make adjustments based on image ratio
|
||||
if (bgHeight >= rootHeight) {
|
||||
bgOffset = (bgHeight - rootHeight) / 2;
|
||||
if(this.options.centeredY) {
|
||||
bgCSS.top = '-' + bgOffset + 'px';
|
||||
}
|
||||
} else {
|
||||
bgHeight = rootHeight;
|
||||
bgWidth = bgHeight * this.$img.data('ratio');
|
||||
bgOffset = (bgWidth - rootWidth) / 2;
|
||||
if(this.options.centeredX) {
|
||||
bgCSS.left = '-' + bgOffset + 'px';
|
||||
}
|
||||
}
|
||||
|
||||
this.$wrap.css({width: rootWidth, height: rootHeight})
|
||||
.find('img:not(.deleteable)').css({width: bgWidth, height: bgHeight}).css(bgCSS);
|
||||
} catch(err) {
|
||||
// IE7 seems to trigger resize before the image is loaded.
|
||||
// This try/catch block is a hack to let it fail gracefully.
|
||||
}
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
// Show the slide at a certain position
|
||||
, show: function (index) {
|
||||
// Validate index
|
||||
if (Math.abs(index) > this.images.length - 1) {
|
||||
return;
|
||||
} else {
|
||||
this.index = index;
|
||||
}
|
||||
|
||||
// Vars
|
||||
var self = this
|
||||
, oldImage = self.$wrap.find('img').addClass('deleteable')
|
||||
, evt = $.Event('backstretch.show', {
|
||||
relatedTarget: self.$container[0]
|
||||
});
|
||||
|
||||
// Pause the slideshow
|
||||
clearInterval(self.interval);
|
||||
|
||||
// New image
|
||||
self.$img = $('<img />')
|
||||
.css(styles.img)
|
||||
.bind('load', function (e) {
|
||||
var imgWidth = this.width || $(e.target).width()
|
||||
, imgHeight = this.height || $(e.target).height();
|
||||
|
||||
// Save the ratio
|
||||
$(this).data('ratio', imgWidth / imgHeight);
|
||||
|
||||
// Resize
|
||||
self.resize();
|
||||
|
||||
// Show the image, then delete the old one
|
||||
// "speed" option has been deprecated, but we want backwards compatibilty
|
||||
$(this).fadeIn(self.options.speed || self.options.fade, function () {
|
||||
oldImage.remove();
|
||||
|
||||
// Resume the slideshow
|
||||
if (!self.paused) {
|
||||
self.cycle();
|
||||
}
|
||||
|
||||
// Trigger the event
|
||||
self.$container.trigger(evt);
|
||||
});
|
||||
})
|
||||
.appendTo(self.$wrap);
|
||||
|
||||
// Hack for IE img onload event
|
||||
self.$img.attr('src', self.images[index]);
|
||||
return self;
|
||||
}
|
||||
|
||||
, next: function () {
|
||||
// Next slide
|
||||
return this.show(this.index < this.images.length - 1 ? this.index + 1 : 0);
|
||||
}
|
||||
|
||||
, prev: function () {
|
||||
// Previous slide
|
||||
return this.show(this.index === 0 ? this.images.length - 1 : this.index - 1);
|
||||
}
|
||||
|
||||
, pause: function () {
|
||||
// Pause the slideshow
|
||||
this.paused = true;
|
||||
return this;
|
||||
}
|
||||
|
||||
, resume: function () {
|
||||
// Resume the slideshow
|
||||
this.paused = false;
|
||||
this.next();
|
||||
return this;
|
||||
}
|
||||
|
||||
, cycle: function () {
|
||||
// Start/resume the slideshow
|
||||
if(this.images.length > 1) {
|
||||
// Clear the interval, just in case
|
||||
clearInterval(this.interval);
|
||||
|
||||
this.interval = setInterval($.proxy(function () {
|
||||
// Check for paused slideshow
|
||||
if (!this.paused) {
|
||||
this.next();
|
||||
}
|
||||
}, this), this.options.duration);
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
, destroy: function (preserveBackground) {
|
||||
// Stop the resize events
|
||||
$(window).off('resize.backstretch orientationchange.backstretch');
|
||||
|
||||
// Clear the interval
|
||||
clearInterval(this.interval);
|
||||
|
||||
// Remove Backstretch
|
||||
if(!preserveBackground) {
|
||||
this.$wrap.remove();
|
||||
}
|
||||
this.$container.removeData('backstretch');
|
||||
}
|
||||
};
|
||||
|
||||
/* SUPPORTS FIXED POSITION?
|
||||
*
|
||||
* Based on code from jQuery Mobile 1.1.0
|
||||
* http://jquerymobile.com/
|
||||
*
|
||||
* In a nutshell, we need to figure out if fixed positioning is supported.
|
||||
* Unfortunately, this is very difficult to do on iOS, and usually involves
|
||||
* injecting content, scrolling the page, etc.. It's ugly.
|
||||
* jQuery Mobile uses this workaround. It's not ideal, but works.
|
||||
*
|
||||
* Modified to detect IE6
|
||||
* ========================= */
|
||||
|
||||
var supportsFixedPosition = (function () {
|
||||
var ua = navigator.userAgent
|
||||
, platform = navigator.platform
|
||||
// Rendering engine is Webkit, and capture major version
|
||||
, wkmatch = ua.match( /AppleWebKit\/([0-9]+)/ )
|
||||
, wkversion = !!wkmatch && wkmatch[ 1 ]
|
||||
, ffmatch = ua.match( /Fennec\/([0-9]+)/ )
|
||||
, ffversion = !!ffmatch && ffmatch[ 1 ]
|
||||
, operammobilematch = ua.match( /Opera Mobi\/([0-9]+)/ )
|
||||
, omversion = !!operammobilematch && operammobilematch[ 1 ]
|
||||
, iematch = ua.match( /MSIE ([0-9]+)/ )
|
||||
, ieversion = !!iematch && iematch[ 1 ];
|
||||
|
||||
return !(
|
||||
// iOS 4.3 and older : Platform is iPhone/Pad/Touch and Webkit version is less than 534 (ios5)
|
||||
((platform.indexOf( "iPhone" ) > -1 || platform.indexOf( "iPad" ) > -1 || platform.indexOf( "iPod" ) > -1 ) && wkversion && wkversion < 534) ||
|
||||
|
||||
// Opera Mini
|
||||
(window.operamini && ({}).toString.call( window.operamini ) === "[object OperaMini]") ||
|
||||
(operammobilematch && omversion < 7458) ||
|
||||
|
||||
//Android lte 2.1: Platform is Android and Webkit version is less than 533 (Android 2.2)
|
||||
(ua.indexOf( "Android" ) > -1 && wkversion && wkversion < 533) ||
|
||||
|
||||
// Firefox Mobile before 6.0 -
|
||||
(ffversion && ffversion < 6) ||
|
||||
|
||||
// WebOS less than 3
|
||||
("palmGetResource" in window && wkversion && wkversion < 534) ||
|
||||
|
||||
// MeeGo
|
||||
(ua.indexOf( "MeeGo" ) > -1 && ua.indexOf( "NokiaBrowser/8.5.0" ) > -1) ||
|
||||
|
||||
// IE6
|
||||
(ieversion && ieversion <= 6)
|
||||
);
|
||||
}());
|
||||
|
||||
}(jQuery, window));
|
||||
15
js/jquery.carouFredSel-6.0.4-packed.js
Normal file
15
js/jquery.carouFredSel-6.0.4-packed.js
Normal file
File diff suppressed because one or more lines are too long
38
js/jquery.flexslider-min.js
vendored
Normal file
38
js/jquery.flexslider-min.js
vendored
Normal file
@@ -0,0 +1,38 @@
|
||||
/*
|
||||
* jQuery FlexSlider v2.1
|
||||
* Copyright 2012 WooThemes
|
||||
* Contributing Author: Tyler Smith
|
||||
*/
|
||||
;(function(d){d.flexslider=function(i,k){var a=d(i),c=d.extend({},d.flexslider.defaults,k),e=c.namespace,p="ontouchstart"in window||window.DocumentTouch&&document instanceof DocumentTouch,t=p?"touchend":"click",l="vertical"===c.direction,m=c.reverse,h=0<c.itemWidth,r="fade"===c.animation,s=""!==c.asNavFor,f={};d.data(i,"flexslider",a);f={init:function(){a.animating=!1;a.currentSlide=c.startAt;a.animatingTo=a.currentSlide;a.atEnd=0===a.currentSlide||a.currentSlide===a.last;a.containerSelector=c.selector.substr(0,
|
||||
c.selector.search(" "));a.slides=d(c.selector,a);a.container=d(a.containerSelector,a);a.count=a.slides.length;a.syncExists=0<d(c.sync).length;"slide"===c.animation&&(c.animation="swing");a.prop=l?"top":"marginLeft";a.args={};a.manualPause=!1;var b=a,g;if(g=!c.video)if(g=!r)if(g=c.useCSS)a:{g=document.createElement("div");var n=["perspectiveProperty","WebkitPerspective","MozPerspective","OPerspective","msPerspective"],e;for(e in n)if(void 0!==g.style[n[e]]){a.pfx=n[e].replace("Perspective","").toLowerCase();
|
||||
a.prop="-"+a.pfx+"-transform";g=!0;break a}g=!1}b.transitions=g;""!==c.controlsContainer&&(a.controlsContainer=0<d(c.controlsContainer).length&&d(c.controlsContainer));""!==c.manualControls&&(a.manualControls=0<d(c.manualControls).length&&d(c.manualControls));c.randomize&&(a.slides.sort(function(){return Math.round(Math.random())-0.5}),a.container.empty().append(a.slides));a.doMath();s&&f.asNav.setup();a.setup("init");c.controlNav&&f.controlNav.setup();c.directionNav&&f.directionNav.setup();c.keyboard&&
|
||||
(1===d(a.containerSelector).length||c.multipleKeyboard)&&d(document).bind("keyup",function(b){b=b.keyCode;if(!a.animating&&(39===b||37===b))b=39===b?a.getTarget("next"):37===b?a.getTarget("prev"):!1,a.flexAnimate(b,c.pauseOnAction)});c.mousewheel&&a.bind("mousewheel",function(b,g){b.preventDefault();var d=0>g?a.getTarget("next"):a.getTarget("prev");a.flexAnimate(d,c.pauseOnAction)});c.pausePlay&&f.pausePlay.setup();c.slideshow&&(c.pauseOnHover&&a.hover(function(){!a.manualPlay&&!a.manualPause&&a.pause()},
|
||||
function(){!a.manualPause&&!a.manualPlay&&a.play()}),0<c.initDelay?setTimeout(a.play,c.initDelay):a.play());p&&c.touch&&f.touch();(!r||r&&c.smoothHeight)&&d(window).bind("resize focus",f.resize);setTimeout(function(){c.start(a)},200)},asNav:{setup:function(){a.asNav=!0;a.animatingTo=Math.floor(a.currentSlide/a.move);a.currentItem=a.currentSlide;a.slides.removeClass(e+"active-slide").eq(a.currentItem).addClass(e+"active-slide");a.slides.click(function(b){b.preventDefault();var b=d(this),g=b.index();
|
||||
!d(c.asNavFor).data("flexslider").animating&&!b.hasClass("active")&&(a.direction=a.currentItem<g?"next":"prev",a.flexAnimate(g,c.pauseOnAction,!1,!0,!0))})}},controlNav:{setup:function(){a.manualControls?f.controlNav.setupManual():f.controlNav.setupPaging()},setupPaging:function(){var b=1,g;a.controlNavScaffold=d('<ol class="'+e+"control-nav "+e+("thumbnails"===c.controlNav?"control-thumbs":"control-paging")+'"></ol>');if(1<a.pagingCount)for(var n=0;n<a.pagingCount;n++)g="thumbnails"===c.controlNav?
|
||||
'<img src="'+a.slides.eq(n).attr("data-thumb")+'"/>':"<a>"+b+"</a>",a.controlNavScaffold.append("<li>"+g+"</li>"),b++;a.controlsContainer?d(a.controlsContainer).append(a.controlNavScaffold):a.append(a.controlNavScaffold);f.controlNav.set();f.controlNav.active();a.controlNavScaffold.delegate("a, img",t,function(b){b.preventDefault();var b=d(this),g=a.controlNav.index(b);b.hasClass(e+"active")||(a.direction=g>a.currentSlide?"next":"prev",a.flexAnimate(g,c.pauseOnAction))});p&&a.controlNavScaffold.delegate("a",
|
||||
"click touchstart",function(a){a.preventDefault()})},setupManual:function(){a.controlNav=a.manualControls;f.controlNav.active();a.controlNav.live(t,function(b){b.preventDefault();var b=d(this),g=a.controlNav.index(b);b.hasClass(e+"active")||(g>a.currentSlide?a.direction="next":a.direction="prev",a.flexAnimate(g,c.pauseOnAction))});p&&a.controlNav.live("click touchstart",function(a){a.preventDefault()})},set:function(){a.controlNav=d("."+e+"control-nav li "+("thumbnails"===c.controlNav?"img":"a"),
|
||||
a.controlsContainer?a.controlsContainer:a)},active:function(){a.controlNav.removeClass(e+"active").eq(a.animatingTo).addClass(e+"active")},update:function(b,c){1<a.pagingCount&&"add"===b?a.controlNavScaffold.append(d("<li><a>"+a.count+"</a></li>")):1===a.pagingCount?a.controlNavScaffold.find("li").remove():a.controlNav.eq(c).closest("li").remove();f.controlNav.set();1<a.pagingCount&&a.pagingCount!==a.controlNav.length?a.update(c,b):f.controlNav.active()}},directionNav:{setup:function(){var b=d('<ul class="'+
|
||||
e+'direction-nav"><li><a class="'+e+'prev" href="#">'+c.prevText+'</a></li><li><a class="'+e+'next" href="#">'+c.nextText+"</a></li></ul>");a.controlsContainer?(d(a.controlsContainer).append(b),a.directionNav=d("."+e+"direction-nav li a",a.controlsContainer)):(a.append(b),a.directionNav=d("."+e+"direction-nav li a",a));f.directionNav.update();a.directionNav.bind(t,function(b){b.preventDefault();b=d(this).hasClass(e+"next")?a.getTarget("next"):a.getTarget("prev");a.flexAnimate(b,c.pauseOnAction)});
|
||||
p&&a.directionNav.bind("click touchstart",function(a){a.preventDefault()})},update:function(){var b=e+"disabled";1===a.pagingCount?a.directionNav.addClass(b):c.animationLoop?a.directionNav.removeClass(b):0===a.animatingTo?a.directionNav.removeClass(b).filter("."+e+"prev").addClass(b):a.animatingTo===a.last?a.directionNav.removeClass(b).filter("."+e+"next").addClass(b):a.directionNav.removeClass(b)}},pausePlay:{setup:function(){var b=d('<div class="'+e+'pauseplay"><a></a></div>');a.controlsContainer?
|
||||
(a.controlsContainer.append(b),a.pausePlay=d("."+e+"pauseplay a",a.controlsContainer)):(a.append(b),a.pausePlay=d("."+e+"pauseplay a",a));f.pausePlay.update(c.slideshow?e+"pause":e+"play");a.pausePlay.bind(t,function(b){b.preventDefault();d(this).hasClass(e+"pause")?(a.manualPause=!0,a.manualPlay=!1,a.pause()):(a.manualPause=!1,a.manualPlay=!0,a.play())});p&&a.pausePlay.bind("click touchstart",function(a){a.preventDefault()})},update:function(b){"play"===b?a.pausePlay.removeClass(e+"pause").addClass(e+
|
||||
"play").text(c.playText):a.pausePlay.removeClass(e+"play").addClass(e+"pause").text(c.pauseText)}},touch:function(){function b(b){j=l?d-b.touches[0].pageY:d-b.touches[0].pageX;p=l?Math.abs(j)<Math.abs(b.touches[0].pageX-e):Math.abs(j)<Math.abs(b.touches[0].pageY-e);if(!p||500<Number(new Date)-k)b.preventDefault(),!r&&a.transitions&&(c.animationLoop||(j/=0===a.currentSlide&&0>j||a.currentSlide===a.last&&0<j?Math.abs(j)/q+2:1),a.setProps(f+j,"setTouch"))}function g(){i.removeEventListener("touchmove",
|
||||
b,!1);if(a.animatingTo===a.currentSlide&&!p&&null!==j){var h=m?-j:j,l=0<h?a.getTarget("next"):a.getTarget("prev");a.canAdvance(l)&&(550>Number(new Date)-k&&50<Math.abs(h)||Math.abs(h)>q/2)?a.flexAnimate(l,c.pauseOnAction):r||a.flexAnimate(a.currentSlide,c.pauseOnAction,!0)}i.removeEventListener("touchend",g,!1);f=j=e=d=null}var d,e,f,q,j,k,p=!1;i.addEventListener("touchstart",function(j){a.animating?j.preventDefault():1===j.touches.length&&(a.pause(),q=l?a.h:a.w,k=Number(new Date),f=h&&m&&a.animatingTo===
|
||||
a.last?0:h&&m?a.limit-(a.itemW+c.itemMargin)*a.move*a.animatingTo:h&&a.currentSlide===a.last?a.limit:h?(a.itemW+c.itemMargin)*a.move*a.currentSlide:m?(a.last-a.currentSlide+a.cloneOffset)*q:(a.currentSlide+a.cloneOffset)*q,d=l?j.touches[0].pageY:j.touches[0].pageX,e=l?j.touches[0].pageX:j.touches[0].pageY,i.addEventListener("touchmove",b,!1),i.addEventListener("touchend",g,!1))},!1)},resize:function(){!a.animating&&a.is(":visible")&&(h||a.doMath(),r?f.smoothHeight():h?(a.slides.width(a.computedW),
|
||||
a.update(a.pagingCount),a.setProps()):l?(a.viewport.height(a.h),a.setProps(a.h,"setTotal")):(c.smoothHeight&&f.smoothHeight(),a.newSlides.width(a.computedW),a.setProps(a.computedW,"setTotal")))},smoothHeight:function(b){if(!l||r){var c=r?a:a.viewport;b?c.animate({height:a.slides.eq(a.animatingTo).height()},b):c.height(a.slides.eq(a.animatingTo).height())}},sync:function(b){var g=d(c.sync).data("flexslider"),e=a.animatingTo;switch(b){case "animate":g.flexAnimate(e,c.pauseOnAction,!1,!0);break;case "play":!g.playing&&
|
||||
!g.asNav&&g.play();break;case "pause":g.pause()}}};a.flexAnimate=function(b,g,n,i,k){s&&1===a.pagingCount&&(a.direction=a.currentItem<b?"next":"prev");if(!a.animating&&(a.canAdvance(b,k)||n)&&a.is(":visible")){if(s&&i)if(n=d(c.asNavFor).data("flexslider"),a.atEnd=0===b||b===a.count-1,n.flexAnimate(b,!0,!1,!0,k),a.direction=a.currentItem<b?"next":"prev",n.direction=a.direction,Math.ceil((b+1)/a.visible)-1!==a.currentSlide&&0!==b)a.currentItem=b,a.slides.removeClass(e+"active-slide").eq(b).addClass(e+
|
||||
"active-slide"),b=Math.floor(b/a.visible);else return a.currentItem=b,a.slides.removeClass(e+"active-slide").eq(b).addClass(e+"active-slide"),!1;a.animating=!0;a.animatingTo=b;c.before(a);g&&a.pause();a.syncExists&&!k&&f.sync("animate");c.controlNav&&f.controlNav.active();h||a.slides.removeClass(e+"active-slide").eq(b).addClass(e+"active-slide");a.atEnd=0===b||b===a.last;c.directionNav&&f.directionNav.update();b===a.last&&(c.end(a),c.animationLoop||a.pause());if(r)p?(a.slides.eq(a.currentSlide).css({opacity:0,
|
||||
zIndex:1}),a.slides.eq(b).css({opacity:1,zIndex:2}),a.slides.unbind("webkitTransitionEnd transitionend"),a.slides.eq(a.currentSlide).bind("webkitTransitionEnd transitionend",function(){c.after(a)}),a.animating=!1,a.currentSlide=a.animatingTo):(a.slides.eq(a.currentSlide).fadeOut(c.animationSpeed,c.easing),a.slides.eq(b).fadeIn(c.animationSpeed,c.easing,a.wrapup));else{var q=l?a.slides.filter(":first").height():a.computedW;h?(b=c.itemWidth>a.w?2*c.itemMargin:c.itemMargin,b=(a.itemW+b)*a.move*a.animatingTo,
|
||||
b=b>a.limit&&1!==a.visible?a.limit:b):b=0===a.currentSlide&&b===a.count-1&&c.animationLoop&&"next"!==a.direction?m?(a.count+a.cloneOffset)*q:0:a.currentSlide===a.last&&0===b&&c.animationLoop&&"prev"!==a.direction?m?0:(a.count+1)*q:m?(a.count-1-b+a.cloneOffset)*q:(b+a.cloneOffset)*q;a.setProps(b,"",c.animationSpeed);if(a.transitions){if(!c.animationLoop||!a.atEnd)a.animating=!1,a.currentSlide=a.animatingTo;a.container.unbind("webkitTransitionEnd transitionend");a.container.bind("webkitTransitionEnd transitionend",
|
||||
function(){a.wrapup(q)})}else a.container.animate(a.args,c.animationSpeed,c.easing,function(){a.wrapup(q)})}c.smoothHeight&&f.smoothHeight(c.animationSpeed)}};a.wrapup=function(b){!r&&!h&&(0===a.currentSlide&&a.animatingTo===a.last&&c.animationLoop?a.setProps(b,"jumpEnd"):a.currentSlide===a.last&&(0===a.animatingTo&&c.animationLoop)&&a.setProps(b,"jumpStart"));a.animating=!1;a.currentSlide=a.animatingTo;c.after(a)};a.animateSlides=function(){a.animating||a.flexAnimate(a.getTarget("next"))};a.pause=
|
||||
function(){clearInterval(a.animatedSlides);a.playing=!1;c.pausePlay&&f.pausePlay.update("play");a.syncExists&&f.sync("pause")};a.play=function(){a.animatedSlides=setInterval(a.animateSlides,c.slideshowSpeed);a.playing=!0;c.pausePlay&&f.pausePlay.update("pause");a.syncExists&&f.sync("play")};a.canAdvance=function(b,g){var d=s?a.pagingCount-1:a.last;return g?!0:s&&a.currentItem===a.count-1&&0===b&&"prev"===a.direction?!0:s&&0===a.currentItem&&b===a.pagingCount-1&&"next"!==a.direction?!1:b===a.currentSlide&&
|
||||
!s?!1:c.animationLoop?!0:a.atEnd&&0===a.currentSlide&&b===d&&"next"!==a.direction?!1:a.atEnd&&a.currentSlide===d&&0===b&&"next"===a.direction?!1:!0};a.getTarget=function(b){a.direction=b;return"next"===b?a.currentSlide===a.last?0:a.currentSlide+1:0===a.currentSlide?a.last:a.currentSlide-1};a.setProps=function(b,g,d){var e,f=b?b:(a.itemW+c.itemMargin)*a.move*a.animatingTo;e=-1*function(){if(h)return"setTouch"===g?b:m&&a.animatingTo===a.last?0:m?a.limit-(a.itemW+c.itemMargin)*a.move*a.animatingTo:a.animatingTo===
|
||||
a.last?a.limit:f;switch(g){case "setTotal":return m?(a.count-1-a.currentSlide+a.cloneOffset)*b:(a.currentSlide+a.cloneOffset)*b;case "setTouch":return b;case "jumpEnd":return m?b:a.count*b;case "jumpStart":return m?a.count*b:b;default:return b}}()+"px";a.transitions&&(e=l?"translate3d(0,"+e+",0)":"translate3d("+e+",0,0)",d=void 0!==d?d/1E3+"s":"0s",a.container.css("-"+a.pfx+"-transition-duration",d));a.args[a.prop]=e;(a.transitions||void 0===d)&&a.container.css(a.args)};a.setup=function(b){if(r)a.slides.css({width:"100%",
|
||||
"float":"left",marginRight:"-100%",position:"relative"}),"init"===b&&(p?a.slides.css({opacity:0,display:"block",webkitTransition:"opacity "+c.animationSpeed/1E3+"s ease",zIndex:1}).eq(a.currentSlide).css({opacity:1,zIndex:2}):a.slides.eq(a.currentSlide).fadeIn(c.animationSpeed,c.easing)),c.smoothHeight&&f.smoothHeight();else{var g,n;"init"===b&&(a.viewport=d('<div class="'+e+'viewport"></div>').css({overflow:"hidden",position:"relative"}).appendTo(a).append(a.container),a.cloneCount=0,a.cloneOffset=
|
||||
0,m&&(n=d.makeArray(a.slides).reverse(),a.slides=d(n),a.container.empty().append(a.slides)));c.animationLoop&&!h&&(a.cloneCount=2,a.cloneOffset=1,"init"!==b&&a.container.find(".clone").remove(),a.container.append(a.slides.first().clone().addClass("clone")).prepend(a.slides.last().clone().addClass("clone")));a.newSlides=d(c.selector,a);g=m?a.count-1-a.currentSlide+a.cloneOffset:a.currentSlide+a.cloneOffset;l&&!h?(a.container.height(200*(a.count+a.cloneCount)+"%").css("position","absolute").width("100%"),
|
||||
setTimeout(function(){a.newSlides.css({display:"block"});a.doMath();a.viewport.height(a.h);a.setProps(g*a.h,"init")},"init"===b?100:0)):(a.container.width(200*(a.count+a.cloneCount)+"%"),a.setProps(g*a.computedW,"init"),setTimeout(function(){a.doMath();a.newSlides.css({width:a.computedW,"float":"left",display:"block"});c.smoothHeight&&f.smoothHeight()},"init"===b?100:0))}h||a.slides.removeClass(e+"active-slide").eq(a.currentSlide).addClass(e+"active-slide")};a.doMath=function(){var b=a.slides.first(),
|
||||
d=c.itemMargin,e=c.minItems,f=c.maxItems;a.w=a.width();a.h=b.height();a.boxPadding=b.outerWidth()-b.width();h?(a.itemT=c.itemWidth+d,a.minW=e?e*a.itemT:a.w,a.maxW=f?f*a.itemT:a.w,a.itemW=a.minW>a.w?(a.w-d*e)/e:a.maxW<a.w?(a.w-d*f)/f:c.itemWidth>a.w?a.w:c.itemWidth,a.visible=Math.floor(a.w/(a.itemW+d)),a.move=0<c.move&&c.move<a.visible?c.move:a.visible,a.pagingCount=Math.ceil((a.count-a.visible)/a.move+1),a.last=a.pagingCount-1,a.limit=1===a.pagingCount?0:c.itemWidth>a.w?(a.itemW+2*d)*a.count-a.w-
|
||||
d:(a.itemW+d)*a.count-a.w-d):(a.itemW=a.w,a.pagingCount=a.count,a.last=a.count-1);a.computedW=a.itemW-a.boxPadding};a.update=function(b,d){a.doMath();h||(b<a.currentSlide?a.currentSlide+=1:b<=a.currentSlide&&0!==b&&(a.currentSlide-=1),a.animatingTo=a.currentSlide);if(c.controlNav&&!a.manualControls)if("add"===d&&!h||a.pagingCount>a.controlNav.length)f.controlNav.update("add");else if("remove"===d&&!h||a.pagingCount<a.controlNav.length)h&&a.currentSlide>a.last&&(a.currentSlide-=1,a.animatingTo-=1),
|
||||
f.controlNav.update("remove",a.last);c.directionNav&&f.directionNav.update()};a.addSlide=function(b,e){var f=d(b);a.count+=1;a.last=a.count-1;l&&m?void 0!==e?a.slides.eq(a.count-e).after(f):a.container.prepend(f):void 0!==e?a.slides.eq(e).before(f):a.container.append(f);a.update(e,"add");a.slides=d(c.selector+":not(.clone)",a);a.setup();c.added(a)};a.removeSlide=function(b){var e=isNaN(b)?a.slides.index(d(b)):b;a.count-=1;a.last=a.count-1;isNaN(b)?d(b,a.slides).remove():l&&m?a.slides.eq(a.last).remove():
|
||||
a.slides.eq(b).remove();a.doMath();a.update(e,"remove");a.slides=d(c.selector+":not(.clone)",a);a.setup();c.removed(a)};f.init()};d.flexslider.defaults={namespace:"flex-",selector:".slides > li",animation:"fade",easing:"swing",direction:"horizontal",reverse:!1,animationLoop:!0,smoothHeight:!1,startAt:0,slideshow:!0,slideshowSpeed:7E3,animationSpeed:600,initDelay:0,randomize:!1,pauseOnAction:!0,pauseOnHover:!1,useCSS:!0,touch:!0,video:!1,controlNav:!0,directionNav:!0,prevText:"Previous",nextText:"Next",
|
||||
keyboard:!0,multipleKeyboard:!1,mousewheel:!1,pausePlay:!1,pauseText:"Pause",playText:"Play",controlsContainer:"",manualControls:"",sync:"",asNavFor:"",itemWidth:0,itemMargin:0,minItems:0,maxItems:0,move:0,start:function(){},before:function(){},after:function(){},end:function(){},added:function(){},removed:function(){}};d.fn.flexslider=function(i){void 0===i&&(i={});if("object"===typeof i)return this.each(function(){var a=d(this),c=a.find(i.selector?i.selector:".slides > li");1===c.length?(c.fadeIn(400),
|
||||
i.start&&i.start(a)):void 0==a.data("flexslider")&&new d.flexslider(this,i)});var k=d(this).data("flexslider");switch(i){case "play":k.play();break;case "pause":k.pause();break;case "next":k.flexAnimate(k.getTarget("next"),!0);break;case "prev":case "previous":k.flexAnimate(k.getTarget("prev"),!0);break;default:"number"===typeof i&&k.flexAnimate(i,!0)}}})(jQuery);
|
||||
903
js/jquery.flexslider.js
Normal file
903
js/jquery.flexslider.js
Normal file
@@ -0,0 +1,903 @@
|
||||
/*
|
||||
* jQuery FlexSlider v2.1
|
||||
* http://www.woothemes.com/flexslider/
|
||||
*
|
||||
* Copyright 2012 WooThemes
|
||||
* Free to use under the GPLv2 license.
|
||||
* http://www.gnu.org/licenses/gpl-2.0.html
|
||||
*
|
||||
* Contributing author: Tyler Smith (@mbmufffin)
|
||||
*/
|
||||
|
||||
;(function ($) {
|
||||
|
||||
//FlexSlider: Object Instance
|
||||
$.flexslider = function(el, options) {
|
||||
var slider = $(el),
|
||||
vars = $.extend({}, $.flexslider.defaults, options),
|
||||
namespace = vars.namespace,
|
||||
touch = ("ontouchstart" in window) || window.DocumentTouch && document instanceof DocumentTouch,
|
||||
eventType = (touch) ? "touchend" : "click",
|
||||
vertical = vars.direction === "vertical",
|
||||
reverse = vars.reverse,
|
||||
carousel = (vars.itemWidth > 0),
|
||||
fade = vars.animation === "fade",
|
||||
asNav = vars.asNavFor !== "",
|
||||
methods = {};
|
||||
|
||||
// Store a reference to the slider object
|
||||
$.data(el, "flexslider", slider);
|
||||
|
||||
// Privat slider methods
|
||||
methods = {
|
||||
init: function() {
|
||||
slider.animating = false;
|
||||
slider.currentSlide = vars.startAt;
|
||||
slider.animatingTo = slider.currentSlide;
|
||||
slider.atEnd = (slider.currentSlide === 0 || slider.currentSlide === slider.last);
|
||||
slider.containerSelector = vars.selector.substr(0,vars.selector.search(' '));
|
||||
slider.slides = $(vars.selector, slider);
|
||||
slider.container = $(slider.containerSelector, slider);
|
||||
slider.count = slider.slides.length;
|
||||
// SYNC:
|
||||
slider.syncExists = $(vars.sync).length > 0;
|
||||
// SLIDE:
|
||||
if (vars.animation === "slide") vars.animation = "swing";
|
||||
slider.prop = (vertical) ? "top" : "marginLeft";
|
||||
slider.args = {};
|
||||
// SLIDESHOW:
|
||||
slider.manualPause = false;
|
||||
// TOUCH/USECSS:
|
||||
slider.transitions = !vars.video && !fade && vars.useCSS && (function() {
|
||||
var obj = document.createElement('div'),
|
||||
props = ['perspectiveProperty', 'WebkitPerspective', 'MozPerspective', 'OPerspective', 'msPerspective'];
|
||||
for (var i in props) {
|
||||
if ( obj.style[ props[i] ] !== undefined ) {
|
||||
slider.pfx = props[i].replace('Perspective','').toLowerCase();
|
||||
slider.prop = "-" + slider.pfx + "-transform";
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}());
|
||||
// CONTROLSCONTAINER:
|
||||
if (vars.controlsContainer !== "") slider.controlsContainer = $(vars.controlsContainer).length > 0 && $(vars.controlsContainer);
|
||||
// MANUAL:
|
||||
if (vars.manualControls !== "") slider.manualControls = $(vars.manualControls).length > 0 && $(vars.manualControls);
|
||||
|
||||
// RANDOMIZE:
|
||||
if (vars.randomize) {
|
||||
slider.slides.sort(function() { return (Math.round(Math.random())-0.5); });
|
||||
slider.container.empty().append(slider.slides);
|
||||
}
|
||||
|
||||
slider.doMath();
|
||||
|
||||
// ASNAV:
|
||||
if (asNav) methods.asNav.setup();
|
||||
|
||||
// INIT
|
||||
slider.setup("init");
|
||||
|
||||
// CONTROLNAV:
|
||||
if (vars.controlNav) methods.controlNav.setup();
|
||||
|
||||
// DIRECTIONNAV:
|
||||
if (vars.directionNav) methods.directionNav.setup();
|
||||
|
||||
// KEYBOARD:
|
||||
if (vars.keyboard && ($(slider.containerSelector).length === 1 || vars.multipleKeyboard)) {
|
||||
$(document).bind('keyup', function(event) {
|
||||
var keycode = event.keyCode;
|
||||
if (!slider.animating && (keycode === 39 || keycode === 37)) {
|
||||
var target = (keycode === 39) ? slider.getTarget('next') :
|
||||
(keycode === 37) ? slider.getTarget('prev') : false;
|
||||
slider.flexAnimate(target, vars.pauseOnAction);
|
||||
}
|
||||
});
|
||||
}
|
||||
// MOUSEWHEEL:
|
||||
if (vars.mousewheel) {
|
||||
slider.bind('mousewheel', function(event, delta, deltaX, deltaY) {
|
||||
event.preventDefault();
|
||||
var target = (delta < 0) ? slider.getTarget('next') : slider.getTarget('prev');
|
||||
slider.flexAnimate(target, vars.pauseOnAction);
|
||||
});
|
||||
}
|
||||
|
||||
// PAUSEPLAY
|
||||
if (vars.pausePlay) methods.pausePlay.setup();
|
||||
|
||||
// SLIDSESHOW
|
||||
if (vars.slideshow) {
|
||||
if (vars.pauseOnHover) {
|
||||
slider.hover(function() {
|
||||
if (!slider.manualPlay && !slider.manualPause) slider.pause();
|
||||
}, function() {
|
||||
if (!slider.manualPause && !slider.manualPlay) slider.play();
|
||||
});
|
||||
}
|
||||
// initialize animation
|
||||
(vars.initDelay > 0) ? setTimeout(slider.play, vars.initDelay) : slider.play();
|
||||
}
|
||||
|
||||
// TOUCH
|
||||
if (touch && vars.touch) methods.touch();
|
||||
|
||||
// FADE&&SMOOTHHEIGHT || SLIDE:
|
||||
if (!fade || (fade && vars.smoothHeight)) $(window).bind("resize focus", methods.resize);
|
||||
|
||||
|
||||
// API: start() Callback
|
||||
setTimeout(function(){
|
||||
vars.start(slider);
|
||||
}, 200);
|
||||
},
|
||||
asNav: {
|
||||
setup: function() {
|
||||
slider.asNav = true;
|
||||
slider.animatingTo = Math.floor(slider.currentSlide/slider.move);
|
||||
slider.currentItem = slider.currentSlide;
|
||||
slider.slides.removeClass(namespace + "active-slide").eq(slider.currentItem).addClass(namespace + "active-slide");
|
||||
slider.slides.click(function(e){
|
||||
e.preventDefault();
|
||||
var $slide = $(this),
|
||||
target = $slide.index();
|
||||
if (!$(vars.asNavFor).data('flexslider').animating && !$slide.hasClass('active')) {
|
||||
slider.direction = (slider.currentItem < target) ? "next" : "prev";
|
||||
slider.flexAnimate(target, vars.pauseOnAction, false, true, true);
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
controlNav: {
|
||||
setup: function() {
|
||||
if (!slider.manualControls) {
|
||||
methods.controlNav.setupPaging();
|
||||
} else { // MANUALCONTROLS:
|
||||
methods.controlNav.setupManual();
|
||||
}
|
||||
},
|
||||
setupPaging: function() {
|
||||
var type = (vars.controlNav === "thumbnails") ? 'control-thumbs' : 'control-paging',
|
||||
j = 1,
|
||||
item;
|
||||
|
||||
slider.controlNavScaffold = $('<ol class="'+ namespace + 'control-nav ' + namespace + type + '"></ol>');
|
||||
|
||||
if (slider.pagingCount > 1) {
|
||||
for (var i = 0; i < slider.pagingCount; i++) {
|
||||
item = (vars.controlNav === "thumbnails") ? '<img src="' + slider.slides.eq(i).attr("data-thumb") + '"/>' : '<a>' + j + '</a>';
|
||||
slider.controlNavScaffold.append('<li>' + item + '</li>');
|
||||
j++;
|
||||
}
|
||||
}
|
||||
|
||||
// CONTROLSCONTAINER:
|
||||
(slider.controlsContainer) ? $(slider.controlsContainer).append(slider.controlNavScaffold) : slider.append(slider.controlNavScaffold);
|
||||
methods.controlNav.set();
|
||||
|
||||
methods.controlNav.active();
|
||||
|
||||
slider.controlNavScaffold.delegate('a, img', eventType, function(event) {
|
||||
event.preventDefault();
|
||||
var $this = $(this),
|
||||
target = slider.controlNav.index($this);
|
||||
|
||||
if (!$this.hasClass(namespace + 'active')) {
|
||||
slider.direction = (target > slider.currentSlide) ? "next" : "prev";
|
||||
slider.flexAnimate(target, vars.pauseOnAction);
|
||||
}
|
||||
});
|
||||
// Prevent iOS click event bug
|
||||
if (touch) {
|
||||
slider.controlNavScaffold.delegate('a', "click touchstart", function(event) {
|
||||
event.preventDefault();
|
||||
});
|
||||
}
|
||||
},
|
||||
setupManual: function() {
|
||||
slider.controlNav = slider.manualControls;
|
||||
methods.controlNav.active();
|
||||
|
||||
slider.controlNav.live(eventType, function(event) {
|
||||
event.preventDefault();
|
||||
var $this = $(this),
|
||||
target = slider.controlNav.index($this);
|
||||
|
||||
if (!$this.hasClass(namespace + 'active')) {
|
||||
(target > slider.currentSlide) ? slider.direction = "next" : slider.direction = "prev";
|
||||
slider.flexAnimate(target, vars.pauseOnAction);
|
||||
}
|
||||
});
|
||||
// Prevent iOS click event bug
|
||||
if (touch) {
|
||||
slider.controlNav.live("click touchstart", function(event) {
|
||||
event.preventDefault();
|
||||
});
|
||||
}
|
||||
},
|
||||
set: function() {
|
||||
var selector = (vars.controlNav === "thumbnails") ? 'img' : 'a';
|
||||
slider.controlNav = $('.' + namespace + 'control-nav li ' + selector, (slider.controlsContainer) ? slider.controlsContainer : slider);
|
||||
},
|
||||
active: function() {
|
||||
slider.controlNav.removeClass(namespace + "active").eq(slider.animatingTo).addClass(namespace + "active");
|
||||
},
|
||||
update: function(action, pos) {
|
||||
if (slider.pagingCount > 1 && action === "add") {
|
||||
slider.controlNavScaffold.append($('<li><a>' + slider.count + '</a></li>'));
|
||||
} else if (slider.pagingCount === 1) {
|
||||
slider.controlNavScaffold.find('li').remove();
|
||||
} else {
|
||||
slider.controlNav.eq(pos).closest('li').remove();
|
||||
}
|
||||
methods.controlNav.set();
|
||||
(slider.pagingCount > 1 && slider.pagingCount !== slider.controlNav.length) ? slider.update(pos, action) : methods.controlNav.active();
|
||||
}
|
||||
},
|
||||
directionNav: {
|
||||
setup: function() {
|
||||
var directionNavScaffold = $('<ul class="' + namespace + 'direction-nav"><li><a class="' + namespace + 'prev" href="#">' + vars.prevText + '</a></li><li><a class="' + namespace + 'next" href="#">' + vars.nextText + '</a></li></ul>');
|
||||
|
||||
// CONTROLSCONTAINER:
|
||||
if (slider.controlsContainer) {
|
||||
$(slider.controlsContainer).append(directionNavScaffold);
|
||||
slider.directionNav = $('.' + namespace + 'direction-nav li a', slider.controlsContainer);
|
||||
} else {
|
||||
slider.append(directionNavScaffold);
|
||||
slider.directionNav = $('.' + namespace + 'direction-nav li a', slider);
|
||||
}
|
||||
|
||||
methods.directionNav.update();
|
||||
|
||||
slider.directionNav.bind(eventType, function(event) {
|
||||
event.preventDefault();
|
||||
var target = ($(this).hasClass(namespace + 'next')) ? slider.getTarget('next') : slider.getTarget('prev');
|
||||
slider.flexAnimate(target, vars.pauseOnAction);
|
||||
});
|
||||
// Prevent iOS click event bug
|
||||
if (touch) {
|
||||
slider.directionNav.bind("click touchstart", function(event) {
|
||||
event.preventDefault();
|
||||
});
|
||||
}
|
||||
},
|
||||
update: function() {
|
||||
var disabledClass = namespace + 'disabled';
|
||||
if (slider.pagingCount === 1) {
|
||||
slider.directionNav.addClass(disabledClass);
|
||||
} else if (!vars.animationLoop) {
|
||||
if (slider.animatingTo === 0) {
|
||||
slider.directionNav.removeClass(disabledClass).filter('.' + namespace + "prev").addClass(disabledClass);
|
||||
} else if (slider.animatingTo === slider.last) {
|
||||
slider.directionNav.removeClass(disabledClass).filter('.' + namespace + "next").addClass(disabledClass);
|
||||
} else {
|
||||
slider.directionNav.removeClass(disabledClass);
|
||||
}
|
||||
} else {
|
||||
slider.directionNav.removeClass(disabledClass);
|
||||
}
|
||||
}
|
||||
},
|
||||
pausePlay: {
|
||||
setup: function() {
|
||||
var pausePlayScaffold = $('<div class="' + namespace + 'pauseplay"><a></a></div>');
|
||||
|
||||
// CONTROLSCONTAINER:
|
||||
if (slider.controlsContainer) {
|
||||
slider.controlsContainer.append(pausePlayScaffold);
|
||||
slider.pausePlay = $('.' + namespace + 'pauseplay a', slider.controlsContainer);
|
||||
} else {
|
||||
slider.append(pausePlayScaffold);
|
||||
slider.pausePlay = $('.' + namespace + 'pauseplay a', slider);
|
||||
}
|
||||
|
||||
methods.pausePlay.update((vars.slideshow) ? namespace + 'pause' : namespace + 'play');
|
||||
|
||||
slider.pausePlay.bind(eventType, function(event) {
|
||||
event.preventDefault();
|
||||
if ($(this).hasClass(namespace + 'pause')) {
|
||||
slider.manualPause = true;
|
||||
slider.manualPlay = false;
|
||||
slider.pause();
|
||||
} else {
|
||||
slider.manualPause = false;
|
||||
slider.manualPlay = true;
|
||||
slider.play();
|
||||
}
|
||||
});
|
||||
// Prevent iOS click event bug
|
||||
if (touch) {
|
||||
slider.pausePlay.bind("click touchstart", function(event) {
|
||||
event.preventDefault();
|
||||
});
|
||||
}
|
||||
},
|
||||
update: function(state) {
|
||||
(state === "play") ? slider.pausePlay.removeClass(namespace + 'pause').addClass(namespace + 'play').text(vars.playText) : slider.pausePlay.removeClass(namespace + 'play').addClass(namespace + 'pause').text(vars.pauseText);
|
||||
}
|
||||
},
|
||||
touch: function() {
|
||||
var startX,
|
||||
startY,
|
||||
offset,
|
||||
cwidth,
|
||||
dx,
|
||||
startT,
|
||||
scrolling = false;
|
||||
|
||||
el.addEventListener('touchstart', onTouchStart, false);
|
||||
function onTouchStart(e) {
|
||||
if (slider.animating) {
|
||||
e.preventDefault();
|
||||
} else if (e.touches.length === 1) {
|
||||
slider.pause();
|
||||
// CAROUSEL:
|
||||
cwidth = (vertical) ? slider.h : slider. w;
|
||||
startT = Number(new Date());
|
||||
// CAROUSEL:
|
||||
offset = (carousel && reverse && slider.animatingTo === slider.last) ? 0 :
|
||||
(carousel && reverse) ? slider.limit - (((slider.itemW + vars.itemMargin) * slider.move) * slider.animatingTo) :
|
||||
(carousel && slider.currentSlide === slider.last) ? slider.limit :
|
||||
(carousel) ? ((slider.itemW + vars.itemMargin) * slider.move) * slider.currentSlide :
|
||||
(reverse) ? (slider.last - slider.currentSlide + slider.cloneOffset) * cwidth : (slider.currentSlide + slider.cloneOffset) * cwidth;
|
||||
startX = (vertical) ? e.touches[0].pageY : e.touches[0].pageX;
|
||||
startY = (vertical) ? e.touches[0].pageX : e.touches[0].pageY;
|
||||
|
||||
el.addEventListener('touchmove', onTouchMove, false);
|
||||
el.addEventListener('touchend', onTouchEnd, false);
|
||||
}
|
||||
}
|
||||
|
||||
function onTouchMove(e) {
|
||||
dx = (vertical) ? startX - e.touches[0].pageY : startX - e.touches[0].pageX;
|
||||
scrolling = (vertical) ? (Math.abs(dx) < Math.abs(e.touches[0].pageX - startY)) : (Math.abs(dx) < Math.abs(e.touches[0].pageY - startY));
|
||||
|
||||
if (!scrolling || Number(new Date()) - startT > 500) {
|
||||
e.preventDefault();
|
||||
if (!fade && slider.transitions) {
|
||||
if (!vars.animationLoop) {
|
||||
dx = dx/((slider.currentSlide === 0 && dx < 0 || slider.currentSlide === slider.last && dx > 0) ? (Math.abs(dx)/cwidth+2) : 1);
|
||||
}
|
||||
slider.setProps(offset + dx, "setTouch");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function onTouchEnd(e) {
|
||||
// finish the touch by undoing the touch session
|
||||
el.removeEventListener('touchmove', onTouchMove, false);
|
||||
|
||||
if (slider.animatingTo === slider.currentSlide && !scrolling && !(dx === null)) {
|
||||
var updateDx = (reverse) ? -dx : dx,
|
||||
target = (updateDx > 0) ? slider.getTarget('next') : slider.getTarget('prev');
|
||||
|
||||
if (slider.canAdvance(target) && (Number(new Date()) - startT < 550 && Math.abs(updateDx) > 50 || Math.abs(updateDx) > cwidth/2)) {
|
||||
slider.flexAnimate(target, vars.pauseOnAction);
|
||||
} else {
|
||||
if (!fade) slider.flexAnimate(slider.currentSlide, vars.pauseOnAction, true);
|
||||
}
|
||||
}
|
||||
el.removeEventListener('touchend', onTouchEnd, false);
|
||||
startX = null;
|
||||
startY = null;
|
||||
dx = null;
|
||||
offset = null;
|
||||
}
|
||||
},
|
||||
resize: function() {
|
||||
if (!slider.animating && slider.is(':visible')) {
|
||||
if (!carousel) slider.doMath();
|
||||
|
||||
if (fade) {
|
||||
// SMOOTH HEIGHT:
|
||||
methods.smoothHeight();
|
||||
} else if (carousel) { //CAROUSEL:
|
||||
slider.slides.width(slider.computedW);
|
||||
slider.update(slider.pagingCount);
|
||||
slider.setProps();
|
||||
}
|
||||
else if (vertical) { //VERTICAL:
|
||||
slider.viewport.height(slider.h);
|
||||
slider.setProps(slider.h, "setTotal");
|
||||
} else {
|
||||
// SMOOTH HEIGHT:
|
||||
if (vars.smoothHeight) methods.smoothHeight();
|
||||
slider.newSlides.width(slider.computedW);
|
||||
slider.setProps(slider.computedW, "setTotal");
|
||||
}
|
||||
}
|
||||
},
|
||||
smoothHeight: function(dur) {
|
||||
if (!vertical || fade) {
|
||||
var $obj = (fade) ? slider : slider.viewport;
|
||||
(dur) ? $obj.animate({"height": slider.slides.eq(slider.animatingTo).height()}, dur) : $obj.height(slider.slides.eq(slider.animatingTo).height());
|
||||
}
|
||||
},
|
||||
sync: function(action) {
|
||||
var $obj = $(vars.sync).data("flexslider"),
|
||||
target = slider.animatingTo;
|
||||
|
||||
switch (action) {
|
||||
case "animate": $obj.flexAnimate(target, vars.pauseOnAction, false, true); break;
|
||||
case "play": if (!$obj.playing && !$obj.asNav) { $obj.play(); } break;
|
||||
case "pause": $obj.pause(); break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// public methods
|
||||
slider.flexAnimate = function(target, pause, override, withSync, fromNav) {
|
||||
if (asNav && slider.pagingCount === 1) slider.direction = (slider.currentItem < target) ? "next" : "prev";
|
||||
|
||||
if (!slider.animating && (slider.canAdvance(target, fromNav) || override) && slider.is(":visible")) {
|
||||
if (asNav && withSync) {
|
||||
var master = $(vars.asNavFor).data('flexslider');
|
||||
slider.atEnd = target === 0 || target === slider.count - 1;
|
||||
master.flexAnimate(target, true, false, true, fromNav);
|
||||
slider.direction = (slider.currentItem < target) ? "next" : "prev";
|
||||
master.direction = slider.direction;
|
||||
|
||||
if (Math.ceil((target + 1)/slider.visible) - 1 !== slider.currentSlide && target !== 0) {
|
||||
slider.currentItem = target;
|
||||
slider.slides.removeClass(namespace + "active-slide").eq(target).addClass(namespace + "active-slide");
|
||||
target = Math.floor(target/slider.visible);
|
||||
} else {
|
||||
slider.currentItem = target;
|
||||
slider.slides.removeClass(namespace + "active-slide").eq(target).addClass(namespace + "active-slide");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
slider.animating = true;
|
||||
slider.animatingTo = target;
|
||||
// API: before() animation Callback
|
||||
vars.before(slider);
|
||||
|
||||
// SLIDESHOW:
|
||||
if (pause) slider.pause();
|
||||
|
||||
// SYNC:
|
||||
if (slider.syncExists && !fromNav) methods.sync("animate");
|
||||
|
||||
// CONTROLNAV
|
||||
if (vars.controlNav) methods.controlNav.active();
|
||||
|
||||
// !CAROUSEL:
|
||||
// CANDIDATE: slide active class (for add/remove slide)
|
||||
if (!carousel) slider.slides.removeClass(namespace + 'active-slide').eq(target).addClass(namespace + 'active-slide');
|
||||
|
||||
// INFINITE LOOP:
|
||||
// CANDIDATE: atEnd
|
||||
slider.atEnd = target === 0 || target === slider.last;
|
||||
|
||||
// DIRECTIONNAV:
|
||||
if (vars.directionNav) methods.directionNav.update();
|
||||
|
||||
if (target === slider.last) {
|
||||
// API: end() of cycle Callback
|
||||
vars.end(slider);
|
||||
// SLIDESHOW && !INFINITE LOOP:
|
||||
if (!vars.animationLoop) slider.pause();
|
||||
}
|
||||
|
||||
// SLIDE:
|
||||
if (!fade) {
|
||||
var dimension = (vertical) ? slider.slides.filter(':first').height() : slider.computedW,
|
||||
margin, slideString, calcNext;
|
||||
|
||||
// INFINITE LOOP / REVERSE:
|
||||
if (carousel) {
|
||||
margin = (vars.itemWidth > slider.w) ? vars.itemMargin * 2 : vars.itemMargin;
|
||||
calcNext = ((slider.itemW + margin) * slider.move) * slider.animatingTo;
|
||||
slideString = (calcNext > slider.limit && slider.visible !== 1) ? slider.limit : calcNext;
|
||||
} else if (slider.currentSlide === 0 && target === slider.count - 1 && vars.animationLoop && slider.direction !== "next") {
|
||||
slideString = (reverse) ? (slider.count + slider.cloneOffset) * dimension : 0;
|
||||
} else if (slider.currentSlide === slider.last && target === 0 && vars.animationLoop && slider.direction !== "prev") {
|
||||
slideString = (reverse) ? 0 : (slider.count + 1) * dimension;
|
||||
} else {
|
||||
slideString = (reverse) ? ((slider.count - 1) - target + slider.cloneOffset) * dimension : (target + slider.cloneOffset) * dimension;
|
||||
}
|
||||
slider.setProps(slideString, "", vars.animationSpeed);
|
||||
if (slider.transitions) {
|
||||
if (!vars.animationLoop || !slider.atEnd) {
|
||||
slider.animating = false;
|
||||
slider.currentSlide = slider.animatingTo;
|
||||
}
|
||||
slider.container.unbind("webkitTransitionEnd transitionend");
|
||||
slider.container.bind("webkitTransitionEnd transitionend", function() {
|
||||
slider.wrapup(dimension);
|
||||
});
|
||||
} else {
|
||||
slider.container.animate(slider.args, vars.animationSpeed, vars.easing, function(){
|
||||
slider.wrapup(dimension);
|
||||
});
|
||||
}
|
||||
} else { // FADE:
|
||||
if (!touch) {
|
||||
slider.slides.eq(slider.currentSlide).fadeOut(vars.animationSpeed, vars.easing);
|
||||
slider.slides.eq(target).fadeIn(vars.animationSpeed, vars.easing, slider.wrapup);
|
||||
} else {
|
||||
slider.slides.eq(slider.currentSlide).css({ "opacity": 0, "zIndex": 1 });
|
||||
slider.slides.eq(target).css({ "opacity": 1, "zIndex": 2 });
|
||||
|
||||
slider.slides.unbind("webkitTransitionEnd transitionend");
|
||||
slider.slides.eq(slider.currentSlide).bind("webkitTransitionEnd transitionend", function() {
|
||||
// API: after() animation Callback
|
||||
vars.after(slider);
|
||||
});
|
||||
|
||||
slider.animating = false;
|
||||
slider.currentSlide = slider.animatingTo;
|
||||
}
|
||||
}
|
||||
// SMOOTH HEIGHT:
|
||||
if (vars.smoothHeight) methods.smoothHeight(vars.animationSpeed);
|
||||
}
|
||||
}
|
||||
slider.wrapup = function(dimension) {
|
||||
// SLIDE:
|
||||
if (!fade && !carousel) {
|
||||
if (slider.currentSlide === 0 && slider.animatingTo === slider.last && vars.animationLoop) {
|
||||
slider.setProps(dimension, "jumpEnd");
|
||||
} else if (slider.currentSlide === slider.last && slider.animatingTo === 0 && vars.animationLoop) {
|
||||
slider.setProps(dimension, "jumpStart");
|
||||
}
|
||||
}
|
||||
slider.animating = false;
|
||||
slider.currentSlide = slider.animatingTo;
|
||||
// API: after() animation Callback
|
||||
vars.after(slider);
|
||||
}
|
||||
|
||||
// SLIDESHOW:
|
||||
slider.animateSlides = function() {
|
||||
if (!slider.animating) slider.flexAnimate(slider.getTarget("next"));
|
||||
}
|
||||
// SLIDESHOW:
|
||||
slider.pause = function() {
|
||||
clearInterval(slider.animatedSlides);
|
||||
slider.playing = false;
|
||||
// PAUSEPLAY:
|
||||
if (vars.pausePlay) methods.pausePlay.update("play");
|
||||
// SYNC:
|
||||
if (slider.syncExists) methods.sync("pause");
|
||||
}
|
||||
// SLIDESHOW:
|
||||
slider.play = function() {
|
||||
slider.animatedSlides = setInterval(slider.animateSlides, vars.slideshowSpeed);
|
||||
slider.playing = true;
|
||||
// PAUSEPLAY:
|
||||
if (vars.pausePlay) methods.pausePlay.update("pause");
|
||||
// SYNC:
|
||||
if (slider.syncExists) methods.sync("play");
|
||||
}
|
||||
slider.canAdvance = function(target, fromNav) {
|
||||
// ASNAV:
|
||||
var last = (asNav) ? slider.pagingCount - 1 : slider.last;
|
||||
return (fromNav) ? true :
|
||||
(asNav && slider.currentItem === slider.count - 1 && target === 0 && slider.direction === "prev") ? true :
|
||||
(asNav && slider.currentItem === 0 && target === slider.pagingCount - 1 && slider.direction !== "next") ? false :
|
||||
(target === slider.currentSlide && !asNav) ? false :
|
||||
(vars.animationLoop) ? true :
|
||||
(slider.atEnd && slider.currentSlide === 0 && target === last && slider.direction !== "next") ? false :
|
||||
(slider.atEnd && slider.currentSlide === last && target === 0 && slider.direction === "next") ? false :
|
||||
true;
|
||||
}
|
||||
slider.getTarget = function(dir) {
|
||||
slider.direction = dir;
|
||||
if (dir === "next") {
|
||||
return (slider.currentSlide === slider.last) ? 0 : slider.currentSlide + 1;
|
||||
} else {
|
||||
return (slider.currentSlide === 0) ? slider.last : slider.currentSlide - 1;
|
||||
}
|
||||
}
|
||||
|
||||
// SLIDE:
|
||||
slider.setProps = function(pos, special, dur) {
|
||||
var target = (function() {
|
||||
var posCheck = (pos) ? pos : ((slider.itemW + vars.itemMargin) * slider.move) * slider.animatingTo,
|
||||
posCalc = (function() {
|
||||
if (carousel) {
|
||||
return (special === "setTouch") ? pos :
|
||||
(reverse && slider.animatingTo === slider.last) ? 0 :
|
||||
(reverse) ? slider.limit - (((slider.itemW + vars.itemMargin) * slider.move) * slider.animatingTo) :
|
||||
(slider.animatingTo === slider.last) ? slider.limit : posCheck;
|
||||
} else {
|
||||
switch (special) {
|
||||
case "setTotal": return (reverse) ? ((slider.count - 1) - slider.currentSlide + slider.cloneOffset) * pos : (slider.currentSlide + slider.cloneOffset) * pos;
|
||||
case "setTouch": return (reverse) ? pos : pos;
|
||||
case "jumpEnd": return (reverse) ? pos : slider.count * pos;
|
||||
case "jumpStart": return (reverse) ? slider.count * pos : pos;
|
||||
default: return pos;
|
||||
}
|
||||
}
|
||||
}());
|
||||
return (posCalc * -1) + "px";
|
||||
}());
|
||||
|
||||
if (slider.transitions) {
|
||||
target = (vertical) ? "translate3d(0," + target + ",0)" : "translate3d(" + target + ",0,0)";
|
||||
dur = (dur !== undefined) ? (dur/1000) + "s" : "0s";
|
||||
slider.container.css("-" + slider.pfx + "-transition-duration", dur);
|
||||
}
|
||||
|
||||
slider.args[slider.prop] = target;
|
||||
if (slider.transitions || dur === undefined) slider.container.css(slider.args);
|
||||
}
|
||||
|
||||
slider.setup = function(type) {
|
||||
// SLIDE:
|
||||
if (!fade) {
|
||||
var sliderOffset, arr;
|
||||
|
||||
if (type === "init") {
|
||||
slider.viewport = $('<div class="' + namespace + 'viewport"></div>').css({"overflow": "hidden", "position": "relative"}).appendTo(slider).append(slider.container);
|
||||
// INFINITE LOOP:
|
||||
slider.cloneCount = 0;
|
||||
slider.cloneOffset = 0;
|
||||
// REVERSE:
|
||||
if (reverse) {
|
||||
arr = $.makeArray(slider.slides).reverse();
|
||||
slider.slides = $(arr);
|
||||
slider.container.empty().append(slider.slides);
|
||||
}
|
||||
}
|
||||
// INFINITE LOOP && !CAROUSEL:
|
||||
if (vars.animationLoop && !carousel) {
|
||||
slider.cloneCount = 2;
|
||||
slider.cloneOffset = 1;
|
||||
// clear out old clones
|
||||
if (type !== "init") slider.container.find('.clone').remove();
|
||||
slider.container.append(slider.slides.first().clone().addClass('clone')).prepend(slider.slides.last().clone().addClass('clone'));
|
||||
}
|
||||
slider.newSlides = $(vars.selector, slider);
|
||||
|
||||
sliderOffset = (reverse) ? slider.count - 1 - slider.currentSlide + slider.cloneOffset : slider.currentSlide + slider.cloneOffset;
|
||||
// VERTICAL:
|
||||
if (vertical && !carousel) {
|
||||
slider.container.height((slider.count + slider.cloneCount) * 200 + "%").css("position", "absolute").width("100%");
|
||||
setTimeout(function(){
|
||||
slider.newSlides.css({"display": "block"});
|
||||
slider.doMath();
|
||||
slider.viewport.height(slider.h);
|
||||
slider.setProps(sliderOffset * slider.h, "init");
|
||||
}, (type === "init") ? 100 : 0);
|
||||
} else {
|
||||
slider.container.width((slider.count + slider.cloneCount) * 200 + "%");
|
||||
slider.setProps(sliderOffset * slider.computedW, "init");
|
||||
setTimeout(function(){
|
||||
slider.doMath();
|
||||
slider.newSlides.css({"width": slider.computedW, "float": "left", "display": "block"});
|
||||
// SMOOTH HEIGHT:
|
||||
if (vars.smoothHeight) methods.smoothHeight();
|
||||
}, (type === "init") ? 100 : 0);
|
||||
}
|
||||
} else { // FADE:
|
||||
slider.slides.css({"width": "100%", "float": "left", "marginRight": "-100%", "position": "relative"});
|
||||
if (type === "init") {
|
||||
if (!touch) {
|
||||
slider.slides.eq(slider.currentSlide).fadeIn(vars.animationSpeed, vars.easing);
|
||||
} else {
|
||||
slider.slides.css({ "opacity": 0, "display": "block", "webkitTransition": "opacity " + vars.animationSpeed / 1000 + "s ease", "zIndex": 1 }).eq(slider.currentSlide).css({ "opacity": 1, "zIndex": 2});
|
||||
}
|
||||
}
|
||||
// SMOOTH HEIGHT:
|
||||
if (vars.smoothHeight) methods.smoothHeight();
|
||||
}
|
||||
// !CAROUSEL:
|
||||
// CANDIDATE: active slide
|
||||
if (!carousel) slider.slides.removeClass(namespace + "active-slide").eq(slider.currentSlide).addClass(namespace + "active-slide");
|
||||
}
|
||||
|
||||
slider.doMath = function() {
|
||||
var slide = slider.slides.first(),
|
||||
slideMargin = vars.itemMargin,
|
||||
minItems = vars.minItems,
|
||||
maxItems = vars.maxItems;
|
||||
|
||||
slider.w = slider.width();
|
||||
slider.h = slide.height();
|
||||
slider.boxPadding = slide.outerWidth() - slide.width();
|
||||
|
||||
// CAROUSEL:
|
||||
if (carousel) {
|
||||
slider.itemT = vars.itemWidth + slideMargin;
|
||||
slider.minW = (minItems) ? minItems * slider.itemT : slider.w;
|
||||
slider.maxW = (maxItems) ? maxItems * slider.itemT : slider.w;
|
||||
slider.itemW = (slider.minW > slider.w) ? (slider.w - (slideMargin * minItems))/minItems :
|
||||
(slider.maxW < slider.w) ? (slider.w - (slideMargin * maxItems))/maxItems :
|
||||
(vars.itemWidth > slider.w) ? slider.w : vars.itemWidth;
|
||||
slider.visible = Math.floor(slider.w/(slider.itemW + slideMargin));
|
||||
slider.move = (vars.move > 0 && vars.move < slider.visible ) ? vars.move : slider.visible;
|
||||
slider.pagingCount = Math.ceil(((slider.count - slider.visible)/slider.move) + 1);
|
||||
slider.last = slider.pagingCount - 1;
|
||||
slider.limit = (slider.pagingCount === 1) ? 0 :
|
||||
(vars.itemWidth > slider.w) ? ((slider.itemW + (slideMargin * 2)) * slider.count) - slider.w - slideMargin : ((slider.itemW + slideMargin) * slider.count) - slider.w - slideMargin;
|
||||
} else {
|
||||
slider.itemW = slider.w;
|
||||
slider.pagingCount = slider.count;
|
||||
slider.last = slider.count - 1;
|
||||
}
|
||||
slider.computedW = slider.itemW - slider.boxPadding;
|
||||
}
|
||||
|
||||
slider.update = function(pos, action) {
|
||||
slider.doMath();
|
||||
|
||||
// update currentSlide and slider.animatingTo if necessary
|
||||
if (!carousel) {
|
||||
if (pos < slider.currentSlide) {
|
||||
slider.currentSlide += 1;
|
||||
} else if (pos <= slider.currentSlide && pos !== 0) {
|
||||
slider.currentSlide -= 1;
|
||||
}
|
||||
slider.animatingTo = slider.currentSlide;
|
||||
}
|
||||
|
||||
// update controlNav
|
||||
if (vars.controlNav && !slider.manualControls) {
|
||||
if ((action === "add" && !carousel) || slider.pagingCount > slider.controlNav.length) {
|
||||
methods.controlNav.update("add");
|
||||
} else if ((action === "remove" && !carousel) || slider.pagingCount < slider.controlNav.length) {
|
||||
if (carousel && slider.currentSlide > slider.last) {
|
||||
slider.currentSlide -= 1;
|
||||
slider.animatingTo -= 1;
|
||||
}
|
||||
methods.controlNav.update("remove", slider.last);
|
||||
}
|
||||
}
|
||||
// update directionNav
|
||||
if (vars.directionNav) methods.directionNav.update();
|
||||
|
||||
}
|
||||
|
||||
slider.addSlide = function(obj, pos) {
|
||||
var $obj = $(obj);
|
||||
|
||||
slider.count += 1;
|
||||
slider.last = slider.count - 1;
|
||||
|
||||
// append new slide
|
||||
if (vertical && reverse) {
|
||||
(pos !== undefined) ? slider.slides.eq(slider.count - pos).after($obj) : slider.container.prepend($obj);
|
||||
} else {
|
||||
(pos !== undefined) ? slider.slides.eq(pos).before($obj) : slider.container.append($obj);
|
||||
}
|
||||
|
||||
// update currentSlide, animatingTo, controlNav, and directionNav
|
||||
slider.update(pos, "add");
|
||||
|
||||
// update slider.slides
|
||||
slider.slides = $(vars.selector + ':not(.clone)', slider);
|
||||
// re-setup the slider to accomdate new slide
|
||||
slider.setup();
|
||||
|
||||
//FlexSlider: added() Callback
|
||||
vars.added(slider);
|
||||
}
|
||||
slider.removeSlide = function(obj) {
|
||||
var pos = (isNaN(obj)) ? slider.slides.index($(obj)) : obj;
|
||||
|
||||
// update count
|
||||
slider.count -= 1;
|
||||
slider.last = slider.count - 1;
|
||||
|
||||
// remove slide
|
||||
if (isNaN(obj)) {
|
||||
$(obj, slider.slides).remove();
|
||||
} else {
|
||||
(vertical && reverse) ? slider.slides.eq(slider.last).remove() : slider.slides.eq(obj).remove();
|
||||
}
|
||||
|
||||
// update currentSlide, animatingTo, controlNav, and directionNav
|
||||
slider.doMath();
|
||||
slider.update(pos, "remove");
|
||||
|
||||
// update slider.slides
|
||||
slider.slides = $(vars.selector + ':not(.clone)', slider);
|
||||
// re-setup the slider to accomdate new slide
|
||||
slider.setup();
|
||||
|
||||
// FlexSlider: removed() Callback
|
||||
vars.removed(slider);
|
||||
}
|
||||
|
||||
//FlexSlider: Initialize
|
||||
methods.init();
|
||||
}
|
||||
|
||||
//FlexSlider: Default Settings
|
||||
$.flexslider.defaults = {
|
||||
namespace: "flex-", //{NEW} String: Prefix string attached to the class of every element generated by the plugin
|
||||
selector: ".slides > li", //{NEW} Selector: Must match a simple pattern. '{container} > {slide}' -- Ignore pattern at your own peril
|
||||
animation: "fade", //String: Select your animation type, "fade" or "slide"
|
||||
easing: "swing", //{NEW} String: Determines the easing method used in jQuery transitions. jQuery easing plugin is supported!
|
||||
direction: "horizontal", //String: Select the sliding direction, "horizontal" or "vertical"
|
||||
reverse: false, //{NEW} Boolean: Reverse the animation direction
|
||||
animationLoop: true, //Boolean: Should the animation loop? If false, directionNav will received "disable" classes at either end
|
||||
smoothHeight: false, //{NEW} Boolean: Allow height of the slider to animate smoothly in horizontal mode
|
||||
startAt: 0, //Integer: The slide that the slider should start on. Array notation (0 = first slide)
|
||||
slideshow: true, //Boolean: Animate slider automatically
|
||||
slideshowSpeed: 7000, //Integer: Set the speed of the slideshow cycling, in milliseconds
|
||||
animationSpeed: 600, //Integer: Set the speed of animations, in milliseconds
|
||||
initDelay: 0, //{NEW} Integer: Set an initialization delay, in milliseconds
|
||||
randomize: false, //Boolean: Randomize slide order
|
||||
|
||||
// Usability features
|
||||
pauseOnAction: true, //Boolean: Pause the slideshow when interacting with control elements, highly recommended.
|
||||
pauseOnHover: false, //Boolean: Pause the slideshow when hovering over slider, then resume when no longer hovering
|
||||
useCSS: true, //{NEW} Boolean: Slider will use CSS3 transitions if available
|
||||
touch: true, //{NEW} Boolean: Allow touch swipe navigation of the slider on touch-enabled devices
|
||||
video: false, //{NEW} Boolean: If using video in the slider, will prevent CSS3 3D Transforms to avoid graphical glitches
|
||||
|
||||
// Primary Controls
|
||||
controlNav: true, //Boolean: Create navigation for paging control of each clide? Note: Leave true for manualControls usage
|
||||
directionNav: true, //Boolean: Create navigation for previous/next navigation? (true/false)
|
||||
prevText: "Previous", //String: Set the text for the "previous" directionNav item
|
||||
nextText: "Next", //String: Set the text for the "next" directionNav item
|
||||
|
||||
// Secondary Navigation
|
||||
keyboard: true, //Boolean: Allow slider navigating via keyboard left/right keys
|
||||
multipleKeyboard: false, //{NEW} Boolean: Allow keyboard navigation to affect multiple sliders. Default behavior cuts out keyboard navigation with more than one slider present.
|
||||
mousewheel: false, //{UPDATED} Boolean: Requires jquery.mousewheel.js (https://github.com/brandonaaron/jquery-mousewheel) - Allows slider navigating via mousewheel
|
||||
pausePlay: false, //Boolean: Create pause/play dynamic element
|
||||
pauseText: "Pause", //String: Set the text for the "pause" pausePlay item
|
||||
playText: "Play", //String: Set the text for the "play" pausePlay item
|
||||
|
||||
// Special properties
|
||||
controlsContainer: "", //{UPDATED} jQuery Object/Selector: Declare which container the navigation elements should be appended too. Default container is the FlexSlider element. Example use would be $(".flexslider-container"). Property is ignored if given element is not found.
|
||||
manualControls: "", //{UPDATED} jQuery Object/Selector: Declare custom control navigation. Examples would be $(".flex-control-nav li") or "#tabs-nav li img", etc. The number of elements in your controlNav should match the number of slides/tabs.
|
||||
sync: "", //{NEW} Selector: Mirror the actions performed on this slider with another slider. Use with care.
|
||||
asNavFor: "", //{NEW} Selector: Internal property exposed for turning the slider into a thumbnail navigation for another slider
|
||||
|
||||
// Carousel Options
|
||||
itemWidth: 0, //{NEW} Integer: Box-model width of individual carousel items, including horizontal borders and padding.
|
||||
itemMargin: 0, //{NEW} Integer: Margin between carousel items.
|
||||
minItems: 0, //{NEW} Integer: Minimum number of carousel items that should be visible. Items will resize fluidly when below this.
|
||||
maxItems: 0, //{NEW} Integer: Maxmimum number of carousel items that should be visible. Items will resize fluidly when above this limit.
|
||||
move: 0, //{NEW} Integer: Number of carousel items that should move on animation. If 0, slider will move all visible items.
|
||||
|
||||
// Callback API
|
||||
start: function(){}, //Callback: function(slider) - Fires when the slider loads the first slide
|
||||
before: function(){}, //Callback: function(slider) - Fires asynchronously with each slider animation
|
||||
after: function(){}, //Callback: function(slider) - Fires after each slider animation completes
|
||||
end: function(){}, //Callback: function(slider) - Fires when the slider reaches the last slide (asynchronous)
|
||||
added: function(){}, //{NEW} Callback: function(slider) - Fires after a slide is added
|
||||
removed: function(){} //{NEW} Callback: function(slider) - Fires after a slide is removed
|
||||
}
|
||||
|
||||
|
||||
//FlexSlider: Plugin Function
|
||||
$.fn.flexslider = function(options) {
|
||||
if (options === undefined) options = {};
|
||||
|
||||
if (typeof options === "object") {
|
||||
return this.each(function() {
|
||||
var $this = $(this),
|
||||
selector = (options.selector) ? options.selector : ".slides > li",
|
||||
$slides = $this.find(selector);
|
||||
|
||||
if ($slides.length === 1) {
|
||||
$slides.fadeIn(400);
|
||||
if (options.start) options.start($this);
|
||||
} else if ($this.data('flexslider') == undefined) {
|
||||
new $.flexslider(this, options);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
// Helper strings to quickly perform functions on the slider
|
||||
var $slider = $(this).data('flexslider');
|
||||
switch (options) {
|
||||
case "play": $slider.play(); break;
|
||||
case "pause": $slider.pause(); break;
|
||||
case "next": $slider.flexAnimate($slider.getTarget("next"), true); break;
|
||||
case "prev":
|
||||
case "previous": $slider.flexAnimate($slider.getTarget("prev"), true); break;
|
||||
default: if (typeof options === "number") $slider.flexAnimate(options, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
})(jQuery);
|
||||
980
js/jquery.form.js
Normal file
980
js/jquery.form.js
Normal file
@@ -0,0 +1,980 @@
|
||||
/*!
|
||||
* jQuery Form Plugin
|
||||
* version: 2.94 (13-DEC-2011)
|
||||
* @requires jQuery v1.3.2 or later
|
||||
*
|
||||
* Examples and documentation at: http://malsup.com/jquery/form/
|
||||
* Dual licensed under the MIT and GPL licenses:
|
||||
* http://www.opensource.org/licenses/mit-license.php
|
||||
* http://www.gnu.org/licenses/gpl.html
|
||||
*/
|
||||
;(function($) {
|
||||
|
||||
/*
|
||||
Usage Note:
|
||||
-----------
|
||||
Do not use both ajaxSubmit and ajaxForm on the same form. These
|
||||
functions are intended to be exclusive. Use ajaxSubmit if you want
|
||||
to bind your own submit handler to the form. For example,
|
||||
|
||||
$(document).ready(function() {
|
||||
$('#myForm').bind('submit', function(e) {
|
||||
e.preventDefault(); // <-- important
|
||||
$(this).ajaxSubmit({
|
||||
target: '#output'
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
Use ajaxForm when you want the plugin to manage all the event binding
|
||||
for you. For example,
|
||||
|
||||
$(document).ready(function() {
|
||||
$('#myForm').ajaxForm({
|
||||
target: '#output'
|
||||
});
|
||||
});
|
||||
|
||||
When using ajaxForm, the ajaxSubmit function will be invoked for you
|
||||
at the appropriate time.
|
||||
*/
|
||||
|
||||
/**
|
||||
* ajaxSubmit() provides a mechanism for immediately submitting
|
||||
* an HTML form using AJAX.
|
||||
*/
|
||||
$.fn.ajaxSubmit = function(options) {
|
||||
// fast fail if nothing selected (http://dev.jquery.com/ticket/2752)
|
||||
if (!this.length) {
|
||||
log('ajaxSubmit: skipping submit process - no element selected');
|
||||
return this;
|
||||
}
|
||||
|
||||
var method, action, url, $form = this;
|
||||
|
||||
if (typeof options == 'function') {
|
||||
options = { success: options };
|
||||
}
|
||||
|
||||
method = this.attr('method');
|
||||
action = this.attr('action');
|
||||
url = (typeof action === 'string') ? $.trim(action) : '';
|
||||
url = url || window.location.href || '';
|
||||
if (url) {
|
||||
// clean url (don't include hash vaue)
|
||||
url = (url.match(/^([^#]+)/)||[])[1];
|
||||
}
|
||||
|
||||
options = $.extend(true, {
|
||||
url: url,
|
||||
success: $.ajaxSettings.success,
|
||||
type: method || 'GET',
|
||||
iframeSrc: /^https/i.test(window.location.href || '') ? 'javascript:false' : 'about:blank'
|
||||
}, options);
|
||||
|
||||
// hook for manipulating the form data before it is extracted;
|
||||
// convenient for use with rich editors like tinyMCE or FCKEditor
|
||||
var veto = {};
|
||||
this.trigger('form-pre-serialize', [this, options, veto]);
|
||||
if (veto.veto) {
|
||||
log('ajaxSubmit: submit vetoed via form-pre-serialize trigger');
|
||||
return this;
|
||||
}
|
||||
|
||||
// provide opportunity to alter form data before it is serialized
|
||||
if (options.beforeSerialize && options.beforeSerialize(this, options) === false) {
|
||||
log('ajaxSubmit: submit aborted via beforeSerialize callback');
|
||||
return this;
|
||||
}
|
||||
|
||||
var traditional = options.traditional;
|
||||
if ( traditional === undefined ) {
|
||||
traditional = $.ajaxSettings.traditional;
|
||||
}
|
||||
|
||||
var qx,n,v,a = this.formToArray(options.semantic);
|
||||
if (options.data) {
|
||||
options.extraData = options.data;
|
||||
qx = $.param(options.data, traditional);
|
||||
}
|
||||
|
||||
// give pre-submit callback an opportunity to abort the submit
|
||||
if (options.beforeSubmit && options.beforeSubmit(a, this, options) === false) {
|
||||
log('ajaxSubmit: submit aborted via beforeSubmit callback');
|
||||
return this;
|
||||
}
|
||||
|
||||
// fire vetoable 'validate' event
|
||||
this.trigger('form-submit-validate', [a, this, options, veto]);
|
||||
if (veto.veto) {
|
||||
log('ajaxSubmit: submit vetoed via form-submit-validate trigger');
|
||||
return this;
|
||||
}
|
||||
|
||||
var q = $.param(a, traditional);
|
||||
if (qx) {
|
||||
q = ( q ? (q + '&' + qx) : qx );
|
||||
}
|
||||
if (options.type.toUpperCase() == 'GET') {
|
||||
options.url += (options.url.indexOf('?') >= 0 ? '&' : '?') + q;
|
||||
options.data = null; // data is null for 'get'
|
||||
}
|
||||
else {
|
||||
options.data = q; // data is the query string for 'post'
|
||||
}
|
||||
|
||||
var callbacks = [];
|
||||
if (options.resetForm) {
|
||||
callbacks.push(function() { $form.resetForm(); });
|
||||
}
|
||||
if (options.clearForm) {
|
||||
callbacks.push(function() { $form.clearForm(options.includeHidden); });
|
||||
}
|
||||
|
||||
// perform a load on the target only if dataType is not provided
|
||||
if (!options.dataType && options.target) {
|
||||
var oldSuccess = options.success || function(){};
|
||||
callbacks.push(function(data) {
|
||||
var fn = options.replaceTarget ? 'replaceWith' : 'html';
|
||||
$(options.target)[fn](data).each(oldSuccess, arguments);
|
||||
});
|
||||
}
|
||||
else if (options.success) {
|
||||
callbacks.push(options.success);
|
||||
}
|
||||
|
||||
options.success = function(data, status, xhr) { // jQuery 1.4+ passes xhr as 3rd arg
|
||||
var context = options.context || options; // jQuery 1.4+ supports scope context
|
||||
for (var i=0, max=callbacks.length; i < max; i++) {
|
||||
callbacks[i].apply(context, [data, status, xhr || $form, $form]);
|
||||
}
|
||||
};
|
||||
|
||||
// are there files to upload?
|
||||
var fileInputs = $('input:file:enabled[value]', this); // [value] (issue #113)
|
||||
var hasFileInputs = fileInputs.length > 0;
|
||||
var mp = 'multipart/form-data';
|
||||
var multipart = ($form.attr('enctype') == mp || $form.attr('encoding') == mp);
|
||||
|
||||
var fileAPI = !!(hasFileInputs && fileInputs.get(0).files && window.FormData);
|
||||
log("fileAPI :" + fileAPI);
|
||||
var shouldUseFrame = (hasFileInputs || multipart) && !fileAPI;
|
||||
|
||||
// options.iframe allows user to force iframe mode
|
||||
// 06-NOV-09: now defaulting to iframe mode if file input is detected
|
||||
if (options.iframe !== false && (options.iframe || shouldUseFrame)) {
|
||||
// hack to fix Safari hang (thanks to Tim Molendijk for this)
|
||||
// see: http://groups.google.com/group/jquery-dev/browse_thread/thread/36395b7ab510dd5d
|
||||
if (options.closeKeepAlive) {
|
||||
$.get(options.closeKeepAlive, function() {
|
||||
fileUploadIframe(a);
|
||||
});
|
||||
}
|
||||
else {
|
||||
fileUploadIframe(a);
|
||||
}
|
||||
}
|
||||
else if ((hasFileInputs || multipart) && fileAPI) {
|
||||
options.progress = options.progress || $.noop;
|
||||
fileUploadXhr(a);
|
||||
}
|
||||
else {
|
||||
$.ajax(options);
|
||||
}
|
||||
|
||||
// fire 'notify' event
|
||||
this.trigger('form-submit-notify', [this, options]);
|
||||
return this;
|
||||
|
||||
// XMLHttpRequest Level 2 file uploads (big hat tip to francois2metz)
|
||||
function fileUploadXhr(a) {
|
||||
var formdata = new FormData();
|
||||
|
||||
for (var i=0; i < a.length; i++) {
|
||||
if (a[i].type == 'file')
|
||||
continue;
|
||||
formdata.append(a[i].name, a[i].value);
|
||||
}
|
||||
|
||||
$form.find('input:file:enabled').each(function(){
|
||||
var name = $(this).attr('name'), files = this.files;
|
||||
if (name) {
|
||||
for (var i=0; i < files.length; i++)
|
||||
formdata.append(name, files[i]);
|
||||
}
|
||||
});
|
||||
|
||||
if (options.extraData) {
|
||||
for (var k in options.extraData)
|
||||
formdata.append(k, options.extraData[k])
|
||||
}
|
||||
|
||||
options.data = null;
|
||||
|
||||
var s = $.extend(true, {}, $.ajaxSettings, options, {
|
||||
contentType: false,
|
||||
processData: false,
|
||||
cache: false,
|
||||
type: 'POST'
|
||||
});
|
||||
|
||||
s.context = s.context || s;
|
||||
|
||||
s.data = null;
|
||||
var beforeSend = s.beforeSend;
|
||||
s.beforeSend = function(xhr, o) {
|
||||
o.data = formdata;
|
||||
if(xhr.upload) { // unfortunately, jQuery doesn't expose this prop (http://bugs.jquery.com/ticket/10190)
|
||||
xhr.upload.onprogress = function(event) {
|
||||
o.progress(event.position, event.total);
|
||||
};
|
||||
}
|
||||
if(beforeSend)
|
||||
beforeSend.call(o, xhr, options);
|
||||
};
|
||||
$.ajax(s);
|
||||
}
|
||||
|
||||
// private function for handling file uploads (hat tip to YAHOO!)
|
||||
function fileUploadIframe(a) {
|
||||
var form = $form[0], el, i, s, g, id, $io, io, xhr, sub, n, timedOut, timeoutHandle;
|
||||
var useProp = !!$.fn.prop;
|
||||
|
||||
if (a) {
|
||||
if ( useProp ) {
|
||||
// ensure that every serialized input is still enabled
|
||||
for (i=0; i < a.length; i++) {
|
||||
el = $(form[a[i].name]);
|
||||
el.prop('disabled', false);
|
||||
}
|
||||
} else {
|
||||
for (i=0; i < a.length; i++) {
|
||||
el = $(form[a[i].name]);
|
||||
el.removeAttr('disabled');
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
if ($(':input[name=submit],:input[id=submit]', form).length) {
|
||||
// if there is an input with a name or id of 'submit' then we won't be
|
||||
// able to invoke the submit fn on the form (at least not x-browser)
|
||||
alert('Error: Form elements must not have name or id of "submit".');
|
||||
return;
|
||||
}
|
||||
|
||||
s = $.extend(true, {}, $.ajaxSettings, options);
|
||||
s.context = s.context || s;
|
||||
id = 'jqFormIO' + (new Date().getTime());
|
||||
if (s.iframeTarget) {
|
||||
$io = $(s.iframeTarget);
|
||||
n = $io.attr('name');
|
||||
if (n == null)
|
||||
$io.attr('name', id);
|
||||
else
|
||||
id = n;
|
||||
}
|
||||
else {
|
||||
$io = $('<iframe name="' + id + '" src="'+ s.iframeSrc +'" />');
|
||||
$io.css({ position: 'absolute', top: '-1000px', left: '-1000px' });
|
||||
}
|
||||
io = $io[0];
|
||||
|
||||
|
||||
xhr = { // mock object
|
||||
aborted: 0,
|
||||
responseText: null,
|
||||
responseXML: null,
|
||||
status: 0,
|
||||
statusText: 'n/a',
|
||||
getAllResponseHeaders: function() {},
|
||||
getResponseHeader: function() {},
|
||||
setRequestHeader: function() {},
|
||||
abort: function(status) {
|
||||
var e = (status === 'timeout' ? 'timeout' : 'aborted');
|
||||
log('aborting upload... ' + e);
|
||||
this.aborted = 1;
|
||||
$io.attr('src', s.iframeSrc); // abort op in progress
|
||||
xhr.error = e;
|
||||
s.error && s.error.call(s.context, xhr, e, status);
|
||||
g && $.event.trigger("ajaxError", [xhr, s, e]);
|
||||
s.complete && s.complete.call(s.context, xhr, e);
|
||||
}
|
||||
};
|
||||
|
||||
g = s.global;
|
||||
// trigger ajax global events so that activity/block indicators work like normal
|
||||
if (g && ! $.active++) {
|
||||
$.event.trigger("ajaxStart");
|
||||
}
|
||||
if (g) {
|
||||
$.event.trigger("ajaxSend", [xhr, s]);
|
||||
}
|
||||
|
||||
if (s.beforeSend && s.beforeSend.call(s.context, xhr, s) === false) {
|
||||
if (s.global) {
|
||||
$.active--;
|
||||
}
|
||||
return;
|
||||
}
|
||||
if (xhr.aborted) {
|
||||
return;
|
||||
}
|
||||
|
||||
// add submitting element to data if we know it
|
||||
sub = form.clk;
|
||||
if (sub) {
|
||||
n = sub.name;
|
||||
if (n && !sub.disabled) {
|
||||
s.extraData = s.extraData || {};
|
||||
s.extraData[n] = sub.value;
|
||||
if (sub.type == "image") {
|
||||
s.extraData[n+'.x'] = form.clk_x;
|
||||
s.extraData[n+'.y'] = form.clk_y;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var CLIENT_TIMEOUT_ABORT = 1;
|
||||
var SERVER_ABORT = 2;
|
||||
|
||||
function getDoc(frame) {
|
||||
var doc = frame.contentWindow ? frame.contentWindow.document : frame.contentDocument ? frame.contentDocument : frame.document;
|
||||
return doc;
|
||||
}
|
||||
|
||||
// Rails CSRF hack (thanks to Yvan Barthelemy)
|
||||
var csrf_token = $('meta[name=csrf-token]').attr('content');
|
||||
var csrf_param = $('meta[name=csrf-param]').attr('content');
|
||||
if (csrf_param && csrf_token) {
|
||||
s.extraData = s.extraData || {};
|
||||
s.extraData[csrf_param] = csrf_token;
|
||||
}
|
||||
|
||||
// take a breath so that pending repaints get some cpu time before the upload starts
|
||||
function doSubmit() {
|
||||
// make sure form attrs are set
|
||||
var t = $form.attr('target'), a = $form.attr('action');
|
||||
|
||||
// update form attrs in IE friendly way
|
||||
form.setAttribute('target',id);
|
||||
if (!method) {
|
||||
form.setAttribute('method', 'POST');
|
||||
}
|
||||
if (a != s.url) {
|
||||
form.setAttribute('action', s.url);
|
||||
}
|
||||
|
||||
// ie borks in some cases when setting encoding
|
||||
if (! s.skipEncodingOverride && (!method || /post/i.test(method))) {
|
||||
$form.attr({
|
||||
encoding: 'multipart/form-data',
|
||||
enctype: 'multipart/form-data'
|
||||
});
|
||||
}
|
||||
|
||||
// support timout
|
||||
if (s.timeout) {
|
||||
timeoutHandle = setTimeout(function() { timedOut = true; cb(CLIENT_TIMEOUT_ABORT); }, s.timeout);
|
||||
}
|
||||
|
||||
// look for server aborts
|
||||
function checkState() {
|
||||
try {
|
||||
var state = getDoc(io).readyState;
|
||||
log('state = ' + state);
|
||||
if (state.toLowerCase() == 'uninitialized')
|
||||
setTimeout(checkState,50);
|
||||
}
|
||||
catch(e) {
|
||||
log('Server abort: ' , e, ' (', e.name, ')');
|
||||
cb(SERVER_ABORT);
|
||||
timeoutHandle && clearTimeout(timeoutHandle);
|
||||
timeoutHandle = undefined;
|
||||
}
|
||||
}
|
||||
|
||||
// add "extra" data to form if provided in options
|
||||
var extraInputs = [];
|
||||
try {
|
||||
if (s.extraData) {
|
||||
for (var n in s.extraData) {
|
||||
extraInputs.push(
|
||||
$('<input type="hidden" name="'+n+'">').attr('value',s.extraData[n])
|
||||
.appendTo(form)[0]);
|
||||
}
|
||||
}
|
||||
|
||||
if (!s.iframeTarget) {
|
||||
// add iframe to doc and submit the form
|
||||
$io.appendTo('body');
|
||||
io.attachEvent ? io.attachEvent('onload', cb) : io.addEventListener('load', cb, false);
|
||||
}
|
||||
setTimeout(checkState,15);
|
||||
form.submit();
|
||||
}
|
||||
finally {
|
||||
// reset attrs and remove "extra" input elements
|
||||
form.setAttribute('action',a);
|
||||
if(t) {
|
||||
form.setAttribute('target', t);
|
||||
} else {
|
||||
$form.removeAttr('target');
|
||||
}
|
||||
$(extraInputs).remove();
|
||||
}
|
||||
}
|
||||
|
||||
if (s.forceSync) {
|
||||
doSubmit();
|
||||
}
|
||||
else {
|
||||
setTimeout(doSubmit, 10); // this lets dom updates render
|
||||
}
|
||||
|
||||
var data, doc, domCheckCount = 50, callbackProcessed;
|
||||
|
||||
function cb(e) {
|
||||
if (xhr.aborted || callbackProcessed) {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
doc = getDoc(io);
|
||||
}
|
||||
catch(ex) {
|
||||
log('cannot access response document: ', ex);
|
||||
e = SERVER_ABORT;
|
||||
}
|
||||
if (e === CLIENT_TIMEOUT_ABORT && xhr) {
|
||||
xhr.abort('timeout');
|
||||
return;
|
||||
}
|
||||
else if (e == SERVER_ABORT && xhr) {
|
||||
xhr.abort('server abort');
|
||||
return;
|
||||
}
|
||||
|
||||
if (!doc || doc.location.href == s.iframeSrc) {
|
||||
// response not received yet
|
||||
if (!timedOut)
|
||||
return;
|
||||
}
|
||||
io.detachEvent ? io.detachEvent('onload', cb) : io.removeEventListener('load', cb, false);
|
||||
|
||||
var status = 'success', errMsg;
|
||||
try {
|
||||
if (timedOut) {
|
||||
throw 'timeout';
|
||||
}
|
||||
|
||||
var isXml = s.dataType == 'xml' || doc.XMLDocument || $.isXMLDoc(doc);
|
||||
log('isXml='+isXml);
|
||||
if (!isXml && window.opera && (doc.body == null || doc.body.innerHTML == '')) {
|
||||
if (--domCheckCount) {
|
||||
// in some browsers (Opera) the iframe DOM is not always traversable when
|
||||
// the onload callback fires, so we loop a bit to accommodate
|
||||
log('requeing onLoad callback, DOM not available');
|
||||
setTimeout(cb, 250);
|
||||
return;
|
||||
}
|
||||
// let this fall through because server response could be an empty document
|
||||
//log('Could not access iframe DOM after mutiple tries.');
|
||||
//throw 'DOMException: not available';
|
||||
}
|
||||
|
||||
//log('response detected');
|
||||
var docRoot = doc.body ? doc.body : doc.documentElement;
|
||||
xhr.responseText = docRoot ? docRoot.innerHTML : null;
|
||||
xhr.responseXML = doc.XMLDocument ? doc.XMLDocument : doc;
|
||||
if (isXml)
|
||||
s.dataType = 'xml';
|
||||
xhr.getResponseHeader = function(header){
|
||||
var headers = {'content-type': s.dataType};
|
||||
return headers[header];
|
||||
};
|
||||
// support for XHR 'status' & 'statusText' emulation :
|
||||
if (docRoot) {
|
||||
xhr.status = Number( docRoot.getAttribute('status') ) || xhr.status;
|
||||
xhr.statusText = docRoot.getAttribute('statusText') || xhr.statusText;
|
||||
}
|
||||
|
||||
var dt = (s.dataType || '').toLowerCase();
|
||||
var scr = /(json|script|text)/.test(dt);
|
||||
if (scr || s.textarea) {
|
||||
// see if user embedded response in textarea
|
||||
var ta = doc.getElementsByTagName('textarea')[0];
|
||||
if (ta) {
|
||||
xhr.responseText = ta.value;
|
||||
// support for XHR 'status' & 'statusText' emulation :
|
||||
xhr.status = Number( ta.getAttribute('status') ) || xhr.status;
|
||||
xhr.statusText = ta.getAttribute('statusText') || xhr.statusText;
|
||||
}
|
||||
else if (scr) {
|
||||
// account for browsers injecting pre around json response
|
||||
var pre = doc.getElementsByTagName('pre')[0];
|
||||
var b = doc.getElementsByTagName('body')[0];
|
||||
if (pre) {
|
||||
xhr.responseText = pre.textContent ? pre.textContent : pre.innerText;
|
||||
}
|
||||
else if (b) {
|
||||
xhr.responseText = b.textContent ? b.textContent : b.innerText;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (dt == 'xml' && !xhr.responseXML && xhr.responseText != null) {
|
||||
xhr.responseXML = toXml(xhr.responseText);
|
||||
}
|
||||
|
||||
try {
|
||||
data = httpData(xhr, dt, s);
|
||||
}
|
||||
catch (e) {
|
||||
status = 'parsererror';
|
||||
xhr.error = errMsg = (e || status);
|
||||
}
|
||||
}
|
||||
catch (e) {
|
||||
log('error caught: ',e);
|
||||
status = 'error';
|
||||
xhr.error = errMsg = (e || status);
|
||||
}
|
||||
|
||||
if (xhr.aborted) {
|
||||
log('upload aborted');
|
||||
status = null;
|
||||
}
|
||||
|
||||
if (xhr.status) { // we've set xhr.status
|
||||
status = (xhr.status >= 200 && xhr.status < 300 || xhr.status === 304) ? 'success' : 'error';
|
||||
}
|
||||
|
||||
// ordering of these callbacks/triggers is odd, but that's how $.ajax does it
|
||||
if (status === 'success') {
|
||||
s.success && s.success.call(s.context, data, 'success', xhr);
|
||||
g && $.event.trigger("ajaxSuccess", [xhr, s]);
|
||||
}
|
||||
else if (status) {
|
||||
if (errMsg == undefined)
|
||||
errMsg = xhr.statusText;
|
||||
s.error && s.error.call(s.context, xhr, status, errMsg);
|
||||
g && $.event.trigger("ajaxError", [xhr, s, errMsg]);
|
||||
}
|
||||
|
||||
g && $.event.trigger("ajaxComplete", [xhr, s]);
|
||||
|
||||
if (g && ! --$.active) {
|
||||
$.event.trigger("ajaxStop");
|
||||
}
|
||||
|
||||
s.complete && s.complete.call(s.context, xhr, status);
|
||||
|
||||
callbackProcessed = true;
|
||||
if (s.timeout)
|
||||
clearTimeout(timeoutHandle);
|
||||
|
||||
// clean up
|
||||
setTimeout(function() {
|
||||
if (!s.iframeTarget)
|
||||
$io.remove();
|
||||
xhr.responseXML = null;
|
||||
}, 100);
|
||||
}
|
||||
|
||||
var toXml = $.parseXML || function(s, doc) { // use parseXML if available (jQuery 1.5+)
|
||||
if (window.ActiveXObject) {
|
||||
doc = new ActiveXObject('Microsoft.XMLDOM');
|
||||
doc.async = 'false';
|
||||
doc.loadXML(s);
|
||||
}
|
||||
else {
|
||||
doc = (new DOMParser()).parseFromString(s, 'text/xml');
|
||||
}
|
||||
return (doc && doc.documentElement && doc.documentElement.nodeName != 'parsererror') ? doc : null;
|
||||
};
|
||||
var parseJSON = $.parseJSON || function(s) {
|
||||
return window['eval']('(' + s + ')');
|
||||
};
|
||||
|
||||
var httpData = function( xhr, type, s ) { // mostly lifted from jq1.4.4
|
||||
|
||||
var ct = xhr.getResponseHeader('content-type') || '',
|
||||
xml = type === 'xml' || !type && ct.indexOf('xml') >= 0,
|
||||
data = xml ? xhr.responseXML : xhr.responseText;
|
||||
|
||||
if (xml && data.documentElement.nodeName === 'parsererror') {
|
||||
$.error && $.error('parsererror');
|
||||
}
|
||||
if (s && s.dataFilter) {
|
||||
data = s.dataFilter(data, type);
|
||||
}
|
||||
if (typeof data === 'string') {
|
||||
if (type === 'json' || !type && ct.indexOf('json') >= 0) {
|
||||
data = parseJSON(data);
|
||||
} else if (type === "script" || !type && ct.indexOf("javascript") >= 0) {
|
||||
$.globalEval(data);
|
||||
}
|
||||
}
|
||||
return data;
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* ajaxForm() provides a mechanism for fully automating form submission.
|
||||
*
|
||||
* The advantages of using this method instead of ajaxSubmit() are:
|
||||
*
|
||||
* 1: This method will include coordinates for <input type="image" /> elements (if the element
|
||||
* is used to submit the form).
|
||||
* 2. This method will include the submit element's name/value data (for the element that was
|
||||
* used to submit the form).
|
||||
* 3. This method binds the submit() method to the form for you.
|
||||
*
|
||||
* The options argument for ajaxForm works exactly as it does for ajaxSubmit. ajaxForm merely
|
||||
* passes the options argument along after properly binding events for submit elements and
|
||||
* the form itself.
|
||||
*/
|
||||
$.fn.ajaxForm = function(options) {
|
||||
// in jQuery 1.3+ we can fix mistakes with the ready state
|
||||
if (this.length === 0) {
|
||||
var o = { s: this.selector, c: this.context };
|
||||
if (!$.isReady && o.s) {
|
||||
log('DOM not ready, queuing ajaxForm');
|
||||
$(function() {
|
||||
$(o.s,o.c).ajaxForm(options);
|
||||
});
|
||||
return this;
|
||||
}
|
||||
// is your DOM ready? http://docs.jquery.com/Tutorials:Introducing_$(document).ready()
|
||||
log('terminating; zero elements found by selector' + ($.isReady ? '' : ' (DOM not ready)'));
|
||||
return this;
|
||||
}
|
||||
|
||||
return this.ajaxFormUnbind().bind('submit.form-plugin', function(e) {
|
||||
if (!e.isDefaultPrevented()) { // if event has been canceled, don't proceed
|
||||
e.preventDefault();
|
||||
$(this).ajaxSubmit(options);
|
||||
}
|
||||
}).bind('click.form-plugin', function(e) {
|
||||
var target = e.target;
|
||||
var $el = $(target);
|
||||
if (!($el.is(":submit,input:image"))) {
|
||||
// is this a child element of the submit el? (ex: a span within a button)
|
||||
var t = $el.closest(':submit');
|
||||
if (t.length == 0) {
|
||||
return;
|
||||
}
|
||||
target = t[0];
|
||||
}
|
||||
var form = this;
|
||||
form.clk = target;
|
||||
if (target.type == 'image') {
|
||||
if (e.offsetX != undefined) {
|
||||
form.clk_x = e.offsetX;
|
||||
form.clk_y = e.offsetY;
|
||||
} else if (typeof $.fn.offset == 'function') { // try to use dimensions plugin
|
||||
var offset = $el.offset();
|
||||
form.clk_x = e.pageX - offset.left;
|
||||
form.clk_y = e.pageY - offset.top;
|
||||
} else {
|
||||
form.clk_x = e.pageX - target.offsetLeft;
|
||||
form.clk_y = e.pageY - target.offsetTop;
|
||||
}
|
||||
}
|
||||
// clear form vars
|
||||
setTimeout(function() { form.clk = form.clk_x = form.clk_y = null; }, 100);
|
||||
});
|
||||
};
|
||||
|
||||
// ajaxFormUnbind unbinds the event handlers that were bound by ajaxForm
|
||||
$.fn.ajaxFormUnbind = function() {
|
||||
return this.unbind('submit.form-plugin click.form-plugin');
|
||||
};
|
||||
|
||||
/**
|
||||
* formToArray() gathers form element data into an array of objects that can
|
||||
* be passed to any of the following ajax functions: $.get, $.post, or load.
|
||||
* Each object in the array has both a 'name' and 'value' property. An example of
|
||||
* an array for a simple login form might be:
|
||||
*
|
||||
* [ { name: 'username', value: 'jresig' }, { name: 'password', value: 'secret' } ]
|
||||
*
|
||||
* It is this array that is passed to pre-submit callback functions provided to the
|
||||
* ajaxSubmit() and ajaxForm() methods.
|
||||
*/
|
||||
$.fn.formToArray = function(semantic) {
|
||||
var a = [];
|
||||
if (this.length === 0) {
|
||||
return a;
|
||||
}
|
||||
|
||||
var form = this[0];
|
||||
var els = semantic ? form.getElementsByTagName('*') : form.elements;
|
||||
if (!els) {
|
||||
return a;
|
||||
}
|
||||
|
||||
var i,j,n,v,el,max,jmax;
|
||||
for(i=0, max=els.length; i < max; i++) {
|
||||
el = els[i];
|
||||
n = el.name;
|
||||
if (!n) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (semantic && form.clk && el.type == "image") {
|
||||
// handle image inputs on the fly when semantic == true
|
||||
if(!el.disabled && form.clk == el) {
|
||||
a.push({name: n, value: $(el).val(), type: el.type });
|
||||
a.push({name: n+'.x', value: form.clk_x}, {name: n+'.y', value: form.clk_y});
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
v = $.fieldValue(el, true);
|
||||
if (v && v.constructor == Array) {
|
||||
for(j=0, jmax=v.length; j < jmax; j++) {
|
||||
a.push({name: n, value: v[j]});
|
||||
}
|
||||
}
|
||||
else if (v !== null && typeof v != 'undefined') {
|
||||
a.push({name: n, value: v, type: el.type});
|
||||
}
|
||||
}
|
||||
|
||||
if (!semantic && form.clk) {
|
||||
// input type=='image' are not found in elements array! handle it here
|
||||
var $input = $(form.clk), input = $input[0];
|
||||
n = input.name;
|
||||
if (n && !input.disabled && input.type == 'image') {
|
||||
a.push({name: n, value: $input.val()});
|
||||
a.push({name: n+'.x', value: form.clk_x}, {name: n+'.y', value: form.clk_y});
|
||||
}
|
||||
}
|
||||
return a;
|
||||
};
|
||||
|
||||
/**
|
||||
* Serializes form data into a 'submittable' string. This method will return a string
|
||||
* in the format: name1=value1&name2=value2
|
||||
*/
|
||||
$.fn.formSerialize = function(semantic) {
|
||||
//hand off to jQuery.param for proper encoding
|
||||
return $.param(this.formToArray(semantic));
|
||||
};
|
||||
|
||||
/**
|
||||
* Serializes all field elements in the jQuery object into a query string.
|
||||
* This method will return a string in the format: name1=value1&name2=value2
|
||||
*/
|
||||
$.fn.fieldSerialize = function(successful) {
|
||||
var a = [];
|
||||
this.each(function() {
|
||||
var n = this.name;
|
||||
if (!n) {
|
||||
return;
|
||||
}
|
||||
var v = $.fieldValue(this, successful);
|
||||
if (v && v.constructor == Array) {
|
||||
for (var i=0,max=v.length; i < max; i++) {
|
||||
a.push({name: n, value: v[i]});
|
||||
}
|
||||
}
|
||||
else if (v !== null && typeof v != 'undefined') {
|
||||
a.push({name: this.name, value: v});
|
||||
}
|
||||
});
|
||||
//hand off to jQuery.param for proper encoding
|
||||
return $.param(a);
|
||||
};
|
||||
|
||||
/**
|
||||
* Returns the value(s) of the element in the matched set. For example, consider the following form:
|
||||
*
|
||||
* <form><fieldset>
|
||||
* <input name="A" type="text" />
|
||||
* <input name="A" type="text" />
|
||||
* <input name="B" type="checkbox" value="B1" />
|
||||
* <input name="B" type="checkbox" value="B2"/>
|
||||
* <input name="C" type="radio" value="C1" />
|
||||
* <input name="C" type="radio" value="C2" />
|
||||
* </fieldset></form>
|
||||
*
|
||||
* var v = $(':text').fieldValue();
|
||||
* // if no values are entered into the text inputs
|
||||
* v == ['','']
|
||||
* // if values entered into the text inputs are 'foo' and 'bar'
|
||||
* v == ['foo','bar']
|
||||
*
|
||||
* var v = $(':checkbox').fieldValue();
|
||||
* // if neither checkbox is checked
|
||||
* v === undefined
|
||||
* // if both checkboxes are checked
|
||||
* v == ['B1', 'B2']
|
||||
*
|
||||
* var v = $(':radio').fieldValue();
|
||||
* // if neither radio is checked
|
||||
* v === undefined
|
||||
* // if first radio is checked
|
||||
* v == ['C1']
|
||||
*
|
||||
* The successful argument controls whether or not the field element must be 'successful'
|
||||
* (per http://www.w3.org/TR/html4/interact/forms.html#successful-controls).
|
||||
* The default value of the successful argument is true. If this value is false the value(s)
|
||||
* for each element is returned.
|
||||
*
|
||||
* Note: This method *always* returns an array. If no valid value can be determined the
|
||||
* array will be empty, otherwise it will contain one or more values.
|
||||
*/
|
||||
$.fn.fieldValue = function(successful) {
|
||||
for (var val=[], i=0, max=this.length; i < max; i++) {
|
||||
var el = this[i];
|
||||
var v = $.fieldValue(el, successful);
|
||||
if (v === null || typeof v == 'undefined' || (v.constructor == Array && !v.length)) {
|
||||
continue;
|
||||
}
|
||||
v.constructor == Array ? $.merge(val, v) : val.push(v);
|
||||
}
|
||||
return val;
|
||||
};
|
||||
|
||||
/**
|
||||
* Returns the value of the field element.
|
||||
*/
|
||||
$.fieldValue = function(el, successful) {
|
||||
var n = el.name, t = el.type, tag = el.tagName.toLowerCase();
|
||||
if (successful === undefined) {
|
||||
successful = true;
|
||||
}
|
||||
|
||||
if (successful && (!n || el.disabled || t == 'reset' || t == 'button' ||
|
||||
(t == 'checkbox' || t == 'radio') && !el.checked ||
|
||||
(t == 'submit' || t == 'image') && el.form && el.form.clk != el ||
|
||||
tag == 'select' && el.selectedIndex == -1)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (tag == 'select') {
|
||||
var index = el.selectedIndex;
|
||||
if (index < 0) {
|
||||
return null;
|
||||
}
|
||||
var a = [], ops = el.options;
|
||||
var one = (t == 'select-one');
|
||||
var max = (one ? index+1 : ops.length);
|
||||
for(var i=(one ? index : 0); i < max; i++) {
|
||||
var op = ops[i];
|
||||
if (op.selected) {
|
||||
var v = op.value;
|
||||
if (!v) { // extra pain for IE...
|
||||
v = (op.attributes && op.attributes['value'] && !(op.attributes['value'].specified)) ? op.text : op.value;
|
||||
}
|
||||
if (one) {
|
||||
return v;
|
||||
}
|
||||
a.push(v);
|
||||
}
|
||||
}
|
||||
return a;
|
||||
}
|
||||
return $(el).val();
|
||||
};
|
||||
|
||||
/**
|
||||
* Clears the form data. Takes the following actions on the form's input fields:
|
||||
* - input text fields will have their 'value' property set to the empty string
|
||||
* - select elements will have their 'selectedIndex' property set to -1
|
||||
* - checkbox and radio inputs will have their 'checked' property set to false
|
||||
* - inputs of type submit, button, reset, and hidden will *not* be effected
|
||||
* - button elements will *not* be effected
|
||||
*/
|
||||
$.fn.clearForm = function(includeHidden) {
|
||||
return this.each(function() {
|
||||
$('input,select,textarea', this).clearFields(includeHidden);
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Clears the selected form elements.
|
||||
*/
|
||||
$.fn.clearFields = $.fn.clearInputs = function(includeHidden) {
|
||||
var re = /^(?:color|date|datetime|email|month|number|password|range|search|tel|text|time|url|week)$/i; // 'hidden' is not in this list
|
||||
return this.each(function() {
|
||||
var t = this.type, tag = this.tagName.toLowerCase();
|
||||
if (re.test(t) || tag == 'textarea' || (includeHidden && /hidden/.test(t)) ) {
|
||||
this.value = '';
|
||||
}
|
||||
else if (t == 'checkbox' || t == 'radio') {
|
||||
this.checked = false;
|
||||
}
|
||||
else if (tag == 'select') {
|
||||
this.selectedIndex = -1;
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Resets the form data. Causes all form elements to be reset to their original value.
|
||||
*/
|
||||
$.fn.resetForm = function() {
|
||||
return this.each(function() {
|
||||
// guard against an input with the name of 'reset'
|
||||
// note that IE reports the reset function as an 'object'
|
||||
if (typeof this.reset == 'function' || (typeof this.reset == 'object' && !this.reset.nodeType)) {
|
||||
this.reset();
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Enables or disables any matching elements.
|
||||
*/
|
||||
$.fn.enable = function(b) {
|
||||
if (b === undefined) {
|
||||
b = true;
|
||||
}
|
||||
return this.each(function() {
|
||||
this.disabled = !b;
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Checks/unchecks any matching checkboxes or radio buttons and
|
||||
* selects/deselects and matching option elements.
|
||||
*/
|
||||
$.fn.selected = function(select) {
|
||||
if (select === undefined) {
|
||||
select = true;
|
||||
}
|
||||
return this.each(function() {
|
||||
var t = this.type;
|
||||
if (t == 'checkbox' || t == 'radio') {
|
||||
this.checked = select;
|
||||
}
|
||||
else if (this.tagName.toLowerCase() == 'option') {
|
||||
var $sel = $(this).parent('select');
|
||||
if (select && $sel[0] && $sel[0].type == 'select-one') {
|
||||
// deselect all other options
|
||||
$sel.find('option').selected(false);
|
||||
}
|
||||
this.selected = select;
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
// expose debug var
|
||||
$.fn.ajaxSubmit.debug = false;
|
||||
|
||||
// helper fn for console logging
|
||||
function log() {
|
||||
if (!$.fn.ajaxSubmit.debug)
|
||||
return;
|
||||
var msg = '[jquery.form] ' + Array.prototype.join.call(arguments,'');
|
||||
if (window.console && window.console.log) {
|
||||
window.console.log(msg);
|
||||
}
|
||||
else if (window.opera && window.opera.postError) {
|
||||
window.opera.postError(msg);
|
||||
}
|
||||
};
|
||||
|
||||
})(jQuery);
|
||||
83
js/jquery.prettyPhoto.js
Normal file
83
js/jquery.prettyPhoto.js
Normal file
@@ -0,0 +1,83 @@
|
||||
/* ------------------------------------------------------------------------
|
||||
Class: prettyPhoto
|
||||
Use: Lightbox clone for jQuery
|
||||
Author: Stephane Caron (http://www.no-margin-for-errors.com)
|
||||
Version: 3.1.4
|
||||
------------------------------------------------------------------------- */
|
||||
|
||||
(function($){$.prettyPhoto={version:'3.1.4'};$.fn.prettyPhoto=function(pp_settings){pp_settings=jQuery.extend({hook:'rel',animation_speed:'fast',ajaxcallback:function(){},slideshow:5000,autoplay_slideshow:false,opacity:0.80,show_title:true,allow_resize:true,allow_expand:true,default_width:500,default_height:344,counter_separator_label:'/',theme:'pp_default',horizontal_padding:20,hideflash:false,wmode:'opaque',autoplay:true,modal:false,deeplinking:true,overlay_gallery:true,overlay_gallery_max:30,keyboard_shortcuts:true,changepicturecallback:function(){},callback:function(){},ie6_fallback:true,markup:'<div class="pp_pic_holder"> \
|
||||
<div class="ppt"> </div> \
|
||||
<div class="pp_top"> \
|
||||
<div class="pp_left"></div> \
|
||||
<div class="pp_middle"></div> \
|
||||
<div class="pp_right"></div> \
|
||||
</div> \
|
||||
<div class="pp_content_container"> \
|
||||
<div class="pp_left"> \
|
||||
<div class="pp_right"> \
|
||||
<div class="pp_content"> \
|
||||
<div class="pp_loaderIcon"></div> \
|
||||
<div class="pp_fade"> \
|
||||
<a href="#" class="pp_expand" title="Expand the image">Expand</a> \
|
||||
<div class="pp_hoverContainer"> \
|
||||
<a class="pp_next" href="#">next</a> \
|
||||
<a class="pp_previous" href="#">previous</a> \
|
||||
</div> \
|
||||
<div id="pp_full_res"></div> \
|
||||
<div class="pp_details"> \
|
||||
<div class="pp_nav"> \
|
||||
<a href="#" class="pp_arrow_previous">Previous</a> \
|
||||
<p class="currentTextHolder">0/0</p> \
|
||||
<a href="#" class="pp_arrow_next">Next</a> \
|
||||
</div> \
|
||||
<p class="pp_description"></p> \
|
||||
<div class="pp_social">{pp_social}</div> \
|
||||
<a class="pp_close" href="#">Close</a> \
|
||||
</div> \
|
||||
</div> \
|
||||
</div> \
|
||||
</div> \
|
||||
</div> \
|
||||
</div> \
|
||||
<div class="pp_bottom"> \
|
||||
<div class="pp_left"></div> \
|
||||
<div class="pp_middle"></div> \
|
||||
<div class="pp_right"></div> \
|
||||
</div> \
|
||||
</div> \
|
||||
<div class="pp_overlay"></div>',gallery_markup:'<div class="pp_gallery"> \
|
||||
<a href="#" class="pp_arrow_previous">Previous</a> \
|
||||
<div> \
|
||||
<ul> \
|
||||
{gallery} \
|
||||
</ul> \
|
||||
</div> \
|
||||
<a href="#" class="pp_arrow_next">Next</a> \
|
||||
</div>',image_markup:'<img id="fullResImage" src="{path}" />',flash_markup:'<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="{width}" height="{height}"><param name="wmode" value="{wmode}" /><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="{path}" /><embed src="{path}" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="{width}" height="{height}" wmode="{wmode}"></embed></object>',quicktime_markup:'<object classid="clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B" codebase="http://www.apple.com/qtactivex/qtplugin.cab" height="{height}" width="{width}"><param name="src" value="{path}"><param name="autoplay" value="{autoplay}"><param name="type" value="video/quicktime"><embed src="{path}" height="{height}" width="{width}" autoplay="{autoplay}" type="video/quicktime" pluginspage="http://www.apple.com/quicktime/download/"></embed></object>',iframe_markup:'<iframe src ="{path}" width="{width}" height="{height}" frameborder="no"></iframe>',inline_markup:'<div class="pp_inline">{content}</div>',custom_markup:'',social_tools:'<div class="twitter"><a href="http://twitter.com/share" class="twitter-share-button" data-count="none">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div><div class="facebook"><iframe src="//www.facebook.com/plugins/like.php?locale=en_US&href={location_href}&layout=button_count&show_faces=true&width=500&action=like&font&colorscheme=light&height=23" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:500px; height:23px;" allowTransparency="true"></iframe></div>'},pp_settings);var matchedObjects=this,percentBased=false,pp_dimensions,pp_open,pp_contentHeight,pp_contentWidth,pp_containerHeight,pp_containerWidth,windowHeight=$(window).height(),windowWidth=$(window).width(),pp_slideshow;doresize=true,scroll_pos=_get_scroll();$(window).unbind('resize.prettyphoto').bind('resize.prettyphoto',function(){_center_overlay();_resize_overlay();});if(pp_settings.keyboard_shortcuts){$(document).unbind('keydown.prettyphoto').bind('keydown.prettyphoto',function(e){if(typeof $pp_pic_holder!='undefined'){if($pp_pic_holder.is(':visible')){switch(e.keyCode){case 37:$.prettyPhoto.changePage('previous');e.preventDefault();break;case 39:$.prettyPhoto.changePage('next');e.preventDefault();break;case 27:if(!settings.modal)
|
||||
$.prettyPhoto.close();e.preventDefault();break;};};};});};$.prettyPhoto.initialize=function(){settings=pp_settings;if(settings.theme=='pp_default')settings.horizontal_padding=16;if(settings.ie6_fallback&&$.browser.msie&&parseInt($.browser.version)==6)settings.theme="light_square";theRel=$(this).attr(settings.hook);galleryRegExp=/\[(?:.*)\]/;isSet=(galleryRegExp.exec(theRel))?true:false;pp_images=(isSet)?jQuery.map(matchedObjects,function(n,i){if($(n).attr(settings.hook).indexOf(theRel)!=-1)return $(n).attr('href');}):$.makeArray($(this).attr('href'));pp_titles=(isSet)?jQuery.map(matchedObjects,function(n,i){if($(n).attr(settings.hook).indexOf(theRel)!=-1)return($(n).find('img').attr('alt'))?$(n).find('img').attr('alt'):"";}):$.makeArray($(this).find('img').attr('alt'));pp_descriptions=(isSet)?jQuery.map(matchedObjects,function(n,i){if($(n).attr(settings.hook).indexOf(theRel)!=-1)return($(n).attr('title'))?$(n).attr('title'):"";}):$.makeArray($(this).attr('title'));if(pp_images.length>settings.overlay_gallery_max)settings.overlay_gallery=false;set_position=jQuery.inArray($(this).attr('href'),pp_images);rel_index=(isSet)?set_position:$("a["+settings.hook+"^='"+theRel+"']").index($(this));_build_overlay(this);if(settings.allow_resize)
|
||||
$(window).bind('scroll.prettyphoto',function(){_center_overlay();});$.prettyPhoto.open();return false;}
|
||||
$.prettyPhoto.open=function(event){if(typeof settings=="undefined"){settings=pp_settings;if($.browser.msie&&$.browser.version==6)settings.theme="light_square";pp_images=$.makeArray(arguments[0]);pp_titles=(arguments[1])?$.makeArray(arguments[1]):$.makeArray("");pp_descriptions=(arguments[2])?$.makeArray(arguments[2]):$.makeArray("");isSet=(pp_images.length>1)?true:false;set_position=(arguments[3])?arguments[3]:0;_build_overlay(event.target);}
|
||||
if($.browser.msie&&$.browser.version==6)$('select').css('visibility','hidden');if(settings.hideflash)$('object,embed,iframe[src*=youtube],iframe[src*=vimeo]').css('visibility','hidden');_checkPosition($(pp_images).size());$('.pp_loaderIcon').show();if(settings.deeplinking)
|
||||
setHashtag();if(settings.social_tools){facebook_like_link=settings.social_tools.replace('{location_href}',encodeURIComponent(location.href));$pp_pic_holder.find('.pp_social').html(facebook_like_link);}
|
||||
if($ppt.is(':hidden'))$ppt.css('opacity',0).show();$pp_overlay.show().fadeTo(settings.animation_speed,settings.opacity);$pp_pic_holder.find('.currentTextHolder').text((set_position+1)+settings.counter_separator_label+$(pp_images).size());if(typeof pp_descriptions[set_position]!='undefined'&&pp_descriptions[set_position]!=""){$pp_pic_holder.find('.pp_description').show().html(unescape(pp_descriptions[set_position]));}else{$pp_pic_holder.find('.pp_description').hide();}
|
||||
movie_width=(parseFloat(getParam('width',pp_images[set_position])))?getParam('width',pp_images[set_position]):settings.default_width.toString();movie_height=(parseFloat(getParam('height',pp_images[set_position])))?getParam('height',pp_images[set_position]):settings.default_height.toString();percentBased=false;if(movie_height.indexOf('%')!=-1){movie_height=parseFloat(($(window).height()*parseFloat(movie_height)/100)-150);percentBased=true;}
|
||||
if(movie_width.indexOf('%')!=-1){movie_width=parseFloat(($(window).width()*parseFloat(movie_width)/100)-150);percentBased=true;}
|
||||
$pp_pic_holder.fadeIn(function(){(settings.show_title&&pp_titles[set_position]!=""&&typeof pp_titles[set_position]!="undefined")?$ppt.html(unescape(pp_titles[set_position])):$ppt.html(' ');imgPreloader="";skipInjection=false;switch(_getFileType(pp_images[set_position])){case'image':imgPreloader=new Image();nextImage=new Image();if(isSet&&set_position<$(pp_images).size()-1)nextImage.src=pp_images[set_position+1];prevImage=new Image();if(isSet&&pp_images[set_position-1])prevImage.src=pp_images[set_position-1];$pp_pic_holder.find('#pp_full_res')[0].innerHTML=settings.image_markup.replace(/{path}/g,pp_images[set_position]);imgPreloader.onload=function(){pp_dimensions=_fitToViewport(imgPreloader.width,imgPreloader.height);_showContent();};imgPreloader.onerror=function(){alert('Image cannot be loaded. Make sure the path is correct and image exist.');$.prettyPhoto.close();};imgPreloader.src=pp_images[set_position];break;case'youtube':pp_dimensions=_fitToViewport(movie_width,movie_height);movie_id=getParam('v',pp_images[set_position]);if(movie_id==""){movie_id=pp_images[set_position].split('youtu.be/');movie_id=movie_id[1];if(movie_id.indexOf('?')>0)
|
||||
movie_id=movie_id.substr(0,movie_id.indexOf('?'));if(movie_id.indexOf('&')>0)
|
||||
movie_id=movie_id.substr(0,movie_id.indexOf('&'));}
|
||||
movie='http://www.youtube.com/embed/'+movie_id;(getParam('rel',pp_images[set_position]))?movie+="?rel="+getParam('rel',pp_images[set_position]):movie+="?rel=1";if(settings.autoplay)movie+="&autoplay=1";toInject=settings.iframe_markup.replace(/{width}/g,pp_dimensions['width']).replace(/{height}/g,pp_dimensions['height']).replace(/{wmode}/g,settings.wmode).replace(/{path}/g,movie);break;case'vimeo':pp_dimensions=_fitToViewport(movie_width,movie_height);movie_id=pp_images[set_position];var regExp=/http:\/\/(www\.)?vimeo.com\/(\d+)/;var match=movie_id.match(regExp);movie='http://player.vimeo.com/video/'+match[2]+'?title=0&byline=0&portrait=0';if(settings.autoplay)movie+="&autoplay=1;";vimeo_width=pp_dimensions['width']+'/embed/?moog_width='+pp_dimensions['width'];toInject=settings.iframe_markup.replace(/{width}/g,vimeo_width).replace(/{height}/g,pp_dimensions['height']).replace(/{path}/g,movie);break;case'quicktime':pp_dimensions=_fitToViewport(movie_width,movie_height);pp_dimensions['height']+=15;pp_dimensions['contentHeight']+=15;pp_dimensions['containerHeight']+=15;toInject=settings.quicktime_markup.replace(/{width}/g,pp_dimensions['width']).replace(/{height}/g,pp_dimensions['height']).replace(/{wmode}/g,settings.wmode).replace(/{path}/g,pp_images[set_position]).replace(/{autoplay}/g,settings.autoplay);break;case'flash':pp_dimensions=_fitToViewport(movie_width,movie_height);flash_vars=pp_images[set_position];flash_vars=flash_vars.substring(pp_images[set_position].indexOf('flashvars')+10,pp_images[set_position].length);filename=pp_images[set_position];filename=filename.substring(0,filename.indexOf('?'));toInject=settings.flash_markup.replace(/{width}/g,pp_dimensions['width']).replace(/{height}/g,pp_dimensions['height']).replace(/{wmode}/g,settings.wmode).replace(/{path}/g,filename+'?'+flash_vars);break;case'iframe':pp_dimensions=_fitToViewport(movie_width,movie_height);frame_url=pp_images[set_position];frame_url=frame_url.substr(0,frame_url.indexOf('iframe')-1);toInject=settings.iframe_markup.replace(/{width}/g,pp_dimensions['width']).replace(/{height}/g,pp_dimensions['height']).replace(/{path}/g,frame_url);break;case'ajax':doresize=false;pp_dimensions=_fitToViewport(movie_width,movie_height);doresize=true;skipInjection=true;$.get(pp_images[set_position],function(responseHTML){toInject=settings.inline_markup.replace(/{content}/g,responseHTML);$pp_pic_holder.find('#pp_full_res')[0].innerHTML=toInject;_showContent();});break;case'custom':pp_dimensions=_fitToViewport(movie_width,movie_height);toInject=settings.custom_markup;break;case'inline':myClone=$(pp_images[set_position]).clone().append('<br clear="all" />').css({'width':settings.default_width}).wrapInner('<div id="pp_full_res"><div class="pp_inline"></div></div>').appendTo($('body')).show();doresize=false;pp_dimensions=_fitToViewport($(myClone).width(),$(myClone).height());doresize=true;$(myClone).remove();toInject=settings.inline_markup.replace(/{content}/g,$(pp_images[set_position]).html());break;};if(!imgPreloader&&!skipInjection){$pp_pic_holder.find('#pp_full_res')[0].innerHTML=toInject;_showContent();};});return false;};$.prettyPhoto.changePage=function(direction){currentGalleryPage=0;if(direction=='previous'){set_position--;if(set_position<0)set_position=$(pp_images).size()-1;}else if(direction=='next'){set_position++;if(set_position>$(pp_images).size()-1)set_position=0;}else{set_position=direction;};rel_index=set_position;if(!doresize)doresize=true;if(settings.allow_expand){$('.pp_contract').removeClass('pp_contract').addClass('pp_expand');}
|
||||
_hideContent(function(){$.prettyPhoto.open();});};$.prettyPhoto.changeGalleryPage=function(direction){if(direction=='next'){currentGalleryPage++;if(currentGalleryPage>totalPage)currentGalleryPage=0;}else if(direction=='previous'){currentGalleryPage--;if(currentGalleryPage<0)currentGalleryPage=totalPage;}else{currentGalleryPage=direction;};slide_speed=(direction=='next'||direction=='previous')?settings.animation_speed:0;slide_to=currentGalleryPage*(itemsPerPage*itemWidth);$pp_gallery.find('ul').animate({left:-slide_to},slide_speed);};$.prettyPhoto.startSlideshow=function(){if(typeof pp_slideshow=='undefined'){$pp_pic_holder.find('.pp_play').unbind('click').removeClass('pp_play').addClass('pp_pause').click(function(){$.prettyPhoto.stopSlideshow();return false;});pp_slideshow=setInterval($.prettyPhoto.startSlideshow,settings.slideshow);}else{$.prettyPhoto.changePage('next');};}
|
||||
$.prettyPhoto.stopSlideshow=function(){$pp_pic_holder.find('.pp_pause').unbind('click').removeClass('pp_pause').addClass('pp_play').click(function(){$.prettyPhoto.startSlideshow();return false;});clearInterval(pp_slideshow);pp_slideshow=undefined;}
|
||||
$.prettyPhoto.close=function(){if($pp_overlay.is(":animated"))return;$.prettyPhoto.stopSlideshow();$pp_pic_holder.stop().find('object,embed').css('visibility','hidden');$('div.pp_pic_holder,div.ppt,.pp_fade').fadeOut(settings.animation_speed,function(){$(this).remove();});$pp_overlay.fadeOut(settings.animation_speed,function(){if($.browser.msie&&$.browser.version==6)$('select').css('visibility','visible');if(settings.hideflash)$('object,embed,iframe[src*=youtube],iframe[src*=vimeo]').css('visibility','visible');$(this).remove();$(window).unbind('scroll.prettyphoto');clearHashtag();settings.callback();doresize=true;pp_open=false;delete settings;});};function _showContent(){$('.pp_loaderIcon').hide();projectedTop=scroll_pos['scrollTop']+((windowHeight/2)-(pp_dimensions['containerHeight']/2));if(projectedTop<0)projectedTop=0;$ppt.fadeTo(settings.animation_speed,1);$pp_pic_holder.find('.pp_content').animate({height:pp_dimensions['contentHeight'],width:pp_dimensions['contentWidth']},settings.animation_speed);$pp_pic_holder.animate({'top':projectedTop,'left':((windowWidth/2)-(pp_dimensions['containerWidth']/2)<0)?0:(windowWidth/2)-(pp_dimensions['containerWidth']/2),width:pp_dimensions['containerWidth']},settings.animation_speed,function(){$pp_pic_holder.find('.pp_hoverContainer,#fullResImage').height(pp_dimensions['height']).width(pp_dimensions['width']);$pp_pic_holder.find('.pp_fade').fadeIn(settings.animation_speed);if(isSet&&_getFileType(pp_images[set_position])=="image"){$pp_pic_holder.find('.pp_hoverContainer').show();}else{$pp_pic_holder.find('.pp_hoverContainer').hide();}
|
||||
if(settings.allow_expand){if(pp_dimensions['resized']){$('a.pp_expand,a.pp_contract').show();}else{$('a.pp_expand').hide();}}
|
||||
if(settings.autoplay_slideshow&&!pp_slideshow&&!pp_open)$.prettyPhoto.startSlideshow();settings.changepicturecallback();pp_open=true;});_insert_gallery();pp_settings.ajaxcallback();};function _hideContent(callback){$pp_pic_holder.find('#pp_full_res object,#pp_full_res embed').css('visibility','hidden');$pp_pic_holder.find('.pp_fade').fadeOut(settings.animation_speed,function(){$('.pp_loaderIcon').show();callback();});};function _checkPosition(setCount){(setCount>1)?$('.pp_nav').show():$('.pp_nav').hide();};function _fitToViewport(width,height){resized=false;_getDimensions(width,height);imageWidth=width,imageHeight=height;if(((pp_containerWidth>windowWidth)||(pp_containerHeight>windowHeight))&&doresize&&settings.allow_resize&&!percentBased){resized=true,fitting=false;while(!fitting){if((pp_containerWidth>windowWidth)){imageWidth=(windowWidth-200);imageHeight=(height/width)*imageWidth;}else if((pp_containerHeight>windowHeight)){imageHeight=(windowHeight-200);imageWidth=(width/height)*imageHeight;}else{fitting=true;};pp_containerHeight=imageHeight,pp_containerWidth=imageWidth;};_getDimensions(imageWidth,imageHeight);if((pp_containerWidth>windowWidth)||(pp_containerHeight>windowHeight)){_fitToViewport(pp_containerWidth,pp_containerHeight)};};return{width:Math.floor(imageWidth),height:Math.floor(imageHeight),containerHeight:Math.floor(pp_containerHeight),containerWidth:Math.floor(pp_containerWidth)+(settings.horizontal_padding*2),contentHeight:Math.floor(pp_contentHeight),contentWidth:Math.floor(pp_contentWidth),resized:resized};};function _getDimensions(width,height){width=parseFloat(width);height=parseFloat(height);$pp_details=$pp_pic_holder.find('.pp_details');$pp_details.width(width);detailsHeight=parseFloat($pp_details.css('marginTop'))+parseFloat($pp_details.css('marginBottom'));$pp_details=$pp_details.clone().addClass(settings.theme).width(width).appendTo($('body')).css({'position':'absolute','top':-10000});detailsHeight+=$pp_details.height();detailsHeight=(detailsHeight<=34)?36:detailsHeight;if($.browser.msie&&$.browser.version==7)detailsHeight+=8;$pp_details.remove();$pp_title=$pp_pic_holder.find('.ppt');$pp_title.width(width);titleHeight=parseFloat($pp_title.css('marginTop'))+parseFloat($pp_title.css('marginBottom'));$pp_title=$pp_title.clone().appendTo($('body')).css({'position':'absolute','top':-10000});titleHeight+=$pp_title.height();$pp_title.remove();pp_contentHeight=height+detailsHeight;pp_contentWidth=width;pp_containerHeight=pp_contentHeight+titleHeight+$pp_pic_holder.find('.pp_top').height()+$pp_pic_holder.find('.pp_bottom').height();pp_containerWidth=width;}
|
||||
function _getFileType(itemSrc){if(itemSrc.match(/youtube\.com\/watch/i)||itemSrc.match(/youtu\.be/i)){return'youtube';}else if(itemSrc.match(/vimeo\.com/i)){return'vimeo';}else if(itemSrc.match(/\b.mov\b/i)){return'quicktime';}else if(itemSrc.match(/\b.swf\b/i)){return'flash';}else if(itemSrc.match(/\biframe=true\b/i)){return'iframe';}else if(itemSrc.match(/\bajax=true\b/i)){return'ajax';}else if(itemSrc.match(/\bcustom=true\b/i)){return'custom';}else if(itemSrc.substr(0,1)=='#'){return'inline';}else{return'image';};};function _center_overlay(){if(doresize&&typeof $pp_pic_holder!='undefined'){scroll_pos=_get_scroll();contentHeight=$pp_pic_holder.height(),contentwidth=$pp_pic_holder.width();projectedTop=(windowHeight/2)+scroll_pos['scrollTop']-(contentHeight/2);if(projectedTop<0)projectedTop=0;if(contentHeight>windowHeight)
|
||||
return;$pp_pic_holder.css({'top':projectedTop,'left':(windowWidth/2)+scroll_pos['scrollLeft']-(contentwidth/2)});};};function _get_scroll(){if(self.pageYOffset){return{scrollTop:self.pageYOffset,scrollLeft:self.pageXOffset};}else if(document.documentElement&&document.documentElement.scrollTop){return{scrollTop:document.documentElement.scrollTop,scrollLeft:document.documentElement.scrollLeft};}else if(document.body){return{scrollTop:document.body.scrollTop,scrollLeft:document.body.scrollLeft};};};function _resize_overlay(){windowHeight=$(window).height(),windowWidth=$(window).width();if(typeof $pp_overlay!="undefined")$pp_overlay.height($(document).height()).width(windowWidth);};function _insert_gallery(){if(isSet&&settings.overlay_gallery&&_getFileType(pp_images[set_position])=="image"&&(settings.ie6_fallback&&!($.browser.msie&&parseInt($.browser.version)==6))){itemWidth=52+5;navWidth=(settings.theme=="facebook"||settings.theme=="pp_default")?50:30;itemsPerPage=Math.floor((pp_dimensions['containerWidth']-100-navWidth)/itemWidth);itemsPerPage=(itemsPerPage<pp_images.length)?itemsPerPage:pp_images.length;totalPage=Math.ceil(pp_images.length/itemsPerPage)-1;if(totalPage==0){navWidth=0;$pp_gallery.find('.pp_arrow_next,.pp_arrow_previous').hide();}else{$pp_gallery.find('.pp_arrow_next,.pp_arrow_previous').show();};galleryWidth=itemsPerPage*itemWidth;fullGalleryWidth=pp_images.length*itemWidth;$pp_gallery.css('margin-left',-((galleryWidth/2)+(navWidth/2))).find('div:first').width(galleryWidth+5).find('ul').width(fullGalleryWidth).find('li.selected').removeClass('selected');goToPage=(Math.floor(set_position/itemsPerPage)<totalPage)?Math.floor(set_position/itemsPerPage):totalPage;$.prettyPhoto.changeGalleryPage(goToPage);$pp_gallery_li.filter(':eq('+set_position+')').addClass('selected');}else{$pp_pic_holder.find('.pp_content').unbind('mouseenter mouseleave');}}
|
||||
function _build_overlay(caller){if(settings.social_tools)
|
||||
facebook_like_link=settings.social_tools.replace('{location_href}',encodeURIComponent(location.href));settings.markup=settings.markup.replace('{pp_social}','');$('body').append(settings.markup);$pp_pic_holder=$('.pp_pic_holder'),$ppt=$('.ppt'),$pp_overlay=$('div.pp_overlay');if(isSet&&settings.overlay_gallery){currentGalleryPage=0;toInject="";for(var i=0;i<pp_images.length;i++){if(!pp_images[i].match(/\b(jpg|jpeg|png|gif)\b/gi)){classname='default';img_src='';}else{classname='';img_src=pp_images[i];}
|
||||
toInject+="<li class='"+classname+"'><a href='#'><img src='"+img_src+"' width='50' alt='' /></a></li>";};toInject=settings.gallery_markup.replace(/{gallery}/g,toInject);$pp_pic_holder.find('#pp_full_res').after(toInject);$pp_gallery=$('.pp_pic_holder .pp_gallery'),$pp_gallery_li=$pp_gallery.find('li');$pp_gallery.find('.pp_arrow_next').click(function(){$.prettyPhoto.changeGalleryPage('next');$.prettyPhoto.stopSlideshow();return false;});$pp_gallery.find('.pp_arrow_previous').click(function(){$.prettyPhoto.changeGalleryPage('previous');$.prettyPhoto.stopSlideshow();return false;});$pp_pic_holder.find('.pp_content').hover(function(){$pp_pic_holder.find('.pp_gallery:not(.disabled)').fadeIn();},function(){$pp_pic_holder.find('.pp_gallery:not(.disabled)').fadeOut();});itemWidth=52+5;$pp_gallery_li.each(function(i){$(this).find('a').click(function(){$.prettyPhoto.changePage(i);$.prettyPhoto.stopSlideshow();return false;});});};if(settings.slideshow){$pp_pic_holder.find('.pp_nav').prepend('<a href="#" class="pp_play">Play</a>')
|
||||
$pp_pic_holder.find('.pp_nav .pp_play').click(function(){$.prettyPhoto.startSlideshow();return false;});}
|
||||
$pp_pic_holder.attr('class','pp_pic_holder '+settings.theme);$pp_overlay.css({'opacity':0,'height':$(document).height(),'width':$(window).width()}).bind('click',function(){if(!settings.modal)$.prettyPhoto.close();});$('a.pp_close').bind('click',function(){$.prettyPhoto.close();return false;});if(settings.allow_expand){$('a.pp_expand').bind('click',function(e){if($(this).hasClass('pp_expand')){$(this).removeClass('pp_expand').addClass('pp_contract');doresize=false;}else{$(this).removeClass('pp_contract').addClass('pp_expand');doresize=true;};_hideContent(function(){$.prettyPhoto.open();});return false;});}
|
||||
$pp_pic_holder.find('.pp_previous, .pp_nav .pp_arrow_previous').bind('click',function(){$.prettyPhoto.changePage('previous');$.prettyPhoto.stopSlideshow();return false;});$pp_pic_holder.find('.pp_next, .pp_nav .pp_arrow_next').bind('click',function(){$.prettyPhoto.changePage('next');$.prettyPhoto.stopSlideshow();return false;});_center_overlay();};if(!pp_alreadyInitialized&&getHashtag()){pp_alreadyInitialized=true;hashIndex=getHashtag();hashRel=hashIndex;hashIndex=hashIndex.substring(hashIndex.indexOf('/')+1,hashIndex.length-1);hashRel=hashRel.substring(0,hashRel.indexOf('/'));setTimeout(function(){$("a["+pp_settings.hook+"^='"+hashRel+"']:eq("+hashIndex+")").trigger('click');},50);}
|
||||
return this.unbind('click.prettyphoto').bind('click.prettyphoto',$.prettyPhoto.initialize);};function getHashtag(){url=location.href;hashtag=(url.indexOf('#prettyPhoto')!==-1)?decodeURI(url.substring(url.indexOf('#prettyPhoto')+1,url.length)):false;return hashtag;};function setHashtag(){if(typeof theRel=='undefined')return;location.hash=theRel+'/'+rel_index+'/';};function clearHashtag(){if(location.href.indexOf('#prettyPhoto')!==-1)location.hash="prettyPhoto";}
|
||||
function getParam(name,url){name=name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");var regexS="[\\?&]"+name+"=([^&#]*)";var regex=new RegExp(regexS);var results=regex.exec(url);return(results==null)?"":results[1];}})(jQuery);var pp_alreadyInitialized=false;
|
||||
193
js/jquery.timeago.js
Normal file
193
js/jquery.timeago.js
Normal file
@@ -0,0 +1,193 @@
|
||||
/**
|
||||
* Timeago is a jQuery plugin that makes it easy to support automatically
|
||||
* updating fuzzy timestamps (e.g. "4 minutes ago" or "about 1 day ago").
|
||||
*
|
||||
* @name timeago
|
||||
* @version 1.3.0
|
||||
* @requires jQuery v1.2.3+
|
||||
* @author Ryan McGeary
|
||||
* @license MIT License - http://www.opensource.org/licenses/mit-license.php
|
||||
*
|
||||
* For usage and examples, visit:
|
||||
* http://timeago.yarp.com/
|
||||
*
|
||||
* Copyright (c) 2008-2013, Ryan McGeary (ryan -[at]- mcgeary [*dot*] org)
|
||||
*/
|
||||
|
||||
(function (factory) {
|
||||
if (typeof define === 'function' && define.amd) {
|
||||
// AMD. Register as an anonymous module.
|
||||
define(['jquery'], factory);
|
||||
} else {
|
||||
// Browser globals
|
||||
factory(jQuery);
|
||||
}
|
||||
}(function ($) {
|
||||
$.timeago = function(timestamp) {
|
||||
if (timestamp instanceof Date) {
|
||||
return inWords(timestamp);
|
||||
} else if (typeof timestamp === "string") {
|
||||
return inWords($.timeago.parse(timestamp));
|
||||
} else if (typeof timestamp === "number") {
|
||||
return inWords(new Date(timestamp));
|
||||
} else {
|
||||
return inWords($.timeago.datetime(timestamp));
|
||||
}
|
||||
};
|
||||
var $t = $.timeago;
|
||||
|
||||
$.extend($.timeago, {
|
||||
settings: {
|
||||
refreshMillis: 60000,
|
||||
allowFuture: false,
|
||||
localeTitle: false,
|
||||
cutoff: 0,
|
||||
strings: {
|
||||
prefixAgo: null,
|
||||
prefixFromNow: null,
|
||||
suffixAgo: "ago",
|
||||
suffixFromNow: "from now",
|
||||
seconds: "less than a minute",
|
||||
minute: "about a minute",
|
||||
minutes: "%d minutes",
|
||||
hour: "about an hour",
|
||||
hours: "about %d hours",
|
||||
day: "a day",
|
||||
days: "%d days",
|
||||
month: "about a month",
|
||||
months: "%d months",
|
||||
year: "about a year",
|
||||
years: "%d years",
|
||||
wordSeparator: " ",
|
||||
numbers: []
|
||||
}
|
||||
},
|
||||
inWords: function(distanceMillis) {
|
||||
var $l = this.settings.strings;
|
||||
var prefix = $l.prefixAgo;
|
||||
var suffix = $l.suffixAgo;
|
||||
if (this.settings.allowFuture) {
|
||||
if (distanceMillis < 0) {
|
||||
prefix = $l.prefixFromNow;
|
||||
suffix = $l.suffixFromNow;
|
||||
}
|
||||
}
|
||||
|
||||
var seconds = Math.abs(distanceMillis) / 1000;
|
||||
var minutes = seconds / 60;
|
||||
var hours = minutes / 60;
|
||||
var days = hours / 24;
|
||||
var years = days / 365;
|
||||
|
||||
function substitute(stringOrFunction, number) {
|
||||
var string = $.isFunction(stringOrFunction) ? stringOrFunction(number, distanceMillis) : stringOrFunction;
|
||||
var value = ($l.numbers && $l.numbers[number]) || number;
|
||||
return string.replace(/%d/i, value);
|
||||
}
|
||||
|
||||
var words = seconds < 45 && substitute($l.seconds, Math.round(seconds)) ||
|
||||
seconds < 90 && substitute($l.minute, 1) ||
|
||||
minutes < 45 && substitute($l.minutes, Math.round(minutes)) ||
|
||||
minutes < 90 && substitute($l.hour, 1) ||
|
||||
hours < 24 && substitute($l.hours, Math.round(hours)) ||
|
||||
hours < 42 && substitute($l.day, 1) ||
|
||||
days < 30 && substitute($l.days, Math.round(days)) ||
|
||||
days < 45 && substitute($l.month, 1) ||
|
||||
days < 365 && substitute($l.months, Math.round(days / 30)) ||
|
||||
years < 1.5 && substitute($l.year, 1) ||
|
||||
substitute($l.years, Math.round(years));
|
||||
|
||||
var separator = $l.wordSeparator || "";
|
||||
if ($l.wordSeparator === undefined) { separator = " "; }
|
||||
return $.trim([prefix, words, suffix].join(separator));
|
||||
},
|
||||
parse: function(iso8601) {
|
||||
var s = $.trim(iso8601);
|
||||
s = s.replace(/\.\d+/,""); // remove milliseconds
|
||||
s = s.replace(/-/,"/").replace(/-/,"/");
|
||||
s = s.replace(/T/," ").replace(/Z/," UTC");
|
||||
s = s.replace(/([\+\-]\d\d)\:?(\d\d)/," $1$2"); // -04:00 -> -0400
|
||||
return new Date(s);
|
||||
},
|
||||
datetime: function(elem) {
|
||||
var iso8601 = $t.isTime(elem) ? $(elem).attr("datetime") : $(elem).attr("title");
|
||||
return $t.parse(iso8601);
|
||||
},
|
||||
isTime: function(elem) {
|
||||
// jQuery's `is()` doesn't play well with HTML5 in IE
|
||||
return $(elem).get(0).tagName.toLowerCase() === "time"; // $(elem).is("time");
|
||||
}
|
||||
});
|
||||
|
||||
// functions that can be called via $(el).timeago('action')
|
||||
// init is default when no action is given
|
||||
// functions are called with context of a single element
|
||||
var functions = {
|
||||
init: function(){
|
||||
var refresh_el = $.proxy(refresh, this);
|
||||
refresh_el();
|
||||
var $s = $t.settings;
|
||||
if ($s.refreshMillis > 0) {
|
||||
setInterval(refresh_el, $s.refreshMillis);
|
||||
}
|
||||
},
|
||||
update: function(time){
|
||||
$(this).data('timeago', { datetime: $t.parse(time) });
|
||||
refresh.apply(this);
|
||||
},
|
||||
updateFromDOM: function(){
|
||||
$(this).data('timeago', { datetime: $t.parse( $t.isTime(this) ? $(this).attr("datetime") : $(this).attr("title") ) });
|
||||
refresh.apply(this);
|
||||
}
|
||||
};
|
||||
|
||||
$.fn.timeago = function(action, options) {
|
||||
var fn = action ? functions[action] : functions.init;
|
||||
if(!fn){
|
||||
throw new Error("Unknown function name '"+ action +"' for timeago");
|
||||
}
|
||||
// each over objects here and call the requested function
|
||||
this.each(function(){
|
||||
fn.call(this, options);
|
||||
});
|
||||
return this;
|
||||
};
|
||||
|
||||
function refresh() {
|
||||
var data = prepareData(this);
|
||||
var $s = $t.settings;
|
||||
|
||||
if (!isNaN(data.datetime)) {
|
||||
if ( $s.cutoff == 0 || distance(data.datetime) < $s.cutoff) {
|
||||
$(this).text(inWords(data.datetime));
|
||||
}
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
function prepareData(element) {
|
||||
element = $(element);
|
||||
if (!element.data("timeago")) {
|
||||
element.data("timeago", { datetime: $t.datetime(element) });
|
||||
var text = $.trim(element.text());
|
||||
if ($t.settings.localeTitle) {
|
||||
element.attr("title", element.data('timeago').datetime.toLocaleString());
|
||||
} else if (text.length > 0 && !($t.isTime(element) && element.attr("title"))) {
|
||||
element.attr("title", text);
|
||||
}
|
||||
}
|
||||
return element.data("timeago");
|
||||
}
|
||||
|
||||
function inWords(date) {
|
||||
return $t.inWords(distance(date));
|
||||
}
|
||||
|
||||
function distance(date) {
|
||||
return (new Date().getTime() - date.getTime());
|
||||
}
|
||||
|
||||
// fix for IE6 suckage
|
||||
document.createElement("abbr");
|
||||
document.createElement("time");
|
||||
}));
|
||||
51
js/jquery.validate.min.js
vendored
Normal file
51
js/jquery.validate.min.js
vendored
Normal file
@@ -0,0 +1,51 @@
|
||||
/**
|
||||
* jQuery Validation Plugin 1.9.0
|
||||
*
|
||||
* http://bassistance.de/jquery-plugins/jquery-plugin-validation/
|
||||
* http://docs.jquery.com/Plugins/Validation
|
||||
*
|
||||
* Copyright (c) 2006 - 2011 Jörn Zaefferer
|
||||
*
|
||||
* Dual licensed under the MIT and GPL licenses:
|
||||
* http://www.opensource.org/licenses/mit-license.php
|
||||
* http://www.gnu.org/licenses/gpl.html
|
||||
*/
|
||||
(function(c){c.extend(c.fn,{validate:function(a){if(this.length){var b=c.data(this[0],"validator");if(b)return b;this.attr("novalidate","novalidate");b=new c.validator(a,this[0]);c.data(this[0],"validator",b);if(b.settings.onsubmit){a=this.find("input, button");a.filter(".cancel").click(function(){b.cancelSubmit=true});b.settings.submitHandler&&a.filter(":submit").click(function(){b.submitButton=this});this.submit(function(d){function e(){if(b.settings.submitHandler){if(b.submitButton)var f=c("<input type='hidden'/>").attr("name",
|
||||
b.submitButton.name).val(b.submitButton.value).appendTo(b.currentForm);b.settings.submitHandler.call(b,b.currentForm);b.submitButton&&f.remove();return false}return true}b.settings.debug&&d.preventDefault();if(b.cancelSubmit){b.cancelSubmit=false;return e()}if(b.form()){if(b.pendingRequest){b.formSubmitted=true;return false}return e()}else{b.focusInvalid();return false}})}return b}else a&&a.debug&&window.console&&console.warn("nothing selected, can't validate, returning nothing")},valid:function(){if(c(this[0]).is("form"))return this.validate().form();
|
||||
else{var a=true,b=c(this[0].form).validate();this.each(function(){a&=b.element(this)});return a}},removeAttrs:function(a){var b={},d=this;c.each(a.split(/\s/),function(e,f){b[f]=d.attr(f);d.removeAttr(f)});return b},rules:function(a,b){var d=this[0];if(a){var e=c.data(d.form,"validator").settings,f=e.rules,g=c.validator.staticRules(d);switch(a){case "add":c.extend(g,c.validator.normalizeRule(b));f[d.name]=g;if(b.messages)e.messages[d.name]=c.extend(e.messages[d.name],b.messages);break;case "remove":if(!b){delete f[d.name];
|
||||
return g}var h={};c.each(b.split(/\s/),function(j,i){h[i]=g[i];delete g[i]});return h}}d=c.validator.normalizeRules(c.extend({},c.validator.metadataRules(d),c.validator.classRules(d),c.validator.attributeRules(d),c.validator.staticRules(d)),d);if(d.required){e=d.required;delete d.required;d=c.extend({required:e},d)}return d}});c.extend(c.expr[":"],{blank:function(a){return!c.trim(""+a.value)},filled:function(a){return!!c.trim(""+a.value)},unchecked:function(a){return!a.checked}});c.validator=function(a,
|
||||
b){this.settings=c.extend(true,{},c.validator.defaults,a);this.currentForm=b;this.init()};c.validator.format=function(a,b){if(arguments.length==1)return function(){var d=c.makeArray(arguments);d.unshift(a);return c.validator.format.apply(this,d)};if(arguments.length>2&&b.constructor!=Array)b=c.makeArray(arguments).slice(1);if(b.constructor!=Array)b=[b];c.each(b,function(d,e){a=a.replace(RegExp("\\{"+d+"\\}","g"),e)});return a};c.extend(c.validator,{defaults:{messages:{},groups:{},rules:{},errorClass:"error",
|
||||
validClass:"valid",errorElement:"label",focusInvalid:true,errorContainer:c([]),errorLabelContainer:c([]),onsubmit:true,ignore:":hidden",ignoreTitle:false,onfocusin:function(a){this.lastActive=a;if(this.settings.focusCleanup&&!this.blockFocusCleanup){this.settings.unhighlight&&this.settings.unhighlight.call(this,a,this.settings.errorClass,this.settings.validClass);this.addWrapper(this.errorsFor(a)).hide()}},onfocusout:function(a){if(!this.checkable(a)&&(a.name in this.submitted||!this.optional(a)))this.element(a)},
|
||||
onkeyup:function(a){if(a.name in this.submitted||a==this.lastElement)this.element(a)},onclick:function(a){if(a.name in this.submitted)this.element(a);else a.parentNode.name in this.submitted&&this.element(a.parentNode)},highlight:function(a,b,d){a.type==="radio"?this.findByName(a.name).addClass(b).removeClass(d):c(a).addClass(b).removeClass(d)},unhighlight:function(a,b,d){a.type==="radio"?this.findByName(a.name).removeClass(b).addClass(d):c(a).removeClass(b).addClass(d)}},setDefaults:function(a){c.extend(c.validator.defaults,
|
||||
a)},messages:{required:"This field is required.",remote:"Please fix this field.",email:"Please enter a valid email address.",url:"Please enter a valid URL.",date:"Please enter a valid date.",dateISO:"Please enter a valid date (ISO).",number:"Please enter a valid number.",digits:"Please enter only digits.",creditcard:"Please enter a valid credit card number.",equalTo:"Please enter the same value again.",accept:"Please enter a value with a valid extension.",maxlength:c.validator.format("Please enter no more than {0} characters."),
|
||||
minlength:c.validator.format("Please enter at least {0} characters."),rangelength:c.validator.format("Please enter a value between {0} and {1} characters long."),range:c.validator.format("Please enter a value between {0} and {1}."),max:c.validator.format("Please enter a value less than or equal to {0}."),min:c.validator.format("Please enter a value greater than or equal to {0}.")},autoCreateRanges:false,prototype:{init:function(){function a(e){var f=c.data(this[0].form,"validator"),g="on"+e.type.replace(/^validate/,
|
||||
"");f.settings[g]&&f.settings[g].call(f,this[0],e)}this.labelContainer=c(this.settings.errorLabelContainer);this.errorContext=this.labelContainer.length&&this.labelContainer||c(this.currentForm);this.containers=c(this.settings.errorContainer).add(this.settings.errorLabelContainer);this.submitted={};this.valueCache={};this.pendingRequest=0;this.pending={};this.invalid={};this.reset();var b=this.groups={};c.each(this.settings.groups,function(e,f){c.each(f.split(/\s/),function(g,h){b[h]=e})});var d=
|
||||
this.settings.rules;c.each(d,function(e,f){d[e]=c.validator.normalizeRule(f)});c(this.currentForm).validateDelegate("[type='text'], [type='password'], [type='file'], select, textarea, [type='number'], [type='search'] ,[type='tel'], [type='url'], [type='email'], [type='datetime'], [type='date'], [type='month'], [type='week'], [type='time'], [type='datetime-local'], [type='range'], [type='color'] ","focusin focusout keyup",a).validateDelegate("[type='radio'], [type='checkbox'], select, option","click",
|
||||
a);this.settings.invalidHandler&&c(this.currentForm).bind("invalid-form.validate",this.settings.invalidHandler)},form:function(){this.checkForm();c.extend(this.submitted,this.errorMap);this.invalid=c.extend({},this.errorMap);this.valid()||c(this.currentForm).triggerHandler("invalid-form",[this]);this.showErrors();return this.valid()},checkForm:function(){this.prepareForm();for(var a=0,b=this.currentElements=this.elements();b[a];a++)this.check(b[a]);return this.valid()},element:function(a){this.lastElement=
|
||||
a=this.validationTargetFor(this.clean(a));this.prepareElement(a);this.currentElements=c(a);var b=this.check(a);if(b)delete this.invalid[a.name];else this.invalid[a.name]=true;if(!this.numberOfInvalids())this.toHide=this.toHide.add(this.containers);this.showErrors();return b},showErrors:function(a){if(a){c.extend(this.errorMap,a);this.errorList=[];for(var b in a)this.errorList.push({message:a[b],element:this.findByName(b)[0]});this.successList=c.grep(this.successList,function(d){return!(d.name in a)})}this.settings.showErrors?
|
||||
this.settings.showErrors.call(this,this.errorMap,this.errorList):this.defaultShowErrors()},resetForm:function(){c.fn.resetForm&&c(this.currentForm).resetForm();this.submitted={};this.lastElement=null;this.prepareForm();this.hideErrors();this.elements().removeClass(this.settings.errorClass)},numberOfInvalids:function(){return this.objectLength(this.invalid)},objectLength:function(a){var b=0,d;for(d in a)b++;return b},hideErrors:function(){this.addWrapper(this.toHide).hide()},valid:function(){return this.size()==
|
||||
0},size:function(){return this.errorList.length},focusInvalid:function(){if(this.settings.focusInvalid)try{c(this.findLastActive()||this.errorList.length&&this.errorList[0].element||[]).filter(":visible").focus().trigger("focusin")}catch(a){}},findLastActive:function(){var a=this.lastActive;return a&&c.grep(this.errorList,function(b){return b.element.name==a.name}).length==1&&a},elements:function(){var a=this,b={};return c(this.currentForm).find("input, select, textarea").not(":submit, :reset, :image, [disabled]").not(this.settings.ignore).filter(function(){!this.name&&
|
||||
a.settings.debug&&window.console&&console.error("%o has no name assigned",this);if(this.name in b||!a.objectLength(c(this).rules()))return false;return b[this.name]=true})},clean:function(a){return c(a)[0]},errors:function(){return c(this.settings.errorElement+"."+this.settings.errorClass,this.errorContext)},reset:function(){this.successList=[];this.errorList=[];this.errorMap={};this.toShow=c([]);this.toHide=c([]);this.currentElements=c([])},prepareForm:function(){this.reset();this.toHide=this.errors().add(this.containers)},
|
||||
prepareElement:function(a){this.reset();this.toHide=this.errorsFor(a)},check:function(a){a=this.validationTargetFor(this.clean(a));var b=c(a).rules(),d=false,e;for(e in b){var f={method:e,parameters:b[e]};try{var g=c.validator.methods[e].call(this,a.value.replace(/\r/g,""),a,f.parameters);if(g=="dependency-mismatch")d=true;else{d=false;if(g=="pending"){this.toHide=this.toHide.not(this.errorsFor(a));return}if(!g){this.formatAndAdd(a,f);return false}}}catch(h){this.settings.debug&&window.console&&console.log("exception occured when checking element "+
|
||||
a.id+", check the '"+f.method+"' method",h);throw h;}}if(!d){this.objectLength(b)&&this.successList.push(a);return true}},customMetaMessage:function(a,b){if(c.metadata){var d=this.settings.meta?c(a).metadata()[this.settings.meta]:c(a).metadata();return d&&d.messages&&d.messages[b]}},customMessage:function(a,b){var d=this.settings.messages[a];return d&&(d.constructor==String?d:d[b])},findDefined:function(){for(var a=0;a<arguments.length;a++)if(arguments[a]!==undefined)return arguments[a]},defaultMessage:function(a,
|
||||
b){return this.findDefined(this.customMessage(a.name,b),this.customMetaMessage(a,b),!this.settings.ignoreTitle&&a.title||undefined,c.validator.messages[b],"<strong>Warning: No message defined for "+a.name+"</strong>")},formatAndAdd:function(a,b){var d=this.defaultMessage(a,b.method),e=/\$?\{(\d+)\}/g;if(typeof d=="function")d=d.call(this,b.parameters,a);else if(e.test(d))d=jQuery.format(d.replace(e,"{$1}"),b.parameters);this.errorList.push({message:d,element:a});this.errorMap[a.name]=d;this.submitted[a.name]=
|
||||
d},addWrapper:function(a){if(this.settings.wrapper)a=a.add(a.parent(this.settings.wrapper));return a},defaultShowErrors:function(){for(var a=0;this.errorList[a];a++){var b=this.errorList[a];this.settings.highlight&&this.settings.highlight.call(this,b.element,this.settings.errorClass,this.settings.validClass);this.showLabel(b.element,b.message)}if(this.errorList.length)this.toShow=this.toShow.add(this.containers);if(this.settings.success)for(a=0;this.successList[a];a++)this.showLabel(this.successList[a]);
|
||||
if(this.settings.unhighlight){a=0;for(b=this.validElements();b[a];a++)this.settings.unhighlight.call(this,b[a],this.settings.errorClass,this.settings.validClass)}this.toHide=this.toHide.not(this.toShow);this.hideErrors();this.addWrapper(this.toShow).show()},validElements:function(){return this.currentElements.not(this.invalidElements())},invalidElements:function(){return c(this.errorList).map(function(){return this.element})},showLabel:function(a,b){var d=this.errorsFor(a);if(d.length){d.removeClass(this.settings.validClass).addClass(this.settings.errorClass);
|
||||
d.attr("generated")&&d.html(b)}else{d=c("<"+this.settings.errorElement+"/>").attr({"for":this.idOrName(a),generated:true}).addClass(this.settings.errorClass).html(b||"");if(this.settings.wrapper)d=d.hide().show().wrap("<"+this.settings.wrapper+"/>").parent();this.labelContainer.append(d).length||(this.settings.errorPlacement?this.settings.errorPlacement(d,c(a)):d.insertAfter(a))}if(!b&&this.settings.success){d.text("");typeof this.settings.success=="string"?d.addClass(this.settings.success):this.settings.success(d)}this.toShow=
|
||||
this.toShow.add(d)},errorsFor:function(a){var b=this.idOrName(a);return this.errors().filter(function(){return c(this).attr("for")==b})},idOrName:function(a){return this.groups[a.name]||(this.checkable(a)?a.name:a.id||a.name)},validationTargetFor:function(a){if(this.checkable(a))a=this.findByName(a.name).not(this.settings.ignore)[0];return a},checkable:function(a){return/radio|checkbox/i.test(a.type)},findByName:function(a){var b=this.currentForm;return c(document.getElementsByName(a)).map(function(d,
|
||||
e){return e.form==b&&e.name==a&&e||null})},getLength:function(a,b){switch(b.nodeName.toLowerCase()){case "select":return c("option:selected",b).length;case "input":if(this.checkable(b))return this.findByName(b.name).filter(":checked").length}return a.length},depend:function(a,b){return this.dependTypes[typeof a]?this.dependTypes[typeof a](a,b):true},dependTypes:{"boolean":function(a){return a},string:function(a,b){return!!c(a,b.form).length},"function":function(a,b){return a(b)}},optional:function(a){return!c.validator.methods.required.call(this,
|
||||
c.trim(a.value),a)&&"dependency-mismatch"},startRequest:function(a){if(!this.pending[a.name]){this.pendingRequest++;this.pending[a.name]=true}},stopRequest:function(a,b){this.pendingRequest--;if(this.pendingRequest<0)this.pendingRequest=0;delete this.pending[a.name];if(b&&this.pendingRequest==0&&this.formSubmitted&&this.form()){c(this.currentForm).submit();this.formSubmitted=false}else if(!b&&this.pendingRequest==0&&this.formSubmitted){c(this.currentForm).triggerHandler("invalid-form",[this]);this.formSubmitted=
|
||||
false}},previousValue:function(a){return c.data(a,"previousValue")||c.data(a,"previousValue",{old:null,valid:true,message:this.defaultMessage(a,"remote")})}},classRuleSettings:{required:{required:true},email:{email:true},url:{url:true},date:{date:true},dateISO:{dateISO:true},dateDE:{dateDE:true},number:{number:true},numberDE:{numberDE:true},digits:{digits:true},creditcard:{creditcard:true}},addClassRules:function(a,b){a.constructor==String?this.classRuleSettings[a]=b:c.extend(this.classRuleSettings,
|
||||
a)},classRules:function(a){var b={};(a=c(a).attr("class"))&&c.each(a.split(" "),function(){this in c.validator.classRuleSettings&&c.extend(b,c.validator.classRuleSettings[this])});return b},attributeRules:function(a){var b={};a=c(a);for(var d in c.validator.methods){var e;if(e=d==="required"&&typeof c.fn.prop==="function"?a.prop(d):a.attr(d))b[d]=e;else if(a[0].getAttribute("type")===d)b[d]=true}b.maxlength&&/-1|2147483647|524288/.test(b.maxlength)&&delete b.maxlength;return b},metadataRules:function(a){if(!c.metadata)return{};
|
||||
var b=c.data(a.form,"validator").settings.meta;return b?c(a).metadata()[b]:c(a).metadata()},staticRules:function(a){var b={},d=c.data(a.form,"validator");if(d.settings.rules)b=c.validator.normalizeRule(d.settings.rules[a.name])||{};return b},normalizeRules:function(a,b){c.each(a,function(d,e){if(e===false)delete a[d];else if(e.param||e.depends){var f=true;switch(typeof e.depends){case "string":f=!!c(e.depends,b.form).length;break;case "function":f=e.depends.call(b,b)}if(f)a[d]=e.param!==undefined?
|
||||
e.param:true;else delete a[d]}});c.each(a,function(d,e){a[d]=c.isFunction(e)?e(b):e});c.each(["minlength","maxlength","min","max"],function(){if(a[this])a[this]=Number(a[this])});c.each(["rangelength","range"],function(){if(a[this])a[this]=[Number(a[this][0]),Number(a[this][1])]});if(c.validator.autoCreateRanges){if(a.min&&a.max){a.range=[a.min,a.max];delete a.min;delete a.max}if(a.minlength&&a.maxlength){a.rangelength=[a.minlength,a.maxlength];delete a.minlength;delete a.maxlength}}a.messages&&delete a.messages;
|
||||
return a},normalizeRule:function(a){if(typeof a=="string"){var b={};c.each(a.split(/\s/),function(){b[this]=true});a=b}return a},addMethod:function(a,b,d){c.validator.methods[a]=b;c.validator.messages[a]=d!=undefined?d:c.validator.messages[a];b.length<3&&c.validator.addClassRules(a,c.validator.normalizeRule(a))},methods:{required:function(a,b,d){if(!this.depend(d,b))return"dependency-mismatch";switch(b.nodeName.toLowerCase()){case "select":return(a=c(b).val())&&a.length>0;case "input":if(this.checkable(b))return this.getLength(a,
|
||||
b)>0;default:return c.trim(a).length>0}},remote:function(a,b,d){if(this.optional(b))return"dependency-mismatch";var e=this.previousValue(b);this.settings.messages[b.name]||(this.settings.messages[b.name]={});e.originalMessage=this.settings.messages[b.name].remote;this.settings.messages[b.name].remote=e.message;d=typeof d=="string"&&{url:d}||d;if(this.pending[b.name])return"pending";if(e.old===a)return e.valid;e.old=a;var f=this;this.startRequest(b);var g={};g[b.name]=a;c.ajax(c.extend(true,{url:d,
|
||||
mode:"abort",port:"validate"+b.name,dataType:"json",data:g,success:function(h){f.settings.messages[b.name].remote=e.originalMessage;var j=h===true;if(j){var i=f.formSubmitted;f.prepareElement(b);f.formSubmitted=i;f.successList.push(b);f.showErrors()}else{i={};h=h||f.defaultMessage(b,"remote");i[b.name]=e.message=c.isFunction(h)?h(a):h;f.showErrors(i)}e.valid=j;f.stopRequest(b,j)}},d));return"pending"},minlength:function(a,b,d){return this.optional(b)||this.getLength(c.trim(a),b)>=d},maxlength:function(a,
|
||||
b,d){return this.optional(b)||this.getLength(c.trim(a),b)<=d},rangelength:function(a,b,d){a=this.getLength(c.trim(a),b);return this.optional(b)||a>=d[0]&&a<=d[1]},min:function(a,b,d){return this.optional(b)||a>=d},max:function(a,b,d){return this.optional(b)||a<=d},range:function(a,b,d){return this.optional(b)||a>=d[0]&&a<=d[1]},email:function(a,b){return this.optional(b)||/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))$/i.test(a)},
|
||||
url:function(a,b){return this.optional(b)||/^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(a)},
|
||||
date:function(a,b){return this.optional(b)||!/Invalid|NaN/.test(new Date(a))},dateISO:function(a,b){return this.optional(b)||/^\d{4}[\/-]\d{1,2}[\/-]\d{1,2}$/.test(a)},number:function(a,b){return this.optional(b)||/^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$/.test(a)},digits:function(a,b){return this.optional(b)||/^\d+$/.test(a)},creditcard:function(a,b){if(this.optional(b))return"dependency-mismatch";if(/[^0-9 -]+/.test(a))return false;var d=0,e=0,f=false;a=a.replace(/\D/g,"");for(var g=a.length-1;g>=
|
||||
0;g--){e=a.charAt(g);e=parseInt(e,10);if(f)if((e*=2)>9)e-=9;d+=e;f=!f}return d%10==0},accept:function(a,b,d){d=typeof d=="string"?d.replace(/,/g,"|"):"png|jpe?g|gif";return this.optional(b)||a.match(RegExp(".("+d+")$","i"))},equalTo:function(a,b,d){d=c(d).unbind(".validate-equalTo").bind("blur.validate-equalTo",function(){c(b).valid()});return a==d.val()}}});c.format=c.validator.format})(jQuery);
|
||||
(function(c){var a={};if(c.ajaxPrefilter)c.ajaxPrefilter(function(d,e,f){e=d.port;if(d.mode=="abort"){a[e]&&a[e].abort();a[e]=f}});else{var b=c.ajax;c.ajax=function(d){var e=("port"in d?d:c.ajaxSettings).port;if(("mode"in d?d:c.ajaxSettings).mode=="abort"){a[e]&&a[e].abort();return a[e]=b.apply(this,arguments)}return b.apply(this,arguments)}}})(jQuery);
|
||||
(function(c){!jQuery.event.special.focusin&&!jQuery.event.special.focusout&&document.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(e){e=c.event.fix(e);e.type=b;return c.event.handle.call(this,e)}c.event.special[b]={setup:function(){this.addEventListener(a,d,true)},teardown:function(){this.removeEventListener(a,d,true)},handler:function(e){arguments[0]=c.event.fix(e);arguments[0].type=b;return c.event.handle.apply(this,arguments)}}});c.extend(c.fn,{validateDelegate:function(a,
|
||||
b,d){return this.bind(b,function(e){var f=c(e.target);if(f.is(a))return d.apply(f,arguments)})}})})(jQuery);
|
||||
53
js/language/id-ID.js
Normal file
53
js/language/id-ID.js
Normal file
@@ -0,0 +1,53 @@
|
||||
if(!window.calendar_languages) {
|
||||
window.calendar_languages = {};
|
||||
}
|
||||
window.calendar_languages['id-ID'] = {
|
||||
error_noview: 'Calendar: View {0} not found',
|
||||
error_dateformat: 'Calendar: Wrong date format {0}. Should be either "now" or "yyyy-mm-dd"',
|
||||
error_loadurl: 'Calendar: Events load URL is not set',
|
||||
error_where: 'Calendar: Wrong navigation direction {0}. Can be only "next" or "prev" or "today"',
|
||||
|
||||
title_year: 'Tahun {0}',
|
||||
title_month: '{0} {1}',
|
||||
title_week: 'Minggu ke-{0} dari Tahun {1}',
|
||||
title_day: '{0}, {1} {2} {3}',
|
||||
|
||||
week:'Minggu',
|
||||
|
||||
m0: 'Januari',
|
||||
m1: 'Februari',
|
||||
m2: 'Maret',
|
||||
m3: 'April',
|
||||
m4: 'Mei',
|
||||
m5: 'Juni',
|
||||
m6: 'Juli',
|
||||
m7: 'Agustus',
|
||||
m8: 'September',
|
||||
m9: 'Oktober',
|
||||
m10: 'Nopember',
|
||||
m11: 'Desember',
|
||||
|
||||
ms0: 'Jan',
|
||||
ms1: 'Feb',
|
||||
ms2: 'Mar',
|
||||
ms3: 'Apr',
|
||||
ms4: 'Mei',
|
||||
ms5: 'Jun',
|
||||
ms6: 'Jul',
|
||||
ms7: 'Ags',
|
||||
ms8: 'Sep',
|
||||
ms9: 'Okt',
|
||||
ms10: 'Nop',
|
||||
ms11: 'Des',
|
||||
|
||||
d0: 'Minggu',
|
||||
d1: 'Senin',
|
||||
d2: 'Selasa',
|
||||
d3: 'Rabu',
|
||||
d4: 'Kamis',
|
||||
d5: 'Jumat',
|
||||
d6: 'Sabtu',
|
||||
|
||||
easter: 'Easter',
|
||||
easterMonday: 'Easter Monday'
|
||||
};
|
||||
0
js/language/index.html
Normal file
0
js/language/index.html
Normal file
53
js/language/template.js
Normal file
53
js/language/template.js
Normal file
@@ -0,0 +1,53 @@
|
||||
if(!window.calendar_languages) {
|
||||
window.calendar_languages = {};
|
||||
}
|
||||
window.calendar_languages['en-GB'] = {
|
||||
error_noview: 'Calendar: View {0} not found',
|
||||
error_dateformat: 'Calendar: Wrong date format {0}. Should be either "now" or "yyyy-mm-dd"',
|
||||
error_loadurl: 'Calendar: Events load URL is not set',
|
||||
error_where: 'Calendar: Wrong navigation direction {0}. Can be only "next" or "prev" or "today"',
|
||||
|
||||
title_year: 'Year {0}',
|
||||
title_month: '{0} year {1}',
|
||||
title_week: '{0} week of year {1}',
|
||||
title_day: '{0} {1} {2} year {3}',
|
||||
|
||||
week:'Week',
|
||||
|
||||
m0: 'January',
|
||||
m1: 'February',
|
||||
m2: 'March',
|
||||
m3: 'April',
|
||||
m4: 'May',
|
||||
m5: 'June',
|
||||
m6: 'July',
|
||||
m7: 'August',
|
||||
m8: 'September',
|
||||
m9: 'October',
|
||||
m10: 'November',
|
||||
m11: 'December',
|
||||
|
||||
ms0: 'Jan',
|
||||
ms1: 'Feb',
|
||||
ms2: 'Mar',
|
||||
ms3: 'Apr',
|
||||
ms4: 'May',
|
||||
ms5: 'Jun',
|
||||
ms6: 'Jul',
|
||||
ms7: 'Aug',
|
||||
ms8: 'Sep',
|
||||
ms9: 'Oct',
|
||||
ms10: 'Nov',
|
||||
ms11: 'Dec',
|
||||
|
||||
d0: 'Sunday',
|
||||
d1: 'Monday',
|
||||
d2: 'Tuesday',
|
||||
d3: 'Wednesday',
|
||||
d4: 'Thursday',
|
||||
d5: 'Friday',
|
||||
d6: 'Saturday',
|
||||
|
||||
easter: 'Easter',
|
||||
easterMonday: 'Easter Monday'
|
||||
};
|
||||
4
js/modernizr.custom.js
Normal file
4
js/modernizr.custom.js
Normal file
File diff suppressed because one or more lines are too long
3
js/retina.js
Normal file
3
js/retina.js
Normal file
@@ -0,0 +1,3 @@
|
||||
// retina.js, a high-resolution image swapper (http://retinajs.com), v0.0.2
|
||||
|
||||
(function(){function t(e){this.path=e;var t=this.path.split("."),n=t.slice(0,t.length-1).join("."),r=t[t.length-1];this.at_2x_path=n+"@2x."+r}function n(e){this.el=e,this.path=new t(this.el.getAttribute("src"));var n=this;this.path.check_2x_variant(function(e){e&&n.swap()})}var e=typeof exports=="undefined"?window:exports;e.RetinaImagePath=t,t.confirmed_paths=[],t.prototype.is_external=function(){return!!this.path.match(/^https?\:/i)&&!this.path.match("//"+document.domain)},t.prototype.check_2x_variant=function(e){var n,r=this;if(this.is_external())return e(!1);if(this.at_2x_path in t.confirmed_paths)return e(!0);n=new XMLHttpRequest,n.open("HEAD",this.at_2x_path),n.onreadystatechange=function(){return n.readyState!=4?e(!1):n.status>=200&&n.status<=399?(t.confirmed_paths.push(r.at_2x_path),e(!0)):e(!1)},n.send()},e.RetinaImage=n,n.prototype.swap=function(e){function n(){t.el.complete?(t.el.setAttribute("width",t.el.offsetWidth),t.el.setAttribute("height",t.el.offsetHeight),t.el.setAttribute("src",e)):setTimeout(n,5)}typeof e=="undefined"&&(e=this.path.at_2x_path);var t=this;n()},e.devicePixelRatio>1&&(window.onload=function(){var e=document.getElementsByTagName("img"),t=[],r,i;for(r=0;r<e.length;r++)i=e[r],t.push(new n(i))})})();
|
||||
93
js/styleswitch.js
Normal file
93
js/styleswitch.js
Normal file
@@ -0,0 +1,93 @@
|
||||
|
||||
function kopa_theme_option_reset_CLICK(){
|
||||
jQuery('input:radio[name="kopa-select-bg-choice"][value="pattern"]').prop('checked', true);
|
||||
|
||||
kopa_bg_CHANGE('pattern');
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
jQuery(document).ready(function($) {
|
||||
kopa_style_switch_INIT();
|
||||
jQuery('.choose-color a.red').addClass('active');
|
||||
jQuery('input:radio[name="kopa-select-bg-choice"][value="pattern"]').prop('checked', true);
|
||||
});
|
||||
|
||||
function kopa_style_switch_INIT(){
|
||||
|
||||
// Color Change
|
||||
$("a.red" ).click(function(){
|
||||
$("#colors" ).attr("href", "css/colors/defaul.css");
|
||||
return false;
|
||||
});
|
||||
|
||||
$("a.navy" ).click(function(){
|
||||
$("#colors" ).attr("href", "css/colors/navy.css");
|
||||
return false;
|
||||
});
|
||||
|
||||
$("a.blue" ).click(function(){
|
||||
$("#colors" ).attr("href", "css/colors/blue.css");
|
||||
return false;
|
||||
});
|
||||
|
||||
$("a.yellow" ).click(function(){
|
||||
$("#colors" ).attr("href", "css/colors/yellow.css");
|
||||
return false;
|
||||
});
|
||||
|
||||
$("a.coban" ).click(function(){
|
||||
$("#colors" ).attr("href", "css/colors/coban.css");
|
||||
return false;
|
||||
});
|
||||
|
||||
$("a.gray" ).click(function(){
|
||||
$("#colors" ).attr("href", "css/colors/gray.css");
|
||||
return false;
|
||||
});
|
||||
|
||||
$('.choose-color a').click(function(e){
|
||||
e.preventDefault();
|
||||
$(this).parent().parent().find('a').removeClass('active');
|
||||
$(this).addClass('active');
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
// Switcher Layout
|
||||
$('#theme-option').animate({
|
||||
left: '-242px'
|
||||
});
|
||||
|
||||
$('.open-close-button').click(function(e){
|
||||
e.preventDefault();
|
||||
var div = $('#theme-option');
|
||||
if (div.css('left') === '-242px') {
|
||||
$('#theme-option').animate({
|
||||
left: '0px'
|
||||
});
|
||||
} else {
|
||||
$('#theme-option').animate({
|
||||
left: '-242px'
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
// Reset
|
||||
$('a.reset').click(function(e){
|
||||
$('.color.red').trigger('click');
|
||||
jQuery('.theme-opt-wrapper select[name=layout]').val('pattern');
|
||||
layout_CHANGE();
|
||||
});
|
||||
}
|
||||
|
||||
function kopa_bg_CHANGE(val){
|
||||
if('pattern' == val){
|
||||
jQuery('body').removeClass('kopa-home-2');
|
||||
}else{
|
||||
jQuery('body').addClass('kopa-home-2');
|
||||
}
|
||||
}
|
||||
|
||||
253
js/superfish.js
Normal file
253
js/superfish.js
Normal file
@@ -0,0 +1,253 @@
|
||||
/*
|
||||
* Superfish v1.7.2 - jQuery menu widget
|
||||
* Copyright (c) 2013 Joel Birch
|
||||
*
|
||||
* Dual licensed under the MIT and GPL licenses:
|
||||
* http://www.opensource.org/licenses/mit-license.php
|
||||
* http://www.gnu.org/licenses/gpl.html
|
||||
*/
|
||||
|
||||
;(function($) {
|
||||
|
||||
var methods = (function(){
|
||||
// private properties and methods go here
|
||||
var c = {
|
||||
bcClass: 'sf-breadcrumb',
|
||||
menuClass: 'sf-js-enabled',
|
||||
anchorClass: 'sf-with-ul',
|
||||
menuArrowClass: 'sf-arrows'
|
||||
},
|
||||
ios = /iPhone|iPad|iPod/i.test(navigator.userAgent),
|
||||
wp7 = (function() {
|
||||
var style = document.documentElement.style;
|
||||
return ('behavior' in style && 'fill' in style && /iemobile/i.test(navigator.userAgent));
|
||||
})(),
|
||||
fixIos = (function(){
|
||||
if (ios) {
|
||||
// iOS clicks only bubble as far as body children
|
||||
$(window).load(function() {
|
||||
$('body').children().on('click', $.noop);
|
||||
});
|
||||
}
|
||||
})(),
|
||||
toggleMenuClasses = function($menu, o) {
|
||||
var classes = c.menuClass;
|
||||
if (o.cssArrows) {
|
||||
classes += ' ' + c.menuArrowClass;
|
||||
}
|
||||
$menu.toggleClass(classes);
|
||||
},
|
||||
setPathToCurrent = function($menu, o) {
|
||||
return $menu.find('li.' + o.pathClass).slice(0, o.pathLevels)
|
||||
.addClass(o.hoverClass + ' ' + c.bcClass)
|
||||
.filter(function() {
|
||||
return ($(this).children('ul').hide().show().length);
|
||||
}).removeClass(o.pathClass);
|
||||
},
|
||||
toggleAnchorClass = function($li) {
|
||||
$li.children('a').toggleClass(c.anchorClass);
|
||||
},
|
||||
toggleTouchAction = function($menu) {
|
||||
var touchAction = $menu.css('ms-touch-action');
|
||||
touchAction = (touchAction === 'pan-y') ? 'auto' : 'pan-y';
|
||||
$menu.css('ms-touch-action', touchAction);
|
||||
},
|
||||
applyHandlers = function($menu,o) {
|
||||
var targets = 'li:has(ul)';
|
||||
if ($.fn.hoverIntent && !o.disableHI) {
|
||||
$menu.hoverIntent(over, out, targets);
|
||||
}
|
||||
else {
|
||||
$menu
|
||||
.on('mouseenter.superfish', targets, over)
|
||||
.on('mouseleave.superfish', targets, out);
|
||||
}
|
||||
var touchevent = 'MSPointerDown.superfish';
|
||||
if (!ios) {
|
||||
touchevent += ' touchend.superfish';
|
||||
}
|
||||
if (wp7) {
|
||||
touchevent += ' mousedown.superfish';
|
||||
}
|
||||
$menu
|
||||
.on('focusin.superfish', 'li', over)
|
||||
.on('focusout.superfish', 'li', out)
|
||||
.on(touchevent, 'a', touchHandler);
|
||||
},
|
||||
touchHandler = function(e) {
|
||||
var $this = $(this),
|
||||
$ul = $this.siblings('ul');
|
||||
|
||||
if ($ul.length > 0 && $ul.is(':hidden')) {
|
||||
$this.one('click.superfish', false);
|
||||
if (e.type === 'MSPointerDown') {
|
||||
$this.trigger('focus');
|
||||
} else {
|
||||
$.proxy(over, $this.parent('li'))();
|
||||
}
|
||||
}
|
||||
},
|
||||
over = function() {
|
||||
var $this = $(this),
|
||||
o = getOptions($this);
|
||||
clearTimeout(o.sfTimer);
|
||||
$this.siblings().superfish('hide').end().superfish('show');
|
||||
},
|
||||
out = function() {
|
||||
var $this = $(this),
|
||||
o = getOptions($this);
|
||||
if (ios) {
|
||||
$.proxy(close, $this, o)();
|
||||
}
|
||||
else {
|
||||
clearTimeout(o.sfTimer);
|
||||
o.sfTimer = setTimeout($.proxy(close, $this, o), o.delay);
|
||||
}
|
||||
},
|
||||
close = function(o) {
|
||||
o.retainPath = ( $.inArray(this[0], o.$path) > -1);
|
||||
this.superfish('hide');
|
||||
|
||||
if (!this.parents('.' + o.hoverClass).length) {
|
||||
o.onIdle.call(getMenu(this));
|
||||
if (o.$path.length) {
|
||||
$.proxy(over, o.$path)();
|
||||
}
|
||||
}
|
||||
},
|
||||
getMenu = function($el) {
|
||||
return $el.closest('.' + c.menuClass);
|
||||
},
|
||||
getOptions = function($el) {
|
||||
return getMenu($el).data('sf-options');
|
||||
};
|
||||
|
||||
return {
|
||||
// public methods
|
||||
hide: function(instant) {
|
||||
if (this.length) {
|
||||
var $this = this,
|
||||
o = getOptions($this);
|
||||
if (!o) {
|
||||
return this;
|
||||
}
|
||||
var not = (o.retainPath === true) ? o.$path : '',
|
||||
$ul = $this.find('li.' + o.hoverClass).add(this).not(not).removeClass(o.hoverClass).children('ul'),
|
||||
speed = o.speedOut;
|
||||
|
||||
if (instant) {
|
||||
$ul.show();
|
||||
speed = 0;
|
||||
}
|
||||
o.retainPath = false;
|
||||
o.onBeforeHide.call($ul);
|
||||
$ul.stop(true, true).animate(o.animationOut, speed, function() {
|
||||
var $this = $(this);
|
||||
o.onHide.call($this);
|
||||
});
|
||||
}
|
||||
return this;
|
||||
},
|
||||
show: function() {
|
||||
var o = getOptions(this);
|
||||
if (!o) {
|
||||
return this;
|
||||
}
|
||||
var $this = this.addClass(o.hoverClass),
|
||||
$ul = $this.children('ul');
|
||||
|
||||
o.onBeforeShow.call($ul);
|
||||
$ul.stop(true, true).animate(o.animation, o.speed, function() {
|
||||
o.onShow.call($ul);
|
||||
});
|
||||
return this;
|
||||
},
|
||||
destroy: function() {
|
||||
return this.each(function(){
|
||||
var $this = $(this),
|
||||
o = $this.data('sf-options'),
|
||||
$liHasUl = $this.find('li:has(ul)');
|
||||
if (!o) {
|
||||
return false;
|
||||
}
|
||||
clearTimeout(o.sfTimer);
|
||||
toggleMenuClasses($this, o);
|
||||
toggleAnchorClass($liHasUl);
|
||||
toggleTouchAction($this);
|
||||
// remove event handlers
|
||||
$this.off('.superfish').off('.hoverIntent');
|
||||
// clear animation's inline display style
|
||||
$liHasUl.children('ul').attr('style', function(i, style){
|
||||
return style.replace(/display[^;]+;?/g, '');
|
||||
});
|
||||
// reset 'current' path classes
|
||||
o.$path.removeClass(o.hoverClass + ' ' + c.bcClass).addClass(o.pathClass);
|
||||
$this.find('.' + o.hoverClass).removeClass(o.hoverClass);
|
||||
o.onDestroy.call($this);
|
||||
$this.removeData('sf-options');
|
||||
});
|
||||
},
|
||||
init: function(op){
|
||||
return this.each(function() {
|
||||
var $this = $(this);
|
||||
if ($this.data('sf-options')) {
|
||||
return false;
|
||||
}
|
||||
var o = $.extend({}, $.fn.superfish.defaults, op),
|
||||
$liHasUl = $this.find('li:has(ul)');
|
||||
o.$path = setPathToCurrent($this, o);
|
||||
|
||||
$this.data('sf-options', o);
|
||||
|
||||
toggleMenuClasses($this, o);
|
||||
toggleAnchorClass($liHasUl);
|
||||
toggleTouchAction($this);
|
||||
applyHandlers($this, o);
|
||||
|
||||
$liHasUl.not('.' + c.bcClass).superfish('hide',true);
|
||||
|
||||
o.onInit.call(this);
|
||||
});
|
||||
}
|
||||
};
|
||||
})();
|
||||
|
||||
$.fn.superfish = function(method, args) {
|
||||
if (methods[method]) {
|
||||
return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
|
||||
}
|
||||
else if (typeof method === 'object' || ! method) {
|
||||
return methods.init.apply(this, arguments);
|
||||
}
|
||||
else {
|
||||
return $.error('Method ' + method + ' does not exist on jQuery.fn.superfish');
|
||||
}
|
||||
};
|
||||
|
||||
$.fn.superfish.defaults = {
|
||||
hoverClass: 'sfHover',
|
||||
pathClass: 'overrideThisToUse',
|
||||
pathLevels: 1,
|
||||
delay: 800,
|
||||
animation: {opacity:'show'},
|
||||
animationOut: {opacity:'hide'},
|
||||
speed: 'normal',
|
||||
speedOut: 'fast',
|
||||
cssArrows: true,
|
||||
disableHI: false,
|
||||
onInit: $.noop,
|
||||
onBeforeShow: $.noop,
|
||||
onShow: $.noop,
|
||||
onBeforeHide: $.noop,
|
||||
onHide: $.noop,
|
||||
onIdle: $.noop,
|
||||
onDestroy: $.noop
|
||||
};
|
||||
|
||||
// soon to be deprecated
|
||||
$.fn.extend({
|
||||
hideSuperfishUl: methods.hide,
|
||||
showSuperfishUl: methods.show
|
||||
});
|
||||
|
||||
})(jQuery);
|
||||
114
js/tweetable.jquery.js
Normal file
114
js/tweetable.jquery.js
Normal file
@@ -0,0 +1,114 @@
|
||||
/*
|
||||
* tweetable 1.7.1 - jQuery twitter feed plugin
|
||||
*
|
||||
* Copyright (c) 2009 Philip Beel (http://www.theodin.co.uk/)
|
||||
* Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
|
||||
* and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
|
||||
*
|
||||
* With modifications from Philipp Robbel (http://www.robbel.com/) & Patrick DW (stackoverflow)
|
||||
*
|
||||
* Revision: $Id: jquery.tweetable.js 2013-06-16 $
|
||||
*
|
||||
*/
|
||||
(function($) {
|
||||
|
||||
jQuery.fn.tweetable = function (opts) {
|
||||
opts = $.extend({}, $.fn.tweetable.options, opts);
|
||||
|
||||
return this.each(function () {
|
||||
|
||||
var act = jQuery(this)
|
||||
, tweetList = jQuery('<ul class="tweetList">')[opts.position.toLowerCase() + 'To'](act)
|
||||
, shortMonths = ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]
|
||||
, api = "http://api.getmytweets.co.uk/?screenname="
|
||||
, limitcount = "&limit="
|
||||
, twitterError
|
||||
, tweetMonth
|
||||
, tweetMonthInt
|
||||
, iterate
|
||||
, element;
|
||||
|
||||
// Fire JSON request to twitter API
|
||||
jQuery.getJSON(api + opts.username + limitcount + opts.limit, act, function (data) {
|
||||
|
||||
// Check for response error
|
||||
twitterError = data && data.error || null;
|
||||
|
||||
if(twitterError)
|
||||
{
|
||||
tweetList.append('<li class="tweet_content item"><p class="tweet_link">'+ opts.failed +'</p></li>');
|
||||
return;
|
||||
}
|
||||
|
||||
// Loop through twitter API response
|
||||
jQuery.each(data.tweets, function (i, tweet) {
|
||||
|
||||
// Output tweets if less than limit
|
||||
if(i >= opts.limit)
|
||||
return;
|
||||
|
||||
tweetList.append('<li class="tweet_content_' + i + '"><p class="tweet_link_' + i + '">' + tweet.response.replace(/#(.*?)(\s|$)/g, '<span class="hash">#$1 </span>').replace(/(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig, '<a href="$&">$&</a> ').replace(/@(.*?)(\s|\(|\)|$)/g, '<a href="http://twitter.com/$1">@$1 </a>$2').replace(/:">/, ' ">').replace(/: <\/a>/, '</a>:') + '</p></li>');
|
||||
|
||||
// Display the time of tweet if required
|
||||
if (opts.time === true) {
|
||||
for(iterate=0; iterate<=12; iterate++) {
|
||||
if(shortMonths[iterate] === tweet.tweet_date.substr(4, 3)) {
|
||||
tweetMonthInt = iterate + 1;
|
||||
tweetMonth = (tweetMonthInt < 10) ? '0' + tweetMonthInt : tweetMonthInt ;
|
||||
}
|
||||
}
|
||||
// Create ISO 8601 formatted date
|
||||
var iso8601 = tweet.tweet_date.substr(26,4) + '-' + tweetMonth + '-' + tweet.tweet_date.substr(8, 2) + 'T' + tweet.tweet_date.substr(11,8) + 'Z';
|
||||
jQuery('.tweet_link_' + i).append('<p class="timestamp"><'
|
||||
+ ((opts.html5) ? 'time datetime="' + iso8601 + '"' : 'small')
|
||||
+ '> ' + tweet.tweet_date.substr(8, 2) + '/' + tweetMonth + '/' + tweet.tweet_date.substr(26,4) + ', ' + tweet.tweet_date.substr(11,5) + '</'
|
||||
+ ((opts.html5) ? 'time' : 'small') +
|
||||
'></p>');
|
||||
}
|
||||
});
|
||||
|
||||
// Display one tweet and retweet
|
||||
if ( opts.rotate === true ) {
|
||||
|
||||
var listItem = tweetList.find('li')
|
||||
, listLength = listItem.length || null
|
||||
, current = 0
|
||||
, timeout = opts.speed;
|
||||
|
||||
if(!listLength)
|
||||
return
|
||||
|
||||
// Rotate the tweets one at a time
|
||||
function rotateTweets() {
|
||||
listItem.eq(current++).fadeOut(400, function(){
|
||||
current = (current === listLength) ? 0 : current;
|
||||
listItem.eq(current).fadeIn(400);
|
||||
});
|
||||
}
|
||||
//Hide all but the first tweet
|
||||
listItem.slice(1).hide();
|
||||
|
||||
//Rotate tweets at specified interval
|
||||
setInterval(rotateTweets, timeout);
|
||||
}
|
||||
opts.onComplete(tweetList);
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
// Define plugin defaults
|
||||
$.fn.tweetable.options = {
|
||||
limit: 5, // Number of tweets to show
|
||||
username: 'philipbeel', // @username tweets to display
|
||||
time: false, // Display date
|
||||
rotate: false, // Rotate tweets
|
||||
speed: 5000, // Speed of rotation
|
||||
replies: false, // Filter out @replys
|
||||
position: 'append', // Append position
|
||||
failed: "No tweets available", // Twitter stream unavailable text
|
||||
html5: false, // HTML5 Support
|
||||
retweets: false, // Show retweets
|
||||
onComplete: function($ul) {} // On complete callback
|
||||
};
|
||||
|
||||
})(jQuery);
|
||||
17
js/tweetable.jquery.min.js
vendored
Normal file
17
js/tweetable.jquery.min.js
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
/*
|
||||
* tweetable 1.7.1 - jQuery twitter feed plugin
|
||||
*
|
||||
* Copyright (c) 2009 Philip Beel (http://www.theodin.co.uk/)
|
||||
* Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
|
||||
* and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
|
||||
*
|
||||
* With modifications from Philipp Robbel (http://www.robbel.com/) & Patrick DW (stackoverflow)
|
||||
*
|
||||
* Revision: $Id: jquery.tweetable.js 2013-06-16 $
|
||||
*
|
||||
*/
|
||||
(function($){jQuery.fn.tweetable=function(opts){opts=$.extend({},$.fn.tweetable.options,opts);return this.each(function(){var act=jQuery(this),tweetList=jQuery('<ul class="tweetList">')[opts.position.toLowerCase()+"To"](act),shortMonths=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],api="http://api.getmytweets.co.uk/?screenname=",limitcount="&limit=",twitterError,tweetMonth,tweetMonthInt,iterate,element;jQuery.getJSON(api+opts.username+limitcount+opts.limit,act,function(data){twitterError=
|
||||
data&&data.error||null;if(twitterError){tweetList.append('<li class="tweet_content item"><p class="tweet_link">'+opts.failed+"</p></li>");return}jQuery.each(data.tweets,function(i,tweet){if(i>=opts.limit)return;tweetList.append('<li class="tweet_content_'+i+'"><p class="tweet_link_'+i+'">'+tweet.response.replace(/#(.*?)(\s|$)/g,'<span class="hash">#$1 </span>').replace(/(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig,'<a href="$&">$&</a> ').replace(/@(.*?)(\s|\(|\)|$)/g,
|
||||
'<a href="http://twitter.com/$1">@$1 </a>$2').replace(/:">/, ' ">').replace(/: <\/a>/, '</a>:')+"</p></li>");if(opts.time===true){for(iterate=0;iterate<=12;iterate++)if(shortMonths[iterate]===tweet.tweet_date.substr(4,3)){tweetMonthInt=iterate+1;tweetMonth=tweetMonthInt<10?"0"+tweetMonthInt:tweetMonthInt}var iso8601=tweet.tweet_date.substr(26,4)+"-"+tweetMonth+"-"+tweet.tweet_date.substr(8,2)+"T"+tweet.tweet_date.substr(11,8)+"Z";jQuery(".tweet_link_"+i).append('<p class="timestamp"><'+(opts.html5?'time datetime="'+iso8601+'"':"small")+"> "+tweet.tweet_date.substr(8,
|
||||
2)+"/"+tweetMonth+"/"+tweet.tweet_date.substr(26,4)+", "+tweet.tweet_date.substr(11,5)+"</"+(opts.html5?"time":"small")+"></p>")}});if(opts.rotate===true){var listItem=tweetList.find("li"),listLength=listItem.length||null,current=0,timeout=opts.speed;if(!listLength)return;function rotateTweets(){listItem.eq(current++).fadeOut(400,function(){current=current===listLength?0:current;listItem.eq(current).fadeIn(400)})}listItem.slice(1).hide();setInterval(rotateTweets,timeout)}opts.onComplete(tweetList)})})};
|
||||
$.fn.tweetable.options={limit:5,username:"philipbeel",time:false,rotate:false,speed:5E3,replies:false,position:"append",failed:"No tweets available",html5:false,retweets:false,onComplete:function($ul){}}})(jQuery);
|
||||
135
js/uisearch.js
Normal file
135
js/uisearch.js
Normal file
@@ -0,0 +1,135 @@
|
||||
/**
|
||||
* uisearch.js v1.0.0
|
||||
* http://www.codrops.com
|
||||
*
|
||||
* Licensed under the MIT license.
|
||||
* http://www.opensource.org/licenses/mit-license.php
|
||||
*
|
||||
* Copyright 2013, Codrops
|
||||
* http://www.codrops.com
|
||||
*/
|
||||
;( function( window ) {
|
||||
|
||||
'use strict';
|
||||
|
||||
// EventListener | @jon_neal | //github.com/jonathantneal/EventListener
|
||||
!window.addEventListener && window.Element && (function () {
|
||||
function addToPrototype(name, method) {
|
||||
Window.prototype[name] = HTMLDocument.prototype[name] = Element.prototype[name] = method;
|
||||
}
|
||||
|
||||
var registry = [];
|
||||
|
||||
addToPrototype("addEventListener", function (type, listener) {
|
||||
var target = this;
|
||||
|
||||
registry.unshift({
|
||||
__listener: function (event) {
|
||||
event.currentTarget = target;
|
||||
event.pageX = event.clientX + document.documentElement.scrollLeft;
|
||||
event.pageY = event.clientY + document.documentElement.scrollTop;
|
||||
event.preventDefault = function () { event.returnValue = false };
|
||||
event.relatedTarget = event.fromElement || null;
|
||||
event.stopPropagation = function () { event.cancelBubble = true };
|
||||
event.relatedTarget = event.fromElement || null;
|
||||
event.target = event.srcElement || target;
|
||||
event.timeStamp = +new Date;
|
||||
|
||||
listener.call(target, event);
|
||||
},
|
||||
listener: listener,
|
||||
target: target,
|
||||
type: type
|
||||
});
|
||||
|
||||
this.attachEvent("on" + type, registry[0].__listener);
|
||||
});
|
||||
|
||||
addToPrototype("removeEventListener", function (type, listener) {
|
||||
for (var index = 0, length = registry.length; index < length; ++index) {
|
||||
if (registry[index].target == this && registry[index].type == type && registry[index].listener == listener) {
|
||||
return this.detachEvent("on" + type, registry.splice(index, 1)[0].__listener);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
addToPrototype("dispatchEvent", function (eventObject) {
|
||||
try {
|
||||
return this.fireEvent("on" + eventObject.type, eventObject);
|
||||
} catch (error) {
|
||||
for (var index = 0, length = registry.length; index < length; ++index) {
|
||||
if (registry[index].target == this && registry[index].type == eventObject.type) {
|
||||
registry[index].call(this, eventObject);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
})();
|
||||
|
||||
// http://stackoverflow.com/a/11381730/989439
|
||||
function mobilecheck() {
|
||||
var check = false;
|
||||
(function(a){if(/(android|ipad|playbook|silk|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0,4)))check = true})(navigator.userAgent||navigator.vendor||window.opera);
|
||||
return check;
|
||||
}
|
||||
|
||||
// http://www.jonathantneal.com/blog/polyfills-and-prototypes/
|
||||
!String.prototype.trim && (String.prototype.trim = function() {
|
||||
return this.replace(/^\s+|\s+$/g, '');
|
||||
});
|
||||
|
||||
function UISearch( el, options ) {
|
||||
this.el = el;
|
||||
this.inputEl = el.querySelector( 'form > input.sb-search-input' );
|
||||
this._initEvents();
|
||||
}
|
||||
|
||||
UISearch.prototype = {
|
||||
_initEvents : function() {
|
||||
var self = this,
|
||||
initSearchFn = function( ev ) {
|
||||
ev.stopPropagation();
|
||||
// trim its value
|
||||
self.inputEl.value = self.inputEl.value.trim();
|
||||
|
||||
if( !classie.has( self.el, 'sb-search-open' ) ) { // open it
|
||||
ev.preventDefault();
|
||||
self.open();
|
||||
}
|
||||
else if( classie.has( self.el, 'sb-search-open' ) && /^\s*$/.test( self.inputEl.value ) ) { // close it
|
||||
ev.preventDefault();
|
||||
self.close();
|
||||
}
|
||||
}
|
||||
|
||||
this.el.addEventListener( 'click', initSearchFn );
|
||||
this.el.addEventListener( 'touchstart', initSearchFn );
|
||||
this.inputEl.addEventListener( 'click', function( ev ) { ev.stopPropagation(); });
|
||||
this.inputEl.addEventListener( 'touchstart', function( ev ) { ev.stopPropagation(); } );
|
||||
},
|
||||
open : function() {
|
||||
var self = this;
|
||||
classie.add( this.el, 'sb-search-open' );
|
||||
// focus the input
|
||||
if( !mobilecheck() ) {
|
||||
this.inputEl.focus();
|
||||
}
|
||||
// close the search input if body is clicked
|
||||
var bodyFn = function( ev ) {
|
||||
self.close();
|
||||
this.removeEventListener( 'click', bodyFn );
|
||||
this.removeEventListener( 'touchstart', bodyFn );
|
||||
};
|
||||
document.addEventListener( 'click', bodyFn );
|
||||
document.addEventListener( 'touchstart', bodyFn );
|
||||
},
|
||||
close : function() {
|
||||
this.inputEl.blur();
|
||||
classie.remove( this.el, 'sb-search-open' );
|
||||
}
|
||||
}
|
||||
|
||||
// add to global namespace
|
||||
window.UISearch = UISearch;
|
||||
|
||||
} )( window );
|
||||
1
js/underscore-min.js
vendored
Normal file
1
js/underscore-min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user