app.js 41 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791
  1. /*!
  2. * Author: Abdullah A Almsaeed
  3. * Date: 4 Jan 2014
  4. * Description:
  5. * This file should be included in all pages
  6. !**/
  7. $(function() {
  8. "use strict";
  9. //Enable sidebar toggle
  10. $("[data-toggle='offcanvas']").click(function(e) {
  11. e.preventDefault();
  12. //If window is small enough, enable sidebar push menu
  13. if ($(window).width() <= 992) {
  14. $('.row-offcanvas').toggleClass('active');
  15. $('.left-side').removeClass("collapse-left");
  16. $(".right-side").removeClass("strech");
  17. $('.row-offcanvas').toggleClass("relative");
  18. } else {
  19. //Else, enable content streching
  20. $('.left-side').toggleClass("collapse-left");
  21. $(".right-side").toggleClass("strech");
  22. }
  23. });
  24. //Add hover support for touch devices
  25. $('.btn').bind('touchstart', function() {
  26. $(this).addClass('hover');
  27. }).bind('touchend', function() {
  28. $(this).removeClass('hover');
  29. });
  30. //Activate tooltips
  31. $("[data-toggle='tooltip']").tooltip();
  32. /*
  33. * Add collapse and remove events to boxes
  34. */
  35. $("[data-widget='collapse']").click(function() {
  36. //Find the box parent
  37. var box = $(this).parents(".box").first();
  38. //Find the body and the footer
  39. var bf = box.find(".box-body, .box-footer");
  40. if (!box.hasClass("collapsed-box")) {
  41. box.addClass("collapsed-box");
  42. bf.slideUp();
  43. } else {
  44. box.removeClass("collapsed-box");
  45. bf.slideDown();
  46. }
  47. });
  48. /*
  49. * ADD SLIMSCROLL TO THE TOP NAV DROPDOWNS
  50. * ---------------------------------------
  51. */
  52. $(".navbar .menu").slimscroll({
  53. height: "200px",
  54. alwaysVisible: false,
  55. size: "3px"
  56. }).css("width","100%");
  57. /*
  58. * INITIALIZE BUTTON TOGGLE
  59. * ------------------------
  60. */
  61. $('.btn-group[data-toggle="btn-toggle"]').each(function() {
  62. var group = $(this);
  63. $(this).find(".btn").click(function(e) {
  64. group.find(".btn.active").removeClass("active");
  65. $(this).addClass("active");
  66. e.preventDefault();
  67. });
  68. });
  69. $("[data-widget='remove']").click(function() {
  70. //Find the box parent
  71. var box = $(this).parents(".box").first();
  72. box.slideUp();
  73. });
  74. /* Sidebar tree view */
  75. $(".sidebar .treeview").tree();
  76. /*
  77. * Make sure that the sidebar is streched full height
  78. * ---------------------------------------------
  79. * We are gonna assign a min-height value every time the
  80. * wrapper gets resized and upon page load. We will use
  81. * Ben Alman's method for detecting the resize event.
  82. **/
  83. //alert($(window).height());
  84. function _fix() {
  85. //Get window height and the wrapper height
  86. var height = $(window).height() - $("body > .header").height();
  87. $(".wrapper").css("min-height", height + "px");
  88. var content = $(".wrapper").height();
  89. //If the wrapper height is greater than the window
  90. if (content > height)
  91. //then set sidebar height to the wrapper
  92. $(".left-side, html, body").css("min-height", content + "px");
  93. else {
  94. //Otherwise, set the sidebar to the height of the window
  95. $(".left-side, html, body").css("min-height", height + "px");
  96. }
  97. }
  98. //Fire upon load
  99. _fix();
  100. //Fire when wrapper is resized
  101. $(".wrapper").resize(function() {
  102. _fix();
  103. });
  104. /*
  105. * We are gonna initialize all checkbox and radio inputs to
  106. * iCheck plugin in.
  107. * You can find the documentation at http://fronteed.com/iCheck/
  108. */
  109. $("input[type='checkbox'], input[type='radio']").iCheck({
  110. checkboxClass: 'icheckbox_minimal',
  111. radioClass: 'iradio_minimal'
  112. });
  113. /* For demo purposes */
  114. var demo = $("<div />").css({
  115. position: "fixed",
  116. top: "150px",
  117. right: "0",
  118. background: "rgba(0, 0, 0, 0.7)",
  119. "border-radius": "5px 0px 0px 5px",
  120. padding: "10px 15px",
  121. "font-size": "16px",
  122. "z-index": "999999",
  123. cursor: "pointer",
  124. color: "#ddd"
  125. }).html("<i class='fa fa-gear'></i>").addClass("no-print");
  126. var demo_settings = $("<div />").css({
  127. "padding": "10px",
  128. position: "fixed",
  129. top: "130px",
  130. right: "-200px",
  131. background: "#fff",
  132. border: "3px solid rgba(0, 0, 0, 0.7)",
  133. "width": "200px",
  134. "z-index": "999999"
  135. }).addClass("no-print");
  136. demo_settings.append(
  137. "<h4 style='margin: 0 0 5px 0; border-bottom: 1px dashed #ddd; padding-bottom: 3px;'>Layout Options</h4>"
  138. + "<div class='form-group no-margin'>"
  139. + "<div class='.checkbox'>"
  140. + "<label>"
  141. + "<input type='checkbox' onchange='change_layout();'/> "
  142. + "Fixed layout"
  143. + "</label>"
  144. + "</div>"
  145. + "</div>"
  146. );
  147. demo_settings.append(
  148. "<h4 style='margin: 0 0 5px 0; border-bottom: 1px dashed #ddd; padding-bottom: 3px;'>Skins</h4>"
  149. + "<div class='form-group no-margin'>"
  150. + "<div class='.radio'>"
  151. + "<label>"
  152. + "<input name='skins' type='radio' onchange='change_skin(\"skin-black\");' checked='checked'/> "
  153. + "Black"
  154. + "</label>"
  155. + "</div>"
  156. + "</div>"
  157. + "<div class='form-group no-margin'>"
  158. + "<div class='.radio'>"
  159. + "<label>"
  160. + "<input name='skins' type='radio' onchange='change_skin(\"skin-blue\");'/> "
  161. + "Blue"
  162. + "</label>"
  163. + "</div>"
  164. + "</div>"
  165. );
  166. demo.click(function() {
  167. if (!$(this).hasClass("open")) {
  168. $(this).css("right", "200px");
  169. demo_settings.css("right", "0");
  170. $(this).addClass("open");
  171. } else {
  172. $(this).css("right", "0");
  173. demo_settings.css("right", "-200px");
  174. $(this).removeClass("open")
  175. }
  176. });
  177. $("body").append(demo);
  178. $("body").append(demo_settings);
  179. });
  180. function change_layout() {
  181. $("body").toggleClass("fixed");
  182. }
  183. function change_skin(cls) {
  184. $("body").removeClass("skin-blue skin-black");
  185. $("body").addClass(cls);
  186. }
  187. /*END DEMO*/
  188. $(window).load(function(){
  189. /*! pace 0.4.17 */
  190. (function(){var a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V=[].slice,W={}.hasOwnProperty,X=function(a,b){function c(){this.constructor=a}for(var d in b)W.call(b,d)&&(a[d]=b[d]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a},Y=[].indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(b in this&&this[b]===a)return b;return-1};for(t={catchupTime:500,initialRate:.03,minTime:500,ghostTime:500,maxProgressPerFrame:10,easeFactor:1.25,startOnPageLoad:!0,restartOnPushState:!0,restartOnRequestAfter:500,target:"body",elements:{checkInterval:100,selectors:["body"]},eventLag:{minSamples:10,sampleCount:3,lagThreshold:3},ajax:{trackMethods:["GET"],trackWebSockets:!1}},B=function(){var a;return null!=(a="undefined"!=typeof performance&&null!==performance?"function"==typeof performance.now?performance.now():void 0:void 0)?a:+new Date},D=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame,s=window.cancelAnimationFrame||window.mozCancelAnimationFrame,null==D&&(D=function(a){return setTimeout(a,50)},s=function(a){return clearTimeout(a)}),F=function(a){var b,c;return b=B(),(c=function(){var d;return d=B()-b,d>=33?(b=B(),a(d,function(){return D(c)})):setTimeout(c,33-d)})()},E=function(){var a,b,c;return c=arguments[0],b=arguments[1],a=3<=arguments.length?V.call(arguments,2):[],"function"==typeof c[b]?c[b].apply(c,a):c[b]},u=function(){var a,b,c,d,e,f,g;for(b=arguments[0],d=2<=arguments.length?V.call(arguments,1):[],f=0,g=d.length;g>f;f++)if(c=d[f])for(a in c)W.call(c,a)&&(e=c[a],null!=b[a]&&"object"==typeof b[a]&&null!=e&&"object"==typeof e?u(b[a],e):b[a]=e);return b},p=function(a){var b,c,d,e,f;for(c=b=0,e=0,f=a.length;f>e;e++)d=a[e],c+=Math.abs(d),b++;return c/b},w=function(a,b){var c,d,e;if(null==a&&(a="options"),null==b&&(b=!0),e=document.querySelector("[data-pace-"+a+"]")){if(c=e.getAttribute("data-pace-"+a),!b)return c;try{return JSON.parse(c)}catch(f){return d=f,"undefined"!=typeof console&&null!==console?console.error("Error parsing inline pace options",d):void 0}}},g=function(){function a(){}return a.prototype.on=function(a,b,c,d){var e;return null==d&&(d=!1),null==this.bindings&&(this.bindings={}),null==(e=this.bindings)[a]&&(e[a]=[]),this.bindings[a].push({handler:b,ctx:c,once:d})},a.prototype.once=function(a,b,c){return this.on(a,b,c,!0)},a.prototype.off=function(a,b){var c,d,e;if(null!=(null!=(d=this.bindings)?d[a]:void 0)){if(null==b)return delete this.bindings[a];for(c=0,e=[];c<this.bindings[a].length;)this.bindings[a][c].handler===b?e.push(this.bindings[a].splice(c,1)):e.push(c++);return e}},a.prototype.trigger=function(){var a,b,c,d,e,f,g,h,i;if(c=arguments[0],a=2<=arguments.length?V.call(arguments,1):[],null!=(g=this.bindings)?g[c]:void 0){for(e=0,i=[];e<this.bindings[c].length;)h=this.bindings[c][e],d=h.handler,b=h.ctx,f=h.once,d.apply(null!=b?b:this,a),f?i.push(this.bindings[c].splice(e,1)):i.push(e++);return i}},a}(),null==window.Pace&&(window.Pace={}),u(Pace,g.prototype),C=Pace.options=u({},t,window.paceOptions,w()),S=["ajax","document","eventLag","elements"],O=0,Q=S.length;Q>O;O++)I=S[O],C[I]===!0&&(C[I]=t[I]);i=function(a){function b(){return T=b.__super__.constructor.apply(this,arguments)}return X(b,a),b}(Error),b=function(){function a(){this.progress=0}return a.prototype.getElement=function(){var a;if(null==this.el){if(a=document.querySelector(C.target),!a)throw new i;this.el=document.createElement("div"),this.el.className="pace pace-active",document.body.className=document.body.className.replace("pace-done",""),document.body.className+=" pace-running",this.el.innerHTML='<div class="pace-progress">\n <div class="pace-progress-inner"></div>\n</div>\n<div class="pace-activity"></div>',null!=a.firstChild?a.insertBefore(this.el,a.firstChild):a.appendChild(this.el)}return this.el},a.prototype.finish=function(){var a;return a=this.getElement(),a.className=a.className.replace("pace-active",""),a.className+=" pace-inactive",document.body.className=document.body.className.replace("pace-running",""),document.body.className+=" pace-done"},a.prototype.update=function(a){return this.progress=a,this.render()},a.prototype.destroy=function(){try{this.getElement().parentNode.removeChild(this.getElement())}catch(a){i=a}return this.el=void 0},a.prototype.render=function(){var a,b;return null==document.querySelector(C.target)?!1:(a=this.getElement(),a.children[0].style.width=""+this.progress+"%",(!this.lastRenderedProgress||this.lastRenderedProgress|0!==this.progress|0)&&(a.children[0].setAttribute("data-progress-text",""+(0|this.progress)+"%"),this.progress>=100?b="99":(b=this.progress<10?"0":"",b+=0|this.progress),a.children[0].setAttribute("data-progress",""+b)),this.lastRenderedProgress=this.progress)},a.prototype.done=function(){return this.progress>=100},a}(),h=function(){function a(){this.bindings={}}return a.prototype.trigger=function(a,b){var c,d,e,f,g;if(null!=this.bindings[a]){for(f=this.bindings[a],g=[],d=0,e=f.length;e>d;d++)c=f[d],g.push(c.call(this,b));return g}},a.prototype.on=function(a,b){var c;return null==(c=this.bindings)[a]&&(c[a]=[]),this.bindings[a].push(b)},a}(),N=window.XMLHttpRequest,M=window.XDomainRequest,L=window.WebSocket,v=function(a,b){var c,d,e,f;f=[];for(d in b.prototype)try{e=b.prototype[d],null==a[d]&&"function"!=typeof e?f.push(a[d]=e):f.push(void 0)}catch(g){c=g}return f},z=[],Pace.ignore=function(){var a,b,c;return b=arguments[0],a=2<=arguments.length?V.call(arguments,1):[],z.unshift("ignore"),c=b.apply(null,a),z.shift(),c},Pace.track=function(){var a,b,c;return b=arguments[0],a=2<=arguments.length?V.call(arguments,1):[],z.unshift("track"),c=b.apply(null,a),z.shift(),c},H=function(a){var b;if(null==a&&(a="GET"),"track"===z[0])return"force";if(!z.length&&C.ajax){if("socket"===a&&C.ajax.trackWebSockets)return!0;if(b=a.toUpperCase(),Y.call(C.ajax.trackMethods,b)>=0)return!0}return!1},j=function(a){function b(){var a,c=this;b.__super__.constructor.apply(this,arguments),a=function(a){var b;return b=a.open,a.open=function(d,e){return H(d)&&c.trigger("request",{type:d,url:e,request:a}),b.apply(a,arguments)}},window.XMLHttpRequest=function(b){var c;return c=new N(b),a(c),c},v(window.XMLHttpRequest,N),null!=M&&(window.XDomainRequest=function(){var b;return b=new M,a(b),b},v(window.XDomainRequest,M)),null!=L&&C.ajax.trackWebSockets&&(window.WebSocket=function(a,b){var d;return d=new L(a,b),H("socket")&&c.trigger("request",{type:"socket",url:a,protocols:b,request:d}),d},v(window.WebSocket,L))}return X(b,a),b}(h),P=null,x=function(){return null==P&&(P=new j),P},x().on("request",function(b){var c,d,e,f;return f=b.type,e=b.request,Pace.running||C.restartOnRequestAfter===!1&&"force"!==H(f)?void 0:(d=arguments,c=C.restartOnRequestAfter||0,"boolean"==typeof c&&(c=0),setTimeout(function(){var b,c,g,h,i,j;if(b="socket"===f?e.readyState<2:0<(h=e.readyState)&&4>h){for(Pace.restart(),i=Pace.sources,j=[],c=0,g=i.length;g>c;c++){if(I=i[c],I instanceof a){I.watch.apply(I,d);break}j.push(void 0)}return j}},c))}),a=function(){function a(){var a=this;this.elements=[],x().on("request",function(){return a.watch.apply(a,arguments)})}return a.prototype.watch=function(a){var b,c,d;return d=a.type,b=a.request,c="socket"===d?new m(b):new n(b),this.elements.push(c)},a}(),n=function(){function a(a){var b,c,d,e,f,g,h=this;if(this.progress=0,null!=window.ProgressEvent)for(c=null,a.addEventListener("progress",function(a){return h.progress=a.lengthComputable?100*a.loaded/a.total:h.progress+(100-h.progress)/2}),g=["load","abort","timeout","error"],d=0,e=g.length;e>d;d++)b=g[d],a.addEventListener(b,function(){return h.progress=100});else f=a.onreadystatechange,a.onreadystatechange=function(){var b;return 0===(b=a.readyState)||4===b?h.progress=100:3===a.readyState&&(h.progress=50),"function"==typeof f?f.apply(null,arguments):void 0}}return a}(),m=function(){function a(a){var b,c,d,e,f=this;for(this.progress=0,e=["error","open"],c=0,d=e.length;d>c;c++)b=e[c],a.addEventListener(b,function(){return f.progress=100})}return a}(),d=function(){function a(a){var b,c,d,f;for(null==a&&(a={}),this.elements=[],null==a.selectors&&(a.selectors=[]),f=a.selectors,c=0,d=f.length;d>c;c++)b=f[c],this.elements.push(new e(b))}return a}(),e=function(){function a(a){this.selector=a,this.progress=0,this.check()}return a.prototype.check=function(){var a=this;return document.querySelector(this.selector)?this.done():setTimeout(function(){return a.check()},C.elements.checkInterval)},a.prototype.done=function(){return this.progress=100},a}(),c=function(){function a(){var a,b,c=this;this.progress=null!=(b=this.states[document.readyState])?b:100,a=document.onreadystatechange,document.onreadystatechange=function(){return null!=c.states[document.readyState]&&(c.progress=c.states[document.readyState]),"function"==typeof a?a.apply(null,arguments):void 0}}return a.prototype.states={loading:0,interactive:50,complete:100},a}(),f=function(){function a(){var a,b,c,d,e,f=this;this.progress=0,a=0,e=[],d=0,c=B(),b=setInterval(function(){var g;return g=B()-c-50,c=B(),e.push(g),e.length>C.eventLag.sampleCount&&e.shift(),a=p(e),++d>=C.eventLag.minSamples&&a<C.eventLag.lagThreshold?(f.progress=100,clearInterval(b)):f.progress=100*(3/(a+3))},50)}return a}(),l=function(){function a(a){this.source=a,this.last=this.sinceLastUpdate=0,this.rate=C.initialRate,this.catchup=0,this.progress=this.lastProgress=0,null!=this.source&&(this.progress=E(this.source,"progress"))}return a.prototype.tick=function(a,b){var c;return null==b&&(b=E(this.source,"progress")),b>=100&&(this.done=!0),b===this.last?this.sinceLastUpdate+=a:(this.sinceLastUpdate&&(this.rate=(b-this.last)/this.sinceLastUpdate),this.catchup=(b-this.progress)/C.catchupTime,this.sinceLastUpdate=0,this.last=b),b>this.progress&&(this.progress+=this.catchup*a),c=1-Math.pow(this.progress/100,C.easeFactor),this.progress+=c*this.rate*a,this.progress=Math.min(this.lastProgress+C.maxProgressPerFrame,this.progress),this.progress=Math.max(0,this.progress),this.progress=Math.min(100,this.progress),this.lastProgress=this.progress,this.progress},a}(),J=null,G=null,q=null,K=null,o=null,r=null,Pace.running=!1,y=function(){return C.restartOnPushState?Pace.restart():void 0},null!=window.history.pushState&&(R=window.history.pushState,window.history.pushState=function(){return y(),R.apply(window.history,arguments)}),null!=window.history.replaceState&&(U=window.history.replaceState,window.history.replaceState=function(){return y(),U.apply(window.history,arguments)}),k={ajax:a,elements:d,document:c,eventLag:f},(A=function(){var a,c,d,e,f,g,h,i;for(Pace.sources=J=[],g=["ajax","elements","document","eventLag"],c=0,e=g.length;e>c;c++)a=g[c],C[a]!==!1&&J.push(new k[a](C[a]));for(i=null!=(h=C.extraSources)?h:[],d=0,f=i.length;f>d;d++)I=i[d],J.push(new I(C));return Pace.bar=q=new b,G=[],K=new l})(),Pace.stop=function(){return Pace.trigger("stop"),Pace.running=!1,q.destroy(),r=!0,null!=o&&("function"==typeof s&&s(o),o=null),A()},Pace.restart=function(){return Pace.trigger("restart"),Pace.stop(),Pace.start()},Pace.go=function(){return Pace.running=!0,q.render(),r=!1,o=F(function(a,b){var c,d,e,f,g,h,i,j,k,m,n,o,p,s,t,u,v;for(j=100-q.progress,d=o=0,e=!0,h=p=0,t=J.length;t>p;h=++p)for(I=J[h],m=null!=G[h]?G[h]:G[h]=[],g=null!=(v=I.elements)?v:[I],i=s=0,u=g.length;u>s;i=++s)f=g[i],k=null!=m[i]?m[i]:m[i]=new l(f),e&=k.done,k.done||(d++,o+=k.tick(a));return c=o/d,q.update(K.tick(a,c)),n=B(),q.done()||e||r?(q.update(100),Pace.trigger("done"),setTimeout(function(){return q.finish(),Pace.running=!1,Pace.trigger("hide")},Math.max(C.ghostTime,Math.min(C.minTime,B()-n)))):b()})},Pace.start=function(a){u(C,a),Pace.running=!0;try{q.render()}catch(b){i=b}return document.querySelector(".pace")?(Pace.trigger("start"),Pace.go()):setTimeout(Pace.start,50)},"function"==typeof define&&define.amd?define(function(){return Pace}):"object"==typeof exports?module.exports=Pace:C.startOnPageLoad&&Pace.start()}).call(this);
  191. });
  192. /*
  193. * BOX REFRESH BUTTON
  194. * ------------------
  195. * This is a custom plugin to use with the compenet BOX. It allows you to add
  196. * a refresh button to the box. It converts the box's state to a loading state.
  197. *
  198. * USAGE:
  199. * $("#box-widget").boxRefresh( options );
  200. * */
  201. (function($) {
  202. "use strict";
  203. $.fn.boxRefresh = function(options) {
  204. // Render options
  205. var settings = $.extend({
  206. //Refressh button selector
  207. trigger: ".refresh-btn",
  208. //File source to be loaded (e.g: ajax/src.php)
  209. source: "",
  210. //Callbacks
  211. onLoadStart: function(box) {
  212. }, //Right after the button has been clicked
  213. onLoadDone: function(box) {
  214. } //When the source has been loaded
  215. }, options);
  216. //The overlay
  217. var overlay = $('<div class="overlay"></div><div class="loading-img"></div>');
  218. return this.each(function() {
  219. //if a source is specified
  220. if (settings.source === "") {
  221. if (console) {
  222. console.log("Please specify a source first - boxRefresh()");
  223. }
  224. return;
  225. }
  226. //the box
  227. var box = $(this);
  228. //the button
  229. var rBtn = box.find(settings.trigger).first();
  230. //On trigger click
  231. rBtn.click(function(e) {
  232. e.preventDefault();
  233. //Add loading overlay
  234. start(box);
  235. //Perform ajax call
  236. box.find(".box-body").load(settings.source, function() {
  237. done(box);
  238. });
  239. });
  240. });
  241. function start(box) {
  242. //Add overlay and loading img
  243. box.append(overlay);
  244. settings.onLoadStart.call(box);
  245. }
  246. function done(box) {
  247. //Remove overlay and loading img
  248. box.find(overlay).remove();
  249. settings.onLoadDone.call(box);
  250. }
  251. };
  252. })(jQuery);
  253. /*
  254. * SIDEBAR MENU
  255. * ------------
  256. * This is a custom plugin for the sidebar menu. It provides a tree view.
  257. *
  258. * Usage:
  259. * $(".sidebar).tree();
  260. *
  261. * Note: This plugin does not accept any options. Instead, it only requires a class
  262. * added to the element that contains a sub-menu.
  263. *
  264. * When used with the sidebar, for example, it would look something like this:
  265. * <ul class='sidebar-menu'>
  266. * <li class="treeview active">
  267. * <a href="#>Menu</a>
  268. * <ul class='treeview-menu'>
  269. * <li class='active'><a href=#>Level 1</a></li>
  270. * </ul>
  271. * </li>
  272. * </ul>
  273. *
  274. * Add .active class to <li> elements if you want the menu to be open automatically
  275. * on page load. See above for an example.
  276. */
  277. (function($) {
  278. "use strict";
  279. $.fn.tree = function() {
  280. return this.each(function() {
  281. var btn = $(this).children("a").first();
  282. var menu = $(this).children(".treeview-menu").first();
  283. var isActive = $(this).hasClass('active');
  284. //initialize already active menus
  285. if (isActive) {
  286. menu.show();
  287. btn.children(".fa-angle-left").first().removeClass("fa-angle-left").addClass("fa-angle-down");
  288. }
  289. //Slide open or close the menu on link click
  290. btn.click(function(e) {
  291. e.preventDefault();
  292. if (isActive) {
  293. //Slide up to close menu
  294. menu.slideUp();
  295. isActive = false;
  296. btn.children(".fa-angle-down").first().removeClass("fa-angle-down").addClass("fa-angle-left");
  297. btn.parent("li").removeClass("active");
  298. } else {
  299. //Slide down to open menu
  300. menu.slideDown();
  301. isActive = true;
  302. btn.children(".fa-angle-left").first().removeClass("fa-angle-left").addClass("fa-angle-down");
  303. btn.parent("li").addClass("active");
  304. }
  305. });
  306. /* Add margins to submenu elements to give it a tree look */
  307. menu.find("li > a").each(function() {
  308. var pad = parseInt($(this).css("margin-left")) + 10;
  309. $(this).css({"margin-left": pad + "px"});
  310. });
  311. });
  312. };
  313. }(jQuery));
  314. /*
  315. * TODO LIST CUSTOM PLUGIN
  316. * -----------------------
  317. * This plugin depends on iCheck plugin for checkbox and radio inputs
  318. */
  319. (function($) {
  320. "use strict";
  321. $.fn.todolist = function(options) {
  322. // Render options
  323. var settings = $.extend({
  324. //When the user checks the input
  325. onCheck: function(ele) {
  326. },
  327. //When the user unchecks the input
  328. onUncheck: function(ele) {
  329. }
  330. }, options);
  331. return this.each(function() {
  332. $('input', this).on('ifChecked', function(event) {
  333. var ele = $(this).parents("li").first();
  334. ele.toggleClass("done");
  335. settings.onCheck.call(ele);
  336. });
  337. $('input', this).on('ifUnchecked', function(event) {
  338. var ele = $(this).parents("li").first();
  339. ele.toggleClass("done");
  340. settings.onUncheck.call(ele);
  341. });
  342. });
  343. };
  344. }(jQuery));
  345. /* CENTER ELEMENTS */
  346. (function($) {
  347. "use strict";
  348. jQuery.fn.center = function(parent) {
  349. if (parent) {
  350. parent = this.parent();
  351. } else {
  352. parent = window;
  353. }
  354. this.css({
  355. "position": "absolute",
  356. "top": ((($(parent).height() - this.outerHeight()) / 2) + $(parent).scrollTop() + "px"),
  357. "left": ((($(parent).width() - this.outerWidth()) / 2) + $(parent).scrollLeft() + "px")
  358. });
  359. return this;
  360. }
  361. }(jQuery));
  362. /*
  363. * jQuery resize event - v1.1 - 3/14/2010
  364. * http://benalman.com/projects/jquery-resize-plugin/
  365. *
  366. * Copyright (c) 2010 "Cowboy" Ben Alman
  367. * Dual licensed under the MIT and GPL licenses.
  368. * http://benalman.com/about/license/
  369. */
  370. (function($, h, c) {
  371. var a = $([]), e = $.resize = $.extend($.resize, {}), i, k = "setTimeout", j = "resize", d = j + "-special-event", b = "delay", f = "throttleWindow";
  372. e[b] = 250;
  373. e[f] = true;
  374. $.event.special[j] = {setup: function() {
  375. if (!e[f] && this[k]) {
  376. return false;
  377. }
  378. var l = $(this);
  379. a = a.add(l);
  380. $.data(this, d, {w: l.width(), h: l.height()});
  381. if (a.length === 1) {
  382. g();
  383. }
  384. }, teardown: function() {
  385. if (!e[f] && this[k]) {
  386. return false
  387. }
  388. var l = $(this);
  389. a = a.not(l);
  390. l.removeData(d);
  391. if (!a.length) {
  392. clearTimeout(i);
  393. }
  394. }, add: function(l) {
  395. if (!e[f] && this[k]) {
  396. return false
  397. }
  398. var n;
  399. function m(s, o, p) {
  400. var q = $(this), r = $.data(this, d);
  401. r.w = o !== c ? o : q.width();
  402. r.h = p !== c ? p : q.height();
  403. n.apply(this, arguments)
  404. }
  405. if ($.isFunction(l)) {
  406. n = l;
  407. return m
  408. } else {
  409. n = l.handler;
  410. l.handler = m
  411. }
  412. }};
  413. function g() {
  414. i = h[k](function() {
  415. a.each(function() {
  416. var n = $(this), m = n.width(), l = n.height(), o = $.data(this, d);
  417. if (m !== o.w || l !== o.h) {
  418. n.trigger(j, [o.w = m, o.h = l])
  419. }
  420. });
  421. g()
  422. }, e[b])
  423. }}
  424. )(jQuery, this);
  425. /*!
  426. * iCheck v1.0.1, http://git.io/arlzeA
  427. * =================================
  428. * Powerful jQuery and Zepto plugin for checkboxes and radio buttons customization
  429. *
  430. * (c) 2013 Damir Sultanov, http://fronteed.com
  431. * MIT Licensed
  432. */
  433. (function(f) {
  434. jQuery.fn.extend({slimScroll: function(h) {
  435. var a = f.extend({width: "auto", height: "250px", size: "7px", color: "#000", position: "right", distance: "1px", start: "top", opacity: 0.4, alwaysVisible: !1, disableFadeOut: !1, railVisible: !1, railColor: "#333", railOpacity: 0.2, railDraggable: !0, railClass: "slimScrollRail", barClass: "slimScrollBar", wrapperClass: "slimScrollDiv", allowPageScroll: !1, wheelStep: 20, touchScrollStep: 200, borderRadius: "0px", railBorderRadius: "0px"}, h);
  436. this.each(function() {
  437. function r(d) {
  438. if (s) {
  439. d = d ||
  440. window.event;
  441. var c = 0;
  442. d.wheelDelta && (c = -d.wheelDelta / 120);
  443. d.detail && (c = d.detail / 3);
  444. f(d.target || d.srcTarget || d.srcElement).closest("." + a.wrapperClass).is(b.parent()) && m(c, !0);
  445. d.preventDefault && !k && d.preventDefault();
  446. k || (d.returnValue = !1)
  447. }
  448. }
  449. function m(d, f, h) {
  450. k = !1;
  451. var e = d, g = b.outerHeight() - c.outerHeight();
  452. f && (e = parseInt(c.css("top")) + d * parseInt(a.wheelStep) / 100 * c.outerHeight(), e = Math.min(Math.max(e, 0), g), e = 0 < d ? Math.ceil(e) : Math.floor(e), c.css({top: e + "px"}));
  453. l = parseInt(c.css("top")) / (b.outerHeight() - c.outerHeight());
  454. e = l * (b[0].scrollHeight - b.outerHeight());
  455. h && (e = d, d = e / b[0].scrollHeight * b.outerHeight(), d = Math.min(Math.max(d, 0), g), c.css({top: d + "px"}));
  456. b.scrollTop(e);
  457. b.trigger("slimscrolling", ~~e);
  458. v();
  459. p()
  460. }
  461. function C() {
  462. window.addEventListener ? (this.addEventListener("DOMMouseScroll", r, !1), this.addEventListener("mousewheel", r, !1), this.addEventListener("MozMousePixelScroll", r, !1)) : document.attachEvent("onmousewheel", r)
  463. }
  464. function w() {
  465. u = Math.max(b.outerHeight() / b[0].scrollHeight * b.outerHeight(), D);
  466. c.css({height: u + "px"});
  467. var a = u == b.outerHeight() ? "none" : "block";
  468. c.css({display: a})
  469. }
  470. function v() {
  471. w();
  472. clearTimeout(A);
  473. l == ~~l ? (k = a.allowPageScroll, B != l && b.trigger("slimscroll", 0 == ~~l ? "top" : "bottom")) : k = !1;
  474. B = l;
  475. u >= b.outerHeight() ? k = !0 : (c.stop(!0, !0).fadeIn("fast"), a.railVisible && g.stop(!0, !0).fadeIn("fast"))
  476. }
  477. function p() {
  478. a.alwaysVisible || (A = setTimeout(function() {
  479. a.disableFadeOut && s || (x || y) || (c.fadeOut("slow"), g.fadeOut("slow"))
  480. }, 1E3))
  481. }
  482. var s, x, y, A, z, u, l, B, D = 30, k = !1, b = f(this);
  483. if (b.parent().hasClass(a.wrapperClass)) {
  484. var n = b.scrollTop(),
  485. c = b.parent().find("." + a.barClass), g = b.parent().find("." + a.railClass);
  486. w();
  487. if (f.isPlainObject(h)) {
  488. if ("height"in h && "auto" == h.height) {
  489. b.parent().css("height", "auto");
  490. b.css("height", "auto");
  491. var q = b.parent().parent().height();
  492. b.parent().css("height", q);
  493. b.css("height", q)
  494. }
  495. if ("scrollTo"in h)
  496. n = parseInt(a.scrollTo);
  497. else if ("scrollBy"in h)
  498. n += parseInt(a.scrollBy);
  499. else if ("destroy"in h) {
  500. c.remove();
  501. g.remove();
  502. b.unwrap();
  503. return
  504. }
  505. m(n, !1, !0)
  506. }
  507. } else {
  508. a.height = "auto" == a.height ? b.parent().height() : a.height;
  509. n = f("<div></div>").addClass(a.wrapperClass).css({position: "relative",
  510. overflow: "hidden", width: a.width, height: a.height});
  511. b.css({overflow: "hidden", width: a.width, height: a.height});
  512. var g = f("<div></div>").addClass(a.railClass).css({width: a.size, height: "100%", position: "absolute", top: 0, display: a.alwaysVisible && a.railVisible ? "block" : "none", "border-radius": a.railBorderRadius, background: a.railColor, opacity: a.railOpacity, zIndex: 90}), c = f("<div></div>").addClass(a.barClass).css({background: a.color, width: a.size, position: "absolute", top: 0, opacity: a.opacity, display: a.alwaysVisible ?
  513. "block" : "none", "border-radius": a.borderRadius, BorderRadius: a.borderRadius, MozBorderRadius: a.borderRadius, WebkitBorderRadius: a.borderRadius, zIndex: 99}), q = "right" == a.position ? {right: a.distance} : {left: a.distance};
  514. g.css(q);
  515. c.css(q);
  516. b.wrap(n);
  517. b.parent().append(c);
  518. b.parent().append(g);
  519. a.railDraggable && c.bind("mousedown", function(a) {
  520. var b = f(document);
  521. y = !0;
  522. t = parseFloat(c.css("top"));
  523. pageY = a.pageY;
  524. b.bind("mousemove.slimscroll", function(a) {
  525. currTop = t + a.pageY - pageY;
  526. c.css("top", currTop);
  527. m(0, c.position().top, !1)
  528. });
  529. b.bind("mouseup.slimscroll", function(a) {
  530. y = !1;
  531. p();
  532. b.unbind(".slimscroll")
  533. });
  534. return!1
  535. }).bind("selectstart.slimscroll", function(a) {
  536. a.stopPropagation();
  537. a.preventDefault();
  538. return!1
  539. });
  540. g.hover(function() {
  541. v()
  542. }, function() {
  543. p()
  544. });
  545. c.hover(function() {
  546. x = !0
  547. }, function() {
  548. x = !1
  549. });
  550. b.hover(function() {
  551. s = !0;
  552. v();
  553. p()
  554. }, function() {
  555. s = !1;
  556. p()
  557. });
  558. b.bind("touchstart", function(a, b) {
  559. a.originalEvent.touches.length && (z = a.originalEvent.touches[0].pageY)
  560. });
  561. b.bind("touchmove", function(b) {
  562. k || b.originalEvent.preventDefault();
  563. b.originalEvent.touches.length &&
  564. (m((z - b.originalEvent.touches[0].pageY) / a.touchScrollStep, !0), z = b.originalEvent.touches[0].pageY)
  565. });
  566. w();
  567. "bottom" === a.start ? (c.css({top: b.outerHeight() - c.outerHeight()}), m(0, !0)) : "top" !== a.start && (m(f(a.start).position().top, null, !0), a.alwaysVisible || c.hide());
  568. C()
  569. }
  570. });
  571. return this
  572. }});
  573. jQuery.fn.extend({slimscroll: jQuery.fn.slimScroll})
  574. })(jQuery);
  575. /*! iCheck v1.0.1 by Damir Sultanov, http://git.io/arlzeA, MIT Licensed */
  576. (function(h) {
  577. function F(a, b, d) {
  578. var c = a[0], e = /er/.test(d) ? m : /bl/.test(d) ? s : l, f = d == H ? {checked: c[l], disabled: c[s], indeterminate: "true" == a.attr(m) || "false" == a.attr(w)} : c[e];
  579. if (/^(ch|di|in)/.test(d) && !f)
  580. D(a, e);
  581. else if (/^(un|en|de)/.test(d) && f)
  582. t(a, e);
  583. else if (d == H)
  584. for (e in f)
  585. f[e] ? D(a, e, !0) : t(a, e, !0);
  586. else if (!b || "toggle" == d) {
  587. if (!b)
  588. a[p]("ifClicked");
  589. f ? c[n] !== u && t(a, e) : D(a, e)
  590. }
  591. }
  592. function D(a, b, d) {
  593. var c = a[0], e = a.parent(), f = b == l, A = b == m, B = b == s, K = A ? w : f ? E : "enabled", p = k(a, K + x(c[n])), N = k(a, b + x(c[n]));
  594. if (!0 !== c[b]) {
  595. if (!d &&
  596. b == l && c[n] == u && c.name) {
  597. var C = a.closest("form"), r = 'input[name="' + c.name + '"]', r = C.length ? C.find(r) : h(r);
  598. r.each(function() {
  599. this !== c && h(this).data(q) && t(h(this), b)
  600. })
  601. }
  602. A ? (c[b] = !0, c[l] && t(a, l, "force")) : (d || (c[b] = !0), f && c[m] && t(a, m, !1));
  603. L(a, f, b, d)
  604. }
  605. c[s] && k(a, y, !0) && e.find("." + I).css(y, "default");
  606. e[v](N || k(a, b) || "");
  607. B ? e.attr("aria-disabled", "true") : e.attr("aria-checked", A ? "mixed" : "true");
  608. e[z](p || k(a, K) || "")
  609. }
  610. function t(a, b, d) {
  611. var c = a[0], e = a.parent(), f = b == l, h = b == m, q = b == s, p = h ? w : f ? E : "enabled", t = k(a, p + x(c[n])),
  612. u = k(a, b + x(c[n]));
  613. if (!1 !== c[b]) {
  614. if (h || !d || "force" == d)
  615. c[b] = !1;
  616. L(a, f, p, d)
  617. }
  618. !c[s] && k(a, y, !0) && e.find("." + I).css(y, "pointer");
  619. e[z](u || k(a, b) || "");
  620. q ? e.attr("aria-disabled", "false") : e.attr("aria-checked", "false");
  621. e[v](t || k(a, p) || "")
  622. }
  623. function M(a, b) {
  624. if (a.data(q)) {
  625. a.parent().html(a.attr("style", a.data(q).s || ""));
  626. if (b)
  627. a[p](b);
  628. a.off(".i").unwrap();
  629. h(G + '[for="' + a[0].id + '"]').add(a.closest(G)).off(".i")
  630. }
  631. }
  632. function k(a, b, d) {
  633. if (a.data(q))
  634. return a.data(q).o[b + (d ? "" : "Class")]
  635. }
  636. function x(a) {
  637. return a.charAt(0).toUpperCase() +
  638. a.slice(1)
  639. }
  640. function L(a, b, d, c) {
  641. if (!c) {
  642. if (b)
  643. a[p]("ifToggled");
  644. a[p]("ifChanged")[p]("if" + x(d))
  645. }
  646. }
  647. var q = "iCheck", I = q + "-helper", u = "radio", l = "checked", E = "un" + l, s = "disabled", w = "determinate", m = "in" + w, H = "update", n = "type", v = "addClass", z = "removeClass", p = "trigger", G = "label", y = "cursor", J = /ipad|iphone|ipod|android|blackberry|windows phone|opera mini|silk/i.test(navigator.userAgent);
  648. h.fn[q] = function(a, b) {
  649. var d = 'input[type="checkbox"], input[type="' + u + '"]', c = h(), e = function(a) {
  650. a.each(function() {
  651. var a = h(this);
  652. c = a.is(d) ?
  653. c.add(a) : c.add(a.find(d))
  654. })
  655. };
  656. if (/^(check|uncheck|toggle|indeterminate|determinate|disable|enable|update|destroy)$/i.test(a))
  657. return a = a.toLowerCase(), e(this), c.each(function() {
  658. var c = h(this);
  659. "destroy" == a ? M(c, "ifDestroyed") : F(c, !0, a);
  660. h.isFunction(b) && b()
  661. });
  662. if ("object" != typeof a && a)
  663. return this;
  664. var f = h.extend({checkedClass: l, disabledClass: s, indeterminateClass: m, labelHover: !0, aria: !1}, a), k = f.handle, B = f.hoverClass || "hover", x = f.focusClass || "focus", w = f.activeClass || "active", y = !!f.labelHover, C = f.labelHoverClass ||
  665. "hover", r = ("" + f.increaseArea).replace("%", "") | 0;
  666. if ("checkbox" == k || k == u)
  667. d = 'input[type="' + k + '"]';
  668. -50 > r && (r = -50);
  669. e(this);
  670. return c.each(function() {
  671. var a = h(this);
  672. M(a);
  673. var c = this, b = c.id, e = -r + "%", d = 100 + 2 * r + "%", d = {position: "absolute", top: e, left: e, display: "block", width: d, height: d, margin: 0, padding: 0, background: "#fff", border: 0, opacity: 0}, e = J ? {position: "absolute", visibility: "hidden"} : r ? d : {position: "absolute", opacity: 0}, k = "checkbox" == c[n] ? f.checkboxClass || "icheckbox" : f.radioClass || "i" + u, m = h(G + '[for="' + b + '"]').add(a.closest(G)),
  674. A = !!f.aria, E = q + "-" + Math.random().toString(36).replace("0.", ""), g = '<div class="' + k + '" ' + (A ? 'role="' + c[n] + '" ' : "");
  675. m.length && A && m.each(function() {
  676. g += 'aria-labelledby="';
  677. this.id ? g += this.id : (this.id = E, g += E);
  678. g += '"'
  679. });
  680. g = a.wrap(g + "/>")[p]("ifCreated").parent().append(f.insert);
  681. d = h('<ins class="' + I + '"/>').css(d).appendTo(g);
  682. a.data(q, {o: f, s: a.attr("style")}).css(e);
  683. f.inheritClass && g[v](c.className || "");
  684. f.inheritID && b && g.attr("id", q + "-" + b);
  685. "static" == g.css("position") && g.css("position", "relative");
  686. F(a, !0, H);
  687. if (m.length)
  688. m.on("click.i mouseover.i mouseout.i touchbegin.i touchend.i", function(b) {
  689. var d = b[n], e = h(this);
  690. if (!c[s]) {
  691. if ("click" == d) {
  692. if (h(b.target).is("a"))
  693. return;
  694. F(a, !1, !0)
  695. } else
  696. y && (/ut|nd/.test(d) ? (g[z](B), e[z](C)) : (g[v](B), e[v](C)));
  697. if (J)
  698. b.stopPropagation();
  699. else
  700. return!1
  701. }
  702. });
  703. a.on("click.i focus.i blur.i keyup.i keydown.i keypress.i", function(b) {
  704. var d = b[n];
  705. b = b.keyCode;
  706. if ("click" == d)
  707. return!1;
  708. if ("keydown" == d && 32 == b)
  709. return c[n] == u && c[l] || (c[l] ? t(a, l) : D(a, l)), !1;
  710. if ("keyup" == d && c[n] == u)
  711. !c[l] && D(a, l);
  712. else if (/us|ur/.test(d))
  713. g["blur" ==
  714. d ? z : v](x)
  715. });
  716. d.on("click mousedown mouseup mouseover mouseout touchbegin.i touchend.i", function(b) {
  717. var d = b[n], e = /wn|up/.test(d) ? w : B;
  718. if (!c[s]) {
  719. if ("click" == d)
  720. F(a, !1, !0);
  721. else {
  722. if (/wn|er|in/.test(d))
  723. g[v](e);
  724. else
  725. g[z](e + " " + w);
  726. if (m.length && y && e == B)
  727. m[/ut|nd/.test(d) ? z : v](C)
  728. }
  729. if (J)
  730. b.stopPropagation();
  731. else
  732. return!1
  733. }
  734. })
  735. })
  736. }
  737. })(window.jQuery || window.Zepto);