mirror of
https://github.com/arnaucube/commonroutesApp.git
synced 2026-02-07 11:36:42 +01:00
geolocation added on offerCar and travel page
This commit is contained in:
@@ -0,0 +1,125 @@
|
||||
/*!
|
||||
* Angular Material Design
|
||||
* https://github.com/angular/material
|
||||
* @license MIT
|
||||
* v1.1.1
|
||||
*/
|
||||
md-slider.md-THEME_NAME-theme .md-track {
|
||||
background-color: '{{foreground-3}}'; }
|
||||
|
||||
md-slider.md-THEME_NAME-theme .md-track-ticks {
|
||||
color: '{{background-contrast}}'; }
|
||||
|
||||
md-slider.md-THEME_NAME-theme .md-focus-ring {
|
||||
background-color: '{{accent-A200-0.2}}'; }
|
||||
|
||||
md-slider.md-THEME_NAME-theme .md-disabled-thumb {
|
||||
border-color: '{{background-color}}';
|
||||
background-color: '{{background-color}}'; }
|
||||
|
||||
md-slider.md-THEME_NAME-theme.md-min .md-thumb:after {
|
||||
background-color: '{{background-color}}';
|
||||
border-color: '{{foreground-3}}'; }
|
||||
|
||||
md-slider.md-THEME_NAME-theme.md-min .md-focus-ring {
|
||||
background-color: '{{foreground-3-0.38}}'; }
|
||||
|
||||
md-slider.md-THEME_NAME-theme.md-min[md-discrete] .md-thumb:after {
|
||||
background-color: '{{background-contrast}}';
|
||||
border-color: transparent; }
|
||||
|
||||
md-slider.md-THEME_NAME-theme.md-min[md-discrete] .md-sign {
|
||||
background-color: '{{background-400}}'; }
|
||||
md-slider.md-THEME_NAME-theme.md-min[md-discrete] .md-sign:after {
|
||||
border-top-color: '{{background-400}}'; }
|
||||
|
||||
md-slider.md-THEME_NAME-theme.md-min[md-discrete][md-vertical] .md-sign:after {
|
||||
border-top-color: transparent;
|
||||
border-left-color: '{{background-400}}'; }
|
||||
|
||||
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-vertical] .md-sign:after {
|
||||
border-top-color: transparent;
|
||||
border-left-color: '{{accent-color}}'; }
|
||||
|
||||
md-slider.md-THEME_NAME-theme .md-thumb-text {
|
||||
color: '{{accent-contrast}}'; }
|
||||
|
||||
md-slider.md-THEME_NAME-theme.md-warn .md-focus-ring {
|
||||
background-color: '{{warn-200-0.38}}'; }
|
||||
|
||||
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-vertical] .md-sign:after {
|
||||
border-top-color: transparent;
|
||||
border-left-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-focus-ring {
|
||||
background-color: '{{primary-200-0.38}}'; }
|
||||
|
||||
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-vertical] .md-sign:after {
|
||||
border-top-color: transparent;
|
||||
border-left-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: transparent; }
|
||||
|
||||
md-slider.md-THEME_NAME-theme[disabled]:not(.md-min) .md-thumb:after, md-slider.md-THEME_NAME-theme[disabled][md-discrete] .md-thumb:after {
|
||||
background-color: '{{foreground-3}}';
|
||||
border-color: transparent; }
|
||||
|
||||
md-slider.md-THEME_NAME-theme[disabled][readonly] .md-sign {
|
||||
background-color: '{{background-400}}'; }
|
||||
md-slider.md-THEME_NAME-theme[disabled][readonly] .md-sign:after {
|
||||
border-top-color: '{{background-400}}'; }
|
||||
|
||||
md-slider.md-THEME_NAME-theme[disabled][readonly][md-vertical] .md-sign:after {
|
||||
border-top-color: transparent;
|
||||
border-left-color: '{{background-400}}'; }
|
||||
|
||||
md-slider.md-THEME_NAME-theme[disabled][readonly] .md-disabled-thumb {
|
||||
border-color: transparent;
|
||||
background-color: transparent; }
|
||||
|
||||
md-slider-container[disabled] > *:first-child:not(md-slider),
|
||||
md-slider-container[disabled] > *:last-child:not(md-slider) {
|
||||
color: '{{foreground-3}}'; }
|
||||
6
www/lib/angular-material/modules/closure/slider/slider-default-theme.min.css
vendored
Normal file
6
www/lib/angular-material/modules/closure/slider/slider-default-theme.min.css
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
/*!
|
||||
* Angular Material Design
|
||||
* https://github.com/angular/material
|
||||
* @license MIT
|
||||
* v1.1.0-master-2b98560
|
||||
*/md-slider.md-THEME_NAME-theme .md-track{background-color:'{{foreground-3}}'}md-slider.md-THEME_NAME-theme .md-track-ticks{color:'{{background-contrast}}'}md-slider.md-THEME_NAME-theme .md-focus-ring{background-color:'{{accent-A200-0.2}}'}md-slider.md-THEME_NAME-theme .md-disabled-thumb{border-color:'{{background-color}}';background-color:'{{background-color}}'}md-slider.md-THEME_NAME-theme.md-min .md-thumb:after{background-color:'{{background-color}}';border-color:'{{foreground-3}}'}md-slider.md-THEME_NAME-theme.md-min .md-focus-ring{background-color:'{{foreground-3-0.38}}'}md-slider.md-THEME_NAME-theme.md-min[md-discrete] .md-thumb:after{background-color:'{{background-contrast}}';border-color:transparent}md-slider.md-THEME_NAME-theme.md-min[md-discrete] .md-sign{background-color:'{{background-400}}'}md-slider.md-THEME_NAME-theme.md-min[md-discrete] .md-sign:after{border-top-color:'{{background-400}}'}md-slider.md-THEME_NAME-theme.md-min[md-discrete][md-vertical] .md-sign:after{border-top-color:transparent;border-left-color:'{{background-400}}'}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-vertical] .md-sign:after{border-top-color:transparent;border-left-color:'{{accent-color}}'}md-slider.md-THEME_NAME-theme .md-thumb-text{color:'{{accent-contrast}}'}md-slider.md-THEME_NAME-theme.md-warn .md-focus-ring{background-color:'{{warn-200-0.38}}'}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-vertical] .md-sign:after{border-top-color:transparent;border-left-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-focus-ring{background-color:'{{primary-200-0.38}}'}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-vertical] .md-sign:after{border-top-color:transparent;border-left-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:transparent}md-slider.md-THEME_NAME-theme[disabled]:not(.md-min) .md-thumb:after,md-slider.md-THEME_NAME-theme[disabled][md-discrete] .md-thumb:after{background-color:'{{foreground-3}}';border-color:transparent}md-slider.md-THEME_NAME-theme[disabled][readonly] .md-sign{background-color:'{{background-400}}'}md-slider.md-THEME_NAME-theme[disabled][readonly] .md-sign:after{border-top-color:'{{background-400}}'}md-slider.md-THEME_NAME-theme[disabled][readonly][md-vertical] .md-sign:after{border-top-color:transparent;border-left-color:'{{background-400}}'}md-slider.md-THEME_NAME-theme[disabled][readonly] .md-disabled-thumb{border-color:transparent;background-color:transparent}md-slider-container[disabled]>:first-child:not(md-slider),md-slider-container[disabled]>:last-child:not(md-slider){color:'{{foreground-3}}'}
|
||||
439
www/lib/angular-material/modules/closure/slider/slider.css
Normal file
439
www/lib/angular-material/modules/closure/slider/slider.css
Normal file
@@ -0,0 +1,439 @@
|
||||
/*!
|
||||
* Angular Material Design
|
||||
* https://github.com/angular/material
|
||||
* @license MIT
|
||||
* v1.1.1
|
||||
*/
|
||||
@-webkit-keyframes sliderFocusThumb {
|
||||
0% {
|
||||
-webkit-transform: scale(0.7);
|
||||
transform: scale(0.7); }
|
||||
30% {
|
||||
-webkit-transform: scale(1);
|
||||
transform: scale(1); }
|
||||
100% {
|
||||
-webkit-transform: scale(0.7);
|
||||
transform: scale(0.7); } }
|
||||
|
||||
@keyframes sliderFocusThumb {
|
||||
0% {
|
||||
-webkit-transform: scale(0.7);
|
||||
transform: scale(0.7); }
|
||||
30% {
|
||||
-webkit-transform: scale(1);
|
||||
transform: scale(1); }
|
||||
100% {
|
||||
-webkit-transform: scale(0.7);
|
||||
transform: scale(0.7); } }
|
||||
|
||||
@-webkit-keyframes sliderDiscreteFocusThumb {
|
||||
0% {
|
||||
-webkit-transform: scale(0.7);
|
||||
transform: scale(0.7); }
|
||||
50% {
|
||||
-webkit-transform: scale(0.8);
|
||||
transform: scale(0.8); }
|
||||
100% {
|
||||
-webkit-transform: scale(0);
|
||||
transform: scale(0); } }
|
||||
|
||||
@keyframes sliderDiscreteFocusThumb {
|
||||
0% {
|
||||
-webkit-transform: scale(0.7);
|
||||
transform: scale(0.7); }
|
||||
50% {
|
||||
-webkit-transform: scale(0.8);
|
||||
transform: scale(0.8); }
|
||||
100% {
|
||||
-webkit-transform: scale(0);
|
||||
transform: scale(0); } }
|
||||
|
||||
@-webkit-keyframes sliderDiscreteFocusRing {
|
||||
0% {
|
||||
-webkit-transform: scale(0.7);
|
||||
transform: scale(0.7);
|
||||
opacity: 0; }
|
||||
50% {
|
||||
-webkit-transform: scale(1);
|
||||
transform: scale(1);
|
||||
opacity: 1; }
|
||||
100% {
|
||||
-webkit-transform: scale(0);
|
||||
transform: scale(0); } }
|
||||
|
||||
@keyframes sliderDiscreteFocusRing {
|
||||
0% {
|
||||
-webkit-transform: scale(0.7);
|
||||
transform: scale(0.7);
|
||||
opacity: 0; }
|
||||
50% {
|
||||
-webkit-transform: scale(1);
|
||||
transform: scale(1);
|
||||
opacity: 1; }
|
||||
100% {
|
||||
-webkit-transform: scale(0);
|
||||
transform: scale(0); } }
|
||||
|
||||
md-slider {
|
||||
height: 48px;
|
||||
min-width: 128px;
|
||||
position: relative;
|
||||
margin-left: 4px;
|
||||
margin-right: 4px;
|
||||
padding: 0;
|
||||
display: block;
|
||||
-webkit-box-orient: horizontal;
|
||||
-webkit-box-direction: normal;
|
||||
-webkit-flex-direction: row;
|
||||
flex-direction: row;
|
||||
/**
|
||||
* 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 {
|
||||
outline: none;
|
||||
width: 100%;
|
||||
height: 100%; }
|
||||
md-slider .md-slider-content {
|
||||
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 {
|
||||
-webkit-transition: all 0.4s cubic-bezier(0.25, 0.8, 0.25, 1);
|
||||
transition: all 0.4s cubic-bezier(0.25, 0.8, 0.25, 1);
|
||||
-webkit-transition-property: width, height;
|
||||
transition-property: width, height; }
|
||||
md-slider .md-track-ticks {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
right: 0;
|
||||
height: 100%; }
|
||||
md-slider .md-track-ticks canvas {
|
||||
width: 100%;
|
||||
height: 100%; }
|
||||
md-slider .md-thumb-container {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 50%;
|
||||
-webkit-transform: translate3d(-50%, -50%, 0);
|
||||
transform: translate3d(-50%, -50%, 0);
|
||||
-webkit-transition: all 0.4s cubic-bezier(0.25, 0.8, 0.25, 1);
|
||||
transition: all 0.4s cubic-bezier(0.25, 0.8, 0.25, 1);
|
||||
-webkit-transition-property: left, right, bottom;
|
||||
transition-property: left, right, bottom; }
|
||||
[dir=rtl] md-slider .md-thumb-container {
|
||||
left: auto;
|
||||
right: 0; }
|
||||
md-slider .md-thumb {
|
||||
z-index: 1;
|
||||
position: absolute;
|
||||
left: -10px;
|
||||
top: 14px;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
border-radius: 20px;
|
||||
-webkit-transform: scale(0.7);
|
||||
transform: scale(0.7);
|
||||
-webkit-transition: all 0.4s cubic-bezier(0.25, 0.8, 0.25, 1);
|
||||
transition: all 0.4s cubic-bezier(0.25, 0.8, 0.25, 1); }
|
||||
[dir=rtl] md-slider .md-thumb {
|
||||
left: auto;
|
||||
right: -10px; }
|
||||
md-slider .md-thumb:after {
|
||||
content: '';
|
||||
position: absolute;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
border-radius: 20px;
|
||||
border-width: 3px;
|
||||
border-style: solid;
|
||||
-webkit-transition: inherit;
|
||||
transition: inherit; }
|
||||
md-slider .md-sign {
|
||||
/* Center the children (slider-thumb-text) */
|
||||
display: -webkit-box;
|
||||
display: -webkit-flex;
|
||||
display: flex;
|
||||
-webkit-box-align: center;
|
||||
-webkit-align-items: center;
|
||||
align-items: center;
|
||||
-webkit-box-pack: center;
|
||||
-webkit-justify-content: center;
|
||||
justify-content: center;
|
||||
position: absolute;
|
||||
left: -14px;
|
||||
top: -17px;
|
||||
width: 28px;
|
||||
height: 28px;
|
||||
border-radius: 28px;
|
||||
-webkit-transform: scale(0.4) translate3d(0, 67.5px, 0);
|
||||
transform: scale(0.4) translate3d(0, 67.5px, 0);
|
||||
-webkit-transition: all 0.3s cubic-bezier(0.35, 0, 0.25, 1);
|
||||
transition: all 0.3s cubic-bezier(0.35, 0, 0.25, 1);
|
||||
/* 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);
|
||||
-webkit-transition: all 0.2s cubic-bezier(0.35, 0, 0.25, 1);
|
||||
transition: all 0.2s cubic-bezier(0.35, 0, 0.25, 1); }
|
||||
[dir=rtl] md-slider .md-sign:after {
|
||||
left: auto;
|
||||
right: 0px; }
|
||||
md-slider .md-sign .md-thumb-text {
|
||||
z-index: 1;
|
||||
font-size: 12px;
|
||||
font-weight: bold; }
|
||||
md-slider .md-focus-ring {
|
||||
position: absolute;
|
||||
left: -17px;
|
||||
top: 7px;
|
||||
width: 34px;
|
||||
height: 34px;
|
||||
border-radius: 34px;
|
||||
-webkit-transform: scale(0.7);
|
||||
transform: scale(0.7);
|
||||
opacity: 0;
|
||||
-webkit-transition: all 0.35s cubic-bezier(0.35, 0, 0.25, 1);
|
||||
transition: all 0.35s cubic-bezier(0.35, 0, 0.25, 1); }
|
||||
[dir=rtl] md-slider .md-focus-ring {
|
||||
left: auto;
|
||||
right: -17px; }
|
||||
md-slider .md-disabled-thumb {
|
||||
position: absolute;
|
||||
left: -14px;
|
||||
top: 10px;
|
||||
width: 28px;
|
||||
height: 28px;
|
||||
border-radius: 28px;
|
||||
-webkit-transform: scale(0.5);
|
||||
transform: scale(0.5);
|
||||
border-width: 4px;
|
||||
border-style: solid;
|
||||
display: none; }
|
||||
[dir=rtl] md-slider .md-disabled-thumb {
|
||||
left: auto;
|
||||
right: -14px; }
|
||||
md-slider.md-min .md-sign {
|
||||
opacity: 0; }
|
||||
md-slider:focus {
|
||||
outline: none; }
|
||||
md-slider.md-dragging .md-thumb-container,
|
||||
md-slider.md-dragging .md-track-fill {
|
||||
-webkit-transition: none;
|
||||
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]) .md-slider-wrapper .md-thumb:hover {
|
||||
-webkit-transform: scale(0.8);
|
||||
transform: scale(0.8); }
|
||||
md-slider:not([md-discrete]):not([disabled]) .md-slider-wrapper.md-focused .md-focus-ring {
|
||||
-webkit-transform: scale(1);
|
||||
transform: scale(1);
|
||||
opacity: 1; }
|
||||
md-slider:not([md-discrete]):not([disabled]) .md-slider-wrapper.md-focused .md-thumb {
|
||||
-webkit-animation: sliderFocusThumb 0.7s cubic-bezier(0.35, 0, 0.25, 1);
|
||||
animation: sliderFocusThumb 0.7s cubic-bezier(0.35, 0, 0.25, 1); }
|
||||
md-slider:not([md-discrete]):not([disabled]).md-active .md-slider-wrapper .md-thumb {
|
||||
-webkit-transform: scale(1);
|
||||
transform: scale(1); }
|
||||
md-slider[md-discrete]:not([disabled]) .md-slider-wrapper.md-focused .md-focus-ring {
|
||||
-webkit-transform: scale(0);
|
||||
transform: scale(0);
|
||||
-webkit-animation: sliderDiscreteFocusRing 0.5s cubic-bezier(0.35, 0, 0.25, 1);
|
||||
animation: sliderDiscreteFocusRing 0.5s cubic-bezier(0.35, 0, 0.25, 1); }
|
||||
md-slider[md-discrete]:not([disabled]) .md-slider-wrapper.md-focused .md-thumb {
|
||||
-webkit-animation: sliderDiscreteFocusThumb 0.5s cubic-bezier(0.35, 0, 0.25, 1);
|
||||
animation: sliderDiscreteFocusThumb 0.5s cubic-bezier(0.35, 0, 0.25, 1); }
|
||||
md-slider[md-discrete]:not([disabled]) .md-slider-wrapper.md-focused .md-thumb, md-slider[md-discrete]:not([disabled]).md-active .md-thumb {
|
||||
-webkit-transform: scale(0);
|
||||
transform: scale(0); }
|
||||
md-slider[md-discrete]:not([disabled]) .md-slider-wrapper.md-focused .md-sign,
|
||||
md-slider[md-discrete]:not([disabled]) .md-slider-wrapper.md-focused .md-sign:after, md-slider[md-discrete]:not([disabled]).md-active .md-sign,
|
||||
md-slider[md-discrete]:not([disabled]).md-active .md-sign:after {
|
||||
opacity: 1;
|
||||
-webkit-transform: translate3d(0, 0, 0) scale(1);
|
||||
transform: translate3d(0, 0, 0) scale(1); }
|
||||
md-slider[md-discrete][disabled][readonly] .md-thumb {
|
||||
-webkit-transform: scale(0);
|
||||
transform: scale(0); }
|
||||
md-slider[md-discrete][disabled][readonly] .md-sign,
|
||||
md-slider[md-discrete][disabled][readonly] .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-track-ticks {
|
||||
opacity: 0; }
|
||||
md-slider[disabled]:not([readonly]) .md-sign {
|
||||
opacity: 0; }
|
||||
md-slider[disabled] .md-thumb {
|
||||
-webkit-transform: scale(0.5);
|
||||
transform: scale(0.5); }
|
||||
md-slider[disabled] .md-disabled-thumb {
|
||||
display: block; }
|
||||
md-slider[md-vertical] {
|
||||
-webkit-box-orient: vertical;
|
||||
-webkit-box-direction: normal;
|
||||
-webkit-flex-direction: column;
|
||||
flex-direction: column;
|
||||
min-height: 128px;
|
||||
min-width: 0; }
|
||||
md-slider[md-vertical] .md-slider-wrapper {
|
||||
-webkit-box-flex: 1;
|
||||
-webkit-flex: 1;
|
||||
flex: 1;
|
||||
padding-top: 12px;
|
||||
padding-bottom: 12px;
|
||||
width: 48px;
|
||||
-webkit-align-self: center;
|
||||
align-self: center;
|
||||
display: -webkit-box;
|
||||
display: -webkit-flex;
|
||||
display: flex;
|
||||
-webkit-box-pack: center;
|
||||
-webkit-justify-content: center;
|
||||
justify-content: center; }
|
||||
md-slider[md-vertical] .md-track-container {
|
||||
height: 100%;
|
||||
width: 2px;
|
||||
top: 0;
|
||||
left: calc(50% - (2px / 2)); }
|
||||
md-slider[md-vertical] .md-thumb-container {
|
||||
top: auto;
|
||||
margin-bottom: 23px;
|
||||
left: calc(50% - 1px);
|
||||
bottom: 0; }
|
||||
md-slider[md-vertical] .md-thumb-container .md-thumb:after {
|
||||
left: 1px; }
|
||||
md-slider[md-vertical] .md-thumb-container .md-focus-ring {
|
||||
left: -16px; }
|
||||
md-slider[md-vertical] .md-track-fill {
|
||||
bottom: 0; }
|
||||
md-slider[md-vertical][md-discrete] .md-sign {
|
||||
left: -40px;
|
||||
top: 9.5px;
|
||||
-webkit-transform: scale(0.4) translate3d(67.5px, 0, 0);
|
||||
transform: scale(0.4) translate3d(67.5px, 0, 0);
|
||||
/* The arrow pointing left next the sign */ }
|
||||
md-slider[md-vertical][md-discrete] .md-sign:after {
|
||||
top: 9.5px;
|
||||
left: 19px;
|
||||
border-top: 14px solid transparent;
|
||||
border-right: 0;
|
||||
border-bottom: 14px solid transparent;
|
||||
border-left-width: 16px;
|
||||
border-left-style: solid;
|
||||
opacity: 0;
|
||||
-webkit-transform: translate3d(0, -8px, 0);
|
||||
transform: translate3d(0, -8px, 0);
|
||||
-webkit-transition: all 0.2s ease-in-out;
|
||||
transition: all 0.2s ease-in-out; }
|
||||
md-slider[md-vertical][md-discrete] .md-sign .md-thumb-text {
|
||||
z-index: 1;
|
||||
font-size: 12px;
|
||||
font-weight: bold; }
|
||||
md-slider[md-vertical][md-discrete].md-active .md-sign:after,
|
||||
md-slider[md-vertical][md-discrete] .md-focused .md-sign:after, md-slider[md-vertical][md-discrete][disabled][readonly] .md-sign:after {
|
||||
top: 0; }
|
||||
md-slider[md-vertical][disabled][readonly] .md-thumb {
|
||||
-webkit-transform: scale(0);
|
||||
transform: scale(0); }
|
||||
md-slider[md-vertical][disabled][readonly] .md-sign,
|
||||
md-slider[md-vertical][disabled][readonly] .md-sign:after {
|
||||
opacity: 1;
|
||||
-webkit-transform: translate3d(0, 0, 0) scale(1);
|
||||
transform: translate3d(0, 0, 0) scale(1); }
|
||||
md-slider[md-invert]:not([md-vertical]) .md-track-fill {
|
||||
left: auto;
|
||||
right: 0; }
|
||||
[dir=rtl] md-slider[md-invert]:not([md-vertical]) .md-track-fill {
|
||||
left: 0; }
|
||||
[dir=rtl] md-slider[md-invert]:not([md-vertical]) .md-track-fill {
|
||||
right: auto; }
|
||||
md-slider[md-invert][md-vertical] .md-track-fill {
|
||||
bottom: auto;
|
||||
top: 0; }
|
||||
|
||||
md-slider-container {
|
||||
display: -webkit-box;
|
||||
display: -webkit-flex;
|
||||
display: flex;
|
||||
-webkit-box-align: center;
|
||||
-webkit-align-items: center;
|
||||
align-items: center;
|
||||
-webkit-box-orient: horizontal;
|
||||
-webkit-box-direction: normal;
|
||||
-webkit-flex-direction: row;
|
||||
flex-direction: row; }
|
||||
md-slider-container > *:first-child:not(md-slider),
|
||||
md-slider-container > *:last-child:not(md-slider) {
|
||||
min-width: 25px;
|
||||
max-width: 42px;
|
||||
height: 25px;
|
||||
-webkit-transition: all 0.4s cubic-bezier(0.25, 0.8, 0.25, 1);
|
||||
transition: all 0.4s cubic-bezier(0.25, 0.8, 0.25, 1);
|
||||
-webkit-transition-property: color, max-width;
|
||||
transition-property: color, max-width; }
|
||||
md-slider-container > *:first-child:not(md-slider) {
|
||||
margin-right: 16px; }
|
||||
[dir=rtl] md-slider-container > *:first-child:not(md-slider) {
|
||||
margin-right: auto;
|
||||
margin-left: 16px; }
|
||||
md-slider-container > *:last-child:not(md-slider) {
|
||||
margin-left: 16px; }
|
||||
[dir=rtl] md-slider-container > *:last-child:not(md-slider) {
|
||||
margin-left: auto;
|
||||
margin-right: 16px; }
|
||||
md-slider-container[md-vertical] {
|
||||
-webkit-box-orient: vertical;
|
||||
-webkit-box-direction: normal;
|
||||
-webkit-flex-direction: column;
|
||||
flex-direction: column; }
|
||||
md-slider-container[md-vertical] > *:first-child:not(md-slider),
|
||||
md-slider-container[md-vertical] > *:last-child:not(md-slider) {
|
||||
margin-right: 0;
|
||||
margin-left: 0;
|
||||
text-align: center; }
|
||||
md-slider-container md-input-container input[type="number"] {
|
||||
text-align: center;
|
||||
padding-left: 15px;
|
||||
height: 50px;
|
||||
margin-top: -25px; }
|
||||
[dir=rtl] md-slider-container md-input-container input[type="number"] {
|
||||
padding-left: 0;
|
||||
padding-right: 15px; }
|
||||
|
||||
@media screen and (-ms-high-contrast: active) {
|
||||
md-slider.md-default-theme .md-track {
|
||||
border-bottom: 1px solid #fff; } }
|
||||
606
www/lib/angular-material/modules/closure/slider/slider.js
vendored
Normal file
606
www/lib/angular-material/modules/closure/slider/slider.js
vendored
Normal file
@@ -0,0 +1,606 @@
|
||||
/*!
|
||||
* Angular Material Design
|
||||
* https://github.com/angular/material
|
||||
* @license MIT
|
||||
* v1.1.1
|
||||
*/
|
||||
goog.provide('ngmaterial.components.slider');
|
||||
goog.require('ngmaterial.core');
|
||||
/**
|
||||
* @ngdoc module
|
||||
* @name material.components.slider
|
||||
*/
|
||||
SliderDirective.$inject = ["$$rAF", "$window", "$mdAria", "$mdUtil", "$mdConstant", "$mdTheming", "$mdGesture", "$parse", "$log", "$timeout"];
|
||||
angular.module('material.components.slider', [
|
||||
'material.core'
|
||||
])
|
||||
.directive('mdSlider', SliderDirective)
|
||||
.directive('mdSliderContainer', SliderContainerDirective);
|
||||
|
||||
/**
|
||||
* @ngdoc directive
|
||||
* @name mdSliderContainer
|
||||
* @module material.components.slider
|
||||
* @restrict E
|
||||
* @description
|
||||
* The `<md-slider-container>` contains slider with two other elements.
|
||||
*
|
||||
*
|
||||
* @usage
|
||||
* <h4>Normal Mode</h4>
|
||||
* <hljs lang="html">
|
||||
* </hljs>
|
||||
*/
|
||||
function SliderContainerDirective() {
|
||||
return {
|
||||
controller: function () {},
|
||||
compile: function (elem) {
|
||||
var slider = elem.find('md-slider');
|
||||
|
||||
if (!slider) {
|
||||
return;
|
||||
}
|
||||
|
||||
var vertical = slider.attr('md-vertical');
|
||||
|
||||
if (vertical !== undefined) {
|
||||
elem.attr('md-vertical', '');
|
||||
}
|
||||
|
||||
if(!slider.attr('flex')) {
|
||||
slider.attr('flex', '');
|
||||
}
|
||||
|
||||
return function postLink(scope, element, attr, ctrl) {
|
||||
element.addClass('_md'); // private md component indicator for styling
|
||||
|
||||
// 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.
|
||||
function setDisable(value) {
|
||||
element.children().attr('disabled', value);
|
||||
element.find('input').attr('disabled', value);
|
||||
}
|
||||
|
||||
var stopDisabledWatch = angular.noop;
|
||||
|
||||
if (attr.disabled) {
|
||||
setDisable(true);
|
||||
}
|
||||
else if (attr.ngDisabled) {
|
||||
stopDisabledWatch = scope.$watch(attr.ngDisabled, function (value) {
|
||||
setDisable(value);
|
||||
});
|
||||
}
|
||||
|
||||
scope.$on('$destroy', function () {
|
||||
stopDisabledWatch();
|
||||
});
|
||||
|
||||
var initialMaxWidth;
|
||||
|
||||
ctrl.fitInputWidthToTextLength = function (length) {
|
||||
var input = element[0].querySelector('md-input-container');
|
||||
|
||||
if (input) {
|
||||
var computedStyle = getComputedStyle(input);
|
||||
var minWidth = parseInt(computedStyle.minWidth);
|
||||
var padding = parseInt(computedStyle.padding) * 2;
|
||||
|
||||
initialMaxWidth = initialMaxWidth || parseInt(computedStyle.maxWidth);
|
||||
var newMaxWidth = Math.max(initialMaxWidth, minWidth + padding + (minWidth / 2 * length));
|
||||
|
||||
input.style.maxWidth = newMaxWidth + 'px';
|
||||
}
|
||||
};
|
||||
};
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* @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>
|
||||
* <h4>Invert Mode</h4>
|
||||
* <hljs lang="html">
|
||||
* <md-slider md-invert ng-model="myValue" step="10" min="10" max="130">
|
||||
* </md-slider>
|
||||
* </hljs>
|
||||
*
|
||||
* @param {boolean=} md-discrete Whether to enable discrete mode.
|
||||
* @param {boolean=} md-invert Whether to enable invert 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.
|
||||
* @param {number=} round The amount of numbers after the decimal point, maximum is 6 to prevent scientific notation. Default 3.
|
||||
*/
|
||||
function SliderDirective($$rAF, $window, $mdAria, $mdUtil, $mdConstant, $mdTheming, $mdGesture, $parse, $log, $timeout) {
|
||||
return {
|
||||
scope: {},
|
||||
require: ['?ngModel', '?^mdSliderContainer'],
|
||||
template:
|
||||
'<div class="md-slider-wrapper">' +
|
||||
'<div class="md-slider-content">' +
|
||||
'<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>' +
|
||||
'</div>',
|
||||
compile: compile
|
||||
};
|
||||
|
||||
// **********************************************************
|
||||
// Private Methods
|
||||
// **********************************************************
|
||||
|
||||
function compile (tElement, tAttrs) {
|
||||
var wrapper = angular.element(tElement[0].getElementsByClassName('md-slider-wrapper'));
|
||||
|
||||
var tabIndex = tAttrs.tabindex || 0;
|
||||
wrapper.attr('tabindex', tabIndex);
|
||||
|
||||
if (tAttrs.disabled || tAttrs.ngDisabled) wrapper.attr('tabindex', -1);
|
||||
|
||||
wrapper.attr('role', 'slider');
|
||||
|
||||
$mdAria.expect(tElement, 'aria-label');
|
||||
|
||||
return postLink;
|
||||
}
|
||||
|
||||
function postLink(scope, element, attr, ctrls) {
|
||||
$mdTheming(element);
|
||||
var ngModelCtrl = ctrls[0] || {
|
||||
// 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 containerCtrl = ctrls[1];
|
||||
var container = angular.element($mdUtil.getClosest(element, '_md-slider-container', true));
|
||||
var isDisabled = attr.ngDisabled ? angular.bind(null, $parse(attr.ngDisabled), scope.$parent) : function () {
|
||||
return element[0].hasAttribute('disabled');
|
||||
};
|
||||
|
||||
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 wrapper = angular.element(element[0].getElementsByClassName('md-slider-wrapper'));
|
||||
var content = angular.element(element[0].getElementsByClassName('md-slider-content'));
|
||||
var throttledRefreshDimensions = $mdUtil.throttle(refreshSliderDimensions, 5000);
|
||||
|
||||
// Default values, overridable by attrs
|
||||
var DEFAULT_ROUND = 3;
|
||||
var vertical = angular.isDefined(attr.mdVertical);
|
||||
var discrete = angular.isDefined(attr.mdDiscrete);
|
||||
var invert = angular.isDefined(attr.mdInvert);
|
||||
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);
|
||||
angular.isDefined(attr.round)? attr.$observe('round', updateRound) : updateRound(DEFAULT_ROUND);
|
||||
|
||||
// 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(wrapper, 'drag', { horizontal: !vertical });
|
||||
|
||||
scope.mouseActive = false;
|
||||
|
||||
wrapper
|
||||
.on('keydown', keydownListener)
|
||||
.on('mousedown', mouseDownListener)
|
||||
.on('focus', focusListener)
|
||||
.on('blur', blurListener)
|
||||
.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();
|
||||
}
|
||||
setTimeout(updateAll, 0);
|
||||
|
||||
var debouncedUpdateAll = $$rAF.throttle(updateAll);
|
||||
angular.element($window).on('resize', debouncedUpdateAll);
|
||||
|
||||
scope.$on('$destroy', function() {
|
||||
angular.element($window).off('resize', debouncedUpdateAll);
|
||||
});
|
||||
|
||||
ngModelCtrl.$render = ngModelRender;
|
||||
ngModelCtrl.$viewChangeListeners.push(ngModelRender);
|
||||
ngModelCtrl.$formatters.push(minMaxValidator);
|
||||
ngModelCtrl.$formatters.push(stepValidator);
|
||||
|
||||
/**
|
||||
* Attributes
|
||||
*/
|
||||
var min;
|
||||
var max;
|
||||
var step;
|
||||
var round;
|
||||
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);
|
||||
}
|
||||
function updateRound(value) {
|
||||
// Set max round digits to 6, after 6 the input uses scientific notation
|
||||
round = minMaxValidator(parseInt(value), 0, 6);
|
||||
}
|
||||
function updateAriaDisabled() {
|
||||
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 (!discrete || isDisabled()) return;
|
||||
if ( angular.isUndefined(step) ) return;
|
||||
|
||||
if ( step <= 0 ) {
|
||||
var msg = 'Slider step value must be greater than zero when in discrete mode';
|
||||
$log.error(msg);
|
||||
throw new Error(msg);
|
||||
}
|
||||
|
||||
var numSteps = Math.floor( (max - min) / step );
|
||||
if (!tickCanvas) {
|
||||
tickCanvas = angular.element('<canvas>').css('position', 'absolute');
|
||||
tickContainer.append(tickCanvas);
|
||||
|
||||
tickCtx = tickCanvas[0].getContext('2d');
|
||||
}
|
||||
|
||||
var dimensions = getSliderDimensions();
|
||||
|
||||
// If `dimensions` doesn't have height and width it might be the first attempt so we will refresh dimensions
|
||||
if (dimensions && !dimensions.height && !dimensions.width) {
|
||||
refreshSliderDimensions();
|
||||
dimensions = sliderDimensions;
|
||||
}
|
||||
|
||||
tickCanvas[0].width = dimensions.width;
|
||||
tickCanvas[0].height = dimensions.height;
|
||||
|
||||
var distance;
|
||||
for (var i = 0; i <= numSteps; i++) {
|
||||
var trackTicksStyle = $window.getComputedStyle(tickContainer[0]);
|
||||
tickCtx.fillStyle = trackTicksStyle.color || 'black';
|
||||
|
||||
distance = Math.floor((vertical ? dimensions.height : dimensions.width) * (i / numSteps));
|
||||
|
||||
tickCtx.fillRect(vertical ? 0 : distance - 1,
|
||||
vertical ? distance - 1 : 0,
|
||||
vertical ? dimensions.width : 2,
|
||||
vertical ? 2 : dimensions.height);
|
||||
}
|
||||
}
|
||||
|
||||
function clearTicks() {
|
||||
if(tickCanvas && tickCtx) {
|
||||
var dimensions = getSliderDimensions();
|
||||
tickCtx.clearRect(0, 0, dimensions.width, dimensions.height);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Refreshing Dimensions
|
||||
*/
|
||||
var sliderDimensions = {};
|
||||
refreshSliderDimensions();
|
||||
function refreshSliderDimensions() {
|
||||
sliderDimensions = trackContainer[0].getBoundingClientRect();
|
||||
}
|
||||
function getSliderDimensions() {
|
||||
throttledRefreshDimensions();
|
||||
return sliderDimensions;
|
||||
}
|
||||
|
||||
/**
|
||||
* left/right/up/down arrow listener
|
||||
*/
|
||||
function keydownListener(ev) {
|
||||
if (isDisabled()) return;
|
||||
|
||||
var changeAmount;
|
||||
if (vertical ? ev.keyCode === $mdConstant.KEY_CODE.DOWN_ARROW : ev.keyCode === $mdConstant.KEY_CODE.LEFT_ARROW) {
|
||||
changeAmount = -step;
|
||||
} else if (vertical ? ev.keyCode === $mdConstant.KEY_CODE.UP_ARROW : ev.keyCode === $mdConstant.KEY_CODE.RIGHT_ARROW) {
|
||||
changeAmount = step;
|
||||
}
|
||||
changeAmount = invert ? -changeAmount : changeAmount;
|
||||
if (changeAmount) {
|
||||
if (ev.metaKey || ev.ctrlKey || ev.altKey) {
|
||||
changeAmount *= 4;
|
||||
}
|
||||
ev.preventDefault();
|
||||
ev.stopPropagation();
|
||||
scope.$evalAsync(function() {
|
||||
setModelValue(ngModelCtrl.$viewValue + changeAmount);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function mouseDownListener() {
|
||||
redrawTicks();
|
||||
|
||||
scope.mouseActive = true;
|
||||
wrapper.removeClass('md-focused');
|
||||
|
||||
$timeout(function() {
|
||||
scope.mouseActive = false;
|
||||
}, 100);
|
||||
}
|
||||
|
||||
function focusListener() {
|
||||
if (scope.mouseActive === false) {
|
||||
wrapper.addClass('md-focused');
|
||||
}
|
||||
}
|
||||
|
||||
function blurListener() {
|
||||
wrapper.removeClass('md-focused');
|
||||
element.removeClass('md-active');
|
||||
clearTicks();
|
||||
}
|
||||
|
||||
/**
|
||||
* ngModel setters and validators
|
||||
*/
|
||||
function setModelValue(value) {
|
||||
ngModelCtrl.$setViewValue( minMaxValidator(stepValidator(value)) );
|
||||
}
|
||||
function ngModelRender() {
|
||||
if (isNaN(ngModelCtrl.$viewValue)) {
|
||||
ngModelCtrl.$viewValue = ngModelCtrl.$modelValue;
|
||||
}
|
||||
|
||||
ngModelCtrl.$viewValue = minMaxValidator(ngModelCtrl.$viewValue);
|
||||
|
||||
var percent = valueToPercent(ngModelCtrl.$viewValue);
|
||||
scope.modelValue = ngModelCtrl.$viewValue;
|
||||
element.attr('aria-valuenow', ngModelCtrl.$viewValue);
|
||||
setSliderPercent(percent);
|
||||
thumbText.text( ngModelCtrl.$viewValue );
|
||||
}
|
||||
|
||||
function minMaxValidator(value, minValue, maxValue) {
|
||||
if (angular.isNumber(value)) {
|
||||
minValue = angular.isNumber(minValue) ? minValue : min;
|
||||
maxValue = angular.isNumber(maxValue) ? maxValue : max;
|
||||
|
||||
return Math.max(minValue, Math.min(maxValue, value));
|
||||
}
|
||||
}
|
||||
|
||||
function stepValidator(value) {
|
||||
if (angular.isNumber(value)) {
|
||||
var formattedValue = (Math.round((value - min) / step) * step + min);
|
||||
formattedValue = (Math.round(formattedValue * Math.pow(10, round)) / Math.pow(10, round));
|
||||
|
||||
if (containerCtrl && containerCtrl.fitInputWidthToTextLength){
|
||||
$mdUtil.debounce(function () {
|
||||
containerCtrl.fitInputWidthToTextLength(formattedValue.toString().length);
|
||||
}, 100)();
|
||||
}
|
||||
|
||||
return formattedValue;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param percent 0-1
|
||||
*/
|
||||
function setSliderPercent(percent) {
|
||||
|
||||
percent = clamp(percent);
|
||||
|
||||
var thumbPosition = (percent * 100) + '%';
|
||||
var activeTrackPercent = invert ? (1 - percent) * 100 + '%' : thumbPosition;
|
||||
|
||||
if (vertical) {
|
||||
thumbContainer.css('bottom', thumbPosition);
|
||||
}
|
||||
else {
|
||||
$mdUtil.bidiProperty(thumbContainer, 'left', 'right', thumbPosition);
|
||||
}
|
||||
|
||||
|
||||
activeTrack.css(vertical ? 'height' : 'width', activeTrackPercent);
|
||||
|
||||
element.toggleClass((invert ? 'md-max' : 'md-min'), percent === 0);
|
||||
element.toggleClass((invert ? 'md-min' : 'md-max'), percent === 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* Slide listeners
|
||||
*/
|
||||
var isDragging = false;
|
||||
|
||||
function onPressDown(ev) {
|
||||
if (isDisabled()) return;
|
||||
|
||||
element.addClass('md-active');
|
||||
element[0].focus();
|
||||
refreshSliderDimensions();
|
||||
|
||||
var exactVal = percentToValue( positionToPercent( vertical ? ev.pointer.y : ev.pointer.x ));
|
||||
var closestVal = minMaxValidator( stepValidator(exactVal) );
|
||||
scope.$apply(function() {
|
||||
setModelValue( closestVal );
|
||||
setSliderPercent( valueToPercent(closestVal));
|
||||
});
|
||||
}
|
||||
function onPressUp(ev) {
|
||||
if (isDisabled()) return;
|
||||
|
||||
element.removeClass('md-dragging');
|
||||
|
||||
var exactVal = percentToValue( positionToPercent( vertical ? ev.pointer.y : ev.pointer.x ));
|
||||
var closestVal = minMaxValidator( stepValidator(exactVal) );
|
||||
scope.$apply(function() {
|
||||
setModelValue(closestVal);
|
||||
ngModelRender();
|
||||
});
|
||||
}
|
||||
function onDragStart(ev) {
|
||||
if (isDisabled()) return;
|
||||
isDragging = true;
|
||||
|
||||
ev.stopPropagation();
|
||||
|
||||
element.addClass('md-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 ( discrete ) adjustThumbPosition( vertical ? ev.pointer.y : ev.pointer.x );
|
||||
else doSlide( vertical ? ev.pointer.y : 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 );
|
||||
}
|
||||
|
||||
/**
|
||||
* Clamps the value to be between 0 and 1.
|
||||
* @param {number} value The value to clamp.
|
||||
* @returns {number}
|
||||
*/
|
||||
function clamp(value) {
|
||||
return Math.max(0, Math.min(value || 0, 1));
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert position on slider to percentage value of offset from beginning...
|
||||
* @param position
|
||||
* @returns {number}
|
||||
*/
|
||||
function positionToPercent( position ) {
|
||||
var offset = vertical ? sliderDimensions.top : sliderDimensions.left;
|
||||
var size = vertical ? sliderDimensions.height : sliderDimensions.width;
|
||||
var calc = (position - offset) / size;
|
||||
|
||||
if (!vertical && $mdUtil.bidi() === 'rtl') {
|
||||
calc = 1 - calc;
|
||||
}
|
||||
|
||||
return Math.max(0, Math.min(1, vertical ? 1 - calc : calc));
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert percentage offset on slide to equivalent model value
|
||||
* @param percent
|
||||
* @returns {*}
|
||||
*/
|
||||
function percentToValue( percent ) {
|
||||
var adjustedPercent = invert ? (1 - percent) : percent;
|
||||
return (min + adjustedPercent * (max - min));
|
||||
}
|
||||
|
||||
function valueToPercent( val ) {
|
||||
var percent = (val - min) / (max - min);
|
||||
return invert ? (1 - percent) : percent;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ngmaterial.components.slider = angular.module("material.components.slider");
|
||||
6
www/lib/angular-material/modules/closure/slider/slider.min.css
vendored
Normal file
6
www/lib/angular-material/modules/closure/slider/slider.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
7
www/lib/angular-material/modules/closure/slider/slider.min.js
vendored
Normal file
7
www/lib/angular-material/modules/closure/slider/slider.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user