function triggerChartsResize(){
try {
if (window.onresize){
window.onresize();
}
} catch (e){
//just swallow it
}
$(window).trigger('resize');
}
$(function(){
//settings
var $settings = $("#settings"),
$sidebarSettings = $("#sidebar-settings"),
settingsState = JSON.parse(localStorage.getItem("lb-white-settings-state")) || {
sidebar: 'left',
background: 'dark',
sidebarState: 'auto',
displaySidebar: true
},
$pageHeader = $(".page-header"),
$body = $("body"),
popoverReallyHide = function(){
$settings.data('bs.popover').hoverState = 'out'; //yeah. cool BS3 fix. popover programmatic APi works only on HOVER
$settings.popover('hide');
},
popoverClose = function(e){
var $popover = $settings.siblings(".popover");
if(!$.contains($popover[0], e.target)){
popoverReallyHide();
$(document).off("click", popoverClose);
}
},
sidebarSide = function(side){
if (side == "right"){
$body.addClass("sidebar-on-right")
} else {
$body.removeClass("sidebar-on-right")
}
},
backgroundStyle = function(style){
if (style == "dark"){
$body.addClass("background-dark");
} else {
$body.removeClass("background-dark");
}
},
sidebarState = function(state, triggerResize){
var $template = $('#sidebar-settings-template');
triggerResize = triggerResize == undefined ? true : false;
if (!$template[0]){
return;
}
$sidebarSettings.html(_.template($template.html(), {sidebarState: state}));
if (state == "auto"){
$(".sidebar, .side-nav, .wrap, .logo").removeClass("sidebar-icons");
} else {
$(".sidebar, .side-nav, .wrap, .logo").addClass("sidebar-icons");
}
if (triggerResize){
triggerChartsResize();
}
},
displaySidebar = function(display, triggerResize){
triggerResize = triggerResize == undefined ? true : false;
if (display == true){
$body.removeClass("sidebar-hidden")
} else {
$body.addClass("sidebar-hidden")
}
if (triggerResize){
triggerChartsResize();
}
};
sidebarSide(settingsState.sidebar);
backgroundStyle(settingsState.background);
sidebarState(settingsState.sidebarState, false);
displaySidebar(settingsState.displaySidebar, false);
if (!$settings[0]){
return;
}
$settings.popover({
template: '
',
html: true,
animation: false,
placement: 'bottom',
content: function(){
return _.template($('#settings-template').html(), settingsState);
}
}).click(function(e){
//close all open dropdowns
$('.page-header .dropdown.open .dropdown-toggle').dropdown('toggle');
// need to remove popover on anywhere-click
$(document).on("click", popoverClose);
$(this).focus();
return false;
});
$(".page-header .dropdown-toggle").click(function(){
popoverReallyHide()
$(document).off("click", popoverClose);
});
//sidevar left/right
$pageHeader.on("click", ".popover #sidebar-toggle .btn", function(){
var $this = $(this),
side = $this.data("value");
sidebarSide(side);
settingsState.sidebar = side;
localStorage.setItem("lb-white-settings-state", JSON.stringify(settingsState));
});
//background
$pageHeader.on("click", ".popover #background-toggle .btn", function(){
var $this = $(this),
style = $this.data("value");
backgroundStyle(style);
settingsState.background = style;
localStorage.setItem("lb-white-settings-state", JSON.stringify(settingsState));
});
//sidebar visibility
$pageHeader.on("click", ".popover #display-sidebar-toggle .btn", function(){
var $this = $(this),
display = $this.data("value");
displaySidebar(display);
settingsState.displaySidebar = display;
localStorage.setItem("lb-white-settings-state", JSON.stringify(settingsState));
});
//sidebar state {active, icons}
$sidebarSettings.on("click", ".btn", function(){
var $this = $(this),
state = $this.data("value");
if (state == 'icons'){
closeNavigation();
}
sidebarState(state);
settingsState.sidebarState = state;
localStorage.setItem("lb-white-settings-state", JSON.stringify(settingsState));
});
//close navigation if sidebar in icons state
if (($("#sidebar").is(".sidebar-icons") || $(window).width() < 1049) && $(window).width() > 767){
closeNavigation();
}
//imitate buttons radio behavior
$pageHeader.on("click", ".popover [data-toggle='buttons-radio'] .btn:not(.active)", function(){
var $this = $(this),
$buttons = $this.parent().find('.btn');
$buttons.removeClass('active');
setTimeout(function(){
$this.addClass('active');
}, 0)
});
});