2016-10-12 01:50:47 -04:00

183 lines
4.6 KiB
JavaScript

var screenSizes = {
xs: 480,
sm: 768,
md: 992,
lg: 1200
};
Template.AdminLTE.onCreated(function () {
var self = this;
var skin = 'blue';
var fixed = false;
var sidebarMini = false;
if (this.data) {
skin = this.data.skin || skin;
fixed = this.data.fixed || fixed;
sidebarMini = this.data.sidebarMini || sidebarMini;
}
self.isReady = new ReactiveVar(false);
self.style = waitOnCSS(cssUrl());
self.skin = waitOnCSS(skinUrl(skin));
fixed && $('body').addClass('fixed');
sidebarMini && $('body').addClass('sidebar-mini');
self.removeClasses = function () {
fixed && $('body').removeClass('fixed');
sidebarMini && $('body').removeClass('sidebar-mini');
}
this.autorun(function () {
if (self.style.ready() && self.skin.ready()) {
self.isReady.set(true);
}
});
});
Template.AdminLTE.onDestroyed(function () {
this.removeClasses();
this.style.remove();
this.skin.remove();
});
Template.AdminLTE.helpers({
isReady: function () {
return Template.instance().isReady.get();
},
loadingTemplate: function () {
return this.loadingTemplate || 'AdminLTE_loading';
},
skin: function () {
return this.skin || 'blue';
}
});
Template.AdminLTE.events({
'click [data-toggle=offcanvas]': function (e, t) {
e.preventDefault();
//Enable sidebar push menu
if ($(window).width() > (screenSizes.sm - 1)) {
$("body").toggleClass('sidebar-collapse');
}
//Handle sidebar push menu for small screens
else {
if ($("body").hasClass('sidebar-open')) {
$("body").removeClass('sidebar-open');
$("body").removeClass('sidebar-collapse')
} else {
$("body").addClass('sidebar-open');
}
}
},
'click .content-wrapper': function (e, t) {
//Enable hide menu when clicking on the content-wrapper on small screens
if ($(window).width() <= (screenSizes.sm - 1) && $("body").hasClass("sidebar-open")) {
$("body").removeClass('sidebar-open');
}
},
'click .sidebar li a': function (e, t) {
//Get the clicked link and the next element
var $this = $(e.currentTarget);
var checkElement = $this.next();
//Check if the next element is a menu and is visible
if ((checkElement.is('.treeview-menu')) && (checkElement.is(':visible'))) {
//Close the menu
checkElement.slideUp('normal', function () {
checkElement.removeClass('menu-open');
});
checkElement.parent("li").removeClass("active");
}
//If the menu is not visible
else if ((checkElement.is('.treeview-menu')) && (!checkElement.is(':visible'))) {
//Get the parent menu
var parent = $this.parents('ul').first();
//Close all open menus within the parent
var ul = parent.find('ul:visible').slideUp('normal');
//Remove the menu-open class from the parent
ul.removeClass('menu-open');
//Get the parent li
var parent_li = $this.parent("li");
//Open the target menu and add the menu-open class
checkElement.slideDown('normal', function () {
//Add the class active to the parent li
checkElement.addClass('menu-open');
parent.find('li.active').removeClass('active');
parent_li.addClass('active');
});
}
//if this isn't a link, prevent the page from being redirected
if (checkElement.is('.treeview-menu')) {
e.preventDefault();
}
}
});
function cssUrl () {
return Meteor.absoluteUrl('packages/mfactory_admin-lte/css/AdminLTE.min.css');
}
function skinUrl (name) {
return Meteor.absoluteUrl(
'packages/mfactory_admin-lte/css/skins/skin-' + name + '.min.css');
}
function waitOnCSS (url, timeout) {
var isLoaded = new ReactiveVar(false);
timeout = timeout || 5000;
var link = document.createElement('link');
link.type = 'text/css';
link.rel = 'stylesheet';
link.href = url;
link.onload = function () {
isLoaded.set(true);
};
if (link.addEventListener) {
link.addEventListener('load', function () {
isLoaded.set(true);
}, false);
}
link.onreadystatechange = function () {
var state = link.readyState;
if (state === 'loaded' || state === 'complete') {
link.onreadystatechange = null;
isLoaded.set(true);
}
};
var cssnum = document.styleSheets.length;
var ti = setInterval(function () {
if (document.styleSheets.length > cssnum) {
isLoaded.set(true);
clearInterval(ti);
}
}, 10);
setTimeout(function () {
isLoaded.set(true);
}, timeout);
$(document.head).append(link);
return {
ready: function () {
return isLoaded.get();
},
remove: function () {
$('link[href="' + url + '"]').remove();
}
};
}