main.js 66 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538
  1. /*
  2. * jQuery Cookie Plugin v1.4.1
  3. * https://github.com/carhartl/jquery-cookie
  4. */(function(c){c(jQuery)})(function(c){function n(a){a=e.json?JSON.stringify(a):String(a);return e.raw?a:encodeURIComponent(a)}function m(a,d){if(e.raw)var b=a;else a:{0===a.indexOf('"')&&(a=a.slice(1,-1).replace(/\\"/g,'"').replace(/\\\\/g,"\\"));try{a=decodeURIComponent(a.replace(l," "));b=e.json?JSON.parse(a):a;break a}catch(h){}b=void 0}return c.isFunction(d)?d(b):b}var l=/\+/g,e=c.cookie=function(a,d,b){if(void 0!==d&&!c.isFunction(d)){b=c.extend({},e.defaults,b);if("number"===typeof b.expires){var h= b.expires,g=b.expires=new Date;g.setTime(+g+864E5*h)}return document.cookie=[e.raw?a:encodeURIComponent(a),"=",n(d),b.expires?"; expires="+b.expires.toUTCString():"",b.path?"; path="+b.path:"",b.domain?"; domain="+b.domain:"",b.secure?"; secure":""].join("")}b=a?void 0:{};h=document.cookie?document.cookie.split("; "):[];g=0;for(var l=h.length;g<l;g++){var f=h[g].split("=");var k=f.shift();k=e.raw?k:decodeURIComponent(k);f=f.join("=");if(a&&a===k){b=m(f,d);break}a||void 0===(f=m(f))||(b[k]=f)}return b};e.defaults={};c.removeCookie=function(a,d){if(void 0===c.cookie(a))return!1;c.cookie(a,"",c.extend({},d,{expires:-1}));return!c.cookie(a)}});
  5. /*seajs*/!function(a,b){function c(a){return function(b){return{}.toString.call(b)=="[object "+a+"]"}}function d(){return B++}function e(a){return a.match(E)[0]}function f(a){for(a=a.replace(F,"/");a.match(G);)a=a.replace(G,"/");return a=a.replace(H,"$1/")}function g(a){var b=a.length-1,c=a.charAt(b);return"#"===c?a.substring(0,b):".js"===a.substring(b-2)||a.indexOf("?")>0||".css"===a.substring(b-3)||"/"===c?a:a+".js"}function h(a){var b=v.alias;return b&&x(b[a])?b[a]:a}function i(a){var b=v.paths,c;return b&&(c=a.match(I))&&x(b[c[1]])&&(a=b[c[1]]+c[2]),a}function j(a){var b=v.vars;return b&&a.indexOf("{")>-1&&(a=a.replace(J,function(a,c){return x(b[c])?b[c]:a})),a}function k(a){var b=v.map,c=a;if(b)for(var d=0,e=b.length;e>d;d++){var f=b[d];if(c=z(f)?f(a)||a:a.replace(f[0],f[1]),c!==a)break}return c}function l(a,b){var c,d=a.charAt(0);if(K.test(a))c=a;else if("."===d)c=f((b?e(b):v.cwd)+a);else if("/"===d){var g=v.cwd.match(L);c=g?g[0]+a.substring(1):a}else c=v.base+a;return 0===c.indexOf("//")&&(c=location.protocol+c),c}function m(a,b){if(!a)return"";a=h(a),a=i(a),a=j(a),a=g(a);var c=l(a,b);return c=k(c)}function n(a){return a.hasAttribute?a.src:a.getAttribute("src",4)}function o(a,b,c,d){var e=T.test(a),f=M.createElement(e?"link":"script");c&&(f.charset=c),A(d)||f.setAttribute("crossorigin",d),p(f,b,e,a),e?(f.rel="stylesheet",f.href=a):(f.async=!0,f.src=a),U=f,S?R.insertBefore(f,S):R.appendChild(f),U=null}function p(a,c,d,e){function f(){a.onload=a.onerror=a.onreadystatechange=null,d||v.debug||R.removeChild(a),a=null,c()}var g="onload"in a;return!d||!W&&g?(g?(a.onload=f,a.onerror=function(){D("error",{uri:e,node:a}),f()}):a.onreadystatechange=function(){/loaded|complete/.test(a.readyState)&&f()},b):(setTimeout(function(){q(a,c)},1),b)}function q(a,b){var c=a.sheet,d;if(W)c&&(d=!0);else if(c)try{c.cssRules&&(d=!0)}catch(e){"NS_ERROR_DOM_SECURITY_ERR"===e.name&&(d=!0)}setTimeout(function(){d?b():q(a,b)},20)}function r(){if(U)return U;if(V&&"interactive"===V.readyState)return V;for(var a=R.getElementsByTagName("script"),b=a.length-1;b>=0;b--){var c=a[b];if("interactive"===c.readyState)return V=c}}function s(a){var b=[];return a.replace(Y,"").replace(X,function(a,c,d){d&&b.push(d)}),b}function t(a,b){this.uri=a,this.dependencies=b||[],this.exports=null,this.status=0,this._waitings={},this._remain=0}if(!a.seajs){var u=a.seajs={version:"2.2.3"},v=u.data={},w=c("Object"),x=c("String"),y=Array.isArray||c("Array"),z=c("Function"),A=c("Undefined"),B=0,C=v.events={};u.on=function(a,b){var c=C[a]||(C[a]=[]);return c.push(b),u},u.off=function(a,b){if(!a&&!b)return C=v.events={},u;var c=C[a];if(c)if(b)for(var d=c.length-1;d>=0;d--)c[d]===b&&c.splice(d,1);else delete C[a];return u};var D=u.emit=function(a,b){var c=C[a],d;if(c)for(c=c.slice();d=c.shift();)d(b);return u},E=/[^?#]*\//,F=/\/\.\//g,G=/\/[^/]+\/\.\.\//,H=/([^:/])\/\//g,I=/^([^/:]+)(\/.+)$/,J=/{([^{]+)}/g,K=/^\/\/.|:\//,L=/^.*?\/\/.*?\//,M=document,N=e(M.URL),O=M.scripts,P=M.getElementById("seajsnode")||O[O.length-1],Q=e(n(P)||N);u.resolve=m;var R=M.head||M.getElementsByTagName("head")[0]||M.documentElement,S=R.getElementsByTagName("base")[0],T=/\.css(?:\?|$)/i,U,V,W=+navigator.userAgent.replace(/.*(?:AppleWebKit|AndroidWebKit)\/(\d+).*/,"$1")<536;u.request=o;var X=/"(?:\\"|[^"])*"|'(?:\\'|[^'])*'|\/\*[\S\s]*?\*\/|\/(?:\\\/|[^\/\r\n])+\/(?=[^\/])|\/\/.*|\.\s*require|(?:^|[^$])\brequire\s*\(\s*(["'])(.+?)\1\s*\)/g,Y=/\\\\/g,Z=u.cache={},$,_={},ab={},bb={},cb=t.STATUS={FETCHING:1,SAVED:2,LOADING:3,LOADED:4,EXECUTING:5,EXECUTED:6};t.prototype.resolve=function(){for(var a=this,b=a.dependencies,c=[],d=0,e=b.length;e>d;d++)c[d]=t.resolve(b[d],a.uri);return c},t.prototype.load=function(){var a=this;if(!(a.status>=cb.LOADING)){a.status=cb.LOADING;var c=a.resolve();D("load",c);for(var d=a._remain=c.length,e,f=0;d>f;f++)e=t.get(c[f]),e.status<cb.LOADED?e._waitings[a.uri]=(e._waitings[a.uri]||0)+1:a._remain--;if(0===a._remain)return a.onload(),b;var g={};for(f=0;d>f;f++)e=Z[c[f]],e.status<cb.FETCHING?e.fetch(g):e.status===cb.SAVED&&e.load();for(var h in g)g.hasOwnProperty(h)&&g[h]()}},t.prototype.onload=function(){var a=this;a.status=cb.LOADED,a.callback&&a.callback();var b=a._waitings,c,d;for(c in b)b.hasOwnProperty(c)&&(d=Z[c],d._remain-=b[c],0===d._remain&&d.onload());delete a._waitings,delete a._remain},t.prototype.fetch=function(a){function c(){u.request(g.requestUri,g.onRequest,g.charset,g.crossorigin)}function d(){delete _[h],ab[h]=!0,$&&(t.save(f,$),$=null);var a,b=bb[h];for(delete bb[h];a=b.shift();)a.load()}var e=this,f=e.uri;e.status=cb.FETCHING;var g={uri:f};D("fetch",g);var h=g.requestUri||f;return!h||ab[h]?(e.load(),b):_[h]?(bb[h].push(e),b):(_[h]=!0,bb[h]=[e],D("request",g={uri:f,requestUri:h,onRequest:d,charset:z(v.charset)?v.charset(h):v.charset,crossorigin:z(v.crossorigin)?v.crossorigin(h):v.crossorigin}),g.requested||(a?a[g.requestUri]=c:c()),b)},t.prototype.exec=function(){function a(b){return t.get(a.resolve(b)).exec()}var c=this;if(c.status>=cb.EXECUTING)return c.exports;c.status=cb.EXECUTING;var e=c.uri;a.resolve=function(a){return t.resolve(a,e)},a.async=function(b,c){return t.use(b,c,e+"_async_"+d()),a};var f=c.factory,g=z(f)?f(a,c.exports={},c):f;return g===b&&(g=c.exports),delete c.factory,c.exports=g,c.status=cb.EXECUTED,D("exec",c),g},t.resolve=function(a,b){var c={id:a,refUri:b};return D("resolve",c),c.uri||u.resolve(c.id,b)},t.define=function(a,c,d){var e=arguments.length;1===e?(d=a,a=b):2===e&&(d=c,y(a)?(c=a,a=b):c=b),!y(c)&&z(d)&&(c=s(""+d));var f={id:a,uri:t.resolve(a),deps:c,factory:d};if(!f.uri&&M.attachEvent){var g=r();g&&(f.uri=g.src)}D("define",f),f.uri?t.save(f.uri,f):$=f},t.save=function(a,b){var c=t.get(a);c.status<cb.SAVED&&(c.id=b.id||a,c.dependencies=b.deps||[],c.factory=b.factory,c.status=cb.SAVED)},t.get=function(a,b){return Z[a]||(Z[a]=new t(a,b))},t.use=function(b,c,d){var e=t.get(d,y(b)?b:[b]);e.callback=function(){for(var b=[],d=e.resolve(),f=0,g=d.length;g>f;f++)b[f]=Z[d[f]].exec();c&&c.apply(a,b),delete e.callback},e.load()},t.preload=function(a){var b=v.preload,c=b.length;c?t.use(b,function(){b.splice(0,c),t.preload(a)},v.cwd+"_preload_"+d()):a()},u.use=function(a,b){return t.preload(function(){t.use(a,b,v.cwd+"_use_"+d())}),u},t.define.cmd={},a.define=t.define,u.Module=t,v.fetchedList=ab,v.cid=d,u.require=function(a){var b=t.get(t.resolve(a));return b.status<cb.EXECUTING&&(b.onload(),b.exec()),b.exports};var db=/^(.+?\/)(\?\?)?(seajs\/)+/;v.base=(Q.match(db)||["",Q])[1],v.dir=Q,v.cwd=N,v.charset="utf-8",v.preload=function(){var a=[],b=location.search.replace(/(seajs-\w+)(&|$)/g,"$1=1$2");return b+=" "+M.cookie,b.replace(/(seajs-\w+)=1/g,function(b,c){a.push(c)}),a}(),u.config=function(a){for(var b in a){var c=a[b],d=v[b];if(d&&w(d))for(var e in c)d[e]=c[e];else y(d)?c=d.concat(c):"base"===b&&("/"!==c.slice(-1)&&(c+="/"),c=l(c)),v[b]=c}return D("config",a),u}}}(this);
  6. window.require = window.define = window.exports = window.module = undefined;
  7. /*NProgress*/eval(function(p,a,c,k,e,r){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('(4(k,l){"4"===G V&&V.1Z?V(l):"21"===G 1z?2c.1z=l():k.2f=l()})(x,4(){4 k(a,b,d){7 a<b?b:a>d?d:a}4 l(a,b,d){a="Q"===e.B?{W:"Q("+D*(-1+a)+"%,0,0)"}:"Y"===e.B?{W:"Y("+D*(-1+a)+"%,0)"}:{"1u-2b":D*(-1+a)+"%"};a.P="U "+b+"A "+d;7 a}4 q(a,b){7 0<=("2a"==G a?a:n(a)).24(" "+b+" ")}4 r(a,b){6 d=n(a),c=d+b;q(d,b)||(a.10=c.1o(1))}4 t(a,b){6 c=n(a);q(a,b)&&(b=c.H(" "+b+" "," "),a.10=b.1o(1,b.J-1))}4 n(a){7(" "+(a.10||"")+" ").H(/\\s+/1C," ")}6 c={1W:"0.2.0"},e=c.1V={1b:.1U,1e:"1Q",B:"",1g:1P,N:!0,1n:.1O,1p:1N,1t:!0,16:\'[S="11"]\',1B:\'[S="T"]\',C:"I",19:\'<i K="11" S="11"><i K="1M"></i></i><i K="T" S="T"><i K="T-1L"></i></i>\'};c.1H=4(a){6 b;X(b 9 a){6 c=a[b];1h 0!==c&&a.1i(b)&&(e[b]=c)}7 x};c.j=1k;c.E=4(a){6 b=c.1m();a=k(a,e.1b,1);c.j=1===a?1k:a;6 d=c.1l(!b),p=d.F(e.16),h=e.1g,v=e.1e;d.1r;w(4(b){""===e.B&&(e.B=c.1s());m(p,l(a,h,v));1===a?(m(d,{P:"1D",1v:1}),d.1r,R(4(){m(d,{P:"U "+h+"A 1w",1v:0});R(4(){c.1x();b()},h)},h)):R(b,h)});7 x};c.1m=4(){7"1y"===G c.j};c.14=4(){c.j||c.E(0);6 a=4(){R(4(){c.j&&(c.N(),a())},e.1p)};e.N&&a();7 x};c.1A=4(a){7 a||c.j?c.15(.3+.5*13.12()).E(1):x};c.15=4(a){6 b=c.j;7 b?("1y"!==G a&&(a=(1-b)*k(13.12()*b,.1,.1E)),b=k(b+a,0,.1F),c.E(b)):c.14()};c.N=4(){7 c.15(13.12()*e.1n)};(4(){6 a=0,b=0;c.1G=4(d){y(!d||"1I"===d.1J())7 x;0===b&&c.14();a++;b++;d.1K(4(){b--;0===b?(a=0,c.1A()):c.E((a-b)/a)});7 x}})();c.1l=4(a){y(c.1d())7 8.Z("o");r(8.1j,"o-1f");6 b=8.1R("i");b.1S="o";b.1T=e.19;6 d=b.F(e.16),p=a?"-D":D*(-1+(c.j||0));a=8.F(e.C);m(d,{P:"U 0 1w",W:"Q("+p+"%,0,0)"});e.1t||(d=b.F(e.1B))&&d&&d.M&&d.M.1a(d);a!=8.I&&r(a,"o-17-C");a.1X(b);7 b};c.1x=4(){t(8.1j,"o-1f");t(8.F(e.C),"o-17-C");6 a=8.Z("o");a&&a&&a.M&&a.M.1a(a)};c.1d=4(){7!!8.Z("o")};c.1s=4(){6 a=8.I.L,b="1Y"9 a?"1c":"20"9 a?"18":"22"9 a?"A":"23"9 a?"O":"";7 b+"25"9 a?"Q":b+"26"9 a?"Y":"1u"};6 w=4(){4 a(){6 c=b.27();c&&c(a)}6 b=[];7 4(c){b.28(c);1==b.J&&a()}}(),m=4(){4 a(a){7 a.H(/^-A-/,"A-").H(/-([\\29-z])/1C,4(a,b){7 b.1q()})}4 b(b){b=a(b);6 d;y(!(d=e[b])){d=b;a:{6 u=8.I.L;y(!(b 9 u))X(6 h=c.J,f=b.2d(0).1q()+b.2e(1),g;h--;)y(g=c[h]+f,g 9 u){b=g;2g a}}d=e[d]=b}7 d}6 c=["1c","O","18","A"],e={};7 4(a,c){6 d=2h;y(2==d.J)X(g 9 c){6 e=c[g];y(1h 0!==e&&c.1i(g)){d=a;6 f=g;f=b(f);d.L[f]=e}}2i{6 g=a;f=d[1];d=d[2];f=b(f);g.L[f]=d}}}();7 c});',62,143,'||||function||var|return|document|in|||||||||div|status|||||nprogress|||||||||this|if||ms|positionUsing|parent|100|set|querySelector|typeof|replace|body|length|class|style|parentNode|trickle||transition|translate3d|setTimeout|role|spinner|all|define|transform|for|translate|getElementById|className|bar|random|Math|start|inc|barSelector|custom|Moz|template|removeChild|minimum|Webkit|isRendered|easing|busy|speed|void|hasOwnProperty|documentElement|null|render|isStarted|trickleRate|substring|trickleSpeed|toUpperCase|offsetWidth|getPositioningCSS|showSpinner|margin|opacity|linear|remove|number|exports|done|spinnerSelector|gi|none|95|994|promise|configure|resolved|state|always|icon|peg|800|02|200|ease|createElement|id|innerHTML|08|settings|version|appendChild|WebkitTransform|amd|MozTransform|object|msTransform|OTransform|indexOf|Perspective|Transform|shift|push|da|string|left|module|charAt|slice|NProgress|break|arguments|else'.split('|'),0,{}));
  8. /*pjax*/eval(function(p,a,c,k,e,r){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('(3(b){3 J(a,d,e){8 c=12;9 12.2x("1n.2",a,3(a){8 f=b.1m({},m(d,e));f.o||(f.o=b(12).10("11-2")||c);A(a,f)})}3 A(a,d,e){e=m(d,e);d=a.2l;6("A"!==d.2e.1g())1y"$.1H.2 2T $.2.1n 2r 3r 3p 1W";6(!(1<a.3R||a.37||a.38||a.2K||a.3Y||19.2u!==d.2u||19.2f!==d.2f||-1<d.Y.3I("#")&&d.Y.17(/#.*/,"")==19.Y.17(/#.*/,"")||a.1P())){8 c={5:d.Y,o:b(d).10("11-2"),1O:d};e=b.1m({},c,e);c=b.1w("2:1n");b(d).1c(c,[e]);c.1P()||(f(e),a.22(),b(d).1c("2:3a",[e]))}}3 K(a,d,e){e=m(d,e);d=a.2l;8 c=b(d);6("3W"!==d.2e.1g())1y"$.2.1z 2r a 2g 1W";c={Z:(c.10("2i")||"16").1g(),5:c.10("2z"),o:c.10("11-2"),1O:d};6("16"!==c.Z&&3O 0!==R.21)c.11=1N 21(d),c.2Q=!1,c.2S=!1;1f{6(b(d).1k(":39").1a)9;c.11=b(d).3e()}f(b.1m({},c,e));a.22()}3 f(a){3 d(a,d,c){c||(c={});c.3o=p;a=b.1w(a,c);h.1c(a,d);9!a.1P()}3 e(a){6(a){8 d=[];a.1i(3(){d.2n(b(12).10("1M"))});k(d,!0)}}3 c(a){6(a){8 d=[];a.1i(3(){d.2n(b(12).10("Y"))});k(d)}}3 k(a,b){1>a.1a?b&&d("2:1C"):3Z.40([a.2D()],3(){k(a,b)})}a=b.1m(!0,{},b.2P,f.1b,a);b.1X(a.5)&&(a.5=a.5());8 p=a.1O,n=u(a.5).1L,h=a.27=B(a.o);a.11||(a.11={});b.2c(a.11)?a.11.14({1d:"1I",1e:h.15}):a.11.1I=h.15;8 l;a.2v=3(b,c){"16"!==c.Z&&(c.W=0);b.2A("X-1h","2L");b.2A("X-1h-2M",h.15);6(!d("2:2v",[b,c]))9!1;0<c.W&&(l=2N(3(){d("2:W",[b,a])&&b.1G("W")},c.W),c.W=0);c=u(c.5);n&&(c.1L=n);a.1F=C(c)};a.23=3(b,c){l&&35(l);d("2:23",[b,c,a]);d("2:24",[b,a])};a.25=3(b,c,e){8 f=D("",b,a);b=d("2:25",[b,c,e,a]);"16"==a.Z&&"1G"!==c&&b&&v(f.5)};a.2a=3(k,p,l){8 q=f.j,m="3"===1u b.2.1b.1v?b.2.1b.1v():b.2.1b.1v,r=l.2j("X-1h-3S"),g=D(k,l,a),t=u(g.5);n&&(t.1L=n,g.5=t.Y);6(m&&r&&m!==r)v(g.5);1f 6(g.T){f.j={V:a.V||(1N 2t).2I(),5:g.5,7:g.7,o:h.15,13:a.13,W:a.W};(a.14||a.17)&&R.18.1A(f.j,g.7,g.5);6(b.2R(a.o,U.1D))2W{U.1D.2X()}31(Q){}g.7&&(U.7=g.7);d("2:2E",[g.T,a],{j:f.j,2F:q});h.1B(g.T);(q=h.1k("1p[1Y], 3c[1Y]").1Z()[0])&&U.1D!==q&&q.3h();c(g.1V);e(g.1E);g=a.1r;n&&(q=3u(n.3v(1)),q=U.3w(q)||U.3x(q)[0])&&(g=b(q).3y().3z);"3B"==1u g&&b(R).3D(g);d("2:2a",[k,p,l,a])}1f v(g.5)};f.j||(f.j={V:(1N 2t).2I(),5:R.19.Y,7:U.7,o:h.15,13:a.13,W:a.W},R.18.1A(f.j,U.7));E(f.1q);f.3P=a;8 m=f.1q=b.3Q(a);0<m.26&&(a.14&&!a.17&&(L(f.j.V,F(h)),R.18.28(1x,"",a.1F)),d("2:29",[m,a]),d("2:2J",[m,a]));9 f.1q}3 M(a,d){9 f(b.1m({5:R.19.Y,14:!1,17:!0,1r:!1},m(a,d)))}3 v(a){R.18.1A(1x,"",f.j.5);R.19.17(a)}3 G(a){r||E(f.1q);8 d=f.j,e=a.j;6(e&&e.o){6(r&&N==e.5)9;6(d){6(d.V===e.V)9;8 c=d.V<e.V?"2b":"2O"}8 k=l[e.V]||[];a=b(k[0]||e.o);k=k[1];6(a.1a){6(d){8 p=c,n=d.V,h=F(a);l[n]=h;"2b"===p?(p=t,h=x):(p=x,h=t);p.14(n);(n=h.2D())&&2d l[n];y(p,f.1b.1J)}c=b.1w("2:1K",{j:e,2U:c});a.1c(c);c={V:e.V,5:e.5,o:a,14:!1,13:e.13,W:e.W,1r:!1};k?(a.1c("2:29",[1x,c]),f.j=e,e.7&&(U.7=e.7),d=b.1w("2:2E",{j:e,2F:d}),a.1c(d,[k,c]),a.1B(k),a.1c("2:24",[1x,c])):f(c);a[0].2V}1f v(19.Y)}r=!1}3 O(a){8 d=b.1X(a.5)?a.5():a.5,e=a.Z?a.Z.1g():"16",c=b("<2g>",{2i:"16"===e?"16":"2h",2z:d,2Y:"2Z:30"});"16"!==e&&"2h"!==e&&c.1j(b("<1p>",{Z:"1t",1d:"32",1e:e.33()}));a=a.11;6("34"===1u a)b.1i(a.2k("&"),3(a,d){a=d.2k("=");c.1j(b("<1p>",{Z:"1t",1d:a[0],1e:a[1]}))});1f 6(b.2c(a))b.1i(a,3(a,d){c.1j(b("<1p>",{Z:"1t",1d:d.1d,1e:d.1e}))});1f 6("36"===1u a)1s(8 f 2m a)c.1j(b("<1p>",{Z:"1t",1d:f,1e:a[f]}));b(U.1l).1j(c);c.1z()}3 E(a){a&&4>a.26&&(a.3b=b.1o,a.1G())}3 F(a){8 b=a.3d();b.1k("1C").1i(3(){12.1M||2p.3f(12,"3g",!1)});9[a.15,b.T()]}3 C(a){a.2q=a.2q.17(/([?&])(1I|3i)=[^&]*/g,"");9 a.Y.17(/\\?($|#)/,"$1")}3 u(a){8 b=U.3j("a");b.Y=a;9 b}3 m(a,d){a&&d?d.o=a:d=b.3k(a)?a:{o:a};d.o&&(d.o=B(d.o));9 d}3 B(a){a=b(a);6(a.1a){6(""!==a.15&&a.27===U)9 a;6(a.10("V"))9 b("#"+a.10("V"));1y"3l 3m 15 1s 2 o!";}1y"3n 2 o 1s "+a.15;}3 w(a,b){9 a.2s(b).3q(a.1k(b))}3 D(a,d,e){8 c={},f=/<1B/i.3s(a);d=d.2j("X-1h-3t");c.5=d?C(u(d)):e.1F;f?(d=b(b.1Q(a.1R(/<2w[^>]*>([\\s\\S.]*)<\\/2w>/i)[0],U,!0)),a=b(b.1Q(a.1R(/<1l[^>]*>([\\s\\S.]*)<\\/1l>/i)[0],U,!0))):d=a=b(b.1Q(a,U,!0));6(0===a.1a)9 c;c.7=w(d,"7").1Z().2y();e.13?(f="1l"===e.13?a:w(a,e.13).3A(),f.1a&&(c.T="1l"===e.13?f:f.T(),c.7||(c.7=f.10("7")||f.11("7")))):f||(c.T=a);c.T&&(c.T=c.T.1S(3(){9 b(12).3C("7")}),c.T.1k("7").1T(),c.1E=w(c.T,"1C[1M]").1T(),c.T=c.T.1S(c.1E),c.1V=w(c.T,\'3E[Z="2y/3F"]\').1T(),c.T=c.T.1S(c.1V));c.7&&(c.7=b.3G(c.7));9 c}3 L(a,b){l[a]=b;t.14(a);y(x,0);y(t,f.1b.1J)}3 y(a,b){1s(;a.1a>b;)2d l[a.3H()]}3 P(){9 b("3J").2s(3(){8 a=b(12).10("3K-3L");9 a&&"X-1h-3M"===a.1g()}).10("3N")}3 H(){b.1H.2=J;b.2=f;b.2.2B=b.1o;b.2.2C=I;b.2.1n=A;b.2.1z=K;b.2.1U=M;b.2.1b={W:3T,14:!0,17:!1,Z:"16",3U:"1B",1r:0,1J:20,1v:P};b(R).2x("1K.2",G)}3 I(){b.1H.2=3(){9 12};b.2=O;b.2.2B=H;b.2.2C=b.1o;b.2.1n=b.1o;b.2.1z=b.1o;b.2.1U=3(){R.19.1U()};b(R).3V("1K.2",G)}8 r=!0,N=R.19.Y,z=R.18.j;z&&z.o&&(f.j=z);"j"2m R.18&&(r=!1);8 l={},x=[],t=[];0>b.3X("j",b.2G.2H)&&b.2G.2H.14("j");b.2o.2=R.18&&R.18.28&&R.18.1A&&!41.42.1R(/((43|44|45).+\\46\\s+[1-4]\\D|47\\/.+48)/);b.2o.2?H():I()})(2p);',62,257,'||pjax|function||url|if|title|var|return||||||||||state|||||container|||||||||||||||||||||||||||||window||contents|document|id|timeout||href|type|attr|data|this|fragment|push|selector|GET|replace|history|location|length|defaults|trigger|name|value|else|toUpperCase|PJAX|each|append|find|body|extend|click|noop|input|xhr|scrollTo|for|hidden|typeof|version|Event|null|throw|submit|replaceState|html|script|activeElement|scripts|requestUrl|abort|fn|_pjax|maxCacheLength|popstate|hash|src|new|target|isDefaultPrevented|parseHTML|match|not|remove|reload|styles|element|isFunction|autofocus|last||FormData|preventDefault|complete|end|error|readyState|context|pushState|start|success|forward|isArray|delete|tagName|hostname|form|POST|method|getResponseHeader|split|currentTarget|in|unshift|support|jQuery|search|requires|filter|Date|protocol|beforeSend|head|on|text|action|setRequestHeader|enable|disable|pop|beforeReplace|previousState|event|props|getTime|send|shiftKey|true|Container|setTimeout|back|ajaxSettings|processData|contains|contentType|or|direction|offsetHeight|try|blur|style|display|none|catch|_method|toLowerCase|string|clearTimeout|object|metaKey|ctrlKey|file|clicked|onreadystatechange|textarea|clone|serializeArray|_data|globalEval|focus|_|createElement|isPlainObject|cant|get|no|relatedTarget|anchor|add|an|test|URL|decodeURIComponent|slice|getElementById|getElementsByName|offset|top|first|number|is|scrollTop|link|css|trim|shift|indexOf|meta|http|equiv|VERSION|content|void|options|ajax|which|Version|650|dataType|off|FORM|inArray|altKey|seajs|use|navigator|userAgent|iPod|iPhone|iPad|bOS|WebApps|CFNetwork'.split('|'),0,{}));
  9. /*mian*/
  10. (function (w) {
  11. var $d = $(document),
  12. NP = NProgress,
  13. booting = {},
  14. components = LA.components,
  15. lang = LA.lang;
  16. /**
  17. * 全局配置
  18. */
  19. components.setup = function () {
  20. layer.config({maxmin: true, moveOut: true, shade: false});
  21. $.ajaxSetup({
  22. cache: true,
  23. error: LA.ajaxError
  24. });
  25. LA.NP = {};
  26. LA.NP.start = NP.start;
  27. LA.NP.done = function () {
  28. setTimeout(NP.done, 200);
  29. };
  30. LA.grid = {
  31. _defaultName: '_def_',
  32. _selectors: {},
  33. addSelector: function (selector, name) {
  34. this._selectors[name || this._defaultName] = selector;
  35. },
  36. // 获取行选择器选中的ID字符串
  37. selected: function (name) {
  38. return this._selectors[name || this._defaultName].getIds()
  39. },
  40. // 获取行选择器选中的行
  41. selectedRows: function (name) {
  42. return this._selectors[name || this._defaultName].getRows()
  43. },
  44. };
  45. $.pjax.defaults.timeout = 5000;
  46. $.pjax.defaults.maxCacheLength = 0;
  47. };
  48. // 动作按钮点击事件注册
  49. components.actions = {
  50. // 刷新按钮
  51. refreshAction: function () {
  52. $('[data-action="refresh"]').off('click').click(function () {
  53. LA.reload($(this).data('url'));
  54. LA.success(lang.refresh_succeeded, 'rb');
  55. });
  56. },
  57. // 删除按钮初始化
  58. deleteAction: function () {
  59. $('[data-action="delete"]').off('click').click(function() {
  60. var url = $(this).data('url'), redirect = $(this).data('redirect');
  61. LA.confirm(lang.delete_confirm, function () {
  62. NP.start();
  63. $.ajax({
  64. method: 'post',
  65. url: url,
  66. data: {
  67. _method:'delete',
  68. _token:LA.token,
  69. },
  70. success: function (data) {
  71. NP.done();
  72. if (data.status) {
  73. LA.reload(redirect);
  74. LA.success(data.message);
  75. } else {
  76. LA.error(data.message);
  77. }
  78. }
  79. });
  80. }, lang.confirm, lang.cancel);
  81. });
  82. },
  83. // 批量删除按钮初始化
  84. batchDeleteAction: function () {
  85. $('[data-action="batch-delete"]').off('click').on('click', function() {
  86. var url = $(this).data('url'),
  87. name = $(this).data('name'),
  88. id = LA.grid.selected(name).join();
  89. if (!id) {
  90. return;
  91. }
  92. LA.confirm(lang.delete_confirm, function () {
  93. NP.start();
  94. $.ajax({
  95. method: 'post',
  96. url: url + '/' + id,
  97. data: {
  98. _method:'delete',
  99. _token:LA.token,
  100. },
  101. success: function (data) {
  102. NP.done();
  103. if (data.status) {
  104. LA.reload();
  105. LA.success(data.message);
  106. } else {
  107. LA.error(data.message);
  108. }
  109. }
  110. });
  111. }, lang.confirm, lang.cancel);
  112. });
  113. },
  114. };
  115. /**
  116. * 页面组件初始化
  117. */
  118. components.boot = function () {
  119. var k, i, all = [booting, components.actions, components.booting];
  120. for (k in all) {
  121. for (i in all[k]) {
  122. if (typeof all[k][i] == "function") {
  123. try { all[k][i](); } catch (e) {console.error(e)}
  124. }
  125. }
  126. }
  127. };
  128. /**
  129. * 全局事件监听
  130. */
  131. components.listen = function () {
  132. $d.pjax('a:not(a[target="_blank"])', '#pjax-container', { fragment: 'body' });
  133. NP.configure({parent: '#pjax-container'});
  134. $d.on('pjax:timeout', function (event) {
  135. event.preventDefault();
  136. });
  137. $d.on('submit', 'form[pjax-container]', function (event) {
  138. $.pjax.submit(event, '#pjax-container')
  139. });
  140. $d.on("pjax:popstate", function () {
  141. $d.one("pjax:end", function (event) {
  142. $(event.target).find("script[data-exec-on-popstate]").each(function () {
  143. $.globalEval(this.text || this.textContent || this.innerHTML || '');
  144. });
  145. });
  146. });
  147. $d.on('pjax:send', function (xhr) {
  148. if (xhr.relatedTarget && xhr.relatedTarget.tagName && xhr.relatedTarget.tagName.toLowerCase() === 'form') {
  149. var $submit_btn = $('form[pjax-container] :submit');
  150. if ($submit_btn) {
  151. $submit_btn.button('loading')
  152. }
  153. }
  154. NP.start();
  155. });
  156. $d.on('pjax:complete', function (xhr) {
  157. if (xhr.relatedTarget && xhr.relatedTarget.tagName && xhr.relatedTarget.tagName.toLowerCase() === 'form') {
  158. var $submit_btn = $('form[pjax-container] :submit');
  159. if ($submit_btn) {
  160. $submit_btn.button('reset')
  161. }
  162. }
  163. NP.done();
  164. });
  165. // 新页面加载,重新初始化
  166. $d.on('pjax:script', components.boot);
  167. };
  168. /**
  169. * 初始化方法定义
  170. */
  171. booting = {
  172. // 菜单初始化
  173. leftSitebar: function () {
  174. $('.sidebar-menu li:not(.treeview) > a').off('click').on('click', function () {
  175. if ($('.sidebar-mini.sidebar-collapse').length) {
  176. var $t = $(this).parents('.treeview');
  177. if (!$t.hasClass('active')) {
  178. $('.sidebar-menu li').removeClass('active');
  179. $t.addClass('active');
  180. }
  181. }
  182. var $parent = $(this).parent().addClass('active');
  183. $parent.siblings('.treeview.active').find('> a').trigger('click');
  184. $parent.siblings().removeClass('active').find('li').removeClass('active');
  185. });
  186. },
  187. // 进度条初始化
  188. progressBar: function () {
  189. $('.progress-bar').each(function (k, v) {
  190. v = $(v);
  191. var w = v.data('width');
  192. if (w) {
  193. setTimeout(function () {
  194. v.css({width: w});
  195. }, 80);
  196. }
  197. });
  198. },
  199. // 图片预览
  200. imagePreview: function () {
  201. $('[data-init="preview"]').off('click').click(function () {
  202. return LA.previewImage($(this).attr('src'));
  203. });
  204. },
  205. // 数字动画初始化
  206. counterUp: function() {
  207. var boot = function(k, obj) {
  208. try {
  209. obj = $(obj);
  210. obj.counterUp({
  211. delay: obj.attr('data-delay') || 100,
  212. time: obj.attr('data-time') || 1200
  213. });
  214. } catch (e) {}
  215. };
  216. $('[data-init="counterup"]').each(boot);
  217. $('number').each(boot);
  218. },
  219. popover: function () {
  220. $('.popover').remove();
  221. $('[data-init="popover"]').popover();
  222. },
  223. // 初始化waves
  224. waves: function () {
  225. var i, w = Waves, _40 = [
  226. '.nav-stacked>li>a',
  227. '#app .navbar-nav>li>a',
  228. ], _70 = [
  229. '.btn-warning',
  230. '.webuploader-pick',
  231. '.layui-layer-btn a',
  232. '.pagination>li>a',
  233. '.btn-trans',
  234. '.skin-blue-light:not(.sidebar-collapse) .sidebar-menu li>a',
  235. ], light = [
  236. '.btn-primary',
  237. '.btn-success',
  238. '.btn-info',
  239. '.btn-danger',
  240. '.btn-purple',
  241. '.btn-inverse',
  242. '.btn-tear',
  243. '.btn-pink',
  244. '.btn-blue',
  245. '.btn-dropbox',
  246. '.btn-custom',
  247. '.btn-instagram',
  248. '.btn-facebook',
  249. '.skin-black-light:not(.sidebar-collapse) .sidebar-menu li>a',
  250. '.skin-black:not(.sidebar-collapse) .sidebar-menu li>a',
  251. ],
  252. float = [
  253. '.btn',
  254. '.btn-light',
  255. ];
  256. function _init() {
  257. for (i in _40) {
  258. w.attach(_40[i], ['waves-40']);
  259. }
  260. for (i in _70) {
  261. w.attach(_70[i], ['waves-70']);
  262. }
  263. for (i in light) {
  264. w.attach(light[i], ['waves-light']);
  265. }
  266. for (i in float) {
  267. w.attach(float[i], ['waves-float']);
  268. }
  269. w.init();
  270. }
  271. $('.sidebar-toggle').click(function () {
  272. setTimeout(function () {
  273. if ($('body').hasClass('sidebar-collapse')) {
  274. $('.sidebar-menu li>a').removeClass('waves-effect');
  275. } else {
  276. _init();
  277. }
  278. }, 10)
  279. });
  280. _init();
  281. },
  282. // 返回定点按钮初始化
  283. goTop: function () {
  284. if (this.initgo) {
  285. return;
  286. }
  287. this.initgo = 1;
  288. var $top = $('#go-top');
  289. // 滚动锚点
  290. $(window).scroll(function () {
  291. var scrollTop = $(this).scrollTop(), // 滚动条距离顶部的高度
  292. windowHeight = $(this).height(); // 当前可视的页面高度
  293. // 显示或隐藏滚动锚点
  294. if(scrollTop + windowHeight >= 1100) {
  295. $top.show(20)
  296. } else {
  297. $top.hide()
  298. }
  299. });
  300. // 滚动至顶部
  301. $top.click(function () {
  302. $("html, body").animate({
  303. scrollTop: $(".dcat-admin-body").offset().top
  304. }, {duration: 500, easing: "swing"});
  305. return false;
  306. })
  307. },
  308. };
  309. /**
  310. * 全局工具方法注册
  311. */
  312. components.register = function () {
  313. // 默认错误处理方法
  314. LA.ajaxError = LA.ajaxError || function(xhr, text, msg) {
  315. layer.closeAll('loading');
  316. LA.NP.done();
  317. LA.loading(false);// 关闭所有loading效果
  318. var json = xhr.responseJSON || {}, _msg = json.message;
  319. switch (xhr.status) {
  320. case 500:
  321. return LA.error(_msg || (LA.lang['500'] || 'Server internal error.'));
  322. case 403:
  323. return LA.error(_msg || (LA.lang['403'] || 'Permission deny!'));
  324. case 401:
  325. if (json.login) {
  326. return location.href = json.login;
  327. }
  328. return LA.error(LA.lang['401'] || 'Unauthorized.');
  329. case 419:
  330. return LA.error(LA.lang['419'] || 'Sorry, your page has expired.');
  331. case 422:
  332. if (json.errors) {
  333. try {
  334. var err = [], i;
  335. for (i in json.errors) {
  336. err.push(json.errors[i].join('<br/>'));
  337. }
  338. LA.error(err.join('<br/>'));
  339. } catch (e) {}
  340. return;
  341. }
  342. }
  343. LA.error(_msg || (xhr.status + ' ' + msg));
  344. };
  345. /**
  346. * 手动触发ready事件
  347. */
  348. LA.triggerReady = function () {
  349. if (typeof LA.pjaxresponse == 'undefined') return;
  350. $(function () {$d.trigger('pjax:script');});
  351. };
  352. LA.success = function (msg, offset, seconds) {
  353. var idx = layer.msg(msg, {icon:1, offset: offset||'t', time: (seconds || 2.5) * 1000});
  354. return layer_position(idx, offset);
  355. };
  356. LA.error = function (msg, offset, seconds) {
  357. var idx = layer.msg(msg, {icon:2, offset: offset||'t', time: (seconds || 4) * 1000});
  358. return layer_position(idx, offset);
  359. };
  360. LA.warning = function (msg, offset, seconds) {
  361. var idx = layer.msg(msg, {icon:7, offset: offset||'t', time: (seconds || 4) * 1000});
  362. return layer_position(idx, offset);
  363. };
  364. LA.info = function (msg, offset, seconds) {
  365. var idx = layer.msg(msg, {offset: offset||'t', time: (seconds || 4) * 1000});
  366. return layer_position(idx, offset);
  367. };
  368. LA.confirm = function (msg, callback, confirmBtn, cancelBtn, title) {
  369. return layer.msg(msg, {
  370. title: title || null,
  371. time: 0,
  372. icon: 3,
  373. btn: [confirmBtn || 'Confirm', cancelBtn || 'Cancel'],
  374. yes: function (i) {
  375. layer.close(i);
  376. callback(i);
  377. }
  378. });
  379. };
  380. // 注册自定义验证器
  381. LA.extendValidator = function (rule, callback, message) {
  382. var GLOBAL = $.fn.validator.Constructor.DEFAULTS;
  383. GLOBAL.custom[rule] = callback;
  384. GLOBAL.errors[rule] = message || null;
  385. };
  386. function layer_position(idx, p) {
  387. switch (p) {
  388. case 'rb':
  389. case 'lb':
  390. layer.style(idx, {
  391. marginTop: -20,
  392. marginLeft: -8
  393. });
  394. break;
  395. case 'rt':
  396. layer.style(idx, {
  397. marginTop: 70,
  398. marginLeft: -8
  399. });
  400. break;
  401. }
  402. return idx;
  403. }
  404. /**
  405. * 行选择器
  406. *
  407. * @constructor
  408. */
  409. LA.RowSelector = function RowSelector(opts) {
  410. opts = $.extend({
  411. checkbox: '', // checkbox css选择器
  412. selectAll: '', // 全选checkbox css选择器
  413. bg: 'rgba(255, 255,213,0.4)', // 选中效果颜色
  414. clickTr: false, // 点击行事件
  415. }, opts);
  416. var checkboxSelector = opts.checkbox,
  417. selectAllSelector = opts.selectAll,
  418. $ckb = $(checkboxSelector);
  419. $(selectAllSelector).on('change', function() {
  420. var cbx = $(checkboxSelector);
  421. for (var i = 0; i < cbx.length; i++) {
  422. if (this.checked && !cbx[i].checked) {
  423. cbx[i].click();
  424. } else if (!this.checked && cbx[i].checked) {
  425. cbx[i].click();
  426. }
  427. }
  428. });
  429. if (opts.clickTr) {
  430. $ckb.click(function (e) {
  431. if (typeof e.cancelBubble != "undefined") {
  432. e.cancelBubble = true;
  433. }
  434. if (typeof e.stopPropagation != "undefined") {
  435. e.stopPropagation();
  436. }
  437. }).parents('tr').click(function (e) {
  438. $(this).find(checkboxSelector).click();
  439. });
  440. }
  441. $ckb.on('change', function () {
  442. var tr = $(this).closest('tr');
  443. if (this.checked) {
  444. tr.css('background-color', opts.bg);
  445. } else {
  446. tr.css('background-color', '');
  447. }
  448. });
  449. this.getIds = function () {
  450. var selected = [];
  451. $(checkboxSelector+':checked').each(function() {
  452. var id = $(this).data('id');
  453. if (selected.indexOf(id) === -1) {
  454. selected.push(id);
  455. }
  456. });
  457. return selected;
  458. };
  459. this.getRows = function () {
  460. var selected = [];
  461. $(checkboxSelector+':checked').each(function() {
  462. var id = $(this).data('id'), i, exist;
  463. for (i in selected) {
  464. if (selected[i].id === id) {
  465. exist = true
  466. }
  467. }
  468. exist || selected.push({'id': id, 'label': $(this).data('label')})
  469. });
  470. return selected;
  471. };
  472. return this;
  473. };
  474. /**
  475. * 获取json对象或数组的长度
  476. *
  477. * @param obj
  478. * @returns {number}
  479. */
  480. LA.len = function (obj) {
  481. if (typeof obj !== 'object') {
  482. return 0;
  483. }
  484. var i, l = 0;
  485. for(i in obj) {
  486. l += 1;
  487. }
  488. return l;
  489. };
  490. /**
  491. * 判断变量或key是否存在
  492. *
  493. * @param _var
  494. * @param key
  495. * @returns {boolean}
  496. */
  497. LA.isset = function (_var, key) {
  498. var isset = (typeof _var !== 'undefined' && _var !== null);
  499. if (typeof key === 'undefined') {
  500. return isset;
  501. }
  502. return isset && typeof _var[key] !== 'undefined';
  503. };
  504. LA.empty = function (obj, key) {
  505. return !(LA.isset(obj, key) && obj[key]);
  506. };
  507. LA.arr = {
  508. get: function (arr, key, def) {
  509. def = null;
  510. if (LA.len(arr) < 1) return def;
  511. key = String(key).split('.');
  512. for (var i = 0; i < key.length; i++) {
  513. if (LA.isset(arr, key[i])) {
  514. arr = arr[key[i]];
  515. } else {
  516. return def;
  517. }
  518. }
  519. return arr;
  520. },
  521. has: function (arr, key) {
  522. if (LA.len(arr) < 1) return def;
  523. key = String(key).split('.');
  524. for (var i = 0; i < key.length; i++) {
  525. if (LA.isset(arr, key[i])) {
  526. arr = arr[key[i]];
  527. } else {
  528. return false;
  529. }
  530. }
  531. return true;
  532. },
  533. in: function (arr, val) {
  534. if (LA.len(arr) < 1) return false;
  535. for (var i in arr) {
  536. if (val == arr[i]) {
  537. return true;
  538. }
  539. }
  540. return false;
  541. },
  542. deleteValue: function (arr, val) {
  543. if (LA.len(arr) < 1) return false;
  544. for (var i in arr) {
  545. if (val == arr[i]) {
  546. delete arr[i];
  547. return true;
  548. }
  549. }
  550. return false;
  551. },
  552. // 判断对象是否相等
  553. equal: function (array, array2) {
  554. if (!array || !array2) return false;
  555. var len1 = LA.len(array), len2 = LA.len(array2), i;
  556. if (len1 != len2) return false;
  557. for (i in array) {
  558. if (!LA.isset(array2, i)) return false;
  559. if (array[i] === null && array2[i] === null) {
  560. return true;
  561. }
  562. if (typeof array[i] == 'object' && typeof array2[i] == 'object') {
  563. if (!this.equal(array[i], array2[i]))
  564. return false;
  565. }
  566. else if (array[i] != array2[i]) {
  567. return false;
  568. }
  569. }
  570. return true;
  571. }
  572. };
  573. LA.str = {
  574. replace: function (str, replace, subject) {
  575. if (!str) return str;
  576. var regExp = new RegExp(replace, "g");
  577. return str.replace(regExp, subject);
  578. }
  579. };
  580. /**
  581. *
  582. * @param lang
  583. * @returns {Function}
  584. * @constructor
  585. */
  586. LA.Translator = function (lang) {
  587. /**
  588. * 翻译
  589. *
  590. * @param {string} label exp: admin.cancel
  591. * @param {object} replace
  592. */
  593. return function (label, replace) {
  594. if (typeof lang !== 'object') return label;
  595. var text = LA.arr.get(lang, label), i;
  596. if (!LA.isset(text)) {
  597. return label;
  598. }
  599. if (!replace) {
  600. return text;
  601. }
  602. for (i in replace) {
  603. text = LA.str.replace(text, ':'+i, replace[i]);
  604. }
  605. return text;
  606. }
  607. };
  608. /**
  609. * pjax刷新页面
  610. *
  611. * @param url
  612. */
  613. LA.reload = function (url) {
  614. var opt = {container:'#pjax-container'};
  615. if (url) {
  616. opt.url = url;
  617. }
  618. $.pjax.reload(opt);
  619. };
  620. // 预览图片
  621. LA.previewImage = function (src, width, title) {
  622. var img = new Image(), win = LA.isset(window.top) ? top : window,
  623. clientWidth = Math.ceil(win.screen.width * 0.6),
  624. clientHeight = Math.ceil(win.screen.height * 0.8);
  625. img.style.display = 'none';
  626. img.style.height = 'auto';
  627. img.style.width = width || '100%';
  628. img.src = src;
  629. document.body.appendChild(img);
  630. LA.loading();
  631. img.onload = function () {
  632. LA.loading(false);
  633. var srcw = this.width, srch = this.height;
  634. var width = srcw > clientWidth ? clientWidth : srcw,
  635. height = Math.ceil(width * (srch/srcw));
  636. height = height > clientHeight ? clientHeight : height;
  637. title = title || src.split('/').pop();
  638. if (title.length > 50) {
  639. title = title.substr(0, 50) + '...';
  640. }
  641. win.layer.open({
  642. type: 1,
  643. shade: 0.2,
  644. title: false,
  645. maxmin: false,
  646. shadeClose: true,
  647. closeBtn: 2,
  648. content: $(img),
  649. area: [width+'px', (height) + 'px'],
  650. skin: 'layui-layer-nobg',
  651. end: function () {
  652. document.body.removeChild(img);
  653. }
  654. });
  655. };
  656. img.onerror = function () {
  657. LA.loading(false);
  658. LA.warning('预览失败', 'rb');
  659. };
  660. };
  661. };
  662. ////////////////////////////////////////////////////////////////////
  663. // 全局配置与事件监听
  664. components.register();
  665. components.setup();
  666. components.listen();
  667. // 初始化组件
  668. $(components.boot);
  669. })(window);
  670. (function () {
  671. /**
  672. * 表单提交
  673. *
  674. * @param opts
  675. * @constructor
  676. */
  677. var $eColumns = {};
  678. LA.Form = function (opts) {
  679. opts = $.extend({
  680. $form: null,
  681. errorClass: 'has-error',
  682. groupSelector: '.form-group',
  683. template: '<label class="control-label" for="inputError"><i class="fa fa-times-circle-o"></i> _message_</label><br/>',
  684. disableRedirect: false, //
  685. columnSelectors: {}, //
  686. disableRemoveError: false,
  687. before: function () {},
  688. after: function () {},
  689. }, opts);
  690. var originalVals = {},
  691. cls = opts.errorClass,
  692. groupSlt = opts.groupSelector,
  693. tpl = opts.template,
  694. $form = opts.$form,
  695. tabSelector = '.tab-pane',
  696. get_tab_id = function ($c) {
  697. return $c.parents(tabSelector).attr('id');
  698. },
  699. get_tab_title_error = function ($c) {
  700. var id = get_tab_id($c);
  701. if (!id) return $('<none></none>');
  702. return $("[href='#" + id + "'] .text-red");
  703. };
  704. var self = this;
  705. // 移除错误信息
  706. remove_field_error();
  707. $form.ajaxSubmit({
  708. beforeSubmit: function (d, f, o) {
  709. if (opts.before(d, f, o, self) === false) {
  710. return false;
  711. }
  712. if (fire(LA._form_.before, d, f, o, self) === false) {
  713. return false;
  714. }
  715. LA.NP.start();
  716. },
  717. success: function (d) {
  718. LA.NP.done();
  719. if (opts.after(true, d, self) === false) {
  720. return;
  721. }
  722. if (fire(LA._form_.success, d, self) === false) {
  723. return;
  724. }
  725. if (!d.status) {
  726. LA.error(d.message || 'Save failed!');
  727. return;
  728. }
  729. LA.success(d.message || 'Save succeeded!');
  730. if (opts.disableRedirect || d.redirect === false) return;
  731. if (d.redirect) {
  732. return LA.reload(d.redirect);
  733. }
  734. history.back(-1);
  735. },
  736. error: function (v) {
  737. LA.NP.done();
  738. if (opts.after(false, v, self) === false) {
  739. return;
  740. }
  741. if (fire(LA._form_.error, v, self) === false) {
  742. return;
  743. }
  744. try {
  745. var error = JSON.parse(v.responseText), i;
  746. if (v.status != 422 || !error || !LA.isset(error, 'errors')) {
  747. return LA.error(v.status + ' ' + v.statusText);
  748. }
  749. error = error.errors;
  750. for (i in error) {
  751. // 显示错误信息
  752. $eColumns[i] = show_field_error($form, i, error[i]);
  753. }
  754. } catch (e) {
  755. return LA.error(v.status + ' ' + v.statusText);
  756. }
  757. }
  758. });
  759. // 触发钩子事件
  760. function fire(evs) {
  761. var i, j, r, args = arguments, p = [];
  762. delete args[0];
  763. args = args || [];
  764. for (j in args) {
  765. p.push(args[j]);
  766. }
  767. for (i in evs) {
  768. r = evs[i].apply(evs[i], p);
  769. if (r === false) return r; // 返回 false 会代码阻止继续执行
  770. }
  771. }
  772. // 删除错误有字段的错误信息
  773. function remove_field_error() {
  774. var i, p, t;
  775. for (i in $eColumns) {
  776. p = $eColumns[i].parents(groupSlt);
  777. p.removeClass(cls);
  778. p.find('error').html('');
  779. t = get_tab_title_error($eColumns[i]);
  780. if (!t.hasClass('hide')) {
  781. t.addClass('hide');
  782. }
  783. }
  784. // 重置
  785. $eColumns = {};
  786. }
  787. // 显示错误信息
  788. function show_field_error($form, column, errors) {
  789. var $c = get_field_obj($form, column);
  790. get_tab_title_error($c).removeClass('hide');
  791. // 保存字段原始数据
  792. originalVals[column] = get_val($c);
  793. if (!$c) {
  794. if (LA.len(errors) && errors.length) {
  795. LA.error(errors.join(" \n "));
  796. }
  797. return;
  798. }
  799. var p = $c.closest(groupSlt), j;
  800. p.addClass(cls);
  801. for (j in errors) {
  802. p.find('error').eq(0).append(tpl.replace('_message_', errors[j]));
  803. }
  804. if (!opts.disableRemoveError) {
  805. remove_error_when_val_changed($c, column);
  806. }
  807. return $c;
  808. }
  809. // 获取字段对象
  810. function get_field_obj($form, column) {
  811. if (column.indexOf('.') != -1) {
  812. column = column.split('.');
  813. var first = column.shift(), i, sub = '';
  814. for (i in column) {
  815. sub += '[' + column[i] + ']';
  816. }
  817. column = first + sub;
  818. }
  819. var $c = $form.find('[name="' + column + '"]');
  820. if (!$c.length) $c = $form.find('[name="' + column + '[]"]');
  821. if (!$c.length) {
  822. $c = $form.find('[name="' + column.replace(/start$/, '') + '"]');
  823. }
  824. if (!$c.length) {
  825. $c = $form.find('[name="' + column.replace(/end$/, '') + '"]');
  826. }
  827. if (!$c.length) {
  828. $c = $form.find('[name="' + column.replace(/start\]$/, ']') + '"]');
  829. }
  830. if (!$c.length) {
  831. $c = $form.find('[name="' + column.replace(/end\]$/, ']') + '"]');
  832. }
  833. return $c;
  834. }
  835. // 获取字段值
  836. function get_val($c) {
  837. var vals = [],
  838. t = $c.attr('type'),
  839. cked = t === 'checkbox' || t === 'radio',
  840. i;
  841. for (i = 0; i < $c.length; i++) {
  842. if (cked) {
  843. vals.push($($c[i]).prop('checked'));
  844. continue;
  845. }
  846. vals.push($($c[i]).val());
  847. }
  848. return vals;
  849. }
  850. // 当字段值变化时移除错误信息
  851. function remove_error_when_val_changed($c, column) {
  852. var p = $c.parents(groupSlt);
  853. $c.one('change', rm);
  854. $c.off('blur', rm).on('blur', function () {
  855. if (val_changed()) rm();
  856. });
  857. // 表单值发生变化就移除错误信息
  858. function autorm() {
  859. setTimeout(function () {
  860. if (!$c.length) return;
  861. if (val_changed()) return rm();
  862. autorm();
  863. }, 500);
  864. }
  865. autorm();
  866. // 判断值是否改变
  867. function val_changed() {
  868. return !LA.arr.equal(originalVals[column], get_val($c));
  869. }
  870. function rm() {
  871. p.removeClass(cls);
  872. p.find('error').html('');
  873. // tab页下没有错误信息了,隐藏title的错误图标
  874. var id = get_tab_id($c), t;
  875. if (id && !$('#'+id).find('.'+cls).length) {
  876. t = get_tab_title_error($c);
  877. if (!t.hasClass('hide')) {
  878. t.addClass('hide');
  879. }
  880. }
  881. delete $eColumns[column];
  882. }
  883. }
  884. };
  885. })();
  886. (function (w) {
  887. /**
  888. * 表单弹窗
  889. * @param opt
  890. * @constructor
  891. */
  892. LA.ModalForm = function (opt) {
  893. var number = 1,
  894. defUrl = opt.defaultUrl,
  895. btn = opt.buttonSelector,
  896. area = opt.area,
  897. title = opt.title,
  898. lang = {
  899. submit: opt.lang.submit,
  900. reset: opt.lang.reset,
  901. save_failed: opt.lang.save_failed,
  902. },
  903. nullFun = function (a, b) {},
  904. handlers = {
  905. saved: opt.saved || nullFun,
  906. success: opt.success || nullFun,
  907. error: opt.error || nullFun
  908. },
  909. lay = w.layer,
  910. forceRefresh = opt.forceRefresh,
  911. disableReset = opt.disableReset,
  912. idx = {},
  913. $layWin = {},
  914. queryString = opt.query,
  915. building,
  916. submitting,
  917. $btn;
  918. (!btn) || $(btn).off('click').click(function () {
  919. var t = $(this), num = t.attr('number'), url;
  920. $btn = t;
  921. if (!num) {
  922. num = number;
  923. t.attr('number', number);
  924. number++;
  925. }
  926. url = t.data('url') || defUrl; // 给弹窗页面链接追加参数
  927. if (url.indexOf('?') == -1) {
  928. url += '?'+queryString+'=1'
  929. } else if (url.indexOf(queryString) == -1) {
  930. url += '&'+queryString+'=1'
  931. }
  932. build(url, num);
  933. });
  934. btn || setTimeout(function () {
  935. build(defUrl, number)
  936. }, 400);
  937. // 开始构建弹窗
  938. function build(url, num) {
  939. if (!url || building) return;
  940. if ($layWin[num]) { // 阻止同个类型的弹窗弹出多个
  941. $layWin[num].show();
  942. try { lay.restore(idx[num]); } catch (e) {}
  943. return;
  944. }
  945. $(w.document).one('pjax:complete', function () { // 跳转新页面时移除弹窗
  946. rm(num);
  947. });
  948. building = 1;
  949. (!$btn) || $btn.button('loading');
  950. $.get(url, function (tpl) {
  951. building = 0;
  952. if ($btn) {
  953. $btn.button('reset');
  954. setTimeout(function () {
  955. $btn.find('.waves-ripple').remove();
  956. }, 50);
  957. }
  958. popup(tpl, num);
  959. });
  960. }
  961. // 弹出弹窗
  962. function popup(tpl, num) {
  963. tpl = LA.AssetsLoader.filterScriptAndAutoLoad(tpl).render();
  964. var t = $(tpl), $form, btns = [lang.submit], opts = {
  965. type: 1,
  966. area: formatArea(area),
  967. content: tpl,
  968. title: title,
  969. yes: submit,
  970. cancel: function () {
  971. if (forceRefresh) { // 是否强制刷新
  972. $layWin[num] = idx[num] = null;
  973. } else {
  974. $layWin[num].hide();
  975. return false;
  976. }
  977. }
  978. };
  979. if (!disableReset) {
  980. btns.push(lang.reset);
  981. opts.btn2 = function () { // 重置按钮
  982. $form = $form || $('#'+t.find('form').attr('id'));
  983. $form.trigger('reset');
  984. return false;
  985. };
  986. }
  987. opts.btn = btns;
  988. idx[num] = lay.open(opts);
  989. $layWin[num] = w.$('#layui-layer' + idx[num]);
  990. // 提交表单
  991. function submit () {
  992. if (submitting) return;
  993. $form = $form || w.$('#'+t.find('form').attr('id')); // 此处必须重新创建jq对象,否则无法操作页面元素
  994. LA.Form({
  995. $form: $form,
  996. disableRedirect: true,
  997. before: function () {
  998. $form.validator('validate');
  999. if ($form.find('.has-error').length > 0) {
  1000. return false;
  1001. }
  1002. submitting = 1;
  1003. $layWin[num].find('.layui-layer-btn0').button('loading');
  1004. },
  1005. after: function (success, res) {
  1006. $layWin[num].find('.layui-layer-btn0').button('reset');
  1007. submitting = 0;
  1008. handlers.saved(success, res);
  1009. if (!success) {
  1010. return handlers.error(success, res);
  1011. }
  1012. if (res.status) {
  1013. handlers.success(success, res);
  1014. rm(num);
  1015. return;
  1016. }
  1017. handlers.error(success, res);
  1018. LA.error(res.message || lang.save_failed);
  1019. }
  1020. });
  1021. return false;
  1022. }
  1023. }
  1024. function formatArea(area) {
  1025. if (w.screen.width <= 800) {
  1026. return ['100%', '100%',];
  1027. }
  1028. return area;
  1029. }
  1030. // 移除弹窗
  1031. function rm(num) {
  1032. lay.close(idx[num]);
  1033. $layWin[num] && $layWin[num].remove();
  1034. $layWin[num] = null;
  1035. }
  1036. };
  1037. })(top || window);
  1038. (function () {
  1039. var tpl = '<div class="_loading_ flex items-center justify-center pin" style="{style}">{svg}</div>',
  1040. loading = '._loading_',
  1041. LOADING_SVG = [
  1042. '<svg width="{width}" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100" preserveAspectRatio="xMidYMid" class="lds-disk" style="background: none;"><g transform="translate(50,50)"><g ng-attr-transform="scale({{config.scale}})" transform="scale(0.5)"><circle cx="0" cy="0" r="50" ng-attr-fill="{{config.c1}}" fill="{color}"></circle><circle cx="0" ng-attr-cy="{{config.cy}}" ng-attr-r="{{config.r}}" ng-attr-fill="{{config.c2}}" cy="-35" r="15" fill="#ffffff" transform="rotate(101.708)"><animateTransform attributeName="transform" type="rotate" calcMode="linear" values="0 0 0;360 0 0" keyTimes="0;1" dur="1s" begin="0s" repeatCount="indefinite"></animateTransform></circle></g></g></svg>',
  1043. '<svg xmlns="http://www.w3.org/2000/svg" class="mx-auto block" style="width:{width};{svg_style}" viewBox="0 0 120 30" fill="{color}"><circle cx="15" cy="15" r="15"><animate attributeName="r" from="15" to="15" begin="0s" dur="0.8s" values="15;9;15" calcMode="linear" repeatCount="indefinite"/><animate attributeName="fill-opacity" from="1" to="1" begin="0s" dur="0.8s" values="1;.5;1" calcMode="linear" repeatCount="indefinite" /></circle><circle cx="60" cy="15" r="9" fill-opacity="0.3"><animate attributeName="r" from="9" to="9" begin="0s" dur="0.8s" values="9;15;9" calcMode="linear" repeatCount="indefinite" /><animate attributeName="fill-opacity" from="0.5" to="0.5" begin="0s" dur="0.8s" values=".5;1;.5" calcMode="linear" repeatCount="indefinite" /></circle><circle cx="105" cy="15" r="15"><animate attributeName="r" from="15" to="15" begin="0s" dur="0.8s" values="15;9;15" calcMode="linear" repeatCount="indefinite" /><animate attributeName="fill-opacity" from="1" to="1" begin="0s" dur="0.8s" values="1;.5;1" calcMode="linear" repeatCount="indefinite" /></circle></svg>',
  1044. ];
  1045. /**
  1046. * Loading
  1047. *
  1048. * @param opts
  1049. * @constructor
  1050. */
  1051. function Loader(opts) {
  1052. var defStyle = 'position:absolute;left:10px;right:10px;', content, $container;
  1053. opts = $.extend({
  1054. container: '#pjax-container',
  1055. z_index: 100,
  1056. width: '50px',
  1057. color: '#84bdea',
  1058. bg: '#fff',
  1059. style: '',
  1060. svg: LOADING_SVG[0]
  1061. }, opts);
  1062. $container = opts.container;
  1063. $container = $container == 'object' ? $container : $($container);
  1064. content = $(
  1065. tpl
  1066. .replace('{svg}', opts.svg)
  1067. .replace('{color}', opts.color)
  1068. .replace('{color}', opts.color)
  1069. .replace('{width}', opts.width)
  1070. .replace('{style}', defStyle + 'background:' + opts.bg + ';' + 'z-index:' + opts.z_index + ';' + opts.style)
  1071. );
  1072. content.appendTo($container);
  1073. this.remove = function () {
  1074. $container.find(loading).remove();
  1075. };
  1076. }
  1077. Loader.destroyAll = function () {
  1078. $(loading).remove();
  1079. };
  1080. LA.Loader = Loader;
  1081. // 全屏居中loading
  1082. LA.loading = function (opts) {
  1083. if (opts === false) {
  1084. // 关闭loading
  1085. return setTimeout(LA.Loader.destroyAll, 70);
  1086. }
  1087. // 配置参数
  1088. opts = $.extend({
  1089. color: '#62abe4',
  1090. z_index: 999991014,
  1091. width: '58px',
  1092. shade: 'rgba(255, 255, 255, 0.02)',
  1093. top: 200,
  1094. svg: LOADING_SVG[1],
  1095. }, opts);
  1096. var win = $(window),
  1097. // 容器
  1098. $container = $('<div class="_loading_" type="loading" times="1" showtime="0" contype="string" style="z-index:'+opts.z_index+';width:300px;position:fixed"></div>'),
  1099. // 遮罩层直接沿用layer
  1100. shadow = $('<div class="layui-layer-shade _loading_" style="z-index:'+(opts.z_index-2)+'; background-color:'+opts.shade+'"></div>');
  1101. $container.appendTo('body');
  1102. if (opts.shade) {
  1103. shadow.appendTo('body');
  1104. }
  1105. function resize() {
  1106. $container.css({
  1107. left: (win.width() - 300)/2,
  1108. top: (win.height() - opts.top)/2
  1109. });
  1110. }
  1111. // 自适应窗口大小
  1112. win.on('resize', resize);
  1113. resize();
  1114. $container.loading(opts);
  1115. };
  1116. $.fn.loading = function (opt) {
  1117. if (opt === false) {
  1118. return $(this).find(loading).remove();
  1119. }
  1120. opt = opt || {};
  1121. opt.container = $(this);
  1122. return new Loader(opt);
  1123. };
  1124. })();
  1125. (function (w) {
  1126. function AssetsLoader () {
  1127. }
  1128. AssetsLoader.prototype = {
  1129. // 按顺序加载静态资源
  1130. // 并在所有静态资源加载完毕后执行回调函数
  1131. load: function (urls, callback, args) {
  1132. var self = this;
  1133. if (urls.length < 1) {
  1134. (!callback) || callback(args);
  1135. return;
  1136. }
  1137. seajs.use([urls.shift()], function () {
  1138. self.load(urls, callback, args);
  1139. });
  1140. },
  1141. // 过滤 <script src> 标签
  1142. filterScripts: function (content) {
  1143. var obj = {};
  1144. if (typeof content == 'string') content = $(content);
  1145. obj.scripts = findAll(content, 'script[src]').remove();
  1146. obj.contents = content.not(obj.scripts);
  1147. obj.contents.render = toString;
  1148. obj.js = (function () {
  1149. var urls = [];
  1150. obj.scripts.each(function (k, v) {
  1151. if (v.src) {
  1152. urls.push(v.src);
  1153. }
  1154. });
  1155. return urls;
  1156. })();
  1157. return obj;
  1158. },
  1159. // 返回过滤 <script src> 标签后的内容,并在加载完 script 脚本后触发 "pjax:script" 事件
  1160. filterScriptAndAutoLoad: function (content, callback) {
  1161. var obj = this.filterScripts(content);
  1162. this.load(obj.js, function () {
  1163. (!callback) || callback(obj.contents);
  1164. fire();
  1165. });
  1166. return obj.contents;
  1167. },
  1168. };
  1169. function findAll(elems, selector) {
  1170. if (typeof elems == 'string') elems = $(elems);
  1171. return elems.filter(selector).add(elems.find(selector));
  1172. }
  1173. function fire () {
  1174. LA.pjaxresponse = 1;
  1175. // js加载完毕 触发 ready 事件
  1176. // setTimeout用于保证在所有js代码最后执行
  1177. setTimeout(LA.triggerReady, 1);
  1178. }
  1179. function toString (th) {
  1180. var html = '', out;
  1181. this.each(function (k, v) {
  1182. if ((out = v.outerHTML)) {
  1183. html += out;
  1184. }
  1185. });
  1186. return html;
  1187. };
  1188. LA.AssetsLoader = new AssetsLoader;
  1189. })(window);
  1190. (function () {
  1191. /* @see https://github.com/lodash/lodash/blob/master/debounce.js */
  1192. /* @see https://www.lodashjs.com/docs/lodash.debounce */
  1193. function debounce(func, wait, options) {
  1194. var lastArgs,
  1195. lastThis,
  1196. maxWait,
  1197. result,
  1198. timerId,
  1199. lastCallTime;
  1200. var lastInvokeTime = 0;
  1201. var leading = false;
  1202. var maxing = false;
  1203. var trailing = true;
  1204. if (typeof func !== 'function') {
  1205. throw new TypeError('Expected a function')
  1206. }
  1207. wait = +wait || 0;
  1208. if (isObject(options)) {
  1209. leading = !!options.leading;
  1210. maxing = 'maxWait' in options;
  1211. maxWait = maxing ? Math.max(+options.maxWait || 0, wait) : wait;
  1212. trailing = 'trailing' in options ? !!options.trailing : trailing
  1213. }
  1214. function isObject(value) {
  1215. var type = typeof value;
  1216. return value != null && (type === 'object' || type === 'function')
  1217. }
  1218. function invokeFunc(time) {
  1219. var args = lastArgs;
  1220. var thisArg = lastThis;
  1221. lastArgs = lastThis = undefined;
  1222. lastInvokeTime = time;
  1223. result = func.apply(thisArg, args);
  1224. return result
  1225. }
  1226. function startTimer(pendingFunc, wait) {
  1227. return setTimeout(pendingFunc, wait)
  1228. }
  1229. function cancelTimer(id) {
  1230. clearTimeout(id)
  1231. }
  1232. function leadingEdge(time) {
  1233. // Reset any `maxWait` timer.
  1234. lastInvokeTime = time;
  1235. // Start the timer for the trailing edge.
  1236. timerId = startTimer(timerExpired, wait);
  1237. // Invoke the leading edge.
  1238. return leading ? invokeFunc(time) : result
  1239. }
  1240. function remainingWait(time) {
  1241. var timeSinceLastCall = time - lastCallTime;
  1242. var timeSinceLastInvoke = time - lastInvokeTime;
  1243. var timeWaiting = wait - timeSinceLastCall;
  1244. return maxing
  1245. ? Math.min(timeWaiting, maxWait - timeSinceLastInvoke)
  1246. : timeWaiting
  1247. }
  1248. function shouldInvoke(time) {
  1249. var timeSinceLastCall = time - lastCallTime;
  1250. var timeSinceLastInvoke = time - lastInvokeTime;
  1251. // Either this is the first call, activity has stopped and we're at the
  1252. // trailing edge, the system time has gone backwards and we're treating
  1253. // it as the trailing edge, or we've hit the `maxWait` limit.
  1254. return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||
  1255. (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait))
  1256. }
  1257. function timerExpired() {
  1258. var time = Date.now();
  1259. if (shouldInvoke(time)) {
  1260. return trailingEdge(time)
  1261. }
  1262. // Restart the timer.
  1263. timerId = startTimer(timerExpired, remainingWait(time))
  1264. }
  1265. function trailingEdge(time) {
  1266. timerId = undefined;
  1267. // Only invoke if we have `lastArgs` which means `func` has been
  1268. // debounced at least once.
  1269. if (trailing && lastArgs) {
  1270. return invokeFunc(time)
  1271. }
  1272. lastArgs = lastThis = undefined;
  1273. return result
  1274. }
  1275. function cancel() {
  1276. if (timerId !== undefined) {
  1277. cancelTimer(timerId)
  1278. }
  1279. lastInvokeTime = 0;
  1280. lastArgs = lastCallTime = lastThis = timerId = undefined
  1281. }
  1282. function flush() {
  1283. return timerId === undefined ? result : trailingEdge(Date.now())
  1284. }
  1285. function pending() {
  1286. return timerId !== undefined
  1287. }
  1288. function debounced() {
  1289. var time = Date.now();
  1290. var isInvoking = shouldInvoke(time);
  1291. lastArgs = arguments;
  1292. lastThis = this;
  1293. lastCallTime = time;
  1294. if (isInvoking) {
  1295. if (timerId === undefined) {
  1296. return leadingEdge(lastCallTime)
  1297. }
  1298. if (maxing) {
  1299. // Handle invocations in a tight loop.
  1300. timerId = startTimer(timerExpired, wait);
  1301. return invokeFunc(lastCallTime)
  1302. }
  1303. }
  1304. if (timerId === undefined) {
  1305. timerId = startTimer(timerExpired, wait)
  1306. }
  1307. return result
  1308. }
  1309. debounced.cancel = cancel;
  1310. debounced.flush = flush;
  1311. debounced.pending = pending;
  1312. return debounced
  1313. }
  1314. LA.debounce = debounce;
  1315. })();