r133 - in trunk/faxtomail-ui-web/src/main/webapp: WEB-INF/content/admin js
Author: echatellier Date: 2014-06-05 11:43:43 +0200 (Thu, 05 Jun 2014) New Revision: 133 Url: http://forge.codelutin.com/projects/faxtomail/repository/revisions/133 Log: Display full node path in select. Remove binding on methods. Filter mail filters by root mail folders. Modified: trunk/faxtomail-ui-web/src/main/webapp/WEB-INF/content/admin/configuration-input.jsp trunk/faxtomail-ui-web/src/main/webapp/js/configuration.js Modified: trunk/faxtomail-ui-web/src/main/webapp/WEB-INF/content/admin/configuration-input.jsp =================================================================== --- trunk/faxtomail-ui-web/src/main/webapp/WEB-INF/content/admin/configuration-input.jsp 2014-06-05 07:32:18 UTC (rev 132) +++ trunk/faxtomail-ui-web/src/main/webapp/WEB-INF/content/admin/configuration-input.jsp 2014-06-05 09:43:43 UTC (rev 133) @@ -50,14 +50,14 @@ 'mailFields': <s:property value="toJson(mailFields)" escapeHtml="false"/>, // datas 'configuration': <s:property value="toJson(configuration)" escapeHtml="false"/>, - 'etatAttentes' : <s:property value="toJson(etatAttentes)" escapeHtml="false"/>, - 'demandTypes' : <s:property value="toJson(demandTypes)" escapeHtml="false"/>, + 'etatAttentes': <s:property value="toJson(etatAttentes)" escapeHtml="false"/>, + 'demandTypes': <s:property value="toJson(demandTypes)" escapeHtml="false"/>, 'mailFolders': <s:property value="toJson(mailFolders)" escapeHtml="false"/>, 'searchDisplayColumns': <s:property value="toJson(configuration.searchDisplayColumns)" escapeHtml="false"/>, 'users': <s:property value="toJson(users)" escapeHtml="false"/>, 'mailFilters': <s:property value="toJson(mailFilters)" escapeHtml="false"/>, 'emailAccounts': <s:property value="toJson(emailAccounts)" escapeHtml="false"/> - }); + }); </script> </head> @@ -69,7 +69,7 @@ <s:form id="main_form" action="configuration" method="post" ng-controller="ConfigurationController"> - <s:hidden name="activeTab"/> + <!--<s:hidden name="activeTab"/>--> <ul id="tabs" class="nav nav-tabs"> <li class="active"><a href="#tabs-general" data-toggle="tab">Général</a></li> @@ -512,38 +512,52 @@ <div id="tabs-filters" class="tab-pane" ng-controller="ConfigurationFilterController"> <input type="hidden" name="mailFiltersJson" value="{{mailFilters}}" /> - <table class="table table-hover table-bordered"> - <thead> - <tr> - <th>Filtre</th> - <th>Dossier</th> - <th/> - </tr> - </thead> - <tbody ui-sortable ng-model="mailFilters"> - <tr ng-repeat="mailFilter in mailFilters"> - <td>{{mailFilter.expression}}</td> - <td>{{mailFilter.mailFolder.name}}</td> - <td><a class="btn btn-danger btn-xs" ng-click="removeFilter($index)"> - <span class="glyphicon glyphicon-remove"></span> - </a></td> - </tr> - </tbody> - </table> - <div role="form"> - <div class="form-group"> - <label for="filterField">Filtre</label> - <input type="text" class="form-control" id="folderField" ng-model="newFilter.expression"> + <div class="panel panel-default"> + <div class="panel-heading" ng-repeat-start="mailFolder in mailFolders"> + <h4 class="panel-title"> + <a data-toggle="collapse" data-parent="#accordion" href="#mailFilerAccordion{{$index}}"> + Filtre du dossier {{mailFolder.name}} + </a> + </h4> </div> - <div class="form-group"> - <label for="folderField">Dossier</label> - <select class="form-control" ng-model="newFilter.mailFolder" ng-options="mailFolder.name for mailFolder in flatMailFolders()"></select> + <div id="mailFilerAccordion{{$index}}" class="panel-collapse collapse" ng-repeat-end> + <div class="panel-body"> + <table class="table table-hover table-bordered"> + <thead> + <tr> + <th>Filtre</th> + <th>Dossier</th> + <th/> + </tr> + </thead> + <tbody ui-sortable ng-model="mailFilters"> + <tr ng-repeat="mailFilter in mailFilters|filter:subFolderFilter(mailFolder)"> + <td>{{mailFilter.expression}}</td> + <td>{{mailFilter.mailFolder.$fullPath}}</td> + <td><a class="btn btn-danger btn-xs" ng-click="removeFilter(mailFilter)"> + <span class="glyphicon glyphicon-remove"></span> + </a></td> + </tr> + </tbody> + </table> + + <div role="form"> + <div class="form-group"> + <label for="filterField">Filtre</label> + <input type="text" class="form-control" id="folderField" ng-model="newFilter.expression"> + </div> + <div class="form-group"> + <label for="folderField">Dossier</label> + <select class="form-control" ng-model="newFilter.mailFolder" ng-options="mailFolder.$fullPath for mailFolder in flatMailFolders[mailFolder.topiaId]"></select> + </div> + </div> + <button type="button" class="btn btn-success" ng-disabled="!newFilter.expression || !newFilter.mailFolder" ng-click="addNewFilter()"> + <i class="glyphicon glyphicon-plus"></i> Ajouter + </button> + </div> </div> </div> - <button type="button" class="btn btn-success" ng-disabled="!newFilter.expression || !newFilter.mailFolder" ng-click="addNewFilter()"> - <i class="glyphicon glyphicon-plus"></i> Ajouter - </button> </div> <div id="tabs-search" class="tab-pane" ng-controller="ConfigurationSearchController"> @@ -561,7 +575,7 @@ <caption>Aperçu</caption> <thead> <tr> - <th ng-repeat="etatAttenteField in searchDisplayColumns">{{etatAttenteFields[etatAttenteField.id]}}</th> + <th ng-repeat="etatAttenteField in searchDisplayColumns">{{mailFields[etatAttenteField.id]}}</th> </tr> </thead> </table> Modified: trunk/faxtomail-ui-web/src/main/webapp/js/configuration.js =================================================================== --- trunk/faxtomail-ui-web/src/main/webapp/js/configuration.js 2014-06-05 07:32:18 UTC (rev 132) +++ trunk/faxtomail-ui-web/src/main/webapp/js/configuration.js 2014-06-05 09:43:43 UTC (rev 133) @@ -41,23 +41,38 @@ $scope.demandTypes = ConfigurationData.demandTypes; //{Array} mail folders $scope.mailFolders = ConfigurationData.mailFolders; + //{Map<MailFolder id, Array<MailFolder>>} liste des + $scope.flatMailFolders; - // method privée recursive pour retourner l'ensemble des dossiers - var recursiveAddMailFolder = function(result, mailFolders) { + // method privée recursive pour retourner l'ensemble des dossiers en les modifiant pour ajouter + // des metadata (full path from root, and root node instance) + var recursiveAddMailFolder = function(result, mailFolders, rootFolder, prefix) { if (mailFolders) { angular.forEach(mailFolders, function(mailFolder) { + + // warning modify input object :( + // use $ from this, even not recommended because angular exlude those fields when jsonify + mailFolder.$fullPath = prefix + "/" + mailFolder.name; + // ha la la, modify input object again :( + // use $ from this, even not recommended because angular exlude those fields when jsonify + mailFolder.$rootFolder = rootFolder; + result.push(mailFolder); - recursiveAddMailFolder(result, mailFolder.children); + recursiveAddMailFolder(result, mailFolder.children, rootFolder, mailFolder.$fullPath); }); } }; - // Retourne l'ensemble de l'arbre des dossiers "à plat" - $scope.flatMailFolders = function() { - var flatMailFolders = []; - recursiveAddMailFolder(flatMailFolders, $scope.mailFolders); - return flatMailFolders; + // update $scope.flatMailFolders when $scope.mailFolders changes + $scope._updateFlatMailFolders = function() { + console.log("Update flatMailFolders map"); + $scope.flatMailFolders = {}; + angular.forEach($scope.mailFolders, function(mailFolder) { + $scope.flatMailFolders[mailFolder.topiaId] = []; + recursiveAddMailFolder($scope.flatMailFolders[mailFolder.topiaId], mailFolder.children, mailFolder, mailFolder.name); + }); }; + $scope._updateFlatMailFolders(); }]); /** @@ -217,12 +232,27 @@ children: [] }; $scope.mailFolders.push(newRoot); + $scope._updateFlatMailFolders(); // update flat map // edition automatique $scope.editMailFolder(newRoot); }; }; + // new sub folder + $scope.newSubFolder = function(scope) { + var nodeData = scope.$modelValue; + var name = $window.prompt("Nom du nouveau noeud ? "); + if (name) { + nodeData.children.push({ + topiaId: "new_" + guid(), + name: name, + children: [] + }); + $scope._updateFlatMailFolders(); // update flat map + } + }; + // edit mail folder $scope.editMailFolder = function(mailFolder) { $scope.selectedMailFolder = mailFolder; @@ -264,19 +294,6 @@ } }, true); - // new sub folder - $scope.newSubFolder = function(scope) { - var nodeData = scope.$modelValue; - var name = $window.prompt("Nom du nouveau noeud ? "); - if (name) { - nodeData.children.push({ - topiaId: "new_" + guid(), - name: name, - children: [] - }); - } - }; - // fonction retournant l'ensemble des options disponibles $scope.getObjectsData = function(term, result) { var resultArray = []; @@ -346,13 +363,29 @@ /** * Mail filter tab controller. */ -ConfigurationModule.controller('ConfigurationFilterController', ['$scope', '$http', 'ConfigurationData', - function($scope, $http, ConfigurationData) { +ConfigurationModule.controller('ConfigurationFilterController', ['$scope', '$window', 'ConfigurationData', + function($scope, $window, ConfigurationData) { //{Array} Current mail filter list $scope.mailFilters = ConfigurationData.mailFilters; //{Object} New accout empty filter $scope.newFilter = {}; + // replace filter instance with mailFolder filter instance to use same objects + angular.forEach($scope.mailFilters, function(filter) { + // root folder + angular.forEach($scope.mailFolders, function(mailFolder) { + if (mailFolder.topiaId == filter.mailFolder.topiaId) { + filter.mailFolder = mailFolder; + } else { + angular.forEach($scope.flatMailFolders[mailFolder.topiaId], function(subFolder) { + if (subFolder.topiaId == filter.mailFolder.topiaId) { + filter.mailFolder = subFolder; + } + }); + } + }); + }); + // add new filter action $scope.addNewFilter = function() { $scope.mailFilters.push($scope.newFilter); @@ -360,19 +393,29 @@ // clear form $scope.newFilter = {}; }; - + // remove filter - $scope.removeFilter = function(index) { - $scope.mailFilters.splice(index, 1); + $scope.removeFilter = function(filter) { + if ($window.confirm("Êtes-vous sûr de vouloir supprimer ce filter ?")) { + var index = $scope.mailFilters.indexOf(filter); + $scope.mailFilters.splice(index, 1); + } }; + + // define angular filter used to group mailFilters by rootFolders + $scope.subFolderFilter = function(mailFolder) { + return function(item) { + return item.mailFolder == mailFolder || item.mailFolder.$rootFolder == mailFolder; + }; + }; }]); /** * Search tab controller. */ -ConfigurationModule.controller('ConfigurationSearchController', ['$scope', '$http', 'ConfigurationData', - function($scope, $http, ConfigurationData) { +ConfigurationModule.controller('ConfigurationSearchController', ['$scope', 'ConfigurationData', + function($scope, ConfigurationData) { //{Array} Options actuelle $scope.searchDisplayColumns = []; angular.forEach(ConfigurationData.searchDisplayColumns, function(searchDisplayColumn) {
participants (1)
-
echatellier@users.forge.codelutin.com