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