diff options
author | talasila <talasila@research.att.com> | 2017-02-07 15:03:57 -0500 |
---|---|---|
committer | talasila <talasila@research.att.com> | 2017-02-07 15:05:15 -0500 |
commit | 4ad39a5c96dd99acf819ce189b13fec946d7506b (patch) | |
tree | a1449286441947cc3d07a45227fa0d6f978e1a7d /ecomp-portal-FE/client/bower_components/angular-material/modules/js/slider | |
parent | 5500448cbd1f374d0ac743ee2fd636fe2d3c0027 (diff) |
Initial OpenECOMP Portal commit
Change-Id: I804b80e0830c092e307da1599bd9fbb5c3e2da77
Signed-off-by: talasila <talasila@research.att.com>
Diffstat (limited to 'ecomp-portal-FE/client/bower_components/angular-material/modules/js/slider')
7 files changed, 706 insertions, 0 deletions
diff --git a/ecomp-portal-FE/client/bower_components/angular-material/modules/js/slider/bower.json b/ecomp-portal-FE/client/bower_components/angular-material/modules/js/slider/bower.json new file mode 100644 index 00000000..d9e3a6ca --- /dev/null +++ b/ecomp-portal-FE/client/bower_components/angular-material/modules/js/slider/bower.json @@ -0,0 +1,7 @@ +{ + "name": "angular-material-slider", + "version": "0.9.8", + "dependencies": { + "angular-material-core": "0.9.8" + } +}
\ No newline at end of file diff --git a/ecomp-portal-FE/client/bower_components/angular-material/modules/js/slider/slider-default-theme.css b/ecomp-portal-FE/client/bower_components/angular-material/modules/js/slider/slider-default-theme.css new file mode 100644 index 00000000..72a7c06a --- /dev/null +++ b/ecomp-portal-FE/client/bower_components/angular-material/modules/js/slider/slider-default-theme.css @@ -0,0 +1,56 @@ +/*! + * Angular Material Design + * https://github.com/angular/material + * @license MIT + * v0.9.8 + */ +/* mixin definition ; sets LTR and RTL within the same style call */ +md-slider.md-THEME_NAME-theme .md-track { + background-color: '{{foreground-3}}'; } +md-slider.md-THEME_NAME-theme .md-track-ticks { + background-color: '{{foreground-4}}'; } +md-slider.md-THEME_NAME-theme .md-focus-thumb { + background-color: '{{foreground-2}}'; } +md-slider.md-THEME_NAME-theme .md-focus-ring { + border-color: '{{foreground-4}}'; } +md-slider.md-THEME_NAME-theme .md-disabled-thumb { + border-color: '{{background-color}}'; } +md-slider.md-THEME_NAME-theme.md-min .md-thumb:after { + background-color: '{{background-color}}'; } +md-slider.md-THEME_NAME-theme .md-track.md-track-fill { + background-color: '{{accent-color}}'; } +md-slider.md-THEME_NAME-theme .md-thumb:after { + border-color: '{{accent-color}}'; + background-color: '{{accent-color}}'; } +md-slider.md-THEME_NAME-theme .md-sign { + background-color: '{{accent-color}}'; } + md-slider.md-THEME_NAME-theme .md-sign:after { + border-top-color: '{{accent-color}}'; } +md-slider.md-THEME_NAME-theme .md-thumb-text { + color: '{{accent-contrast}}'; } +md-slider.md-THEME_NAME-theme.md-warn .md-track.md-track-fill { + background-color: '{{warn-color}}'; } +md-slider.md-THEME_NAME-theme.md-warn .md-thumb:after { + border-color: '{{warn-color}}'; + background-color: '{{warn-color}}'; } +md-slider.md-THEME_NAME-theme.md-warn .md-sign { + background-color: '{{warn-color}}'; } + md-slider.md-THEME_NAME-theme.md-warn .md-sign:after { + border-top-color: '{{warn-color}}'; } +md-slider.md-THEME_NAME-theme.md-warn .md-thumb-text { + color: '{{warn-contrast}}'; } +md-slider.md-THEME_NAME-theme.md-primary .md-track.md-track-fill { + background-color: '{{primary-color}}'; } +md-slider.md-THEME_NAME-theme.md-primary .md-thumb:after { + border-color: '{{primary-color}}'; + background-color: '{{primary-color}}'; } +md-slider.md-THEME_NAME-theme.md-primary .md-sign { + background-color: '{{primary-color}}'; } + md-slider.md-THEME_NAME-theme.md-primary .md-sign:after { + border-top-color: '{{primary-color}}'; } +md-slider.md-THEME_NAME-theme.md-primary .md-thumb-text { + color: '{{primary-contrast}}'; } +md-slider.md-THEME_NAME-theme[disabled] .md-thumb:after { + border-color: '{{foreground-3}}'; } +md-slider.md-THEME_NAME-theme[disabled]:not(.md-min) .md-thumb:after { + background-color: '{{foreground-3}}'; } diff --git a/ecomp-portal-FE/client/bower_components/angular-material/modules/js/slider/slider-default-theme.min.css b/ecomp-portal-FE/client/bower_components/angular-material/modules/js/slider/slider-default-theme.min.css new file mode 100644 index 00000000..6145b67d --- /dev/null +++ b/ecomp-portal-FE/client/bower_components/angular-material/modules/js/slider/slider-default-theme.min.css @@ -0,0 +1,6 @@ +/*! + * Angular Material Design + * https://github.com/angular/material + * @license MIT + * v0.9.8 + */md-slider.md-THEME_NAME-theme .md-track{background-color:'{{foreground-3}}'}md-slider.md-THEME_NAME-theme .md-track-ticks{background-color:'{{foreground-4}}'}md-slider.md-THEME_NAME-theme .md-focus-thumb{background-color:'{{foreground-2}}'}md-slider.md-THEME_NAME-theme .md-focus-ring{border-color:'{{foreground-4}}'}md-slider.md-THEME_NAME-theme .md-disabled-thumb{border-color:'{{background-color}}'}md-slider.md-THEME_NAME-theme.md-min .md-thumb:after{background-color:'{{background-color}}'}md-slider.md-THEME_NAME-theme .md-track.md-track-fill{background-color:'{{accent-color}}'}md-slider.md-THEME_NAME-theme .md-thumb:after{border-color:'{{accent-color}}';background-color:'{{accent-color}}'}md-slider.md-THEME_NAME-theme .md-sign{background-color:'{{accent-color}}'}md-slider.md-THEME_NAME-theme .md-sign:after{border-top-color:'{{accent-color}}'}md-slider.md-THEME_NAME-theme .md-thumb-text{color:'{{accent-contrast}}'}md-slider.md-THEME_NAME-theme.md-warn .md-track.md-track-fill{background-color:'{{warn-color}}'}md-slider.md-THEME_NAME-theme.md-warn .md-thumb:after{border-color:'{{warn-color}}';background-color:'{{warn-color}}'}md-slider.md-THEME_NAME-theme.md-warn .md-sign{background-color:'{{warn-color}}'}md-slider.md-THEME_NAME-theme.md-warn .md-sign:after{border-top-color:'{{warn-color}}'}md-slider.md-THEME_NAME-theme.md-warn .md-thumb-text{color:'{{warn-contrast}}'}md-slider.md-THEME_NAME-theme.md-primary .md-track.md-track-fill{background-color:'{{primary-color}}'}md-slider.md-THEME_NAME-theme.md-primary .md-thumb:after{border-color:'{{primary-color}}';background-color:'{{primary-color}}'}md-slider.md-THEME_NAME-theme.md-primary .md-sign{background-color:'{{primary-color}}'}md-slider.md-THEME_NAME-theme.md-primary .md-sign:after{border-top-color:'{{primary-color}}'}md-slider.md-THEME_NAME-theme.md-primary .md-thumb-text{color:'{{primary-contrast}}'}md-slider.md-THEME_NAME-theme[disabled] .md-thumb:after{border-color:'{{foreground-3}}'}md-slider.md-THEME_NAME-theme[disabled]:not(.md-min) .md-thumb:after{background-color:'{{foreground-3}}'}
\ No newline at end of file diff --git a/ecomp-portal-FE/client/bower_components/angular-material/modules/js/slider/slider.css b/ecomp-portal-FE/client/bower_components/angular-material/modules/js/slider/slider.css new file mode 100644 index 00000000..8912e165 --- /dev/null +++ b/ecomp-portal-FE/client/bower_components/angular-material/modules/js/slider/slider.css @@ -0,0 +1,220 @@ +/*! + * Angular Material Design + * https://github.com/angular/material + * @license MIT + * v0.9.8 + */ +/* mixin definition ; sets LTR and RTL within the same style call */ +@-webkit-keyframes sliderFocusThumb { + 0% { + opacity: 0; + -webkit-transform: scale(0); + transform: scale(0); } + + 50% { + -webkit-transform: scale(1); + transform: scale(1); + opacity: 1; } + + 100% { + opacity: 0; } } +@keyframes sliderFocusThumb { + 0% { + opacity: 0; + -webkit-transform: scale(0); + transform: scale(0); } + + 50% { + -webkit-transform: scale(1); + transform: scale(1); + opacity: 1; } + + 100% { + opacity: 0; } } + +md-slider { + height: 48px; + position: relative; + display: block; + margin-left: 4px; + margin-right: 4px; + padding: 0; + /** + * Track + */ + /** + * Slider thumb + */ + /* The sign that's focused in discrete mode */ + /** + * The border/background that comes in when focused in non-discrete mode + */ + /* Don't animate left/right while panning */ } + md-slider *, md-slider *:after { + box-sizing: border-box; } + md-slider .md-slider-wrapper { + position: relative; } + md-slider .md-track-container { + width: 100%; + position: absolute; + top: 23px; + height: 2px; } + md-slider .md-track { + position: absolute; + left: 0; + right: 0; + height: 100%; } + md-slider .md-track-fill { + transition: width 0.05s linear; } + md-slider .md-track-ticks { + position: absolute; + left: 0; + right: 0; + height: 100%; } + md-slider .md-thumb-container { + position: absolute; + left: 0; + top: 50%; + -webkit-transform: translate3d(-50%, -50%, 0); + transform: translate3d(-50%, -50%, 0); + transition: left 0.1s linear; } + md-slider .md-thumb { + z-index: 1; + position: absolute; + left: -19px; + top: 5px; + width: 38px; + height: 38px; + border-radius: 38px; + -webkit-transform: scale(0.5); + transform: scale(0.5); + transition: all 0.1s linear; } + md-slider .md-thumb:after { + content: ''; + position: absolute; + left: 3px; + top: 3px; + width: 32px; + height: 32px; + border-radius: 32px; + border-width: 3px; + border-style: solid; } + md-slider .md-sign { + /* Center the children (slider-thumb-text) */ + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + position: absolute; + left: -14px; + top: -20px; + width: 28px; + height: 28px; + border-radius: 28px; + -webkit-transform: scale(0.4) translate3d(0, 70px, 0); + transform: scale(0.4) translate3d(0, 70px, 0); + transition: all 0.2s ease-in-out; + /* The arrow pointing down under the sign */ } + md-slider .md-sign:after { + position: absolute; + content: ''; + left: 0px; + border-radius: 16px; + top: 19px; + border-left: 14px solid transparent; + border-right: 14px solid transparent; + border-top-width: 16px; + border-top-style: solid; + opacity: 0; + -webkit-transform: translate3d(0, -8px, 0); + transform: translate3d(0, -8px, 0); + transition: all 0.2s ease-in-out; } + md-slider .md-sign .md-thumb-text { + z-index: 1; + font-size: 12px; + font-weight: bold; } + md-slider .md-focus-thumb { + position: absolute; + left: -24px; + top: 0px; + width: 48px; + height: 48px; + border-radius: 48px; + display: none; + opacity: 0; + background-color: #C0C0C0; + -webkit-animation: sliderFocusThumb 0.4s linear; + animation: sliderFocusThumb 0.4s linear; } + md-slider .md-focus-ring { + position: absolute; + left: -24px; + top: 0px; + width: 48px; + height: 48px; + border-radius: 48px; + border: 2px solid #D6D6D6; + background-color: transparent; + -webkit-transform: scale(0); + transform: scale(0); + transition: all 0.2s linear; } + md-slider .md-disabled-thumb { + position: absolute; + left: -22px; + top: 2px; + width: 44px; + height: 44px; + border-radius: 44px; + -webkit-transform: scale(0.35); + transform: scale(0.35); + border-width: 6px; + border-style: solid; + display: none; } + md-slider.md-min .md-thumb:after { + background-color: white; } + md-slider.md-min .md-sign { + opacity: 0; } + md-slider:focus { + outline: none; } + md-slider.dragging .md-thumb-container, md-slider.dragging .md-track-fill { + transition: none; } + md-slider:not([md-discrete]) { + /* Hide the sign and ticks in non-discrete mode */ } + md-slider:not([md-discrete]) .md-track-ticks, md-slider:not([md-discrete]) .md-sign { + display: none; } + md-slider:not([md-discrete]):not([disabled]):hover .md-thumb { + -webkit-transform: scale(0.6); + transform: scale(0.6); } + md-slider:not([md-discrete]):not([disabled]):focus .md-focus-thumb, md-slider:not([md-discrete]):not([disabled]).active .md-focus-thumb { + display: block; } + md-slider:not([md-discrete]):not([disabled]):focus .md-focus-ring, md-slider:not([md-discrete]):not([disabled]).active .md-focus-ring { + -webkit-transform: scale(1); + transform: scale(1); } + md-slider:not([md-discrete]):not([disabled]):focus .md-thumb, md-slider:not([md-discrete]):not([disabled]).active .md-thumb { + -webkit-transform: scale(0.85); + transform: scale(0.85); } + md-slider[md-discrete] { + /* Hide the focus thumb in discrete mode */ } + md-slider[md-discrete] .md-focus-thumb, md-slider[md-discrete] .md-focus-ring { + display: none; } + md-slider[md-discrete]:not([disabled]):focus .md-sign, md-slider[md-discrete]:not([disabled]):focus .md-sign:after, md-slider[md-discrete]:not([disabled]).active .md-sign, md-slider[md-discrete]:not([disabled]).active .md-sign:after { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0) scale(1); + transform: translate3d(0, 0, 0) scale(1); } + md-slider[disabled] .md-track-fill { + display: none; } + md-slider[disabled] .md-sign { + display: none; } + md-slider[disabled] .md-thumb { + -webkit-transform: scale(0.35); + transform: scale(0.35); } + md-slider[disabled] .md-disabled-thumb { + display: block; } + +@media screen and (-ms-high-contrast: active) { + md-slider.md-default-theme .md-track { + border-bottom: 1px solid #fff; } } diff --git a/ecomp-portal-FE/client/bower_components/angular-material/modules/js/slider/slider.js b/ecomp-portal-FE/client/bower_components/angular-material/modules/js/slider/slider.js new file mode 100644 index 00000000..2664c105 --- /dev/null +++ b/ecomp-portal-FE/client/bower_components/angular-material/modules/js/slider/slider.js @@ -0,0 +1,404 @@ +/*! + * Angular Material Design + * https://github.com/angular/material + * @license MIT + * v0.9.8 + */ +(function( window, angular, undefined ){ +"use strict"; + + /** + * @ngdoc module + * @name material.components.slider + */ + angular.module('material.components.slider', [ + 'material.core' + ]) + .directive('mdSlider', SliderDirective); + +/** + * @ngdoc directive + * @name mdSlider + * @module material.components.slider + * @restrict E + * @description + * The `<md-slider>` component allows the user to choose from a range of + * values. + * + * As per the [material design spec](http://www.google.com/design/spec/style/color.html#color-ui-color-application) + * the slider is in the accent color by default. The primary color palette may be used with + * the `md-primary` class. + * + * It has two modes: 'normal' mode, where the user slides between a wide range + * of values, and 'discrete' mode, where the user slides between only a few + * select values. + * + * To enable discrete mode, add the `md-discrete` attribute to a slider, + * and use the `step` attribute to change the distance between + * values the user is allowed to pick. + * + * @usage + * <h4>Normal Mode</h4> + * <hljs lang="html"> + * <md-slider ng-model="myValue" min="5" max="500"> + * </md-slider> + * </hljs> + * <h4>Discrete Mode</h4> + * <hljs lang="html"> + * <md-slider md-discrete ng-model="myDiscreteValue" step="10" min="10" max="130"> + * </md-slider> + * </hljs> + * + * @param {boolean=} md-discrete Whether to enable discrete mode. + * @param {number=} step The distance between values the user is allowed to pick. Default 1. + * @param {number=} min The minimum value the user is allowed to pick. Default 0. + * @param {number=} max The maximum value the user is allowed to pick. Default 100. + */ +function SliderDirective($$rAF, $window, $mdAria, $mdUtil, $mdConstant, $mdTheming, $mdGesture, $parse) { + return { + scope: {}, + require: '?ngModel', + template: + '<div class="md-slider-wrapper">\ + <div class="md-track-container">\ + <div class="md-track"></div>\ + <div class="md-track md-track-fill"></div>\ + <div class="md-track-ticks"></div>\ + </div>\ + <div class="md-thumb-container">\ + <div class="md-thumb"></div>\ + <div class="md-focus-thumb"></div>\ + <div class="md-focus-ring"></div>\ + <div class="md-sign">\ + <span class="md-thumb-text"></span>\ + </div>\ + <div class="md-disabled-thumb"></div>\ + </div>\ + </div>', + compile: compile + }; + + // ********************************************************** + // Private Methods + // ********************************************************** + + function compile (tElement, tAttrs) { + tElement.attr({ + tabIndex: 0, + role: 'slider' + }); + + $mdAria.expect(tElement, 'aria-label'); + + return postLink; + } + + function postLink(scope, element, attr, ngModelCtrl) { + $mdTheming(element); + ngModelCtrl = ngModelCtrl || { + // Mock ngModelController if it doesn't exist to give us + // the minimum functionality needed + $setViewValue: function(val) { + this.$viewValue = val; + this.$viewChangeListeners.forEach(function(cb) { cb(); }); + }, + $parsers: [], + $formatters: [], + $viewChangeListeners: [] + }; + + var isDisabledParsed = attr.ngDisabled && $parse(attr.ngDisabled); + var isDisabledGetter = isDisabledParsed ? + function() { return isDisabledParsed(scope.$parent); } : + angular.noop; + var thumb = angular.element(element[0].querySelector('.md-thumb')); + var thumbText = angular.element(element[0].querySelector('.md-thumb-text')); + var thumbContainer = thumb.parent(); + var trackContainer = angular.element(element[0].querySelector('.md-track-container')); + var activeTrack = angular.element(element[0].querySelector('.md-track-fill')); + var tickContainer = angular.element(element[0].querySelector('.md-track-ticks')); + var throttledRefreshDimensions = $mdUtil.throttle(refreshSliderDimensions, 5000); + + // Default values, overridable by attrs + angular.isDefined(attr.min) ? attr.$observe('min', updateMin) : updateMin(0); + angular.isDefined(attr.max) ? attr.$observe('max', updateMax) : updateMax(100); + angular.isDefined(attr.step)? attr.$observe('step', updateStep) : updateStep(1); + + // We have to manually stop the $watch on ngDisabled because it exists + // on the parent scope, and won't be automatically destroyed when + // the component is destroyed. + var stopDisabledWatch = angular.noop; + if (attr.ngDisabled) { + stopDisabledWatch = scope.$parent.$watch(attr.ngDisabled, updateAriaDisabled); + } + + $mdGesture.register(element, 'drag'); + + element + .on('keydown', keydownListener) + .on('$md.pressdown', onPressDown) + .on('$md.pressup', onPressUp) + .on('$md.dragstart', onDragStart) + .on('$md.drag', onDrag) + .on('$md.dragend', onDragEnd); + + // On resize, recalculate the slider's dimensions and re-render + function updateAll() { + refreshSliderDimensions(); + ngModelRender(); + redrawTicks(); + } + setTimeout(updateAll); + + var debouncedUpdateAll = $$rAF.throttle(updateAll); + angular.element($window).on('resize', debouncedUpdateAll); + + scope.$on('$destroy', function() { + angular.element($window).off('resize', debouncedUpdateAll); + stopDisabledWatch(); + }); + + ngModelCtrl.$render = ngModelRender; + ngModelCtrl.$viewChangeListeners.push(ngModelRender); + ngModelCtrl.$formatters.push(minMaxValidator); + ngModelCtrl.$formatters.push(stepValidator); + + /** + * Attributes + */ + var min; + var max; + var step; + function updateMin(value) { + min = parseFloat(value); + element.attr('aria-valuemin', value); + updateAll(); + } + function updateMax(value) { + max = parseFloat(value); + element.attr('aria-valuemax', value); + updateAll(); + } + function updateStep(value) { + step = parseFloat(value); + redrawTicks(); + } + function updateAriaDisabled(isDisabled) { + element.attr('aria-disabled', !!isDisabled); + } + + // Draw the ticks with canvas. + // The alternative to drawing ticks with canvas is to draw one element for each tick, + // which could quickly become a performance bottleneck. + var tickCanvas, tickCtx; + function redrawTicks() { + if (!angular.isDefined(attr.mdDiscrete)) return; + + var numSteps = Math.floor( (max - min) / step ); + if (!tickCanvas) { + var trackTicksStyle = $window.getComputedStyle(tickContainer[0]); + tickCanvas = angular.element('<canvas style="position:absolute;">'); + tickCtx = tickCanvas[0].getContext('2d'); + tickCtx.fillStyle = trackTicksStyle.backgroundColor || 'black'; + tickContainer.append(tickCanvas); + } + var dimensions = getSliderDimensions(); + tickCanvas[0].width = dimensions.width; + tickCanvas[0].height = dimensions.height; + + var distance; + for (var i = 0; i <= numSteps; i++) { + distance = Math.floor(dimensions.width * (i / numSteps)); + tickCtx.fillRect(distance - 1, 0, 2, dimensions.height); + } + } + + + /** + * Refreshing Dimensions + */ + var sliderDimensions = {}; + refreshSliderDimensions(); + function refreshSliderDimensions() { + sliderDimensions = trackContainer[0].getBoundingClientRect(); + } + function getSliderDimensions() { + throttledRefreshDimensions(); + return sliderDimensions; + } + + /** + * left/right arrow listener + */ + function keydownListener(ev) { + if(element[0].hasAttribute('disabled')) { + return; + } + + var changeAmount; + if (ev.keyCode === $mdConstant.KEY_CODE.LEFT_ARROW) { + changeAmount = -step; + } else if (ev.keyCode === $mdConstant.KEY_CODE.RIGHT_ARROW) { + changeAmount = step; + } + if (changeAmount) { + if (ev.metaKey || ev.ctrlKey || ev.altKey) { + changeAmount *= 4; + } + ev.preventDefault(); + ev.stopPropagation(); + scope.$evalAsync(function() { + setModelValue(ngModelCtrl.$viewValue + changeAmount); + }); + } + } + + /** + * ngModel setters and validators + */ + function setModelValue(value) { + ngModelCtrl.$setViewValue( minMaxValidator(stepValidator(value)) ); + } + function ngModelRender() { + if (isNaN(ngModelCtrl.$viewValue)) { + ngModelCtrl.$viewValue = ngModelCtrl.$modelValue; + } + + var percent = (ngModelCtrl.$viewValue - min) / (max - min); + scope.modelValue = ngModelCtrl.$viewValue; + element.attr('aria-valuenow', ngModelCtrl.$viewValue); + setSliderPercent(percent); + thumbText.text( ngModelCtrl.$viewValue ); + } + + function minMaxValidator(value) { + if (angular.isNumber(value)) { + return Math.max(min, Math.min(max, value)); + } + } + function stepValidator(value) { + if (angular.isNumber(value)) { + var formattedValue = (Math.round(value / step) * step); + // Format to 3 digits after the decimal point - fixes #2015. + return (Math.round(formattedValue * 1000) / 1000); + } + } + + /** + * @param percent 0-1 + */ + function setSliderPercent(percent) { + activeTrack.css('width', (percent * 100) + '%'); + thumbContainer.css( + 'left', + (percent * 100) + '%' + ); + element.toggleClass('md-min', percent === 0); + } + + + /** + * Slide listeners + */ + var isDragging = false; + var isDiscrete = angular.isDefined(attr.mdDiscrete); + + function onPressDown(ev) { + if (isDisabledGetter()) return; + + element.addClass('active'); + element[0].focus(); + refreshSliderDimensions(); + + var exactVal = percentToValue( positionToPercent( ev.pointer.x )); + var closestVal = minMaxValidator( stepValidator(exactVal) ); + scope.$apply(function() { + setModelValue( closestVal ); + setSliderPercent( valueToPercent(closestVal)); + }); + } + function onPressUp(ev) { + if (isDisabledGetter()) return; + + element.removeClass('dragging active'); + + var exactVal = percentToValue( positionToPercent( ev.pointer.x )); + var closestVal = minMaxValidator( stepValidator(exactVal) ); + scope.$apply(function() { + setModelValue(closestVal); + ngModelRender(); + }); + } + function onDragStart(ev) { + if (isDisabledGetter()) return; + isDragging = true; + ev.stopPropagation(); + + element.addClass('dragging'); + setSliderFromEvent(ev); + } + function onDrag(ev) { + if (!isDragging) return; + ev.stopPropagation(); + setSliderFromEvent(ev); + } + function onDragEnd(ev) { + if (!isDragging) return; + ev.stopPropagation(); + isDragging = false; + } + + function setSliderFromEvent(ev) { + // While panning discrete, update only the + // visual positioning but not the model value. + if ( isDiscrete ) adjustThumbPosition( ev.pointer.x ); + else doSlide( ev.pointer.x ); + } + + /** + * Slide the UI by changing the model value + * @param x + */ + function doSlide( x ) { + scope.$evalAsync( function() { + setModelValue( percentToValue( positionToPercent(x) )); + }); + } + + /** + * Slide the UI without changing the model (while dragging/panning) + * @param x + */ + function adjustThumbPosition( x ) { + var exactVal = percentToValue( positionToPercent( x )); + var closestVal = minMaxValidator( stepValidator(exactVal) ); + setSliderPercent( positionToPercent(x) ); + thumbText.text( closestVal ); + } + + /** + * Convert horizontal position on slider to percentage value of offset from beginning... + * @param x + * @returns {number} + */ + function positionToPercent( x ) { + return Math.max(0, Math.min(1, (x - sliderDimensions.left) / (sliderDimensions.width))); + } + + /** + * Convert percentage offset on slide to equivalent model value + * @param percent + * @returns {*} + */ + function percentToValue( percent ) { + return (min + percent * (max - min)); + } + + function valueToPercent( val ) { + return (val - min)/(max - min); + } + } +} +SliderDirective.$inject = ["$$rAF", "$window", "$mdAria", "$mdUtil", "$mdConstant", "$mdTheming", "$mdGesture", "$parse"]; + +})(window, window.angular);
\ No newline at end of file diff --git a/ecomp-portal-FE/client/bower_components/angular-material/modules/js/slider/slider.min.css b/ecomp-portal-FE/client/bower_components/angular-material/modules/js/slider/slider.min.css new file mode 100644 index 00000000..29125c6f --- /dev/null +++ b/ecomp-portal-FE/client/bower_components/angular-material/modules/js/slider/slider.min.css @@ -0,0 +1,6 @@ +/*! + * Angular Material Design + * https://github.com/angular/material + * @license MIT + * v0.9.8 + */@-webkit-keyframes sliderFocusThumb{0%{opacity:0;-webkit-transform:scale(0);transform:scale(0)}50%{-webkit-transform:scale(1);transform:scale(1);opacity:1}100%{opacity:0}}@keyframes sliderFocusThumb{0%{opacity:0;-webkit-transform:scale(0);transform:scale(0)}50%{-webkit-transform:scale(1);transform:scale(1);opacity:1}100%{opacity:0}}md-slider{height:48px;position:relative;display:block;margin-left:4px;margin-right:4px;padding:0}md-slider *,md-slider :after{box-sizing:border-box}md-slider .md-slider-wrapper{position:relative}md-slider .md-track-container{width:100%;position:absolute;top:23px;height:2px}md-slider .md-track{position:absolute;left:0;right:0;height:100%}md-slider .md-track-fill{transition:width .05s linear}md-slider .md-track-ticks{position:absolute;left:0;right:0;height:100%}md-slider .md-thumb-container{position:absolute;left:0;top:50%;-webkit-transform:translate3d(-50%,-50%,0);transform:translate3d(-50%,-50%,0);transition:left .1s linear}md-slider .md-thumb{z-index:1;position:absolute;left:-19px;top:5px;width:38px;height:38px;border-radius:38px;-webkit-transform:scale(.5);transform:scale(.5);transition:all .1s linear}md-slider .md-thumb:after{content:'';position:absolute;left:3px;top:3px;width:32px;height:32px;border-radius:32px;border-width:3px;border-style:solid}md-slider .md-sign{display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;position:absolute;left:-14px;top:-20px;width:28px;height:28px;border-radius:28px;-webkit-transform:scale(.4) translate3d(0,70px,0);transform:scale(.4) translate3d(0,70px,0);transition:all .2s ease-in-out}md-slider .md-sign:after{position:absolute;content:'';left:0;border-radius:16px;top:19px;border-left:14px solid transparent;border-right:14px solid transparent;border-top-width:16px;border-top-style:solid;opacity:0;-webkit-transform:translate3d(0,-8px,0);transform:translate3d(0,-8px,0);transition:all .2s ease-in-out}md-slider .md-sign .md-thumb-text{z-index:1;font-size:12px;font-weight:700}md-slider .md-focus-thumb{position:absolute;left:-24px;top:0;width:48px;height:48px;border-radius:48px;display:none;opacity:0;background-color:silver;-webkit-animation:sliderFocusThumb .4s linear;animation:sliderFocusThumb .4s linear}md-slider .md-focus-ring{position:absolute;left:-24px;top:0;width:48px;height:48px;border-radius:48px;border:2px solid #D6D6D6;background-color:transparent;-webkit-transform:scale(0);transform:scale(0);transition:all .2s linear}md-slider .md-disabled-thumb{position:absolute;left:-22px;top:2px;width:44px;height:44px;border-radius:44px;-webkit-transform:scale(.35);transform:scale(.35);border-width:6px;border-style:solid;display:none}md-slider.md-min .md-thumb:after{background-color:#fff}md-slider.md-min .md-sign{opacity:0}md-slider:focus{outline:0}md-slider.dragging .md-thumb-container,md-slider.dragging .md-track-fill{transition:none}md-slider:not([md-discrete]) .md-sign,md-slider:not([md-discrete]) .md-track-ticks{display:none}md-slider:not([md-discrete]):not([disabled]):hover .md-thumb{-webkit-transform:scale(.6);transform:scale(.6)}md-slider:not([md-discrete]):not([disabled]).active .md-focus-thumb,md-slider:not([md-discrete]):not([disabled]):focus .md-focus-thumb{display:block}md-slider:not([md-discrete]):not([disabled]).active .md-focus-ring,md-slider:not([md-discrete]):not([disabled]):focus .md-focus-ring{-webkit-transform:scale(1);transform:scale(1)}md-slider:not([md-discrete]):not([disabled]).active .md-thumb,md-slider:not([md-discrete]):not([disabled]):focus .md-thumb{-webkit-transform:scale(.85);transform:scale(.85)}md-slider[md-discrete] .md-focus-ring,md-slider[md-discrete] .md-focus-thumb{display:none}md-slider[md-discrete]:not([disabled]).active .md-sign,md-slider[md-discrete]:not([disabled]).active .md-sign:after,md-slider[md-discrete]:not([disabled]):focus .md-sign,md-slider[md-discrete]:not([disabled]):focus .md-sign:after{opacity:1;-webkit-transform:translate3d(0,0,0) scale(1);transform:translate3d(0,0,0) scale(1)}md-slider[disabled] .md-sign,md-slider[disabled] .md-track-fill{display:none}md-slider[disabled] .md-thumb{-webkit-transform:scale(.35);transform:scale(.35)}md-slider[disabled] .md-disabled-thumb{display:block}@media screen and (-ms-high-contrast:active){md-slider.md-default-theme .md-track{border-bottom:1px solid #fff}}
\ No newline at end of file diff --git a/ecomp-portal-FE/client/bower_components/angular-material/modules/js/slider/slider.min.js b/ecomp-portal-FE/client/bower_components/angular-material/modules/js/slider/slider.min.js new file mode 100644 index 00000000..9ffc1568 --- /dev/null +++ b/ecomp-portal-FE/client/bower_components/angular-material/modules/js/slider/slider.min.js @@ -0,0 +1,7 @@ +/*! + * Angular Material Design + * https://github.com/angular/material + * @license MIT + * v0.9.8 + */ +!function(e,t,i){"use strict";function n(e,i,n,a,r,o,s,d){function l(e,t){return e.attr({tabIndex:0,role:"slider"}),n.expect(e,"aria-label"),u}function u(n,l,u,c){function m(){g(),x(),h()}function f(e){H=parseFloat(e),l.attr("aria-valuemin",e),m()}function v(e){U=parseFloat(e),l.attr("aria-valuemax",e),m()}function p(e){J=parseFloat(e),h()}function $(e){l.attr("aria-disabled",!!e)}function h(){if(t.isDefined(u.mdDiscrete)){var e=Math.floor((U-H)/J);if(!Q){var n=i.getComputedStyle(W[0]);Q=t.element('<canvas style="position:absolute;">'),X=Q[0].getContext("2d"),X.fillStyle=n.backgroundColor||"black",W.append(Q)}var a=w();Q[0].width=a.width,Q[0].height=a.height;for(var r,o=0;e>=o;o++)r=Math.floor(a.width*(o/e)),X.fillRect(r-1,0,2,a.height)}}function g(){Z=G[0].getBoundingClientRect()}function w(){return Y(),Z}function b(e){if(!l[0].hasAttribute("disabled")){var t;e.keyCode===r.KEY_CODE.LEFT_ARROW?t=-J:e.keyCode===r.KEY_CODE.RIGHT_ARROW&&(t=J),t&&((e.metaKey||e.ctrlKey||e.altKey)&&(t*=4),e.preventDefault(),e.stopPropagation(),n.$evalAsync(function(){y(c.$viewValue+t)}))}}function y(e){c.$setViewValue(C(k(e)))}function x(){isNaN(c.$viewValue)&&(c.$viewValue=c.$modelValue);var e=(c.$viewValue-H)/(U-H);n.modelValue=c.$viewValue,l.attr("aria-valuenow",c.$viewValue),D(e),_.text(c.$viewValue)}function C(e){return t.isNumber(e)?Math.max(H,Math.min(U,e)):void 0}function k(e){if(t.isNumber(e)){var i=Math.round(e/J)*J;return Math.round(1e3*i)/1e3}}function D(e){I.css("width",100*e+"%"),z.css("left",100*e+"%"),l.toggleClass("md-min",0===e)}function V(e){if(!P()){l.addClass("active"),l[0].focus(),g();var t=L(K(e.pointer.x)),i=C(k(t));n.$apply(function(){y(i),D(N(i))})}}function M(e){if(!P()){l.removeClass("dragging active");var t=L(K(e.pointer.x)),i=C(k(t));n.$apply(function(){y(i),x()})}}function S(e){P()||(ee=!0,e.stopPropagation(),l.addClass("dragging"),q(e))}function A(e){ee&&(e.stopPropagation(),q(e))}function R(e){ee&&(e.stopPropagation(),ee=!1)}function q(e){te?F(e.pointer.x):E(e.pointer.x)}function E(e){n.$evalAsync(function(){y(L(K(e)))})}function F(e){var t=L(K(e)),i=C(k(t));D(K(e)),_.text(i)}function K(e){return Math.max(0,Math.min(1,(e-Z.left)/Z.width))}function L(e){return H+e*(U-H)}function N(e){return(e-H)/(U-H)}o(l),c=c||{$setViewValue:function(e){this.$viewValue=e,this.$viewChangeListeners.forEach(function(e){e()})},$parsers:[],$formatters:[],$viewChangeListeners:[]};var O=u.ngDisabled&&d(u.ngDisabled),P=O?function(){return O(n.$parent)}:t.noop,T=t.element(l[0].querySelector(".md-thumb")),_=t.element(l[0].querySelector(".md-thumb-text")),z=T.parent(),G=t.element(l[0].querySelector(".md-track-container")),I=t.element(l[0].querySelector(".md-track-fill")),W=t.element(l[0].querySelector(".md-track-ticks")),Y=a.throttle(g,5e3);t.isDefined(u.min)?u.$observe("min",f):f(0),t.isDefined(u.max)?u.$observe("max",v):v(100),t.isDefined(u.step)?u.$observe("step",p):p(1);var j=t.noop;u.ngDisabled&&(j=n.$parent.$watch(u.ngDisabled,$)),s.register(l,"drag"),l.on("keydown",b).on("$md.pressdown",V).on("$md.pressup",M).on("$md.dragstart",S).on("$md.drag",A).on("$md.dragend",R),setTimeout(m);var B=e.throttle(m);t.element(i).on("resize",B),n.$on("$destroy",function(){t.element(i).off("resize",B),j()}),c.$render=x,c.$viewChangeListeners.push(x),c.$formatters.push(C),c.$formatters.push(k);var H,U,J,Q,X,Z={};g();var ee=!1,te=t.isDefined(u.mdDiscrete)}return{scope:{},require:"?ngModel",template:'<div class="md-slider-wrapper"> <div class="md-track-container"> <div class="md-track"></div> <div class="md-track md-track-fill"></div> <div class="md-track-ticks"></div> </div> <div class="md-thumb-container"> <div class="md-thumb"></div> <div class="md-focus-thumb"></div> <div class="md-focus-ring"></div> <div class="md-sign"> <span class="md-thumb-text"></span> </div> <div class="md-disabled-thumb"></div> </div> </div>',compile:l}}t.module("material.components.slider",["material.core"]).directive("mdSlider",n),n.$inject=["$$rAF","$window","$mdAria","$mdUtil","$mdConstant","$mdTheming","$mdGesture","$parse"]}(window,window.angular);
\ No newline at end of file |