From ae919cef0f4faacc1b6d0ca0d67be003dc7419d6 Mon Sep 17 00:00:00 2001 From: Jico Baligod Date: Fri, 11 Jul 2014 14:48:17 -0400 Subject: [PATCH 001/126] Allow event option for when to update model --- slider.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/slider.js b/slider.js index 6606f55..9c29abf 100644 --- a/slider.js +++ b/slider.js @@ -41,8 +41,9 @@ angular.module('ui.bootstrap-slider', []) } var slider = $(element[0]).slider(options); + var updateEvent = attrs.updateEvent || 'slide'; - slider.on('slide', function(ev) { + slider.on(updateEvent, function(ev) { model.assign($scope, ev.value); $timeout(function() { $scope.$apply(); From 12c4a93814b8765c5eb09759d696c89c8ee04fca Mon Sep 17 00:00:00 2001 From: Jico Baligod Date: Fri, 11 Jul 2014 14:56:14 -0400 Subject: [PATCH 002/126] version bump --- bower.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bower.json b/bower.json index 666f9b2..b919f99 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "angular-bootstrap-slider", - "version": "0.0.1", + "version": "0.0.5", "authors": [ "Kyle Kemp " ], From c75d723daa4638a103934096f3243594cddd25dd Mon Sep 17 00:00:00 2001 From: SamGraber Date: Tue, 22 Jul 2014 15:13:32 -0400 Subject: [PATCH 003/126] Added functionality for disabling the slider directive when the ng-disabled attribute evaluates to true. --- slider.js | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/slider.js b/slider.js index 9c29abf..c496ec3 100644 --- a/slider.js +++ b/slider.js @@ -7,6 +7,22 @@ angular.module('ui.bootstrap-slider', []) link: function ($scope, element, attrs) { var model = $parse(attrs.ngModel); + $.fn.slider.Constructor.prototype.disable = function () { + this.picker.off(); + } + $.fn.slider.Constructor.prototype.enable = function () { + if (this.touchCapable) { + // Touch: Bind touch events: + this.picker.on({ + touchstart: $.proxy(this.mousedown, this) + }); + } else { + this.picker.on({ + mousedown: $.proxy(this.mousedown, this) + }); + } + } + var options = {}; if(attrs.sliderId) options.id = attrs.sliderId; if(attrs.min) options.min = parseFloat(attrs.min); @@ -55,6 +71,14 @@ angular.module('ui.bootstrap-slider', []) slider.slider('setValue', value, false); } }); + + $scope.$watch(attrs.ngDisabled, function (value) { + if (value) { + slider.slider('disable'); + } else { + slider.slider('enable'); + } + }); } }; }]) From 215c66183ca7d7b185bfaea1671884844ae48ab2 Mon Sep 17 00:00:00 2001 From: Kyle Kemp Date: Tue, 29 Jul 2014 07:43:32 -0500 Subject: [PATCH 004/126] range sliders were added a while ago --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b641b18..147200d 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ angular-bootstrap-slider ======================== -This plugin was mostly put together quickly with the intent of using something that worked. It has zero test coverage, and range sliders do not work. It is, however, registered on bower as `angular-bootstrap-slider`. Just include `slider.js` and use the package `ui.bootstrap-slider`. +This plugin was mostly put together quickly with the intent of using something that worked. It has zero test coverage. It is, however, registered on bower as `angular-bootstrap-slider`. Just include `slider.js` and use the package `ui.bootstrap-slider`. Available Options ================= From 665c19df75440626eed4dd423d451ce76ad9f1a1 Mon Sep 17 00:00:00 2001 From: Kyle Kemp Date: Thu, 7 Aug 2014 21:54:16 -0500 Subject: [PATCH 005/126] fixing #5 --- slider.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/slider.js b/slider.js index c496ec3..94cecea 100644 --- a/slider.js +++ b/slider.js @@ -67,7 +67,7 @@ angular.module('ui.bootstrap-slider', []) }); $scope.$watch(attrs.ngModel, function(value) { - if(value) { + if(value || value === 0) { slider.slider('setValue', value, false); } }); From 935b396640ac06ef6e195b6422f952338a66eed3 Mon Sep 17 00:00:00 2001 From: Owumaro Date: Fri, 8 Aug 2014 21:36:40 +0200 Subject: [PATCH 006/126] Added formater option --- slider.js | 1 + test.html | 4 ++++ test.js | 5 +++++ 3 files changed, 10 insertions(+) diff --git a/slider.js b/slider.js index 94cecea..fd9d69e 100644 --- a/slider.js +++ b/slider.js @@ -51,6 +51,7 @@ angular.module('ui.bootstrap-slider', []) if(attrs.reversed) options.reversed = attrs.reversed === 'true'; if(attrs.enabled) options.enabled = attrs.enabled === 'true'; if(attrs.naturalArrowKeys) options.natural_arrow_keys = attrs.naturalArrowKeys === 'true'; + if(attrs.formater) options.formater = $scope.$eval(attrs.formater); if (options.range && !options.value) { options.value = [0,0]; // This is needed, because of value defined at $.fn.slider.defaults - default value 5 prevents creating range slider diff --git a/test.html b/test.html index f4cf0a2..5951c94 100644 --- a/test.html +++ b/test.html @@ -23,6 +23,10 @@



{{sliders.rangeSliderValue2}} + +



+ + {{sliders.thirdSliderValue}} diff --git a/test.js b/test.js index b9cb145..d7e44c5 100644 --- a/test.js +++ b/test.js @@ -14,5 +14,10 @@ angular.module('angular-bootstrap-slider-test', ['ui.bootstrap-slider']) $scope.sliders.secondSliderValue = 0; $scope.sliders.rangeSliderValue = [ 10, 50 ]; + + $scope.sliders.thirdSliderValue = 0; + $scope.myFormater = function(value) { + return value + "%"; + } }]); \ No newline at end of file From a881d5df8ba1720c07385a1d14493f6ddc873c6c Mon Sep 17 00:00:00 2001 From: ubi Date: Mon, 11 Aug 2014 14:27:56 +0800 Subject: [PATCH 007/126] Require ngModel in directive so that it can listen to ngChange --- slider.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/slider.js b/slider.js index fd9d69e..dd426b4 100644 --- a/slider.js +++ b/slider.js @@ -4,9 +4,8 @@ angular.module('ui.bootstrap-slider', []) restrict: 'AE', replace: true, template: '', - link: function ($scope, element, attrs) { - var model = $parse(attrs.ngModel); - + require: 'ngModel', + link: function ($scope, element, attrs, ngModelCtrl) { $.fn.slider.Constructor.prototype.disable = function () { this.picker.off(); } @@ -58,19 +57,20 @@ angular.module('ui.bootstrap-slider', []) } var slider = $(element[0]).slider(options); - var updateEvent = attrs.updateEvent || 'slide'; + var updateEvent = attrs.updateEvent || 'slide'; slider.on(updateEvent, function(ev) { - model.assign($scope, ev.value); + ngModelCtrl.$setViewValue(ev.value); $timeout(function() { $scope.$apply(); }); }); - $scope.$watch(attrs.ngModel, function(value) { - if(value || value === 0) { + ngModelCtrl.$viewChangeListeners.push(function() { + var value = ngModelCtrl.$viewValue; + if (value) { slider.slider('setValue', value, false); - } + }; }); $scope.$watch(attrs.ngDisabled, function (value) { From ecd90e41fed8f7bda926a1a2fff985eda7856bec Mon Sep 17 00:00:00 2001 From: ubi Date: Mon, 11 Aug 2014 14:40:12 +0800 Subject: [PATCH 008/126] Revert back to watch ngModel --- slider.js | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/slider.js b/slider.js index dd426b4..4e14009 100644 --- a/slider.js +++ b/slider.js @@ -66,11 +66,10 @@ angular.module('ui.bootstrap-slider', []) }); }); - ngModelCtrl.$viewChangeListeners.push(function() { - var value = ngModelCtrl.$viewValue; - if (value) { + $scope.$watch(attrs.ngModel, function(value) { + if(value) { slider.slider('setValue', value, false); - }; + } }); $scope.$watch(attrs.ngDisabled, function (value) { From f4f2260b02938080d0b5368b16e991d564f6ace9 Mon Sep 17 00:00:00 2001 From: ubi Date: Mon, 11 Aug 2014 14:41:56 +0800 Subject: [PATCH 009/126] Revert back to watch ngModel --- slider.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/slider.js b/slider.js index 4e14009..46d1503 100644 --- a/slider.js +++ b/slider.js @@ -67,7 +67,7 @@ angular.module('ui.bootstrap-slider', []) }); $scope.$watch(attrs.ngModel, function(value) { - if(value) { + if(value || value === 0) { slider.slider('setValue', value, false); } }); From ecc02ad9fbd10758745ae22dc8324c8524209c00 Mon Sep 17 00:00:00 2001 From: SamGraber Date: Wed, 20 Aug 2014 12:13:34 -0400 Subject: [PATCH 010/126] The slider complains to the console if the ng-disabled attribute isn't set. This fixes that by checking to make sure ngDisabled is defined before initializing the watch. --- slider.js | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/slider.js b/slider.js index 46d1503..7900760 100644 --- a/slider.js +++ b/slider.js @@ -72,13 +72,15 @@ angular.module('ui.bootstrap-slider', []) } }); - $scope.$watch(attrs.ngDisabled, function (value) { - if (value) { - slider.slider('disable'); - } else { - slider.slider('enable'); - } - }); + if (angular.isDefined(attrs.ngDisabled)) { + $scope.$watch(attrs.ngDisabled, function(value) { + if (value) { + slider.slider('disable'); + } else { + slider.slider('enable'); + } + }); + } } }; }]) From 8ee303a2a520c39b28e00b18db1c2144d13fc925 Mon Sep 17 00:00:00 2001 From: Chris Roth Date: Fri, 12 Sep 2014 13:24:37 -0400 Subject: [PATCH 011/126] fix bug where bootstrap 3 causes the slideStop event to be emitted twice. closes #10 --- slider.js | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/slider.js b/slider.js index 7900760..0a6e1a5 100644 --- a/slider.js +++ b/slider.js @@ -10,16 +10,7 @@ angular.module('ui.bootstrap-slider', []) this.picker.off(); } $.fn.slider.Constructor.prototype.enable = function () { - if (this.touchCapable) { - // Touch: Bind touch events: - this.picker.on({ - touchstart: $.proxy(this.mousedown, this) - }); - } else { - this.picker.on({ - mousedown: $.proxy(this.mousedown, this) - }); - } + this.picker.on(); } var options = {}; From 8e8b893f2a383e853cb7013d87a16391c26d2cc2 Mon Sep 17 00:00:00 2001 From: Samuli Ulmanen Date: Mon, 22 Sep 2014 09:58:32 +0300 Subject: [PATCH 012/126] add ng-change handling to slider directive --- slider.js | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/slider.js b/slider.js index 0a6e1a5..1b49548 100644 --- a/slider.js +++ b/slider.js @@ -8,12 +8,19 @@ angular.module('ui.bootstrap-slider', []) link: function ($scope, element, attrs, ngModelCtrl) { $.fn.slider.Constructor.prototype.disable = function () { this.picker.off(); - } + }; + $.fn.slider.Constructor.prototype.enable = function () { this.picker.on(); - } + }; + + if (attrs.ngChange) { + ngModelCtrl.$viewChangeListeners.push(function() { + $scope.$eval(attrs.ngChange); + }); + } - var options = {}; + var options = {}; if(attrs.sliderId) options.id = attrs.sliderId; if(attrs.min) options.min = parseFloat(attrs.min); if(attrs.max) options.max = parseFloat(attrs.max); From 7ac31656dc40dbb688d1daa1fef42ca6d58a3d65 Mon Sep 17 00:00:00 2001 From: Samuli Ulmanen Date: Mon, 22 Sep 2014 16:16:05 +0300 Subject: [PATCH 013/126] is the correct function to use to trigger the cycle --- slider.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/slider.js b/slider.js index 1b49548..1150a16 100644 --- a/slider.js +++ b/slider.js @@ -16,7 +16,7 @@ angular.module('ui.bootstrap-slider', []) if (attrs.ngChange) { ngModelCtrl.$viewChangeListeners.push(function() { - $scope.$eval(attrs.ngChange); + $scope.$apply(attrs.ngChange); }); } From 80dee46bbddfbd81ecd73946f7e2a77e9f959f52 Mon Sep 17 00:00:00 2001 From: guitarfish Date: Wed, 24 Sep 2014 07:41:26 -0400 Subject: [PATCH 014/126] Fixed Camel Case to Lowercase Lowercased attributes so that they're actually matched and set as options on slider. Current version ignores them. --- slider.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/slider.js b/slider.js index 1150a16..7058e83 100644 --- a/slider.js +++ b/slider.js @@ -21,7 +21,7 @@ angular.module('ui.bootstrap-slider', []) } var options = {}; - if(attrs.sliderId) options.id = attrs.sliderId; + if(attrs.sliderid) options.id = attrs.sliderid; if(attrs.min) options.min = parseFloat(attrs.min); if(attrs.max) options.max = parseFloat(attrs.max); if(attrs.step) options.step = parseFloat(attrs.step); @@ -42,12 +42,12 @@ angular.module('ui.bootstrap-slider', []) if(attrs.range) options.range = attrs.range === 'true'; if(attrs.selection) options.selection = attrs.selection; if(attrs.tooltip) options.tooltip = attrs.tooltip; - if(attrs.tooltipSeparator) options.tooltip_separator = attrs.tooltipSeparator; - if(attrs.tooltipSplit) options.tooltip_split = attrs.tooltipSplit === 'true'; + if(attrs.tooltipseparator) options.tooltip_separator = attrs.tooltipseparator; + if(attrs.tooltipsplit) options.tooltip_split = attrs.tooltipsplit === 'true'; if(attrs.handle) options.handle = attrs.handle; if(attrs.reversed) options.reversed = attrs.reversed === 'true'; if(attrs.enabled) options.enabled = attrs.enabled === 'true'; - if(attrs.naturalArrowKeys) options.natural_arrow_keys = attrs.naturalArrowKeys === 'true'; + if(attrs.naturalarrowkeys) options.natural_arrow_keys = attrs.naturalarrowkeys === 'true'; if(attrs.formater) options.formater = $scope.$eval(attrs.formater); if (options.range && !options.value) { From 8141df5f9e65e5a5078ec585da4a862b99aaa0a3 Mon Sep 17 00:00:00 2001 From: guitarfish Date: Wed, 24 Sep 2014 11:39:31 -0400 Subject: [PATCH 015/126] Fixed Camel Case to Lowercase Missed the 'updateEvent' one earlier. --- slider.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/slider.js b/slider.js index 7058e83..6a61ddf 100644 --- a/slider.js +++ b/slider.js @@ -55,7 +55,7 @@ angular.module('ui.bootstrap-slider', []) } var slider = $(element[0]).slider(options); - var updateEvent = attrs.updateEvent || 'slide'; + var updateEvent = attrs.updateevent || 'slide'; slider.on(updateEvent, function(ev) { ngModelCtrl.$setViewValue(ev.value); From be44c60699b07e41c5e3dabf05e62ffd808fa6d3 Mon Sep 17 00:00:00 2001 From: Vladimir Kleshko Date: Wed, 15 Oct 2014 11:01:40 +0300 Subject: [PATCH 016/126] fix indentation bugfix: rename $.fn.slider.Constructor to $.fn.slider.constructor --- slider.js | 61 +++++++++++++++++++++++++++---------------------------- 1 file changed, 30 insertions(+), 31 deletions(-) diff --git a/slider.js b/slider.js index 6a61ddf..b7901ee 100644 --- a/slider.js +++ b/slider.js @@ -1,33 +1,33 @@ angular.module('ui.bootstrap-slider', []) - .directive('slider', ['$parse', '$timeout', function ($parse, $timeout) { + .directive('slider', ['$parse', '$timeout', function($parse, $timeout) { return { restrict: 'AE', replace: true, template: '', require: 'ngModel', - link: function ($scope, element, attrs, ngModelCtrl) { - $.fn.slider.Constructor.prototype.disable = function () { + link: function($scope, element, attrs, ngModelCtrl) { + $.fn.slider.constructor.prototype.disable = function() { this.picker.off(); }; - $.fn.slider.Constructor.prototype.enable = function () { + $.fn.slider.constructor.prototype.enable = function() { this.picker.on(); }; - if (attrs.ngChange) { - ngModelCtrl.$viewChangeListeners.push(function() { - $scope.$apply(attrs.ngChange); - }); - } + if (attrs.ngChange) { + ngModelCtrl.$viewChangeListeners.push(function() { + $scope.$apply(attrs.ngChange); + }); + } - var options = {}; - if(attrs.sliderid) options.id = attrs.sliderid; - if(attrs.min) options.min = parseFloat(attrs.min); - if(attrs.max) options.max = parseFloat(attrs.max); - if(attrs.step) options.step = parseFloat(attrs.step); - if(attrs.precision) options.precision = parseFloat(attrs.precision); - if(attrs.orientation) options.orientation = attrs.orientation; - if(attrs.value) { + var options = {}; + if (attrs.sliderid) options.id = attrs.sliderid; + if (attrs.min) options.min = parseFloat(attrs.min); + if (attrs.max) options.max = parseFloat(attrs.max); + if (attrs.step) options.step = parseFloat(attrs.step); + if (attrs.precision) options.precision = parseFloat(attrs.precision); + if (attrs.orientation) options.orientation = attrs.orientation; + if (attrs.value) { if (angular.isNumber(attrs.value) || angular.isArray(attrs.value)) { options.value = attrs.value; } else if (angular.isString(attrs.value)) { @@ -39,19 +39,19 @@ angular.module('ui.bootstrap-slider', []) } } - if(attrs.range) options.range = attrs.range === 'true'; - if(attrs.selection) options.selection = attrs.selection; - if(attrs.tooltip) options.tooltip = attrs.tooltip; - if(attrs.tooltipseparator) options.tooltip_separator = attrs.tooltipseparator; - if(attrs.tooltipsplit) options.tooltip_split = attrs.tooltipsplit === 'true'; - if(attrs.handle) options.handle = attrs.handle; - if(attrs.reversed) options.reversed = attrs.reversed === 'true'; - if(attrs.enabled) options.enabled = attrs.enabled === 'true'; - if(attrs.naturalarrowkeys) options.natural_arrow_keys = attrs.naturalarrowkeys === 'true'; - if(attrs.formater) options.formater = $scope.$eval(attrs.formater); + if (attrs.range) options.range = attrs.range === 'true'; + if (attrs.selection) options.selection = attrs.selection; + if (attrs.tooltip) options.tooltip = attrs.tooltip; + if (attrs.tooltipseparator) options.tooltip_separator = attrs.tooltipseparator; + if (attrs.tooltipsplit) options.tooltip_split = attrs.tooltipsplit === 'true'; + if (attrs.handle) options.handle = attrs.handle; + if (attrs.reversed) options.reversed = attrs.reversed === 'true'; + if (attrs.enabled) options.enabled = attrs.enabled === 'true'; + if (attrs.naturalarrowkeys) options.natural_arrow_keys = attrs.naturalarrowkeys === 'true'; + if (attrs.formater) options.formater = $scope.$eval(attrs.formater); if (options.range && !options.value) { - options.value = [0,0]; // This is needed, because of value defined at $.fn.slider.defaults - default value 5 prevents creating range slider + options.value = [0, 0]; // This is needed, because of value defined at $.fn.slider.defaults - default value 5 prevents creating range slider } var slider = $(element[0]).slider(options); @@ -65,7 +65,7 @@ angular.module('ui.bootstrap-slider', []) }); $scope.$watch(attrs.ngModel, function(value) { - if(value || value === 0) { + if (value || value === 0) { slider.slider('setValue', value, false); } }); @@ -81,5 +81,4 @@ angular.module('ui.bootstrap-slider', []) } } }; - }]) -; + }]); \ No newline at end of file From b8d7bc96287b859cf6fa811e3c5a23a99af2c7cd Mon Sep 17 00:00:00 2001 From: ubi Date: Tue, 28 Oct 2014 20:06:00 +0800 Subject: [PATCH 017/126] Add attribute option for event listeners of bs slider --- slider.js | 20 ++++++++++++++++++++ test.html | 5 +++++ 2 files changed, 25 insertions(+) diff --git a/slider.js b/slider.js index b7901ee..e2577d2 100644 --- a/slider.js +++ b/slider.js @@ -64,6 +64,26 @@ angular.module('ui.bootstrap-slider', []) }); }); + // Event listeners + var sliderEvents = { + slideStart: 'onStartSlide', + slide: 'onSlide', + slideStop: 'onStopSlide' + }; + + angular.forEach(sliderEvents, function(sliderEventAttr, sliderEvent) { + slider.on(sliderEvent, function(ev) { + + if (attrs[sliderEventAttr]) { + $scope.$eval(attrs[sliderEventAttr]); + + $timeout(function() { + $scope.$apply(); + }); + } + }); + }); + $scope.$watch(attrs.ngModel, function(value) { if (value || value === 0) { slider.slider('setValue', value, false); diff --git a/test.html b/test.html index 5951c94..c9d98c9 100644 --- a/test.html +++ b/test.html @@ -27,6 +27,11 @@



{{sliders.thirdSliderValue}} + +



+ + {{sliders.thirdSliderValue}} + status: {{status}} From c6ee3872ff36808012a202a4a4ed290293ee87c9 Mon Sep 17 00:00:00 2001 From: Fabien Vauchelles Date: Thu, 30 Oct 2014 11:56:13 +0100 Subject: [PATCH 018/126] refactor(query): remove all query calls --- slider.js | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/slider.js b/slider.js index e2577d2..4dca98c 100644 --- a/slider.js +++ b/slider.js @@ -6,14 +6,6 @@ angular.module('ui.bootstrap-slider', []) template: '', require: 'ngModel', link: function($scope, element, attrs, ngModelCtrl) { - $.fn.slider.constructor.prototype.disable = function() { - this.picker.off(); - }; - - $.fn.slider.constructor.prototype.enable = function() { - this.picker.on(); - }; - if (attrs.ngChange) { ngModelCtrl.$viewChangeListeners.push(function() { $scope.$apply(attrs.ngChange); @@ -54,7 +46,15 @@ angular.module('ui.bootstrap-slider', []) options.value = [0, 0]; // This is needed, because of value defined at $.fn.slider.defaults - default value 5 prevents creating range slider } - var slider = $(element[0]).slider(options); + var slider = element.slider(options); + /* Disable picker when slider is disabled */ + slider.disable = function() { + this.picker.off(); + }; + slider.enable = function() { + this.picker.on(); + }; + var updateEvent = attrs.updateevent || 'slide'; slider.on(updateEvent, function(ev) { From a68b3e27bcbc3ee4fd67bfa98776c545b1e6c637 Mon Sep 17 00:00:00 2001 From: paroos Date: Mon, 24 Nov 2014 22:32:55 +0100 Subject: [PATCH 019/126] IsolatedScope & Two-Way Binding for specific attributes --- README.md | 4 +- slider.js | 259 ++++++++++++++++++++++++++++++++---------------------- test.html | 31 +++++-- test.js | 23 ++++- 4 files changed, 202 insertions(+), 115 deletions(-) diff --git a/README.md b/README.md index 147200d..a26cc22 100644 --- a/README.md +++ b/README.md @@ -11,8 +11,8 @@ Sample Usage ============ ```html - + - + ``` diff --git a/slider.js b/slider.js index 4dca98c..36c8e73 100644 --- a/slider.js +++ b/slider.js @@ -1,104 +1,157 @@ angular.module('ui.bootstrap-slider', []) - .directive('slider', ['$parse', '$timeout', function($parse, $timeout) { - return { - restrict: 'AE', - replace: true, - template: '', - require: 'ngModel', - link: function($scope, element, attrs, ngModelCtrl) { - if (attrs.ngChange) { - ngModelCtrl.$viewChangeListeners.push(function() { - $scope.$apply(attrs.ngChange); - }); - } - - var options = {}; - if (attrs.sliderid) options.id = attrs.sliderid; - if (attrs.min) options.min = parseFloat(attrs.min); - if (attrs.max) options.max = parseFloat(attrs.max); - if (attrs.step) options.step = parseFloat(attrs.step); - if (attrs.precision) options.precision = parseFloat(attrs.precision); - if (attrs.orientation) options.orientation = attrs.orientation; - if (attrs.value) { - if (angular.isNumber(attrs.value) || angular.isArray(attrs.value)) { - options.value = attrs.value; - } else if (angular.isString(attrs.value)) { - if (attrs.value.indexOf("[") === 0) { - options.value = angular.fromJson(attrs.value); - } else { - options.value = parseFloat(attrs.value); - } - } - - } - if (attrs.range) options.range = attrs.range === 'true'; - if (attrs.selection) options.selection = attrs.selection; - if (attrs.tooltip) options.tooltip = attrs.tooltip; - if (attrs.tooltipseparator) options.tooltip_separator = attrs.tooltipseparator; - if (attrs.tooltipsplit) options.tooltip_split = attrs.tooltipsplit === 'true'; - if (attrs.handle) options.handle = attrs.handle; - if (attrs.reversed) options.reversed = attrs.reversed === 'true'; - if (attrs.enabled) options.enabled = attrs.enabled === 'true'; - if (attrs.naturalarrowkeys) options.natural_arrow_keys = attrs.naturalarrowkeys === 'true'; - if (attrs.formater) options.formater = $scope.$eval(attrs.formater); - - if (options.range && !options.value) { - options.value = [0, 0]; // This is needed, because of value defined at $.fn.slider.defaults - default value 5 prevents creating range slider - } - - var slider = element.slider(options); - /* Disable picker when slider is disabled */ - slider.disable = function() { - this.picker.off(); - }; - slider.enable = function() { - this.picker.on(); - }; - - var updateEvent = attrs.updateevent || 'slide'; - - slider.on(updateEvent, function(ev) { - ngModelCtrl.$setViewValue(ev.value); - $timeout(function() { - $scope.$apply(); - }); - }); - - // Event listeners - var sliderEvents = { - slideStart: 'onStartSlide', - slide: 'onSlide', - slideStop: 'onStopSlide' - }; - - angular.forEach(sliderEvents, function(sliderEventAttr, sliderEvent) { - slider.on(sliderEvent, function(ev) { - - if (attrs[sliderEventAttr]) { - $scope.$eval(attrs[sliderEventAttr]); - - $timeout(function() { - $scope.$apply(); - }); - } - }); - }); - - $scope.$watch(attrs.ngModel, function(value) { - if (value || value === 0) { - slider.slider('setValue', value, false); - } - }); - - if (angular.isDefined(attrs.ngDisabled)) { - $scope.$watch(attrs.ngDisabled, function(value) { - if (value) { - slider.slider('disable'); - } else { - slider.slider('enable'); - } - }); - } - } - }; - }]); \ No newline at end of file + .directive('slider', ['$parse', '$timeout', function ($parse, $timeout) { + return { + restrict: 'AE', + replace: true, + template: '', + require: 'ngModel', + scope: { + max: "=", + min: "=", + step: "=", + value: "=", + ngModel: '=', + range:'=', + sliderid:'=', + formater:'&', + onStartSlide: '&', + onStopSlide: '&', + onSlide: '&' + }, + link: function ($scope, element, attrs, ngModelCtrl, $compile) { + initSlider(); + + function initSlider() { + + if (attrs.ngChange) { + ngModelCtrl.$viewChangeListeners.push(function () { + $scope.$apply(attrs.ngChange); + }); + } + + $.fn.slider.Constructor.prototype.disable = function () { + this.picker.off(); + }; + + $.fn.slider.Constructor.prototype.enable = function () { + this.picker.on(); + }; + + if (attrs.ngChange) { + ngModelCtrl.$viewChangeListeners.push(function () { + $scope.$apply(attrs.ngChange); + }); + } + + var options = {}; + if ($scope.sliderid) options.id = $scope.sliderid; + if ($scope.min) options.min = parseFloat($scope.min); + if ($scope.max) { + options.max = parseFloat($scope.max); + } + + + if (attrs.step) options.step = parseFloat($scope.step); + if (attrs.precision) options.precision = parseFloat(attrs.precision); + if (attrs.orientation) options.orientation = attrs.orientation; + if ($scope.value) { + if (angular.isNumber($scope.value) || angular.isArray($scope.value)) { + options.value = $scope.value; + } else if (angular.isString($scope.value)) { + if (attrs.value.indexOf("[") === 0) { + options.value = angular.fromJson($scope.value); + } else { + options.value = parseFloat($scope.value); + } + } + } + if ($scope.range) { + options.range = $scope.range === true; + } + + if (attrs.selection) options.selection = attrs.selection; + if (attrs.tooltip) options.tooltip = attrs.tooltip; + if (attrs.tooltipseparator) options.tooltip_separator = attrs.tooltipseparator; + if (attrs.tooltipsplit) options.tooltip_split = attrs.tooltipsplit === 'true'; + if (attrs.handle) options.handle = attrs.handle; + if (attrs.reversed) options.reversed = attrs.reversed === 'true'; + if (attrs.enabled) options.enabled = attrs.enabled === 'true'; + if (attrs.naturalarrowkeys) options.natural_arrow_keys = attrs.naturalarrowkeys === 'true'; + if (attrs.formater) options.formater = $scope.$eval($scope.formater); + + if (options.range && !options.value) { + options.value = [0, 0]; // This is needed, because of value defined at $.fn.slider.defaults - default value 5 prevents creating range slider + } + + var slider = $(element[0]).slider(options); + slider.slider('destroy'); + var slider = $(element[0]).slider(options); + + var updateEvent = attrs.updateevent || 'slide'; + + slider.on(updateEvent, function (ev) { + ngModelCtrl.$setViewValue(ev.value); + $timeout(function () { + $scope.$apply(); + }); + + if(typeof ev != undefined && typeof ev.value != undefined) { + $scope.onSlide({'value': ev.value}); + } + }); + + // Event listeners + var sliderEvents = { + slideStart: 'onStartSlide', + slideStop: 'onStopSlide' + }; + + angular.forEach(sliderEvents, function(sliderEventAttr, sliderEvent) { + slider.on(sliderEvent, function(ev) { + + if ($scope[sliderEventAttr]) { + $scope.$eval($scope[sliderEventAttr]); + + $timeout(function() { + $scope.$apply(); + }); + } + }); + }); + + + if (angular.isDefined(attrs.ngDisabled)) { + $scope.$watch(attrs.ngDisabled, function (value) { + if (value) { + slider.slider('disable'); + } else { + slider.slider('enable'); + } + }); + } + + + $scope.$watch('ngModel', function(value) { + slider.slider('setValue', value); + }); + }; + + $scope.$watch('max', function(value){ + initSlider(); + }); + + $scope.$watch('min', function(value){ + initSlider(); + }); + + $scope.$watch('step', function(value){ + initSlider(); + }); + + $scope.$watch('range', function(value) { + initSlider(); + }); + } + }; + }]) +; diff --git a/test.html b/test.html index c9d98c9..5913ec3 100644 --- a/test.html +++ b/test.html @@ -7,32 +7,49 @@
- + + Slider Value: + + Max. Value: + Min. Value: + + {{sliders.sliderValue}}



- + {{sliders.secondSliderValue}}



- + +



+ + {{sliders.rangeSliderValue}} +



- + {{sliders.rangeSliderValue2}} - + + +



{{sliders.thirdSliderValue}}



- {{sliders.thirdSliderValue}} + {{sliders.fourthSliderValue}} status: {{status}} -
+ + + {{sliders.fourthSliderValue}} + status: {{status}} + + diff --git a/test.js b/test.js index d7e44c5..1fea90c 100644 --- a/test.js +++ b/test.js @@ -1,9 +1,13 @@ angular.module('angular-bootstrap-slider-test', ['ui.bootstrap-slider']) - .controller('TestCtrl', ['$scope', function($scope) { + .controller('TestCtrl', ['$scope', '$log', function($scope, $log) { $scope.sliders = {}; $scope.sliders.sliderValue = 0; + + $scope.range = true; + $scope.value = [55, 70]; + $scope.testOptions = { min: 5, max: 103, @@ -14,10 +18,23 @@ angular.module('angular-bootstrap-slider-test', ['ui.bootstrap-slider']) $scope.sliders.secondSliderValue = 0; $scope.sliders.rangeSliderValue = [ 10, 50 ]; - + + $scope.sliders.rangeSliderValue2 = [ 10, 50 ]; + + + $scope.$watch('sliders.rangeSliderValue2', function(value) { + + console.log('sliders value has changed: ' + value); + console.log(value); + }); + + $scope.sliders.thirdSliderValue = 0; $scope.myFormater = function(value) { return value + "%"; - } + }; + $scope.slideDelegate = function(value){ + $log.log('slide value: ' + value); + }; }]); \ No newline at end of file From 5c192d4c97e149d9ff1e16d61db3b8b46b0048cd Mon Sep 17 00:00:00 2001 From: paroos Date: Mon, 24 Nov 2014 22:55:30 +0100 Subject: [PATCH 020/126] Version for testing --- bower.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bower.json b/bower.json index b919f99..0cd5f65 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "angular-bootstrap-slider", - "version": "0.0.5", + "version": "0.0.6", "authors": [ "Kyle Kemp " ], From ebf903e71ce7e96246b2ea98f4e302415706b337 Mon Sep 17 00:00:00 2001 From: SamGraber Date: Wed, 24 Dec 2014 11:32:56 -0500 Subject: [PATCH 021/126] Wrap the input in a div and add the .slider-input class to the input. When creating the slider itself, call element.find on the input, instead of using element itself. This way the jquery slider will be wrapped in the div. Otherwise, the jquery slider actually wraps the angular directive itself, which seems like a messy way to go about it. (And it makes it harder to style with classes on the directive) --- slider.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/slider.js b/slider.js index 36c8e73..d0b50ed 100644 --- a/slider.js +++ b/slider.js @@ -3,7 +3,7 @@ angular.module('ui.bootstrap-slider', []) return { restrict: 'AE', replace: true, - template: '', + template: '
', require: 'ngModel', scope: { max: "=", @@ -83,9 +83,9 @@ angular.module('ui.bootstrap-slider', []) options.value = [0, 0]; // This is needed, because of value defined at $.fn.slider.defaults - default value 5 prevents creating range slider } - var slider = $(element[0]).slider(options); + var slider = $(element.find(".slider-input")[0]).slider(options); slider.slider('destroy'); - var slider = $(element[0]).slider(options); + var slider = $(element.find(".slider-input")[0]).slider(options); var updateEvent = attrs.updateevent || 'slide'; From 375c6852d4132c8a0673e492d00ed56baaf178b7 Mon Sep 17 00:00:00 2001 From: Robert Michalski Date: Sat, 3 Jan 2015 11:43:11 +0100 Subject: [PATCH 022/126] Added check to detect if updateevent attribute is an array and apply watchers for each event found. --- slider.js | 36 ++++++++++++++++++++++++++---------- 1 file changed, 26 insertions(+), 10 deletions(-) diff --git a/slider.js b/slider.js index d0b50ed..a4f5719 100644 --- a/slider.js +++ b/slider.js @@ -85,19 +85,35 @@ angular.module('ui.bootstrap-slider', []) var slider = $(element.find(".slider-input")[0]).slider(options); slider.slider('destroy'); - var slider = $(element.find(".slider-input")[0]).slider(options); + slider = $(element.find(".slider-input")[0]).slider(options); + + var updateEvent; + if (angular.isString(attrs.updateevent)) { + // check if array of event names + if (attrs.updateevent.indexOf("[") === 0) { + updateEvent = angular.fromJson(attrs.updateevent); + } + else { + // if only single event name in string + updateEvent = [attrs.updateevent]; + } + } + else { + // default to slide event + updateEvent = ['slide']; + } - var updateEvent = attrs.updateevent || 'slide'; + angular.forEach(updateEvent, function(sliderEvent) { + slider.on(sliderEvent, function(ev) { + ngModelCtrl.$setViewValue(ev.value); + $timeout(function() { + $scope.$apply(); + }); - slider.on(updateEvent, function (ev) { - ngModelCtrl.$setViewValue(ev.value); - $timeout(function () { - $scope.$apply(); + if(typeof ev === 'object' && ev.value) { + $scope.onSlide({'value': ev.value}); + } }); - - if(typeof ev != undefined && typeof ev.value != undefined) { - $scope.onSlide({'value': ev.value}); - } }); // Event listeners From 773f8747327fb2869057535c48d5295c9df56fcf Mon Sep 17 00:00:00 2001 From: Robert Michalski Date: Sat, 3 Jan 2015 12:22:17 +0100 Subject: [PATCH 023/126] Added support for passing $event and value to all event callbacks. --- slider.js | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/slider.js b/slider.js index d0b50ed..703c1f6 100644 --- a/slider.js +++ b/slider.js @@ -85,7 +85,7 @@ angular.module('ui.bootstrap-slider', []) var slider = $(element.find(".slider-input")[0]).slider(options); slider.slider('destroy'); - var slider = $(element.find(".slider-input")[0]).slider(options); + slider = $(element.find(".slider-input")[0]).slider(options); var updateEvent = attrs.updateevent || 'slide'; @@ -94,15 +94,12 @@ angular.module('ui.bootstrap-slider', []) $timeout(function () { $scope.$apply(); }); - - if(typeof ev != undefined && typeof ev.value != undefined) { - $scope.onSlide({'value': ev.value}); - } }); // Event listeners var sliderEvents = { slideStart: 'onStartSlide', + slide: 'onSlide', slideStop: 'onStopSlide' }; @@ -110,11 +107,17 @@ angular.module('ui.bootstrap-slider', []) slider.on(sliderEvent, function(ev) { if ($scope[sliderEventAttr]) { - $scope.$eval($scope[sliderEventAttr]); + if( typeof ev === 'object' && ev.value ) { + $scope.$eval(attrs[sliderEventAttr], { $event: ev, value: ev.value }); + } + else { + $scope.$eval($scope[sliderEventAttr]); + } $timeout(function() { $scope.$apply(); }); + } }); }); From 07b6760d93a8846c7aa413f4ccff94809208b2d6 Mon Sep 17 00:00:00 2001 From: Robert Michalski Date: Sat, 3 Jan 2015 15:31:44 +0100 Subject: [PATCH 024/126] Added .gitignore to prevent bower_components directory being added to git. --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..57d6133 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +# bower # +######### +bower_components \ No newline at end of file From bf6c23a145ae2825d2b73324ecdedcea5491e784 Mon Sep 17 00:00:00 2001 From: Robert Michalski Date: Sat, 3 Jan 2015 15:32:50 +0100 Subject: [PATCH 025/126] Used $parse to make the values get passed properly. --- slider.js | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/slider.js b/slider.js index 703c1f6..0c4c471 100644 --- a/slider.js +++ b/slider.js @@ -107,17 +107,13 @@ angular.module('ui.bootstrap-slider', []) slider.on(sliderEvent, function(ev) { if ($scope[sliderEventAttr]) { - if( typeof ev === 'object' && ev.value ) { - $scope.$eval(attrs[sliderEventAttr], { $event: ev, value: ev.value }); - } - else { - $scope.$eval($scope[sliderEventAttr]); - } + var invoker = $parse(attrs[sliderEventAttr]); + //var invoker = $parse(attrs[sliderEventAttr]); + invoker($scope.$parent, { $event: ev, value: ev.value }); $timeout(function() { $scope.$apply(); }); - } }); }); From 17e7d0339d5a66dfcbaf9715b1a16eb5bbf1f560 Mon Sep 17 00:00:00 2001 From: Robert Michalski Date: Sat, 3 Jan 2015 15:33:08 +0100 Subject: [PATCH 026/126] Added test for passing $event and value to all callbacks. --- test.html | 50 ++++++++++++++++++--------------- test.js | 84 +++++++++++++++++++++++++++++-------------------------- 2 files changed, 71 insertions(+), 63 deletions(-) diff --git a/test.html b/test.html index 5913ec3..25b0343 100644 --- a/test.html +++ b/test.html @@ -8,48 +8,52 @@
- Slider Value: + Slider Value: - Max. Value: - Min. Value: + Max. Value: + Min. Value: - {{sliders.sliderValue}} + Value: {{sliders.sliderValue}}



- {{sliders.secondSliderValue}} + Value: {{sliders.secondSliderValue}} -



+



+ + Value: {{sliders.rangeSliderValue}} -



+



- - {{sliders.rangeSliderValue}} + + Value: {{sliders.rangeSliderValue2}} +



-



- - {{sliders.rangeSliderValue2}} + + Value: {{sliders.thirdSliderValue}} +



+ + Value: {{sliders.fourthSliderValue}}
+ Status: {{status}} -



- - {{sliders.thirdSliderValue}} +



-



- - {{sliders.fourthSliderValue}} - status: {{status}} + + Value: {{sliders.fourthSliderValue}}
+ Status: {{status}} - - {{sliders.fourthSliderValue}} - status: {{status}} +



-
+ + Value: {{sliders.fifthSliderValue}}
+ Event type: {{delegateEvent.type}} + diff --git a/test.js b/test.js index 1fea90c..e31e7fd 100644 --- a/test.js +++ b/test.js @@ -1,40 +1,44 @@ -angular.module('angular-bootstrap-slider-test', ['ui.bootstrap-slider']) - .controller('TestCtrl', ['$scope', '$log', function($scope, $log) { - - $scope.sliders = {}; - $scope.sliders.sliderValue = 0; - - - $scope.range = true; - $scope.value = [55, 70]; - - $scope.testOptions = { - min: 5, - max: 103, - step: 2.2, - value: 7, - rangeValue : [2,20] - }; - - $scope.sliders.secondSliderValue = 0; - $scope.sliders.rangeSliderValue = [ 10, 50 ]; - - $scope.sliders.rangeSliderValue2 = [ 10, 50 ]; - - - $scope.$watch('sliders.rangeSliderValue2', function(value) { - - console.log('sliders value has changed: ' + value); - console.log(value); - }); - - - $scope.sliders.thirdSliderValue = 0; - $scope.myFormater = function(value) { - return value + "%"; - }; - - $scope.slideDelegate = function(value){ - $log.log('slide value: ' + value); - }; - }]); \ No newline at end of file +angular.module( 'angular-bootstrap-slider-test', ['ui.bootstrap-slider'] ) + .controller( 'TestCtrl', ['$scope', '$log', function ( $scope, $log ) { + + $scope.sliders = {}; + $scope.sliders.sliderValue = 0; + $scope.sliders.secondSliderValue = 0; + $scope.sliders.thirdSliderValue = 0; + $scope.sliders.fourthSliderValue = 0; + $scope.sliders.fifthSliderValue = 0; + $scope.sliders.sixthSliderValue = 0; + $scope.sliders.seventhSliderValue = 0; + $scope.sliders.eighthSliderValue = 0; + $scope.sliders.ninthSliderValue = 0; + + $scope.range = true; + $scope.value = [55, 70]; + + $scope.testOptions = { + min: 5, + max: 103, + step: 2.2, + value: 7, + rangeValue: [2, 20] + }; + + $scope.sliders.rangeSliderValue = [10, 50]; + $scope.sliders.rangeSliderValue2 = [10, 50]; + + + $scope.$watch( 'sliders.rangeSliderValue2', function ( value ) { + $log.log( 'sliders value has changed: ' + value ); + $log.log( value ); + } ); + + $scope.myFormater = function ( value ) { + return value + "%"; + }; + + $scope.delegateEvent = null; + $scope.slideDelegate = function ( value, $event ) { + $log.log( 'slide value: ' + value ); + $scope.delegateEvent = $event; + }; + }] ); \ No newline at end of file From 70ff02dbd06404562b7bbdaefc6d17c893ee2027 Mon Sep 17 00:00:00 2001 From: Robert Michalski Date: Sat, 3 Jan 2015 15:41:19 +0100 Subject: [PATCH 027/126] Updated tests for updating model value on multiple events. --- test.html | 108 +++++++++++++++++++++++++++++++++--------------------- test.js | 84 ++++++++++++++++++++++-------------------- 2 files changed, 110 insertions(+), 82 deletions(-) diff --git a/test.html b/test.html index 5913ec3..258ea16 100644 --- a/test.html +++ b/test.html @@ -1,66 +1,90 @@ - - Angular Bootstrap Slider test - - - - + + Angular Bootstrap Slider test + + + + -
+
- Slider Value: + Slider Value: - Max. Value: - Min. Value: + Max. Value: + Min. Value: - - {{sliders.sliderValue}} + + Value: {{sliders.sliderValue}} -



+



- - {{sliders.secondSliderValue}} + + Value: {{sliders.secondSliderValue}} -



+



+ + Value: {{sliders.rangeSliderValue}} -



+



- - {{sliders.rangeSliderValue}} + + Value: {{sliders.rangeSliderValue2}} +



-



- - {{sliders.rangeSliderValue2}} + + Value: {{sliders.thirdSliderValue}} +



+ + Value: {{sliders.fourthSliderValue}} + Status: {{status}} -



- - {{sliders.thirdSliderValue}} + + Value: {{sliders.fourthSliderValue}} + Status: {{status}} -



- - {{sliders.fourthSliderValue}} - status: {{status}} +



- - {{sliders.fourthSliderValue}} - status: {{status}} + Updates model on slide event by default + + Value: {{sliders.sixthSliderValue}} -
+

+ Updates model only on slideStop event + + Value: {{sliders.seventhSliderValue}} - - - - +

- - + Updates model on slideStart and slideStop + + Value: {{sliders.eighthSliderValue}} - - - +

+ + Updates model on all events + + Value: {{sliders.ninthSliderValue}} +
+ + + + + + + + + + + + + \ No newline at end of file diff --git a/test.js b/test.js index 1fea90c..794b1ed 100644 --- a/test.js +++ b/test.js @@ -1,40 +1,44 @@ -angular.module('angular-bootstrap-slider-test', ['ui.bootstrap-slider']) - .controller('TestCtrl', ['$scope', '$log', function($scope, $log) { - - $scope.sliders = {}; - $scope.sliders.sliderValue = 0; - - - $scope.range = true; - $scope.value = [55, 70]; - - $scope.testOptions = { - min: 5, - max: 103, - step: 2.2, - value: 7, - rangeValue : [2,20] - }; - - $scope.sliders.secondSliderValue = 0; - $scope.sliders.rangeSliderValue = [ 10, 50 ]; - - $scope.sliders.rangeSliderValue2 = [ 10, 50 ]; - - - $scope.$watch('sliders.rangeSliderValue2', function(value) { - - console.log('sliders value has changed: ' + value); - console.log(value); - }); - - - $scope.sliders.thirdSliderValue = 0; - $scope.myFormater = function(value) { - return value + "%"; - }; - - $scope.slideDelegate = function(value){ - $log.log('slide value: ' + value); - }; - }]); \ No newline at end of file +angular.module( 'angular-bootstrap-slider-test', ['ui.bootstrap-slider'] ) + .controller( 'TestCtrl', ['$scope', '$log', function ( $scope, $log ) { + + $scope.sliders = {}; + $scope.sliders.sliderValue = 0; + $scope.sliders.secondSliderValue = 0; + $scope.sliders.thirdSliderValue = 0; + $scope.sliders.fourthSliderValue = 0; + $scope.sliders.fithSliderValue = 0; + $scope.sliders.sixthSliderValue = 0; + $scope.sliders.seventhSliderValue = 0; + $scope.sliders.eighthSliderValue = 0; + $scope.sliders.ninthSliderValue = 0; + + + $scope.range = true; + $scope.value = [55, 70]; + + $scope.testOptions = { + min: 5, + max: 103, + step: 2.2, + value: 7, + rangeValue: [2, 20] + }; + + $scope.sliders.rangeSliderValue = [10, 50]; + $scope.sliders.rangeSliderValue2 = [10, 50]; + + + $scope.$watch( 'sliders.rangeSliderValue2', function ( value ) { + + console.log( 'sliders value has changed: ' + value ); + console.log( value ); + } ); + + $scope.myFormater = function ( value ) { + return value + "%"; + }; + + $scope.slideDelegate = function ( value ) { + $log.log( 'slide value: ' + value ); + }; + }] ); \ No newline at end of file From 66c31595b3bc1a3f14d4699753f5666b9103a578 Mon Sep 17 00:00:00 2001 From: Robert Michalski Date: Sat, 3 Jan 2015 19:53:25 +0100 Subject: [PATCH 028/126] Removed extra closing div left after mergning branches. --- test.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test.html b/test.html index 0d04644..de7554a 100644 --- a/test.html +++ b/test.html @@ -67,7 +67,7 @@ Updates model only on slideStop event Value: {{sliders.seventhSliderValue}} - +

Updates model on slideStart and slideStop From 1f667c17644894fc93b33ee6886032e0f9ce8e87 Mon Sep 17 00:00:00 2001 From: Robert Michalski Date: Mon, 5 Jan 2015 01:28:43 +0100 Subject: [PATCH 029/126] Rewritten most of the code without altering the the way the directive functions. Added controls for all settings of jQuery plugin to test app. --- slider.js | 261 ++++++++++++++++++++++++++++++------------------------ test.html | 209 +++++++++++++++++++++++++++++++++---------- test.js | 79 +++++++++++------ 3 files changed, 357 insertions(+), 192 deletions(-) diff --git a/slider.js b/slider.js index e9e440b..b757240 100644 --- a/slider.js +++ b/slider.js @@ -12,158 +12,183 @@ angular.module('ui.bootstrap-slider', []) value: "=", ngModel: '=', range:'=', - sliderid:'=', - formater:'&', + sliderid: '=', + formater: '&', onStartSlide: '&', onStopSlide: '&', onSlide: '&' }, link: function ($scope, element, attrs, ngModelCtrl, $compile) { + var ngModelDeregisterFn, ngDisabledDeregisterFn; + initSlider(); function initSlider() { + var options = {}; - if (attrs.ngChange) { - ngModelCtrl.$viewChangeListeners.push(function () { - $scope.$apply(attrs.ngChange); - }); + function setOption(key, value, defaultValue) { + options[key] = value || defaultValue; } - - $.fn.slider.Constructor.prototype.disable = function () { - this.picker.off(); - }; - - $.fn.slider.Constructor.prototype.enable = function () { - this.picker.on(); - }; - - if (attrs.ngChange) { - ngModelCtrl.$viewChangeListeners.push(function () { - $scope.$apply(attrs.ngChange); - }); + function setFloatOption(key, value, defaultValue) { + options[key] = value ? parseFloat(value) : defaultValue; } - - var options = {}; - if ($scope.sliderid) options.id = $scope.sliderid; - if ($scope.min) options.min = parseFloat($scope.min); - if ($scope.max) { - options.max = parseFloat($scope.max); + function setBooleanOption(key, value, defaultValue) { + options[key] = value ? value + '' === 'true' : defaultValue; + } + function getArrayOrValue(value) { + return (angular.isString(value) && value.indexOf("[") === 0) ? angular.fromJson(value) : value; } + setOption('id', $scope.sliderid); + setOption('orientation', attrs.orientation, 'horizontal'); + setOption('selection', attrs.selection, 'before'); + setOption('handle', attrs.handle, 'round'); + setOption('tooltip', attrs.tooltip, 'show'); + setOption('tooltipseparator', attrs.tooltipseparator, ':'); + + setFloatOption('min', $scope.min, 0); + setFloatOption('max', $scope.max, 10); + setFloatOption('step', $scope.step, 1); + var strNbr = options.step + ''; + var decimals = strNbr.substring(strNbr.lastIndexOf('.') + 1); + setFloatOption('precision', attrs.precision, decimals); + + setBooleanOption('tooltip_split', attrs.tooltipsplit, false); + setBooleanOption('enabled', attrs.enabled, true); + setBooleanOption('naturalarrowkeys', attrs.naturalarrowkeys, false); + setBooleanOption('reversed', attrs.reversed, false); - if (attrs.step) options.step = parseFloat($scope.step); - if (attrs.precision) options.precision = parseFloat(attrs.precision); - if (attrs.orientation) options.orientation = attrs.orientation; if ($scope.value) { if (angular.isNumber($scope.value) || angular.isArray($scope.value)) { options.value = $scope.value; - } else if (angular.isString($scope.value)) { - if (attrs.value.indexOf("[") === 0) { - options.value = angular.fromJson($scope.value); - } else { + } + else if (angular.isString($scope.value)) { + options.value = getArrayOrValue($scope.value); + if(!angular.isArray(options.value)) { options.value = parseFloat($scope.value); } } } - if ($scope.range) { - options.range = $scope.range === true; - } - if (attrs.selection) options.selection = attrs.selection; - if (attrs.tooltip) options.tooltip = attrs.tooltip; - if (attrs.tooltipseparator) options.tooltip_separator = attrs.tooltipseparator; - if (attrs.tooltipsplit) options.tooltip_split = attrs.tooltipsplit === 'true'; - if (attrs.handle) options.handle = attrs.handle; - if (attrs.reversed) options.reversed = attrs.reversed === 'true'; - if (attrs.enabled) options.enabled = attrs.enabled === 'true'; - if (attrs.naturalarrowkeys) options.natural_arrow_keys = attrs.naturalarrowkeys === 'true'; - if (attrs.formater) options.formater = $scope.$eval($scope.formater); - - if (options.range && !options.value) { - options.value = [0, 0]; // This is needed, because of value defined at $.fn.slider.defaults - default value 5 prevents creating range slider - } - - var slider = $(element.find(".slider-input")[0]).slider(options); - slider.slider('destroy'); - slider = $(element.find(".slider-input")[0]).slider(options); - - var updateEvent; - if (angular.isString(attrs.updateevent)) { - // check if array of event names - if (attrs.updateevent.indexOf("[") === 0) { - updateEvent = angular.fromJson(attrs.updateevent); + setBooleanOption('range', $scope.range, false); + if( options.range ) { + if( angular.isArray($scope.value) ) { + options.value = $scope.value; + } + else if (angular.isString($scope.value)) { + options.value = getArrayOrValue($scope.value); + if(!angular.isArray(options.value)) { + var value = parseFloat($scope.value); + if( value < $scope.min ) { + value = $scope.min; + options.value = [value, options.max]; + } + else if( value > $scope.max ) { + value = $scope.max; + options.value = [options.min, value]; + } + } } else { - // if only single event name in string - updateEvent = [attrs.updateevent]; + options.value = [options.min, options.max]; // This is needed, because of value defined at $.fn.slider.defaults - default value 5 prevents creating range slider } + $scope.ngModel = options.value; // needed, otherwise turns value into [null, ##] } else { - // default to slide event - updateEvent = ['slide']; + setFloatOption('value', $scope.value, 5); } - angular.forEach(updateEvent, function(sliderEvent) { - slider.on(sliderEvent, function(ev) { - ngModelCtrl.$setViewValue(ev.value); - $timeout(function() { - $scope.$apply(); - }); - }); - }); - - // Event listeners - var sliderEvents = { - slideStart: 'onStartSlide', - slide: 'onSlide', - slideStop: 'onStopSlide' - }; - - angular.forEach(sliderEvents, function(sliderEventAttr, sliderEvent) { - slider.on(sliderEvent, function(ev) { - - if ($scope[sliderEventAttr]) { - var invoker = $parse(attrs[sliderEventAttr]); - invoker($scope.$parent, { $event: ev, value: ev.value }); - - $timeout(function() { + if ($scope.formater) options.formater = $scope.$eval($scope.formater); + + var slider = element.find( ".slider-input" ).eq( 0 ); + // check if slider jQuery plugin exists + if( $.fn.slider ) { + // adding methods to jQuery slider plugin prototype + $.fn.slider.Constructor.prototype.disable = function () { + this.picker.off(); + }; + $.fn.slider.Constructor.prototype.enable = function () { + this.picker.on(); + }; + + // destroy previous slider to reset all options + slider.slider( options ); + slider.slider( 'destroy' ); + slider.slider( options ); + + // everything that needs slider element + var updateEvent = getArrayOrValue( attrs.updateevent ); + if ( angular.isString( updateEvent ) ) { + // if only single event name in string + updateEvent = [updateEvent]; + } + else { + // default to slide event + updateEvent = ['slide']; + } + angular.forEach( updateEvent, function ( sliderEvent ) { + slider.on( sliderEvent, function ( ev ) { + ngModelCtrl.$setViewValue( ev.value ); + $timeout( function () { $scope.$apply(); - }); - } - }); - }); - + } ); + } ); + } ); + + // Event listeners + var sliderEvents = { + slideStart: 'onStartSlide', + slide: 'onSlide', + slideStop: 'onStopSlide' + }; + angular.forEach( sliderEvents, function ( sliderEventAttr, sliderEvent ) { + slider.on( sliderEvent, function ( ev ) { + + if ( $scope[sliderEventAttr] ) { + var invoker = $parse( attrs[sliderEventAttr] ); + invoker( $scope.$parent, {$event: ev, value: ev.value} ); + + $timeout( function () { + $scope.$apply(); + } ); + } + } ); + } ); + + if ( attrs.ngChange ) { + ngModelCtrl.$viewChangeListeners.push( function () { + $scope.$apply( attrs.ngChange ); + } ); + } - if (angular.isDefined(attrs.ngDisabled)) { - $scope.$watch(attrs.ngDisabled, function (value) { - if (value) { - slider.slider('disable'); - } else { - slider.slider('enable'); - } - }); + // deregister ngDisabled watcher to prevent memory leaks + if ( angular.isFunction( ngDisabledDeregisterFn ) ) { + ngDisabledDeregisterFn(); + ngDisabledDeregisterFn = null; + } + if ( angular.isDefined( attrs.ngDisabled ) ) { + ngDisabledDeregisterFn = $scope.$watch( attrs.ngDisabled, function ( value ) { + if ( value ) { + slider.slider( 'disable' ); + } + else { + slider.slider( 'enable' ); + } + } ); + } + // deregister ngModel watcher to prevent memory leaks + if ( angular.isFunction( ngModelDeregisterFn ) ) ngModelDeregisterFn(); + ngModelDeregisterFn = $scope.$watch( 'ngModel', function ( value ) { + slider.slider( 'setValue', value ); + } ); } + } - - $scope.$watch('ngModel', function(value) { - slider.slider('setValue', value); + var watchers = ['min', 'max', 'step', 'range']; + angular.forEach(watchers, function(prop) { + $scope.$watch(prop, function(){ + initSlider(); }); - }; - - $scope.$watch('max', function(value){ - initSlider(); - }); - - $scope.$watch('min', function(value){ - initSlider(); - }); - - $scope.$watch('step', function(value){ - initSlider(); - }); - - $scope.$watch('range', function(value) { - initSlider(); }); } }; diff --git a/test.html b/test.html index de7554a..7323a18 100644 --- a/test.html +++ b/test.html @@ -8,77 +8,194 @@
- Slider Value: +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+ + Slider using tags
+ + If you can see this then slider did not get compiled by Angular. + Check that all necessary files are included, did you run "bower install"? + - Max. Value: - Min. Value: - - - Value: {{sliders.sliderValue}} - -



- - - Value: {{sliders.secondSliderValue}} - -



- - - Value: {{sliders.rangeSliderValue}} +

-



+

+ + + + + +

+ + Range slider
+ + + Model: {{model.second | json}}
+ Value: {{value.second | json}}
- - Value: {{sliders.rangeSliderValue2}} +

-



+

+ + + + + + + + +

+ + Slider with configurable tooltip
+ + + Model: {{model.third}}
- - Value: {{sliders.thirdSliderValue}} +

-



+ Slider using event expressions + + + Model: {{model.fourth}}
+ Status: {{status}}
- - Value: {{sliders.fourthSliderValue}} - Status: {{status}} +

- - Value: {{sliders.fourthSliderValue}} - Status: {{status}} + Slider using event callbacks + + + Model: {{model.fifth}}
+ Event type: {{delegateEvent.type}}
-



+

- - Value: {{sliders.fifthSliderValue}}
- Event type: {{delegateEvent.type}} + Slider using mixed expressions and callbacks + + + Model: {{model.sixth}}
+ Status: {{status2}}
+ Event type: {{delegateEvent.type}}
-



+

Updates model on slide event by default - - Value: {{sliders.sixthSliderValue}} + + Model: {{model.seventh}}


Updates model only on slideStop event - - Value: {{sliders.seventhSliderValue}} + + Model: {{model.eighth}}


Updates model on slideStart and slideStop - - Value: {{sliders.eighthSliderValue}} + + Model: {{model.ninth}}


Updates model on all events - - Value: {{sliders.ninthSliderValue}} + + Model: {{model.tenth}}
diff --git a/test.js b/test.js index 7ef1325..8770ead 100644 --- a/test.js +++ b/test.js @@ -1,42 +1,65 @@ angular.module( 'angular-bootstrap-slider-test', ['ui.bootstrap-slider'] ) .controller( 'TestCtrl', ['$scope', '$log', function ( $scope, $log ) { - $scope.sliders = {}; - $scope.sliders.sliderValue = 0; - $scope.sliders.secondSliderValue = 0; - $scope.sliders.thirdSliderValue = 0; - $scope.sliders.fourthSliderValue = 0; - $scope.sliders.fithSliderValue = 0; - $scope.sliders.sixthSliderValue = 0; - $scope.sliders.seventhSliderValue = 0; - $scope.sliders.eighthSliderValue = 0; - $scope.sliders.ninthSliderValue = 0; - - $scope.range = true; - $scope.value = [55, 70]; - $scope.testOptions = { min: 5, - max: 103, - step: 2.2, - value: 7, - rangeValue: [2, 20] + max: 100, + step: 5, + precision: 2, + orientation: 'horizontal', // vertical + handle: 'round', //'square', 'triangle' or 'custom' + tooltip: 'show', //'hide','always' + tooltipseparator: ':', + tooltipsplit: false, + enabled: true, + naturalarrowkeys: false, + range: false, + ngDisabled: false, + reversed: false }; - $scope.sliders.rangeSliderValue = [10, 50]; - $scope.sliders.rangeSliderValue2 = [10, 50]; + $scope.range = true; - $scope.$watch( 'sliders.rangeSliderValue2', function ( value ) { - $log.log( 'sliders value has changed: ' + value ); - } ); + $scope.model = { + first: 0, + second: [], + third: 0, + fourth: 0, + fifth: 0, + sixth: 0, + seventh: 0, + eighth: 0, + ninth: 0, + tenth: 0 + }; + + $scope.value = { + first: $scope.testOptions.min + $scope.testOptions.step, + second: [$scope.testOptions.min + $scope.testOptions.step, $scope.testOptions.max - $scope.testOptions.step], + third: 0, + fourth: 0, + fifth: 0, + sixth: 0, + seventh: 0, + eighth: 0, + ninth: 0, + tenth: 0 + }; - $scope.myFormater = function ( value ) { - return value + "%"; + $scope.prefix = 'Current value: '; + $scope.suffix = '%'; + $scope.formaterFn = function(value) { + return $scope.prefix + value + $scope.suffix; }; $scope.delegateEvent = null; - $scope.slideDelegate = function ( value, $event ) { - $log.log( 'slide value: ' + value ); - $scope.delegateEvent = $event; + $scope.slideDelegate = function ( value, event ) { + if( angular.isObject(event) ) { + $log.log('Slide delegate value on ' + event.type + ': ' + value); + } + else { + $log.log('Slide delegate value: ' + event); + } + $scope.delegateEvent = event; }; }]); \ No newline at end of file From eb0c93b05d8bd3793597a821f367d76811ec13d3 Mon Sep 17 00:00:00 2001 From: Kouhei Sutou Date: Mon, 5 Jan 2015 10:38:33 +0900 Subject: [PATCH 030/126] Follow bootstrap-slider 4.0 change `$.fn.slider.Constructor` was removed. --- slider.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/slider.js b/slider.js index e9e440b..da22676 100644 --- a/slider.js +++ b/slider.js @@ -29,11 +29,11 @@ angular.module('ui.bootstrap-slider', []) }); } - $.fn.slider.Constructor.prototype.disable = function () { + $.fn.slider.constructor.prototype.disable = function () { this.picker.off(); }; - $.fn.slider.Constructor.prototype.enable = function () { + $.fn.slider.constructor.prototype.enable = function () { this.picker.on(); }; From 01fab2e856c12edb8b677cb61db4ddc6156efbb5 Mon Sep 17 00:00:00 2001 From: Kouhei Sutou Date: Mon, 5 Jan 2015 10:40:21 +0900 Subject: [PATCH 031/126] Follow AngularJS 1.3 change We don't need to handle `ngChange` by ourselves. --- slider.js | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/slider.js b/slider.js index da22676..033cd98 100644 --- a/slider.js +++ b/slider.js @@ -22,13 +22,6 @@ angular.module('ui.bootstrap-slider', []) initSlider(); function initSlider() { - - if (attrs.ngChange) { - ngModelCtrl.$viewChangeListeners.push(function () { - $scope.$apply(attrs.ngChange); - }); - } - $.fn.slider.constructor.prototype.disable = function () { this.picker.off(); }; @@ -37,12 +30,6 @@ angular.module('ui.bootstrap-slider', []) this.picker.on(); }; - if (attrs.ngChange) { - ngModelCtrl.$viewChangeListeners.push(function () { - $scope.$apply(attrs.ngChange); - }); - } - var options = {}; if ($scope.sliderid) options.id = $scope.sliderid; if ($scope.min) options.min = parseFloat($scope.min); From 7450bffc17f7d1c1f71f5b49cb92d66855a86bab Mon Sep 17 00:00:00 2001 From: Robert Michalski Date: Thu, 8 Jan 2015 23:36:36 +0100 Subject: [PATCH 032/126] Added an extra check to set value to the defauilt when range is true. Cleaned up some duplicate code for setting options.value. --- slider.js | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/slider.js b/slider.js index 6b687df..d615eb6 100644 --- a/slider.js +++ b/slider.js @@ -58,18 +58,6 @@ angular.module('ui.bootstrap-slider', []) setBooleanOption('naturalarrowkeys', attrs.naturalarrowkeys, false); setBooleanOption('reversed', attrs.reversed, false); - if ($scope.value) { - if (angular.isNumber($scope.value) || angular.isArray($scope.value)) { - options.value = $scope.value; - } - else if (angular.isString($scope.value)) { - options.value = getArrayOrValue($scope.value); - if(!angular.isArray(options.value)) { - options.value = parseFloat($scope.value); - } - } - } - setBooleanOption('range', $scope.range, false); if( options.range ) { if( angular.isArray($scope.value) ) { @@ -79,6 +67,8 @@ angular.module('ui.bootstrap-slider', []) options.value = getArrayOrValue($scope.value); if(!angular.isArray(options.value)) { var value = parseFloat($scope.value); + if( isNaN(value) ) value = 5; + if( value < $scope.min ) { value = $scope.min; options.value = [value, options.max]; @@ -87,6 +77,9 @@ angular.module('ui.bootstrap-slider', []) value = $scope.max; options.value = [options.min, value]; } + else { + options.value = [options.min, options.max]; + } } } else { From 6d30b8fc24a9f0f8425d7dc2ff8217557b478f7d Mon Sep 17 00:00:00 2001 From: Evan Villemez Date: Thu, 12 Feb 2015 14:53:14 -0500 Subject: [PATCH 033/126] fixed support in angular 1.3 --- slider.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/slider.js b/slider.js index d615eb6..e8b25cf 100644 --- a/slider.js +++ b/slider.js @@ -93,7 +93,8 @@ angular.module('ui.bootstrap-slider', []) if ($scope.formater) options.formater = $scope.$eval($scope.formater); - var slider = element.find( ".slider-input" ).eq( 0 ); + var slider = $(element).find( ".slider-input" ).eq( 0 ); + // check if slider jQuery plugin exists if( $.fn.slider ) { // adding methods to jQuery slider plugin prototype From 59088cb55bfb52f06b6c86d223cb237e3b6c604a Mon Sep 17 00:00:00 2001 From: "Kyle J. Kemp" Date: Fri, 27 Feb 2015 07:54:27 -0600 Subject: [PATCH 034/126] Update bower.json --- bower.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bower.json b/bower.json index 0cd5f65..6b8fb6e 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "angular-bootstrap-slider", - "version": "0.0.6", + "version": "0.1.1", "authors": [ "Kyle Kemp " ], From ff743c5124f574ee5505707612bf18e82a6de6d6 Mon Sep 17 00:00:00 2001 From: Sylvain UTARD Date: Sat, 7 Mar 2015 00:18:00 +0100 Subject: [PATCH 035/126] Missing change event handler --- slider.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/slider.js b/slider.js index e8b25cf..c9c8172 100644 --- a/slider.js +++ b/slider.js @@ -128,6 +128,12 @@ angular.module('ui.bootstrap-slider', []) } ); } ); } ); + slider.on( 'change', function ( ev ) { + ngModelCtrl.$setViewValue( ev.value.newValue ); + $timeout( function () { + $scope.$apply(); + } ); + } ); // Event listeners var sliderEvents = { From d253c602c317d69a605eb21d2cb1a26a0ccc08de Mon Sep 17 00:00:00 2001 From: Paul Barton Date: Fri, 17 Apr 2015 16:22:35 +0100 Subject: [PATCH 036/126] Updating the plugin to use version 4.8 of bootstrap slider Updating the tests to use version 4.8 of the bootstrap slider. Also fixing bug by renaming "$.fn.slider.Constructor" to "$.fn.slider.constructor" --- .gitignore | 6 +- bower.json | 2 +- slider.js | 8 +- test.html | 354 +++++++++++++++++++++++++++-------------------------- test.js | 120 +++++++++--------- 5 files changed, 249 insertions(+), 241 deletions(-) diff --git a/.gitignore b/.gitignore index 57d6133..89ad3ae 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,7 @@ # bower # ######### -bower_components \ No newline at end of file +bower_components + +# jetbrains # +############# +.idea \ No newline at end of file diff --git a/bower.json b/bower.json index 6b8fb6e..19b9804 100644 --- a/bower.json +++ b/bower.json @@ -22,7 +22,7 @@ "tests" ], "dependencies": { - "seiyria-bootstrap-slider": "~3.1.0", + "seiyria-bootstrap-slider": "~v4.8", "angular": "~1.2.16" } } diff --git a/slider.js b/slider.js index c9c8172..41aab7d 100644 --- a/slider.js +++ b/slider.js @@ -13,7 +13,7 @@ angular.module('ui.bootstrap-slider', []) ngModel: '=', range:'=', sliderid: '=', - formater: '&', + formatter: '&', onStartSlide: '&', onStopSlide: '&', onSlide: '&' @@ -91,17 +91,17 @@ angular.module('ui.bootstrap-slider', []) setFloatOption('value', $scope.value, 5); } - if ($scope.formater) options.formater = $scope.$eval($scope.formater); + if ($scope.formatter) options.formatter = $scope.$eval($scope.formatter); var slider = $(element).find( ".slider-input" ).eq( 0 ); // check if slider jQuery plugin exists if( $.fn.slider ) { // adding methods to jQuery slider plugin prototype - $.fn.slider.Constructor.prototype.disable = function () { + $.fn.slider.constructor.prototype.disable = function () { this.picker.off(); }; - $.fn.slider.Constructor.prototype.enable = function () { + $.fn.slider.constructor.prototype.enable = function () { this.picker.on(); }; diff --git a/test.html b/test.html index 7323a18..816ca0d 100644 --- a/test.html +++ b/test.html @@ -1,208 +1,210 @@ - Angular Bootstrap Slider test - - + Angular Bootstrap Slider test + +
-

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

- - Slider using tags
- - If you can see this then slider did not get compiled by Angular. - Check that all necessary files are included, did you run "bower install"? - - -

- -

- - - - - -

- - Range slider
+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+ + Slider using tags
+ + If you can see this then slider did not get compiled by Angular. + Check that all necessary files are included, did you run "bower install"? + + +

+ +

+ + + + + +

+ + Range slider
+ slider-id="rangeSlider" + ng-model="model.second" + value="value.second" + min="testOptions.min" + max="testOptions.max" + range="range" + tooltipseparator="{{ testOptions.tooltipseparator }}" + tooltipsplit="{{ testOptions.tooltipsplit }}" + > - Model: {{model.second | json}}
- Value: {{value.second | json}}
- -

- -

- - - - - - - - -

- - Slider with configurable tooltip
- - - Model: {{model.third}}
- -

- - Slider using event expressions - - - Model: {{model.fourth}}
- Status: {{status}}
- -

- - Slider using event callbacks + Model: {{model.second | json}}
+ Value: {{value.second | json}}
+ +

+ +

+ + + + + + + + +

+ + Slider with configurable tooltip
+ + + Model: {{model.third}}
+ +

+ + Slider using event expressions + + + Model: {{model.fourth}}
+ Status: {{status}}
+ +

+ + Slider using event callbacks + ng-model="model.fifth" + on-start-slide="slideDelegate(value, $event)" + on-slide="slideDelegate(value, $event)" + on-stop-slide="slideDelegate(value, $event)" + > - Model: {{model.fifth}}
- Event type: {{delegateEvent.type}}
+ Model: {{model.fifth}}
+ Event type: {{delegateEvent.type}}
-

+

- Slider using mixed expressions and callbacks + Slider using mixed expressions and callbacks + ng-model="model.sixth" + on-start-slide="status2='started'" + on-slide="slideDelegate(value)" + on-stop-slide="status2=$event.type; slideDelegate(value, $event)" + > - Model: {{model.sixth}}
- Status: {{status2}}
- Event type: {{delegateEvent.type}}
+ Model: {{model.sixth}}
+ Status: {{status2}}
+ Event type: {{delegateEvent.type}}
-

+

- Updates model on slide event by default - - Model: {{model.seventh}}
+ Updates model on slide event by default + + Model: {{model.seventh}}
-

+

- Updates model only on slideStop event - - Model: {{model.eighth}}
+ Updates model only on slideStop event + + Model: {{model.eighth}}
-

+

- Updates model on slideStart and slideStop - - Model: {{model.ninth}}
+ Updates model on slideStart and slideStop + + Model: {{model.ninth}}
-

+

- Updates model on all events - - Model: {{model.tenth}} + Updates model on all events + + Model: {{model.tenth}}
- + diff --git a/test.js b/test.js index 8770ead..6a954d3 100644 --- a/test.js +++ b/test.js @@ -1,65 +1,67 @@ -angular.module( 'angular-bootstrap-slider-test', ['ui.bootstrap-slider'] ) - .controller( 'TestCtrl', ['$scope', '$log', function ( $scope, $log ) { +angular.module('angular-bootstrap-slider-test', ['ui.bootstrap-slider']) + .controller('TestCtrl', ['$scope', '$log', function ($scope, $log) { - $scope.testOptions = { - min: 5, - max: 100, - step: 5, - precision: 2, - orientation: 'horizontal', // vertical - handle: 'round', //'square', 'triangle' or 'custom' - tooltip: 'show', //'hide','always' - tooltipseparator: ':', - tooltipsplit: false, - enabled: true, - naturalarrowkeys: false, - range: false, - ngDisabled: false, - reversed: false - }; + $scope.testOptions = { + min: 5, + max: 100, + step: 5, + precision: 2, + orientation: 'horizontal', // vertical + handle: 'round', //'square', 'triangle' or 'custom' + tooltip: 'show', //'hide','always' + tooltipseparator: ':', + tooltipsplit: false, + enabled: true, + naturalarrowkeys: false, + range: false, + ngDisabled: false, + reversed: false + }; - $scope.range = true; + $scope.range = true; - $scope.model = { - first: 0, - second: [], - third: 0, - fourth: 0, - fifth: 0, - sixth: 0, - seventh: 0, - eighth: 0, - ninth: 0, - tenth: 0 - }; + $scope.model = { + first: 0, + second: [], + third: 0, + fourth: 0, + fifth: 0, + sixth: 0, + seventh: 0, + eighth: 0, + ninth: 0, + tenth: 0 + }; - $scope.value = { - first: $scope.testOptions.min + $scope.testOptions.step, - second: [$scope.testOptions.min + $scope.testOptions.step, $scope.testOptions.max - $scope.testOptions.step], - third: 0, - fourth: 0, - fifth: 0, - sixth: 0, - seventh: 0, - eighth: 0, - ninth: 0, - tenth: 0 - }; + $scope.value = { + first: $scope.testOptions.min + $scope.testOptions.step, + second: [$scope.testOptions.min + $scope.testOptions.step, $scope.testOptions.max - $scope.testOptions.step], + third: 0, + fourth: 0, + fifth: 0, + sixth: 0, + seventh: 0, + eighth: 0, + ninth: 0, + tenth: 0 + }; - $scope.prefix = 'Current value: '; - $scope.suffix = '%'; - $scope.formaterFn = function(value) { - return $scope.prefix + value + $scope.suffix; - }; + $scope.prefix = 'Current value: '; + $scope.suffix = '%'; - $scope.delegateEvent = null; - $scope.slideDelegate = function ( value, event ) { - if( angular.isObject(event) ) { - $log.log('Slide delegate value on ' + event.type + ': ' + value); - } - else { - $log.log('Slide delegate value: ' + event); - } - $scope.delegateEvent = event; - }; - }]); \ No newline at end of file + $scope.formatterFn = function (value) { + return $scope.prefix + value + $scope.suffix; + }; + + $scope.delegateEvent = null; + $scope.slideDelegate = function (value, event) { + if (angular.isObject(event)) { + $log.log('Slide delegate value on ' + event.type + ': ' + value); + } + else { + $log.log('Slide delegate value: ' + event); + } + $scope.delegateEvent = event; + }; + }] +); \ No newline at end of file From 98948877d676b42254401c9eb5f9e76dbb7045fa Mon Sep 17 00:00:00 2001 From: Paul Barton Date: Fri, 17 Apr 2015 16:30:00 +0100 Subject: [PATCH 037/126] If the value is undefined then use the model passed in as the value --- slider.js | 106 +++++++++++++++++++++++++++++------------------------- 1 file changed, 57 insertions(+), 49 deletions(-) diff --git a/slider.js b/slider.js index 41aab7d..01d440c 100644 --- a/slider.js +++ b/slider.js @@ -11,7 +11,7 @@ angular.module('ui.bootstrap-slider', []) step: "=", value: "=", ngModel: '=', - range:'=', + range: '=', sliderid: '=', formatter: '&', onStartSlide: '&', @@ -29,12 +29,15 @@ angular.module('ui.bootstrap-slider', []) function setOption(key, value, defaultValue) { options[key] = value || defaultValue; } + function setFloatOption(key, value, defaultValue) { options[key] = value ? parseFloat(value) : defaultValue; } + function setBooleanOption(key, value, defaultValue) { options[key] = value ? value + '' === 'true' : defaultValue; } + function getArrayOrValue(value) { return (angular.isString(value) && value.indexOf("[") === 0) ? angular.fromJson(value) : value; } @@ -58,22 +61,27 @@ angular.module('ui.bootstrap-slider', []) setBooleanOption('naturalarrowkeys', attrs.naturalarrowkeys, false); setBooleanOption('reversed', attrs.reversed, false); + // if the value is undefined then use the model + if ($scope.value === 'undefined') { + $scope.value = $scope.ngModel; + } + setBooleanOption('range', $scope.range, false); - if( options.range ) { - if( angular.isArray($scope.value) ) { + if (options.range) { + if (angular.isArray($scope.value)) { options.value = $scope.value; } else if (angular.isString($scope.value)) { options.value = getArrayOrValue($scope.value); - if(!angular.isArray(options.value)) { + if (!angular.isArray(options.value)) { var value = parseFloat($scope.value); - if( isNaN(value) ) value = 5; + if (isNaN(value)) value = 5; - if( value < $scope.min ) { + if (value < $scope.min) { value = $scope.min; options.value = [value, options.max]; } - else if( value > $scope.max ) { + else if (value > $scope.max) { value = $scope.max; options.value = [options.min, value]; } @@ -93,10 +101,10 @@ angular.module('ui.bootstrap-slider', []) if ($scope.formatter) options.formatter = $scope.$eval($scope.formatter); - var slider = $(element).find( ".slider-input" ).eq( 0 ); - + var slider = $(element).find(".slider-input").eq(0); + // check if slider jQuery plugin exists - if( $.fn.slider ) { + if ($.fn.slider) { // adding methods to jQuery slider plugin prototype $.fn.slider.constructor.prototype.disable = function () { this.picker.off(); @@ -106,13 +114,13 @@ angular.module('ui.bootstrap-slider', []) }; // destroy previous slider to reset all options - slider.slider( options ); - slider.slider( 'destroy' ); - slider.slider( options ); + slider.slider(options); + slider.slider('destroy'); + slider.slider(options); // everything that needs slider element - var updateEvent = getArrayOrValue( attrs.updateevent ); - if ( angular.isString( updateEvent ) ) { + var updateEvent = getArrayOrValue(attrs.updateevent); + if (angular.isString(updateEvent)) { // if only single event name in string updateEvent = [updateEvent]; } @@ -120,20 +128,20 @@ angular.module('ui.bootstrap-slider', []) // default to slide event updateEvent = ['slide']; } - angular.forEach( updateEvent, function ( sliderEvent ) { - slider.on( sliderEvent, function ( ev ) { - ngModelCtrl.$setViewValue( ev.value ); - $timeout( function () { + angular.forEach(updateEvent, function (sliderEvent) { + slider.on(sliderEvent, function (ev) { + ngModelCtrl.$setViewValue(ev.value); + $timeout(function () { $scope.$apply(); - } ); - } ); - } ); - slider.on( 'change', function ( ev ) { - ngModelCtrl.$setViewValue( ev.value.newValue ); - $timeout( function () { + }); + }); + }); + slider.on('change', function (ev) { + ngModelCtrl.$setViewValue(ev.value.newValue); + $timeout(function () { $scope.$apply(); - } ); - } ); + }); + }); // Event listeners var sliderEvents = { @@ -141,46 +149,46 @@ angular.module('ui.bootstrap-slider', []) slide: 'onSlide', slideStop: 'onStopSlide' }; - angular.forEach( sliderEvents, function ( sliderEventAttr, sliderEvent ) { - slider.on( sliderEvent, function ( ev ) { + angular.forEach(sliderEvents, function (sliderEventAttr, sliderEvent) { + slider.on(sliderEvent, function (ev) { - if ( $scope[sliderEventAttr] ) { - var invoker = $parse( attrs[sliderEventAttr] ); - invoker( $scope.$parent, {$event: ev, value: ev.value} ); + if ($scope[sliderEventAttr]) { + var invoker = $parse(attrs[sliderEventAttr]); + invoker($scope.$parent, {$event: ev, value: ev.value}); - $timeout( function () { + $timeout(function () { $scope.$apply(); - } ); + }); } - } ); - } ); + }); + }); // deregister ngDisabled watcher to prevent memory leaks - if ( angular.isFunction( ngDisabledDeregisterFn ) ) { + if (angular.isFunction(ngDisabledDeregisterFn)) { ngDisabledDeregisterFn(); ngDisabledDeregisterFn = null; } - if ( angular.isDefined( attrs.ngDisabled ) ) { - ngDisabledDeregisterFn = $scope.$watch( attrs.ngDisabled, function ( value ) { - if ( value ) { - slider.slider( 'disable' ); + if (angular.isDefined(attrs.ngDisabled)) { + ngDisabledDeregisterFn = $scope.$watch(attrs.ngDisabled, function (value) { + if (value) { + slider.slider('disable'); } else { - slider.slider( 'enable' ); + slider.slider('enable'); } - } ); + }); } // deregister ngModel watcher to prevent memory leaks - if ( angular.isFunction( ngModelDeregisterFn ) ) ngModelDeregisterFn(); - ngModelDeregisterFn = $scope.$watch( 'ngModel', function ( value ) { - slider.slider( 'setValue', value ); - } ); + if (angular.isFunction(ngModelDeregisterFn)) ngModelDeregisterFn(); + ngModelDeregisterFn = $scope.$watch('ngModel', function (value) { + slider.slider('setValue', value); + }); } } var watchers = ['min', 'max', 'step', 'range']; - angular.forEach(watchers, function(prop) { - $scope.$watch(prop, function(){ + angular.forEach(watchers, function (prop) { + $scope.$watch(prop, function () { initSlider(); }); }); From f56f1eb80aaee450616de310f39f57dbec840d3b Mon Sep 17 00:00:00 2001 From: Paul Barton Date: Fri, 17 Apr 2015 16:39:44 +0100 Subject: [PATCH 038/126] Removing the fallback for the value as its not working for now --- slider.js | 5 ----- test.html | 3 +-- 2 files changed, 1 insertion(+), 7 deletions(-) diff --git a/slider.js b/slider.js index 01d440c..a936f9e 100644 --- a/slider.js +++ b/slider.js @@ -61,11 +61,6 @@ angular.module('ui.bootstrap-slider', []) setBooleanOption('naturalarrowkeys', attrs.naturalarrowkeys, false); setBooleanOption('reversed', attrs.reversed, false); - // if the value is undefined then use the model - if ($scope.value === 'undefined') { - $scope.value = $scope.ngModel; - } - setBooleanOption('range', $scope.range, false); if (options.range) { if (angular.isArray($scope.value)) { diff --git a/test.html b/test.html index 816ca0d..484a795 100644 --- a/test.html +++ b/test.html @@ -102,8 +102,7 @@ max="testOptions.max" range="range" tooltipseparator="{{ testOptions.tooltipseparator }}" - tooltipsplit="{{ testOptions.tooltipsplit }}" - > + tooltipsplit="{{ testOptions.tooltipsplit }}"> Model: {{model.second | json}}
Value: {{value.second | json}}
From cd70378a2e74c5b068379846796a4500b98aa0c9 Mon Sep 17 00:00:00 2001 From: Kouhei Sutou Date: Mon, 5 Jan 2015 11:07:36 +0900 Subject: [PATCH 039/126] Update dependencies to latest versions * AngualrJS: ~1.3.15 --- bower.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bower.json b/bower.json index 19b9804..6fb8cd8 100644 --- a/bower.json +++ b/bower.json @@ -23,6 +23,6 @@ ], "dependencies": { "seiyria-bootstrap-slider": "~v4.8", - "angular": "~1.2.16" + "angular": "~1.3.15" } } From 488f66f069272f5e0ed5d9eaa3b416d304ce4463 Mon Sep 17 00:00:00 2001 From: Kouhei Sutou Date: Mon, 5 Jan 2015 11:08:30 +0900 Subject: [PATCH 040/126] Bump version --- bower.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bower.json b/bower.json index 6fb8cd8..d32b419 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "angular-bootstrap-slider", - "version": "0.1.1", + "version": "0.1.2", "authors": [ "Kyle Kemp " ], From 10974f02c162836a62e80f455667a83c1f415647 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herv=C3=A9=20Millet?= Date: Mon, 18 May 2015 00:05:57 +0200 Subject: [PATCH 041/126] Add an alternative for tooltip conflict --- README.md | 14 ++++++++++++++ slider.js | 2 +- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index a26cc22..d6d52aa 100644 --- a/README.md +++ b/README.md @@ -16,3 +16,17 @@ Sample Usage ``` + +Troubleshooting +============ +#### Tooltips +If you Want to hide the tooltip on your slider (or define a value for the bootstrap-slider `data-slider-tooltip` options, such as "show", "hide" or "always"), you should use the `tooltip` attribute, like this : +```html + + +``` +But, if the `tooltip` attribute is in conflict with another angular directive, you can use the alternative `slider-tooltip` attribute : +```html + + +``` \ No newline at end of file diff --git a/slider.js b/slider.js index a936f9e..5a1887b 100644 --- a/slider.js +++ b/slider.js @@ -46,7 +46,7 @@ angular.module('ui.bootstrap-slider', []) setOption('orientation', attrs.orientation, 'horizontal'); setOption('selection', attrs.selection, 'before'); setOption('handle', attrs.handle, 'round'); - setOption('tooltip', attrs.tooltip, 'show'); + setOption('tooltip', attrs.sliderTooltip || attrs.tooltip, 'show'); setOption('tooltipseparator', attrs.tooltipseparator, ':'); setFloatOption('min', $scope.min, 0); From f23eecc40d1a516364e165eb1b88f40e4e054f05 Mon Sep 17 00:00:00 2001 From: ASR Date: Mon, 18 May 2015 16:01:06 +0200 Subject: [PATCH 042/126] fixed ngDisabled data binding --- slider.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/slider.js b/slider.js index 5a1887b..f2d7b2c 100644 --- a/slider.js +++ b/slider.js @@ -164,7 +164,7 @@ angular.module('ui.bootstrap-slider', []) ngDisabledDeregisterFn = null; } if (angular.isDefined(attrs.ngDisabled)) { - ngDisabledDeregisterFn = $scope.$watch(attrs.ngDisabled, function (value) { + ngDisabledDeregisterFn = $scope.$parent.$watch(attrs.ngDisabled, function (value) { if (value) { slider.slider('disable'); } From 5476b0c002defc0810af626994827b885703bb4f Mon Sep 17 00:00:00 2001 From: David Hollifield Date: Wed, 20 May 2015 18:00:57 -0400 Subject: [PATCH 043/126] Slider events not being called Slider events defined as attributes were not being called. Updated invoker function with proper signature. --- slider.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/slider.js b/slider.js index f2d7b2c..0012a2e 100644 --- a/slider.js +++ b/slider.js @@ -140,16 +140,16 @@ angular.module('ui.bootstrap-slider', []) // Event listeners var sliderEvents = { - slideStart: 'onStartSlide', - slide: 'onSlide', - slideStop: 'onStopSlide' + slideStart: 'onstartslide', + slide: 'onslide', + slideStop: 'onstopslide' }; angular.forEach(sliderEvents, function (sliderEventAttr, sliderEvent) { slider.on(sliderEvent, function (ev) { - if ($scope[sliderEventAttr]) { + if (attrs[sliderEventAttr]) { var invoker = $parse(attrs[sliderEventAttr]); - invoker($scope.$parent, {$event: ev, value: ev.value}); + invoker($scope.$parent)(ev, ev.value); $timeout(function () { $scope.$apply(); From dccf926c5b7b411b57d5ad9e237377c6871c6e7d Mon Sep 17 00:00:00 2001 From: Steve Rasch Date: Tue, 2 Jun 2015 14:19:27 +0200 Subject: [PATCH 044/126] register the watch for array-elements. See https://docs.angularjs.org/api/ng/type/$rootScope.Scope#$watch --- slider.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/slider.js b/slider.js index 0012a2e..e2e59df 100644 --- a/slider.js +++ b/slider.js @@ -177,7 +177,7 @@ angular.module('ui.bootstrap-slider', []) if (angular.isFunction(ngModelDeregisterFn)) ngModelDeregisterFn(); ngModelDeregisterFn = $scope.$watch('ngModel', function (value) { slider.slider('setValue', value); - }); + }, true); } } From ebd6e5e060f0e7883f8af29484ba11853ae0e391 Mon Sep 17 00:00:00 2001 From: Georgi Hristozov Date: Tue, 2 Jun 2015 15:37:14 +0300 Subject: [PATCH 045/126] Allow use of angular 1.4.x. --- bower.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bower.json b/bower.json index d32b419..b3c3040 100644 --- a/bower.json +++ b/bower.json @@ -23,6 +23,6 @@ ], "dependencies": { "seiyria-bootstrap-slider": "~v4.8", - "angular": "~1.3.15" + "angular": "~1.3.15||~1.4.0" } } From 7e0342fa739d2ec99676e9e3bbfd2b678eb044b1 Mon Sep 17 00:00:00 2001 From: Steve Rasch Date: Wed, 3 Jun 2015 14:46:39 +0200 Subject: [PATCH 046/126] bind ngDisabled to scope; need this so we can watch the value. --- slider.js | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/slider.js b/slider.js index e2e59df..8518044 100644 --- a/slider.js +++ b/slider.js @@ -11,6 +11,7 @@ angular.module('ui.bootstrap-slider', []) step: "=", value: "=", ngModel: '=', + ngDisabled: '=', range: '=', sliderid: '=', formatter: '&', @@ -163,16 +164,16 @@ angular.module('ui.bootstrap-slider', []) ngDisabledDeregisterFn(); ngDisabledDeregisterFn = null; } - if (angular.isDefined(attrs.ngDisabled)) { - ngDisabledDeregisterFn = $scope.$parent.$watch(attrs.ngDisabled, function (value) { - if (value) { - slider.slider('disable'); - } - else { - slider.slider('enable'); - } - }); - } + + ngDisabledDeregisterFn = $scope.$parent.$watch('ngDisabled', function (value) { + if (value) { + slider.slider('disable'); + } + else { + slider.slider('enable'); + } + }); + // deregister ngModel watcher to prevent memory leaks if (angular.isFunction(ngModelDeregisterFn)) ngModelDeregisterFn(); ngModelDeregisterFn = $scope.$watch('ngModel', function (value) { From 457097b5637c84b71cc9ef492f1e6005707892fb Mon Sep 17 00:00:00 2001 From: Boris Penkovskiy Date: Fri, 5 Jun 2015 11:49:10 +0300 Subject: [PATCH 047/126] Bump version --- bower.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bower.json b/bower.json index b3c3040..2e7bc56 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "angular-bootstrap-slider", - "version": "0.1.2", + "version": "0.1.3", "authors": [ "Kyle Kemp " ], From a3c22e6e68c4dbe7ec7658aac5256366f3f55f73 Mon Sep 17 00:00:00 2001 From: Mark Heppner Date: Wed, 10 Jun 2015 23:14:17 -0400 Subject: [PATCH 048/126] Move ngDisabled watcher to correct scope --- slider.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/slider.js b/slider.js index 8518044..b737cf5 100644 --- a/slider.js +++ b/slider.js @@ -165,7 +165,7 @@ angular.module('ui.bootstrap-slider', []) ngDisabledDeregisterFn = null; } - ngDisabledDeregisterFn = $scope.$parent.$watch('ngDisabled', function (value) { + ngDisabledDeregisterFn = $scope.$watch('ngDisabled', function (value) { if (value) { slider.slider('disable'); } @@ -175,7 +175,10 @@ angular.module('ui.bootstrap-slider', []) }); // deregister ngModel watcher to prevent memory leaks - if (angular.isFunction(ngModelDeregisterFn)) ngModelDeregisterFn(); + if (angular.isFunction(ngModelDeregisterFn)) { + ngModelDeregisterFn(); + ngModelDeregisterFn = null; + } ngModelDeregisterFn = $scope.$watch('ngModel', function (value) { slider.slider('setValue', value); }, true); From 47663489953530c3376458fcc2afa9b877a3947a Mon Sep 17 00:00:00 2001 From: David Hollifield Date: Thu, 11 Jun 2015 10:20:57 -0400 Subject: [PATCH 049/126] Changed event attribute names Use on-slide, on-start-slide, on-stop-slide instead of onslide, onstartslide, and onstopslide --- slider.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/slider.js b/slider.js index 0012a2e..a8eb1de 100644 --- a/slider.js +++ b/slider.js @@ -140,9 +140,9 @@ angular.module('ui.bootstrap-slider', []) // Event listeners var sliderEvents = { - slideStart: 'onstartslide', - slide: 'onslide', - slideStop: 'onstopslide' + slideStart: 'onStartSlide', + slide: 'onSlide', + slideStop: 'onStopSlide' }; angular.forEach(sliderEvents, function (sliderEventAttr, sliderEvent) { slider.on(sliderEvent, function (ev) { From ef353f662260497499faf75c1ca96f75af2be60b Mon Sep 17 00:00:00 2001 From: Marco Santarelli Date: Tue, 23 Jun 2015 15:09:47 +0200 Subject: [PATCH 050/126] Update callback style --- slider.js | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/slider.js b/slider.js index 96a2451..194fa03 100644 --- a/slider.js +++ b/slider.js @@ -19,7 +19,7 @@ angular.module('ui.bootstrap-slider', []) onStopSlide: '&', onSlide: '&' }, - link: function ($scope, element, attrs, ngModelCtrl, $compile) { + link: function ($scope, element, attrs, ngModelCtrl, $compile, $rootScope) { var ngModelDeregisterFn, ngDisabledDeregisterFn; initSlider(); @@ -146,15 +146,17 @@ angular.module('ui.bootstrap-slider', []) slideStop: 'onStopSlide' }; angular.forEach(sliderEvents, function (sliderEventAttr, sliderEvent) { + var fn = $parse(attrs[sliderEventAttr], /* interceptorFn */ null, /* expensiveChecks */ true); slider.on(sliderEvent, function (ev) { - if (attrs[sliderEventAttr]) { - var invoker = $parse(attrs[sliderEventAttr]); - invoker($scope.$parent)(ev, ev.value); - - $timeout(function () { - $scope.$apply(); - }); + var callback = function() { + fn(scope, {$event:ev}); + }; + if ($rootScope.$$phase) { + scope.$evalAsync(callback); + } else { + scope.$apply(callback); + } } }); }); @@ -194,4 +196,4 @@ angular.module('ui.bootstrap-slider', []) } }; }]) -; +; \ No newline at end of file From 3f0c417ece0f25ba98ab3c857cc289b9a9ef9a31 Mon Sep 17 00:00:00 2001 From: Marco Santarelli Date: Tue, 23 Jun 2015 15:11:42 +0200 Subject: [PATCH 051/126] added dep --- slider.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/slider.js b/slider.js index 194fa03..1eb73d4 100644 --- a/slider.js +++ b/slider.js @@ -1,5 +1,5 @@ angular.module('ui.bootstrap-slider', []) - .directive('slider', ['$parse', '$timeout', function ($parse, $timeout) { + .directive('slider', ['$parse', '$timeout', function ($parse, $timeout, $rootScope) { return { restrict: 'AE', replace: true, @@ -19,7 +19,7 @@ angular.module('ui.bootstrap-slider', []) onStopSlide: '&', onSlide: '&' }, - link: function ($scope, element, attrs, ngModelCtrl, $compile, $rootScope) { + link: function ($scope, element, attrs, ngModelCtrl, $compile) { var ngModelDeregisterFn, ngDisabledDeregisterFn; initSlider(); @@ -196,4 +196,4 @@ angular.module('ui.bootstrap-slider', []) } }; }]) -; \ No newline at end of file +; From 5d50b137af9058b1f769475d2c31dc3cf3d44841 Mon Sep 17 00:00:00 2001 From: Marco Santarelli Date: Tue, 23 Jun 2015 15:14:40 +0200 Subject: [PATCH 052/126] fix: stupid typos --- slider.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/slider.js b/slider.js index 1eb73d4..9cc58cc 100644 --- a/slider.js +++ b/slider.js @@ -1,5 +1,5 @@ angular.module('ui.bootstrap-slider', []) - .directive('slider', ['$parse', '$timeout', function ($parse, $timeout, $rootScope) { + .directive('slider', ['$parse', '$timeout', '$rootScope', function ($parse, $timeout, $rootScope) { return { restrict: 'AE', replace: true, From 71acbbcd4d04652793f87d1b7cce4c3aabe46360 Mon Sep 17 00:00:00 2001 From: Marco Santarelli Date: Tue, 23 Jun 2015 15:17:48 +0200 Subject: [PATCH 053/126] fix: more frakkin typos --- slider.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/slider.js b/slider.js index 9cc58cc..191e9a5 100644 --- a/slider.js +++ b/slider.js @@ -150,12 +150,12 @@ angular.module('ui.bootstrap-slider', []) slider.on(sliderEvent, function (ev) { if (attrs[sliderEventAttr]) { var callback = function() { - fn(scope, {$event:ev}); + fn($scope, {$event:ev}); }; if ($rootScope.$$phase) { - scope.$evalAsync(callback); + $scope.$evalAsync(callback); } else { - scope.$apply(callback); + $scope.$apply(callback); } } }); From 3d189c566875bb9f5e764cb911af347c5ac88f4e Mon Sep 17 00:00:00 2001 From: Marco Santarelli Date: Tue, 23 Jun 2015 16:23:12 +0200 Subject: [PATCH 054/126] Using scope functions for event listeners --- slider.js | 28 +++++++++++----------------- 1 file changed, 11 insertions(+), 17 deletions(-) diff --git a/slider.js b/slider.js index 191e9a5..c42e912 100644 --- a/slider.js +++ b/slider.js @@ -110,8 +110,9 @@ angular.module('ui.bootstrap-slider', []) }; // destroy previous slider to reset all options - slider.slider(options); - slider.slider('destroy'); + if(slider.data("slider")) + slider.slider('destroy'); + slider.slider(options); // everything that needs slider element @@ -146,16 +147,12 @@ angular.module('ui.bootstrap-slider', []) slideStop: 'onStopSlide' }; angular.forEach(sliderEvents, function (sliderEventAttr, sliderEvent) { - var fn = $parse(attrs[sliderEventAttr], /* interceptorFn */ null, /* expensiveChecks */ true); - slider.on(sliderEvent, function (ev) { - if (attrs[sliderEventAttr]) { - var callback = function() { - fn($scope, {$event:ev}); - }; + slider.on(sliderEvent, function () { + if ($scope[sliderEventAttr]) { if ($rootScope.$$phase) { - $scope.$evalAsync(callback); + $scope.$evalAsync($scope[sliderEventAttr]); } else { - $scope.$apply(callback); + $scope.$apply($scope[sliderEventAttr]); } } }); @@ -167,7 +164,7 @@ angular.module('ui.bootstrap-slider', []) ngDisabledDeregisterFn = null; } - ngDisabledDeregisterFn = $scope.$watch('ngDisabled', function (value) { + ngDisabledDeregisterFn = $scope.$parent.$watch('ngDisabled', function (value) { if (value) { slider.slider('disable'); } @@ -177,12 +174,9 @@ angular.module('ui.bootstrap-slider', []) }); // deregister ngModel watcher to prevent memory leaks - if (angular.isFunction(ngModelDeregisterFn)) { - ngModelDeregisterFn(); - ngModelDeregisterFn = null; - } + if (angular.isFunction(ngModelDeregisterFn)) ngModelDeregisterFn(); ngModelDeregisterFn = $scope.$watch('ngModel', function (value) { - slider.slider('setValue', value); + slider.slider('setValue', parseFloat(value)); }, true); } } @@ -196,4 +190,4 @@ angular.module('ui.bootstrap-slider', []) } }; }]) -; +; \ No newline at end of file From b23519d5ab6c11ceb64a865043a6021c171b84a4 Mon Sep 17 00:00:00 2001 From: Marco Santarelli Date: Tue, 23 Jun 2015 16:49:58 +0200 Subject: [PATCH 055/126] formatting --- slider.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/slider.js b/slider.js index c42e912..3f8f93d 100644 --- a/slider.js +++ b/slider.js @@ -164,7 +164,7 @@ angular.module('ui.bootstrap-slider', []) ngDisabledDeregisterFn = null; } - ngDisabledDeregisterFn = $scope.$parent.$watch('ngDisabled', function (value) { + ngDisabledDeregisterFn = $scope.$watch('ngDisabled', function (value) { if (value) { slider.slider('disable'); } From acc93b38674af1f7b3db7032117494d24475d940 Mon Sep 17 00:00:00 2001 From: Marco Santarelli Date: Tue, 23 Jun 2015 16:50:26 +0200 Subject: [PATCH 056/126] formatting --- slider.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/slider.js b/slider.js index 3f8f93d..ad709c5 100644 --- a/slider.js +++ b/slider.js @@ -190,4 +190,4 @@ angular.module('ui.bootstrap-slider', []) } }; }]) -; \ No newline at end of file +; From 73836174d486d2b652663a9a157ccde94e59db60 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 26 Jun 2015 14:32:59 +0200 Subject: [PATCH 057/126] prevents errors to be thrown when on using range slider --- slider.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/slider.js b/slider.js index ad709c5..2f8f791 100644 --- a/slider.js +++ b/slider.js @@ -176,7 +176,11 @@ angular.module('ui.bootstrap-slider', []) // deregister ngModel watcher to prevent memory leaks if (angular.isFunction(ngModelDeregisterFn)) ngModelDeregisterFn(); ngModelDeregisterFn = $scope.$watch('ngModel', function (value) { - slider.slider('setValue', parseFloat(value)); + if($scope.range){ + slider.slider('setValue', value); + }else{ + slider.slider('setValue', parseFloat(value)); + } }, true); } } From a1e2adce2ba7334d944292e4e0de2a915ceaad6a Mon Sep 17 00:00:00 2001 From: Federico Rodriguez Date: Fri, 26 Jun 2015 20:48:58 -0300 Subject: [PATCH 058/126] adds ticks and ticks labels support --- slider.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/slider.js b/slider.js index 2f8f791..ed74604 100644 --- a/slider.js +++ b/slider.js @@ -14,6 +14,8 @@ angular.module('ui.bootstrap-slider', []) ngDisabled: '=', range: '=', sliderid: '=', + ticks: '=', + ticksLabels: '=', formatter: '&', onStartSlide: '&', onStopSlide: '&', @@ -49,6 +51,8 @@ angular.module('ui.bootstrap-slider', []) setOption('handle', attrs.handle, 'round'); setOption('tooltip', attrs.sliderTooltip || attrs.tooltip, 'show'); setOption('tooltipseparator', attrs.tooltipseparator, ':'); + setOption('ticks', $scope.ticks); + setOption('ticks_labels', $scope.ticksLabels); setFloatOption('min', $scope.min, 0); setFloatOption('max', $scope.max, 10); @@ -177,7 +181,7 @@ angular.module('ui.bootstrap-slider', []) if (angular.isFunction(ngModelDeregisterFn)) ngModelDeregisterFn(); ngModelDeregisterFn = $scope.$watch('ngModel', function (value) { if($scope.range){ - slider.slider('setValue', value); + slider.slider('setValue', value); }else{ slider.slider('setValue', parseFloat(value)); } From 61ba3047ef938253bc5f9c64eac8e6afbdd9158f Mon Sep 17 00:00:00 2001 From: "Kyle J. Kemp" Date: Wed, 1 Jul 2015 07:33:04 -0500 Subject: [PATCH 059/126] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index d6d52aa..f075dc3 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ angular-bootstrap-slider ======================== -This plugin was mostly put together quickly with the intent of using something that worked. It has zero test coverage. It is, however, registered on bower as `angular-bootstrap-slider`. Just include `slider.js` and use the package `ui.bootstrap-slider`. +This plugin was mostly put together quickly with the intent of using something that worked. It has zero test coverage. It is, however, registered on bower as `angular-bootstrap-slider`. Just include `slider.js` and use the package `ui.bootstrap-slider`. You will also need to include bootstrap-sliders CSS and JS. Available Options ================= @@ -29,4 +29,4 @@ But, if the `tooltip` attribute is in conflict with another angular directive, y ```html -``` \ No newline at end of file +``` From 7f384d88eaa4bfc71d73447e22fa89fc8abd618f Mon Sep 17 00:00:00 2001 From: Christian Date: Thu, 2 Jul 2015 15:45:03 +0200 Subject: [PATCH 060/126] Added scale attribute support --- slider.js | 1 + 1 file changed, 1 insertion(+) diff --git a/slider.js b/slider.js index ed74604..aff37de 100644 --- a/slider.js +++ b/slider.js @@ -53,6 +53,7 @@ angular.module('ui.bootstrap-slider', []) setOption('tooltipseparator', attrs.tooltipseparator, ':'); setOption('ticks', $scope.ticks); setOption('ticks_labels', $scope.ticksLabels); + setOption('scale', attrs.scale, 'linear'); setFloatOption('min', $scope.min, 0); setFloatOption('max', $scope.max, 10); From 4ea5617294a95162237ef326aec5fbeda6798167 Mon Sep 17 00:00:00 2001 From: Christian Date: Thu, 2 Jul 2015 16:31:35 +0200 Subject: [PATCH 061/126] Added scale attribute support --- slider.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/slider.js b/slider.js index aff37de..4330db7 100644 --- a/slider.js +++ b/slider.js @@ -16,6 +16,7 @@ angular.module('ui.bootstrap-slider', []) sliderid: '=', ticks: '=', ticksLabels: '=', + scale: '=', formatter: '&', onStartSlide: '&', onStopSlide: '&', @@ -53,7 +54,7 @@ angular.module('ui.bootstrap-slider', []) setOption('tooltipseparator', attrs.tooltipseparator, ':'); setOption('ticks', $scope.ticks); setOption('ticks_labels', $scope.ticksLabels); - setOption('scale', attrs.scale, 'linear'); + setOption('scale', $scope.scale, 'linear'); setFloatOption('min', $scope.min, 0); setFloatOption('max', $scope.max, 10); From a1e497eec77765566b68e6f2d745f07da89962cb Mon Sep 17 00:00:00 2001 From: Christian Date: Thu, 2 Jul 2015 16:36:39 +0200 Subject: [PATCH 062/126] Added scale attribute support --- slider.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/slider.js b/slider.js index 4330db7..6df2bee 100644 --- a/slider.js +++ b/slider.js @@ -191,7 +191,7 @@ angular.module('ui.bootstrap-slider', []) } } - var watchers = ['min', 'max', 'step', 'range']; + var watchers = ['min', 'max', 'step', 'range', 'scale']; angular.forEach(watchers, function (prop) { $scope.$watch(prop, function () { initSlider(); From d7e9e033962bf75f6cd53e34e539a5c201b81246 Mon Sep 17 00:00:00 2001 From: SamGraber Date: Wed, 22 Jul 2015 13:27:44 -0400 Subject: [PATCH 063/126] When using libraries such as bootstrap, you'll often want to have the slider size to its container instead of using its own arbitrary size. By setting the width of the input to 100%, we can force the slider to size to its container. --- slider.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/slider.js b/slider.js index 6df2bee..9aa9d9f 100644 --- a/slider.js +++ b/slider.js @@ -3,7 +3,7 @@ angular.module('ui.bootstrap-slider', []) return { restrict: 'AE', replace: true, - template: '
', + template: '
', require: 'ngModel', scope: { max: "=", From ba758a9eb9c07f512dffbc4ebe92d0a98abf68a5 Mon Sep 17 00:00:00 2001 From: Pavel Frankov Date: Fri, 24 Jul 2015 03:00:53 +0600 Subject: [PATCH 064/126] Removed jQuery requirements --- slider.js | 129 +++++++++++++++++++++++++++--------------------------- 1 file changed, 65 insertions(+), 64 deletions(-) diff --git a/slider.js b/slider.js index 9aa9d9f..ce3d1c8 100644 --- a/slider.js +++ b/slider.js @@ -103,10 +103,9 @@ angular.module('ui.bootstrap-slider', []) if ($scope.formatter) options.formatter = $scope.$eval($scope.formatter); - var slider = $(element).find(".slider-input").eq(0); // check if slider jQuery plugin exists - if ($.fn.slider) { + if ('$' in window && $.fn.slider) { // adding methods to jQuery slider plugin prototype $.fn.slider.constructor.prototype.disable = function () { this.picker.off(); @@ -114,83 +113,85 @@ angular.module('ui.bootstrap-slider', []) $.fn.slider.constructor.prototype.enable = function () { this.picker.on(); }; + } - // destroy previous slider to reset all options - if(slider.data("slider")) - slider.slider('destroy'); + // destroy previous slider to reset all options + if (element[0].__slider) + element[0].__slider.destroy(); - slider.slider(options); + var slider = new Slider(element[0].getElementsByClassName('slider-input')[0], options); + element[0].__slider = slider; - // everything that needs slider element - var updateEvent = getArrayOrValue(attrs.updateevent); - if (angular.isString(updateEvent)) { - // if only single event name in string - updateEvent = [updateEvent]; - } - else { - // default to slide event - updateEvent = ['slide']; - } - angular.forEach(updateEvent, function (sliderEvent) { - slider.on(sliderEvent, function (ev) { - ngModelCtrl.$setViewValue(ev.value); - $timeout(function () { - $scope.$apply(); - }); - }); - }); - slider.on('change', function (ev) { - ngModelCtrl.$setViewValue(ev.value.newValue); + // everything that needs slider element + var updateEvent = getArrayOrValue(attrs.updateevent); + if (angular.isString(updateEvent)) { + // if only single event name in string + updateEvent = [updateEvent]; + } + else { + // default to slide event + updateEvent = ['slide']; + } + angular.forEach(updateEvent, function (sliderEvent) { + slider.on(sliderEvent, function (ev) { + ngModelCtrl.$setViewValue(ev.value); $timeout(function () { $scope.$apply(); }); }); - - // Event listeners - var sliderEvents = { - slideStart: 'onStartSlide', - slide: 'onSlide', - slideStop: 'onStopSlide' - }; - angular.forEach(sliderEvents, function (sliderEventAttr, sliderEvent) { - slider.on(sliderEvent, function () { - if ($scope[sliderEventAttr]) { - if ($rootScope.$$phase) { - $scope.$evalAsync($scope[sliderEventAttr]); - } else { - $scope.$apply($scope[sliderEventAttr]); - } - } - }); + }); + slider.on('change', function (ev) { + ngModelCtrl.$setViewValue(ev.value.newValue); + $timeout(function () { + $scope.$apply(); }); + }); - // deregister ngDisabled watcher to prevent memory leaks - if (angular.isFunction(ngDisabledDeregisterFn)) { - ngDisabledDeregisterFn(); - ngDisabledDeregisterFn = null; - } - - ngDisabledDeregisterFn = $scope.$watch('ngDisabled', function (value) { - if (value) { - slider.slider('disable'); - } - else { - slider.slider('enable'); + // Event listeners + var sliderEvents = { + slideStart: 'onStartSlide', + slide: 'onSlide', + slideStop: 'onStopSlide' + }; + angular.forEach(sliderEvents, function (sliderEventAttr, sliderEvent) { + slider.on(sliderEvent, function () { + if ($scope[sliderEventAttr]) { + if ($rootScope.$$phase) { + $scope.$evalAsync($scope[sliderEventAttr]); + } else { + $scope.$apply($scope[sliderEventAttr]); + } } }); + }); - // deregister ngModel watcher to prevent memory leaks - if (angular.isFunction(ngModelDeregisterFn)) ngModelDeregisterFn(); - ngModelDeregisterFn = $scope.$watch('ngModel', function (value) { - if($scope.range){ - slider.slider('setValue', value); - }else{ - slider.slider('setValue', parseFloat(value)); - } - }, true); + // deregister ngDisabled watcher to prevent memory leaks + if (angular.isFunction(ngDisabledDeregisterFn)) { + ngDisabledDeregisterFn(); + ngDisabledDeregisterFn = null; } + + ngDisabledDeregisterFn = $scope.$watch('ngDisabled', function (value) { + if (value) { + slider.disable(); + } + else { + slider.enable(); + } + }); + + // deregister ngModel watcher to prevent memory leaks + if (angular.isFunction(ngModelDeregisterFn)) ngModelDeregisterFn(); + ngModelDeregisterFn = $scope.$watch('ngModel', function (value) { + if($scope.range){ + slider.setValue(value); + }else{ + slider.setValue(parseFloat(value)); + } + }, true); } + var watchers = ['min', 'max', 'step', 'range', 'scale']; angular.forEach(watchers, function (prop) { $scope.$watch(prop, function () { From e646755bf0aa18dc3bcc9eaba8b6378dd09565d2 Mon Sep 17 00:00:00 2001 From: Pavel Frankov Date: Mon, 27 Jul 2015 14:04:59 +0600 Subject: [PATCH 065/126] Fixed setting model's value According changes in bootstrap slider events: https://github.com/seiyria/bootstrap-slider#events --- slider.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/slider.js b/slider.js index ce3d1c8..831edc3 100644 --- a/slider.js +++ b/slider.js @@ -134,14 +134,14 @@ angular.module('ui.bootstrap-slider', []) } angular.forEach(updateEvent, function (sliderEvent) { slider.on(sliderEvent, function (ev) { - ngModelCtrl.$setViewValue(ev.value); + ngModelCtrl.$setViewValue(ev); $timeout(function () { $scope.$apply(); }); }); }); slider.on('change', function (ev) { - ngModelCtrl.$setViewValue(ev.value.newValue); + ngModelCtrl.$setViewValue(ev.newValue); $timeout(function () { $scope.$apply(); }); From 33cf326c5a7b36c8c5ddaf06939603ed83cd86a5 Mon Sep 17 00:00:00 2001 From: Jesse Taylor Date: Wed, 29 Jul 2015 12:10:17 +0100 Subject: [PATCH 066/126] Added tooltip position option setter Added new tooltip position option that has been added to bootstrap-slider --- slider.js | 1 + 1 file changed, 1 insertion(+) diff --git a/slider.js b/slider.js index 831edc3..1e4e9e6 100644 --- a/slider.js +++ b/slider.js @@ -51,6 +51,7 @@ angular.module('ui.bootstrap-slider', []) setOption('selection', attrs.selection, 'before'); setOption('handle', attrs.handle, 'round'); setOption('tooltip', attrs.sliderTooltip || attrs.tooltip, 'show'); + setOption('tooltip_position', attrs.sliderTooltipPosition, 'top'); setOption('tooltipseparator', attrs.tooltipseparator, ':'); setOption('ticks', $scope.ticks); setOption('ticks_labels', $scope.ticksLabels); From 2d4413dbe4d43d928ae85b6e4478537a1d15bccf Mon Sep 17 00:00:00 2001 From: Jesse Taylor Date: Wed, 29 Jul 2015 16:07:23 +0100 Subject: [PATCH 067/126] Bumped seiyria-bootstrap-slider dependency Enables newer version to be installed via bower with new features like the tooltip position --- bower.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bower.json b/bower.json index 2e7bc56..5bf11eb 100644 --- a/bower.json +++ b/bower.json @@ -22,7 +22,7 @@ "tests" ], "dependencies": { - "seiyria-bootstrap-slider": "~v4.8", + "seiyria-bootstrap-slider": "~4.13", "angular": "~1.3.15||~1.4.0" } } From 51ecb4ffcb8124419ec831c2837c8d65741f4147 Mon Sep 17 00:00:00 2001 From: "Kyle J. Kemp" Date: Wed, 29 Jul 2015 10:10:03 -0500 Subject: [PATCH 068/126] Update bower.json --- bower.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bower.json b/bower.json index 5bf11eb..ae0ec5c 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "angular-bootstrap-slider", - "version": "0.1.3", + "version": "0.1.6", "authors": [ "Kyle Kemp " ], From e6648fd3a1c4bf955374e4ec65af79150b76c261 Mon Sep 17 00:00:00 2001 From: Kyle Kemp Date: Wed, 29 Jul 2015 11:53:14 -0500 Subject: [PATCH 069/126] update --- bower.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bower.json b/bower.json index ae0ec5c..875a143 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "angular-bootstrap-slider", - "version": "0.1.6", + "version": "0.1.7", "authors": [ "Kyle Kemp " ], From fc729c13d410d47bc1ccb34dd2a5b602c9941aa2 Mon Sep 17 00:00:00 2001 From: Pete d'Angelo Date: Wed, 5 Aug 2015 09:55:39 -0400 Subject: [PATCH 070/126] fixed issue with slide events not passing values --- slider.js | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/slider.js b/slider.js index 1e4e9e6..98f3d16 100644 --- a/slider.js +++ b/slider.js @@ -155,12 +155,18 @@ angular.module('ui.bootstrap-slider', []) slideStop: 'onStopSlide' }; angular.forEach(sliderEvents, function (sliderEventAttr, sliderEvent) { - slider.on(sliderEvent, function () { + var fn = $parse(attrs[sliderEventAttr]); + slider.on(sliderEvent, function (ev) { if ($scope[sliderEventAttr]) { + + var callback = function () { + fn($scope.$parent, { $event: ev, value: ev }); + } + if ($rootScope.$$phase) { - $scope.$evalAsync($scope[sliderEventAttr]); + $scope.$evalAsync(callback); } else { - $scope.$apply($scope[sliderEventAttr]); + $scope.$apply(callback); } } }); From 0186aa60711dfa54af3b94ffb180046bfc73a175 Mon Sep 17 00:00:00 2001 From: jaml Date: Tue, 8 Sep 2015 09:01:28 +0100 Subject: [PATCH 071/126] Add the possibility to set "ticks-positions" attribute in the directive --- slider.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/slider.js b/slider.js index 98f3d16..740285a 100644 --- a/slider.js +++ b/slider.js @@ -16,6 +16,7 @@ angular.module('ui.bootstrap-slider', []) sliderid: '=', ticks: '=', ticksLabels: '=', + ticksPositions: '=', scale: '=', formatter: '&', onStartSlide: '&', @@ -55,6 +56,7 @@ angular.module('ui.bootstrap-slider', []) setOption('tooltipseparator', attrs.tooltipseparator, ':'); setOption('ticks', $scope.ticks); setOption('ticks_labels', $scope.ticksLabels); + setOption('ticks_positions', $scope.ticksPositions); setOption('scale', $scope.scale, 'linear'); setFloatOption('min', $scope.min, 0); From 62f9ff55e91b12f9e9f9f7de3da0b1f3f1e01a0f Mon Sep 17 00:00:00 2001 From: jaml Date: Tue, 8 Sep 2015 09:12:30 +0100 Subject: [PATCH 072/126] Add the possibility to set "ticks-snap-bounds" attribute in the directive --- slider.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/slider.js b/slider.js index 98f3d16..3ef5439 100644 --- a/slider.js +++ b/slider.js @@ -16,6 +16,7 @@ angular.module('ui.bootstrap-slider', []) sliderid: '=', ticks: '=', ticksLabels: '=', + ticksSnapBounds: '=', scale: '=', formatter: '&', onStartSlide: '&', @@ -55,6 +56,7 @@ angular.module('ui.bootstrap-slider', []) setOption('tooltipseparator', attrs.tooltipseparator, ':'); setOption('ticks', $scope.ticks); setOption('ticks_labels', $scope.ticksLabels); + setOption('ticks_snap_bounds', $scope.ticksSnapBounds); setOption('scale', $scope.scale, 'linear'); setFloatOption('min', $scope.min, 0); From bc8d6d25de7d5fc8f7ca0ae8d0950aa01f3a726f Mon Sep 17 00:00:00 2001 From: Matias Delgado Date: Wed, 23 Sep 2015 16:31:13 -0300 Subject: [PATCH 073/126] Take zero as a valid value when setting float option --- slider.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/slider.js b/slider.js index 0e2a949..3a39ae0 100644 --- a/slider.js +++ b/slider.js @@ -37,7 +37,7 @@ angular.module('ui.bootstrap-slider', []) } function setFloatOption(key, value, defaultValue) { - options[key] = value ? parseFloat(value) : defaultValue; + options[key] = value || value === 0 ? parseFloat(value) : defaultValue; } function setBooleanOption(key, value, defaultValue) { From 4e792ee005d5a6341aa2e568be6ddd3a6d1364e1 Mon Sep 17 00:00:00 2001 From: JulianWielga Date: Thu, 5 Nov 2015 12:34:07 +0100 Subject: [PATCH 074/126] fix for #92 fix for: Can't use step size > 20 due to Number.toFixed limitation #92 --- slider.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/slider.js b/slider.js index 3a39ae0..ef4524b 100644 --- a/slider.js +++ b/slider.js @@ -65,7 +65,7 @@ angular.module('ui.bootstrap-slider', []) setFloatOption('max', $scope.max, 10); setFloatOption('step', $scope.step, 1); var strNbr = options.step + ''; - var decimals = strNbr.substring(strNbr.lastIndexOf('.') + 1); + var decimals = strNbr.substring(strNbr.lastIndexOf('.') + 1 || strNbr.length); setFloatOption('precision', attrs.precision, decimals); setBooleanOption('tooltip_split', attrs.tooltipsplit, false); From 3c0969fc82307955a15ed9db96d9b3662f68342e Mon Sep 17 00:00:00 2001 From: Miro Mannino Date: Thu, 5 Nov 2015 16:23:30 +0400 Subject: [PATCH 075/126] issue with step with more than one decimal Step doesn't work with more than one decimal. e.g. with step = 0.01 --- slider.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/slider.js b/slider.js index 3a39ae0..f461f64 100644 --- a/slider.js +++ b/slider.js @@ -66,7 +66,7 @@ angular.module('ui.bootstrap-slider', []) setFloatOption('step', $scope.step, 1); var strNbr = options.step + ''; var decimals = strNbr.substring(strNbr.lastIndexOf('.') + 1); - setFloatOption('precision', attrs.precision, decimals); + setFloatOption('precision', attrs.precision, decimals.length); setBooleanOption('tooltip_split', attrs.tooltipsplit, false); setBooleanOption('enabled', attrs.enabled, true); From 094762d13f6432fd215aa8e4b33451c3595af5fe Mon Sep 17 00:00:00 2001 From: JulianWielga Date: Thu, 5 Nov 2015 15:55:12 +0100 Subject: [PATCH 076/126] better fix --- slider.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/slider.js b/slider.js index ef4524b..78f733c 100644 --- a/slider.js +++ b/slider.js @@ -65,7 +65,8 @@ angular.module('ui.bootstrap-slider', []) setFloatOption('max', $scope.max, 10); setFloatOption('step', $scope.step, 1); var strNbr = options.step + ''; - var decimals = strNbr.substring(strNbr.lastIndexOf('.') + 1 || strNbr.length); + var dotPos = strNbr.search(/[^.,]*$/); + var decimals = strNbr.substring(dotPos).length; setFloatOption('precision', attrs.precision, decimals); setBooleanOption('tooltip_split', attrs.tooltipsplit, false); From fb0ff5a5ce285abb71590cedd8d01b537eabb062 Mon Sep 17 00:00:00 2001 From: Julian Wielga Date: Thu, 5 Nov 2015 16:02:48 +0100 Subject: [PATCH 077/126] refactor --- slider.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/slider.js b/slider.js index 78f733c..3bccc8a 100644 --- a/slider.js +++ b/slider.js @@ -66,8 +66,8 @@ angular.module('ui.bootstrap-slider', []) setFloatOption('step', $scope.step, 1); var strNbr = options.step + ''; var dotPos = strNbr.search(/[^.,]*$/); - var decimals = strNbr.substring(dotPos).length; - setFloatOption('precision', attrs.precision, decimals); + var decimals = strNbr.substring(dotPos); + setFloatOption('precision', attrs.precision, decimals.length); setBooleanOption('tooltip_split', attrs.tooltipsplit, false); setBooleanOption('enabled', attrs.enabled, true); From 685d86c0f95a05471db98e9eb1d9953680102a4c Mon Sep 17 00:00:00 2001 From: JulianWielga Date: Thu, 5 Nov 2015 16:11:48 +0100 Subject: [PATCH 078/126] quick fix in test Syntax Error: Token '{' invalid key at column 2 of the expression [{{ testOptions.ngDisabled }}] starting at [{ testOptions.ngDisabled }}]. --- test.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test.html b/test.html index 484a795..c2d4811 100644 --- a/test.html +++ b/test.html @@ -76,7 +76,7 @@ orientation="{{ testOptions.orientation }}" handle="{{ testOptions.handle }}" enabled="{{ testOptions.enabled }}" - ng-disabled="{{ testOptions.ngDisabled }}" + ng-disabled="testOptions.ngDisabled" naturalarrowkeys="{{ testOptions.naturalarrowkeys }}" > If you can see this then slider did not get compiled by Angular. @@ -211,4 +211,4 @@ - \ No newline at end of file + From d17c57aef3799c09b86f47fd773e324ae1ca945a Mon Sep 17 00:00:00 2001 From: Sovattha SOK Date: Wed, 11 Nov 2015 15:17:37 +0100 Subject: [PATCH 079/126] Update Bower dependencies --- bower.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bower.json b/bower.json index 875a143..8316dac 100644 --- a/bower.json +++ b/bower.json @@ -22,7 +22,7 @@ "tests" ], "dependencies": { - "seiyria-bootstrap-slider": "~4.13", - "angular": "~1.3.15||~1.4.0" + "seiyria-bootstrap-slider": "~5.2.6", + "angular": "~1.4.7" } } From 4dfdb6905e5dab575b8f13e588851497852e695a Mon Sep 17 00:00:00 2001 From: Sovattha SOK Date: Wed, 11 Nov 2015 15:38:00 +0100 Subject: [PATCH 080/126] Keep retrocompatibility with Angular 1.3 --- bower.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bower.json b/bower.json index 8316dac..0d254a7 100644 --- a/bower.json +++ b/bower.json @@ -23,6 +23,6 @@ ], "dependencies": { "seiyria-bootstrap-slider": "~5.2.6", - "angular": "~1.4.7" + "angular": "~1.3.15||~1.4.7" } } From 88c1bb072d2b65ffb5f2f6c34b5c151d8b817f7e Mon Sep 17 00:00:00 2001 From: Julian Wielga Date: Thu, 12 Nov 2015 15:57:27 +0100 Subject: [PATCH 081/126] refactor better formatter function call formatter on external model change --- slider.js | 37 +++++++++++++++++++------------------ test.html | 10 +++++----- 2 files changed, 24 insertions(+), 23 deletions(-) diff --git a/slider.js b/slider.js index 3bccc8a..180e7ea 100644 --- a/slider.js +++ b/slider.js @@ -107,7 +107,11 @@ angular.module('ui.bootstrap-slider', []) setFloatOption('value', $scope.value, 5); } - if ($scope.formatter) options.formatter = $scope.$eval($scope.formatter); + if (attrs.formatter) { + options.formatter = function(value) { + return $scope.formatter({value: value}); + } + } // check if slider jQuery plugin exists @@ -140,19 +144,18 @@ angular.module('ui.bootstrap-slider', []) } angular.forEach(updateEvent, function (sliderEvent) { slider.on(sliderEvent, function (ev) { - ngModelCtrl.$setViewValue(ev); $timeout(function () { - $scope.$apply(); + ngModelCtrl.$setViewValue(ev); }); }); }); slider.on('change', function (ev) { - ngModelCtrl.$setViewValue(ev.newValue); $timeout(function () { - $scope.$apply(); + ngModelCtrl.$setViewValue(ev.newValue); }); }); + // Event listeners var sliderEvents = { slideStart: 'onStartSlide', @@ -164,15 +167,9 @@ angular.module('ui.bootstrap-slider', []) slider.on(sliderEvent, function (ev) { if ($scope[sliderEventAttr]) { - var callback = function () { + $timeout(function () { fn($scope.$parent, { $event: ev, value: ev }); - } - - if ($rootScope.$$phase) { - $scope.$evalAsync(callback); - } else { - $scope.$apply(callback); - } + }); } }); }); @@ -195,11 +192,14 @@ angular.module('ui.bootstrap-slider', []) // deregister ngModel watcher to prevent memory leaks if (angular.isFunction(ngModelDeregisterFn)) ngModelDeregisterFn(); ngModelDeregisterFn = $scope.$watch('ngModel', function (value) { - if($scope.range){ - slider.setValue(value); - }else{ - slider.setValue(parseFloat(value)); - } + $timeout(function() { + if($scope.range){ + slider.setValue(value); + }else{ + slider.setValue(parseFloat(value)); + } + slider.relayout(); + }); }, true); } @@ -208,6 +208,7 @@ angular.module('ui.bootstrap-slider', []) angular.forEach(watchers, function (prop) { $scope.$watch(prop, function () { initSlider(); + }); }); } diff --git a/test.html b/test.html index c2d4811..5541e3b 100644 --- a/test.html +++ b/test.html @@ -14,9 +14,9 @@ - - + + @@ -71,7 +71,7 @@ max="testOptions.max" step="testOptions.step" range="testOptions.range" - precision="testOptions.precision" + precision="{{ testOptions.precision }}" reversed="{{ testOptions.reversed }}" orientation="{{ testOptions.orientation }}" handle="{{ testOptions.handle }}" @@ -129,7 +129,7 @@ ng-model="model.third" precision="{{ testOptions.precision }}" tooltip="{{ testOptions.tooltip }}" - formatter="formatterFn" + formatter="formatterFn(value)" > Model: {{model.third}}
From d2357c9d7fbcafeee65350848cfc319bb1b88ab2 Mon Sep 17 00:00:00 2001 From: Julian Wielga Date: Thu, 12 Nov 2015 16:17:07 +0100 Subject: [PATCH 082/126] deps --- bower.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bower.json b/bower.json index 0d254a7..93a9896 100644 --- a/bower.json +++ b/bower.json @@ -22,7 +22,7 @@ "tests" ], "dependencies": { - "seiyria-bootstrap-slider": "~5.2.6", - "angular": "~1.3.15||~1.4.7" + "seiyria-bootstrap-slider": ">= 5.2", + "angular": ">= 1.3 < 1.4" } } From 934a33e5f2167e2239f9816e7abaa6f29409e658 Mon Sep 17 00:00:00 2001 From: Julian Wielga Date: Thu, 12 Nov 2015 16:44:16 +0100 Subject: [PATCH 083/126] expose slider.relayout via scope event --- slider.js | 11 ++++++++--- test.html | 1 + 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/slider.js b/slider.js index 180e7ea..467e3a6 100644 --- a/slider.js +++ b/slider.js @@ -27,7 +27,7 @@ angular.module('ui.bootstrap-slider', []) link: function ($scope, element, attrs, ngModelCtrl, $compile) { var ngModelDeregisterFn, ngDisabledDeregisterFn; - initSlider(); + var slider = initSlider(); function initSlider() { var options = {}; @@ -201,16 +201,21 @@ angular.module('ui.bootstrap-slider', []) slider.relayout(); }); }, true); + + return slider; } var watchers = ['min', 'max', 'step', 'range', 'scale']; angular.forEach(watchers, function (prop) { $scope.$watch(prop, function () { - initSlider(); - + slider = initSlider(); }); }); + + $scope.$on('slider:relayout', function() { + slider.relayout(); + }); } }; }]) diff --git a/test.html b/test.html index 5541e3b..71635be 100644 --- a/test.html +++ b/test.html @@ -122,6 +122,7 @@ +

Slider with configurable tooltip
From b6d0239b9566bd09b3a926e8e989d013dbbcdd2e Mon Sep 17 00:00:00 2001 From: Julian Wielga Date: Thu, 12 Nov 2015 17:29:04 +0100 Subject: [PATCH 084/126] deps --- bower.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bower.json b/bower.json index 93a9896..cfde960 100644 --- a/bower.json +++ b/bower.json @@ -22,7 +22,7 @@ "tests" ], "dependencies": { - "seiyria-bootstrap-slider": ">= 5.2", - "angular": ">= 1.3 < 1.4" + "seiyria-bootstrap-slider": ">= 5.2 < 6.0", + "angular": ">= 1.3 < 1.5" } } From 95f94f165d515eaeb590aef4febf8ff75b68705a Mon Sep 17 00:00:00 2001 From: Julian Wielga Date: Wed, 18 Nov 2015 18:59:47 +0100 Subject: [PATCH 085/126] removed unnecessary timeouts --- slider.js | 27 +++++++++------------------ 1 file changed, 9 insertions(+), 18 deletions(-) diff --git a/slider.js b/slider.js index 467e3a6..eae539a 100644 --- a/slider.js +++ b/slider.js @@ -144,15 +144,11 @@ angular.module('ui.bootstrap-slider', []) } angular.forEach(updateEvent, function (sliderEvent) { slider.on(sliderEvent, function (ev) { - $timeout(function () { - ngModelCtrl.$setViewValue(ev); - }); + ngModelCtrl.$setViewValue(ev); }); }); slider.on('change', function (ev) { - $timeout(function () { - ngModelCtrl.$setViewValue(ev.newValue); - }); + ngModelCtrl.$setViewValue(ev.newValue); }); @@ -166,10 +162,7 @@ angular.module('ui.bootstrap-slider', []) var fn = $parse(attrs[sliderEventAttr]); slider.on(sliderEvent, function (ev) { if ($scope[sliderEventAttr]) { - - $timeout(function () { - fn($scope.$parent, { $event: ev, value: ev }); - }); + fn($scope.$parent, { $event: ev, value: ev }); } }); }); @@ -192,14 +185,12 @@ angular.module('ui.bootstrap-slider', []) // deregister ngModel watcher to prevent memory leaks if (angular.isFunction(ngModelDeregisterFn)) ngModelDeregisterFn(); ngModelDeregisterFn = $scope.$watch('ngModel', function (value) { - $timeout(function() { - if($scope.range){ - slider.setValue(value); - }else{ - slider.setValue(parseFloat(value)); - } - slider.relayout(); - }); + if($scope.range){ + slider.setValue(value); + }else{ + slider.setValue(parseFloat(value)); + } + slider.relayout(); }, true); return slider; From 5a4c8aa780d365e3980fdd0c3aa78dae1c893756 Mon Sep 17 00:00:00 2001 From: Sovattha SOK Date: Thu, 19 Nov 2015 09:50:44 +0100 Subject: [PATCH 086/126] Issue #108 Fix tooltip formatter --- slider.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/slider.js b/slider.js index eae539a..84a7d63 100644 --- a/slider.js +++ b/slider.js @@ -108,9 +108,7 @@ angular.module('ui.bootstrap-slider', []) } if (attrs.formatter) { - options.formatter = function(value) { - return $scope.formatter({value: value}); - } + options.formatter = $scope.$eval($scope.formatter); } From b6fb470e7b55797a90d8e127e1d8c5ab077a1e47 Mon Sep 17 00:00:00 2001 From: Julian Wielga Date: Tue, 24 Nov 2015 17:57:29 +0100 Subject: [PATCH 087/126] e2e tests --- package.json | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 package.json diff --git a/package.json b/package.json new file mode 100644 index 0000000..627ea21 --- /dev/null +++ b/package.json @@ -0,0 +1,33 @@ +{ + "name": "angular-bootstrap-slider", + "version": "0.1.7", + "description": "An angular directive for seiyria-bootstrap-slider", + "main": "slider.js", + "dependencies": { + "http-server": "^0.8.5", + "jasmine-core": "^2.3.4", + "karma": "^0.13.15", + "karma-chrome-launcher": "^0.2.1", + "karma-jasmine": "^0.3.6", + "protractor": "^3.0.0" + }, + "devDependencies": {}, + "scripts": { + "start": "http-server -a localhost -p 31337 -c-1", + "test": "echo \"Error: no test specified\" && exit 1", + "preupdate-webdriver": "npm install", + "update-webdriver": "webdriver-manager update", + "preprotractor": "npm run update-webdriver", + "protractor": "protractor e2e-tests/protractor.conf.js" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/JulianWielga/angular-bootstrap-slider.git" + }, + "author": "Kyle Kemp ", + "license": "MIT", + "bugs": { + "url": "https://github.com/JulianWielga/angular-bootstrap-slider/issues" + }, + "homepage": "https://github.com/JulianWielga/angular-bootstrap-slider#readme" +} From 9c6a9828f47ce7d35263cd1c7b9862cbe0030071 Mon Sep 17 00:00:00 2001 From: Julian Wielga Date: Tue, 24 Nov 2015 17:59:04 +0100 Subject: [PATCH 088/126] e2e tests --- e2e-tests/protractor.conf.js | 19 ++++++++++++++++++ e2e-tests/scenarios.js | 39 ++++++++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+) create mode 100644 e2e-tests/protractor.conf.js create mode 100644 e2e-tests/scenarios.js diff --git a/e2e-tests/protractor.conf.js b/e2e-tests/protractor.conf.js new file mode 100644 index 0000000..e6a5425 --- /dev/null +++ b/e2e-tests/protractor.conf.js @@ -0,0 +1,19 @@ +exports.config = { + allScriptsTimeout: 11000, + + specs: [ + '*.js' + ], + + capabilities: { + 'browserName': 'chrome' + }, + + baseUrl: 'http://localhost:31337/', + + framework: 'jasmine', + + jasmineNodeOpts: { + defaultTimeoutInterval: 30000 + } +}; \ No newline at end of file diff --git a/e2e-tests/scenarios.js b/e2e-tests/scenarios.js new file mode 100644 index 0000000..4848974 --- /dev/null +++ b/e2e-tests/scenarios.js @@ -0,0 +1,39 @@ +'use strict'; + +describe('angular-bootstrap-slider', function() { + + beforeEach(function() { + browser.get('test.html'); + }); + + it('should automatically redirect to /view1 when location hash/fragment is empty', function() { + expect(browser.getLocationAbsUrl()).toMatch("/test.html"); + }); + + + //describe('view1', function() { + // + // + // + // it('should render view1 when user navigates to /view1', function() { + // expect(element.all(by.css('[ng-view] p')).first().getText()). + // toMatch(/partial for view 1/); + // }); + // + //}); + + + //describe('view2', function() { + // + // beforeEach(function() { + // browser.get('index.html#/view2'); + // }); + // + // + // it('should render view2 when user navigates to /view2', function() { + // expect(element.all(by.css('[ng-view] p')).first().getText()). + // toMatch(/partial for view 2/); + // }); + // + //}); +}); \ No newline at end of file From a9618ea2981bf08ae3ae81501e0c0e5e5cce4f28 Mon Sep 17 00:00:00 2001 From: Julian Wielga Date: Wed, 25 Nov 2015 02:58:39 +0100 Subject: [PATCH 089/126] ignore --- .gitignore | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 89ad3ae..c570498 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,10 @@ ######### bower_components +# npm # +node_modules + # jetbrains # ############# -.idea \ No newline at end of file +.idea +*.iml \ No newline at end of file From df6bf66478e158f17ab26800d13596278c139013 Mon Sep 17 00:00:00 2001 From: Julian Wielga Date: Wed, 25 Nov 2015 02:59:01 +0100 Subject: [PATCH 090/126] deps --- bower.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/bower.json b/bower.json index cfde960..249049b 100644 --- a/bower.json +++ b/bower.json @@ -24,5 +24,8 @@ "dependencies": { "seiyria-bootstrap-slider": ">= 5.2 < 6.0", "angular": ">= 1.3 < 1.5" + }, + "devDependencies": { + "bootstrap": "~3.3.6" } } From 90a151db8f8704532e780502ddf295ef061dc5cd Mon Sep 17 00:00:00 2001 From: Julian Wielga Date: Wed, 25 Nov 2015 02:59:26 +0100 Subject: [PATCH 091/126] ignore --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index c570498..053bca7 100644 --- a/.gitignore +++ b/.gitignore @@ -5,7 +5,7 @@ bower_components # npm # node_modules -# jetbrains # +# jetdepsbrains # ############# .idea *.iml \ No newline at end of file From f1099024589270872cc9e8799a00a6fe17f111b6 Mon Sep 17 00:00:00 2001 From: Julian Wielga Date: Wed, 25 Nov 2015 03:00:23 +0100 Subject: [PATCH 092/126] ignore --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 053bca7..c570498 100644 --- a/.gitignore +++ b/.gitignore @@ -5,7 +5,7 @@ bower_components # npm # node_modules -# jetdepsbrains # +# jetbrains # ############# .idea *.iml \ No newline at end of file From cbf54eba6866a8cdad09eb48d5163b5e7e45f2c8 Mon Sep 17 00:00:00 2001 From: Julian Wielga Date: Wed, 25 Nov 2015 03:01:22 +0100 Subject: [PATCH 093/126] e2e test for tooltip formatter --- e2e-tests/scenarios.js | 76 +++++++++++++++++++++++++----------------- test.html | 2 +- 2 files changed, 46 insertions(+), 32 deletions(-) diff --git a/e2e-tests/scenarios.js b/e2e-tests/scenarios.js index 4848974..28a9785 100644 --- a/e2e-tests/scenarios.js +++ b/e2e-tests/scenarios.js @@ -2,38 +2,52 @@ describe('angular-bootstrap-slider', function() { - beforeEach(function() { - browser.get('test.html'); - }); + describe('tooltip', function() { + var slider, handle, tooltip; - it('should automatically redirect to /view1 when location hash/fragment is empty', function() { - expect(browser.getLocationAbsUrl()).toMatch("/test.html"); - }); + beforeEach(function() { + browser.get('/test.html'); + browser.waitForAngular(); + + slider = element(by.css('[slider-id="tooltipSlider"]')); + handle = slider.element(by.css('.slider-handle.min-slider-handle')) + tooltip = slider.element(by.css('.tooltip.tooltip-main')); + }); + + it('should be visible on hover', function() { + browser.actions().mouseMove(handle).perform(); + expect(tooltip.getAttribute('class')).toMatch('in'); + }); + + it('should have filtered text', function() { + browser.actions().mouseMove(handle).perform(); + expect(tooltip.getText()).toBe('Current value: 0%'); + }); - //describe('view1', function() { - // - // - // - // it('should render view1 when user navigates to /view1', function() { - // expect(element.all(by.css('[ng-view] p')).first().getText()). - // toMatch(/partial for view 1/); - // }); - // - //}); - - - //describe('view2', function() { - // - // beforeEach(function() { - // browser.get('index.html#/view2'); - // }); - // - // - // it('should render view2 when user navigates to /view2', function() { - // expect(element.all(by.css('[ng-view] p')).first().getText()). - // toMatch(/partial for view 2/); - // }); - // - //}); + describe('should refresh filtered text', function() { + var suffix, relayout; + + beforeEach(function() { + suffix = element(by.model('suffix')); + relayout = element(by.id('relayout-button')); + suffix.clear(); + }); + + it('on relayout event', function() { + suffix.sendKeys('aaa'); + relayout.click(); + browser.actions().mouseMove(handle).perform(); + expect(tooltip.getText()).toBe('Current value: 0aaa'); + }); + + it('on drag start', function() { + suffix.sendKeys('bbb'); + handle.click(); + browser.actions().mouseMove(handle).perform(); + expect(tooltip.getText()).toBe('Current value: 0bbb'); + }); + }); + }); + }); \ No newline at end of file diff --git a/test.html b/test.html index 71635be..ce834ea 100644 --- a/test.html +++ b/test.html @@ -122,7 +122,7 @@ - +

Slider with configurable tooltip
From 8f000ebad8749cb5e9850f381fcd7301bb88e153 Mon Sep 17 00:00:00 2001 From: Julian Wielga Date: Wed, 25 Nov 2015 03:02:14 +0100 Subject: [PATCH 094/126] scripts --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 627ea21..12abb16 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,7 @@ "devDependencies": {}, "scripts": { "start": "http-server -a localhost -p 31337 -c-1", - "test": "echo \"Error: no test specified\" && exit 1", + "test": "npm run protractor", "preupdate-webdriver": "npm install", "update-webdriver": "webdriver-manager update", "preprotractor": "npm run update-webdriver", From a9546902622a3e7947c40da17406691433262249 Mon Sep 17 00:00:00 2001 From: Julian Wielga Date: Wed, 25 Nov 2015 03:04:00 +0100 Subject: [PATCH 095/126] package.json --- package.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 12abb16..f9d6202 100644 --- a/package.json +++ b/package.json @@ -22,12 +22,12 @@ }, "repository": { "type": "git", - "url": "git+https://github.com/JulianWielga/angular-bootstrap-slider.git" + "url": "git+https://github.com/seiyria/angular-bootstrap-slider.git" }, "author": "Kyle Kemp ", "license": "MIT", "bugs": { - "url": "https://github.com/JulianWielga/angular-bootstrap-slider/issues" + "url": "https://github.com/seiyria/angular-bootstrap-slider/issues" }, - "homepage": "https://github.com/JulianWielga/angular-bootstrap-slider#readme" + "homepage": "https://github.com/seiyria/angular-bootstrap-slider#readme" } From 95260cb6e63624a5809ade93afbe88129cf9caed Mon Sep 17 00:00:00 2001 From: Daniel Nelson Date: Tue, 24 Nov 2015 22:03:58 -0800 Subject: [PATCH 096/126] Added focus support to Angular directive Added support for the focus attribute to the slider directive. As per other attributes, pulling value from attribute into $scope and setting option via setOption(). --- slider.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/slider.js b/slider.js index 84a7d63..c3f731b 100644 --- a/slider.js +++ b/slider.js @@ -19,6 +19,7 @@ angular.module('ui.bootstrap-slider', []) ticksSnapBounds: '=', ticksPositions: '=', scale: '=', + focus: '=', formatter: '&', onStartSlide: '&', onStopSlide: '&', @@ -60,6 +61,8 @@ angular.module('ui.bootstrap-slider', []) setOption('ticks_snap_bounds', $scope.ticksSnapBounds); setOption('ticks_positions', $scope.ticksPositions); setOption('scale', $scope.scale, 'linear'); + setOption('focus', $scope.focus); + setFloatOption('min', $scope.min, 0); setFloatOption('max', $scope.max, 10); From 980384ca01e49594406499353cefa573b5c3b282 Mon Sep 17 00:00:00 2001 From: Daniel Nelson Date: Tue, 24 Nov 2015 22:06:55 -0800 Subject: [PATCH 097/126] Removing added whitespace --- slider.js | 1 - 1 file changed, 1 deletion(-) diff --git a/slider.js b/slider.js index c3f731b..c80c5d3 100644 --- a/slider.js +++ b/slider.js @@ -63,7 +63,6 @@ angular.module('ui.bootstrap-slider', []) setOption('scale', $scope.scale, 'linear'); setOption('focus', $scope.focus); - setFloatOption('min', $scope.min, 0); setFloatOption('max', $scope.max, 10); setFloatOption('step', $scope.step, 1); From b737216e7a82e73b9fa4d7efab2564dbd81f197f Mon Sep 17 00:00:00 2001 From: Julian Wielga Date: Wed, 25 Nov 2015 12:03:04 +0100 Subject: [PATCH 098/126] formatter in format from #105 --- slider.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/slider.js b/slider.js index 84a7d63..4ee48cd 100644 --- a/slider.js +++ b/slider.js @@ -108,10 +108,11 @@ angular.module('ui.bootstrap-slider', []) } if (attrs.formatter) { - options.formatter = $scope.$eval($scope.formatter); + options.formatter = function(value) { + return $scope.formatter({value: value}); + } } - // check if slider jQuery plugin exists if ('$' in window && $.fn.slider) { // adding methods to jQuery slider plugin prototype From 671e869e40624b1517413ddd9d2154c5717e6e9a Mon Sep 17 00:00:00 2001 From: Daniel Zelazny Date: Fri, 27 Nov 2015 13:26:02 +0100 Subject: [PATCH 099/126] Add .$apply method --- slider.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/slider.js b/slider.js index 62923ac..9e59b59 100644 --- a/slider.js +++ b/slider.js @@ -163,7 +163,9 @@ angular.module('ui.bootstrap-slider', []) var fn = $parse(attrs[sliderEventAttr]); slider.on(sliderEvent, function (ev) { if ($scope[sliderEventAttr]) { - fn($scope.$parent, { $event: ev, value: ev }); + $scope.$apply(function () { + fn($scope.$parent, { $event: ev, value: ev }); + }); } }); }); From 4b5c32bee8952ede2bbcc3e4b87de2e90f1acb3e Mon Sep 17 00:00:00 2001 From: Andrew Mirsky Date: Tue, 5 Jan 2016 18:05:02 -0500 Subject: [PATCH 100/126] angular directive's link function gets 'attrs' with normalized names (ie lowercase, without dashes) even though in the local it's case sensative. also, send the name of the event along with the event value to the callback --- README.md | 6 ++++++ slider.js | 4 ++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index f075dc3..aca02d2 100644 --- a/README.md +++ b/README.md @@ -30,3 +30,9 @@ But, if the `tooltip` attribute is in conflict with another angular directive, y ``` + +#### Event Calbacks +```html + + +``` diff --git a/slider.js b/slider.js index 9e59b59..57b10d6 100644 --- a/slider.js +++ b/slider.js @@ -160,11 +160,11 @@ angular.module('ui.bootstrap-slider', []) slideStop: 'onStopSlide' }; angular.forEach(sliderEvents, function (sliderEventAttr, sliderEvent) { - var fn = $parse(attrs[sliderEventAttr]); + var fn = $parse(attrs[sliderEventAttr.toLowerCase()]); slider.on(sliderEvent, function (ev) { if ($scope[sliderEventAttr]) { $scope.$apply(function () { - fn($scope.$parent, { $event: ev, value: ev }); + fn($scope.$parent, { $event: sliderEvent, value: ev }); }); } }); From 84f65dcd1ad2820dbd9a2fb4aceff304c1e06879 Mon Sep 17 00:00:00 2001 From: "Kyle J. Kemp" Date: Mon, 11 Jan 2016 07:38:49 -0600 Subject: [PATCH 101/126] closes #118 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index aca02d2..1126547 100644 --- a/README.md +++ b/README.md @@ -34,5 +34,5 @@ But, if the `tooltip` attribute is in conflict with another angular directive, y #### Event Calbacks ```html - + ``` From 77f4b7093a78f53bc0afbe658b0417c20c1ff27e Mon Sep 17 00:00:00 2001 From: Domenico Date: Thu, 21 Jan 2016 12:02:06 +0100 Subject: [PATCH 102/126] add ticksLabels on watchers array --- slider.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/slider.js b/slider.js index 57b10d6..14d1ab0 100644 --- a/slider.js +++ b/slider.js @@ -200,7 +200,7 @@ angular.module('ui.bootstrap-slider', []) } - var watchers = ['min', 'max', 'step', 'range', 'scale']; + var watchers = ['min', 'max', 'step', 'range', 'scale', 'ticksLabels']; angular.forEach(watchers, function (prop) { $scope.$watch(prop, function () { slider = initSlider(); From 7e2c75130af44ca220666b78cec87226ac457f69 Mon Sep 17 00:00:00 2001 From: Martin Hesslund Date: Fri, 22 Jan 2016 10:04:43 +0100 Subject: [PATCH 103/126] Add .DS_Store to ignore --- .gitignore | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index c570498..c18fb5a 100644 --- a/.gitignore +++ b/.gitignore @@ -8,4 +8,6 @@ node_modules # jetbrains # ############# .idea -*.iml \ No newline at end of file +*.iml + +.DS_STORE From 1f8206256ab9613bd7135aba93e3049d1bbec54a Mon Sep 17 00:00:00 2001 From: Martin Hesslund Date: Fri, 22 Jan 2016 10:04:57 +0100 Subject: [PATCH 104/126] Update to version 6 of the slider --- bower.json | 2 +- test.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bower.json b/bower.json index 249049b..43362f1 100644 --- a/bower.json +++ b/bower.json @@ -22,7 +22,7 @@ "tests" ], "dependencies": { - "seiyria-bootstrap-slider": ">= 5.2 < 6.0", + "seiyria-bootstrap-slider": ">= 5.2 < 7.0", "angular": ">= 1.3 < 1.5" }, "devDependencies": { diff --git a/test.html b/test.html index ce834ea..eca344b 100644 --- a/test.html +++ b/test.html @@ -204,7 +204,7 @@ - + From 1713f3773cebc8aa4af0722642958dda0140e046 Mon Sep 17 00:00:00 2001 From: Konstantin Startsev Date: Mon, 25 Jan 2016 21:51:05 +0600 Subject: [PATCH 105/126] reverting pull/117 --- README.md | 2 +- bower.json | 2 +- package.json | 2 +- slider.js | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 1126547..8bb0abd 100644 --- a/README.md +++ b/README.md @@ -34,5 +34,5 @@ But, if the `tooltip` attribute is in conflict with another angular directive, y #### Event Calbacks ```html - + ``` diff --git a/bower.json b/bower.json index 43362f1..194965e 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "angular-bootstrap-slider", - "version": "0.1.7", + "version": "0.1.8", "authors": [ "Kyle Kemp " ], diff --git a/package.json b/package.json index f9d6202..a24483b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "angular-bootstrap-slider", - "version": "0.1.7", + "version": "0.1.8", "description": "An angular directive for seiyria-bootstrap-slider", "main": "slider.js", "dependencies": { diff --git a/slider.js b/slider.js index 14d1ab0..9f90364 100644 --- a/slider.js +++ b/slider.js @@ -160,11 +160,11 @@ angular.module('ui.bootstrap-slider', []) slideStop: 'onStopSlide' }; angular.forEach(sliderEvents, function (sliderEventAttr, sliderEvent) { - var fn = $parse(attrs[sliderEventAttr.toLowerCase()]); + var fn = $parse(attrs[sliderEventAttr]); slider.on(sliderEvent, function (ev) { if ($scope[sliderEventAttr]) { $scope.$apply(function () { - fn($scope.$parent, { $event: sliderEvent, value: ev }); + fn($scope.$parent, { $event: ev, value: ev }); }); } }); From 86b368a83a1f384de7e416f0a4a25e970f030289 Mon Sep 17 00:00:00 2001 From: Konstantin Startsev Date: Mon, 25 Jan 2016 22:56:03 +0600 Subject: [PATCH 106/126] + bump version --- bower.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bower.json b/bower.json index 194965e..c7fef2d 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "angular-bootstrap-slider", - "version": "0.1.8", + "version": "0.1.24", "authors": [ "Kyle Kemp " ], diff --git a/package.json b/package.json index a24483b..1a40fbd 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "angular-bootstrap-slider", - "version": "0.1.8", + "version": "0.1.24", "description": "An angular directive for seiyria-bootstrap-slider", "main": "slider.js", "dependencies": { From 6596babd792245d6e6b203d46e50a3fa7ffe793b Mon Sep 17 00:00:00 2001 From: Konstantin Startsev Date: Thu, 4 Feb 2016 16:34:43 +0600 Subject: [PATCH 107/126] + added slider:refresh event --- bower.json | 2 +- package.json | 2 +- slider.js | 9 +++++++-- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/bower.json b/bower.json index c7fef2d..7c0f9a4 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "angular-bootstrap-slider", - "version": "0.1.24", + "version": "0.1.25", "authors": [ "Kyle Kemp " ], diff --git a/package.json b/package.json index 1a40fbd..1926d09 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "angular-bootstrap-slider", - "version": "0.1.24", + "version": "0.1.25", "description": "An angular directive for seiyria-bootstrap-slider", "main": "slider.js", "dependencies": { diff --git a/slider.js b/slider.js index 9f90364..4479f6c 100644 --- a/slider.js +++ b/slider.js @@ -207,8 +207,13 @@ angular.module('ui.bootstrap-slider', []) }); }); - $scope.$on('slider:relayout', function() { - slider.relayout(); + var globalEvents = ['relayout', 'refresh']; + angular.forEach(globalEvents, function(event) { + if(angular.isFunction(slider[event])) { + $scope.$on('slider:' + event, function () { + slider[event](); + }); + } }); } }; From dac19315b15f22cd42dddeeb040a9ae0c7c479fe Mon Sep 17 00:00:00 2001 From: Konstantin Startsev Date: Fri, 5 Feb 2016 15:49:48 +0600 Subject: [PATCH 108/126] + added slider:resize event --- bower.json | 2 +- package.json | 2 +- slider.js | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/bower.json b/bower.json index 7c0f9a4..9605788 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "angular-bootstrap-slider", - "version": "0.1.25", + "version": "0.1.26", "authors": [ "Kyle Kemp " ], diff --git a/package.json b/package.json index 1926d09..7add213 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "angular-bootstrap-slider", - "version": "0.1.25", + "version": "0.1.26", "description": "An angular directive for seiyria-bootstrap-slider", "main": "slider.js", "dependencies": { diff --git a/slider.js b/slider.js index 4479f6c..e13c7c6 100644 --- a/slider.js +++ b/slider.js @@ -207,7 +207,7 @@ angular.module('ui.bootstrap-slider', []) }); }); - var globalEvents = ['relayout', 'refresh']; + var globalEvents = ['relayout', 'refresh', 'resize']; angular.forEach(globalEvents, function(event) { if(angular.isFunction(slider[event])) { $scope.$on('slider:' + event, function () { From a88b10f12a931948c5a6d164b781ff0d55877483 Mon Sep 17 00:00:00 2001 From: Georgi Hristozov Date: Thu, 18 Feb 2016 17:40:37 +0200 Subject: [PATCH 109/126] Allow use of Angular 1.5. --- bower.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bower.json b/bower.json index 9605788..34b9601 100644 --- a/bower.json +++ b/bower.json @@ -23,7 +23,7 @@ ], "dependencies": { "seiyria-bootstrap-slider": ">= 5.2 < 7.0", - "angular": ">= 1.3 < 1.5" + "angular": ">= 1.3 < 1.6" }, "devDependencies": { "bootstrap": "~3.3.6" From 42c9a70eccbd2abd7d72221544131cdc5c6e879e Mon Sep 17 00:00:00 2001 From: Zeeshan Ali Date: Fri, 29 Apr 2016 16:36:26 -0400 Subject: [PATCH 110/126] Adding support for AMD & CommonJS. --- slider.js | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/slider.js b/slider.js index e13c7c6..e1c40cd 100644 --- a/slider.js +++ b/slider.js @@ -1,3 +1,13 @@ +(function(factory) { + if (typeof define === 'function' && define.amd) { + define(['angular', 'bootstrapSlider'], factory); + } else if (typeof module === 'object' && module.exports) { + module.exports = factory(require('angular'), require('bootstrapSlider')); + } else if (window) { + factory(window.angular, window.Slider); + } +})(function (angular, Slider) { + angular.module('ui.bootstrap-slider', []) .directive('slider', ['$parse', '$timeout', '$rootScope', function ($parse, $timeout, $rootScope) { return { @@ -219,3 +229,4 @@ angular.module('ui.bootstrap-slider', []) }; }]) ; +}); \ No newline at end of file From ec3bd45ab3f4d42619fbac03a7721531e78ac15f Mon Sep 17 00:00:00 2001 From: super-ienien Date: Mon, 9 May 2016 22:48:58 +0200 Subject: [PATCH 111/126] Update slider.js It should be this nomenclature to load properly with a tool like require.js --- slider.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/slider.js b/slider.js index e1c40cd..4db8bdc 100644 --- a/slider.js +++ b/slider.js @@ -1,6 +1,6 @@ (function(factory) { if (typeof define === 'function' && define.amd) { - define(['angular', 'bootstrapSlider'], factory); + define(['angular', 'bootstrap-slider'], factory); } else if (typeof module === 'object' && module.exports) { module.exports = factory(require('angular'), require('bootstrapSlider')); } else if (window) { @@ -229,4 +229,4 @@ angular.module('ui.bootstrap-slider', []) }; }]) ; -}); \ No newline at end of file +}); From da07239e203bba7ebde400a65518eb72e3a07c4c Mon Sep 17 00:00:00 2001 From: super-ienien Date: Mon, 9 May 2016 22:50:22 +0200 Subject: [PATCH 112/126] Update slider.js --- slider.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/slider.js b/slider.js index 4db8bdc..b0e7945 100644 --- a/slider.js +++ b/slider.js @@ -2,7 +2,7 @@ if (typeof define === 'function' && define.amd) { define(['angular', 'bootstrap-slider'], factory); } else if (typeof module === 'object' && module.exports) { - module.exports = factory(require('angular'), require('bootstrapSlider')); + module.exports = factory(require('angular'), require('bootstrap-slider')); } else if (window) { factory(window.angular, window.Slider); } From 5dc08ca9485b7659967b50532f719465b14aabb4 Mon Sep 17 00:00:00 2001 From: Girish Ramakrishnan Date: Sun, 11 Sep 2016 22:50:37 -0700 Subject: [PATCH 113/126] Watch the ticks array for changes --- slider.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/slider.js b/slider.js index b0e7945..1e3201e 100644 --- a/slider.js +++ b/slider.js @@ -210,7 +210,7 @@ angular.module('ui.bootstrap-slider', []) } - var watchers = ['min', 'max', 'step', 'range', 'scale', 'ticksLabels']; + var watchers = ['min', 'max', 'step', 'range', 'scale', 'ticksLabels', 'ticks']; angular.forEach(watchers, function (prop) { $scope.$watch(prop, function () { slider = initSlider(); From 647ef04d09e1a3efaa3014ea0528ff8d37713760 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Perreau?= Date: Wed, 14 Sep 2016 10:18:30 +0200 Subject: [PATCH 114/126] Added support for bootstrap-slider "rangeHighlights" parameter. --- slider.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/slider.js b/slider.js index 1e3201e..02bc0ab 100644 --- a/slider.js +++ b/slider.js @@ -30,6 +30,7 @@ angular.module('ui.bootstrap-slider', []) ticksPositions: '=', scale: '=', focus: '=', + rangeHighlights: '=', formatter: '&', onStartSlide: '&', onStopSlide: '&', @@ -70,6 +71,7 @@ angular.module('ui.bootstrap-slider', []) setOption('ticks_labels', $scope.ticksLabels); setOption('ticks_snap_bounds', $scope.ticksSnapBounds); setOption('ticks_positions', $scope.ticksPositions); + setOption('rangeHighlights', $scope.rangeHighlights); setOption('scale', $scope.scale, 'linear'); setOption('focus', $scope.focus); @@ -210,7 +212,7 @@ angular.module('ui.bootstrap-slider', []) } - var watchers = ['min', 'max', 'step', 'range', 'scale', 'ticksLabels', 'ticks']; + var watchers = ['min', 'max', 'step', 'range', 'scale', 'ticksLabels', 'ticks', 'rangeHighlights']; angular.forEach(watchers, function (prop) { $scope.$watch(prop, function () { slider = initSlider(); From 8afeefe8d61516fa278a51cb3b8f5b67341833c2 Mon Sep 17 00:00:00 2001 From: Ryan Date: Fri, 7 Oct 2016 09:30:16 -0400 Subject: [PATCH 115/126] Update slider.js to prevent angular from being undefined when using requirejs --- slider.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/slider.js b/slider.js index 02bc0ab..822bfd4 100644 --- a/slider.js +++ b/slider.js @@ -1,12 +1,12 @@ (function(factory) { if (typeof define === 'function' && define.amd) { - define(['angular', 'bootstrap-slider'], factory); + define(['bootstrap-slider', 'angular'], factory); } else if (typeof module === 'object' && module.exports) { - module.exports = factory(require('angular'), require('bootstrap-slider')); + module.exports = factory(require('bootstrap-slider'), require('angular')); } else if (window) { - factory(window.angular, window.Slider); + factory(window.Slider); } -})(function (angular, Slider) { +})(function (Slider) { angular.module('ui.bootstrap-slider', []) .directive('slider', ['$parse', '$timeout', '$rootScope', function ($parse, $timeout, $rootScope) { From 9bcec1bca61abb8e24b63b01aeb48a9b41c0c4d8 Mon Sep 17 00:00:00 2001 From: Ryan Date: Tue, 18 Oct 2016 13:13:22 -0400 Subject: [PATCH 116/126] add ticks_tooltip to angular wrapper --- slider.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/slider.js b/slider.js index 822bfd4..b947097 100644 --- a/slider.js +++ b/slider.js @@ -28,6 +28,7 @@ angular.module('ui.bootstrap-slider', []) ticksLabels: '=', ticksSnapBounds: '=', ticksPositions: '=', + ticksTooltip: "=", scale: '=', focus: '=', rangeHighlights: '=', @@ -71,6 +72,7 @@ angular.module('ui.bootstrap-slider', []) setOption('ticks_labels', $scope.ticksLabels); setOption('ticks_snap_bounds', $scope.ticksSnapBounds); setOption('ticks_positions', $scope.ticksPositions); + setOption('ticks_tooltip', $scope.ticksTooltip, false); setOption('rangeHighlights', $scope.rangeHighlights); setOption('scale', $scope.scale, 'linear'); setOption('focus', $scope.focus); @@ -229,6 +231,5 @@ angular.module('ui.bootstrap-slider', []) }); } }; - }]) -; -}); + }]); +}); \ No newline at end of file From 25a9a8721e96467bab658f1b4f1e57c743b2bb54 Mon Sep 17 00:00:00 2001 From: Austin Drummond Date: Thu, 8 Dec 2016 13:38:22 -0500 Subject: [PATCH 117/126] Update slider to version 9 --- bower.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bower.json b/bower.json index 34b9601..802c7ab 100644 --- a/bower.json +++ b/bower.json @@ -22,7 +22,7 @@ "tests" ], "dependencies": { - "seiyria-bootstrap-slider": ">= 5.2 < 7.0", + "seiyria-bootstrap-slider": ">= 5.2 < 10.0", "angular": ">= 1.3 < 1.6" }, "devDependencies": { From 5512aadf67682d5b99e19cf507d0797a6236935d Mon Sep 17 00:00:00 2001 From: Daniel Holzmann Date: Wed, 14 Dec 2016 13:31:30 +0100 Subject: [PATCH 118/126] move dependencies to devDependencies From the looks of it, I don't think these dependencies are actually needed if one just wants to use this package, so I've moved them to `devDependencies` --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 7add213..90b1312 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "version": "0.1.26", "description": "An angular directive for seiyria-bootstrap-slider", "main": "slider.js", - "dependencies": { + "devDependencies": { "http-server": "^0.8.5", "jasmine-core": "^2.3.4", "karma": "^0.13.15", @@ -11,7 +11,7 @@ "karma-jasmine": "^0.3.6", "protractor": "^3.0.0" }, - "devDependencies": {}, + "dependencies": {}, "scripts": { "start": "http-server -a localhost -p 31337 -c-1", "test": "npm run protractor", From 2fa8f6cd97f082d21304fd257a4b23a77ba6b08f Mon Sep 17 00:00:00 2001 From: Alan Shum Date: Tue, 28 Feb 2017 11:23:51 -0800 Subject: [PATCH 119/126] check if undefined instead of only checking for jquery existence --- slider.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/slider.js b/slider.js index b947097..536d1b6 100644 --- a/slider.js +++ b/slider.js @@ -130,7 +130,7 @@ angular.module('ui.bootstrap-slider', []) } // check if slider jQuery plugin exists - if ('$' in window && $.fn.slider) { + if (typeof window.$ !== 'undefined' && typeof $.fn === 'object' && $.fn.slider) // adding methods to jQuery slider plugin prototype $.fn.slider.constructor.prototype.disable = function () { this.picker.off(); From e48ded8e170999e4c61cfd13e7d6c86837afce43 Mon Sep 17 00:00:00 2001 From: Alan Shum Date: Tue, 28 Feb 2017 11:25:52 -0800 Subject: [PATCH 120/126] check if jquery is defined before calling slider function --- slider.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/slider.js b/slider.js index 536d1b6..9a96298 100644 --- a/slider.js +++ b/slider.js @@ -130,7 +130,7 @@ angular.module('ui.bootstrap-slider', []) } // check if slider jQuery plugin exists - if (typeof window.$ !== 'undefined' && typeof $.fn === 'object' && $.fn.slider) + if (typeof window.$ !== 'undefined' && typeof $.fn === 'object' && $.fn.slider) { // adding methods to jQuery slider plugin prototype $.fn.slider.constructor.prototype.disable = function () { this.picker.off(); From 8c0ee67e7c9262592146fac1406f2de6d631edfe Mon Sep 17 00:00:00 2001 From: Jan Willem Logemann Date: Tue, 21 Mar 2017 15:27:46 +0100 Subject: [PATCH 121/126] Update bower.json Changed version constraint to allow newer angular versions --- bower.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bower.json b/bower.json index 802c7ab..e4cef3b 100644 --- a/bower.json +++ b/bower.json @@ -23,7 +23,7 @@ ], "dependencies": { "seiyria-bootstrap-slider": ">= 5.2 < 10.0", - "angular": ">= 1.3 < 1.6" + "angular": ">= 1.3 <=1.7" }, "devDependencies": { "bootstrap": "~3.3.6" From 3cd8b590626d738d5642b265d52386ffcd8ef4fa Mon Sep 17 00:00:00 2001 From: George DeCherney Date: Fri, 30 Nov 2018 13:32:22 -0500 Subject: [PATCH 122/126] updated depenencies. updated package.json to include needed dependencies from npm. updated test.html to reference node_modules --- bower.json | 3 ++- package.json | 10 +++++++--- test.html | 12 ++++++------ 3 files changed, 15 insertions(+), 10 deletions(-) diff --git a/bower.json b/bower.json index e4cef3b..0625583 100644 --- a/bower.json +++ b/bower.json @@ -26,6 +26,7 @@ "angular": ">= 1.3 <=1.7" }, "devDependencies": { - "bootstrap": "~3.3.6" + "bootstrap": "~3.3.6", + } } diff --git a/package.json b/package.json index 90b1312..54ac2bf 100644 --- a/package.json +++ b/package.json @@ -4,12 +4,16 @@ "description": "An angular directive for seiyria-bootstrap-slider", "main": "slider.js", "devDependencies": { - "http-server": "^0.8.5", + "http-server": "^0.11.1", "jasmine-core": "^2.3.4", - "karma": "^0.13.15", + "karma": "^3.1.1", "karma-chrome-launcher": "^0.2.1", "karma-jasmine": "^0.3.6", - "protractor": "^3.0.0" + "protractor": "^5.4.1", + "bootstrap-slider": "^10.3.2", + "angular": ">= 1.3 <=1.7", + "bootstrap": "~3.3.6", + "jquery": "3.3.1" }, "dependencies": {}, "scripts": { diff --git a/test.html b/test.html index eca344b..61ad57b 100644 --- a/test.html +++ b/test.html @@ -1,8 +1,8 @@ Angular Bootstrap Slider test - - + + @@ -201,10 +201,10 @@ - - - - + + + + From 6d83e8912a025366e5a5cb877ec4ba96416b0121 Mon Sep 17 00:00:00 2001 From: George DeCherney Date: Fri, 30 Nov 2018 13:32:36 -0500 Subject: [PATCH 123/126] added package-lock file --- package-lock.json | 3822 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 3822 insertions(+) create mode 100644 package-lock.json diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..7bedc9f --- /dev/null +++ b/package-lock.json @@ -0,0 +1,3822 @@ +{ + "name": "angular-bootstrap-slider", + "version": "0.1.26", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@types/node": { + "version": "6.14.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-6.14.2.tgz", + "integrity": "sha512-JWB3xaVfsfnFY8Ofc9rTB/op0fqqTSqy4vBcVk1LuRJvta7KTX+D//fCkiTMeLGhdr2EbFZzQjC97gvmPilk9Q==", + "dev": true + }, + "@types/q": { + "version": "0.0.32", + "resolved": "http://registry.npmjs.org/@types/q/-/q-0.0.32.tgz", + "integrity": "sha1-vShOV8hPEyXacCur/IKlMoGQwMU=", + "dev": true + }, + "@types/selenium-webdriver": { + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/@types/selenium-webdriver/-/selenium-webdriver-3.0.13.tgz", + "integrity": "sha512-rI0LGoMiZGUM+tjDakQpwZOvcmQoubiJ7hxqrYU12VRxBuGGvOThxrBOU/QmJKlKg1WG6FMzuvcEyLffvVSsmw==", + "dev": true + }, + "accepts": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", + "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", + "dev": true, + "requires": { + "mime-types": "~2.1.18", + "negotiator": "0.6.1" + } + }, + "adm-zip": { + "version": "0.4.13", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.13.tgz", + "integrity": "sha512-fERNJX8sOXfel6qCBCMPvZLzENBEhZTzKqg6vrOW5pvoEaQuJhRU4ndTAh6lHOxn1I6jnz2NHra56ZODM751uw==", + "dev": true + }, + "after": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", + "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=", + "dev": true + }, + "agent-base": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz", + "integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==", + "dev": true, + "requires": { + "es6-promisify": "^5.0.0" + } + }, + "ajv": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.6.1.tgz", + "integrity": "sha512-ZoJjft5B+EJBjUyu9C9Hc0OZyPZSSlOF+plzouTrg6UlA8f+e/n8NIgBFG/9tppJtpPWfthHakK7juJdNDODww==", + "dev": true, + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "angular": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/angular/-/angular-1.7.5.tgz", + "integrity": "sha512-760183yxtGzni740IBTieNuWLtPNAoMqvmC0Z62UoU0I3nqk+VJuO3JbQAXOyvo3Oy/ZsdNQwrSTh/B0OQZjNw==", + "dev": true + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true + }, + "array-slice": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", + "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=", + "dev": true + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "requires": { + "array-uniq": "^1.0.1" + } + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "arraybuffer.slice": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", + "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==", + "dev": true + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true + }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "dev": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true + }, + "async": { + "version": "1.5.2", + "resolved": "http://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + }, + "async-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", + "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", + "dev": true + }, + "async-limiter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", + "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true + }, + "aws4": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", + "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", + "dev": true + }, + "backo2": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", + "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "base64-arraybuffer": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", + "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=", + "dev": true + }, + "base64id": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", + "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "better-assert": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", + "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", + "dev": true, + "requires": { + "callsite": "1.0.0" + } + }, + "binary-extensions": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.12.0.tgz", + "integrity": "sha512-DYWGk01lDcxeS/K9IHPGWfT8PsJmbXRtRd2Sx72Tnb8pcYZQFF1oSDb8hJtS1vhp212q1Rzi5dUf9+nq0o9UIg==", + "dev": true + }, + "blob": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", + "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==", + "dev": true + }, + "blocking-proxy": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/blocking-proxy/-/blocking-proxy-1.0.1.tgz", + "integrity": "sha512-KE8NFMZr3mN2E0HcvCgRtX7DjhiIQrwle+nSVJVC/yqFb9+xznHl2ZcoBp2L9qzkI4t4cBFJ1efXF8Dwi132RA==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "bluebird": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz", + "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==", + "dev": true + }, + "body-parser": { + "version": "1.18.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", + "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", + "dev": true, + "requires": { + "bytes": "3.0.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "~1.6.3", + "iconv-lite": "0.4.23", + "on-finished": "~2.3.0", + "qs": "6.5.2", + "raw-body": "2.3.3", + "type-is": "~1.6.16" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true + } + } + }, + "bootstrap": { + "version": "3.3.7", + "resolved": "http://registry.npmjs.org/bootstrap/-/bootstrap-3.3.7.tgz", + "integrity": "sha1-WjiTlFSfIzMIdaOxUGVldPip63E=", + "dev": true + }, + "bootstrap-slider": { + "version": "10.3.2", + "resolved": "https://registry.npmjs.org/bootstrap-slider/-/bootstrap-slider-10.3.2.tgz", + "integrity": "sha512-81SOegSEW+0lPng/jsaUeFbQ8IcuGNSdkaOXOpu+hGp02A0XyfAAjg3dTAZ++Im4Ik8V2R04KOYuihG0S1t5TA==", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "browserstack": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/browserstack/-/browserstack-1.5.1.tgz", + "integrity": "sha512-O8VMT64P9NOLhuIoD4YngyxBURefaSdR4QdhG8l6HZ9VxtU7jc3m6jLufFwKA5gaf7fetfB2TnRJnMxyob+heg==", + "dev": true, + "requires": { + "https-proxy-agent": "^2.2.1" + } + }, + "buffer-alloc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "dev": true, + "requires": { + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" + } + }, + "buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", + "dev": true + }, + "buffer-fill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=", + "dev": true + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "dev": true + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + } + }, + "callsite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", + "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=", + "dev": true + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "chokidar": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz", + "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.0", + "braces": "^2.3.0", + "fsevents": "^1.2.2", + "glob-parent": "^3.1.0", + "inherits": "^2.0.1", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "lodash.debounce": "^4.0.8", + "normalize-path": "^2.1.1", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.0.0", + "upath": "^1.0.5" + } + }, + "circular-json": { + "version": "0.5.9", + "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.5.9.tgz", + "integrity": "sha512-4ivwqHpIFJZBuhN3g/pEcdbnGUywkBblloGbkglyloVjjR3uT6tieI89MVOfbP2tHX5sgb01FuLgAOzebNlJNQ==", + "dev": true + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "colors": { + "version": "1.0.3", + "resolved": "http://registry.npmjs.org/colors/-/colors-1.0.3.tgz", + "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=", + "dev": true + }, + "combine-lists": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/combine-lists/-/combine-lists-1.0.1.tgz", + "integrity": "sha1-RYwH4J4NkA/Ci3Cj/sLazR0st/Y=", + "dev": true, + "requires": { + "lodash": "^4.5.0" + } + }, + "combined-stream": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", + "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "component-bind": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", + "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=", + "dev": true + }, + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, + "component-inherit": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", + "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "connect": { + "version": "3.6.6", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz", + "integrity": "sha1-Ce/2xVr3I24TcTWnJXSFi2eG9SQ=", + "dev": true, + "requires": { + "debug": "2.6.9", + "finalhandler": "1.1.0", + "parseurl": "~1.3.2", + "utils-merge": "1.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "dev": true + }, + "cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", + "dev": true + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true + }, + "core-js": { + "version": "2.5.7", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz", + "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==", + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "corser": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/corser/-/corser-2.0.1.tgz", + "integrity": "sha1-jtolLsqrWEDc2XXOuQ2TcMgZ/4c=", + "dev": true + }, + "custom-event": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", + "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=", + "dev": true + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "date-format": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-1.2.0.tgz", + "integrity": "sha1-YV6CjiM90aubua4JUODOzPpuytg=", + "dev": true + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "del": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", + "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", + "dev": true, + "requires": { + "globby": "^5.0.0", + "is-path-cwd": "^1.0.0", + "is-path-in-cwd": "^1.0.0", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "rimraf": "^2.2.8" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, + "di": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", + "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=", + "dev": true + }, + "dom-serialize": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", + "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", + "dev": true, + "requires": { + "custom-event": "~1.0.0", + "ent": "~2.2.0", + "extend": "^3.0.0", + "void-elements": "^2.0.0" + } + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "ecstatic": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/ecstatic/-/ecstatic-3.3.0.tgz", + "integrity": "sha512-EblWYTd+wPIAMQ0U4oYJZ7QBypT9ZUIwpqli0bKDjeIIQnXDBK2dXtZ9yzRCOlkW1HkO8gn7/FxLK1yPIW17pw==", + "dev": true, + "requires": { + "he": "^1.1.1", + "mime": "^1.6.0", + "minimist": "^1.1.0", + "url-join": "^2.0.5" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true + }, + "engine.io": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.2.1.tgz", + "integrity": "sha512-+VlKzHzMhaU+GsCIg4AoXF1UdDFjHHwMmMKqMJNDNLlUlejz58FCy4LBqB2YVJskHGYl06BatYWKP2TVdVXE5w==", + "dev": true, + "requires": { + "accepts": "~1.3.4", + "base64id": "1.0.0", + "cookie": "0.3.1", + "debug": "~3.1.0", + "engine.io-parser": "~2.1.0", + "ws": "~3.3.1" + } + }, + "engine.io-client": { + "version": "3.2.1", + "resolved": "http://registry.npmjs.org/engine.io-client/-/engine.io-client-3.2.1.tgz", + "integrity": "sha512-y5AbkytWeM4jQr7m/koQLc5AxpRKC1hEVUb/s1FUAWEJq5AzJJ4NLvzuKPuxtDi5Mq755WuDvZ6Iv2rXj4PTzw==", + "dev": true, + "requires": { + "component-emitter": "1.2.1", + "component-inherit": "0.0.3", + "debug": "~3.1.0", + "engine.io-parser": "~2.1.1", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "ws": "~3.3.1", + "xmlhttprequest-ssl": "~1.5.4", + "yeast": "0.1.2" + } + }, + "engine.io-parser": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.3.tgz", + "integrity": "sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA==", + "dev": true, + "requires": { + "after": "0.8.2", + "arraybuffer.slice": "~0.0.7", + "base64-arraybuffer": "0.1.5", + "blob": "0.0.5", + "has-binary2": "~1.0.2" + } + }, + "ent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", + "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", + "dev": true + }, + "es6-promise": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.5.tgz", + "integrity": "sha512-n6wvpdE43VFtJq+lUDYDBFUwV8TZbuGXLV4D6wKafg13ldznKsyEvatubnmUe31zcvelSzOHF+XbaT+Bl9ObDg==", + "dev": true + }, + "es6-promisify": { + "version": "5.0.0", + "resolved": "http://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", + "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", + "dev": true, + "requires": { + "es6-promise": "^4.0.3" + } + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "eventemitter3": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.0.tgz", + "integrity": "sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA==", + "dev": true + }, + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "dev": true + }, + "expand-braces": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/expand-braces/-/expand-braces-0.1.2.tgz", + "integrity": "sha1-SIsdHSRRyz06axks/AMPRMWFX+o=", + "dev": true, + "requires": { + "array-slice": "^0.2.3", + "array-unique": "^0.2.1", + "braces": "^0.1.2" + }, + "dependencies": { + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "braces": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-0.1.5.tgz", + "integrity": "sha1-wIVxEIUpHYt1/ddOqw+FlygHEeY=", + "dev": true, + "requires": { + "expand-range": "^0.1.0" + } + } + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "expand-range": { + "version": "0.1.1", + "resolved": "http://registry.npmjs.org/expand-range/-/expand-range-0.1.1.tgz", + "integrity": "sha1-TLjtoJk8pW+k9B/ELzy7TMrf8EQ=", + "dev": true, + "requires": { + "is-number": "^0.1.1", + "repeat-string": "^0.2.2" + }, + "dependencies": { + "is-number": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-0.1.1.tgz", + "integrity": "sha1-aaevEWlj1HIG7JvZtIoUIW8eOAY=", + "dev": true + }, + "repeat-string": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-0.2.2.tgz", + "integrity": "sha1-x6jTI2BoNiBZp+RlH8aITosftK4=", + "dev": true + } + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true + }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", + "dev": true + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "finalhandler": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", + "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.1", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "statuses": "~1.3.1", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "statuses": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", + "dev": true + } + } + }, + "follow-redirects": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", + "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", + "dev": true, + "requires": { + "debug": "=3.1.0" + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "requires": { + "map-cache": "^0.2.2" + } + }, + "fs-access": { + "version": "1.0.1", + "resolved": "http://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz", + "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=", + "dev": true, + "requires": { + "null-check": "^1.0.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz", + "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==", + "dev": true, + "optional": true, + "requires": { + "nan": "^2.9.2", + "node-pre-gyp": "^0.10.0" + }, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "dev": true + }, + "aproba": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "chownr": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "dev": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "debug": { + "version": "2.6.9", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ms": "2.0.0" + } + }, + "deep-extend": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "optional": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.3", + "bundled": true, + "dev": true, + "optional": true + }, + "fs-minipass": { + "version": "1.2.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "glob": { + "version": "7.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "iconv-lite": { + "version": "0.4.21", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safer-buffer": "^2.1.0" + } + }, + "ignore-walk": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true, + "dev": true + }, + "ini": { + "version": "1.3.5", + "bundled": true, + "dev": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "dev": true + }, + "minipass": { + "version": "2.2.4", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "^5.1.1", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "needle": { + "version": "2.2.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "debug": "^2.1.2", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, + "node-pre-gyp": { + "version": "0.10.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.0", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.1.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "npm-bundled": { + "version": "1.0.3", + "bundled": true, + "dev": true, + "optional": true + }, + "npm-packlist": { + "version": "1.1.10", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "osenv": { + "version": "0.1.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "process-nextick-args": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "rc": { + "version": "1.2.7", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "deep-extend": "^0.5.1", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "rimraf": { + "version": "2.6.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "glob": "^7.0.5" + } + }, + "safe-buffer": { + "version": "5.1.1", + "bundled": true, + "dev": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "sax": { + "version": "1.2.4", + "bundled": true, + "dev": true, + "optional": true + }, + "semver": { + "version": "5.5.0", + "bundled": true, + "dev": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "tar": { + "version": "4.4.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "chownr": "^1.0.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.2.4", + "minizlib": "^1.1.0", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.1", + "yallist": "^3.0.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "wide-align": { + "version": "1.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "string-width": "^1.0.2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "yallist": { + "version": "3.0.2", + "bundled": true, + "dev": true + } + } + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "globby": { + "version": "5.0.0", + "resolved": "http://registry.npmjs.org/globby/-/globby-5.0.0.tgz", + "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", + "dev": true, + "requires": { + "array-union": "^1.0.1", + "arrify": "^1.0.0", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "graceful-fs": { + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", + "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", + "dev": true + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true + }, + "har-validator": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", + "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "dev": true, + "requires": { + "ajv": "^6.5.5", + "har-schema": "^2.0.0" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "has-binary2": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", + "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", + "dev": true, + "requires": { + "isarray": "2.0.1" + }, + "dependencies": { + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", + "dev": true + } + } + }, + "has-cors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", + "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=", + "dev": true + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true + }, + "http-errors": { + "version": "1.6.3", + "resolved": "http://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "http-proxy": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.17.0.tgz", + "integrity": "sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g==", + "dev": true, + "requires": { + "eventemitter3": "^3.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + } + }, + "http-server": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/http-server/-/http-server-0.11.1.tgz", + "integrity": "sha512-6JeGDGoujJLmhjiRGlt8yK8Z9Kl0vnl/dQoQZlc4oeqaUoAKQg94NILLfrY3oWzSyFaQCVNTcKE5PZ3cH8VP9w==", + "dev": true, + "requires": { + "colors": "1.0.3", + "corser": "~2.0.0", + "ecstatic": "^3.0.0", + "http-proxy": "^1.8.1", + "opener": "~1.4.0", + "optimist": "0.6.x", + "portfinder": "^1.0.13", + "union": "~0.4.3" + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "https-proxy-agent": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz", + "integrity": "sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ==", + "dev": true, + "requires": { + "agent-base": "^4.1.0", + "debug": "^3.1.0" + } + }, + "iconv-lite": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", + "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=", + "dev": true + }, + "indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "dev": true + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-glob": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", + "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-path-cwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", + "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", + "dev": true + }, + "is-path-in-cwd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", + "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", + "dev": true, + "requires": { + "is-path-inside": "^1.0.0" + } + }, + "is-path-inside": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", + "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", + "dev": true, + "requires": { + "path-is-inside": "^1.0.1" + } + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isbinaryfile": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.3.tgz", + "integrity": "sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw==", + "dev": true, + "requires": { + "buffer-alloc": "^1.2.0" + } + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "jasmine": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-2.8.0.tgz", + "integrity": "sha1-awicChFXax8W3xG4AUbZHU6Lij4=", + "dev": true, + "requires": { + "exit": "^0.1.2", + "glob": "^7.0.6", + "jasmine-core": "~2.8.0" + }, + "dependencies": { + "jasmine-core": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.8.0.tgz", + "integrity": "sha1-vMl5rh+f0FcB5F5S5l06XWPxok4=", + "dev": true + } + } + }, + "jasmine-core": { + "version": "2.99.1", + "resolved": "http://registry.npmjs.org/jasmine-core/-/jasmine-core-2.99.1.tgz", + "integrity": "sha1-5kAN8ea1bhMLYcS80JPap/boyhU=", + "dev": true + }, + "jasminewd2": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/jasminewd2/-/jasminewd2-2.2.0.tgz", + "integrity": "sha1-43zwsX8ZnM4jvqcbIDk5Uka07E4=", + "dev": true + }, + "jquery": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.3.1.tgz", + "integrity": "sha512-Ubldcmxp5np52/ENotGxlLe6aGMvmF4R8S6tZjsP6Knsaxd/xp3Zrh50cG93lR6nPXyUFwzN3ZSOQI0wRJNdGg==", + "dev": true + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "jszip": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.1.5.tgz", + "integrity": "sha512-5W8NUaFRFRqTOL7ZDDrx5qWHJyBXy6velVudIzQUSoqAAYqzSh2Z7/m0Rf1QbmQJccegD0r+YZxBjzqoBiEeJQ==", + "dev": true, + "requires": { + "core-js": "~2.3.0", + "es6-promise": "~3.0.2", + "lie": "~3.1.0", + "pako": "~1.0.2", + "readable-stream": "~2.0.6" + }, + "dependencies": { + "core-js": { + "version": "2.3.0", + "resolved": "http://registry.npmjs.org/core-js/-/core-js-2.3.0.tgz", + "integrity": "sha1-+rg/uwstjchfpjbEudNMdUIMbWU=", + "dev": true + }, + "es6-promise": { + "version": "3.0.2", + "resolved": "http://registry.npmjs.org/es6-promise/-/es6-promise-3.0.2.tgz", + "integrity": "sha1-AQ1YWEI6XxGJeWZfRkhqlcbuK7Y=", + "dev": true + }, + "process-nextick-args": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", + "dev": true + }, + "readable-stream": { + "version": "2.0.6", + "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", + "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "string_decoder": "~0.10.x", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + } + } + }, + "karma": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/karma/-/karma-3.1.1.tgz", + "integrity": "sha512-NetT3wPCQMNB36uiL9LLyhrOt8SQwrEKt0xD3+KpTCfm0VxVyUJdPL5oTq2Ic5ouemgL/Iz4wqXEbF3zea9kQQ==", + "dev": true, + "requires": { + "bluebird": "^3.3.0", + "body-parser": "^1.16.1", + "chokidar": "^2.0.3", + "colors": "^1.1.0", + "combine-lists": "^1.0.0", + "connect": "^3.6.0", + "core-js": "^2.2.0", + "di": "^0.0.1", + "dom-serialize": "^2.2.0", + "expand-braces": "^0.1.1", + "glob": "^7.1.1", + "graceful-fs": "^4.1.2", + "http-proxy": "^1.13.0", + "isbinaryfile": "^3.0.0", + "lodash": "^4.17.4", + "log4js": "^3.0.0", + "mime": "^2.3.1", + "minimatch": "^3.0.2", + "optimist": "^0.6.1", + "qjobs": "^1.1.4", + "range-parser": "^1.2.0", + "rimraf": "^2.6.0", + "safe-buffer": "^5.0.1", + "socket.io": "2.1.1", + "source-map": "^0.6.1", + "tmp": "0.0.33", + "useragent": "2.2.1" + }, + "dependencies": { + "colors": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.2.tgz", + "integrity": "sha512-rhP0JSBGYvpcNQj4s5AdShMeE5ahMop96cTeDl/v9qQQm2fYClE2QXZRi8wLzc+GmXSxdIqqbOIAhyObEXDbfQ==", + "dev": true + }, + "mime": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.0.tgz", + "integrity": "sha512-ikBcWwyqXQSHKtciCcctu9YfPbFYZ4+gbHEmE0Q8jzcTYQg5dHCr3g2wwAZjPoJfQVXZq6KXAjpXOTf5/cjT7w==", + "dev": true + } + } + }, + "karma-chrome-launcher": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-0.2.3.tgz", + "integrity": "sha1-TG1wDRY6nTTGGO/YeRi+SeekqMk=", + "dev": true, + "requires": { + "fs-access": "^1.0.0", + "which": "^1.2.1" + } + }, + "karma-jasmine": { + "version": "0.3.8", + "resolved": "http://registry.npmjs.org/karma-jasmine/-/karma-jasmine-0.3.8.tgz", + "integrity": "sha1-W2RXeRrZuJqhc/B54+vhuMgFI2w=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + }, + "lie": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", + "integrity": "sha1-mkNrLMd0bKWd56QfpGmz77dr2H4=", + "dev": true, + "requires": { + "immediate": "~3.0.5" + } + }, + "lodash": { + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", + "dev": true + }, + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", + "dev": true + }, + "log4js": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-3.0.6.tgz", + "integrity": "sha512-ezXZk6oPJCWL483zj64pNkMuY/NcRX5MPiB0zE6tjZM137aeusrOnW1ecxgF9cmwMWkBMhjteQxBPoZBh9FDxQ==", + "dev": true, + "requires": { + "circular-json": "^0.5.5", + "date-format": "^1.2.0", + "debug": "^3.1.0", + "rfdc": "^1.1.2", + "streamroller": "0.7.0" + } + }, + "lru-cache": { + "version": "2.2.4", + "resolved": "http://registry.npmjs.org/lru-cache/-/lru-cache-2.2.4.tgz", + "integrity": "sha1-bGWGGb7PFAMdDQtZSxYELOTcBj0=", + "dev": true + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "requires": { + "object-visit": "^1.0.0" + } + }, + "media-typer": { + "version": "0.3.0", + "resolved": "http://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true + }, + "mime-db": { + "version": "1.37.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz", + "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==", + "dev": true + }, + "mime-types": { + "version": "2.1.21", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz", + "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==", + "dev": true, + "requires": { + "mime-db": "~1.37.0" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "mixin-deep": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", + "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", + "dev": true, + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + } + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "nan": { + "version": "2.11.1", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.11.1.tgz", + "integrity": "sha512-iji6k87OSXa0CcrLl9z+ZiYSuR2o+c0bGuNmXdrhTQTakxytAFsC56SArGYoiHlJlFoHSnvmhpceZJaXkVuOtA==", + "dev": true, + "optional": true + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + } + }, + "negotiator": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", + "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", + "dev": true + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + }, + "null-check": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/null-check/-/null-check-1.0.0.tgz", + "integrity": "sha1-l33/1xdgErnsMNKjnbXPcqBDnt0=", + "dev": true + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "object-component": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", + "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=", + "dev": true + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "requires": { + "isobject": "^3.0.0" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "opener": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.4.3.tgz", + "integrity": "sha1-XG2ixdflgx6P+jlklQ+NZnSskLg=", + "dev": true + }, + "optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "dev": true, + "requires": { + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" + }, + "dependencies": { + "minimist": { + "version": "0.0.10", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", + "dev": true + } + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "http://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "pako": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.7.tgz", + "integrity": "sha512-3HNK5tW4x8o5mO8RuHZp3Ydw9icZXx0RANAOMzlMzx7LVXhMJ4mo3MOBpzyd7r/+RUu8BmndP47LXT+vzjtWcQ==", + "dev": true + }, + "parseqs": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", + "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", + "dev": true, + "requires": { + "better-assert": "~1.0.0" + } + }, + "parseuri": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", + "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", + "dev": true, + "requires": { + "better-assert": "~1.0.0" + } + }, + "parseurl": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", + "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=", + "dev": true + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "http://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "pify": { + "version": "2.3.0", + "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "^2.0.0" + } + }, + "portfinder": { + "version": "1.0.19", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.19.tgz", + "integrity": "sha512-23aeQKW9KgHe6citUrG3r9HjeX6vls0h713TAa+CwTKZwNIr/pD2ApaxYF4Um3ZZyq4ar+Siv3+fhoHaIwSOSw==", + "dev": true, + "requires": { + "async": "^1.5.2", + "debug": "^2.2.0", + "mkdirp": "0.5.x" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "dev": true + }, + "protractor": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/protractor/-/protractor-5.4.1.tgz", + "integrity": "sha512-ORey5ewQMYiXQxcQohsqEiKYOg/r5yJoJbt0tuROmmgajdg/CA3gTOZNIFJncUVMAJIk5YFqBBLUjKVmQO6tfA==", + "dev": true, + "requires": { + "@types/node": "^6.0.46", + "@types/q": "^0.0.32", + "@types/selenium-webdriver": "^3.0.0", + "blocking-proxy": "^1.0.0", + "browserstack": "^1.5.1", + "chalk": "^1.1.3", + "glob": "^7.0.3", + "jasmine": "2.8.0", + "jasminewd2": "^2.1.0", + "optimist": "~0.6.0", + "q": "1.4.1", + "saucelabs": "^1.5.0", + "selenium-webdriver": "3.6.0", + "source-map-support": "~0.4.0", + "webdriver-js-extender": "2.1.0", + "webdriver-manager": "^12.0.6" + }, + "dependencies": { + "webdriver-manager": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/webdriver-manager/-/webdriver-manager-12.1.0.tgz", + "integrity": "sha512-oEc5fmkpz6Yh6udhwir5m0eN5mgRPq9P/NU5YWuT3Up5slt6Zz+znhLU7q4+8rwCZz/Qq3Fgpr/4oao7NPCm2A==", + "dev": true, + "requires": { + "adm-zip": "^0.4.9", + "chalk": "^1.1.1", + "del": "^2.2.0", + "glob": "^7.0.3", + "ini": "^1.3.4", + "minimist": "^1.2.0", + "q": "^1.4.1", + "request": "^2.87.0", + "rimraf": "^2.5.2", + "semver": "^5.3.0", + "xml2js": "^0.4.17" + } + } + } + }, + "psl": { + "version": "1.1.29", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.29.tgz", + "integrity": "sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ==", + "dev": true + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "q": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.4.1.tgz", + "integrity": "sha1-VXBbzZPF82c1MMLCy8DCs63cKG4=", + "dev": true + }, + "qjobs": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", + "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", + "dev": true + }, + "qs": { + "version": "2.3.3", + "resolved": "http://registry.npmjs.org/qs/-/qs-2.3.3.tgz", + "integrity": "sha1-6eha2+ddoLvkyOBHaghikPhjtAQ=", + "dev": true + }, + "range-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", + "dev": true + }, + "raw-body": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", + "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", + "dev": true, + "requires": { + "bytes": "3.0.0", + "http-errors": "1.6.3", + "iconv-lite": "0.4.23", + "unpipe": "1.0.0" + } + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "repeat-element": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "request": { + "version": "2.88.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", + "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.0", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.4.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "dependencies": { + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true + } + } + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true + }, + "rfdc": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.1.2.tgz", + "integrity": "sha512-92ktAgvZhBzYTIK0Mja9uen5q5J3NRVMoDkJL2VMwq6SXjVCgqvQeVP2XAaUY6HT+XpQYeLSjb3UoitBryKmdA==", + "dev": true + }, + "rimraf": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "dev": true, + "requires": { + "glob": "^7.0.5" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "http://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "requires": { + "ret": "~0.1.10" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "saucelabs": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/saucelabs/-/saucelabs-1.5.0.tgz", + "integrity": "sha512-jlX3FGdWvYf4Q3LFfFWS1QvPg3IGCGWxIc8QBFdPTbpTJnt/v17FHXYVAn7C8sHf1yUXo2c7yIM0isDryfYtHQ==", + "dev": true, + "requires": { + "https-proxy-agent": "^2.2.1" + } + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + }, + "selenium-webdriver": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-3.6.0.tgz", + "integrity": "sha512-WH7Aldse+2P5bbFBO4Gle/nuQOdVwpHMTL6raL3uuBj/vPG07k6uzt3aiahu352ONBr5xXh0hDlM3LhtXPOC4Q==", + "dev": true, + "requires": { + "jszip": "^3.1.3", + "rimraf": "^2.5.4", + "tmp": "0.0.30", + "xml2js": "^0.4.17" + }, + "dependencies": { + "tmp": { + "version": "0.0.30", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.30.tgz", + "integrity": "sha1-ckGdSovn1s51FI/YsyTlk6cRwu0=", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.1" + } + } + } + }, + "semver": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", + "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", + "dev": true + }, + "set-value": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", + "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "requires": { + "kind-of": "^3.2.0" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "socket.io": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.1.1.tgz", + "integrity": "sha512-rORqq9c+7W0DAK3cleWNSyfv/qKXV99hV4tZe+gGLfBECw3XEhBy7x85F3wypA9688LKjtwO9pX9L33/xQI8yA==", + "dev": true, + "requires": { + "debug": "~3.1.0", + "engine.io": "~3.2.0", + "has-binary2": "~1.0.2", + "socket.io-adapter": "~1.1.0", + "socket.io-client": "2.1.1", + "socket.io-parser": "~3.2.0" + } + }, + "socket.io-adapter": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz", + "integrity": "sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs=", + "dev": true + }, + "socket.io-client": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.1.1.tgz", + "integrity": "sha512-jxnFyhAuFxYfjqIgduQlhzqTcOEQSn+OHKVfAxWaNWa7ecP7xSNk2Dx/3UEsDcY7NcFafxvNvKPmmO7HTwTxGQ==", + "dev": true, + "requires": { + "backo2": "1.0.2", + "base64-arraybuffer": "0.1.5", + "component-bind": "1.0.0", + "component-emitter": "1.2.1", + "debug": "~3.1.0", + "engine.io-client": "~3.2.0", + "has-binary2": "~1.0.2", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "object-component": "0.0.3", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "socket.io-parser": "~3.2.0", + "to-array": "0.1.4" + } + }, + "socket.io-parser": { + "version": "3.2.0", + "resolved": "http://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.2.0.tgz", + "integrity": "sha512-FYiBx7rc/KORMJlgsXysflWx/RIvtqZbyGLlHZvjfmPTPeuD/I8MaW7cfFrj5tRltICJdgwflhfZ3NVVbVLFQA==", + "dev": true, + "requires": { + "component-emitter": "1.2.1", + "debug": "~3.1.0", + "isarray": "2.0.1" + }, + "dependencies": { + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", + "dev": true + } + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-resolve": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", + "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", + "dev": true, + "requires": { + "atob": "^2.1.1", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-support": { + "version": "0.4.18", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", + "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", + "dev": true, + "requires": { + "source-map": "^0.5.6" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "dev": true + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.0" + } + }, + "sshpk": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.15.2.tgz", + "integrity": "sha512-Ra/OXQtuh0/enyl4ETZAfTaeksa6BXks5ZcjpSUNrjBr0DvrJKX+1fsKDPpT9TBXgHAFsa4510aNVgI8g/+SzA==", + "dev": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true + }, + "streamroller": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-0.7.0.tgz", + "integrity": "sha512-WREzfy0r0zUqp3lGO096wRuUp7ho1X6uo/7DJfTlEi0Iv/4gT7YHqXDjKC2ioVGBZtE8QzsQD9nx1nIuoZ57jQ==", + "dev": true, + "requires": { + "date-format": "^1.2.0", + "debug": "^3.1.0", + "mkdirp": "^0.5.1", + "readable-stream": "^2.3.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + }, + "to-array": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", + "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=", + "dev": true + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "tough-cookie": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", + "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "dev": true, + "requires": { + "psl": "^1.1.24", + "punycode": "^1.4.1" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + } + } + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true + }, + "type-is": { + "version": "1.6.16", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", + "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.18" + } + }, + "ultron": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", + "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==", + "dev": true + }, + "union": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/union/-/union-0.4.6.tgz", + "integrity": "sha1-GY+9rrolTniLDvy2MLwR8kopWeA=", + "dev": true, + "requires": { + "qs": "~2.3.3" + } + }, + "union-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", + "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^0.4.3" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "set-value": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", + "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.1", + "to-object-path": "^0.3.0" + } + } + } + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true + } + } + }, + "upath": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz", + "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==", + "dev": true + }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true + }, + "url-join": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-2.0.5.tgz", + "integrity": "sha1-WvIvGMBSoACkjXuCxenC4v7tpyg=", + "dev": true + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true + }, + "useragent": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.2.1.tgz", + "integrity": "sha1-z1k+9PLRdYdei7ZY6pLhik/QbY4=", + "dev": true, + "requires": { + "lru-cache": "2.2.x", + "tmp": "0.0.x" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true + }, + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", + "dev": true + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "void-elements": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", + "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", + "dev": true + }, + "webdriver-js-extender": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/webdriver-js-extender/-/webdriver-js-extender-2.1.0.tgz", + "integrity": "sha512-lcUKrjbBfCK6MNsh7xaY2UAUmZwe+/ib03AjVOpFobX4O7+83BUveSrLfU0Qsyb1DaKJdQRbuU+kM9aZ6QUhiQ==", + "dev": true, + "requires": { + "@types/selenium-webdriver": "^3.0.0", + "selenium-webdriver": "^3.0.1" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", + "dev": true + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "ws": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", + "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", + "dev": true, + "requires": { + "async-limiter": "~1.0.0", + "safe-buffer": "~5.1.0", + "ultron": "~1.1.0" + } + }, + "xml2js": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", + "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", + "dev": true, + "requires": { + "sax": ">=0.6.0", + "xmlbuilder": "~9.0.1" + } + }, + "xmlbuilder": { + "version": "9.0.7", + "resolved": "http://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", + "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=", + "dev": true + }, + "xmlhttprequest-ssl": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", + "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=", + "dev": true + }, + "yeast": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", + "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=", + "dev": true + } + } +} From 2e2743eaee8b00728e1989cf7f673fed266c3299 Mon Sep 17 00:00:00 2001 From: yuansheng1989 Date: Tue, 26 Mar 2019 15:20:34 -0400 Subject: [PATCH 124/126] remove the legacy code for issue-156 --- slider.js | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/slider.js b/slider.js index 9a96298..af88b68 100644 --- a/slider.js +++ b/slider.js @@ -129,17 +129,6 @@ angular.module('ui.bootstrap-slider', []) } } - // check if slider jQuery plugin exists - if (typeof window.$ !== 'undefined' && typeof $.fn === 'object' && $.fn.slider) { - // adding methods to jQuery slider plugin prototype - $.fn.slider.constructor.prototype.disable = function () { - this.picker.off(); - }; - $.fn.slider.constructor.prototype.enable = function () { - this.picker.on(); - }; - } - // destroy previous slider to reset all options if (element[0].__slider) element[0].__slider.destroy(); From aab76f74921206e8e021e15d762a74d7fb4484b4 Mon Sep 17 00:00:00 2001 From: Adam Segal Date: Wed, 1 May 2019 11:20:57 -0700 Subject: [PATCH 125/126] trailing comma breaks bower install --- bower.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bower.json b/bower.json index 0625583..5140951 100644 --- a/bower.json +++ b/bower.json @@ -26,7 +26,7 @@ "angular": ">= 1.3 <=1.7" }, "devDependencies": { - "bootstrap": "~3.3.6", + "bootstrap": "~3.3.6" } } From a2830e9d96d89b53f28ad198dd3e6451867d7901 Mon Sep 17 00:00:00 2001 From: Matthew Lancellotti Date: Fri, 4 Oct 2019 15:31:16 -0400 Subject: [PATCH 126/126] update version number Someone forgot to update the version number to 0.1.28, which is causing issues with npm. I suggest publishing a new version 0.1.29 to npm with the version number updated to 0.1.29. --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 54ac2bf..7862335 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "angular-bootstrap-slider", - "version": "0.1.26", + "version": "0.1.29", "description": "An angular directive for seiyria-bootstrap-slider", "main": "slider.js", "devDependencies": {