From c75d723daa4638a103934096f3243594cddd25dd Mon Sep 17 00:00:00 2001
From: SamGraber
Date: Tue, 22 Jul 2014 15:13:32 -0400
Subject: [PATCH 001/124] 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 002/124] 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 003/124] 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 004/124] 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 005/124] 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 006/124] 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 007/124] 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 008/124] 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 009/124] 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 010/124] 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 011/124] 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 012/124] 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 013/124] 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 014/124] 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 015/124] 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 016/124] 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 017/124] 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 018/124] 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 019/124] 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 020/124] 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 021/124] 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 022/124] 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 023/124] 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 024/124] 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 025/124] 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
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
\ 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 026/124] 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 027/124] 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 Id:
+
+
+ Slider Value in ng-model:
+
+
+
+ Value:
+
+
+ Min:
+
+
+ Max:
+
+
+ Step:
+
+
+ Range:
+
+
+ Precision:
+
+
+ Reversed:
+
+
+ Orientation:
+
+ Horizontal
+ Vertical
+
+
+ Handle:
+
+ Round
+ Square
+ Triangle
+ Custom
+
+
+ Enabled:
+
+
+ ngDisabled:
+
+
+ Natural arrow keys:
+
+
+
+ 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}}
+
-
+
+ Tooltip separator:
+
+
+ Tooltip split:
+
+
+
+ Range slider
+
+
+ Model: {{model.second | json}}
+ Value: {{value.second | json}}
-
- Value: {{sliders.rangeSliderValue2}}
+
-
+
+ Tooltip:
+
+ Show
+ Hide
+ Always
+
+
+ Formatter prefix:
+
+
+ Formatter suffix:
+
+
+
+ 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 028/124] 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 029/124] 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 030/124] 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 031/124] 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 032/124] 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 033/124] 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 034/124] 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
+
+
-
+
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 035/124] 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 036/124] 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 037/124] 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 038/124] 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 039/124] 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 040/124] 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 041/124] 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 042/124] 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 043/124] 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 044/124] 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 045/124] 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 046/124] 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 047/124] 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 048/124] 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 049/124] 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 050/124] 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 051/124] 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 052/124] 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 053/124] 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 054/124] 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 055/124] 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 056/124] 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 057/124] 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 058/124] 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 059/124] 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 060/124] 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 061/124] 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 062/124] 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 063/124] 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 064/124] 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 065/124] 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 066/124] 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 067/124] 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 068/124] 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 069/124] 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 070/124] 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 071/124] 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 072/124] 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 073/124] 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 074/124] 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 075/124] 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 076/124] 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 077/124] 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 078/124] 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 079/124] 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 @@
Slider Value in ng-model:
-
-
+
+
Value:
@@ -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 080/124] 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 081/124] 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 @@
Formatter suffix:
+ Relayout
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 082/124] 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 083/124] 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 084/124] 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 085/124] 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 086/124] 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 087/124] 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 088/124] 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 089/124] 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 090/124] 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 091/124] 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 @@
Formatter suffix:
- Relayout
+ Relayout
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 092/124] 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 093/124] 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 094/124] 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 095/124] 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 096/124] 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 097/124] 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 098/124] 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 099/124] 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 100/124] 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 101/124] 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 102/124] 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 103/124] 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 104/124] + 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 105/124] + 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 106/124] + 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 107/124] 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 108/124] 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 109/124] 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 110/124] 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 111/124] 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 112/124] 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 113/124] 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 114/124] 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 115/124] 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 116/124] 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 117/124] 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 118/124] 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 119/124] 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 120/124] 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 121/124] 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 122/124] 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 123/124] 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 124/124] 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": {