(function () {
'use strict';
angular
.module('hyperion')
.controller('system.MainController', ['$http', '$state', '$stateParams', '$scope', '$rootScope', '$sessionStorage', '$timeout', '$websocket', '$filter', '$location', 'authService', 'sysClock', 'timerange', 'CONFIG', function($http, $state, $stateParams, $scope, $rootScope, $sessionStorage, $timeout, $websocket, $filter, $location, authService, sysClock, timerange, CONFIG){
$scope.menuSmall = $sessionStorage.currentUser.smallMenu;
$scope.current_title = $sessionStorage.currentUser.title;
$scope.current_first_name = $sessionStorage.currentUser.first_name;
$scope.current_last_name = $sessionStorage.currentUser.last_name;
$scope.current_company = $sessionStorage.currentUser.company_name;
$scope.current_last_signin = $sessionStorage.currentUser.last_signin;
///////////////////////////////////////////////////////////////////////
// SCOPE STATUS
var scopeIsActive = true;
$scope.$on('$destroy', function() {
scopeIsActive = false;
});
///////////////////////////////////////////////////////////////////////
// CLOCK INIT FUNCTION
$timeout(function() {
clock_update(true);
});
///////////////////////////////////////////////////////////////////////
// WEBSOCKET
// https://github.com/wilk/ng-websocket
$scope.connection = {state:'connecting', title:'CONNECTING...'};
console.log($sessionStorage.currentUser.wshost);
var ws = $websocket.$new({
url: $sessionStorage.currentUser.wshost+'?token='+$sessionStorage.currentUser.auth_token_str,
lazy: false,
reconnect: true,
enqueue: false,
mock: false,
protocols: ['binary', 'base64']
});
ws.$on('$open', function() {
$scope.connection = {state:'open', title:'CONNECTED'};
});
ws.$on('$close', function() {
$scope.connection = {state:'error', title:'CONNECTION ERROR'};
});
ws.$on('$error', function() {
$scope.connection = {state:'error', title:'CONNECTION ERROR'};
});
ws.$on('$message', function(message) {
//console.log('MainController ws.message: ', message);
if(message.event) {
switch(message.event.toLowerCase()) {
case 'auth:update':
$rootScope.$broadcast('auth:update', {
id: message.data.location,
status: message.data.status,
expiration: message.data.token_exp
});
break;
case 'light:state':
$rootScope.$broadcast('light:state', {
id: message.object,
state: message.data
});
break;
case 'light:request:new':
case 'light:request:update':
$rootScope.$broadcast('light:request', {
id: message.object,
request: message.data
});
break;
case 'socket:state':
$rootScope.$broadcast('socket:state', {
id: message.object,
state: message.data
});
break;
case 'socket:request:update':
$rootScope.$broadcast('socket:request', {
id: message.object,
request: message.data
});
break;
}
}
});
///////////////////////////////////////////////////////////////////////
// EVENTS MONITORING
/*
$scope.alert_off = function() {
$scope.alarm_active = false;
$scope.alarm_type = null;
}
$scope.alert_alarm = function() {
$scope.alarm_active = true;
$scope.alarm_type = 'alarm';
}
$scope.alert_warning = function() {
$scope.alarm_active = true;
$scope.alarm_type = 'trouble';
}
$sessionStorage.eventCache = {
'active':null, // currently active (highest priority) element or null if no active alert is set - set by trigger function
'trouble':[], // list of active troubles
'supervisory':[], // list of active supervisory
'alarm':[] // list of active alarms
};
$scope.alarm_active = false;
$scope.alarm_type = null;
// Function to add element to eventCache table
var addAlarm = function(event) {
console.log('MainController::addAlarm', event);
switch(event.event_code) {
case '004': // TROUBLE
console.log('MainController::addAlarm push trouble');
$sessionStorage.eventCache.trouble.push(event);
break;
case '005': // SUPERVISORY
$sessionStorage.eventCache.supervisory.push(event);
break;
case '006': // ALARM
$sessionStorage.eventCache.alarm.push(event);
break;
}
};
// Function to remove element from eventCache table
var clearAlarm = function(event_id) {
//console.log($sessionStorage.eventCache);
if($sessionStorage.eventCache.active.id == event_id) {
//console.log('clear $sessionStorage.eventCache.active');
$sessionStorage.eventCache.active = null;
}
$.each($sessionStorage.eventCache.alarm, function(index, element){
if(element) {
if(element.id == event_id) {
//console.log('remove ALARM['+index+']');
$sessionStorage.eventCache.alarm.splice(index, 1);
}
}
});
$.each($sessionStorage.eventCache.supervisory, function(index, element){
if(element) {
if(element.id == event_id) {
//console.log('remove SUPERVISORY['+index+']');
$sessionStorage.eventCache.supervisory.splice(index, 1);
}
}
});
$.each($sessionStorage.eventCache.trouble, function(index, element){
if(element) {
if(element.id == event_id) {
//console.log('remove TROUBLE['+index+']');
$sessionStorage.eventCache.trouble.splice(index, 1);
}
}
});
};
// Scan eventCache and decide if turn alert ON or OFF
// .. this should be executed after any eventCache change
var trigger = function() {
console.log('MainController::trigger');
console.log('MainController::trigger > eventCache.alarm.length: ', $sessionStorage.eventCache.alarm.length);
console.log('MainController::trigger > eventCache.supervisory.length: ', $sessionStorage.eventCache.supervisory.length);
console.log('MainController::trigger > eventCache.trouble.length: ', $sessionStorage.eventCache.trouble.length);
if($sessionStorage.eventCache.alarm.length > 0) {
// show ALARM alert
$scope.alarm_active = true;
$scope.alarm_type = 'alarm';
$sessionStorage.eventCache.active = $sessionStorage.eventCache.alarm[0];
console.log($sessionStorage.eventCache.alarm);
} else {
if($sessionStorage.eventCache.supervisory.length > 0) {
// show SUPERVISORY alert
$scope.alarm_active = true;
$scope.alarm_type = 'supervisory';
$sessionStorage.eventCache.active = $sessionStorage.eventCache.supervisory[0];
} else {
if($sessionStorage.eventCache.trouble.length > 0) {
console.log('MainController::trigger->trouble: ',$sessionStorage.eventCache.trouble[0]);
// show TROUBLE alert
$scope.alarm_active = true;
$scope.alarm_type = 'trouble';
$sessionStorage.eventCache.active = $sessionStorage.eventCache.trouble[0];
} else {
// clear all alerts
$scope.alarm_active = false;
$scope.alarm_type = '';
$sessionStorage.eventCache.active = null;
}
}
}
$rootScope.$broadcast('event-refresh', null);
};
// Get current events status (all [active-not cleared] events)
$http.get('/api/events/active').then(function(response) {
$.each(response.data, function(index, event){
addAlarm(event);
});
trigger();
});
// receive events from WebSocket
$scope.$on('event', function(event, payload) {
console.log('-----------------------');
console.log(payload.event);
console.log('-----------------------');
addAlarm(payload.event);
trigger();
});
$scope.$on('clear', function(event, payload) {
//console.log('-----------------------');
//console.log('CLEAR: '+payload.id);
//console.log('-----------------------');
clearAlarm(payload.id);
trigger();
});
*/
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// CLOCK SETTINGS & PREREQUISITES
// Cache some selectors
var watchmaker = $('#watchmaker');
var date = watchmaker.find('#date');
var clock = watchmaker.find('#clock');
var ampm = clock.find('.ampm');
var weekday_holder = watchmaker.find('#weekdays');
// Map digits to their names (this will be an array)
var digit_to_name = 'zero one two three four five six seven eight nine'.split(' ');
// Add the weekday names
var weekday_names = 'MON TUE WED THU FRI SAT SUN'.split(' ');
$.each(weekday_names, function(){
weekday_holder.append('' + this + '');
});
var weekdays = weekday_holder.find('span');
// This object will hold the digit elements
var digits = {};
// Positions for the hours, minutes, and seconds
var positions = ['h1', 'h2', ':', 'm1', 'm2', ':', 's1', 's2'];
// Generate the digits with the needed markup, and add them to the clock
var digit_holder = clock.find('.digits');
$.each(positions, function(){
if(this === ':'){
digit_holder.append('
');
} else{
var pos = $('
');
for(var i=1; i<8; i++){
pos.append('');
}
// Set the digits as key:value pairs in the digits object
digits[this] = pos;
// Add the digit elements to the page
digit_holder.append(pos);
}
});
///////////////////////////////////////////////////////////////////////
// CLOCK FUNCTIONS
// Return time zone abbreviation based on provided time zone - or wild guess ...
var getTimeZoneAbbr = function(timezone) {
if((typeof timezone !== 'undefined') && timezone) { // expecting something like 'Europe/Warsaw'
return moment.tz.zone(timezone).abbr(moment());
} else {
//return moment.tz.zone(moment.tz.guess()).abbr(moment());
return moment.tz.zone(sysClock.getTimeZone()).abbr(moment());
}
};
// Return moment.js object based on provided time zone - or wild guess ...
var getClockTime = function(timezone) {
if((typeof timezone !== 'undefined') && timezone) { // expecting something like 'Europe/Warsaw'
return moment.tz(timezone);
} else {
//return moment.tz.zone(moment.tz.guess());
return moment.tz(sysClock.getTimeZone());
}
};
// Return 12H or 24H clock format based on settings
var getClockFormat = function(){
var time = getClockTime();
if(sysClock.isClock12()) { // return true if clock is set to 12h
return time.format("hhmmssdA"); //12h
} else {
return time.format("HHmmssd"); //24h
}
};
// Switch clock display between 12H and 24H
$scope.flipClockSettings = function() {
sysClock.flipClock();
clock_update(false);
};
$scope.$on('clockUpdate', function() {
clock_update(false);
});
// Run a timer every second and update the clock
function clock_update(runTimeout) {
// Use moment.js to output the current time as a string
// hh is for the hours in 12-hour format,
// mm - minutes, ss-seconds (all with leading zeroes),
// d is for day of week and A is for AM/PM
//var now = moment();
var now = getClockFormat();
digits.h1.attr('class', digit_to_name[now[0]]);
digits.h2.attr('class', digit_to_name[now[1]]);
digits.m1.attr('class', digit_to_name[now[2]]);
digits.m2.attr('class', digit_to_name[now[3]]);
digits.s1.attr('class', digit_to_name[now[4]]);
digits.s2.attr('class', digit_to_name[now[5]]);
// The library returns Sunday as the first day of the week.
// Stupid, I know. Lets shift all the days one position down,
// and make Sunday last
var dow = now[6];
dow--;
// Sunday!
if(dow < 0){
dow = 6; // Make it last
}
// Mark the active day of the week
weekdays.removeClass('active').eq(dow).addClass('active');
// Set the am/pm text:
var ampm_value = '';
if(typeof now[7] !== 'undefined' && typeof now[8] !== 'undefined') {
ampm_value = now[7]+now[8];
}
ampm.text(ampm_value);
// Set timezone text:
$('#timezone').text(getTimeZoneAbbr(sysClock.getTimeZone()));
// Set date
date.text(getClockTime().format('MMMM Do, YYYY').toUpperCase());
// Schedule this function to be run again in 1 sec
// setTimeout(clock_update, 1000);
if(runTimeout) {
$timeout(function() {
if(scopeIsActive) { // stop execution is scope is destroyed
clock_update(runTimeout);
}
}, 1000);
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// TIMEZONE
var timezones = [
{name:"Coordinated Universal Time (UTC)",iana:"UTC",top:true},
{name:"Atlantic Time (Canada)",iana:"America/Halifax",top:true},
{name:"Eastern Time (US and Canada)",iana:"America/New_York",top:true},
{name:"Central Time (US and Canada)",iana:"America/Chicago",top:true},
{name:"Mountain Time (US and Canada)",iana:"America/Denver",top:true},
{name:"Pacific Time (US and Canada)",iana:"America/Los_Angeles",top:true},
{name:"Central European Time",iana:"Europe/Warsaw",top:true},
{name:'Azores',iana:'Atlantic/Azores',top:false},
{name:'Cape Verde Islands',iana:'Atlantic/Cape_Verde',top:false},
{name:'Brasilia',iana:'America/Sao_Paulo',top:false},
{name:'Georgetown',iana:'America/Guyana',top:false},
{name:'Greenland',iana:'America/Godthab',top:false},
{name:'Montevideo',iana:'America/Montevideo',top:false},
{name:'Newfoundland',iana:'America/St_Johns',top:false},
{name:'Georgetown, La Paz, San Juan',iana:'America/La_Paz',top:false},
{name:'Santiago',iana:'America/Santiago',top:false},
{name:'Manaus',iana:'America/Manaus',top:false},
{name:'Asuncion',iana:'America/Asuncion',top:false},
{name:'Caracas',iana:'America/Caracas',top:false},
{name:'Indiana (East)',iana:'America/Indiana/Indianapolis',top:false},
{name:'Bogota, Lima, Quito',iana:'America/Bogota',top:false},
{name:'Saskatchewan',iana:'America/Regina',top:false},
{name:'Guadalajara, Mexico City, Monterrey',iana:'America/Mexico_City',top:false},
{name:'Chihuahua, La Paz, Mazatlan',iana:'America/Mazatlan',top:false},
{name:'Arizona',iana:'America/Phoenix',top:false},
{name:'Chihuahua, La Paz, Mazatlan',iana:'America/Mazatlan',top:false},
{name:'Tijuana, Baja California',iana:'America/Tijuana',top:false},
{name:'Alaska',iana:'America/Juneau',top:false},
{name:'Hawaii',iana:'Pacific/Honolulu',top:false},
{name:'Midway Island, Samoa',iana:'Pacific/Pago_Pago',top:false},
{name:'Greenwich Mean Time: Dublin, Edinburgh, Lisbon, London',iana:'Europe/London',top:false},
{name:'Monrovia, Reykjavik',iana:'Africa/Monrovia',top:false},
{name:'Casablanca',iana:'Africa/Casablanca',top:false},
{name:'Belgrade, Bratislava, Budapest, Ljubljana, Prague',iana:'Europe/Prague',top:false},
{name:'Sarajevo, Skopje, Warsaw, Zagreb',iana:'Europe/Warsaw',top:false},
{name:'Brussels, Copenhagen, Madrid, Paris',iana:'Europe/Brussels',top:false},
{name:'Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna',iana:'Europe/Amsterdam',top:false},
{name:'Minsk',iana:'Europe/Minsk',top:false},
{name:'Cairo',iana:'Africa/Cairo',top:false},
{name:'Helsinki, Kiev, Riga, Sofia, Tallinn, Vilnius',iana:'Europe/Helsinki',top:false},
{name:'Athens, Bucharest, Istanbul',iana:'Europe/Athens',top:false},
{name:'Jerusalem',iana:'Asia/Jerusalem',top:false},
{name:'Harare, Pretoria',iana:'Africa/Johannesburg',top:false},
{name:'Beirut',iana:'Asia/Beirut',top:false},
{name:'Amman',iana:'Asia/Amman',top:false},
{name:'Windhoek',iana:'Africa/Windhoek',top:false},
{name:'Moscow, St. Petersburg, Volgograd',iana:'Europe/Moscow',top:false},
{name:'Kuwait, Riyadh',iana:'Asia/Riyadh',top:false},
{name:'Nairobi',iana:'Africa/Nairobi',top:false},
{name:'Baghdad',iana:'Asia/Baghdad',top:false},
{name:'Tbilisi',iana:'Asia/Tbilisi',top:false},
{name:'Tehran',iana:'Asia/Tehran',top:false},
{name:'Abu Dhabi, Muscat',iana:'Asia/Dubai',top:false},
{name:'Baku, Tbilisi, Yerevan',iana:'Asia/Baku',top:false},
{name:'Yerevan',iana:'Asia/Yerevan',top:false},
{name:'Port Louis',iana:'Indian/Mauritius',top:false},
{name:'Kabul',iana:'Asia/Kabul',top:false},
{name:'Ekaterinburg',iana:'Asia/Yekaterinburg',top:false},
{name:'Tashkent',iana:'Asia/Tashkent',top:false},
{name:'Islamabad, Karachi',iana:'Asia/Karachi',top:false},
{name:'Chennai, Kolkata, Mumbai, New Delhi',iana:'Asia/Kolkata',top:false},
{name:'Kathmandu',iana:'Asia/Kathmandu',top:false},
{name:'Astana, Dhaka',iana:'Asia/Dhaka',top:false},
{name:'Almaty, Novosibirsk',iana:'Asia/Almaty',top:false},
{name:'Yangon (Rangoon)',iana:'Asia/Yangon',top:false},
{name:'Bangkok, Hanoi, Jakarta',iana:'Asia/Bangkok',top:false},
{name:'Krasnoyarsk',iana:'Asia/Krasnoyarsk',top:false},
{name:'Beijing, Chongqing, Hong Kong, Urumqi',iana:'Asia/Hong_Kong',top:false},
{name:'Kuala Lumpur, Singapore',iana:'Asia/Singapore',top:false},
{name:'Taipei',iana:'Asia/Taipei',top:false},
{name:'Perth',iana:'Australia/Perth',top:false},
{name:'Irkutsk, Ulaanbaatar',iana:'Asia/Irkutsk',top:false},
{name:'Seoul',iana:'Asia/Seoul',top:false},
{name:'Osaka, Sapporo, Tokyo',iana:'Asia/Tokyo',top:false},
{name:'Yakutsk',iana:'Asia/Yakutsk',top:false},
{name:'Darwin',iana:'Australia/Darwin',top:false},
{name:'Adelaide',iana:'Australia/Adelaide',top:false},
{name:'Canberra, Melbourne, Sydney',iana:'Australia/Melbourne',top:false},
{name:'Brisbane',iana:'Australia/Brisbane',top:false},
{name:'Hobart',iana:'Australia/Hobart',top:false},
{name:'Vladivostok',iana:'Asia/Vladivostok',top:false},
{name:'Guam, Port Moresby',iana:'Pacific/Guam',top:false},
{name:'Magadan, Solomon Islands, New Caledonia',iana:'Asia/Magadan',top:false},
{name:'Fiji, Kamchatka, Marshall Is.',iana:'Pacific/Fiji',top:false},
{name:'Auckland, Wellington',iana:'Pacific/Auckland',top:false},
{name:'Petropavlovsk-Kamchatsky',iana:'Asia/Almaty',top:false},
{name:'Nuku\'alofa',iana:'Pacific/Tongatapu',top:false}
];
Number.prototype.pad = function(size) {
var sign = Math.sign(this) === -1 ? '-' : '';
return sign + new Array(size).concat([Math.abs(this)]).join('0').slice(-size);
};
$scope.autotimezone = {};
var auto_utc_offset = moment.tz($sessionStorage.currentUser.timezone).utcOffset();
var auto_utc_offset_sign = auto_utc_offset.toString().charAt(0);
auto_utc_offset_sign = auto_utc_offset_sign=='-'?'-':'+';
$scope.autotimezone.print = '(GMT'+auto_utc_offset_sign+''+Math.abs(auto_utc_offset/60).pad(2)+':'+Math.abs(auto_utc_offset%60).pad(2)+') ' + moment.tz($sessionStorage.currentUser.timezone).format('z');
$scope.autotimezone.iana = $sessionStorage.currentUser.timezone;
$scope.timezones_top = [];
$scope.timezones_bot = [];
$.each(timezones, function(key, timezone){
//console.log(moment.tz(timezone.iana).format('z'));
var utc_offset = moment.tz(timezone.iana).utcOffset();
var utc_offset_sign = utc_offset.toString().charAt(0);
utc_offset_sign = utc_offset_sign=='-'?'-':'+';
timezone.print = '(GMT'+utc_offset_sign+''+Math.abs(utc_offset/60).pad(2)+':'+Math.abs(utc_offset%60).pad(2)+') ' + timezone.name;
if(timezone.top) {
$scope.timezones_top.push(timezone);
} else {
$scope.timezones_bot.push(timezone);
}
});
$scope.toggleTZ = function(iana) {
console.log('toggleTZ: '+iana);
sysClock.setTimeZone(iana);
$rootScope.$broadcast('clockUpdate');
};
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// TIME RANGE
$scope.toggleTR = function(days) {
console.log('toggleTR: ' + days);
days = parseInt(days, 10);
switch(days) {
case 7:
$sessionStorage.currentUser.timerange = days;
$scope.timerange = '7D';
break;
case 30:
$sessionStorage.currentUser.timerange = days;
$scope.timerange = '30D';
break;
case 90:
$sessionStorage.currentUser.timerange = days;
$scope.timerange = '90D';
break;
case 180:
$sessionStorage.currentUser.timerange = days;
$scope.timerange = '180D';
break;
case 365:
$sessionStorage.currentUser.timerange = days;
$scope.timerange = '356D';
break;
default:
$sessionStorage.currentUser.timerange = 30; // default
$scope.timerange = '30D';
}
$rootScope.$broadcast('trUpdate');
//$rootScope.$broadcast('trUpdate', {range:$sessionStorage.currentUser.timerange});
};
$scope.toggleTR($sessionStorage.currentUser.timerange);
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// TEMPERATURE
CONFIG.TEMPERATURE = $sessionStorage.currentUser.temperature;
$scope.temperature = $sessionStorage.currentUser.temperature === 'F'?'°F':'°C';
$scope.toggleTemp = function() {
console.log('toggleTemp');
$sessionStorage.currentUser.temperature = $sessionStorage.currentUser.temperature === 'F'?'C':'F';
CONFIG.TEMPERATURE = $sessionStorage.currentUser.temperature;
$scope.temperature = $sessionStorage.currentUser.temperature === 'F'?'°F':'°C';
$rootScope.$broadcast('tempUpdate');
};
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// PROJECTS
$scope.projects = {};
console.log('$rootScope.project: ', $rootScope.project);
authService.getJWTAuth().then(authHeader => {
let time = timerange.calc($sessionStorage.currentUser.timerange);
let time_start = moment(time.start).format('YYYY-MM-DDTHH:mm:ss');
let time_end = moment(time.today).format('YYYY-MM-DDTHH:mm:ss');
var request = {'query':
'query { ' +
'projects(time_start:"' + time_start + '", time_end:"' + time_end + '", timezone:"' + sysClock.getTimeZone() + '") { ' +
'id ' +
'name ' +
'} ' +
'}'
};
$http({
method: 'POST',
url: CONFIG.APP_API,
data: request,
headers: authHeader
}).then(
function(response){ // resolve
$scope.projects = response.data.data.projects;
if($rootScope.project) {
$scope.project = $filter('filter')($scope.projects, {id: $rootScope.project})[0];
}
}, (error) => { // failure
console.error(error);
}
);
});
$scope.setProject = function(project_id) {
$sessionStorage.currentUser.project_selected = $rootScope.project = project_id;
$scope.project = $filter('filter')($scope.projects, {id: $rootScope.project})[0];
if($state.current.name !== 'system.dashboard') {
$location.path('/system/dashboard');
}
};
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// MENU
$scope.menuContent = null;
var menuCleanUp = function(menuArray) {
for(var i = 0; i < menuArray.length; i++) {
if(menuArray[i].removeme) {
menuArray.splice(i, 1);
menuCleanUp(menuArray);
break;
}
}
};
authService.getJWTAuth().then(authHeader => {
var request = {"query": "query { menu { level id parent position page_name page_link page_icon ismanagerial }}"};
$http({
method: 'POST',
url: CONFIG.APP_API,
data: request,
headers: authHeader
}).then(
function(response){ // resolve
let menu = response.data.data.menu;
// Load
$.each(menu, function(key, element){
if(element.parent === null) {
element.submenu = [];
element.nested = false;
$.each(menu, function(skey, selement){
if(selement.parent === element.id) {
element.submenu.push(selement);
element.nested = true;
selement.removeme = true;
}
});
}
});
menuCleanUp(menu);
$scope.menuContent = menu;
},function(error) { // failure
console.error(error);
}
);
});
// Animation
$scope.menuAnimation = false;
$scope.switchMenu = function() {
// toggle and remember setting
$scope.menuSmall = !$scope.menuSmall;
$sessionStorage.currentUser.smallMenu = !$sessionStorage.currentUser.smallMenu;
// set menuAnimation to true = animation in progress
$scope.menuAnimation = true;
// hide sidebar elements
$("ul.menu").css('background', 'none'); // hide logo image
$("ul.menu li").find("span.large, span.small").hide();
$("ul.menu li").hide();
// execute resize function with appropriate parameter
if(!$sessionStorage.currentUser.smallMenu) {
resizeContent(0);
} else {
resizeContent(-(parseInt($('#sidebar').width(),10)-50));
}
};
var resizeContent = function(offset) {
// animate sidebar
$("#sidebar").animate({'left': offset}, CONFIG.UI_SPEED, function(){});
// animate content
$("#content").animate({'margin-left': $('#sidebar').width() + offset}, {
duration: CONFIG.UI_SPEED,
step: function(now, fx){
//$scope.$apply();
//$state.reload();
},
complete: function(){
$scope.$apply();
$(".hyperion-highchart").each(function(){
if($(this).highcharts()){
$(this).highcharts().reflow();
}
});
// show sidebar elements
if(offset<0) {
$("ul.menu").css('background', 'url(\'../image/sidebar_logo_small.svg\') no-repeat right bottom'); // show appropriate logo image
$("ul.menu li").find("span.small").show(); // show appropriate elements in sidebar
} else {
$("ul.menu").css('background', 'url(\'../image/sidebar_logo.svg\') no-repeat center bottom'); // show appropriate logo image
$("ul.menu li").find("span.large").show(); // show appropriate elements in sidebar
}
$("ul.menu li").not('.spinner').fadeIn(CONFIG.UI_SPEED); // show elements except spinner
// re-set menuAnimation to false = animation finished
$scope.menuAnimation = false;
}
});
};
}]);
})();