Author: echatellier Date: 2014-06-12 18:12:04 +0200 (Thu, 12 Jun 2014) New Revision: 202 Url: http://forge.codelutin.com/projects/faxtomail/repository/revisions/202 Log: Test chosen pour le filtrage (mais fonctionne pas :() Added: trunk/faxtomail-ui-web/src/main/webapp/css/chosen-spinner.css trunk/faxtomail-ui-web/src/main/webapp/css/spinner.gif trunk/faxtomail-ui-web/src/main/webapp/js/chosen.js Modified: trunk/faxtomail-ui-web/pom.xml trunk/faxtomail-ui-web/src/main/webapp/WEB-INF/content/admin/configuration-input.jsp trunk/faxtomail-ui-web/src/main/webapp/WEB-INF/wro.xml trunk/faxtomail-ui-web/src/main/webapp/css/faxtomail.css trunk/faxtomail-ui-web/src/main/webapp/js/configuration.js trunk/faxtomail-ui-web/src/main/webapp/js/user-folder.js trunk/pom.xml Modified: trunk/faxtomail-ui-web/pom.xml =================================================================== --- trunk/faxtomail-ui-web/pom.xml 2014-06-12 15:23:11 UTC (rev 201) +++ trunk/faxtomail-ui-web/pom.xml 2014-06-12 16:12:04 UTC (rev 202) @@ -235,6 +235,11 @@ </exclusion> </exclusions> </dependency> + + <dependency> + <groupId>org.webjars</groupId> + <artifactId>chosen</artifactId> + </dependency> <dependency> <groupId>org.nuiton.js</groupId> 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-12 15:23:11 UTC (rev 201) +++ trunk/faxtomail-ui-web/src/main/webapp/WEB-INF/content/admin/configuration-input.jsp 2014-06-12 16:12:04 UTC (rev 202) @@ -961,7 +961,7 @@ <div class="form-group"> <label for="newManagedGroupField" class="control-label">Nouveau groupe :</label> <select id="newManagedGroupField" class="form-control" - ng-model="newManagedGroup" ng-options="group as group.fullPath for group in groups"> + ng-model="newManagedGroup" ng-options="group as group.fullPath for group in groups" width="'100%'" searchContains="true"> </select> <a class="btn btn-success btn-xs" ng-click="addManagedGroup()" ng-disabled="!newManagedGroup"> <span class="glyphicon glyphicon-plus"></span> Modified: trunk/faxtomail-ui-web/src/main/webapp/WEB-INF/wro.xml =================================================================== --- trunk/faxtomail-ui-web/src/main/webapp/WEB-INF/wro.xml 2014-06-12 15:23:11 UTC (rev 201) +++ trunk/faxtomail-ui-web/src/main/webapp/WEB-INF/wro.xml 2014-06-12 16:12:04 UTC (rev 202) @@ -28,6 +28,11 @@ <js>classpath:META-INF/resources/webjars/select2/3.4.8/select2.js</js> <js>classpath:META-INF/resources/webjars/select2/3.4.8/select2_locale_fr.js</js> </group> + + <group name='webjar-chosen' abstract="true"> + <css>classpath:META-INF/resources/webjars/chosen/1.1.0/chosen.css</css> + <js>classpath:META-INF/resources/webjars/chosen/1.1.0/chosen.jquery.js</js> + </group> <group name='webjar-angular-ui-sortable' abstract="true"> <js>classpath:META-INF/resources/webjars/angular-ui-sortable/0.12.7/sortable.min.js</js> @@ -45,6 +50,12 @@ <js>/js/select2sortable.js</js> </group> + <group name='angular-chosen' abstract="true"> + <group-ref>webjar-chosen</group-ref> + <js>/js/chosen.js</js> + <css>/css/chosen-spinner.css</css> + </group> + <group name='webjar-respond' abstract="true"> <js>classpath:META-INF/resources/webjars/respond/1.4.2/src/respond.js</js> </group> @@ -69,6 +80,7 @@ <group name='faxtomail-configuration'> <group-ref>select2sortable</group-ref> + <group-ref>angular-chosen</group-ref> <group-ref>webjar-angular-ui-sortable</group-ref> <group-ref>font-awesome</group-ref> <js>/js/configuration.js</js> @@ -77,6 +89,7 @@ <group name='faxtomail-user-folder'> <group-ref>select2sortable</group-ref> + <group-ref>angular-chosen</group-ref> <group-ref>font-awesome</group-ref> <js>/js/user-folder.js</js> <css>/css/faxtomail.css</css> Added: trunk/faxtomail-ui-web/src/main/webapp/css/chosen-spinner.css =================================================================== --- trunk/faxtomail-ui-web/src/main/webapp/css/chosen-spinner.css (rev 0) +++ trunk/faxtomail-ui-web/src/main/webapp/css/chosen-spinner.css 2014-06-12 16:12:04 UTC (rev 202) @@ -0,0 +1,12 @@ +/* %%Ignore-License Additional styles to display a spinner image while options are loading */ +.localytics-chosen.loading+.chosen-container-multi .chosen-choices { + background-image: url('spinner.gif'); + background-repeat: no-repeat; + background-position: 95%; +} +.localytics-chosen.loading+.chosen-container-single .chosen-single span { + background: url('spinner.gif') no-repeat right; +} +.localytics-chosen.loading+.chosen-container-single .chosen-single .search-choice-close { + display: none; +} \ No newline at end of file Property changes on: trunk/faxtomail-ui-web/src/main/webapp/css/chosen-spinner.css ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Modified: trunk/faxtomail-ui-web/src/main/webapp/css/faxtomail.css =================================================================== --- trunk/faxtomail-ui-web/src/main/webapp/css/faxtomail.css 2014-06-12 15:23:11 UTC (rev 201) +++ trunk/faxtomail-ui-web/src/main/webapp/css/faxtomail.css 2014-06-12 16:12:04 UTC (rev 202) @@ -76,3 +76,7 @@ content:"*"; color:red; } + +/*.chosen-container { + width:100%; +}*/ \ No newline at end of file Added: trunk/faxtomail-ui-web/src/main/webapp/css/spinner.gif =================================================================== (Binary files differ) Property changes on: trunk/faxtomail-ui-web/src/main/webapp/css/spinner.gif ___________________________________________________________________ Added: svn:mime-type + image/gif Added: trunk/faxtomail-ui-web/src/main/webapp/js/chosen.js =================================================================== --- trunk/faxtomail-ui-web/src/main/webapp/js/chosen.js (rev 0) +++ trunk/faxtomail-ui-web/src/main/webapp/js/chosen.js 2014-06-12 16:12:04 UTC (rev 202) @@ -0,0 +1,109 @@ +// %%Ignore-License Generated by CoffeeScript 1.6.2 +(function() { + var __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; + + angular.module('localytics.directives', []); + + angular.module('localytics.directives').directive('chosen', function() { + var CHOSEN_OPTION_WHITELIST, NG_OPTIONS_REGEXP, isEmpty, snakeCase; + + NG_OPTIONS_REGEXP = /^\s*(.*?)(?:\s+as\s+(.*?))?(?:\s+group\s+by\s+(.*))?\s+for\s+(?:([\$\w][\$\w]*)|(?:\(\s*([\$\w][\$\w]*)\s*,\s*([\$\w][\$\w]*)\s*\)))\s+in\s+(.*?)(?:\s+track\s+by\s+(.*?))?$/; + CHOSEN_OPTION_WHITELIST = ['noResultsText', 'allowSingleDeselect', 'disableSearchThreshold', 'disableSearch', 'enableSplitWordSearch', 'inheritSelectClasses', 'maxSelectedOptions', 'placeholderTextMultiple', 'placeholderTextSingle', 'searchContains', 'singleBackstrokeDelete', 'displayDisabledOptions', 'displaySelectedOptions', 'width']; + snakeCase = function(input) { + return input.replace(/[A-Z]/g, function($1) { + return "_" + ($1.toLowerCase()); + }); + }; + isEmpty = function(value) { + var key; + + if (angular.isArray(value)) { + return value.length === 0; + } else if (angular.isObject(value)) { + for (key in value) { + if (value.hasOwnProperty(key)) { + return false; + } + } + } + return true; + }; + return { + restrict: 'A', + require: '?ngModel', + terminal: true, + link: function(scope, element, attr, ngModel) { + var chosen, defaultText, disableWithMessage, empty, initOrUpdate, match, options, origRender, removeEmptyMessage, startLoading, stopLoading, valuesExpr, viewWatch; + + element.addClass('localytics-chosen'); + options = scope.$eval(attr.chosen) || {}; + angular.forEach(attr, function(value, key) { + if (__indexOf.call(CHOSEN_OPTION_WHITELIST, key) >= 0) { + return options[snakeCase(key)] = scope.$eval(value); + } + }); + startLoading = function() { + return element.addClass('loading').attr('disabled', true).trigger('chosen:updated'); + }; + stopLoading = function() { + return element.removeClass('loading').attr('disabled', false).trigger('chosen:updated'); + }; + chosen = null; + defaultText = null; + empty = false; + initOrUpdate = function() { + if (chosen) { + return element.trigger('chosen:updated'); + } else { + chosen = element.chosen(options).data('chosen'); + return defaultText = chosen.default_text; + } + }; + removeEmptyMessage = function() { + empty = false; + return element.attr('data-placeholder', defaultText); + }; + disableWithMessage = function() { + empty = true; + return element.attr('data-placeholder', chosen.results_none_found).attr('disabled', true).trigger('chosen:updated'); + }; + if (ngModel) { + origRender = ngModel.$render; + ngModel.$render = function() { + origRender(); + return initOrUpdate(); + }; + if (attr.multiple) { + viewWatch = function() { + return ngModel.$viewValue; + }; + scope.$watch(viewWatch, ngModel.$render, true); + } + } else { + initOrUpdate(); + } + attr.$observe('disabled', function() { + return element.trigger('chosen:updated'); + }); + if (attr.ngOptions && ngModel) { + match = attr.ngOptions.match(NG_OPTIONS_REGEXP); + valuesExpr = match[7]; + return scope.$watchCollection(valuesExpr, function(newVal, oldVal) { + if (angular.isUndefined(newVal)) { + return startLoading(); + } else { + if (empty) { + removeEmptyMessage(); + } + stopLoading(); + if (isEmpty(newVal)) { + return disableWithMessage(); + } + } + }); + } + } + }; + }); + +}).call(this); Modified: trunk/faxtomail-ui-web/src/main/webapp/js/configuration.js =================================================================== --- trunk/faxtomail-ui-web/src/main/webapp/js/configuration.js 2014-06-12 15:23:11 UTC (rev 201) +++ trunk/faxtomail-ui-web/src/main/webapp/js/configuration.js 2014-06-12 16:12:04 UTC (rev 202) @@ -22,7 +22,7 @@ * #L% */ -var ConfigurationModule = angular.module('ConfigurationModule', ['FaxToMail', 'ui.tree', 'ui.sortable', 'ui.select2.sortable']); +var ConfigurationModule = angular.module('ConfigurationModule', ['FaxToMail', 'ui.tree', 'localytics.directives', 'ui.select2.sortable']); /** * Global configuration controller. @@ -832,7 +832,6 @@ console.log("Udpate MetaFilter"); $scope.rootFolderMailFilters = {}; updateMetaFilter(); - console.log($scope.rootFolderMailFilters); }); // option de la configuration 'sortable' Modified: trunk/faxtomail-ui-web/src/main/webapp/js/user-folder.js =================================================================== --- trunk/faxtomail-ui-web/src/main/webapp/js/user-folder.js 2014-06-12 15:23:11 UTC (rev 201) +++ trunk/faxtomail-ui-web/src/main/webapp/js/user-folder.js 2014-06-12 16:12:04 UTC (rev 202) @@ -22,7 +22,7 @@ * #L% */ -var UserFolderModule = angular.module('UserFolderModule', ['FaxToMail', 'ui.select2.sortable']); +var UserFolderModule = angular.module('UserFolderModule', ['FaxToMail', 'localytics.directives', 'ui.select2.sortable']); /** * Global configuration controller. @@ -39,7 +39,7 @@ $scope.userFolders = UserFolderData.userFolders; //{Array} Group list $scope.groups = UserFolderData.groups; - + // 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, parent) { Modified: trunk/pom.xml =================================================================== --- trunk/pom.xml 2014-06-12 15:23:11 UTC (rev 201) +++ trunk/pom.xml 2014-06-12 16:12:04 UTC (rev 202) @@ -576,6 +576,13 @@ <version>3.4.8-1</version> <scope>runtime</scope> </dependency> + + <dependency> + <groupId>org.webjars</groupId> + <artifactId>chosen</artifactId> + <version>1.1.0</version> + <scope>runtime</scope> + </dependency> <dependency> <groupId>org.nuiton.js</groupId>