Rift.IO OSM R1 Initial Submission
[osm/UI.git] / skyquake / framework / widgets / components.js
diff --git a/skyquake/framework/widgets/components.js b/skyquake/framework/widgets/components.js
new file mode 100644 (file)
index 0000000..1fe49bc
--- /dev/null
@@ -0,0 +1,380 @@
+
+/*
+ * 
+ *   Copyright 2016 RIFT.IO Inc
+ *
+ *   Licensed under the Apache License, Version 2.0 (the "License");
+ *   you may not use this file except in compliance with the License.
+ *   You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *   Unless required by applicable law or agreed to in writing, software
+ *   distributed under the License is distributed on an "AS IS" BASIS,
+ *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *   See the License for the specific language governing permissions and
+ *   limitations under the License.
+ *
+ */
+
+var React = require('react');
+//var Histogram = require('react-d3-histogram')
+export default {
+  //test: require('./test/test.js'),
+  button: require('./button/rw.button.js'),
+  React: React,
+//  Histogram: Histogram,
+  Multicomponent: require('./multicomponent/multicomponent.js'),
+  Mixins: require('./mixins/ButtonEventListener.js'),
+  Gauge: require('./gauge/gauge.js'),
+  Bullet: require('./bullet/bullet.js')
+};
+
+// require('../../assets/js/n3-line-chart.js');
+// var Gauge = require('../../assets/js/gauge-modified.js');
+// var bulletController = function($scope, $element) {
+//     this.$element = $element;
+//     this.vertical = false;
+//     this.value = 0;
+//     this.min = 0;
+//     this.max = 100;
+//     //this.range = this.max - this.min;
+//     //this.percent = (this.value - this.min) / this.range;
+//     this.displayValue = this.value;
+//     this.isPercent = (this.units == '')? true:false;
+//     this.bulletColor = "#6BB814";
+//     this.fontsize = 28;
+//     this.radius = 4;
+//     this.containerMarginX = 0;
+//     this.containerMarginY = 0;
+//     this.textMarginX = 5;
+//     this.textMarginY = 42;
+//     this.bulletMargin = 0;
+//     this.width = 512;
+//     this.height = 64;
+//     this.markerX = -100; // puts it off screen unless set
+//     var self = this;
+//     if (this.isPercent) {
+//         this.displayValue + "%";
+//     }
+//     $scope.$watch(
+//       function() {
+//         return self.value;
+//       },
+//       function() {
+//         self.valueChanged();
+//       }
+//     );
+
+//   }
+
+//   bulletController.prototype = {
+
+//     valueChanged: function() {
+//       var range = this.max - this.min;
+//       var normalizedValue = (this.value - this.min) / range;
+//       if (this.isPercent) {
+//         this.displayValue = String(Math.round(normalizedValue * 100)) + "%";
+//       } else {
+//         this.displayValue = this.value;
+//       }
+//       // All versions of IE as of Jan 2015 does not support inline CSS transforms on SVG
+//       if (platform.name == 'IE') {
+//         this.bulletWidth = Math.round(100 * normalizedValue) + '%';
+//       } else {
+//         this.bulletWidth = this.width - (2 * this.containerMarginX);
+//         var transform = 'scaleX(' + normalizedValue + ')';
+//         var bullet = $(this.$element).find('.bullet2');
+//         bullet.css('transform', transform);
+//         bullet.css('-webkit-transform', transform);
+//       }
+//     },
+
+//     markerChanged: function() {
+//       var range = this.max - this.min;
+//       var w = this.width - (2 * this.containerMarginX);
+//       this.markerX = this.containerMarginX + ((this.marker - this.min) / range ) * w;
+//       this.markerY1 = 7;
+//       this.markerY2 = this.width - 7;
+//     }
+//   }
+
+// angular.module('components', ['n3-line-chart'])
+//     .directive('rwBullet', function() {
+//       return {
+//         restrict : 'E',
+//         templateUrl: 'modules/views/rw.bullet.tmpl.html',
+//         bindToController: true,
+//         controllerAs: 'bullet',
+//         controller: bulletController,
+//         replace: true,
+//         scope: {
+//           min : '@?',
+//           max : '@?',
+//           value : '@',
+//           marker: '@?',
+//           units: '@?',
+//           bulletColor: '@?',
+//           label: '@?'
+//         }
+//       };
+//     })
+//     .directive('rwSlider', function() {
+//       var controller = function($scope, $element, $timeout) {
+//         // Q: is there a way to force attributes to be ints?
+//         $scope.min = $scope.min || "0";
+//         $scope.max = $scope.max || "100";
+//         $scope.step = $scope.step || "1";
+//         $scope.height = $scope.height || "30";
+//         $scope.orientation = $scope.orientation || 'horizontal';
+//         $scope.tooltipInvert = $scope.tooltipInvert || false;
+//         $scope.percent = $scope.percent || false;
+//         $scope.kvalue = $scope.kvalue || false;
+//         $scope.direction = $scope.direction || "ltr";
+//         $($element).noUiSlider({
+//           start: parseInt($scope.value),
+//           step: parseInt($scope.step),
+//           orientation: $scope.orientation,
+//           range: {
+//             min: parseInt($scope.min),
+//             max: parseInt($scope.max)
+//           },
+//           direction: $scope.direction
+//         });
+//         //$(".no-Ui-target").Link('upper').to('-inline-<div class="tooltip"></div>')
+//         var onSlide = function(e, value) {
+//           $timeout(function(){
+//             $scope.value = value;
+//           })
+
+//         };
+//         $($element).on({
+//           change: onSlide,
+//           slide: onSlide,
+//           set: $scope.onSet({value: $scope.value})
+//         });
+//         var val = String(Math.round($scope.value));
+//         if ($scope.percent) {
+//             val += "%"
+//         } else if ($scope.kvalue) {
+//             val += "k"
+//         }
+//         $($element).height($scope.height);
+//         if ($scope.tooltipInvert) {
+//             $($element).find('.noUi-handle').append("<div class='tooltip' style='position:relative;right:20px'>" + val + "</div>");
+//         } else {
+//             $($element).find('.noUi-handle').append("<div class='tooltip' style='position:relative;left:-20px'>" + val + "</div>");
+//         }
+//         $scope.$watch('value', function(value) {
+//         var val = String(Math.round($scope.value));
+//         if ($scope.percent) {
+//             val += "%"
+//         } else if($scope.kvalue) {
+//             val += "k"
+//         }
+//           $($element).val(value);
+//           $($element).find('.tooltip').html(val);
+//         if ($scope.tooltipInvert) {
+//             $($element).find('.tooltip').css('right', $($element).find('.tooltip').innerWidth() * -1);
+//         } else {
+//             $($element).find('.tooltip').css('left', $($element).find('.tooltip').innerWidth() * -1);
+//         }
+//         });
+//       };
+
+//       return {
+//         restrict : 'E',
+//         template: '<div></div>',
+//         controller : controller,
+//         replace: true,
+//         scope: {
+//           min : '@',
+//           max : '@',
+//           width: '@',
+//           height: '@',
+//           step : '@',
+//           orientation : '@',
+//           tooltipInvert: '@',
+//           percent: '@',
+//           kvalue: '@?',
+//           onSet:'&?',
+//           direction: '@?',
+//           value:'=?'
+//         }
+//       };
+//     })
+// .directive('rwGauge', function() {
+//     return {
+//         restrict: 'AE',
+//         template: '<canvas class="rwgauge" style="width:100%;height:100%;max-width:{{width}}px;max-height:240px;"></canvas>',
+//         replace: true,
+//         scope: {
+//             min: '@?',
+//             max: '@?',
+//             size: '@?',
+//             color: '@?',
+//             value: '@?',
+//             resize: '@?',
+//             isAggregate: '@?',
+//             units: '@?',
+//             valueFormat: '=?',
+//             width: '@?'
+//         },
+//         bindToController: true,
+//         controllerAs: 'gauge',
+//         controller: function($scope, $element) {
+//             var self = this;
+//             this.gauge = null;
+//             this.min = this.min || 0;
+//             this.max = this.max || 100;
+//             this.nSteps = 14;
+//             this.size = this.size || 300;
+//             this.units = this.units || '';
+//             $scope.width = this.width || 240;
+//             this.color = this.color || 'hsla(212, 57%, 50%, 1)';
+//             if (!this.valueFormat) {
+//                 if (this.max > 1000 || this.value) {
+//                     self.valueFormat = {
+//                         "int": 1,
+//                         "dec": 0
+//                     };
+//                 } else {
+//                     self.valueFormat = {
+//                         "int": 1,
+//                         "dec": 2
+//                     };
+//                 }
+//             }
+//             this.isAggregate = this.isAggregate || false;
+//             this.resize = this.resize || false;
+//             if (this.format == 'percent') {
+//                 self.valueFormat = {
+//                     "int": 3,
+//                     "dec": 0
+//                 };
+//             }
+//             $scope.$watch(function() {
+//                 return self.max;
+//             }, function(n, o) {
+//                 if(n !== o) {
+//                     renderGauge();
+//                 }
+//             });
+//             $scope.$watch(function() {
+//                 return self.valueFormat;
+//             }, function(n, o) {
+//                 if(n != 0) {
+//                     renderGauge();
+//                 }
+//             });
+//             $scope.$watch(function() {
+//                 return self.value;
+//             }, function() {
+//                 if (self.gauge) {
+//                     // w/o rounding gauge will unexplainably thrash round.
+//                     self.valueFormat = determineValueFormat(self.value);
+//                     self.gauge.setValue(Math.ceil(self.value * 100) / 100);
+//                     //self.gauge.setValue(Math.round(self.value));
+//                 }
+//             });
+//             angular.element($element).ready(function() {
+//                 console.log('rendering')
+//                 renderGauge();
+//             })
+//             window.testme = renderGauge;
+//             function determineValueFormat(value) {
+
+//                     if (value > 999 || self.units == "%") {
+//                         return {
+//                             "int": 1,
+//                             "dec": 0
+//                         }
+//                     }
+
+//                     return {
+//                         "int": 1,
+//                         "dec": 2
+//                     }
+//                 }
+//             function renderGauge(calcWidth) {
+//                 if (self.max == self.min) {
+//                     self.max = 14;
+//                 }
+//                 var range = self.max - self.min;
+//                 var step = Math.round(range / self.nSteps);
+//                 var majorTicks = [];
+//                 for (var i = 0; i <= self.nSteps; i++) {
+//                     majorTicks.push(self.min + (i * step));
+//                 };
+//                 var redLine = self.min + (range * 0.9);
+//                 var config = {
+//                     isAggregate: self.isAggregate,
+//                     renderTo: angular.element($element)[0],
+//                     width: calcWidth || self.size,
+//                     height: calcWidth || self.size,
+//                     glow: false,
+//                     units: self.units,
+//                     title: false,
+//                     minValue: self.min,
+//                     maxValue: self.max,
+//                     majorTicks: majorTicks,
+//                     valueFormat: determineValueFormat(self.value),
+//                     minorTicks: 0,
+//                     strokeTicks: false,
+//                     highlights: [],
+//                     colors: {
+//                         plate: 'rgba(0,0,0,0)',
+//                         majorTicks: 'rgba(15, 123, 182, .84)',
+//                         minorTicks: '#ccc',
+//                         title: 'rgba(50,50,50,100)',
+//                         units: 'rgba(50,50,50,100)',
+//                         numbers: '#fff',
+//                         needle: {
+//                             start: 'rgba(255, 255, 255, 1)',
+//                             end: 'rgba(255, 255, 255, 1)'
+//                         }
+//                     }
+//                 };
+//                 var min = config.minValue;
+//                 var max = config.maxValue;
+//                 var N = 1000;
+//                 var increment = (max - min) / N;
+//                 for (i = 0; i < N; i++) {
+//                     var temp_color = 'rgb(0, 172, 238)';
+//                     if (i > 0.5714 * N && i <= 0.6428 * N) {
+//                         temp_color = 'rgb(0,157,217)';
+//                     } else if (i >= 0.6428 * N && i < 0.7142 * N) {
+//                         temp_color = 'rgb(0,142,196)';
+//                     } else if (i >= 0.7142 * N && i < 0.7857 * N) {
+//                         temp_color = 'rgb(0,126,175)';
+//                     } else if (i >= 0.7857 * N && i < 0.8571 * N) {
+//                         temp_color = 'rgb(0,122,154)';
+//                     } else if (i >= 0.8571 * N && i < 0.9285 * N) {
+//                         temp_color = 'rgb(0,96,133)';
+//                     } else if (i >= 0.9285 * N) {
+//                         temp_color = 'rgb(0,80,112)';
+//                     }
+//                     config.highlights.push({
+//                         from: i * increment,
+//                         to: increment * (i + 2),
+//                         color: temp_color
+//                     })
+//                 }
+//                 var updateSize = _.debounce(function() {
+//                     config.maxValue = self.max;
+//                     var clientWidth = self.parentNode.parentNode.clientWidth / 2;
+//                     var calcWidth = (300 > clientWidth) ? clientWidth : 300;
+//                     self.gauge.config.width = self.gauge.config.height = calcWidth;
+//                     self.renderGauge(calcWidth);
+//                 }, 500);
+//                 if (self.resize) $(window).resize(updateSize)
+//                 if (self.gauge) {
+//                     self.gauge.updateConfig(config);
+//                 } else {
+//                     self.gauge = new Gauge(config);
+//                     self.gauge.draw();
+//                 }
+//             };
+//         },
+//     }
+// });