From c7de9da28272b899b7deffec4424d9dda91526e6 Mon Sep 17 00:00:00 2001 From: Eike Cochu <eike@cochu.com> Date: Sat, 20 Feb 2016 14:50:57 +0100 Subject: [PATCH] added revolve select directive --- vipra-ui/app/js/directives.js | 46 +++++++++++++++++++++++++++++++++++ vipra-ui/app/less/app.less | 5 ++++ 2 files changed, 51 insertions(+) diff --git a/vipra-ui/app/js/directives.js b/vipra-ui/app/js/directives.js index 3d7b93fc..60b2b0c7 100644 --- a/vipra-ui/app/js/directives.js +++ b/vipra-ui/app/js/directives.js @@ -218,4 +218,50 @@ }; }]); + app.directive('revolveSelect', function() { + return { + scope: { + ngModel: '=', + values: '=' + }, + require: 'ngModel', + template: '<a ng-bind="label" ng-click="next()"></a>', + link: function($scope, $elem, $attrs, $ctrl) { + var hasObjects = false; + if($scope.values && $scope.values.length) + hasObjects = angular.isObject($scope.values[0]); + + var index = function() { + if(hasObjects) { + for(var i = 0; i < $scope.values.length; i++) { + if($scope.values[i].value === $scope.ngModel) + return i; + } + return -1; + } else { + return $scope.values.indexOf($scope.ngModel); + } + }; + + var select = function(i) { + if(i < 0 || i >= $scope.values.length) return; + if(hasObjects) { + $scope.ngModel = $scope.values[i].value; + $scope.label = $scope.values[i].label; + } else { + $scope.ngModel = $scope.label = $scope.values[i]; + } + }; + + $scope.next = function() { + select((index() + 1) % $scope.values.length) + }; + + $scope.$watch('ngModel', function() { + select(index()); + }); + } + }; + }); + })(); \ No newline at end of file diff --git a/vipra-ui/app/less/app.less b/vipra-ui/app/less/app.less index 78a3d358..486a8fdc 100644 --- a/vipra-ui/app/less/app.less +++ b/vipra-ui/app/less/app.less @@ -246,6 +246,11 @@ ul.dashed { padding-bottom: 10px; } +revolve-select, [revolve-select] { + .noselect; + cursor: pointer; +} + [sort-by] { .noselect; cursor: pointer; -- GitLab