aboutsummaryrefslogtreecommitdiffhomepage
path: root/public/bower_components/admin-lte/dist/js
diff options
context:
space:
mode:
authorMarvin Borner2018-07-13 19:06:45 +0200
committerMarvin Borner2018-07-13 19:06:45 +0200
commit6fcfb7c04d32e1c8b26a312295bf7ac3ec2d2ad7 (patch)
treedbc87ef16fa01d5d99116de283592b8fe5e02944 /public/bower_components/admin-lte/dist/js
parentdfd839f27146df0ad0494e11734fc7d310c70ebf (diff)
Fixed many permissions and began admin interface
Diffstat (limited to 'public/bower_components/admin-lte/dist/js')
-rw-r--r--public/bower_components/admin-lte/dist/js/adminlte.js1129
-rw-r--r--public/bower_components/admin-lte/dist/js/adminlte.min.js14
-rw-r--r--public/bower_components/admin-lte/dist/js/demo.js349
-rw-r--r--public/bower_components/admin-lte/dist/js/pages/dashboard.js210
-rw-r--r--public/bower_components/admin-lte/dist/js/pages/dashboard2.js274
5 files changed, 1976 insertions, 0 deletions
diff --git a/public/bower_components/admin-lte/dist/js/adminlte.js b/public/bower_components/admin-lte/dist/js/adminlte.js
new file mode 100644
index 0000000..c413316
--- /dev/null
+++ b/public/bower_components/admin-lte/dist/js/adminlte.js
@@ -0,0 +1,1129 @@
+/*! AdminLTE app.js
+* ================
+* Main JS application file for AdminLTE v2. This file
+* should be included in all pages. It controls some layout
+* options and implements exclusive AdminLTE plugins.
+*
+* @Author Almsaeed Studio
+* @Support <https://www.almsaeedstudio.com>
+* @Email <abdullah@almsaeedstudio.com>
+* @version 2.4.2
+* @repository git://github.com/almasaeed2010/AdminLTE.git
+* @license MIT <http://opensource.org/licenses/MIT>
+*/
+
+// Make sure jQuery has been loaded
+if (typeof jQuery === 'undefined') {
+throw new Error('AdminLTE requires jQuery')
+}
+
+/* BoxRefresh()
+ * =========
+ * Adds AJAX content control to a box.
+ *
+ * @Usage: $('#my-box').boxRefresh(options)
+ * or add [data-widget="box-refresh"] to the box element
+ * Pass any option as data-option="value"
+ */
++function ($) {
+ 'use strict';
+
+ var DataKey = 'lte.boxrefresh';
+
+ var Default = {
+ source : '',
+ params : {},
+ trigger : '.refresh-btn',
+ content : '.box-body',
+ loadInContent : true,
+ responseType : '',
+ overlayTemplate: '<div class="overlay"><div class="fa fa-refresh fa-spin"></div></div>',
+ onLoadStart : function () {
+ },
+ onLoadDone : function (response) {
+ return response;
+ }
+ };
+
+ var Selector = {
+ data: '[data-widget="box-refresh"]'
+ };
+
+ // BoxRefresh Class Definition
+ // =========================
+ var BoxRefresh = function (element, options) {
+ this.element = element;
+ this.options = options;
+ this.$overlay = $(options.overlay);
+
+ if (options.source === '') {
+ throw new Error('Source url was not defined. Please specify a url in your BoxRefresh source option.');
+ }
+
+ this._setUpListeners();
+ this.load();
+ };
+
+ BoxRefresh.prototype.load = function () {
+ this._addOverlay();
+ this.options.onLoadStart.call($(this));
+
+ $.get(this.options.source, this.options.params, function (response) {
+ if (this.options.loadInContent) {
+ $(this.options.content).html(response);
+ }
+ this.options.onLoadDone.call($(this), response);
+ this._removeOverlay();
+ }.bind(this), this.options.responseType !== '' && this.options.responseType);
+ };
+
+ // Private
+
+ BoxRefresh.prototype._setUpListeners = function () {
+ $(this.element).on('click', Selector.trigger, function (event) {
+ if (event) event.preventDefault();
+ this.load();
+ }.bind(this));
+ };
+
+ BoxRefresh.prototype._addOverlay = function () {
+ $(this.element).append(this.$overlay);
+ };
+
+ BoxRefresh.prototype._removeOverlay = function () {
+ $(this.element).remove(this.$overlay);
+ };
+
+ // Plugin Definition
+ // =================
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this);
+ var data = $this.data(DataKey);
+
+ if (!data) {
+ var options = $.extend({}, Default, $this.data(), typeof option == 'object' && option);
+ $this.data(DataKey, (data = new BoxRefresh($this, options)));
+ }
+
+ if (typeof data == 'string') {
+ if (typeof data[option] == 'undefined') {
+ throw new Error('No method named ' + option);
+ }
+ data[option]();
+ }
+ });
+ }
+
+ var old = $.fn.boxRefresh;
+
+ $.fn.boxRefresh = Plugin;
+ $.fn.boxRefresh.Constructor = BoxRefresh;
+
+ // No Conflict Mode
+ // ================
+ $.fn.boxRefresh.noConflict = function () {
+ $.fn.boxRefresh = old;
+ return this;
+ };
+
+ // BoxRefresh Data API
+ // =================
+ $(window).on('load', function () {
+ $(Selector.data).each(function () {
+ Plugin.call($(this));
+ });
+ });
+
+}(jQuery);
+
+
+/* BoxWidget()
+ * ======
+ * Adds box widget functions to boxes.
+ *
+ * @Usage: $('.my-box').boxWidget(options)
+ * This plugin auto activates on any element using the `.box` class
+ * Pass any option as data-option="value"
+ */
++function ($) {
+ 'use strict';
+
+ var DataKey = 'lte.boxwidget';
+
+ var Default = {
+ animationSpeed : 500,
+ collapseTrigger: '[data-widget="collapse"]',
+ removeTrigger : '[data-widget="remove"]',
+ collapseIcon : 'fa-minus',
+ expandIcon : 'fa-plus',
+ removeIcon : 'fa-times'
+ };
+
+ var Selector = {
+ data : '.box',
+ collapsed: '.collapsed-box',
+ header : '.box-header',
+ body : '.box-body',
+ footer : '.box-footer',
+ tools : '.box-tools'
+ };
+
+ var ClassName = {
+ collapsed: 'collapsed-box'
+ };
+
+ var Event = {
+ collapsed: 'collapsed.boxwidget',
+ expanded : 'expanded.boxwidget',
+ removed : 'removed.boxwidget'
+ };
+
+ // BoxWidget Class Definition
+ // =====================
+ var BoxWidget = function (element, options) {
+ this.element = element;
+ this.options = options;
+
+ this._setUpListeners();
+ };
+
+ BoxWidget.prototype.toggle = function () {
+ var isOpen = !$(this.element).is(Selector.collapsed);
+
+ if (isOpen) {
+ this.collapse();
+ } else {
+ this.expand();
+ }
+ };
+
+ BoxWidget.prototype.expand = function () {
+ var expandedEvent = $.Event(Event.expanded);
+ var collapseIcon = this.options.collapseIcon;
+ var expandIcon = this.options.expandIcon;
+
+ $(this.element).removeClass(ClassName.collapsed);
+
+ $(this.element)
+ .children(Selector.header + ', ' + Selector.body + ', ' + Selector.footer)
+ .children(Selector.tools)
+ .find('.' + expandIcon)
+ .removeClass(expandIcon)
+ .addClass(collapseIcon);
+
+ $(this.element).children(Selector.body + ', ' + Selector.footer)
+ .slideDown(this.options.animationSpeed, function () {
+ $(this.element).trigger(expandedEvent);
+ }.bind(this));
+ };
+
+ BoxWidget.prototype.collapse = function () {
+ var collapsedEvent = $.Event(Event.collapsed);
+ var collapseIcon = this.options.collapseIcon;
+ var expandIcon = this.options.expandIcon;
+
+ $(this.element)
+ .children(Selector.header + ', ' + Selector.body + ', ' + Selector.footer)
+ .children(Selector.tools)
+ .find('.' + collapseIcon)
+ .removeClass(collapseIcon)
+ .addClass(expandIcon);
+
+ $(this.element).children(Selector.body + ', ' + Selector.footer)
+ .slideUp(this.options.animationSpeed, function () {
+ $(this.element).addClass(ClassName.collapsed);
+ $(this.element).trigger(collapsedEvent);
+ }.bind(this));
+ };
+
+ BoxWidget.prototype.remove = function () {
+ var removedEvent = $.Event(Event.removed);
+
+ $(this.element).slideUp(this.options.animationSpeed, function () {
+ $(this.element).trigger(removedEvent);
+ $(this.element).remove();
+ }.bind(this));
+ };
+
+ // Private
+
+ BoxWidget.prototype._setUpListeners = function () {
+ var that = this;
+
+ $(this.element).on('click', this.options.collapseTrigger, function (event) {
+ if (event) event.preventDefault();
+ that.toggle($(this));
+ return false;
+ });
+
+ $(this.element).on('click', this.options.removeTrigger, function (event) {
+ if (event) event.preventDefault();
+ that.remove($(this));
+ return false;
+ });
+ };
+
+ // Plugin Definition
+ // =================
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this);
+ var data = $this.data(DataKey);
+
+ if (!data) {
+ var options = $.extend({}, Default, $this.data(), typeof option == 'object' && option);
+ $this.data(DataKey, (data = new BoxWidget($this, options)));
+ }
+
+ if (typeof option == 'string') {
+ if (typeof data[option] == 'undefined') {
+ throw new Error('No method named ' + option);
+ }
+ data[option]();
+ }
+ });
+ }
+
+ var old = $.fn.boxWidget;
+
+ $.fn.boxWidget = Plugin;
+ $.fn.boxWidget.Constructor = BoxWidget;
+
+ // No Conflict Mode
+ // ================
+ $.fn.boxWidget.noConflict = function () {
+ $.fn.boxWidget = old;
+ return this;
+ };
+
+ // BoxWidget Data API
+ // ==================
+ $(window).on('load', function () {
+ $(Selector.data).each(function () {
+ Plugin.call($(this));
+ });
+ });
+}(jQuery);
+
+
+/* ControlSidebar()
+ * ===============
+ * Toggles the state of the control sidebar
+ *
+ * @Usage: $('#control-sidebar-trigger').controlSidebar(options)
+ * or add [data-toggle="control-sidebar"] to the trigger
+ * Pass any option as data-option="value"
+ */
++function ($) {
+ 'use strict';
+
+ var DataKey = 'lte.controlsidebar';
+
+ var Default = {
+ slide: true
+ };
+
+ var Selector = {
+ sidebar: '.control-sidebar',
+ data : '[data-toggle="control-sidebar"]',
+ open : '.control-sidebar-open',
+ bg : '.control-sidebar-bg',
+ wrapper: '.wrapper',
+ content: '.content-wrapper',
+ boxed : '.layout-boxed'
+ };
+
+ var ClassName = {
+ open : 'control-sidebar-open',
+ fixed: 'fixed'
+ };
+
+ var Event = {
+ collapsed: 'collapsed.controlsidebar',
+ expanded : 'expanded.controlsidebar'
+ };
+
+ // ControlSidebar Class Definition
+ // ===============================
+ var ControlSidebar = function (element, options) {
+ this.element = element;
+ this.options = options;
+ this.hasBindedResize = false;
+
+ this.init();
+ };
+
+ ControlSidebar.prototype.init = function () {
+ // Add click listener if the element hasn't been
+ // initialized using the data API
+ if (!$(this.element).is(Selector.data)) {
+ $(this).on('click', this.toggle);
+ }
+
+ this.fix();
+ $(window).resize(function () {
+ this.fix();
+ }.bind(this));
+ };
+
+ ControlSidebar.prototype.toggle = function (event) {
+ if (event) event.preventDefault();
+
+ this.fix();
+
+ if (!$(Selector.sidebar).is(Selector.open) && !$('body').is(Selector.open)) {
+ this.expand();
+ } else {
+ this.collapse();
+ }
+ };
+
+ ControlSidebar.prototype.expand = function () {
+ if (!this.options.slide) {
+ $('body').addClass(ClassName.open);
+ } else {
+ $(Selector.sidebar).addClass(ClassName.open);
+ }
+
+ $(this.element).trigger($.Event(Event.expanded));
+ };
+
+ ControlSidebar.prototype.collapse = function () {
+ $('body, ' + Selector.sidebar).removeClass(ClassName.open);
+ $(this.element).trigger($.Event(Event.collapsed));
+ };
+
+ ControlSidebar.prototype.fix = function () {
+ if ($('body').is(Selector.boxed)) {
+ this._fixForBoxed($(Selector.bg));
+ }
+ };
+
+ // Private
+
+ ControlSidebar.prototype._fixForBoxed = function (bg) {
+ bg.css({
+ position: 'absolute',
+ height : $(Selector.wrapper).height()
+ });
+ };
+
+ // Plugin Definition
+ // =================
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this);
+ var data = $this.data(DataKey);
+
+ if (!data) {
+ var options = $.extend({}, Default, $this.data(), typeof option == 'object' && option);
+ $this.data(DataKey, (data = new ControlSidebar($this, options)));
+ }
+
+ if (typeof option == 'string') data.toggle();
+ });
+ }
+
+ var old = $.fn.controlSidebar;
+
+ $.fn.controlSidebar = Plugin;
+ $.fn.controlSidebar.Constructor = ControlSidebar;
+
+ // No Conflict Mode
+ // ================
+ $.fn.controlSidebar.noConflict = function () {
+ $.fn.controlSidebar = old;
+ return this;
+ };
+
+ // ControlSidebar Data API
+ // =======================
+ $(document).on('click', Selector.data, function (event) {
+ if (event) event.preventDefault();
+ Plugin.call($(this), 'toggle');
+ });
+
+}(jQuery);
+
+
+/* DirectChat()
+ * ===============
+ * Toggles the state of the control sidebar
+ *
+ * @Usage: $('#my-chat-box').directChat()
+ * or add [data-widget="direct-chat"] to the trigger
+ */
++function ($) {
+ 'use strict';
+
+ var DataKey = 'lte.directchat';
+
+ var Selector = {
+ data: '[data-widget="chat-pane-toggle"]',
+ box : '.direct-chat'
+ };
+
+ var ClassName = {
+ open: 'direct-chat-contacts-open'
+ };
+
+ // DirectChat Class Definition
+ // ===========================
+ var DirectChat = function (element) {
+ this.element = element;
+ };
+
+ DirectChat.prototype.toggle = function ($trigger) {
+ $trigger.parents(Selector.box).first().toggleClass(ClassName.open);
+ };
+
+ // Plugin Definition
+ // =================
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this);
+ var data = $this.data(DataKey);
+
+ if (!data) {
+ $this.data(DataKey, (data = new DirectChat($this)));
+ }
+
+ if (typeof option == 'string') data.toggle($this);
+ });
+ }
+
+ var old = $.fn.directChat;
+
+ $.fn.directChat = Plugin;
+ $.fn.directChat.Constructor = DirectChat;
+
+ // No Conflict Mode
+ // ================
+ $.fn.directChat.noConflict = function () {
+ $.fn.directChat = old;
+ return this;
+ };
+
+ // DirectChat Data API
+ // ===================
+ $(document).on('click', Selector.data, function (event) {
+ if (event) event.preventDefault();
+ Plugin.call($(this), 'toggle');
+ });
+
+}(jQuery);
+
+
+/* Layout()
+ * ========
+ * Implements AdminLTE layout.
+ * Fixes the layout height in case min-height fails.
+ *
+ * @usage activated automatically upon window load.
+ * Configure any options by passing data-option="value"
+ * to the body tag.
+ */
++function ($) {
+ 'use strict';
+
+ var DataKey = 'lte.layout';
+
+ var Default = {
+ slimscroll : true,
+ resetHeight: true
+ };
+
+ var Selector = {
+ wrapper : '.wrapper',
+ contentWrapper: '.content-wrapper',
+ layoutBoxed : '.layout-boxed',
+ mainFooter : '.main-footer',
+ mainHeader : '.main-header',
+ sidebar : '.sidebar',
+ controlSidebar: '.control-sidebar',
+ fixed : '.fixed',
+ sidebarMenu : '.sidebar-menu',
+ logo : '.main-header .logo'
+ };
+
+ var ClassName = {
+ fixed : 'fixed',
+ holdTransition: 'hold-transition'
+ };
+
+ var Layout = function (options) {
+ this.options = options;
+ this.bindedResize = false;
+ this.activate();
+ };
+
+ Layout.prototype.activate = function () {
+ this.fix();
+ this.fixSidebar();
+
+ $('body').removeClass(ClassName.holdTransition);
+
+ if (this.options.resetHeight) {
+ $('body, html, ' + Selector.wrapper).css({
+ 'height' : 'auto',
+ 'min-height': '100%'
+ });
+ }
+
+ if (!this.bindedResize) {
+ $(window).resize(function () {
+ this.fix();
+ this.fixSidebar();
+
+ $(Selector.logo + ', ' + Selector.sidebar).one('webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend', function () {
+ this.fix();
+ this.fixSidebar();
+ }.bind(this));
+ }.bind(this));
+
+ this.bindedResize = true;
+ }
+
+ $(Selector.sidebarMenu).on('expanded.tree', function () {
+ this.fix();
+ this.fixSidebar();
+ }.bind(this));
+
+ $(Selector.sidebarMenu).on('collapsed.tree', function () {
+ this.fix();
+ this.fixSidebar();
+ }.bind(this));
+ };
+
+ Layout.prototype.fix = function () {
+ // Remove overflow from .wrapper if layout-boxed exists
+ $(Selector.layoutBoxed + ' > ' + Selector.wrapper).css('overflow', 'hidden');
+
+ // Get window height and the wrapper height
+ var footerHeight = $(Selector.mainFooter).outerHeight() || 0;
+ var neg = $(Selector.mainHeader).outerHeight() + footerHeight;
+ var windowHeight = $(window).height();
+ var sidebarHeight = $(Selector.sidebar).height() || 0;
+
+ // Set the min-height of the content and sidebar based on
+ // the height of the document.
+ if ($('body').hasClass(ClassName.fixed)) {
+ $(Selector.contentWrapper).css('min-height', windowHeight - footerHeight);
+ } else {
+ var postSetHeight;
+
+ if (windowHeight >= sidebarHeight) {
+ $(Selector.contentWrapper).css('min-height', windowHeight - neg);
+ postSetHeight = windowHeight - neg;
+ } else {
+ $(Selector.contentWrapper).css('min-height', sidebarHeight);
+ postSetHeight = sidebarHeight;
+ }
+
+ // Fix for the control sidebar height
+ var $controlSidebar = $(Selector.controlSidebar);
+ if (typeof $controlSidebar !== 'undefined') {
+ if ($controlSidebar.height() > postSetHeight)
+ $(Selector.contentWrapper).css('min-height', $controlSidebar.height());
+ }
+ }
+ };
+
+ Layout.prototype.fixSidebar = function () {
+ // Make sure the body tag has the .fixed class
+ if (!$('body').hasClass(ClassName.fixed)) {
+ if (typeof $.fn.slimScroll !== 'undefined') {
+ $(Selector.sidebar).slimScroll({ destroy: true }).height('auto');
+ }
+ return;
+ }
+
+ // Enable slimscroll for fixed layout
+ if (this.options.slimscroll) {
+ if (typeof $.fn.slimScroll !== 'undefined') {
+ // Destroy if it exists
+ // $(Selector.sidebar).slimScroll({ destroy: true }).height('auto')
+
+ // Add slimscroll
+ $(Selector.sidebar).slimScroll({
+ height: ($(window).height() - $(Selector.mainHeader).height()) + 'px'
+ });
+ }
+ }
+ };
+
+ // Plugin Definition
+ // =================
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this);
+ var data = $this.data(DataKey);
+
+ if (!data) {
+ var options = $.extend({}, Default, $this.data(), typeof option === 'object' && option);
+ $this.data(DataKey, (data = new Layout(options)));
+ }
+
+ if (typeof option === 'string') {
+ if (typeof data[option] === 'undefined') {
+ throw new Error('No method named ' + option);
+ }
+ data[option]();
+ }
+ });
+ }
+
+ var old = $.fn.layout;
+
+ $.fn.layout = Plugin;
+ $.fn.layout.Constuctor = Layout;
+
+ // No conflict mode
+ // ================
+ $.fn.layout.noConflict = function () {
+ $.fn.layout = old;
+ return this;
+ };
+
+ // Layout DATA-API
+ // ===============
+ $(window).on('load', function () {
+ Plugin.call($('body'));
+ });
+}(jQuery);
+
+
+/* PushMenu()
+ * ==========
+ * Adds the push menu functionality to the sidebar.
+ *
+ * @usage: $('.btn').pushMenu(options)
+ * or add [data-toggle="push-menu"] to any button
+ * Pass any option as data-option="value"
+ */
++function ($) {
+ 'use strict';
+
+ var DataKey = 'lte.pushmenu';
+
+ var Default = {
+ collapseScreenSize : 767,
+ expandOnHover : false,
+ expandTransitionDelay: 200
+ };
+
+ var Selector = {
+ collapsed : '.sidebar-collapse',
+ open : '.sidebar-open',
+ mainSidebar : '.main-sidebar',
+ contentWrapper: '.content-wrapper',
+ searchInput : '.sidebar-form .form-control',
+ button : '[data-toggle="push-menu"]',
+ mini : '.sidebar-mini',
+ expanded : '.sidebar-expanded-on-hover',
+ layoutFixed : '.fixed'
+ };
+
+ var ClassName = {
+ collapsed : 'sidebar-collapse',
+ open : 'sidebar-open',
+ mini : 'sidebar-mini',
+ expanded : 'sidebar-expanded-on-hover',
+ expandFeature: 'sidebar-mini-expand-feature',
+ layoutFixed : 'fixed'
+ };
+
+ var Event = {
+ expanded : 'expanded.pushMenu',
+ collapsed: 'collapsed.pushMenu'
+ };
+
+ // PushMenu Class Definition
+ // =========================
+ var PushMenu = function (options) {
+ this.options = options;
+ this.init();
+ };
+
+ PushMenu.prototype.init = function () {
+ if (this.options.expandOnHover
+ || ($('body').is(Selector.mini + Selector.layoutFixed))) {
+ this.expandOnHover();
+ $('body').addClass(ClassName.expandFeature);
+ }
+
+ $(Selector.contentWrapper).click(function () {
+ // Enable hide menu when clicking on the content-wrapper on small screens
+ if ($(window).width() <= this.options.collapseScreenSize && $('body').hasClass(ClassName.open)) {
+ this.close();
+ }
+ }.bind(this));
+
+ // __Fix for android devices
+ $(Selector.searchInput).click(function (e) {
+ e.stopPropagation();
+ });
+ };
+
+ PushMenu.prototype.toggle = function () {
+ var windowWidth = $(window).width();
+ var isOpen = !$('body').hasClass(ClassName.collapsed);
+
+ if (windowWidth <= this.options.collapseScreenSize) {
+ isOpen = $('body').hasClass(ClassName.open);
+ }
+
+ if (!isOpen) {
+ this.open();
+ } else {
+ this.close();
+ }
+ };
+
+ PushMenu.prototype.open = function () {
+ var windowWidth = $(window).width();
+
+ if (windowWidth > this.options.collapseScreenSize) {
+ $('body').removeClass(ClassName.collapsed)
+ .trigger($.Event(Event.expanded));
+ }
+ else {
+ $('body').addClass(ClassName.open)
+ .trigger($.Event(Event.expanded));
+ }
+ };
+
+ PushMenu.prototype.close = function () {
+ var windowWidth = $(window).width();
+ if (windowWidth > this.options.collapseScreenSize) {
+ $('body').addClass(ClassName.collapsed)
+ .trigger($.Event(Event.collapsed));
+ } else {
+ $('body').removeClass(ClassName.open + ' ' + ClassName.collapsed)
+ .trigger($.Event(Event.collapsed));
+ }
+ };
+
+ PushMenu.prototype.expandOnHover = function () {
+ $(Selector.mainSidebar).hover(function () {
+ if ($('body').is(Selector.mini + Selector.collapsed)
+ && $(window).width() > this.options.collapseScreenSize) {
+ this.expand();
+ }
+ }.bind(this), function () {
+ if ($('body').is(Selector.expanded)) {
+ this.collapse();
+ }
+ }.bind(this));
+ };
+
+ PushMenu.prototype.expand = function () {
+ setTimeout(function () {
+ $('body').removeClass(ClassName.collapsed)
+ .addClass(ClassName.expanded);
+ }, this.options.expandTransitionDelay);
+ };
+
+ PushMenu.prototype.collapse = function () {
+ setTimeout(function () {
+ $('body').removeClass(ClassName.expanded)
+ .addClass(ClassName.collapsed);
+ }, this.options.expandTransitionDelay);
+ };
+
+ // PushMenu Plugin Definition
+ // ==========================
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this);
+ var data = $this.data(DataKey);
+
+ if (!data) {
+ var options = $.extend({}, Default, $this.data(), typeof option == 'object' && option);
+ $this.data(DataKey, (data = new PushMenu(options)));
+ }
+
+ if (option === 'toggle') data.toggle();
+ });
+ }
+
+ var old = $.fn.pushMenu;
+
+ $.fn.pushMenu = Plugin;
+ $.fn.pushMenu.Constructor = PushMenu;
+
+ // No Conflict Mode
+ // ================
+ $.fn.pushMenu.noConflict = function () {
+ $.fn.pushMenu = old;
+ return this;
+ };
+
+ // Data API
+ // ========
+ $(document).on('click', Selector.button, function (e) {
+ e.preventDefault();
+ Plugin.call($(this), 'toggle');
+ });
+ $(window).on('load', function () {
+ Plugin.call($(Selector.button));
+ });
+}(jQuery);
+
+
+/* TodoList()
+ * =========
+ * Converts a list into a todoList.
+ *
+ * @Usage: $('.my-list').todoList(options)
+ * or add [data-widget="todo-list"] to the ul element
+ * Pass any option as data-option="value"
+ */
++function ($) {
+ 'use strict';
+
+ var DataKey = 'lte.todolist';
+
+ var Default = {
+ onCheck : function (item) {
+ return item;
+ },
+ onUnCheck: function (item) {
+ return item;
+ }
+ };
+
+ var Selector = {
+ data: '[data-widget="todo-list"]'
+ };
+
+ var ClassName = {
+ done: 'done'
+ };
+
+ // TodoList Class Definition
+ // =========================
+ var TodoList = function (element, options) {
+ this.element = element;
+ this.options = options;
+
+ this._setUpListeners();
+ };
+
+ TodoList.prototype.toggle = function (item) {
+ item.parents(Selector.li).first().toggleClass(ClassName.done);
+ if (!item.prop('checked')) {
+ this.unCheck(item);
+ return;
+ }
+
+ this.check(item);
+ };
+
+ TodoList.prototype.check = function (item) {
+ this.options.onCheck.call(item);
+ };
+
+ TodoList.prototype.unCheck = function (item) {
+ this.options.onUnCheck.call(item);
+ };
+
+ // Private
+
+ TodoList.prototype._setUpListeners = function () {
+ var that = this;
+ $(this.element).on('change ifChanged', 'input:checkbox', function () {
+ that.toggle($(this));
+ });
+ };
+
+ // Plugin Definition
+ // =================
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this);
+ var data = $this.data(DataKey);
+
+ if (!data) {
+ var options = $.extend({}, Default, $this.data(), typeof option == 'object' && option);
+ $this.data(DataKey, (data = new TodoList($this, options)));
+ }
+
+ if (typeof data == 'string') {
+ if (typeof data[option] == 'undefined') {
+ throw new Error('No method named ' + option);
+ }
+ data[option]();
+ }
+ });
+ }
+
+ var old = $.fn.todoList;
+
+ $.fn.todoList = Plugin;
+ $.fn.todoList.Constructor = TodoList;
+
+ // No Conflict Mode
+ // ================
+ $.fn.todoList.noConflict = function () {
+ $.fn.todoList = old;
+ return this;
+ };
+
+ // TodoList Data API
+ // =================
+ $(window).on('load', function () {
+ $(Selector.data).each(function () {
+ Plugin.call($(this));
+ });
+ });
+
+}(jQuery);
+
+
+/* Tree()
+ * ======
+ * Converts a nested list into a multilevel
+ * tree view menu.
+ *
+ * @Usage: $('.my-menu').tree(options)
+ * or add [data-widget="tree"] to the ul element
+ * Pass any option as data-option="value"
+ */
++function ($) {
+ 'use strict';
+
+ var DataKey = 'lte.tree';
+
+ var Default = {
+ animationSpeed: 500,
+ accordion : true,
+ followLink : false,
+ trigger : '.treeview a'
+ };
+
+ var Selector = {
+ tree : '.tree',
+ treeview : '.treeview',
+ treeviewMenu: '.treeview-menu',
+ open : '.menu-open, .active',
+ li : 'li',
+ data : '[data-widget="tree"]',
+ active : '.active'
+ };
+
+ var ClassName = {
+ open: 'menu-open',
+ tree: 'tree'
+ };
+
+ var Event = {
+ collapsed: 'collapsed.tree',
+ expanded : 'expanded.tree'
+ };
+
+ // Tree Class Definition
+ // =====================
+ var Tree = function (element, options) {
+ this.element = element;
+ this.options = options;
+
+ $(this.element).addClass(ClassName.tree);
+
+ $(Selector.treeview + Selector.active, this.element).addClass(ClassName.open);
+
+ this._setUpListeners();
+ };
+
+ Tree.prototype.toggle = function (link, event) {
+ var treeviewMenu = link.next(Selector.treeviewMenu);
+ var parentLi = link.parent();
+ var isOpen = parentLi.hasClass(ClassName.open);
+
+ if (!parentLi.is(Selector.treeview)) {
+ return;
+ }
+
+ if (!this.options.followLink || link.attr('href') === '#') {
+ event.preventDefault();
+ }
+
+ if (isOpen) {
+ this.collapse(treeviewMenu, parentLi);
+ } else {
+ this.expand(treeviewMenu, parentLi);
+ }
+ };
+
+ Tree.prototype.expand = function (tree, parent) {
+ var expandedEvent = $.Event(Event.expanded);
+
+ if (this.options.accordion) {
+ var openMenuLi = parent.siblings(Selector.open);
+ var openTree = openMenuLi.children(Selector.treeviewMenu);
+ this.collapse(openTree, openMenuLi);
+ }
+
+ parent.addClass(ClassName.open);
+ tree.slideDown(this.options.animationSpeed, function () {
+ $(this.element).trigger(expandedEvent);
+ }.bind(this));
+ };
+
+ Tree.prototype.collapse = function (tree, parentLi) {
+ var collapsedEvent = $.Event(Event.collapsed);
+
+ tree.find(Selector.open).removeClass(ClassName.open);
+ parentLi.removeClass(ClassName.open);
+ tree.slideUp(this.options.animationSpeed, function () {
+ tree.find(Selector.open + ' > ' + Selector.treeview).slideUp();
+ $(this.element).trigger(collapsedEvent);
+ }.bind(this));
+ };
+
+ // Private
+
+ Tree.prototype._setUpListeners = function () {
+ var that = this;
+
+ $(this.element).on('click', this.options.trigger, function (event) {
+ that.toggle($(this), event);
+ });
+ };
+
+ // Plugin Definition
+ // =================
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this);
+ var data = $this.data(DataKey);
+
+ if (!data) {
+ var options = $.extend({}, Default, $this.data(), typeof option == 'object' && option);
+ $this.data(DataKey, new Tree($this, options));
+ }
+ });
+ }
+
+ var old = $.fn.tree;
+
+ $.fn.tree = Plugin;
+ $.fn.tree.Constructor = Tree;
+
+ // No Conflict Mode
+ // ================
+ $.fn.tree.noConflict = function () {
+ $.fn.tree = old;
+ return this;
+ };
+
+ // Tree Data API
+ // =============
+ $(window).on('load', function () {
+ $(Selector.data).each(function () {
+ Plugin.call($(this));
+ });
+ });
+
+}(jQuery);
diff --git a/public/bower_components/admin-lte/dist/js/adminlte.min.js b/public/bower_components/admin-lte/dist/js/adminlte.min.js
new file mode 100644
index 0000000..fc356e4
--- /dev/null
+++ b/public/bower_components/admin-lte/dist/js/adminlte.min.js
@@ -0,0 +1,14 @@
+/*! AdminLTE app.js
+* ================
+* Main JS application file for AdminLTE v2. This file
+* should be included in all pages. It controls some layout
+* options and implements exclusive AdminLTE plugins.
+*
+* @Author Almsaeed Studio
+* @Support <https://www.almsaeedstudio.com>
+* @Email <abdullah@almsaeedstudio.com>
+* @version 2.4.2
+* @repository git://github.com/almasaeed2010/AdminLTE.git
+* @license MIT <http://opensource.org/licenses/MIT>
+*/
+if("undefined"==typeof jQuery)throw new Error("AdminLTE requires jQuery");+function(a){"use strict";function b(b){return this.each(function(){var e=a(this),g=e.data(c);if(!g){var h=a.extend({},d,e.data(),"object"==typeof b&&b);e.data(c,g=new f(e,h))}if("string"==typeof g){if(void 0===g[b])throw new Error("No method named "+b);g[b]()}})}var c="lte.boxrefresh",d={source:"",params:{},trigger:".refresh-btn",content:".box-body",loadInContent:!0,responseType:"",overlayTemplate:'<div class="overlay"><div class="fa fa-refresh fa-spin"></div></div>',onLoadStart:function(){},onLoadDone:function(a){return a}},e={data:'[data-widget="box-refresh"]'},f=function(b,c){if(this.element=b,this.options=c,this.$overlay=a(c.overlay),""===c.source)throw new Error("Source url was not defined. Please specify a url in your BoxRefresh source option.");this._setUpListeners(),this.load()};f.prototype.load=function(){this._addOverlay(),this.options.onLoadStart.call(a(this)),a.get(this.options.source,this.options.params,function(b){this.options.loadInContent&&a(this.options.content).html(b),this.options.onLoadDone.call(a(this),b),this._removeOverlay()}.bind(this),""!==this.options.responseType&&this.options.responseType)},f.prototype._setUpListeners=function(){a(this.element).on("click",e.trigger,function(a){a&&a.preventDefault(),this.load()}.bind(this))},f.prototype._addOverlay=function(){a(this.element).append(this.$overlay)},f.prototype._removeOverlay=function(){a(this.element).remove(this.$overlay)};var g=a.fn.boxRefresh;a.fn.boxRefresh=b,a.fn.boxRefresh.Constructor=f,a.fn.boxRefresh.noConflict=function(){return a.fn.boxRefresh=g,this},a(window).on("load",function(){a(e.data).each(function(){b.call(a(this))})})}(jQuery),function(a){"use strict";function b(b){return this.each(function(){var e=a(this),f=e.data(c);if(!f){var g=a.extend({},d,e.data(),"object"==typeof b&&b);e.data(c,f=new h(e,g))}if("string"==typeof b){if(void 0===f[b])throw new Error("No method named "+b);f[b]()}})}var c="lte.boxwidget",d={animationSpeed:500,collapseTrigger:'[data-widget="collapse"]',removeTrigger:'[data-widget="remove"]',collapseIcon:"fa-minus",expandIcon:"fa-plus",removeIcon:"fa-times"},e={data:".box",collapsed:".collapsed-box",header:".box-header",body:".box-body",footer:".box-footer",tools:".box-tools"},f={collapsed:"collapsed-box"},g={collapsed:"collapsed.boxwidget",expanded:"expanded.boxwidget",removed:"removed.boxwidget"},h=function(a,b){this.element=a,this.options=b,this._setUpListeners()};h.prototype.toggle=function(){a(this.element).is(e.collapsed)?this.expand():this.collapse()},h.prototype.expand=function(){var b=a.Event(g.expanded),c=this.options.collapseIcon,d=this.options.expandIcon;a(this.element).removeClass(f.collapsed),a(this.element).children(e.header+", "+e.body+", "+e.footer).children(e.tools).find("."+d).removeClass(d).addClass(c),a(this.element).children(e.body+", "+e.footer).slideDown(this.options.animationSpeed,function(){a(this.element).trigger(b)}.bind(this))},h.prototype.collapse=function(){var b=a.Event(g.collapsed),c=this.options.collapseIcon,d=this.options.expandIcon;a(this.element).children(e.header+", "+e.body+", "+e.footer).children(e.tools).find("."+c).removeClass(c).addClass(d),a(this.element).children(e.body+", "+e.footer).slideUp(this.options.animationSpeed,function(){a(this.element).addClass(f.collapsed),a(this.element).trigger(b)}.bind(this))},h.prototype.remove=function(){var b=a.Event(g.removed);a(this.element).slideUp(this.options.animationSpeed,function(){a(this.element).trigger(b),a(this.element).remove()}.bind(this))},h.prototype._setUpListeners=function(){var b=this;a(this.element).on("click",this.options.collapseTrigger,function(c){return c&&c.preventDefault(),b.toggle(a(this)),!1}),a(this.element).on("click",this.options.removeTrigger,function(c){return c&&c.preventDefault(),b.remove(a(this)),!1})};var i=a.fn.boxWidget;a.fn.boxWidget=b,a.fn.boxWidget.Constructor=h,a.fn.boxWidget.noConflict=function(){return a.fn.boxWidget=i,this},a(window).on("load",function(){a(e.data).each(function(){b.call(a(this))})})}(jQuery),function(a){"use strict";function b(b){return this.each(function(){var e=a(this),f=e.data(c);if(!f){var g=a.extend({},d,e.data(),"object"==typeof b&&b);e.data(c,f=new h(e,g))}"string"==typeof b&&f.toggle()})}var c="lte.controlsidebar",d={slide:!0},e={sidebar:".control-sidebar",data:'[data-toggle="control-sidebar"]',open:".control-sidebar-open",bg:".control-sidebar-bg",wrapper:".wrapper",content:".content-wrapper",boxed:".layout-boxed"},f={open:"control-sidebar-open",fixed:"fixed"},g={collapsed:"collapsed.controlsidebar",expanded:"expanded.controlsidebar"},h=function(a,b){this.element=a,this.options=b,this.hasBindedResize=!1,this.init()};h.prototype.init=function(){a(this.element).is(e.data)||a(this).on("click",this.toggle),this.fix(),a(window).resize(function(){this.fix()}.bind(this))},h.prototype.toggle=function(b){b&&b.preventDefault(),this.fix(),a(e.sidebar).is(e.open)||a("body").is(e.open)?this.collapse():this.expand()},h.prototype.expand=function(){this.options.slide?a(e.sidebar).addClass(f.open):a("body").addClass(f.open),a(this.element).trigger(a.Event(g.expanded))},h.prototype.collapse=function(){a("body, "+e.sidebar).removeClass(f.open),a(this.element).trigger(a.Event(g.collapsed))},h.prototype.fix=function(){a("body").is(e.boxed)&&this._fixForBoxed(a(e.bg))},h.prototype._fixForBoxed=function(b){b.css({position:"absolute",height:a(e.wrapper).height()})};var i=a.fn.controlSidebar;a.fn.controlSidebar=b,a.fn.controlSidebar.Constructor=h,a.fn.controlSidebar.noConflict=function(){return a.fn.controlSidebar=i,this},a(document).on("click",e.data,function(c){c&&c.preventDefault(),b.call(a(this),"toggle")})}(jQuery),function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data(c);e||d.data(c,e=new f(d)),"string"==typeof b&&e.toggle(d)})}var c="lte.directchat",d={data:'[data-widget="chat-pane-toggle"]',box:".direct-chat"},e={open:"direct-chat-contacts-open"},f=function(a){this.element=a};f.prototype.toggle=function(a){a.parents(d.box).first().toggleClass(e.open)};var g=a.fn.directChat;a.fn.directChat=b,a.fn.directChat.Constructor=f,a.fn.directChat.noConflict=function(){return a.fn.directChat=g,this},a(document).on("click",d.data,function(c){c&&c.preventDefault(),b.call(a(this),"toggle")})}(jQuery),function(a){"use strict";function b(b){return this.each(function(){var e=a(this),f=e.data(c);if(!f){var h=a.extend({},d,e.data(),"object"==typeof b&&b);e.data(c,f=new g(h))}if("string"==typeof b){if(void 0===f[b])throw new Error("No method named "+b);f[b]()}})}var c="lte.layout",d={slimscroll:!0,resetHeight:!0},e={wrapper:".wrapper",contentWrapper:".content-wrapper",layoutBoxed:".layout-boxed",mainFooter:".main-footer",mainHeader:".main-header",sidebar:".sidebar",controlSidebar:".control-sidebar",fixed:".fixed",sidebarMenu:".sidebar-menu",logo:".main-header .logo"},f={fixed:"fixed",holdTransition:"hold-transition"},g=function(a){this.options=a,this.bindedResize=!1,this.activate()};g.prototype.activate=function(){this.fix(),this.fixSidebar(),a("body").removeClass(f.holdTransition),this.options.resetHeight&&a("body, html, "+e.wrapper).css({height:"auto","min-height":"100%"}),this.bindedResize||(a(window).resize(function(){this.fix(),this.fixSidebar(),a(e.logo+", "+e.sidebar).one("webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend",function(){this.fix(),this.fixSidebar()}.bind(this))}.bind(this)),this.bindedResize=!0),a(e.sidebarMenu).on("expanded.tree",function(){this.fix(),this.fixSidebar()}.bind(this)),a(e.sidebarMenu).on("collapsed.tree",function(){this.fix(),this.fixSidebar()}.bind(this))},g.prototype.fix=function(){a(e.layoutBoxed+" > "+e.wrapper).css("overflow","hidden");var b=a(e.mainFooter).outerHeight()||0,c=a(e.mainHeader).outerHeight()+b,d=a(window).height(),g=a(e.sidebar).height()||0;if(a("body").hasClass(f.fixed))a(e.contentWrapper).css("min-height",d-b);else{var h;d>=g?(a(e.contentWrapper).css("min-height",d-c),h=d-c):(a(e.contentWrapper).css("min-height",g),h=g);var i=a(e.controlSidebar);void 0!==i&&i.height()>h&&a(e.contentWrapper).css("min-height",i.height())}},g.prototype.fixSidebar=function(){if(!a("body").hasClass(f.fixed))return void(void 0!==a.fn.slimScroll&&a(e.sidebar).slimScroll({destroy:!0}).height("auto"));this.options.slimscroll&&void 0!==a.fn.slimScroll&&a(e.sidebar).slimScroll({height:a(window).height()-a(e.mainHeader).height()+"px"})};var h=a.fn.layout;a.fn.layout=b,a.fn.layout.Constuctor=g,a.fn.layout.noConflict=function(){return a.fn.layout=h,this},a(window).on("load",function(){b.call(a("body"))})}(jQuery),function(a){"use strict";function b(b){return this.each(function(){var e=a(this),f=e.data(c);if(!f){var g=a.extend({},d,e.data(),"object"==typeof b&&b);e.data(c,f=new h(g))}"toggle"===b&&f.toggle()})}var c="lte.pushmenu",d={collapseScreenSize:767,expandOnHover:!1,expandTransitionDelay:200},e={collapsed:".sidebar-collapse",open:".sidebar-open",mainSidebar:".main-sidebar",contentWrapper:".content-wrapper",searchInput:".sidebar-form .form-control",button:'[data-toggle="push-menu"]',mini:".sidebar-mini",expanded:".sidebar-expanded-on-hover",layoutFixed:".fixed"},f={collapsed:"sidebar-collapse",open:"sidebar-open",mini:"sidebar-mini",expanded:"sidebar-expanded-on-hover",expandFeature:"sidebar-mini-expand-feature",layoutFixed:"fixed"},g={expanded:"expanded.pushMenu",collapsed:"collapsed.pushMenu"},h=function(a){this.options=a,this.init()};h.prototype.init=function(){(this.options.expandOnHover||a("body").is(e.mini+e.layoutFixed))&&(this.expandOnHover(),a("body").addClass(f.expandFeature)),a(e.contentWrapper).click(function(){a(window).width()<=this.options.collapseScreenSize&&a("body").hasClass(f.open)&&this.close()}.bind(this)),a(e.searchInput).click(function(a){a.stopPropagation()})},h.prototype.toggle=function(){var b=a(window).width(),c=!a("body").hasClass(f.collapsed);b<=this.options.collapseScreenSize&&(c=a("body").hasClass(f.open)),c?this.close():this.open()},h.prototype.open=function(){a(window).width()>this.options.collapseScreenSize?a("body").removeClass(f.collapsed).trigger(a.Event(g.expanded)):a("body").addClass(f.open).trigger(a.Event(g.expanded))},h.prototype.close=function(){a(window).width()>this.options.collapseScreenSize?a("body").addClass(f.collapsed).trigger(a.Event(g.collapsed)):a("body").removeClass(f.open+" "+f.collapsed).trigger(a.Event(g.collapsed))},h.prototype.expandOnHover=function(){a(e.mainSidebar).hover(function(){a("body").is(e.mini+e.collapsed)&&a(window).width()>this.options.collapseScreenSize&&this.expand()}.bind(this),function(){a("body").is(e.expanded)&&this.collapse()}.bind(this))},h.prototype.expand=function(){setTimeout(function(){a("body").removeClass(f.collapsed).addClass(f.expanded)},this.options.expandTransitionDelay)},h.prototype.collapse=function(){setTimeout(function(){a("body").removeClass(f.expanded).addClass(f.collapsed)},this.options.expandTransitionDelay)};var i=a.fn.pushMenu;a.fn.pushMenu=b,a.fn.pushMenu.Constructor=h,a.fn.pushMenu.noConflict=function(){return a.fn.pushMenu=i,this},a(document).on("click",e.button,function(c){c.preventDefault(),b.call(a(this),"toggle")}),a(window).on("load",function(){b.call(a(e.button))})}(jQuery),function(a){"use strict";function b(b){return this.each(function(){var e=a(this),f=e.data(c);if(!f){var h=a.extend({},d,e.data(),"object"==typeof b&&b);e.data(c,f=new g(e,h))}if("string"==typeof f){if(void 0===f[b])throw new Error("No method named "+b);f[b]()}})}var c="lte.todolist",d={onCheck:function(a){return a},onUnCheck:function(a){return a}},e={data:'[data-widget="todo-list"]'},f={done:"done"},g=function(a,b){this.element=a,this.options=b,this._setUpListeners()};g.prototype.toggle=function(a){if(a.parents(e.li).first().toggleClass(f.done),!a.prop("checked"))return void this.unCheck(a);this.check(a)},g.prototype.check=function(a){this.options.onCheck.call(a)},g.prototype.unCheck=function(a){this.options.onUnCheck.call(a)},g.prototype._setUpListeners=function(){var b=this;a(this.element).on("change ifChanged","input:checkbox",function(){b.toggle(a(this))})};var h=a.fn.todoList;a.fn.todoList=b,a.fn.todoList.Constructor=g,a.fn.todoList.noConflict=function(){return a.fn.todoList=h,this},a(window).on("load",function(){a(e.data).each(function(){b.call(a(this))})})}(jQuery),function(a){"use strict";function b(b){return this.each(function(){var e=a(this);if(!e.data(c)){var f=a.extend({},d,e.data(),"object"==typeof b&&b);e.data(c,new h(e,f))}})}var c="lte.tree",d={animationSpeed:500,accordion:!0,followLink:!1,trigger:".treeview a"},e={tree:".tree",treeview:".treeview",treeviewMenu:".treeview-menu",open:".menu-open, .active",li:"li",data:'[data-widget="tree"]',active:".active"},f={open:"menu-open",tree:"tree"},g={collapsed:"collapsed.tree",expanded:"expanded.tree"},h=function(b,c){this.element=b,this.options=c,a(this.element).addClass(f.tree),a(e.treeview+e.active,this.element).addClass(f.open),this._setUpListeners()};h.prototype.toggle=function(a,b){var c=a.next(e.treeviewMenu),d=a.parent(),g=d.hasClass(f.open);d.is(e.treeview)&&(this.options.followLink&&"#"!==a.attr("href")||b.preventDefault(),g?this.collapse(c,d):this.expand(c,d))},h.prototype.expand=function(b,c){var d=a.Event(g.expanded);if(this.options.accordion){var h=c.siblings(e.open),i=h.children(e.treeviewMenu);this.collapse(i,h)}c.addClass(f.open),b.slideDown(this.options.animationSpeed,function(){a(this.element).trigger(d)}.bind(this))},h.prototype.collapse=function(b,c){var d=a.Event(g.collapsed);b.find(e.open).removeClass(f.open),c.removeClass(f.open),b.slideUp(this.options.animationSpeed,function(){b.find(e.open+" > "+e.treeview).slideUp(),a(this.element).trigger(d)}.bind(this))},h.prototype._setUpListeners=function(){var b=this;a(this.element).on("click",this.options.trigger,function(c){b.toggle(a(this),c)})};var i=a.fn.tree;a.fn.tree=b,a.fn.tree.Constructor=h,a.fn.tree.noConflict=function(){return a.fn.tree=i,this},a(window).on("load",function(){a(e.data).each(function(){b.call(a(this))})})}(jQuery); \ No newline at end of file
diff --git a/public/bower_components/admin-lte/dist/js/demo.js b/public/bower_components/admin-lte/dist/js/demo.js
new file mode 100644
index 0000000..24e54bd
--- /dev/null
+++ b/public/bower_components/admin-lte/dist/js/demo.js
@@ -0,0 +1,349 @@
+/**
+ * AdminLTE Demo Menu
+ * ------------------
+ * You should not use this file in production.
+ * This file is for demo purposes only.
+ */
+$(function () {
+ 'use strict'
+
+ /**
+ * Get access to plugins
+ */
+
+ $('[data-toggle="control-sidebar"]').controlSidebar()
+ $('[data-toggle="push-menu"]').pushMenu()
+
+ var $pushMenu = $('[data-toggle="push-menu"]').data('lte.pushmenu')
+ var $controlSidebar = $('[data-toggle="control-sidebar"]').data('lte.controlsidebar')
+ var $layout = $('body').data('lte.layout')
+
+ /**
+ * List of all the available skins
+ *
+ * @type Array
+ */
+ var mySkins = [
+ 'skin-blue',
+ 'skin-black',
+ 'skin-red',
+ 'skin-yellow',
+ 'skin-purple',
+ 'skin-green',
+ 'skin-blue-light',
+ 'skin-black-light',
+ 'skin-red-light',
+ 'skin-yellow-light',
+ 'skin-purple-light',
+ 'skin-green-light'
+ ]
+
+ /**
+ * Get a prestored setting
+ *
+ * @param String name Name of of the setting
+ * @returns String The value of the setting | null
+ */
+ function get(name) {
+ if (typeof (Storage) !== 'undefined') {
+ return localStorage.getItem(name)
+ } else {
+ window.alert('Please use a modern browser to properly view this template!')
+ }
+ }
+
+ /**
+ * Store a new settings in the browser
+ *
+ * @param String name Name of the setting
+ * @param String val Value of the setting
+ * @returns void
+ */
+ function store(name, val) {
+ if (typeof (Storage) !== 'undefined') {
+ localStorage.setItem(name, val)
+ } else {
+ window.alert('Please use a modern browser to properly view this template!')
+ }
+ }
+
+ /**
+ * Toggles layout classes
+ *
+ * @param String cls the layout class to toggle
+ * @returns void
+ */
+ function changeLayout(cls) {
+ $('body').toggleClass(cls)
+ $layout.fixSidebar()
+ if ($('body').hasClass('fixed') && cls == 'fixed') {
+ $pushMenu.expandOnHover()
+ $layout.activate()
+ }
+ $controlSidebar.fix()
+ }
+
+ /**
+ * Replaces the old skin with the new skin
+ * @param String cls the new skin class
+ * @returns Boolean false to prevent link's default action
+ */
+ function changeSkin(cls) {
+ $.each(mySkins, function (i) {
+ $('body').removeClass(mySkins[i])
+ })
+
+ $('body').addClass(cls)
+ store('skin', cls)
+ return false
+ }
+
+ /**
+ * Retrieve default settings and apply them to the template
+ *
+ * @returns void
+ */
+ function setup() {
+ var tmp = get('skin')
+ if (tmp && $.inArray(tmp, mySkins))
+ changeSkin(tmp)
+
+ // Add the change skin listener
+ $('[data-skin]').on('click', function (e) {
+ if ($(this).hasClass('knob'))
+ return
+ e.preventDefault()
+ changeSkin($(this).data('skin'))
+ })
+
+ // Add the layout manager
+ $('[data-layout]').on('click', function () {
+ changeLayout($(this).data('layout'))
+ })
+
+ $('[data-controlsidebar]').on('click', function () {
+ changeLayout($(this).data('controlsidebar'))
+ var slide = !$controlSidebar.options.slide
+
+ $controlSidebar.options.slide = slide
+ if (!slide)
+ $('.control-sidebar').removeClass('control-sidebar-open')
+ })
+
+ $('[data-sidebarskin="toggle"]').on('click', function () {
+ var $sidebar = $('.control-sidebar')
+ if ($sidebar.hasClass('control-sidebar-dark')) {
+ $sidebar.removeClass('control-sidebar-dark')
+ $sidebar.addClass('control-sidebar-light')
+ } else {
+ $sidebar.removeClass('control-sidebar-light')
+ $sidebar.addClass('control-sidebar-dark')
+ }
+ })
+
+ $('[data-enable="expandOnHover"]').on('click', function () {
+ $(this).attr('disabled', true)
+ $pushMenu.expandOnHover()
+ if (!$('body').hasClass('sidebar-collapse'))
+ $('[data-layout="sidebar-collapse"]').click()
+ })
+
+ // Reset options
+ if ($('body').hasClass('fixed')) {
+ $('[data-layout="fixed"]').attr('checked', 'checked')
+ }
+ if ($('body').hasClass('layout-boxed')) {
+ $('[data-layout="layout-boxed"]').attr('checked', 'checked')
+ }
+ if ($('body').hasClass('sidebar-collapse')) {
+ $('[data-layout="sidebar-collapse"]').attr('checked', 'checked')
+ }
+
+ }
+
+ // Create the new tab
+ var $tabPane = $('<div />', {
+ 'id' : 'control-sidebar-theme-demo-options-tab',
+ 'class': 'tab-pane active'
+ })
+
+ // Create the tab button
+ var $tabButton = $('<li />', { 'class': 'active' })
+ .html('<a href=\'#control-sidebar-theme-demo-options-tab\' data-toggle=\'tab\'>'
+ + '<i class="fa fa-wrench"></i>'
+ + '</a>')
+
+ // Add the tab button to the right sidebar tabs
+ $('[href="#control-sidebar-home-tab"]')
+ .parent()
+ .before($tabButton)
+
+ // Create the menu
+ var $demoSettings = $('<div />')
+
+ // Layout options
+ $demoSettings.append(
+ '<h4 class="control-sidebar-heading">'
+ + 'Layout Options'
+ + '</h4>'
+ // Fixed layout
+ + '<div class="form-group">'
+ + '<label class="control-sidebar-subheading">'
+ + '<input type="checkbox"data-layout="fixed"class="pull-right"/> '
+ + 'Fixed layout'
+ + '</label>'
+ + '<p>Activate the fixed layout. You can\'t use fixed and boxed layouts together</p>'
+ + '</div>'
+ // Boxed layout
+ + '<div class="form-group">'
+ + '<label class="control-sidebar-subheading">'
+ + '<input type="checkbox"data-layout="layout-boxed" class="pull-right"/> '
+ + 'Boxed Layout'
+ + '</label>'
+ + '<p>Activate the boxed layout</p>'
+ + '</div>'
+ // Sidebar Toggle
+ + '<div class="form-group">'
+ + '<label class="control-sidebar-subheading">'
+ + '<input type="checkbox"data-layout="sidebar-collapse"class="pull-right"/> '
+ + 'Toggle Sidebar'
+ + '</label>'
+ + '<p>Toggle the left sidebar\'s state (open or collapse)</p>'
+ + '</div>'
+ // Sidebar mini expand on hover toggle
+ + '<div class="form-group">'
+ + '<label class="control-sidebar-subheading">'
+ + '<input type="checkbox"data-enable="expandOnHover"class="pull-right"/> '
+ + 'Sidebar Expand on Hover'
+ + '</label>'
+ + '<p>Let the sidebar mini expand on hover</p>'
+ + '</div>'
+ // Control Sidebar Toggle
+ + '<div class="form-group">'
+ + '<label class="control-sidebar-subheading">'
+ + '<input type="checkbox"data-controlsidebar="control-sidebar-open"class="pull-right"/> '
+ + 'Toggle Right Sidebar Slide'
+ + '</label>'
+ + '<p>Toggle between slide over content and push content effects</p>'
+ + '</div>'
+ // Control Sidebar Skin Toggle
+ + '<div class="form-group">'
+ + '<label class="control-sidebar-subheading">'
+ + '<input type="checkbox"data-sidebarskin="toggle"class="pull-right"/> '
+ + 'Toggle Right Sidebar Skin'
+ + '</label>'
+ + '<p>Toggle between dark and light skins for the right sidebar</p>'
+ + '</div>'
+ )
+ var $skinsList = $('<ul />', { 'class': 'list-unstyled clearfix' })
+
+ // Dark sidebar skins
+ var $skinBlue =
+ $('<li />', { style: 'float:left; width: 33.33333%; padding: 5px;' })
+ .append('<a href="javascript:void(0)" data-skin="skin-blue" style="display: block; box-shadow: 0 0 3px rgba(0,0,0,0.4)" class="clearfix full-opacity-hover">'
+ + '<div><span style="display:block; width: 20%; float: left; height: 7px; background: #367fa9"></span><span class="bg-light-blue" style="display:block; width: 80%; float: left; height: 7px;"></span></div>'
+ + '<div><span style="display:block; width: 20%; float: left; height: 20px; background: #222d32"></span><span style="display:block; width: 80%; float: left; height: 20px; background: #f4f5f7"></span></div>'
+ + '</a>'
+ + '<p class="text-center no-margin">Blue</p>')
+ $skinsList.append($skinBlue)
+ var $skinBlack =
+ $('<li />', { style: 'float:left; width: 33.33333%; padding: 5px;' })
+ .append('<a href="javascript:void(0)" data-skin="skin-black" style="display: block; box-shadow: 0 0 3px rgba(0,0,0,0.4)" class="clearfix full-opacity-hover">'
+ + '<div style="box-shadow: 0 0 2px rgba(0,0,0,0.1)" class="clearfix"><span style="display:block; width: 20%; float: left; height: 7px; background: #fefefe"></span><span style="display:block; width: 80%; float: left; height: 7px; background: #fefefe"></span></div>'
+ + '<div><span style="display:block; width: 20%; float: left; height: 20px; background: #222"></span><span style="display:block; width: 80%; float: left; height: 20px; background: #f4f5f7"></span></div>'
+ + '</a>'
+ + '<p class="text-center no-margin">Black</p>')
+ $skinsList.append($skinBlack)
+ var $skinPurple =
+ $('<li />', { style: 'float:left; width: 33.33333%; padding: 5px;' })
+ .append('<a href="javascript:void(0)" data-skin="skin-purple" style="display: block; box-shadow: 0 0 3px rgba(0,0,0,0.4)" class="clearfix full-opacity-hover">'
+ + '<div><span style="display:block; width: 20%; float: left; height: 7px;" class="bg-purple-active"></span><span class="bg-purple" style="display:block; width: 80%; float: left; height: 7px;"></span></div>'
+ + '<div><span style="display:block; width: 20%; float: left; height: 20px; background: #222d32"></span><span style="display:block; width: 80%; float: left; height: 20px; background: #f4f5f7"></span></div>'
+ + '</a>'
+ + '<p class="text-center no-margin">Purple</p>')
+ $skinsList.append($skinPurple)
+ var $skinGreen =
+ $('<li />', { style: 'float:left; width: 33.33333%; padding: 5px;' })
+ .append('<a href="javascript:void(0)" data-skin="skin-green" style="display: block; box-shadow: 0 0 3px rgba(0,0,0,0.4)" class="clearfix full-opacity-hover">'
+ + '<div><span style="display:block; width: 20%; float: left; height: 7px;" class="bg-green-active"></span><span class="bg-green" style="display:block; width: 80%; float: left; height: 7px;"></span></div>'
+ + '<div><span style="display:block; width: 20%; float: left; height: 20px; background: #222d32"></span><span style="display:block; width: 80%; float: left; height: 20px; background: #f4f5f7"></span></div>'
+ + '</a>'
+ + '<p class="text-center no-margin">Green</p>')
+ $skinsList.append($skinGreen)
+ var $skinRed =
+ $('<li />', { style: 'float:left; width: 33.33333%; padding: 5px;' })
+ .append('<a href="javascript:void(0)" data-skin="skin-red" style="display: block; box-shadow: 0 0 3px rgba(0,0,0,0.4)" class="clearfix full-opacity-hover">'
+ + '<div><span style="display:block; width: 20%; float: left; height: 7px;" class="bg-red-active"></span><span class="bg-red" style="display:block; width: 80%; float: left; height: 7px;"></span></div>'
+ + '<div><span style="display:block; width: 20%; float: left; height: 20px; background: #222d32"></span><span style="display:block; width: 80%; float: left; height: 20px; background: #f4f5f7"></span></div>'
+ + '</a>'
+ + '<p class="text-center no-margin">Red</p>')
+ $skinsList.append($skinRed)
+ var $skinYellow =
+ $('<li />', { style: 'float:left; width: 33.33333%; padding: 5px;' })
+ .append('<a href="javascript:void(0)" data-skin="skin-yellow" style="display: block; box-shadow: 0 0 3px rgba(0,0,0,0.4)" class="clearfix full-opacity-hover">'
+ + '<div><span style="display:block; width: 20%; float: left; height: 7px;" class="bg-yellow-active"></span><span class="bg-yellow" style="display:block; width: 80%; float: left; height: 7px;"></span></div>'
+ + '<div><span style="display:block; width: 20%; float: left; height: 20px; background: #222d32"></span><span style="display:block; width: 80%; float: left; height: 20px; background: #f4f5f7"></span></div>'
+ + '</a>'
+ + '<p class="text-center no-margin">Yellow</p>')
+ $skinsList.append($skinYellow)
+
+ // Light sidebar skins
+ var $skinBlueLight =
+ $('<li />', { style: 'float:left; width: 33.33333%; padding: 5px;' })
+ .append('<a href="javascript:void(0)" data-skin="skin-blue-light" style="display: block; box-shadow: 0 0 3px rgba(0,0,0,0.4)" class="clearfix full-opacity-hover">'
+ + '<div><span style="display:block; width: 20%; float: left; height: 7px; background: #367fa9"></span><span class="bg-light-blue" style="display:block; width: 80%; float: left; height: 7px;"></span></div>'
+ + '<div><span style="display:block; width: 20%; float: left; height: 20px; background: #f9fafc"></span><span style="display:block; width: 80%; float: left; height: 20px; background: #f4f5f7"></span></div>'
+ + '</a>'
+ + '<p class="text-center no-margin" style="font-size: 12px">Blue Light</p>')
+ $skinsList.append($skinBlueLight)
+ var $skinBlackLight =
+ $('<li />', { style: 'float:left; width: 33.33333%; padding: 5px;' })
+ .append('<a href="javascript:void(0)" data-skin="skin-black-light" style="display: block; box-shadow: 0 0 3px rgba(0,0,0,0.4)" class="clearfix full-opacity-hover">'
+ + '<div style="box-shadow: 0 0 2px rgba(0,0,0,0.1)" class="clearfix"><span style="display:block; width: 20%; float: left; height: 7px; background: #fefefe"></span><span style="display:block; width: 80%; float: left; height: 7px; background: #fefefe"></span></div>'
+ + '<div><span style="display:block; width: 20%; float: left; height: 20px; background: #f9fafc"></span><span style="display:block; width: 80%; float: left; height: 20px; background: #f4f5f7"></span></div>'
+ + '</a>'
+ + '<p class="text-center no-margin" style="font-size: 12px">Black Light</p>')
+ $skinsList.append($skinBlackLight)
+ var $skinPurpleLight =
+ $('<li />', { style: 'float:left; width: 33.33333%; padding: 5px;' })
+ .append('<a href="javascript:void(0)" data-skin="skin-purple-light" style="display: block; box-shadow: 0 0 3px rgba(0,0,0,0.4)" class="clearfix full-opacity-hover">'
+ + '<div><span style="display:block; width: 20%; float: left; height: 7px;" class="bg-purple-active"></span><span class="bg-purple" style="display:block; width: 80%; float: left; height: 7px;"></span></div>'
+ + '<div><span style="display:block; width: 20%; float: left; height: 20px; background: #f9fafc"></span><span style="display:block; width: 80%; float: left; height: 20px; background: #f4f5f7"></span></div>'
+ + '</a>'
+ + '<p class="text-center no-margin" style="font-size: 12px">Purple Light</p>')
+ $skinsList.append($skinPurpleLight)
+ var $skinGreenLight =
+ $('<li />', { style: 'float:left; width: 33.33333%; padding: 5px;' })
+ .append('<a href="javascript:void(0)" data-skin="skin-green-light" style="display: block; box-shadow: 0 0 3px rgba(0,0,0,0.4)" class="clearfix full-opacity-hover">'
+ + '<div><span style="display:block; width: 20%; float: left; height: 7px;" class="bg-green-active"></span><span class="bg-green" style="display:block; width: 80%; float: left; height: 7px;"></span></div>'
+ + '<div><span style="display:block; width: 20%; float: left; height: 20px; background: #f9fafc"></span><span style="display:block; width: 80%; float: left; height: 20px; background: #f4f5f7"></span></div>'
+ + '</a>'
+ + '<p class="text-center no-margin" style="font-size: 12px">Green Light</p>')
+ $skinsList.append($skinGreenLight)
+ var $skinRedLight =
+ $('<li />', { style: 'float:left; width: 33.33333%; padding: 5px;' })
+ .append('<a href="javascript:void(0)" data-skin="skin-red-light" style="display: block; box-shadow: 0 0 3px rgba(0,0,0,0.4)" class="clearfix full-opacity-hover">'
+ + '<div><span style="display:block; width: 20%; float: left; height: 7px;" class="bg-red-active"></span><span class="bg-red" style="display:block; width: 80%; float: left; height: 7px;"></span></div>'
+ + '<div><span style="display:block; width: 20%; float: left; height: 20px; background: #f9fafc"></span><span style="display:block; width: 80%; float: left; height: 20px; background: #f4f5f7"></span></div>'
+ + '</a>'
+ + '<p class="text-center no-margin" style="font-size: 12px">Red Light</p>')
+ $skinsList.append($skinRedLight)
+ var $skinYellowLight =
+ $('<li />', { style: 'float:left; width: 33.33333%; padding: 5px;' })
+ .append('<a href="javascript:void(0)" data-skin="skin-yellow-light" style="display: block; box-shadow: 0 0 3px rgba(0,0,0,0.4)" class="clearfix full-opacity-hover">'
+ + '<div><span style="display:block; width: 20%; float: left; height: 7px;" class="bg-yellow-active"></span><span class="bg-yellow" style="display:block; width: 80%; float: left; height: 7px;"></span></div>'
+ + '<div><span style="display:block; width: 20%; float: left; height: 20px; background: #f9fafc"></span><span style="display:block; width: 80%; float: left; height: 20px; background: #f4f5f7"></span></div>'
+ + '</a>'
+ + '<p class="text-center no-margin" style="font-size: 12px">Yellow Light</p>')
+ $skinsList.append($skinYellowLight)
+
+ $demoSettings.append('<h4 class="control-sidebar-heading">Skins</h4>')
+ $demoSettings.append($skinsList)
+
+ $tabPane.append($demoSettings)
+ $('#control-sidebar-home-tab').after($tabPane)
+
+ setup()
+
+ $('[data-toggle="tooltip"]').tooltip()
+})
diff --git a/public/bower_components/admin-lte/dist/js/pages/dashboard.js b/public/bower_components/admin-lte/dist/js/pages/dashboard.js
new file mode 100644
index 0000000..75e77b9
--- /dev/null
+++ b/public/bower_components/admin-lte/dist/js/pages/dashboard.js
@@ -0,0 +1,210 @@
+/*
+ * Author: Abdullah A Almsaeed
+ * Date: 4 Jan 2014
+ * Description:
+ * This is a demo file used only for the main dashboard (index.html)
+ **/
+
+$(function () {
+
+ 'use strict';
+
+ // Make the dashboard widgets sortable Using jquery UI
+ $('.connectedSortable').sortable({
+ placeholder : 'sort-highlight',
+ connectWith : '.connectedSortable',
+ handle : '.box-header, .nav-tabs',
+ forcePlaceholderSize: true,
+ zIndex : 999999
+ });
+ $('.connectedSortable .box-header, .connectedSortable .nav-tabs-custom').css('cursor', 'move');
+
+ // jQuery UI sortable for the todo list
+ $('.todo-list').sortable({
+ placeholder : 'sort-highlight',
+ handle : '.handle',
+ forcePlaceholderSize: true,
+ zIndex : 999999
+ });
+
+ // bootstrap WYSIHTML5 - text editor
+ $('.textarea').wysihtml5();
+
+ $('.daterange').daterangepicker({
+ ranges : {
+ 'Today' : [moment(), moment()],
+ 'Yesterday' : [moment().subtract(1, 'days'), moment().subtract(1, 'days')],
+ 'Last 7 Days' : [moment().subtract(6, 'days'), moment()],
+ 'Last 30 Days': [moment().subtract(29, 'days'), moment()],
+ 'This Month' : [moment().startOf('month'), moment().endOf('month')],
+ 'Last Month' : [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')]
+ },
+ startDate: moment().subtract(29, 'days'),
+ endDate : moment()
+ }, function (start, end) {
+ window.alert('You chose: ' + start.format('MMMM D, YYYY') + ' - ' + end.format('MMMM D, YYYY'));
+ });
+
+ /* jQueryKnob */
+ $('.knob').knob();
+
+ // jvectormap data
+ var visitorsData = {
+ US: 398, // USA
+ SA: 400, // Saudi Arabia
+ CA: 1000, // Canada
+ DE: 500, // Germany
+ FR: 760, // France
+ CN: 300, // China
+ AU: 700, // Australia
+ BR: 600, // Brazil
+ IN: 800, // India
+ GB: 320, // Great Britain
+ RU: 3000 // Russia
+ };
+ // World map by jvectormap
+ $('#world-map').vectorMap({
+ map : 'world_mill_en',
+ backgroundColor : 'transparent',
+ regionStyle : {
+ initial: {
+ fill : '#e4e4e4',
+ 'fill-opacity' : 1,
+ stroke : 'none',
+ 'stroke-width' : 0,
+ 'stroke-opacity': 1
+ }
+ },
+ series : {
+ regions: [
+ {
+ values : visitorsData,
+ scale : ['#92c1dc', '#ebf4f9'],
+ normalizeFunction: 'polynomial'
+ }
+ ]
+ },
+ onRegionLabelShow: function (e, el, code) {
+ if (typeof visitorsData[code] != 'undefined')
+ el.html(el.html() + ': ' + visitorsData[code] + ' new visitors');
+ }
+ });
+
+ // Sparkline charts
+ var myvalues = [1000, 1200, 920, 927, 931, 1027, 819, 930, 1021];
+ $('#sparkline-1').sparkline(myvalues, {
+ type : 'line',
+ lineColor: '#92c1dc',
+ fillColor: '#ebf4f9',
+ height : '50',
+ width : '80'
+ });
+ myvalues = [515, 519, 520, 522, 652, 810, 370, 627, 319, 630, 921];
+ $('#sparkline-2').sparkline(myvalues, {
+ type : 'line',
+ lineColor: '#92c1dc',
+ fillColor: '#ebf4f9',
+ height : '50',
+ width : '80'
+ });
+ myvalues = [15, 19, 20, 22, 33, 27, 31, 27, 19, 30, 21];
+ $('#sparkline-3').sparkline(myvalues, {
+ type : 'line',
+ lineColor: '#92c1dc',
+ fillColor: '#ebf4f9',
+ height : '50',
+ width : '80'
+ });
+
+ // The Calender
+ $('#calendar').datepicker();
+
+ // SLIMSCROLL FOR CHAT WIDGET
+ $('#chat-box').slimScroll({
+ height: '250px'
+ });
+
+ /* Morris.js Charts */
+ // Sales chart
+ var area = new Morris.Area({
+ element : 'revenue-chart',
+ resize : true,
+ data : [
+ { y: '2011 Q1', item1: 2666, item2: 2666 },
+ { y: '2011 Q2', item1: 2778, item2: 2294 },
+ { y: '2011 Q3', item1: 4912, item2: 1969 },
+ { y: '2011 Q4', item1: 3767, item2: 3597 },
+ { y: '2012 Q1', item1: 6810, item2: 1914 },
+ { y: '2012 Q2', item1: 5670, item2: 4293 },
+ { y: '2012 Q3', item1: 4820, item2: 3795 },
+ { y: '2012 Q4', item1: 15073, item2: 5967 },
+ { y: '2013 Q1', item1: 10687, item2: 4460 },
+ { y: '2013 Q2', item1: 8432, item2: 5713 }
+ ],
+ xkey : 'y',
+ ykeys : ['item1', 'item2'],
+ labels : ['Item 1', 'Item 2'],
+ lineColors: ['#a0d0e0', '#3c8dbc'],
+ hideHover : 'auto'
+ });
+ var line = new Morris.Line({
+ element : 'line-chart',
+ resize : true,
+ data : [
+ { y: '2011 Q1', item1: 2666 },
+ { y: '2011 Q2', item1: 2778 },
+ { y: '2011 Q3', item1: 4912 },
+ { y: '2011 Q4', item1: 3767 },
+ { y: '2012 Q1', item1: 6810 },
+ { y: '2012 Q2', item1: 5670 },
+ { y: '2012 Q3', item1: 4820 },
+ { y: '2012 Q4', item1: 15073 },
+ { y: '2013 Q1', item1: 10687 },
+ { y: '2013 Q2', item1: 8432 }
+ ],
+ xkey : 'y',
+ ykeys : ['item1'],
+ labels : ['Item 1'],
+ lineColors : ['#efefef'],
+ lineWidth : 2,
+ hideHover : 'auto',
+ gridTextColor : '#fff',
+ gridStrokeWidth : 0.4,
+ pointSize : 4,
+ pointStrokeColors: ['#efefef'],
+ gridLineColor : '#efefef',
+ gridTextFamily : 'Open Sans',
+ gridTextSize : 10
+ });
+
+ // Donut Chart
+ var donut = new Morris.Donut({
+ element : 'sales-chart',
+ resize : true,
+ colors : ['#3c8dbc', '#f56954', '#00a65a'],
+ data : [
+ { label: 'Download Sales', value: 12 },
+ { label: 'In-Store Sales', value: 30 },
+ { label: 'Mail-Order Sales', value: 20 }
+ ],
+ hideHover: 'auto'
+ });
+
+ // Fix for charts under tabs
+ $('.box ul.nav a').on('shown.bs.tab', function () {
+ area.redraw();
+ donut.redraw();
+ line.redraw();
+ });
+
+ /* The todo list plugin */
+ $('.todo-list').todoList({
+ onCheck : function () {
+ window.console.log($(this), 'The element has been checked');
+ },
+ onUnCheck: function () {
+ window.console.log($(this), 'The element has been unchecked');
+ }
+ });
+
+});
diff --git a/public/bower_components/admin-lte/dist/js/pages/dashboard2.js b/public/bower_components/admin-lte/dist/js/pages/dashboard2.js
new file mode 100644
index 0000000..2b8d9b4
--- /dev/null
+++ b/public/bower_components/admin-lte/dist/js/pages/dashboard2.js
@@ -0,0 +1,274 @@
+$(function () {
+
+ 'use strict';
+
+ /* ChartJS
+ * -------
+ * Here we will create a few charts using ChartJS
+ */
+
+ // -----------------------
+ // - MONTHLY SALES CHART -
+ // -----------------------
+
+ // Get context with jQuery - using jQuery's .get() method.
+ var salesChartCanvas = $('#salesChart').get(0).getContext('2d');
+ // This will get the first returned node in the jQuery collection.
+ var salesChart = new Chart(salesChartCanvas);
+
+ var salesChartData = {
+ labels : ['January', 'February', 'March', 'April', 'May', 'June', 'July'],
+ datasets: [
+ {
+ label : 'Electronics',
+ fillColor : 'rgb(210, 214, 222)',
+ strokeColor : 'rgb(210, 214, 222)',
+ pointColor : 'rgb(210, 214, 222)',
+ pointStrokeColor : '#c1c7d1',
+ pointHighlightFill : '#fff',
+ pointHighlightStroke: 'rgb(220,220,220)',
+ data : [65, 59, 80, 81, 56, 55, 40]
+ },
+ {
+ label : 'Digital Goods',
+ fillColor : 'rgba(60,141,188,0.9)',
+ strokeColor : 'rgba(60,141,188,0.8)',
+ pointColor : '#3b8bba',
+ pointStrokeColor : 'rgba(60,141,188,1)',
+ pointHighlightFill : '#fff',
+ pointHighlightStroke: 'rgba(60,141,188,1)',
+ data : [28, 48, 40, 19, 86, 27, 90]
+ }
+ ]
+ };
+
+ var salesChartOptions = {
+ // Boolean - If we should show the scale at all
+ showScale : true,
+ // Boolean - Whether grid lines are shown across the chart
+ scaleShowGridLines : false,
+ // String - Colour of the grid lines
+ scaleGridLineColor : 'rgba(0,0,0,.05)',
+ // Number - Width of the grid lines
+ scaleGridLineWidth : 1,
+ // Boolean - Whether to show horizontal lines (except X axis)
+ scaleShowHorizontalLines: true,
+ // Boolean - Whether to show vertical lines (except Y axis)
+ scaleShowVerticalLines : true,
+ // Boolean - Whether the line is curved between points
+ bezierCurve : true,
+ // Number - Tension of the bezier curve between points
+ bezierCurveTension : 0.3,
+ // Boolean - Whether to show a dot for each point
+ pointDot : false,
+ // Number - Radius of each point dot in pixels
+ pointDotRadius : 4,
+ // Number - Pixel width of point dot stroke
+ pointDotStrokeWidth : 1,
+ // Number - amount extra to add to the radius to cater for hit detection outside the drawn point
+ pointHitDetectionRadius : 20,
+ // Boolean - Whether to show a stroke for datasets
+ datasetStroke : true,
+ // Number - Pixel width of dataset stroke
+ datasetStrokeWidth : 2,
+ // Boolean - Whether to fill the dataset with a color
+ datasetFill : true,
+ // String - A legend template
+ legendTemplate : '<ul class=\'<%=name.toLowerCase()%>-legend\'><% for (var i=0; i<datasets.length; i++){%><li><span style=\'background-color:<%=datasets[i].lineColor%>\'></span><%=datasets[i].label%></li><%}%></ul>',
+ // Boolean - whether to maintain the starting aspect ratio or not when responsive, if set to false, will take up entire container
+ maintainAspectRatio : true,
+ // Boolean - whether to make the chart responsive to window resizing
+ responsive : true
+ };
+
+ // Create the line chart
+ salesChart.Line(salesChartData, salesChartOptions);
+
+ // ---------------------------
+ // - END MONTHLY SALES CHART -
+ // ---------------------------
+
+ // -------------
+ // - PIE CHART -
+ // -------------
+ // Get context with jQuery - using jQuery's .get() method.
+ var pieChartCanvas = $('#pieChart').get(0).getContext('2d');
+ var pieChart = new Chart(pieChartCanvas);
+ var PieData = [
+ {
+ value : 700,
+ color : '#f56954',
+ highlight: '#f56954',
+ label : 'Chrome'
+ },
+ {
+ value : 500,
+ color : '#00a65a',
+ highlight: '#00a65a',
+ label : 'IE'
+ },
+ {
+ value : 400,
+ color : '#f39c12',
+ highlight: '#f39c12',
+ label : 'FireFox'
+ },
+ {
+ value : 600,
+ color : '#00c0ef',
+ highlight: '#00c0ef',
+ label : 'Safari'
+ },
+ {
+ value : 300,
+ color : '#3c8dbc',
+ highlight: '#3c8dbc',
+ label : 'Opera'
+ },
+ {
+ value : 100,
+ color : '#d2d6de',
+ highlight: '#d2d6de',
+ label : 'Navigator'
+ }
+ ];
+ var pieOptions = {
+ // Boolean - Whether we should show a stroke on each segment
+ segmentShowStroke : true,
+ // String - The colour of each segment stroke
+ segmentStrokeColor : '#fff',
+ // Number - The width of each segment stroke
+ segmentStrokeWidth : 1,
+ // Number - The percentage of the chart that we cut out of the middle
+ percentageInnerCutout: 50, // This is 0 for Pie charts
+ // Number - Amount of animation steps
+ animationSteps : 100,
+ // String - Animation easing effect
+ animationEasing : 'easeOutBounce',
+ // Boolean - Whether we animate the rotation of the Doughnut
+ animateRotate : true,
+ // Boolean - Whether we animate scaling the Doughnut from the centre
+ animateScale : false,
+ // Boolean - whether to make the chart responsive to window resizing
+ responsive : true,
+ // Boolean - whether to maintain the starting aspect ratio or not when responsive, if set to false, will take up entire container
+ maintainAspectRatio : false,
+ // String - A legend template
+ legendTemplate : '<ul class=\'<%=name.toLowerCase()%>-legend\'><% for (var i=0; i<segments.length; i++){%><li><span style=\'background-color:<%=segments[i].fillColor%>\'></span><%if(segments[i].label){%><%=segments[i].label%><%}%></li><%}%></ul>',
+ // String - A tooltip template
+ tooltipTemplate : '<%=value %> <%=label%> users'
+ };
+ // Create pie or douhnut chart
+ // You can switch between pie and douhnut using the method below.
+ pieChart.Doughnut(PieData, pieOptions);
+ // -----------------
+ // - END PIE CHART -
+ // -----------------
+
+ /* jVector Maps
+ * ------------
+ * Create a world map with markers
+ */
+ $('#world-map-markers').vectorMap({
+ map : 'world_mill_en',
+ normalizeFunction: 'polynomial',
+ hoverOpacity : 0.7,
+ hoverColor : false,
+ backgroundColor : 'transparent',
+ regionStyle : {
+ initial : {
+ fill : 'rgba(210, 214, 222, 1)',
+ 'fill-opacity' : 1,
+ stroke : 'none',
+ 'stroke-width' : 0,
+ 'stroke-opacity': 1
+ },
+ hover : {
+ 'fill-opacity': 0.7,
+ cursor : 'pointer'
+ },
+ selected : {
+ fill: 'yellow'
+ },
+ selectedHover: {}
+ },
+ markerStyle : {
+ initial: {
+ fill : '#00a65a',
+ stroke: '#111'
+ }
+ },
+ markers : [
+ { latLng: [41.90, 12.45], name: 'Vatican City' },
+ { latLng: [43.73, 7.41], name: 'Monaco' },
+ { latLng: [-0.52, 166.93], name: 'Nauru' },
+ { latLng: [-8.51, 179.21], name: 'Tuvalu' },
+ { latLng: [43.93, 12.46], name: 'San Marino' },
+ { latLng: [47.14, 9.52], name: 'Liechtenstein' },
+ { latLng: [7.11, 171.06], name: 'Marshall Islands' },
+ { latLng: [17.3, -62.73], name: 'Saint Kitts and Nevis' },
+ { latLng: [3.2, 73.22], name: 'Maldives' },
+ { latLng: [35.88, 14.5], name: 'Malta' },
+ { latLng: [12.05, -61.75], name: 'Grenada' },
+ { latLng: [13.16, -61.23], name: 'Saint Vincent and the Grenadines' },
+ { latLng: [13.16, -59.55], name: 'Barbados' },
+ { latLng: [17.11, -61.85], name: 'Antigua and Barbuda' },
+ { latLng: [-4.61, 55.45], name: 'Seychelles' },
+ { latLng: [7.35, 134.46], name: 'Palau' },
+ { latLng: [42.5, 1.51], name: 'Andorra' },
+ { latLng: [14.01, -60.98], name: 'Saint Lucia' },
+ { latLng: [6.91, 158.18], name: 'Federated States of Micronesia' },
+ { latLng: [1.3, 103.8], name: 'Singapore' },
+ { latLng: [1.46, 173.03], name: 'Kiribati' },
+ { latLng: [-21.13, -175.2], name: 'Tonga' },
+ { latLng: [15.3, -61.38], name: 'Dominica' },
+ { latLng: [-20.2, 57.5], name: 'Mauritius' },
+ { latLng: [26.02, 50.55], name: 'Bahrain' },
+ { latLng: [0.33, 6.73], name: 'São Tomé and Príncipe' }
+ ]
+ });
+
+ /* SPARKLINE CHARTS
+ * ----------------
+ * Create a inline charts with spark line
+ */
+
+ // -----------------
+ // - SPARKLINE BAR -
+ // -----------------
+ $('.sparkbar').each(function () {
+ var $this = $(this);
+ $this.sparkline('html', {
+ type : 'bar',
+ height : $this.data('height') ? $this.data('height') : '30',
+ barColor: $this.data('color')
+ });
+ });
+
+ // -----------------
+ // - SPARKLINE PIE -
+ // -----------------
+ $('.sparkpie').each(function () {
+ var $this = $(this);
+ $this.sparkline('html', {
+ type : 'pie',
+ height : $this.data('height') ? $this.data('height') : '90',
+ sliceColors: $this.data('color')
+ });
+ });
+
+ // ------------------
+ // - SPARKLINE LINE -
+ // ------------------
+ $('.sparkline').each(function () {
+ var $this = $(this);
+ $this.sparkline('html', {
+ type : 'line',
+ height : $this.data('height') ? $this.data('height') : '90',
+ width : '100%',
+ lineColor: $this.data('linecolor'),
+ fillColor: $this.data('fillcolor'),
+ spotColor: $this.data('spotcolor')
+ });
+ });
+});