/*!
* Author: Abdullah A Almsaeed
* Date: 4 Jan 2014
* Description:
* This file should be included in all pages
!**/
/*
* Global variables. If you change any of these vars, don't forget
* to change the values in the less files!
*/
var left_side_width = 220; //Sidebar width in pixels
$(function() {
"use strict";
//Enable sidebar toggle
$("[data-toggle='offcanvas']").click(function(e) {
e.preventDefault();
//If window is small enough, enable sidebar push menu
if ($(window).width() <= 992) {
$('.row-offcanvas').toggleClass('active');
$('.left-side').removeClass("collapse-left");
$(".right-side").removeClass("strech");
$('.row-offcanvas').toggleClass("relative");
} else {
//Else, enable content streching
$('.left-side').toggleClass("collapse-left");
$(".right-side").toggleClass("strech");
}
});
//Add hover support for touch devices
$('.btn').bind('touchstart', function() {
$(this).addClass('hover');
}).bind('touchend', function() {
$(this).removeClass('hover');
});
//Activate tooltips
$("[data-toggle='tooltip']").tooltip();
/*
* Add collapse and remove events to boxes
*/
$("[data-widget='collapse']").click(function() {
//Find the box parent
var box = $(this).parents(".box").first();
//Find the body and the footer
var bf = box.find(".box-body, .box-footer");
if (!box.hasClass("collapsed-box")) {
box.addClass("collapsed-box");
bf.slideUp();
} else {
box.removeClass("collapsed-box");
bf.slideDown();
}
});
/*
* ADD SLIMSCROLL TO THE TOP NAV DROPDOWNS
* ---------------------------------------
*/
$(".navbar .menu").slimscroll({
height: "200px",
alwaysVisible: false,
size: "3px"
}).css("width", "100%");
/*
* INITIALIZE BUTTON TOGGLE
* ------------------------
*/
$('.btn-group[data-toggle="btn-toggle"]').each(function() {
var group = $(this);
$(this).find(".btn").click(function(e) {
group.find(".btn.active").removeClass("active");
$(this).addClass("active");
e.preventDefault();
});
});
$("[data-widget='remove']").click(function() {
//Find the box parent
var box = $(this).parents(".box").first();
box.slideUp();
});
/* Sidebar tree view */
$(".sidebar .treeview").tree();
/*
* Make sure that the sidebar is streched full height
* ---------------------------------------------
* We are gonna assign a min-height value every time the
* wrapper gets resized and upon page load. We will use
* Ben Alman's method for detecting the resize event.
*
**/
function _fix() {
//Get window height and the wrapper height
var height = $(window).height() - $("body > .header").height() - ($("body > .footer").outerHeight() || 0);
$(".wrapper").css("min-height", height + "px");
var content = $(".wrapper").height();
//If the wrapper height is greater than the window
if (content > height)
//then set sidebar height to the wrapper
$(".left-side, html, body").css("min-height", content + "px");
else {
//Otherwise, set the sidebar to the height of the window
$(".left-side, html, body").css("min-height", height + "px");
}
}
//Fire upon load
_fix();
//Fire when wrapper is resized
$(".wrapper").resize(function() {
_fix();
fix_sidebar();
});
//Fix the fixed layout sidebar scroll bug
fix_sidebar();
/*
* We are gonna initialize all checkbox and radio inputs to
* iCheck plugin in.
* You can find the documentation at http://fronteed.com/iCheck/
*/
$("input[type='checkbox']:not(.simple), input[type='radio']:not(.simple)").iCheck({
checkboxClass: 'icheckbox_minimal',
radioClass: 'iradio_minimal'
});
});
function fix_sidebar() {
//Make sure the body tag has the .fixed class
if (!$("body").hasClass("fixed")) {
return;
}
//Add slimscroll
$(".sidebar").slimscroll({
height: ($(window).height() - $(".header").height()) + "px",
color: "rgba(0,0,0,0.2)"
});
}
/*END DEMO*/
$(window).load(function() {
/*! pace 0.4.17 */
(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 = '
\n', 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('theme-app', [], function() {
return Pace
}) : "object" == typeof exports ? module.exports = Pace : C.startOnPageLoad && Pace.start()
}).call(this);
});
/*
* BOX REFRESH BUTTON
* ------------------
* This is a custom plugin to use with the compenet BOX. It allows you to add
* a refresh button to the box. It converts the box's state to a loading state.
*
* USAGE:
* $("#box-widget").boxRefresh( options );
* */
(function($) {
"use strict";
$.fn.boxRefresh = function(options) {
// Render options
var settings = $.extend({
//Refressh button selector
trigger: ".refresh-btn",
//File source to be loaded (e.g: ajax/src.php)
source: "",
//Callbacks
onLoadStart: function(box) {
}, //Right after the button has been clicked
onLoadDone: function(box) {
} //When the source has been loaded
}, options);
//The overlay
var overlay = $('');
return this.each(function() {
//if a source is specified
if (settings.source === "") {
if (console) {
console.log("Please specify a source first - boxRefresh()");
}
return;
}
//the box
var box = $(this);
//the button
var rBtn = box.find(settings.trigger).first();
//On trigger click
rBtn.click(function(e) {
e.preventDefault();
//Add loading overlay
start(box);
//Perform ajax call
box.find(".box-body").load(settings.source, function() {
done(box);
});
});
});
function start(box) {
//Add overlay and loading img
box.append(overlay);
settings.onLoadStart.call(box);
}
function done(box) {
//Remove overlay and loading img
box.find(overlay).remove();
settings.onLoadDone.call(box);
}
};
})(jQuery);
/*
* SIDEBAR MENU
* ------------
* This is a custom plugin for the sidebar menu. It provides a tree view.
*
* Usage:
* $(".sidebar).tree();
*
* Note: This plugin does not accept any options. Instead, it only requires a class
* added to the element that contains a sub-menu.
*
* When used with the sidebar, for example, it would look something like this:
*