diff options
author | 2017-06-09 16:18:59 +0200 | |
---|---|---|
committer | 2017-06-09 16:18:59 +0200 | |
commit | 60bb98696ee93f979914d8e88ed4708f59fcff9c (patch) | |
tree | a404880ec261f95c69fa4a6a1edd50ef9a66d160 /moonv4/moon_gui/static/app/policy/edit/parameter/rules | |
parent | 8039214d0caedfec5456bd8ee0898a1b9a55629a (diff) |
Stable version
Change-Id: I70001bedbdf1823cb9e8dccd545800387777201b
Diffstat (limited to 'moonv4/moon_gui/static/app/policy/edit/parameter/rules')
-rw-r--r-- | moonv4/moon_gui/static/app/policy/edit/parameter/rules/rules-list.tpl.html | 148 | ||||
-rw-r--r-- | moonv4/moon_gui/static/app/policy/edit/parameter/rules/rules.list.dir.js | 88 |
2 files changed, 158 insertions, 78 deletions
diff --git a/moonv4/moon_gui/static/app/policy/edit/parameter/rules/rules-list.tpl.html b/moonv4/moon_gui/static/app/policy/edit/parameter/rules/rules-list.tpl.html index 3ec54239..76ac4365 100644 --- a/moonv4/moon_gui/static/app/policy/edit/parameter/rules/rules-list.tpl.html +++ b/moonv4/moon_gui/static/app/policy/edit/parameter/rules/rules-list.tpl.html @@ -1,79 +1,74 @@ <div> - <div class="row"> - <div class="table-responsive" data-role="table"> + <div class="panel panel-default"> - <table class="table table-striped table-hover" ng-table="list.table"> + <div class="panel-heading"> - <thead> + <h4 data-translate="moon.policy.rules.edit.title">List of associated Subjects</h4> - <tr> + </div> + + <div class="panel-body"> - <th class="customTables sortable" - ng-class="{ 'sort-asc': list.table.isSortBy('name', 'asc'), 'sort-desc': list.table.isSortBy('name', 'desc') }" - ng-click="list.table.sorting('name', list.table.isSortBy('name', 'asc') ? 'desc' : 'asc')"> - <div data-translate="moon.policy.rules.list.table.id">Id</div> - </th> + <div class="table-responsive" data-role="table"> - <th class="customTables sortable" - ng-class="{ 'sort-asc': list.table.isSortBy('description', 'asc'), 'sort-desc': list.table.isSortBy('description', 'desc') }" - ng-click="list.table.sorting('description', list.table.isSortBy('description', 'asc') ? 'desc' : 'asc')"> - <div data-translate="moon.policy.rules.list.table.metaRule">Meta Rule</div> - </th> + <table class="table table-striped table-hover" ng-table="list.table"> - <th class="customTables sortable" - ng-class="{ 'sort-asc': list.table.isSortBy('enabled', 'asc'), 'sort-desc': list.table.isSortBy('enabled', 'desc') }" - ng-click="list.table.sorting('enabled', list.table.isSortBy('enabled', 'asc') ? 'desc' : 'asc')"> - <div data-translate="moon.policy.rules.list.table.enabled">Enabled</div> - </th> + <thead> - <th class="customTables sortable" - ng-class="{ 'sort-asc': list.table.isSortBy('enabled', 'asc'), 'sort-desc': list.table.isSortBy('enabled', 'desc') }" - ng-click="list.table.sorting('enabled', list.table.isSortBy('enabled', 'asc') ? 'desc' : 'asc')"> - <div data-translate="moon.policy.rules.list.table.rule">Rule</div> - </th> - </tr> + <tr> - </thead> + <th class="customTables sortable" + ng-class="{ 'sort-asc': list.table.isSortBy('description', 'asc'), 'sort-desc': list.table.isSortBy('description', 'desc') }" + ng-click="list.table.sorting('description', list.table.isSortBy('description', 'asc') ? 'desc' : 'asc')"> + <div data-translate="moon.policy.rules.list.table.metaRule">Meta Rule</div> + </th> - <moon-loader ng-if="list.loadingRules"></moon-loader> + <th class="customTables sortable"> + <div data-translate="moon.policy.rules.list.table.rule">Rule</div> + </th> - <tbody ng-if="!list.loadingRules && !list.hasRules()"> - <tr> - <td colspan="2"><span data-translate="moon.policy.rules.list.table.notFound">There is no Rules</span></td> + <th class="customTables sortable"> + <div data-translate="moon.policy.rules.list.table.instructions">Instruction</div> + </th> + + <th class="customTables sortable"> + <div data-translate="moon.policy.rules.list.table.action.title">Actions</div> + </th> </tr> - </tbody> - <tbody ng-if="!list.loadingRules && list.hasRules()"> + </thead> - <tr ng-repeat="aRule in $data | filter:list.search.find | orderBy:sort:reverse"> - <td ng-bind="aRule.id"></td> + <moon-loader ng-if="list.loadingRules"></moon-loader> - <td> - <span ng-if="!list.getMetaRuleFromRule(aRule)"> - <moon-loader ng-if="!list.getMetaRuleFromRule(aRule)" ></moon-loader> - <em data-translate="moon.policy.rules.list.table.loading.metaRule">Loading </em> - </span> + <tbody ng-if="!list.loadingRules && !list.hasRules()"> + <tr> + <td colspan="4"><span data-translate="moon.policy.rules.list.table.notFound">There is no Rules</span></td> + </tr> + </tbody> - <span ng-if="list.getMetaRuleFromRule(aRule)"> - <span ng-bind="aRule.meta_rule.name"></span> - </span> - </td> + <tbody ng-if="!list.loadingRules && list.hasRules()"> - <td> - <span ng-if="aRule.enabled" class="glyphicon glyphicon-ok"></span> - <span ng-if="!aRule.enabled" class="glyphicon glyphicon-remove"></span> - </td> + <tr ng-repeat="aRule in $data | filter:list.search.find | orderBy:sort:reverse"> + <td> + <span ng-if="!list.getMetaRuleFromRule(aRule)"> + <moon-loader ng-if="!list.getMetaRuleFromRule(aRule)" ></moon-loader> + <em data-translate="moon.policy.rules.list.table.loading.metaRule">Loading </em> + </span> - <td > + <span ng-if="list.getMetaRuleFromRule(aRule)"> + <span ng-bind="aRule.meta_rule.name"></span> + </span> + </td> - <span ng-if="!list.getMetaRuleFromRule(aRule)"> - <moon-loader ng-if="!list.getMetaRuleFromRule(aRule)" ></moon-loader> - <em data-translate="moon.policy.rules.list.table.loading.metaRule">Loading </em> - </span> + <td> + <span ng-if="!list.getMetaRuleFromRule(aRule)"> + <moon-loader ng-if="!list.getMetaRuleFromRule(aRule)" ></moon-loader> + <em data-translate="moon.policy.rules.list.table.loading.metaRule">Loading </em> + </span> - <span ng-if="list.getMetaRuleFromRule(aRule)" ng-repeat="(key, value) in aRule.rule"> + <span ng-if="list.getMetaRuleFromRule(aRule)" ng-repeat="(key, value) in aRule.rule"> <span ng-if="!list.getCategoryFromRuleIndex(key, aRule)"> <moon-loader ng-if="!list.getCategoryFromRuleIndex(key, aRule)" ></moon-loader> @@ -87,13 +82,50 @@ </span> - </td> + </td> + + <td> + <pre ng-bind="aRule.instructions | json "></pre> + </td> + + <td> + + <a href="" ng-if="!aRule.loader" ng-click="list.deleteRules(aRule)" > + <span class="glyphicon glyphicon-transfer"></span> + <span class="control-label" data-translate="moon.policy.rules.list.table.action.delete">Delete</span> + </a> + + <div ng-if="aRule.loader"> + + <moon-loader></moon-loader> - </tr> + </div> + + </td> + + </tr> + + </tbody> + + </table> + + </div> + + </div> + + </div> + + <div ng-if="list.editMode" class="panel panel-default"> + + <div class="panel-heading"> + + <h4 data-translate="moon.policy.rules.edit.action.add.title">Add a Rules</h4> + + </div> - </tbody> + <div class="panel-body">. - </table> + <moon-rules-edit policy="list.policy"></moon-rules-edit> </div> diff --git a/moonv4/moon_gui/static/app/policy/edit/parameter/rules/rules.list.dir.js b/moonv4/moon_gui/static/app/policy/edit/parameter/rules/rules.list.dir.js index 98e1d62b..5c3e7457 100644 --- a/moonv4/moon_gui/static/app/policy/edit/parameter/rules/rules.list.dir.js +++ b/moonv4/moon_gui/static/app/policy/edit/parameter/rules/rules.list.dir.js @@ -28,13 +28,14 @@ .module('moon') .controller('moonRulesListController', moonRulesListController); - moonRulesListController.$inject = [ 'NgTableParams', '$filter', 'metaRuleService', 'ruleService', 'dataService']; + moonRulesListController.$inject = [ '$scope', '$rootScope', 'NgTableParams', '$filter', 'metaRuleService', 'rulesService', 'dataService', '$translate', 'alertService' ]; - function moonRulesListController( NgTableParams, $filter, metaRuleService, ruleService, dataService) { + function moonRulesListController( $scope, $rootScope, NgTableParams, $filter, metaRuleService, rulesService, dataService, $translate, alertService ) { var list = this; list.rules = []; + list.editMode = $scope.list.editMode; list.loadingRules = true; @@ -43,6 +44,7 @@ list.getRules = getRules; list.hasRules = hasRules; list.refreshRules = refreshRules; + list.deleteRules = deleteRules; list.getMetaRuleFromRule = getMetaRuleFromRule; list.getCategoryFromRuleIndex = getCategoryFromRuleIndex; @@ -55,41 +57,40 @@ function activate(){ - newRulesTable(); manageRules(); + } + var rootListeners = { + 'event:createRulesFromDataRulesSuccess': $rootScope.$on('event:createRulesFromDataRulesSuccess', addRulesToList) - function manageRules(){ + }; + + _.each(rootListeners, function(unbind){ + $scope.$on('$destroy', rootListeners[unbind]); + }); - ruleService.findAllFromPolicyWithCallback(list.policy.id, function(data){ + function manageRules(){ - console.log('rules'); - console.log(data); + rulesService.findAllFromPolicyWithCallback(list.policy.id, function(data){ list.rules = data; list.loadingRules = false; refreshRules(); + }); } - - - - function newRulesTable() { list.table = new NgTableParams({ page: 1, // show first page - count: 10, // count per page - sorting: { - name: 'asc' // initial sorting - } + count: 10 // count per page }, { @@ -134,7 +135,12 @@ /** - * Prerequisite : meta Rule should be completely loaded + * Prerequisite : meta Rule must be completely loader + * Depending on the meta_rule, the rule array will be filled by subject(s), object(s) or an action(s) + * the only way to know if rule[i] contains a subject/object/action is to check + * how many subject/object/action are associated to a MetaRule + * For example if the associated MetaRule contains 2 subjects, 1 object and 2 actions + * then the 2 first elements of rule array are 2 subject, the third one will be an object, and the 2 last will be action * @param index * @param rule */ @@ -145,7 +151,7 @@ rule.rule_value = Array.apply(null, new Array(rule.rule.length)).map(function(){ return { category: {} - } + }; }); } @@ -200,10 +206,11 @@ rule.rule_value[index].callCategoryInProgress = false; rule.rule_value[index].category = { name : 'ERROR' - } + }; } } + // if the call is in progress return false return false; } @@ -220,7 +227,7 @@ var ind = index + 1; - return rule.meta_rule.subject_categories.length < ind && ind <= ( rule.meta_rule.object_categories.length + rule.meta_rule.subject_categories.length ); + return rule.meta_rule.subject_categories.length < ind && ind <= ( rule.meta_rule.object_categories.length + rule.meta_rule.subject_categories.length ); } @@ -240,7 +247,6 @@ return list.getRules().length > 0; } - /** * Refresh the table */ @@ -249,6 +255,48 @@ list.table.reload(); } + function addRulesToList(event, rules){ + list.rules.push(rules); + refreshRules(); + } + + /** + * Delete + */ + function deleteRules(rules){ + + rules.loader = true; + + rulesService.delete(rules.id, list.policy.id, deleteRulesSuccess, deleteRulesError ); + + function deleteRulesSuccess(){ + + $translate('moon.policy.rules.edit.action.add.delete.success').then( function(translatedValue) { + alertService.alertSuccess(translatedValue); + }); + + removeRulesFromList(rules); + refreshRules(); + + rules.loader = false; + + } + + function deleteRulesError(reason){ + + $translate('moon.policy.rules.edit.action.add.delete.success', {reason: reason.message}).then( function(translatedValue) { + alertService.alertError(translatedValue); + }); + + rules.loader = false; + + } + + } + + function removeRulesFromList(rules){ + list.rules = _.without(list.rules, rules); + } } })();
\ No newline at end of file |