UNPKG

bauhausjs

Version:
103 lines (88 loc) 4.28 kB
angular.module('bauhaus.role.directives', ['bauhaus.role.services']); angular.module('bauhaus.role.directives').directive('bauhausRoles', function (SharedRoles) { return { restrict: 'AEC', template: '<div class="page-content-field">' + ' <label class="page-content-field-label">{{config.label}}</label>' + ' <div class="tag-list"><div class="tag" ng-repeat="role in value"><i class="fa fa-group"></i> {{ roles.all[role].name }} <div class="tag-delete" ng-click="removeRole(role)"><span class="fa fa-times"></span></div></div></div>' + ' <div class="page-content-field-control"><select ng-model="newRole" ng-options="id as obj.name for (id, obj) in chooseRole"></select> <button class="button" ng-click="addRole()">Add Role</button></div>' + '</div>', scope: { value: '=ngModel', config: '=fieldConfig' }, link: function (scope, el, attr) { scope.chooseRole = {}; scope.roles = SharedRoles.store; if (Array.isArray(scope.value) === false) { scope.value = []; } scope.getRoles = function () { var roles = {}; for (var id in scope.roles.all) { var role = scope.roles.all[id]; if (scope.value && scope.value.indexOf( id ) === -1) { if (scope.newRole == null) { scope.newRole = id; } roles[id] = role; } } return roles; }; scope.updateRoleList = function () { if (scope.roles && scope.roles.all && typeof scope.roles.all === 'object' && Object.keys(scope.roles.all).length > 0) { scope.chooseRole = scope.getRoles(); } }; scope.$watch('roles.all', function (newVal) { scope.updateRoleList(); }, true); scope.$watch('value', function (newVal) { scope.updateRoleList(); }, true); scope.removeRole = function (role) { var index = scope.value.indexOf( role ); if (index !== -1) { scope.value.splice(index, 1); } }; scope.updateRoleList(); scope.addRole = function () { if (scope.newRole && scope.value.indexOf( scope.newRole ) === -1) { scope.value.push(scope.newRole); scope.newRole = null; scope.chooseRole = scope.getRoles(); } }; } }; }); angular.module('bauhaus.role.directives').directive('bauhausPermissions', function (SharedPermissions) { return { restrict: 'AEC', template: '<div class="form-field">' + ' <label class="page-content-field-label">{{config.label}}</label>' + ' <div class="checkbox-group" ng-repeat="(name, service) in permissions.all">' + ' <div class="checkbox-group-title">{{name}}</div>' + ' <div class="checkbox-group-element" ng-repeat="permission in service">' + ' <input type="checkbox" ng-model="value[name + \':\' + permission]" id="{{ name + \':\' + permission }}">' + ' <label for="{{ name + \':\' + permission }}" ng-class="{ active: value[name + \':\' + permission] === true }">{{permission}}</label>' + ' <div>' + ' </div>' + '</div>', scope: { value: '=ngModel', config: '=fieldConfig' }, controller: function ($scope) { $scope.permissions = SharedPermissions.store; $scope.$watchCollection('value', function (newVal) { // permission updated, set to default value if undefined if (typeof newVal === 'undefined') { $scope.value = {}; } }), true; } }; });