pip-webui
Version:
HTML5 UI for LOB applications
214 lines (169 loc) • 6.89 kB
JavaScript
/**
* @file Application Side Nav component
* @copyright Digital Living Software Corp. 2014-2016
*/
/* global angular */
(function () {
'use strict';
var thisModule = angular.module('pipSideNav',
['ngMaterial', 'pipTranslate', 'pipFocused', 'pipNav.Templates', 'pipSideNav.Service']);
thisModule.config(function(pipTranslateProvider) {
pipTranslateProvider.translations('en', {
'SIDENAV_SINCE': 'since'
});
pipTranslateProvider.translations('ru', {
'SIDENAV_SINCE': 'с'
});
});
// Main application sidenav directive
thisModule.directive('pipSidenav', function() {
return {
restrict: 'EA',
scope: {
primaryPartyAvatar: '=pipPrimaryAvatar',
secondaryPartyAvatar: '=pipSecondaryAvatar',
partyName: '=pipName'
},
replace: false,
templateUrl: 'sidenav/sidenav.html',
controller: 'pipSideNavController'
};
});
thisModule.controller('pipSideNavController',
function ($scope, $element, $state, $rootScope, $window, $location, $timeout, pipState, pipTranslate, pipSideNav) {
// Apply class and call resize
$element.addClass('pip-sidenav');
$scope.config = pipSideNav.config();
$scope.$avatarReset = false;
$rootScope.$on('pipAppBarNavIconClicked', onAppBarNavIconClick);
$rootScope.$on('pipSideNavChanged', onConfigChanged);
$scope.itemVisible = itemVisible;
$scope.onUserClick = onUserClick;
$scope.onPartyClick = onPartyClick;
$scope.onLinkClick = onLinkClick;
$scope.isSectionEmpty = isSectionEmpty;
$scope.getParty = getParty;
$scope.getUser = getUser;
$scope.getConnection = getConnection;
return;
//------------------------
function getParty(prop) {
if (!$rootScope.$party) {
return;
}
if (prop) {
return $rootScope.$party[prop];
}
return $rootScope.$party;
}
function getUser(prop) {
if (!$rootScope.$user) {
return;
}
if (prop) {
return $rootScope.$user[prop];
}
return $rootScope.$user;
}
function getConnection(prop) {
if (!$rootScope.$connection) {
return;
}
if (prop) {
return $rootScope.$connection[prop];
}
return $rootScope.$connection;
}
function itemVisible(item) {
return item && item.access && !item.access($rootScope.$party, $rootScope.$user, item);
}
function isSectionEmpty(linkCollection) {
var result = true;
_.each(linkCollection, function(link){
if (!itemVisible(link))
result = false;
});
return result;
}
function onAppBarNavIconClick(event) {
pipSideNav.open();
}
function onConfigChanged(event, config) {
$scope.config = config;
}
function onUserClick() {
$rootScope.$broadcast('pipSideNavUserClicked');
pipSideNav.close();
}
function onPartyClick() {
$rootScope.$broadcast('pipSideNavPartyClicked');
pipSideNav.close();
}
function processStateParams(params) {
if (params == null) return null;
var result = {};
for (var prop in params) {
if (params.hasOwnProperty(prop)) {
if (params[prop] == ':party_id') {
result[prop] = $rootScope.$party ? $rootScope.$party.id : null;
} else if (params[prop] == ':user_id') {
result[prop] = $rootScope.$user ? $rootScope.$user.id : null;
} else {
result[prop] = params[prop];
}
}
}
return result;
}
function processUrlParams(url) {
if (url == null) return null;
var result = url.replace(':party_id', $rootScope.$party ? $rootScope.$party.id : '');
result = result.replace(':user_id', $rootScope.$user ? $rootScope.$user.id : '');
return result;
}
function onLinkClick(event, link) {
event.stopPropagation();
if (!link) {
pipSideNav.close();
return;
}
if (link.href) {
if (link.href.split('?')[0] === $window.location.href.split('?')[0]) {
pipSideNav.close();
return;
}
pipSideNav.close();
$timeout(function() {
$window.location.href = processUrlParams(link.href);
}, 300);
return;
}
else if (link.url) {
if (link.url.split(/[\s/?]+/)[1] === $location.url().split(/[\s/?]+/)[1]) {
pipSideNav.close();
return;
}
pipSideNav.close();
$timeout(function() {
$location.url(processUrlParams(link.url));
}, 300);
return;
}
else if (link.state) {
if ($state.current.name === link.state) {
pipSideNav.close();
return;
}
pipSideNav.close();
$timeout(function() {
pipState.go(link.state, processStateParams(link.stateParams));
}, 300);
return;
}
else if (link.event)
$rootScope.$broadcast('pipSideNavLinkClicked', link.event);
pipSideNav.close();
}
}
);
})();