Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
I
i20rzslider
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
jedife
i20rzslider
Commits
9bca8ac9
Commit
9bca8ac9
authored
May 25, 2017
by
daniela.mateescu
Committed by
Valentin Hervieu
May 25, 2017
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix: Fix for wrong slider drag when having many touches simultaneous
#534
parent
5bf3f228
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
398 additions
and
38 deletions
+398
-38
rzslider.css
dist/rzslider.css
+2
-2
rzslider.js
dist/rzslider.js
+67
-15
rzslider.min.css
dist/rzslider.min.css
+1
-1
rzslider.min.js
dist/rzslider.min.js
+3
-3
rzslider.scss
dist/rzslider.scss
+2
-2
rzslider.js
src/rzslider.js
+66
-14
helper.js
tests/specs/helper.js
+68
-1
single-slider-horizontal-test.js
tests/specs/mouse-controls/single-slider-horizontal-test.js
+94
-0
single-slider-vertical-test.js
tests/specs/mouse-controls/single-slider-vertical-test.js
+95
-0
No files found.
dist/rzslider.css
View file @
9bca8ac9
/*! angularjs-slider - v6.1.2 -
(c) Rafal Zajac <rzajac@gmail.com>, Valentin Hervieu <valentin@hervieu.me>, Jussi Saarivirta <jusasi@gmail.com>, Angelin Sirbu <angelin.sirbu@gmail.com> -
https://github.com/angular-slider/angularjs-slider -
2017-05-
1
5 */
2017-05-
2
5 */
.rzslider
{
position
:
relative
;
display
:
inline-block
;
...
...
@@ -257,4 +257,4 @@
bottom
:
auto
;
left
:
auto
;
}
/*# sourceMappingURL=data:application/json;base64,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VixzQkFBc0I7RUFDdEIsaUJBQWlCO0NBQ2xCOztBQUVEO0VBQ0UsT0FBTztFQUNQLFdBQVc7RUFDWCxXQUFXO0VBQ1gsU0FBUztFQUNULGFBQWE7Q0FDZDs7QUFFRDtFQUNFLGlCQUFpQjtFQUNqQixrQkFBa0I7RUFDbEIsdUJBQXVCO0NBQ3hCOztBQUVEO0VBQ0UsVUFBVTtFQUNWLFdBQVc7RUFDWCxzQ0FBOEI7VUFBOUIsOEJBQThCO0NBQy9COztBQUVEO0VBQ0UsVUFBVTtFQUNWLFlBQVk7RUFDWixnQkFBZ0I7RUFDaEIsb0JBQW9CO0VBQ3BCLHNDQUE4QjtVQUE5Qiw4QkFBOEI7Q0FDL0I7O0FBRUQ7RUFDRSxZQUFZO0VBQ1osYUFBYTtFQUNiLFdBQVc7Q0FDWiIsImZpbGUiOiJyenNsaWRlci5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyIvKiEgYW5ndWxhcmpzLXNsaWRlciAtIHY2LjEuMiAtIFxuIChjKSBSYWZhbCBaYWphYyA8cnphamFjQGdtYWlsLmNvbT4sIFZhbGVudGluIEhlcnZpZXUgPHZhbGVudGluQGhlcnZpZXUubWU+LCBKdXNzaSBTYWFyaXZpcnRhIDxqdXNhc2lAZ21haWwuY29tPiwgQW5nZWxpbiBTaXJidSA8YW5nZWxpbi5zaXJidUBnbWFpbC5jb20+IC0gXG4gaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXItc2xpZGVyL2FuZ3VsYXJqcy1zbGlkZXIgLSBcbiAyMDE3LTA1LTE1ICovXG4ucnpzbGlkZXIge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogNHB4O1xuICBtYXJnaW46IDM1cHggMCAxNXB4IDA7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIHVzZXItc2VsZWN0OiBub25lO1xufVxuXG4ucnpzbGlkZXIud2l0aC1sZWdlbmQge1xuICBtYXJnaW4tYm90dG9tOiA0MHB4O1xufVxuXG4ucnpzbGlkZXJbZGlzYWJsZWRdIHtcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbn1cblxuLnJ6c2xpZGVyW2Rpc2FibGVkXSAucnotcG9pbnRlciB7XG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XG4gIGJhY2tncm91bmQtY29sb3I6ICNkOGUwZjM7XG59XG5cbi5yenNsaWRlcltkaXNhYmxlZF0gLnJ6LWRyYWdnYWJsZSB7XG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XG59XG5cbi5yenNsaWRlcltkaXNhYmxlZF0gLnJ6LXNlbGVjdGlvbiB7XG4gIGJhY2tncm91bmQ6ICM4YjkxYTI7XG59XG5cbi5yenNsaWRlcltkaXNhYmxlZF0gLnJ6LXRpY2sge1xuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xufVxuXG4ucnpzbGlkZXJbZGlzYWJsZWRdIC5yei10aWNrLnJ6LXNlbGVjdGVkIHtcbiAgYmFja2dyb3VuZDogIzhiOTFhMjtcbn1cblxuLnJ6c2xpZGVyIHNwYW4ge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbn1cblxuLnJ6c2xpZGVyIC5yei1iYXNlIHtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgcGFkZGluZzogMDtcbn1cblxuLnJ6c2xpZGVyIC5yei1iYXItd3JhcHBlciB7XG4gIGxlZnQ6IDA7XG4gIHotaW5kZXg6IDE7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDMycHg7XG4gIHBhZGRpbmctdG9wOiAxNnB4O1xuICBtYXJnaW4tdG9wOiAtMTZweDtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbn1cblxuLnJ6c2xpZGVyIC5yei1kcmFnZ2FibGUge1xuICBjdXJzb3I6IG1vdmU7XG59XG5cbi5yenNsaWRlciAucnotYmFyIHtcbiAgbGVmdDogMDtcbiAgei1pbmRleDogMTtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogNHB4O1xuICBiYWNrZ3JvdW5kOiAjZDhlMGYzO1xuICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDJweDtcbiAgICAgLW1vei1ib3JkZXItcmFkaXVzOiAycHg7XG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogMnB4O1xufVxuXG4ucnpzbGlkZXIgLnJ6LXNlbGVjdGlvbiB7XG4gIHotaW5kZXg6IDI7XG4gIGJhY2tncm91bmQ6ICMwZGI5ZjA7XG4gIC13ZWJraXQtYm9yZGVyLXJhZGl1czogMnB4O1xuICAgICAtbW96LWJvcmRlci1yYWRpdXM6IDJweDtcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAycHg7XG59XG5cbi5yenNsaWRlciAucnotcG9pbnRlciB7XG4gIHRvcDogLTE0cHg7XG4gIHotaW5kZXg6IDM7XG4gIHdpZHRoOiAzMnB4O1xuICBoZWlnaHQ6IDMycHg7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzBkYjlmMDtcbiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAxNnB4O1xuICAgICAtbW96LWJvcmRlci1yYWRpdXM6IDE2cHg7XG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogMTZweDtcbn1cblxuLnJ6c2xpZGVyIC5yei1wb2ludGVyOmFmdGVyIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDEycHg7XG4gIGxlZnQ6IDEycHg7XG4gIHdpZHRoOiA4cHg7XG4gIGhlaWdodDogOHB4O1xuICBiYWNrZ3JvdW5kOiAjZmZmZmZmO1xuICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDRweDtcbiAgICAgLW1vei1ib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICBjb250ZW50OiAnJztcbn1cblxuLnJ6c2xpZGVyIC5yei1wb2ludGVyOmhvdmVyOmFmdGVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjtcbn1cblxuLnJ6c2xpZGVyIC5yei1wb2ludGVyLnJ6LWFjdGl2ZSB7XG4gIHotaW5kZXg6IDQ7XG59XG5cbi5yenNsaWRlciAucnotcG9pbnRlci5yei1hY3RpdmU6YWZ0ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDUxYWZmO1xufVxuXG4ucnpzbGlkZXIgLnJ6LWJ1YmJsZSB7XG4gIGJvdHRvbTogMTZweDtcbiAgcGFkZGluZzogMXB4IDNweDtcbiAgY29sb3I6ICM1NTYzN2Q7XG4gIGN1cnNvcjogZGVmYXVsdDtcbn1cblxuLnJ6c2xpZGVyIC5yei1idWJibGUucnotbGltaXQge1xuICBjb2xvcjogIzU1NjM3ZDtcbn1cblxuLnJ6c2xpZGVyIC5yei10aWNrcyB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAtM3B4O1xuICBsZWZ0OiAwO1xuICB6LWluZGV4OiAxO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAwO1xuICBtYXJnaW46IDA7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG5cbi5yenNsaWRlciAucnotdGlja3MtdmFsdWVzLXVuZGVyIC5yei10aWNrLXZhbHVlIHtcbiAgdG9wOiBhdXRvO1xuICBib3R0b206IC0zMnB4O1xufVxuXG4ucnpzbGlkZXIgLnJ6LXRpY2sge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgd2lkdGg6IDEwcHg7XG4gIGhlaWdodDogMTBweDtcbiAgbWFyZ2luLWxlZnQ6IDExcHg7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBiYWNrZ3JvdW5kOiAjZDhlMGYzO1xuICBib3JkZXItcmFkaXVzOiA1MCU7XG59XG5cbi5yenNsaWRlciAucnotdGljay5yei1zZWxlY3RlZCB7XG4gIGJhY2tncm91bmQ6ICMwZGI5ZjA7XG59XG5cbi5yenNsaWRlciAucnotdGljay12YWx1ZSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAtMzBweDtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgMCk7XG59XG5cbi5yenNsaWRlciAucnotdGljay1sZWdlbmQge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMjRweDtcbiAgbWF4LXdpZHRoOiA1MHB4O1xuICB3aGl0ZS1zcGFjZTogbm9ybWFsO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAwKTtcbn1cblxuLnJ6c2xpZGVyLnJ6LXZlcnRpY2FsIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB3aWR0aDogNHB4O1xuICBoZWlnaHQ6IDEwMCU7XG4gIHBhZGRpbmc6IDA7XG4gIG1hcmdpbjogMCAyMHB4O1xuICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7XG59XG5cbi5yenNsaWRlci5yei12ZXJ0aWNhbCAucnotYmFzZSB7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIHBhZGRpbmc6IDA7XG59XG5cbi5yenNsaWRlci5yei12ZXJ0aWNhbCAucnotYmFyLXdyYXBwZXIge1xuICB0b3A6IGF1dG87XG4gIGxlZnQ6IDA7XG4gIHdpZHRoOiAzMnB4O1xuICBoZWlnaHQ6IDEwMCU7XG4gIHBhZGRpbmc6IDAgMCAwIDE2cHg7XG4gIG1hcmdpbjogMCAwIDAgLTE2cHg7XG59XG5cbi5yenNsaWRlci5yei12ZXJ0aWNhbCAucnotYmFyIHtcbiAgYm90dG9tOiAwO1xuICBsZWZ0OiBhdXRvO1xuICB3aWR0aDogNHB4O1xuICBoZWlnaHQ6IDEwMCU7XG59XG5cbi5yenNsaWRlci5yei12ZXJ0aWNhbCAucnotcG9pbnRlciB7XG4gIHRvcDogYXV0bztcbiAgYm90dG9tOiAwO1xuICBsZWZ0OiAtMTRweCAhaW1wb3J0YW50O1xufVxuXG4ucnpzbGlkZXIucnotdmVydGljYWwgLnJ6LWJ1YmJsZSB7XG4gIGJvdHRvbTogMDtcbiAgbGVmdDogMTZweCAhaW1wb3J0YW50O1xuICBtYXJnaW4tbGVmdDogM3B4O1xufVxuXG4ucnpzbGlkZXIucnotdmVydGljYWwgLnJ6LXRpY2tzIHtcbiAgdG9wOiAwO1xuICBsZWZ0OiAtM3B4O1xuICB6LWluZGV4OiAxO1xuICB3aWR0aDogMDtcbiAgaGVpZ2h0OiAxMDAlO1xufVxuXG4ucnpzbGlkZXIucnotdmVydGljYWwgLnJ6LXRpY2sge1xuICBtYXJnaW4tdG9wOiAxMXB4O1xuICBtYXJnaW4tbGVmdDogYXV0bztcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cblxuLnJ6c2xpZGVyLnJ6LXZlcnRpY2FsIC5yei10aWNrLXZhbHVlIHtcbiAgdG9wOiBhdXRvO1xuICBsZWZ0OiAyNHB4O1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAtMjglKTtcbn1cblxuLnJ6c2xpZGVyLnJ6LXZlcnRpY2FsIC5yei10aWNrLWxlZ2VuZCB7XG4gIHRvcDogYXV0bztcbiAgcmlnaHQ6IDI0cHg7XG4gIG1heC13aWR0aDogbm9uZTtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgLTI4JSk7XG59XG5cbi5yenNsaWRlci5yei12ZXJ0aWNhbCAucnotdGlja3MtdmFsdWVzLXVuZGVyIC5yei10aWNrLXZhbHVlIHtcbiAgcmlnaHQ6IDI0cHg7XG4gIGJvdHRvbTogYXV0bztcbiAgbGVmdDogYXV0bztcbn0iXX0= */
\ No newline at end of file
/*# sourceMappingURL=data:application/json;base64,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VixzQkFBc0I7RUFDdEIsaUJBQWlCO0NBQ2xCOztBQUVEO0VBQ0UsT0FBTztFQUNQLFdBQVc7RUFDWCxXQUFXO0VBQ1gsU0FBUztFQUNULGFBQWE7Q0FDZDs7QUFFRDtFQUNFLGlCQUFpQjtFQUNqQixrQkFBa0I7RUFDbEIsdUJBQXVCO0NBQ3hCOztBQUVEO0VBQ0UsVUFBVTtFQUNWLFdBQVc7RUFDWCxzQ0FBOEI7VUFBOUIsOEJBQThCO0NBQy9COztBQUVEO0VBQ0UsVUFBVTtFQUNWLFlBQVk7RUFDWixnQkFBZ0I7RUFDaEIsb0JBQW9CO0VBQ3BCLHNDQUE4QjtVQUE5Qiw4QkFBOEI7Q0FDL0I7O0FBRUQ7RUFDRSxZQUFZO0VBQ1osYUFBYTtFQUNiLFdBQVc7Q0FDWiIsImZpbGUiOiJyenNsaWRlci5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyIvKiEgYW5ndWxhcmpzLXNsaWRlciAtIHY2LjEuMiAtIFxyXG4gKGMpIFJhZmFsIFphamFjIDxyemFqYWNAZ21haWwuY29tPiwgVmFsZW50aW4gSGVydmlldSA8dmFsZW50aW5AaGVydmlldS5tZT4sIEp1c3NpIFNhYXJpdmlydGEgPGp1c2FzaUBnbWFpbC5jb20+LCBBbmdlbGluIFNpcmJ1IDxhbmdlbGluLnNpcmJ1QGdtYWlsLmNvbT4gLSBcclxuIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyLXNsaWRlci9hbmd1bGFyanMtc2xpZGVyIC0gXHJcbiAyMDE3LTA1LTI1ICovXHJcbi5yenNsaWRlciB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiA0cHg7XG4gIG1hcmdpbjogMzVweCAwIDE1cHggMDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG59XG5cbi5yenNsaWRlci53aXRoLWxlZ2VuZCB7XG4gIG1hcmdpbi1ib3R0b206IDQwcHg7XG59XG5cbi5yenNsaWRlcltkaXNhYmxlZF0ge1xuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xufVxuXG4ucnpzbGlkZXJbZGlzYWJsZWRdIC5yei1wb2ludGVyIHtcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Q4ZTBmMztcbn1cblxuLnJ6c2xpZGVyW2Rpc2FibGVkXSAucnotZHJhZ2dhYmxlIHtcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbn1cblxuLnJ6c2xpZGVyW2Rpc2FibGVkXSAucnotc2VsZWN0aW9uIHtcbiAgYmFja2dyb3VuZDogIzhiOTFhMjtcbn1cblxuLnJ6c2xpZGVyW2Rpc2FibGVkXSAucnotdGljayB7XG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XG59XG5cbi5yenNsaWRlcltkaXNhYmxlZF0gLnJ6LXRpY2sucnotc2VsZWN0ZWQge1xuICBiYWNrZ3JvdW5kOiAjOGI5MWEyO1xufVxuXG4ucnpzbGlkZXIgc3BhbiB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xufVxuXG4ucnpzbGlkZXIgLnJ6LWJhc2Uge1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBwYWRkaW5nOiAwO1xufVxuXG4ucnpzbGlkZXIgLnJ6LWJhci13cmFwcGVyIHtcbiAgbGVmdDogMDtcbiAgei1pbmRleDogMTtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMzJweDtcbiAgcGFkZGluZy10b3A6IDE2cHg7XG4gIG1hcmdpbi10b3A6IC0xNnB4O1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xufVxuXG4ucnpzbGlkZXIgLnJ6LWRyYWdnYWJsZSB7XG4gIGN1cnNvcjogbW92ZTtcbn1cblxuLnJ6c2xpZGVyIC5yei1iYXIge1xuICBsZWZ0OiAwO1xuICB6LWluZGV4OiAxO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiA0cHg7XG4gIGJhY2tncm91bmQ6ICNkOGUwZjM7XG4gIC13ZWJraXQtYm9yZGVyLXJhZGl1czogMnB4O1xuICAgICAtbW96LWJvcmRlci1yYWRpdXM6IDJweDtcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAycHg7XG59XG5cbi5yenNsaWRlciAucnotc2VsZWN0aW9uIHtcbiAgei1pbmRleDogMjtcbiAgYmFja2dyb3VuZDogIzBkYjlmMDtcbiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAycHg7XG4gICAgIC1tb3otYm9yZGVyLXJhZGl1czogMnB4O1xuICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDJweDtcbn1cblxuLnJ6c2xpZGVyIC5yei1wb2ludGVyIHtcbiAgdG9wOiAtMTRweDtcbiAgei1pbmRleDogMztcbiAgd2lkdGg6IDMycHg7XG4gIGhlaWdodDogMzJweDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMGRiOWYwO1xuICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDE2cHg7XG4gICAgIC1tb3otYm9yZGVyLXJhZGl1czogMTZweDtcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAxNnB4O1xufVxuXG4ucnpzbGlkZXIgLnJ6LXBvaW50ZXI6YWZ0ZXIge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMTJweDtcbiAgbGVmdDogMTJweDtcbiAgd2lkdGg6IDhweDtcbiAgaGVpZ2h0OiA4cHg7XG4gIGJhY2tncm91bmQ6ICNmZmZmZmY7XG4gIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAtbW96LWJvcmRlci1yYWRpdXM6IDRweDtcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gIGNvbnRlbnQ6ICcnO1xufVxuXG4ucnpzbGlkZXIgLnJ6LXBvaW50ZXI6aG92ZXI6YWZ0ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmO1xufVxuXG4ucnpzbGlkZXIgLnJ6LXBvaW50ZXIucnotYWN0aXZlIHtcbiAgei1pbmRleDogNDtcbn1cblxuLnJ6c2xpZGVyIC5yei1wb2ludGVyLnJ6LWFjdGl2ZTphZnRlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM0NTFhZmY7XG59XG5cbi5yenNsaWRlciAucnotYnViYmxlIHtcbiAgYm90dG9tOiAxNnB4O1xuICBwYWRkaW5nOiAxcHggM3B4O1xuICBjb2xvcjogIzU1NjM3ZDtcbiAgY3Vyc29yOiBkZWZhdWx0O1xufVxuXG4ucnpzbGlkZXIgLnJ6LWJ1YmJsZS5yei1saW1pdCB7XG4gIGNvbG9yOiAjNTU2MzdkO1xufVxuXG4ucnpzbGlkZXIgLnJ6LXRpY2tzIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IC0zcHg7XG4gIGxlZnQ6IDA7XG4gIHotaW5kZXg6IDE7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDA7XG4gIG1hcmdpbjogMDtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbn1cblxuLnJ6c2xpZGVyIC5yei10aWNrcy12YWx1ZXMtdW5kZXIgLnJ6LXRpY2stdmFsdWUge1xuICB0b3A6IGF1dG87XG4gIGJvdHRvbTogLTMycHg7XG59XG5cbi5yenNsaWRlciAucnotdGljayB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICB3aWR0aDogMTBweDtcbiAgaGVpZ2h0OiAxMHB4O1xuICBtYXJnaW4tbGVmdDogMTFweDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGJhY2tncm91bmQ6ICNkOGUwZjM7XG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcbn1cblxuLnJ6c2xpZGVyIC5yei10aWNrLnJ6LXNlbGVjdGVkIHtcbiAgYmFja2dyb3VuZDogIzBkYjlmMDtcbn1cblxuLnJ6c2xpZGVyIC5yei10aWNrLXZhbHVlIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IC0zMHB4O1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAwKTtcbn1cblxuLnJ6c2xpZGVyIC5yei10aWNrLWxlZ2VuZCB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAyNHB4O1xuICBtYXgtd2lkdGg6IDUwcHg7XG4gIHdoaXRlLXNwYWNlOiBub3JtYWw7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIDApO1xufVxuXG4ucnpzbGlkZXIucnotdmVydGljYWwge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHdpZHRoOiA0cHg7XG4gIGhlaWdodDogMTAwJTtcbiAgcGFkZGluZzogMDtcbiAgbWFyZ2luOiAwIDIwcHg7XG4gIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTtcbn1cblxuLnJ6c2xpZGVyLnJ6LXZlcnRpY2FsIC5yei1iYXNlIHtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgcGFkZGluZzogMDtcbn1cblxuLnJ6c2xpZGVyLnJ6LXZlcnRpY2FsIC5yei1iYXItd3JhcHBlciB7XG4gIHRvcDogYXV0bztcbiAgbGVmdDogMDtcbiAgd2lkdGg6IDMycHg7XG4gIGhlaWdodDogMTAwJTtcbiAgcGFkZGluZzogMCAwIDAgMTZweDtcbiAgbWFyZ2luOiAwIDAgMCAtMTZweDtcbn1cblxuLnJ6c2xpZGVyLnJ6LXZlcnRpY2FsIC5yei1iYXIge1xuICBib3R0b206IDA7XG4gIGxlZnQ6IGF1dG87XG4gIHdpZHRoOiA0cHg7XG4gIGhlaWdodDogMTAwJTtcbn1cblxuLnJ6c2xpZGVyLnJ6LXZlcnRpY2FsIC5yei1wb2ludGVyIHtcbiAgdG9wOiBhdXRvO1xuICBib3R0b206IDA7XG4gIGxlZnQ6IC0xNHB4ICFpbXBvcnRhbnQ7XG59XG5cbi5yenNsaWRlci5yei12ZXJ0aWNhbCAucnotYnViYmxlIHtcbiAgYm90dG9tOiAwO1xuICBsZWZ0OiAxNnB4ICFpbXBvcnRhbnQ7XG4gIG1hcmdpbi1sZWZ0OiAzcHg7XG59XG5cbi5yenNsaWRlci5yei12ZXJ0aWNhbCAucnotdGlja3Mge1xuICB0b3A6IDA7XG4gIGxlZnQ6IC0zcHg7XG4gIHotaW5kZXg6IDE7XG4gIHdpZHRoOiAwO1xuICBoZWlnaHQ6IDEwMCU7XG59XG5cbi5yenNsaWRlci5yei12ZXJ0aWNhbCAucnotdGljayB7XG4gIG1hcmdpbi10b3A6IDExcHg7XG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuXG4ucnpzbGlkZXIucnotdmVydGljYWwgLnJ6LXRpY2stdmFsdWUge1xuICB0b3A6IGF1dG87XG4gIGxlZnQ6IDI0cHg7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIC0yOCUpO1xufVxuXG4ucnpzbGlkZXIucnotdmVydGljYWwgLnJ6LXRpY2stbGVnZW5kIHtcbiAgdG9wOiBhdXRvO1xuICByaWdodDogMjRweDtcbiAgbWF4LXdpZHRoOiBub25lO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAtMjglKTtcbn1cblxuLnJ6c2xpZGVyLnJ6LXZlcnRpY2FsIC5yei10aWNrcy12YWx1ZXMtdW5kZXIgLnJ6LXRpY2stdmFsdWUge1xuICByaWdodDogMjRweDtcbiAgYm90dG9tOiBhdXRvO1xuICBsZWZ0OiBhdXRvO1xufSJdfQ== */
\ No newline at end of file
dist/rzslider.js
View file @
9bca8ac9
/*! angularjs-slider - v6.1.2 -
(c) Rafal Zajac <rzajac@gmail.com>, Valentin Hervieu <valentin@hervieu.me>, Jussi Saarivirta <jusasi@gmail.com>, Angelin Sirbu <angelin.sirbu@gmail.com> -
https://github.com/angular-slider/angularjs-slider -
2017-05-
1
5 */
2017-05-
2
5 */
/*jslint unparam: true */
/*global angular: false, console: false, define, module */
(
function
(
root
,
factory
)
{
...
...
@@ -158,7 +158,7 @@
.
factory
(
'RzSlider'
,
[
'$timeout'
,
'$document'
,
'$window'
,
'$compile'
,
'RzSliderOptions'
,
'rzThrottle'
,
function
(
$timeout
,
$document
,
$window
,
$compile
,
RzSliderOptions
,
rzThrottle
)
{
'use strict'
;
/**
* Slider
*
...
...
@@ -458,7 +458,7 @@
}
return
index
;
},
syncLowValue
:
function
()
{
if
(
this
.
options
.
stepsArray
)
{
if
(
!
this
.
options
.
bindIndexForStepsArray
)
...
...
@@ -1560,32 +1560,46 @@
* Get the X-coordinate or Y-coordinate of an event
*
* @param {Object} event The event
* @param targetTouchId The identifier of the touch for that we will get the x and y coordinates
* @returns {number}
*/
getEventXY
:
function
(
event
)
{
getEventXY
:
function
(
event
,
targetTouchId
)
{
/* http://stackoverflow.com/a/12336075/282882 */
//noinspection JSLint
var
clientXY
=
this
.
options
.
vertical
?
'clientY'
:
'clientX'
;
if
(
event
[
clientXY
]
!==
undefined
)
{
return
event
[
clientXY
];
}
return
event
.
originalEvent
===
undefined
?
event
.
touches
[
0
][
clientXY
]
:
event
.
originalEvent
.
touches
[
0
][
clientXY
];
var
eventXY
;
var
touches
=
event
.
originalEvent
===
undefined
?
event
.
touches
:
event
.
originalEvent
.
touches
;
if
(
targetTouchId
!==
undefined
)
{
for
(
var
i
=
0
;
i
<
touches
.
length
;
i
++
)
{
if
(
touches
[
i
].
identifier
==
targetTouchId
)
{
return
touches
[
i
][
clientXY
];
}
}
}
// If the target touch was not found in the event
// returns the coordinates of the first touch
return
touches
[
0
][
clientXY
];
},
/**
* Compute the event position depending on whether the slider is horizontal or vertical
* @param event
* @param targetTouchId If targetTouchId is provided it will be considered the position of that
* @returns {number}
*/
getEventPosition
:
function
(
event
)
{
getEventPosition
:
function
(
event
,
targetTouchId
)
{
var
sliderPos
=
this
.
sliderElem
.
rzsp
,
eventPos
=
0
;
if
(
this
.
options
.
vertical
)
eventPos
=
-
this
.
getEventXY
(
event
)
+
sliderPos
;
eventPos
=
-
this
.
getEventXY
(
event
,
targetTouchId
)
+
sliderPos
;
else
eventPos
=
this
.
getEventXY
(
event
)
-
sliderPos
;
eventPos
=
this
.
getEventXY
(
event
,
targetTouchId
)
-
sliderPos
;
return
eventPos
*
this
.
options
.
scale
-
this
.
handleHalfDim
;
// #346 handleHalfDim is already scaled
},
...
...
@@ -1763,8 +1777,19 @@
ehEnd
=
angular
.
bind
(
this
,
this
.
onEnd
,
ehMove
);
$document
.
on
(
eventNames
.
moveEvent
,
ehMove
);
$document
.
one
(
eventNames
.
endEvent
,
ehEnd
);
$document
.
on
(
eventNames
.
endEvent
,
ehEnd
);
this
.
ehEndToBeRemovedOnEnd
=
ehEnd
;
this
.
callOnStart
();
var
changedTouches
=
event
.
originalEvent
===
undefined
?
event
.
changedTouches
:
event
.
originalEvent
.
changedTouches
;
if
(
changedTouches
)
{
// Store the touch identifier
if
(
!
this
.
touchId
)
{
this
.
isDragging
=
true
;
this
.
touchId
=
changedTouches
[
0
].
identifier
;
}
}
},
/**
...
...
@@ -1776,7 +1801,22 @@
* @returns {undefined}
*/
onMove
:
function
(
pointer
,
event
,
fromTick
)
{
var
newPos
=
this
.
getEventPosition
(
event
),
var
changedTouches
=
event
.
originalEvent
===
undefined
?
event
.
changedTouches
:
event
.
originalEvent
.
changedTouches
;
var
touchForThisSlider
;
if
(
changedTouches
)
{
for
(
var
i
=
0
;
i
<
changedTouches
.
length
;
i
++
)
{
if
(
changedTouches
[
i
].
identifier
==
this
.
touchId
)
{
touchForThisSlider
=
changedTouches
[
i
];
break
;
}
}
}
if
(
changedTouches
&&
!
touchForThisSlider
)
{
return
;
}
var
newPos
=
this
.
getEventPosition
(
event
,
touchForThisSlider
?
touchForThisSlider
.
identifier
:
undefined
),
newValue
,
ceilValue
=
this
.
options
.
rightToLeft
?
this
.
minValue
:
this
.
maxValue
,
flrValue
=
this
.
options
.
rightToLeft
?
this
.
maxValue
:
this
.
minValue
;
...
...
@@ -1794,7 +1834,7 @@
}
this
.
positionTrackingHandle
(
newValue
);
},
/**
* onEnd event handler
*
...
...
@@ -1803,6 +1843,16 @@
* @returns {undefined}
*/
onEnd
:
function
(
ehMove
,
event
)
{
var
changedTouches
=
event
.
originalEvent
===
undefined
?
event
.
changedTouches
:
event
.
originalEvent
.
changedTouches
;
if
(
changedTouches
&&
changedTouches
[
0
].
identifier
!=
this
.
touchId
)
{
return
;
}
this
.
isDragging
=
false
;
this
.
touchId
=
null
;
// Touch event, the listener was added by us so we need to remove it
$document
.
off
(
"touchend"
,
this
.
ehEndToBeRemovedOnEnd
);
var
moveEventName
=
this
.
getEventNames
(
event
).
moveEvent
;
if
(
!
this
.
options
.
keyboardSupport
)
{
...
...
@@ -1842,9 +1892,11 @@
onPointerBlur
:
function
(
pointer
)
{
pointer
.
off
(
'keydown'
);
pointer
.
off
(
'keyup'
);
this
.
tracking
=
''
;
pointer
.
removeClass
(
'rz-active'
);
this
.
currentFocusElement
=
null
if
(
!
this
.
isDragging
)
{
this
.
tracking
=
''
;
this
.
currentFocusElement
=
null
}
},
/**
...
...
dist/rzslider.min.css
View file @
9bca8ac9
/*! angularjs-slider - v6.1.2 - (c) Rafal Zajac <rzajac@gmail.com>, Valentin Hervieu <valentin@hervieu.me>, Jussi Saarivirta <jusasi@gmail.com>, Angelin Sirbu <angelin.sirbu@gmail.com> - https://github.com/angular-slider/angularjs-slider - 2017-05-
1
5 */
/*! angularjs-slider - v6.1.2 - (c) Rafal Zajac <rzajac@gmail.com>, Valentin Hervieu <valentin@hervieu.me>, Jussi Saarivirta <jusasi@gmail.com>, Angelin Sirbu <angelin.sirbu@gmail.com> - https://github.com/angular-slider/angularjs-slider - 2017-05-
2
5 */
.rzslider
{
position
:
relative
;
display
:
inline-block
;
width
:
100%
;
height
:
4px
;
margin
:
35px
0
15px
0
;
vertical-align
:
middle
;
user-select
:
none
}
.rzslider.with-legend
{
margin-bottom
:
40px
}
.rzslider
[
disabled
]
{
cursor
:
not-allowed
}
.rzslider
[
disabled
]
.rz-pointer
{
cursor
:
not-allowed
;
background-color
:
#d8e0f3
}
.rzslider
[
disabled
]
.rz-draggable
{
cursor
:
not-allowed
}
.rzslider
[
disabled
]
.rz-selection
{
background
:
#8b91a2
}
.rzslider
[
disabled
]
.rz-tick
{
cursor
:
not-allowed
}
.rzslider
[
disabled
]
.rz-tick.rz-selected
{
background
:
#8b91a2
}
.rzslider
span
{
position
:
absolute
;
display
:
inline-block
;
white-space
:
nowrap
}
.rzslider
.rz-base
{
width
:
100%
;
height
:
100%
;
padding
:
0
}
.rzslider
.rz-bar-wrapper
{
left
:
0
;
z-index
:
1
;
width
:
100%
;
height
:
32px
;
padding-top
:
16px
;
margin-top
:
-16px
;
box-sizing
:
border-box
}
.rzslider
.rz-draggable
{
cursor
:
move
}
.rzslider
.rz-bar
{
left
:
0
;
z-index
:
1
;
width
:
100%
;
height
:
4px
;
background
:
#d8e0f3
;
-webkit-border-radius
:
2px
;
-moz-border-radius
:
2px
;
border-radius
:
2px
}
.rzslider
.rz-selection
{
z-index
:
2
;
background
:
#0db9f0
;
-webkit-border-radius
:
2px
;
-moz-border-radius
:
2px
;
border-radius
:
2px
}
.rzslider
.rz-pointer
{
top
:
-14px
;
z-index
:
3
;
width
:
32px
;
height
:
32px
;
cursor
:
pointer
;
background-color
:
#0db9f0
;
-webkit-border-radius
:
16px
;
-moz-border-radius
:
16px
;
border-radius
:
16px
}
.rzslider
.rz-pointer
:after
{
position
:
absolute
;
top
:
12px
;
left
:
12px
;
width
:
8px
;
height
:
8px
;
background
:
#fff
;
-webkit-border-radius
:
4px
;
-moz-border-radius
:
4px
;
border-radius
:
4px
;
content
:
''
}
.rzslider
.rz-pointer
:hover:after
{
background-color
:
#fff
}
.rzslider
.rz-pointer.rz-active
{
z-index
:
4
}
.rzslider
.rz-pointer.rz-active
:after
{
background-color
:
#451aff
}
.rzslider
.rz-bubble
{
bottom
:
16px
;
padding
:
1px
3px
;
color
:
#55637d
;
cursor
:
default
}
.rzslider
.rz-bubble.rz-limit
{
color
:
#55637d
}
.rzslider
.rz-ticks
{
position
:
absolute
;
top
:
-3px
;
left
:
0
;
z-index
:
1
;
width
:
100%
;
height
:
0
;
margin
:
0
;
list-style
:
none
;
box-sizing
:
border-box
}
.rzslider
.rz-ticks-values-under
.rz-tick-value
{
top
:
auto
;
bottom
:
-32px
}
.rzslider
.rz-tick
{
position
:
absolute
;
top
:
0
;
left
:
0
;
width
:
10px
;
height
:
10px
;
margin-left
:
11px
;
text-align
:
center
;
cursor
:
pointer
;
background
:
#d8e0f3
;
border-radius
:
50%
}
.rzslider
.rz-tick.rz-selected
{
background
:
#0db9f0
}
.rzslider
.rz-tick-value
{
position
:
absolute
;
top
:
-30px
;
transform
:
translate
(
-50%
,
0
)}
.rzslider
.rz-tick-legend
{
position
:
absolute
;
top
:
24px
;
max-width
:
50px
;
white-space
:
normal
;
transform
:
translate
(
-50%
,
0
)}
.rzslider.rz-vertical
{
position
:
relative
;
width
:
4px
;
height
:
100%
;
padding
:
0
;
margin
:
0
20px
;
vertical-align
:
baseline
}
.rzslider.rz-vertical
.rz-base
{
width
:
100%
;
height
:
100%
;
padding
:
0
}
.rzslider.rz-vertical
.rz-bar-wrapper
{
top
:
auto
;
left
:
0
;
width
:
32px
;
height
:
100%
;
padding
:
0
0
0
16px
;
margin
:
0
0
0
-16px
}
.rzslider.rz-vertical
.rz-bar
{
bottom
:
0
;
left
:
auto
;
width
:
4px
;
height
:
100%
}
.rzslider.rz-vertical
.rz-pointer
{
top
:
auto
;
bottom
:
0
;
left
:
-14px
!important
}
.rzslider.rz-vertical
.rz-bubble
{
bottom
:
0
;
left
:
16px
!important
;
margin-left
:
3px
}
.rzslider.rz-vertical
.rz-ticks
{
top
:
0
;
left
:
-3px
;
z-index
:
1
;
width
:
0
;
height
:
100%
}
.rzslider.rz-vertical
.rz-tick
{
margin-top
:
11px
;
margin-left
:
auto
;
vertical-align
:
middle
}
.rzslider.rz-vertical
.rz-tick-value
{
top
:
auto
;
left
:
24px
;
transform
:
translate
(
0
,
-28%
)}
.rzslider.rz-vertical
.rz-tick-legend
{
top
:
auto
;
right
:
24px
;
max-width
:
none
;
white-space
:
nowrap
;
transform
:
translate
(
0
,
-28%
)}
.rzslider.rz-vertical
.rz-ticks-values-under
.rz-tick-value
{
right
:
24px
;
bottom
:
auto
;
left
:
auto
}
\ No newline at end of file
dist/rzslider.min.js
View file @
9bca8ac9
/*! angularjs-slider - v6.1.2 - (c) Rafal Zajac <rzajac@gmail.com>, Valentin Hervieu <valentin@hervieu.me>, Jussi Saarivirta <jusasi@gmail.com>, Angelin Sirbu <angelin.sirbu@gmail.com> - https://github.com/angular-slider/angularjs-slider - 2017-05-15 */
!
function
(
a
,
b
){
"use strict"
;
if
(
"function"
==
typeof
define
&&
define
.
amd
)
define
([
"angular"
],
b
);
else
if
(
"object"
==
typeof
module
&&
module
.
exports
){
var
c
=
angular
||
require
(
"angular"
);
c
&&
c
.
module
||
"undefined"
==
typeof
angular
||
(
c
=
angular
),
module
.
exports
=
b
(
c
)}
else
b
(
a
.
angular
)}(
this
,
function
(
a
){
"use strict"
;
var
b
=
a
.
module
(
"rzModule"
,[]).
factory
(
"RzSliderOptions"
,
function
(){
var
b
=
{
floor
:
0
,
ceil
:
null
,
step
:
1
,
precision
:
0
,
minRange
:
null
,
maxRange
:
null
,
pushRange
:
!
1
,
minLimit
:
null
,
maxLimit
:
null
,
id
:
null
,
translate
:
null
,
getLegend
:
null
,
stepsArray
:
null
,
bindIndexForStepsArray
:
!
1
,
draggableRange
:
!
1
,
draggableRangeOnly
:
!
1
,
showSelectionBar
:
!
1
,
showSelectionBarEnd
:
!
1
,
showSelectionBarFromValue
:
null
,
hidePointerLabels
:
!
1
,
hideLimitLabels
:
!
1
,
autoHideLimitLabels
:
!
0
,
readOnly
:
!
1
,
disabled
:
!
1
,
interval
:
350
,
showTicks
:
!
1
,
showTicksValues
:
!
1
,
ticksArray
:
null
,
ticksTooltip
:
null
,
ticksValuesTooltip
:
null
,
vertical
:
!
1
,
getSelectionBarColor
:
null
,
getTickColor
:
null
,
getPointerColor
:
null
,
keyboardSupport
:
!
0
,
scale
:
1
,
enforceStep
:
!
0
,
enforceRange
:
!
1
,
noSwitching
:
!
1
,
onlyBindHandles
:
!
1
,
onStart
:
null
,
onChange
:
null
,
onEnd
:
null
,
rightToLeft
:
!
1
,
boundPointerLabels
:
!
0
,
mergeRangeLabelsIfSame
:
!
1
,
customTemplateScope
:
null
,
logScale
:
!
1
,
customValueToPosition
:
null
,
customPositionToValue
:
null
,
selectionBarGradient
:
null
,
ariaLabel
:
null
,
ariaLabelledBy
:
null
,
ariaLabelHigh
:
null
,
ariaLabelledByHigh
:
null
},
c
=
{},
d
=
{};
return
d
.
options
=
function
(
b
){
a
.
extend
(
c
,
b
)},
d
.
getOptions
=
function
(
d
){
return
a
.
extend
({},
b
,
c
,
d
)},
d
}).
factory
(
"rzThrottle"
,[
"$timeout"
,
function
(
a
){
return
function
(
b
,
c
,
d
){
var
e
,
f
,
g
,
h
=
Date
.
now
||
function
(){
return
(
new
Date
).
getTime
()},
i
=
null
,
j
=
0
;
d
=
d
||
{};
var
k
=
function
(){
j
=
h
(),
i
=
null
,
g
=
b
.
apply
(
e
,
f
),
e
=
f
=
null
};
return
function
(){
var
l
=
h
(),
m
=
c
-
(
l
-
j
);
return
e
=
this
,
f
=
arguments
,
0
>=
m
?(
a
.
cancel
(
i
),
i
=
null
,
j
=
l
,
g
=
b
.
apply
(
e
,
f
),
e
=
f
=
null
):
i
||
d
.
trailing
===!
1
||
(
i
=
a
(
k
,
m
)),
g
}}}]).
factory
(
"RzSlider"
,[
"$timeout"
,
"$document"
,
"$window"
,
"$compile"
,
"RzSliderOptions"
,
"rzThrottle"
,
function
(
b
,
c
,
d
,
e
,
f
,
g
){
var
h
=
function
(
a
,
b
){
this
.
scope
=
a
,
this
.
lowValue
=
0
,
this
.
highValue
=
0
,
this
.
sliderElem
=
b
,
this
.
range
=
void
0
!==
this
.
scope
.
rzSliderModel
&&
void
0
!==
this
.
scope
.
rzSliderHigh
,
this
.
dragging
=
{
active
:
!
1
,
value
:
0
,
difference
:
0
,
position
:
0
,
lowLimit
:
0
,
highLimit
:
0
},
this
.
positionProperty
=
"left"
,
this
.
dimensionProperty
=
"width"
,
this
.
handleHalfDim
=
0
,
this
.
maxPos
=
0
,
this
.
precision
=
0
,
this
.
step
=
1
,
this
.
tracking
=
""
,
this
.
minValue
=
0
,
this
.
maxValue
=
0
,
this
.
valueRange
=
0
,
this
.
intermediateTicks
=!
1
,
this
.
initHasRun
=!
1
,
this
.
firstKeyDown
=!
1
,
this
.
internalChange
=!
1
,
this
.
cmbLabelShown
=!
1
,
this
.
currentFocusElement
=
null
,
this
.
fullBar
=
null
,
this
.
selBar
=
null
,
this
.
minH
=
null
,
this
.
maxH
=
null
,
this
.
flrLab
=
null
,
this
.
ceilLab
=
null
,
this
.
minLab
=
null
,
this
.
maxLab
=
null
,
this
.
cmbLab
=
null
,
this
.
ticks
=
null
,
this
.
init
()};
return
h
.
prototype
=
{
init
:
function
(){
var
b
,
c
,
e
=
this
,
f
=
function
(){
e
.
calcViewDimensions
()};
this
.
applyOptions
(),
this
.
syncLowValue
(),
this
.
range
&&
this
.
syncHighValue
(),
this
.
initElemHandles
(),
this
.
manageElementsStyle
(),
this
.
setDisabledState
(),
this
.
calcViewDimensions
(),
this
.
setMinAndMax
(),
this
.
addAccessibility
(),
this
.
updateCeilLab
(),
this
.
updateFloorLab
(),
this
.
initHandles
(),
this
.
manageEventsBindings
(),
this
.
scope
.
$on
(
"reCalcViewDimensions"
,
f
),
a
.
element
(
d
).
on
(
"resize"
,
f
),
this
.
initHasRun
=!
0
,
b
=
g
(
function
(){
e
.
onLowHandleChange
()},
e
.
options
.
interval
),
c
=
g
(
function
(){
e
.
onHighHandleChange
()},
e
.
options
.
interval
),
this
.
scope
.
$on
(
"rzSliderForceRender"
,
function
(){
e
.
resetLabelsValue
(),
b
(),
e
.
range
&&
c
(),
e
.
resetSlider
()}),
this
.
scope
.
$watch
(
"rzSliderOptions()"
,
function
(
a
,
b
){
a
!==
b
&&
(
e
.
applyOptions
(),
e
.
syncLowValue
(),
e
.
range
&&
e
.
syncHighValue
(),
e
.
resetSlider
())},
!
0
),
this
.
scope
.
$watch
(
"rzSliderModel"
,
function
(
a
,
c
){
e
.
internalChange
||
a
!==
c
&&
b
()}),
this
.
scope
.
$watch
(
"rzSliderHigh"
,
function
(
a
,
b
){
e
.
internalChange
||
a
!==
b
&&
(
null
!=
a
&&
c
(),(
e
.
range
&&
null
==
a
||!
e
.
range
&&
null
!=
a
)
&&
(
e
.
applyOptions
(),
e
.
resetSlider
()))}),
this
.
scope
.
$on
(
"$destroy"
,
function
(){
e
.
unbindEvents
(),
a
.
element
(
d
).
off
(
"resize"
,
f
),
e
.
currentFocusElement
=
null
})},
findStepIndex
:
function
(
b
){
for
(
var
c
=
0
,
d
=
0
;
d
<
this
.
options
.
stepsArray
.
length
;
d
++
){
var
e
=
this
.
options
.
stepsArray
[
d
];
if
(
e
===
b
){
c
=
d
;
break
}
if
(
a
.
isDate
(
e
)){
if
(
e
.
getTime
()
===
b
.
getTime
()){
c
=
d
;
break
}}
else
if
(
a
.
isObject
(
e
)
&&
(
a
.
isDate
(
e
.
value
)
&&
e
.
value
.
getTime
()
===
b
.
getTime
()
||
e
.
value
===
b
)){
c
=
d
;
break
}}
return
c
},
syncLowValue
:
function
(){
this
.
options
.
stepsArray
?
this
.
options
.
bindIndexForStepsArray
?
this
.
lowValue
=
this
.
scope
.
rzSliderModel
:
this
.
lowValue
=
this
.
findStepIndex
(
this
.
scope
.
rzSliderModel
):
this
.
lowValue
=
this
.
scope
.
rzSliderModel
},
syncHighValue
:
function
(){
this
.
options
.
stepsArray
?
this
.
options
.
bindIndexForStepsArray
?
this
.
highValue
=
this
.
scope
.
rzSliderHigh
:
this
.
highValue
=
this
.
findStepIndex
(
this
.
scope
.
rzSliderHigh
):
this
.
highValue
=
this
.
scope
.
rzSliderHigh
},
getStepValue
:
function
(
b
){
var
c
=
this
.
options
.
stepsArray
[
b
];
return
a
.
isDate
(
c
)?
c
:
a
.
isObject
(
c
)?
c
.
value
:
c
},
applyLowValue
:
function
(){
this
.
options
.
stepsArray
?
this
.
options
.
bindIndexForStepsArray
?
this
.
scope
.
rzSliderModel
=
this
.
lowValue
:
this
.
scope
.
rzSliderModel
=
this
.
getStepValue
(
this
.
lowValue
):
this
.
scope
.
rzSliderModel
=
this
.
lowValue
},
applyHighValue
:
function
(){
this
.
options
.
stepsArray
?
this
.
options
.
bindIndexForStepsArray
?
this
.
scope
.
rzSliderHigh
=
this
.
highValue
:
this
.
scope
.
rzSliderHigh
=
this
.
getStepValue
(
this
.
highValue
):
this
.
scope
.
rzSliderHigh
=
this
.
highValue
},
onLowHandleChange
:
function
(){
this
.
syncLowValue
(),
this
.
range
&&
this
.
syncHighValue
(),
this
.
setMinAndMax
(),
this
.
updateLowHandle
(
this
.
valueToPosition
(
this
.
lowValue
)),
this
.
updateSelectionBar
(),
this
.
updateTicksScale
(),
this
.
updateAriaAttributes
(),
this
.
range
&&
this
.
updateCmbLabel
()},
onHighHandleChange
:
function
(){
this
.
syncLowValue
(),
this
.
syncHighValue
(),
this
.
setMinAndMax
(),
this
.
updateHighHandle
(
this
.
valueToPosition
(
this
.
highValue
)),
this
.
updateSelectionBar
(),
this
.
updateTicksScale
(),
this
.
updateCmbLabel
(),
this
.
updateAriaAttributes
()},
applyOptions
:
function
(){
var
b
;
b
=
this
.
scope
.
rzSliderOptions
?
this
.
scope
.
rzSliderOptions
():{},
this
.
options
=
f
.
getOptions
(
b
),
this
.
options
.
step
<=
0
&&
(
this
.
options
.
step
=
1
),
this
.
range
=
void
0
!==
this
.
scope
.
rzSliderModel
&&
void
0
!==
this
.
scope
.
rzSliderHigh
,
this
.
options
.
draggableRange
=
this
.
range
&&
this
.
options
.
draggableRange
,
this
.
options
.
draggableRangeOnly
=
this
.
range
&&
this
.
options
.
draggableRangeOnly
,
this
.
options
.
draggableRangeOnly
&&
(
this
.
options
.
draggableRange
=!
0
),
this
.
options
.
showTicks
=
this
.
options
.
showTicks
||
this
.
options
.
showTicksValues
||!!
this
.
options
.
ticksArray
,
this
.
scope
.
showTicks
=
this
.
options
.
showTicks
,(
a
.
isNumber
(
this
.
options
.
showTicks
)
||
this
.
options
.
ticksArray
)
&&
(
this
.
intermediateTicks
=!
0
),
this
.
options
.
showSelectionBar
=
this
.
options
.
showSelectionBar
||
this
.
options
.
showSelectionBarEnd
||
null
!==
this
.
options
.
showSelectionBarFromValue
,
this
.
options
.
stepsArray
?
this
.
parseStepsArray
():(
this
.
options
.
translate
?
this
.
customTrFn
=
this
.
options
.
translate
:
this
.
customTrFn
=
function
(
a
){
return
String
(
a
)},
this
.
getLegend
=
this
.
options
.
getLegend
),
this
.
options
.
vertical
&&
(
this
.
positionProperty
=
"bottom"
,
this
.
dimensionProperty
=
"height"
),
this
.
options
.
customTemplateScope
&&
(
this
.
scope
.
custom
=
this
.
options
.
customTemplateScope
)},
parseStepsArray
:
function
(){
this
.
options
.
floor
=
0
,
this
.
options
.
ceil
=
this
.
options
.
stepsArray
.
length
-
1
,
this
.
options
.
step
=
1
,
this
.
options
.
translate
?
this
.
customTrFn
=
this
.
options
.
translate
:
this
.
customTrFn
=
function
(
a
){
return
this
.
options
.
bindIndexForStepsArray
?
this
.
getStepValue
(
a
):
a
},
this
.
getLegend
=
function
(
b
){
var
c
=
this
.
options
.
stepsArray
[
b
];
return
a
.
isObject
(
c
)?
c
.
legend
:
null
}},
resetSlider
:
function
(){
this
.
manageElementsStyle
(),
this
.
addAccessibility
(),
this
.
setMinAndMax
(),
this
.
updateCeilLab
(),
this
.
updateFloorLab
(),
this
.
unbindEvents
(),
this
.
manageEventsBindings
(),
this
.
setDisabledState
(),
this
.
calcViewDimensions
(),
this
.
refocusPointerIfNeeded
()},
refocusPointerIfNeeded
:
function
(){
this
.
currentFocusElement
&&
(
this
.
onPointerFocus
(
this
.
currentFocusElement
.
pointer
,
this
.
currentFocusElement
.
ref
),
this
.
focusElement
(
this
.
currentFocusElement
.
pointer
))},
initElemHandles
:
function
(){
a
.
forEach
(
this
.
sliderElem
.
children
(),
function
(
b
,
c
){
var
d
=
a
.
element
(
b
);
switch
(
c
){
case
0
:
this
.
fullBar
=
d
;
break
;
case
1
:
this
.
selBar
=
d
;
break
;
case
2
:
this
.
minH
=
d
;
break
;
case
3
:
this
.
maxH
=
d
;
break
;
case
4
:
this
.
flrLab
=
d
;
break
;
case
5
:
this
.
ceilLab
=
d
;
break
;
case
6
:
this
.
minLab
=
d
;
break
;
case
7
:
this
.
maxLab
=
d
;
break
;
case
8
:
this
.
cmbLab
=
d
;
break
;
case
9
:
this
.
ticks
=
d
}},
this
),
this
.
selBar
.
rzsp
=
0
,
this
.
minH
.
rzsp
=
0
,
this
.
maxH
.
rzsp
=
0
,
this
.
flrLab
.
rzsp
=
0
,
this
.
ceilLab
.
rzsp
=
0
,
this
.
minLab
.
rzsp
=
0
,
this
.
maxLab
.
rzsp
=
0
,
this
.
cmbLab
.
rzsp
=
0
},
manageElementsStyle
:
function
(){
this
.
range
?
this
.
maxH
.
css
(
"display"
,
""
):
this
.
maxH
.
css
(
"display"
,
"none"
),
this
.
alwaysHide
(
this
.
flrLab
,
this
.
options
.
showTicksValues
||
this
.
options
.
hideLimitLabels
),
this
.
alwaysHide
(
this
.
ceilLab
,
this
.
options
.
showTicksValues
||
this
.
options
.
hideLimitLabels
);
var
a
=
this
.
options
.
showTicksValues
&&!
this
.
intermediateTicks
;
this
.
alwaysHide
(
this
.
minLab
,
a
||
this
.
options
.
hidePointerLabels
),
this
.
alwaysHide
(
this
.
maxLab
,
a
||!
this
.
range
||
this
.
options
.
hidePointerLabels
),
this
.
alwaysHide
(
this
.
cmbLab
,
a
||!
this
.
range
||
this
.
options
.
hidePointerLabels
),
this
.
alwaysHide
(
this
.
selBar
,
!
this
.
range
&&!
this
.
options
.
showSelectionBar
),
this
.
options
.
vertical
&&
this
.
sliderElem
.
addClass
(
"rz-vertical"
),
this
.
options
.
draggableRange
?
this
.
selBar
.
addClass
(
"rz-draggable"
):
this
.
selBar
.
removeClass
(
"rz-draggable"
),
this
.
intermediateTicks
&&
this
.
options
.
showTicksValues
&&
this
.
ticks
.
addClass
(
"rz-ticks-values-under"
)},
alwaysHide
:
function
(
a
,
b
){
a
.
rzAlwaysHide
=
b
,
b
?
this
.
hideEl
(
a
):
this
.
showEl
(
a
)},
manageEventsBindings
:
function
(){
this
.
options
.
disabled
||
this
.
options
.
readOnly
?
this
.
unbindEvents
():
this
.
bindEvents
()},
setDisabledState
:
function
(){
this
.
options
.
disabled
?
this
.
sliderElem
.
attr
(
"disabled"
,
"disabled"
):
this
.
sliderElem
.
attr
(
"disabled"
,
null
)},
resetLabelsValue
:
function
(){
this
.
minLab
.
rzsv
=
void
0
,
this
.
maxLab
.
rzsv
=
void
0
},
initHandles
:
function
(){
this
.
updateLowHandle
(
this
.
valueToPosition
(
this
.
lowValue
)),
this
.
range
&&
this
.
updateHighHandle
(
this
.
valueToPosition
(
this
.
highValue
)),
this
.
updateSelectionBar
(),
this
.
range
&&
this
.
updateCmbLabel
(),
this
.
updateTicksScale
()},
translateFn
:
function
(
a
,
b
,
c
,
d
){
d
=
void
0
===
d
?
!
0
:
d
;
var
e
=
""
,
f
=!
1
,
g
=
b
.
hasClass
(
"no-label-injection"
);
d
?(
this
.
options
.
stepsArray
&&!
this
.
options
.
bindIndexForStepsArray
&&
(
a
=
this
.
getStepValue
(
a
)),
e
=
String
(
this
.
customTrFn
(
a
,
this
.
options
.
id
,
c
))):
e
=
String
(
a
),(
void
0
===
b
.
rzsv
||
b
.
rzsv
.
length
!==
e
.
length
||
b
.
rzsv
.
length
>
0
&&
0
===
b
.
rzsd
)
&&
(
f
=!
0
,
b
.
rzsv
=
e
),
g
||
b
.
html
(
e
),
this
.
scope
[
c
+
"Label"
]
=
e
,
f
&&
this
.
getDimension
(
b
)},
setMinAndMax
:
function
(){
if
(
this
.
step
=+
this
.
options
.
step
,
this
.
precision
=+
this
.
options
.
precision
,
this
.
minValue
=
this
.
options
.
floor
,
this
.
options
.
logScale
&&
0
===
this
.
minValue
)
throw
Error
(
"Can't use floor=0 with logarithmic scale"
);
this
.
options
.
enforceStep
&&
(
this
.
lowValue
=
this
.
roundStep
(
this
.
lowValue
),
this
.
range
&&
(
this
.
highValue
=
this
.
roundStep
(
this
.
highValue
))),
null
!=
this
.
options
.
ceil
?
this
.
maxValue
=
this
.
options
.
ceil
:
this
.
maxValue
=
this
.
options
.
ceil
=
this
.
range
?
this
.
highValue
:
this
.
lowValue
,
this
.
options
.
enforceRange
&&
(
this
.
lowValue
=
this
.
sanitizeValue
(
this
.
lowValue
),
this
.
range
&&
(
this
.
highValue
=
this
.
sanitizeValue
(
this
.
highValue
))),
this
.
applyLowValue
(),
this
.
range
&&
this
.
applyHighValue
(),
this
.
valueRange
=
this
.
maxValue
-
this
.
minValue
},
addAccessibility
:
function
(){
this
.
minH
.
attr
(
"role"
,
"slider"
),
this
.
updateAriaAttributes
(),
!
this
.
options
.
keyboardSupport
||
this
.
options
.
readOnly
||
this
.
options
.
disabled
?
this
.
minH
.
attr
(
"tabindex"
,
""
):
this
.
minH
.
attr
(
"tabindex"
,
"0"
),
this
.
options
.
vertical
&&
this
.
minH
.
attr
(
"aria-orientation"
,
"vertical"
),
this
.
options
.
ariaLabel
?
this
.
minH
.
attr
(
"aria-label"
,
this
.
options
.
ariaLabel
):
this
.
options
.
ariaLabelledBy
&&
this
.
minH
.
attr
(
"aria-labelledby"
,
this
.
options
.
ariaLabelledBy
),
this
.
range
&&
(
this
.
maxH
.
attr
(
"role"
,
"slider"
),
!
this
.
options
.
keyboardSupport
||
this
.
options
.
readOnly
||
this
.
options
.
disabled
?
this
.
maxH
.
attr
(
"tabindex"
,
""
):
this
.
maxH
.
attr
(
"tabindex"
,
"0"
),
this
.
options
.
vertical
&&
this
.
maxH
.
attr
(
"aria-orientation"
,
"vertical"
),
this
.
options
.
ariaLabelHigh
?
this
.
maxH
.
attr
(
"aria-label"
,
this
.
options
.
ariaLabelHigh
):
this
.
options
.
ariaLabelledByHigh
&&
this
.
maxH
.
attr
(
"aria-labelledby"
,
this
.
options
.
ariaLabelledByHigh
))},
updateAriaAttributes
:
function
(){
this
.
minH
.
attr
({
"aria-valuenow"
:
this
.
scope
.
rzSliderModel
,
"aria-valuetext"
:
this
.
customTrFn
(
this
.
scope
.
rzSliderModel
,
this
.
options
.
id
,
"model"
),
"aria-valuemin"
:
this
.
minValue
,
"aria-valuemax"
:
this
.
maxValue
}),
this
.
range
&&
this
.
maxH
.
attr
({
"aria-valuenow"
:
this
.
scope
.
rzSliderHigh
,
"aria-valuetext"
:
this
.
customTrFn
(
this
.
scope
.
rzSliderHigh
,
this
.
options
.
id
,
"high"
),
"aria-valuemin"
:
this
.
minValue
,
"aria-valuemax"
:
this
.
maxValue
})},
calcViewDimensions
:
function
(){
var
a
=
this
.
getDimension
(
this
.
minH
);
if
(
this
.
handleHalfDim
=
a
/
2
,
this
.
barDimension
=
this
.
getDimension
(
this
.
fullBar
),
this
.
maxPos
=
this
.
barDimension
-
a
,
this
.
getDimension
(
this
.
sliderElem
),
this
.
sliderElem
.
rzsp
=
this
.
sliderElem
[
0
].
getBoundingClientRect
()[
this
.
positionProperty
],
this
.
initHasRun
){
this
.
updateFloorLab
(),
this
.
updateCeilLab
(),
this
.
initHandles
();
var
c
=
this
;
b
(
function
(){
c
.
updateTicksScale
()})}},
updateTicksScale
:
function
(){
if
(
this
.
options
.
showTicks
){
var
a
=
this
.
options
.
ticksArray
||
this
.
getTicksArray
(),
b
=
this
.
options
.
vertical
?
"translateY"
:
"translateX"
,
c
=
this
;
this
.
options
.
rightToLeft
&&
a
.
reverse
(),
this
.
scope
.
ticks
=
a
.
map
(
function
(
a
){
var
d
=
c
.
valueToPosition
(
a
);
c
.
options
.
vertical
&&
(
d
=
c
.
maxPos
-
d
);
var
e
=
b
+
"("
+
Math
.
round
(
d
)
+
"px)"
,
f
=
{
selected
:
c
.
isTickSelected
(
a
),
style
:{
"-webkit-transform"
:
e
,
"-moz-transform"
:
e
,
"-o-transform"
:
e
,
"-ms-transform"
:
e
,
transform
:
e
}};
if
(
f
.
selected
&&
c
.
options
.
getSelectionBarColor
&&
(
f
.
style
[
"background-color"
]
=
c
.
getSelectionBarColor
()),
!
f
.
selected
&&
c
.
options
.
getTickColor
&&
(
f
.
style
[
"background-color"
]
=
c
.
getTickColor
(
a
)),
c
.
options
.
ticksTooltip
&&
(
f
.
tooltip
=
c
.
options
.
ticksTooltip
(
a
),
f
.
tooltipPlacement
=
c
.
options
.
vertical
?
"right"
:
"top"
),
c
.
options
.
showTicksValues
&&
(
f
.
value
=
c
.
getDisplayValue
(
a
,
"tick-value"
),
c
.
options
.
ticksValuesTooltip
&&
(
f
.
valueTooltip
=
c
.
options
.
ticksValuesTooltip
(
a
),
f
.
valueTooltipPlacement
=
c
.
options
.
vertical
?
"right"
:
"top"
)),
c
.
getLegend
){
var
g
=
c
.
getLegend
(
a
,
c
.
options
.
id
);
g
&&
(
f
.
legend
=
g
)}
return
f
})}},
getTicksArray
:
function
(){
var
a
=
this
.
step
,
b
=
[];
this
.
intermediateTicks
&&
(
a
=
this
.
options
.
showTicks
);
for
(
var
c
=
this
.
minValue
;
c
<=
this
.
maxValue
;
c
+=
a
)
b
.
push
(
c
);
return
b
},
isTickSelected
:
function
(
a
){
if
(
!
this
.
range
)
if
(
null
!==
this
.
options
.
showSelectionBarFromValue
){
var
b
=
this
.
options
.
showSelectionBarFromValue
;
if
(
this
.
lowValue
>
b
&&
a
>=
b
&&
a
<=
this
.
lowValue
)
return
!
0
;
if
(
this
.
lowValue
<
b
&&
b
>=
a
&&
a
>=
this
.
lowValue
)
return
!
0
}
else
if
(
this
.
options
.
showSelectionBarEnd
){
if
(
a
>=
this
.
lowValue
)
return
!
0
}
else
if
(
this
.
options
.
showSelectionBar
&&
a
<=
this
.
lowValue
)
return
!
0
;
return
this
.
range
&&
a
>=
this
.
lowValue
&&
a
<=
this
.
highValue
?
!
0
:
!
1
},
updateFloorLab
:
function
(){
this
.
translateFn
(
this
.
minValue
,
this
.
flrLab
,
"floor"
),
this
.
getDimension
(
this
.
flrLab
);
var
a
=
this
.
options
.
rightToLeft
?
this
.
barDimension
-
this
.
flrLab
.
rzsd
:
0
;
this
.
setPosition
(
this
.
flrLab
,
a
)},
updateCeilLab
:
function
(){
this
.
translateFn
(
this
.
maxValue
,
this
.
ceilLab
,
"ceil"
),
this
.
getDimension
(
this
.
ceilLab
);
var
a
=
this
.
options
.
rightToLeft
?
0
:
this
.
barDimension
-
this
.
ceilLab
.
rzsd
;
this
.
setPosition
(
this
.
ceilLab
,
a
)},
updateHandles
:
function
(
a
,
b
){
"lowValue"
===
a
?
this
.
updateLowHandle
(
b
):
this
.
updateHighHandle
(
b
),
this
.
updateSelectionBar
(),
this
.
updateTicksScale
(),
this
.
range
&&
this
.
updateCmbLabel
()},
getHandleLabelPos
:
function
(
a
,
b
){
var
c
=
this
[
a
].
rzsd
,
d
=
b
-
c
/
2
+
this
.
handleHalfDim
,
e
=
this
.
barDimension
-
c
;
return
this
.
options
.
boundPointerLabels
?
this
.
options
.
rightToLeft
&&
"minLab"
===
a
||!
this
.
options
.
rightToLeft
&&
"maxLab"
===
a
?
Math
.
min
(
d
,
e
):
Math
.
min
(
Math
.
max
(
d
,
0
),
e
):
d
},
updateLowHandle
:
function
(
a
){
if
(
this
.
setPosition
(
this
.
minH
,
a
),
this
.
translateFn
(
this
.
lowValue
,
this
.
minLab
,
"model"
),
this
.
setPosition
(
this
.
minLab
,
this
.
getHandleLabelPos
(
"minLab"
,
a
)),
this
.
options
.
getPointerColor
){
var
b
=
this
.
getPointerColor
(
"min"
);
this
.
scope
.
minPointerStyle
=
{
backgroundColor
:
b
}}
this
.
options
.
autoHideLimitLabels
&&
this
.
shFloorCeil
()},
updateHighHandle
:
function
(
a
){
if
(
this
.
setPosition
(
this
.
maxH
,
a
),
this
.
translateFn
(
this
.
highValue
,
this
.
maxLab
,
"high"
),
this
.
setPosition
(
this
.
maxLab
,
this
.
getHandleLabelPos
(
"maxLab"
,
a
)),
this
.
options
.
getPointerColor
){
var
b
=
this
.
getPointerColor
(
"max"
);
this
.
scope
.
maxPointerStyle
=
{
backgroundColor
:
b
}}
this
.
options
.
autoHideLimitLabels
&&
this
.
shFloorCeil
()},
shFloorCeil
:
function
(){
if
(
!
this
.
options
.
hidePointerLabels
){
var
a
=!
1
,
b
=!
1
,
c
=
this
.
isLabelBelowFloorLab
(
this
.
minLab
),
d
=
this
.
isLabelAboveCeilLab
(
this
.
minLab
),
e
=
this
.
isLabelAboveCeilLab
(
this
.
maxLab
),
f
=
this
.
isLabelBelowFloorLab
(
this
.
cmbLab
),
g
=
this
.
isLabelAboveCeilLab
(
this
.
cmbLab
);
if
(
c
?(
a
=!
0
,
this
.
hideEl
(
this
.
flrLab
)):(
a
=!
1
,
this
.
showEl
(
this
.
flrLab
)),
d
?(
b
=!
0
,
this
.
hideEl
(
this
.
ceilLab
)):(
b
=!
1
,
this
.
showEl
(
this
.
ceilLab
)),
this
.
range
){
var
h
=
this
.
cmbLabelShown
?
g
:
e
,
i
=
this
.
cmbLabelShown
?
f
:
c
;
h
?
this
.
hideEl
(
this
.
ceilLab
):
b
||
this
.
showEl
(
this
.
ceilLab
),
i
?
this
.
hideEl
(
this
.
flrLab
):
a
||
this
.
showEl
(
this
.
flrLab
)}}},
isLabelBelowFloorLab
:
function
(
a
){
var
b
=
this
.
options
.
rightToLeft
,
c
=
a
.
rzsp
,
d
=
a
.
rzsd
,
e
=
this
.
flrLab
.
rzsp
,
f
=
this
.
flrLab
.
rzsd
;
return
b
?
c
+
d
>=
e
-
2
:
e
+
f
+
2
>=
c
},
isLabelAboveCeilLab
:
function
(
a
){
var
b
=
this
.
options
.
rightToLeft
,
c
=
a
.
rzsp
,
d
=
a
.
rzsd
,
e
=
this
.
ceilLab
.
rzsp
,
f
=
this
.
ceilLab
.
rzsd
;
return
b
?
e
+
f
+
2
>=
c
:
c
+
d
>=
e
-
2
},
updateSelectionBar
:
function
(){
var
a
=
0
,
b
=
0
,
c
=
this
.
options
.
rightToLeft
?
!
this
.
options
.
showSelectionBarEnd
:
this
.
options
.
showSelectionBarEnd
,
d
=
this
.
options
.
rightToLeft
?
this
.
maxH
.
rzsp
+
this
.
handleHalfDim
:
this
.
minH
.
rzsp
+
this
.
handleHalfDim
;
if
(
this
.
range
)
b
=
Math
.
abs
(
this
.
maxH
.
rzsp
-
this
.
minH
.
rzsp
),
a
=
d
;
else
if
(
null
!==
this
.
options
.
showSelectionBarFromValue
){
var
e
=
this
.
options
.
showSelectionBarFromValue
,
f
=
this
.
valueToPosition
(
e
),
g
=
this
.
options
.
rightToLeft
?
this
.
lowValue
<=
e
:
this
.
lowValue
>
e
;
g
?(
b
=
this
.
minH
.
rzsp
-
f
,
a
=
f
+
this
.
handleHalfDim
):(
b
=
f
-
this
.
minH
.
rzsp
,
a
=
this
.
minH
.
rzsp
+
this
.
handleHalfDim
)}
else
c
?(
b
=
Math
.
abs
(
this
.
maxPos
-
this
.
minH
.
rzsp
)
+
this
.
handleHalfDim
,
a
=
this
.
minH
.
rzsp
+
this
.
handleHalfDim
):(
b
=
this
.
minH
.
rzsp
+
this
.
handleHalfDim
,
a
=
0
);
if
(
this
.
setDimension
(
this
.
selBar
,
b
),
this
.
setPosition
(
this
.
selBar
,
a
),
this
.
options
.
getSelectionBarColor
){
var
h
=
this
.
getSelectionBarColor
();
this
.
scope
.
barStyle
=
{
backgroundColor
:
h
}}
else
if
(
this
.
options
.
selectionBarGradient
){
var
i
=
null
!==
this
.
options
.
showSelectionBarFromValue
?
this
.
valueToPosition
(
this
.
options
.
showSelectionBarFromValue
):
0
,
j
=
i
-
a
>
0
^
c
,
k
=
this
.
options
.
vertical
?
j
?
"bottom"
:
"top"
:
j
?
"left"
:
"right"
;
this
.
scope
.
barStyle
=
{
backgroundImage
:
"linear-gradient(to "
+
k
+
", "
+
this
.
options
.
selectionBarGradient
.
from
+
" 0%,"
+
this
.
options
.
selectionBarGradient
.
to
+
" 100%)"
},
this
.
options
.
vertical
?(
this
.
scope
.
barStyle
.
backgroundPosition
=
"center "
+
(
i
+
b
+
a
+
(
j
?
-
this
.
handleHalfDim
:
0
))
+
"px"
,
this
.
scope
.
barStyle
.
backgroundSize
=
"100% "
+
(
this
.
barDimension
-
this
.
handleHalfDim
)
+
"px"
):(
this
.
scope
.
barStyle
.
backgroundPosition
=
i
-
a
+
(
j
?
this
.
handleHalfDim
:
0
)
+
"px center"
,
this
.
scope
.
barStyle
.
backgroundSize
=
this
.
barDimension
-
this
.
handleHalfDim
+
"px 100%"
)}},
getSelectionBarColor
:
function
(){
return
this
.
range
?
this
.
options
.
getSelectionBarColor
(
this
.
scope
.
rzSliderModel
,
this
.
scope
.
rzSliderHigh
):
this
.
options
.
getSelectionBarColor
(
this
.
scope
.
rzSliderModel
)},
getPointerColor
:
function
(
a
){
return
"max"
===
a
?
this
.
options
.
getPointerColor
(
this
.
scope
.
rzSliderHigh
,
a
):
this
.
options
.
getPointerColor
(
this
.
scope
.
rzSliderModel
,
a
)},
getTickColor
:
function
(
a
){
return
this
.
options
.
getTickColor
(
a
)},
updateCmbLabel
:
function
(){
var
a
=
null
;
if
(
a
=
this
.
options
.
rightToLeft
?
this
.
minLab
.
rzsp
-
this
.
minLab
.
rzsd
-
10
<=
this
.
maxLab
.
rzsp
:
this
.
minLab
.
rzsp
+
this
.
minLab
.
rzsd
+
10
>=
this
.
maxLab
.
rzsp
){
var
b
=
this
.
getDisplayValue
(
this
.
lowValue
,
"model"
),
c
=
this
.
getDisplayValue
(
this
.
highValue
,
"high"
),
d
=
""
;
d
=
this
.
options
.
mergeRangeLabelsIfSame
&&
b
===
c
?
b
:
this
.
options
.
rightToLeft
?
c
+
" - "
+
b
:
b
+
" - "
+
c
,
this
.
translateFn
(
d
,
this
.
cmbLab
,
"cmb"
,
!
1
);
var
e
=
this
.
options
.
boundPointerLabels
?
Math
.
min
(
Math
.
max
(
this
.
selBar
.
rzsp
+
this
.
selBar
.
rzsd
/
2
-
this
.
cmbLab
.
rzsd
/
2
,
0
),
this
.
barDimension
-
this
.
cmbLab
.
rzsd
):
this
.
selBar
.
rzsp
+
this
.
selBar
.
rzsd
/
2
-
this
.
cmbLab
.
rzsd
/
2
;
this
.
setPosition
(
this
.
cmbLab
,
e
),
this
.
cmbLabelShown
=!
0
,
this
.
hideEl
(
this
.
minLab
),
this
.
hideEl
(
this
.
maxLab
),
this
.
showEl
(
this
.
cmbLab
)}
else
this
.
cmbLabelShown
=!
1
,
this
.
updateHighHandle
(
this
.
valueToPosition
(
this
.
highValue
)),
this
.
updateLowHandle
(
this
.
valueToPosition
(
this
.
lowValue
)),
this
.
showEl
(
this
.
maxLab
),
this
.
showEl
(
this
.
minLab
),
this
.
hideEl
(
this
.
cmbLab
);
this
.
options
.
autoHideLimitLabels
&&
this
.
shFloorCeil
()},
getDisplayValue
:
function
(
a
,
b
){
return
this
.
options
.
stepsArray
&&!
this
.
options
.
bindIndexForStepsArray
&&
(
a
=
this
.
getStepValue
(
a
)),
this
.
customTrFn
(
a
,
this
.
options
.
id
,
b
)},
roundStep
:
function
(
a
,
b
){
var
c
=
b
?
b
:
this
.
step
,
d
=
parseFloat
((
a
-
this
.
minValue
)
/
c
).
toPrecision
(
12
);
d
=
Math
.
round
(
+
d
)
*
c
;
var
e
=
(
this
.
minValue
+
d
).
toFixed
(
this
.
precision
);
return
+
e
},
hideEl
:
function
(
a
){
return
a
.
css
({
visibility
:
"hidden"
})},
showEl
:
function
(
a
){
return
a
.
rzAlwaysHide
?
a
:
a
.
css
({
visibility
:
"visible"
})},
setPosition
:
function
(
a
,
b
){
a
.
rzsp
=
b
;
var
c
=
{};
return
c
[
this
.
positionProperty
]
=
Math
.
round
(
b
)
+
"px"
,
a
.
css
(
c
),
b
},
getDimension
:
function
(
a
){
var
b
=
a
[
0
].
getBoundingClientRect
();
return
this
.
options
.
vertical
?
a
.
rzsd
=
(
b
.
bottom
-
b
.
top
)
*
this
.
options
.
scale
:
a
.
rzsd
=
(
b
.
right
-
b
.
left
)
*
this
.
options
.
scale
,
a
.
rzsd
},
setDimension
:
function
(
a
,
b
){
a
.
rzsd
=
b
;
var
c
=
{};
return
c
[
this
.
dimensionProperty
]
=
Math
.
round
(
b
)
+
"px"
,
a
.
css
(
c
),
b
},
sanitizeValue
:
function
(
a
){
return
Math
.
min
(
Math
.
max
(
a
,
this
.
minValue
),
this
.
maxValue
)},
valueToPosition
:
function
(
a
){
var
b
=
this
.
linearValueToPosition
;
this
.
options
.
customValueToPosition
?
b
=
this
.
options
.
customValueToPosition
:
this
.
options
.
logScale
&&
(
b
=
this
.
logValueToPosition
),
a
=
this
.
sanitizeValue
(
a
);
var
c
=
b
(
a
,
this
.
minValue
,
this
.
maxValue
)
||
0
;
return
this
.
options
.
rightToLeft
&&
(
c
=
1
-
c
),
c
*
this
.
maxPos
},
linearValueToPosition
:
function
(
a
,
b
,
c
){
var
d
=
c
-
b
;
return
(
a
-
b
)
/
d
},
logValueToPosition
:
function
(
a
,
b
,
c
){
a
=
Math
.
log
(
a
),
b
=
Math
.
log
(
b
),
c
=
Math
.
log
(
c
);
var
d
=
c
-
b
;
return
(
a
-
b
)
/
d
},
positionToValue
:
function
(
a
){
var
b
=
a
/
this
.
maxPos
;
this
.
options
.
rightToLeft
&&
(
b
=
1
-
b
);
var
c
=
this
.
linearPositionToValue
;
return
this
.
options
.
customPositionToValue
?
c
=
this
.
options
.
customPositionToValue
:
this
.
options
.
logScale
&&
(
c
=
this
.
logPositionToValue
),
c
(
b
,
this
.
minValue
,
this
.
maxValue
)
||
0
},
linearPositionToValue
:
function
(
a
,
b
,
c
){
return
a
*
(
c
-
b
)
+
b
},
logPositionToValue
:
function
(
a
,
b
,
c
){
b
=
Math
.
log
(
b
),
c
=
Math
.
log
(
c
);
var
d
=
a
*
(
c
-
b
)
+
b
;
return
Math
.
exp
(
d
)},
getEventXY
:
function
(
a
){
var
b
=
this
.
options
.
vertical
?
"clientY"
:
"clientX"
;
return
void
0
!==
a
[
b
]?
a
[
b
]:
void
0
===
a
.
originalEvent
?
a
.
touches
[
0
][
b
]:
a
.
originalEvent
.
touches
[
0
][
b
]},
getEventPosition
:
function
(
a
){
var
b
=
this
.
sliderElem
.
rzsp
,
c
=
0
;
return
c
=
this
.
options
.
vertical
?
-
this
.
getEventXY
(
a
)
+
b
:
this
.
getEventXY
(
a
)
-
b
,
c
*
this
.
options
.
scale
-
this
.
handleHalfDim
},
getEventNames
:
function
(
a
){
var
b
=
{
moveEvent
:
""
,
endEvent
:
""
};
return
a
.
touches
||
void
0
!==
a
.
originalEvent
&&
a
.
originalEvent
.
touches
?(
b
.
moveEvent
=
"touchmove"
,
b
.
endEvent
=
"touchend"
):(
b
.
moveEvent
=
"mousemove"
,
b
.
endEvent
=
"mouseup"
),
b
},
getNearestHandle
:
function
(
a
){
if
(
!
this
.
range
)
return
this
.
minH
;
var
b
=
this
.
getEventPosition
(
a
),
c
=
Math
.
abs
(
b
-
this
.
minH
.
rzsp
),
d
=
Math
.
abs
(
b
-
this
.
maxH
.
rzsp
);
return
d
>
c
?
this
.
minH
:
c
>
d
?
this
.
maxH
:
this
.
options
.
rightToLeft
?
b
>
this
.
minH
.
rzsp
?
this
.
minH
:
this
.
maxH
:
b
<
this
.
minH
.
rzsp
?
this
.
minH
:
this
.
maxH
},
focusElement
:
function
(
a
){
var
b
=
0
;
a
[
b
].
focus
()},
bindEvents
:
function
(){
var
b
,
c
,
d
;
this
.
options
.
draggableRange
?(
b
=
"rzSliderDrag"
,
c
=
this
.
onDragStart
,
d
=
this
.
onDragMove
):(
b
=
"lowValue"
,
c
=
this
.
onStart
,
d
=
this
.
onMove
),
this
.
options
.
onlyBindHandles
||
(
this
.
selBar
.
on
(
"mousedown"
,
a
.
bind
(
this
,
c
,
null
,
b
)),
this
.
selBar
.
on
(
"mousedown"
,
a
.
bind
(
this
,
d
,
this
.
selBar
))),
this
.
options
.
draggableRangeOnly
?(
this
.
minH
.
on
(
"mousedown"
,
a
.
bind
(
this
,
c
,
null
,
b
)),
this
.
maxH
.
on
(
"mousedown"
,
a
.
bind
(
this
,
c
,
null
,
b
))):(
this
.
minH
.
on
(
"mousedown"
,
a
.
bind
(
this
,
this
.
onStart
,
this
.
minH
,
"lowValue"
)),
this
.
range
&&
this
.
maxH
.
on
(
"mousedown"
,
a
.
bind
(
this
,
this
.
onStart
,
this
.
maxH
,
"highValue"
)),
this
.
options
.
onlyBindHandles
||
(
this
.
fullBar
.
on
(
"mousedown"
,
a
.
bind
(
this
,
this
.
onStart
,
null
,
null
)),
this
.
fullBar
.
on
(
"mousedown"
,
a
.
bind
(
this
,
this
.
onMove
,
this
.
fullBar
)),
this
.
ticks
.
on
(
"mousedown"
,
a
.
bind
(
this
,
this
.
onStart
,
null
,
null
)),
this
.
ticks
.
on
(
"mousedown"
,
a
.
bind
(
this
,
this
.
onTickClick
,
this
.
ticks
)))),
this
.
options
.
onlyBindHandles
||
(
this
.
selBar
.
on
(
"touchstart"
,
a
.
bind
(
this
,
c
,
null
,
b
)),
this
.
selBar
.
on
(
"touchstart"
,
a
.
bind
(
this
,
d
,
this
.
selBar
))),
this
.
options
.
draggableRangeOnly
?(
this
.
minH
.
on
(
"touchstart"
,
a
.
bind
(
this
,
c
,
null
,
b
)),
this
.
maxH
.
on
(
"touchstart"
,
a
.
bind
(
this
,
c
,
null
,
b
))):(
this
.
minH
.
on
(
"touchstart"
,
a
.
bind
(
this
,
this
.
onStart
,
this
.
minH
,
"lowValue"
)),
this
.
range
&&
this
.
maxH
.
on
(
"touchstart"
,
a
.
bind
(
this
,
this
.
onStart
,
this
.
maxH
,
"highValue"
)),
this
.
options
.
onlyBindHandles
||
(
this
.
fullBar
.
on
(
"touchstart"
,
a
.
bind
(
this
,
this
.
onStart
,
null
,
null
)),
this
.
fullBar
.
on
(
"touchstart"
,
a
.
bind
(
this
,
this
.
onMove
,
this
.
fullBar
)),
this
.
ticks
.
on
(
"touchstart"
,
a
.
bind
(
this
,
this
.
onStart
,
null
,
null
)),
this
.
ticks
.
on
(
"touchstart"
,
a
.
bind
(
this
,
this
.
onTickClick
,
this
.
ticks
)))),
this
.
options
.
keyboardSupport
&&
(
this
.
minH
.
on
(
"focus"
,
a
.
bind
(
this
,
this
.
onPointerFocus
,
this
.
minH
,
"lowValue"
)),
this
.
range
&&
this
.
maxH
.
on
(
"focus"
,
a
.
bind
(
this
,
this
.
onPointerFocus
,
this
.
maxH
,
"highValue"
)))},
unbindEvents
:
function
(){
this
.
minH
.
off
(),
this
.
maxH
.
off
(),
this
.
fullBar
.
off
(),
this
.
selBar
.
off
(),
this
.
ticks
.
off
()},
onStart
:
function
(
b
,
d
,
e
){
var
f
,
g
,
h
=
this
.
getEventNames
(
e
);
e
.
stopPropagation
(),
e
.
preventDefault
(),
this
.
calcViewDimensions
(),
b
?
this
.
tracking
=
d
:(
b
=
this
.
getNearestHandle
(
e
),
this
.
tracking
=
b
===
this
.
minH
?
"lowValue"
:
"highValue"
),
b
.
addClass
(
"rz-active"
),
this
.
options
.
keyboardSupport
&&
this
.
focusElement
(
b
),
f
=
a
.
bind
(
this
,
this
.
dragging
.
active
?
this
.
onDragMove
:
this
.
onMove
,
b
),
g
=
a
.
bind
(
this
,
this
.
onEnd
,
f
),
c
.
on
(
h
.
moveEvent
,
f
),
c
.
one
(
h
.
endEvent
,
g
),
this
.
callOnStart
()},
onMove
:
function
(
b
,
c
,
d
){
var
e
,
f
=
this
.
getEventPosition
(
c
),
g
=
this
.
options
.
rightToLeft
?
this
.
minValue
:
this
.
maxValue
,
h
=
this
.
options
.
rightToLeft
?
this
.
maxValue
:
this
.
minValue
;
0
>=
f
?
e
=
h
:
f
>=
this
.
maxPos
?
e
=
g
:(
e
=
this
.
positionToValue
(
f
),
e
=
d
&&
a
.
isNumber
(
this
.
options
.
showTicks
)?
this
.
roundStep
(
e
,
this
.
options
.
showTicks
):
this
.
roundStep
(
e
)),
this
.
positionTrackingHandle
(
e
)},
onEnd
:
function
(
a
,
b
){
var
d
=
this
.
getEventNames
(
b
).
moveEvent
;
this
.
options
.
keyboardSupport
||
(
this
.
minH
.
removeClass
(
"rz-active"
),
this
.
maxH
.
removeClass
(
"rz-active"
),
this
.
tracking
=
""
),
this
.
dragging
.
active
=!
1
,
c
.
off
(
d
,
a
),
this
.
callOnEnd
()},
onTickClick
:
function
(
a
,
b
){
this
.
onMove
(
a
,
b
,
!
0
)},
onPointerFocus
:
function
(
b
,
c
){
this
.
tracking
=
c
,
b
.
one
(
"blur"
,
a
.
bind
(
this
,
this
.
onPointerBlur
,
b
)),
b
.
on
(
"keydown"
,
a
.
bind
(
this
,
this
.
onKeyboardEvent
)),
b
.
on
(
"keyup"
,
a
.
bind
(
this
,
this
.
onKeyUp
)),
this
.
firstKeyDown
=!
0
,
b
.
addClass
(
"rz-active"
),
this
.
currentFocusElement
=
{
pointer
:
b
,
ref
:
c
}},
onKeyUp
:
function
(){
this
.
firstKeyDown
=!
0
,
this
.
callOnEnd
()},
onPointerBlur
:
function
(
a
){
a
.
off
(
"keydown"
),
a
.
off
(
"keyup"
),
this
.
tracking
=
""
,
a
.
removeClass
(
"rz-active"
),
this
.
currentFocusElement
=
null
},
getKeyActions
:
function
(
a
){
var
b
=
a
+
this
.
step
,
c
=
a
-
this
.
step
,
d
=
a
+
this
.
valueRange
/
10
,
e
=
a
-
this
.
valueRange
/
10
,
f
=
{
UP
:
b
,
DOWN
:
c
,
LEFT
:
c
,
RIGHT
:
b
,
PAGEUP
:
d
,
PAGEDOWN
:
e
,
HOME
:
this
.
minValue
,
END
:
this
.
maxValue
};
return
this
.
options
.
rightToLeft
&&
(
f
.
LEFT
=
b
,
f
.
RIGHT
=
c
,
this
.
options
.
vertical
&&
(
f
.
UP
=
c
,
f
.
DOWN
=
b
)),
f
},
onKeyboardEvent
:
function
(
a
){
var
c
=
this
[
this
.
tracking
],
d
=
a
.
keyCode
||
a
.
which
,
e
=
{
38
:
"UP"
,
40
:
"DOWN"
,
37
:
"LEFT"
,
39
:
"RIGHT"
,
33
:
"PAGEUP"
,
34
:
"PAGEDOWN"
,
36
:
"HOME"
,
35
:
"END"
},
f
=
this
.
getKeyActions
(
c
),
g
=
e
[
d
],
h
=
f
[
g
];
if
(
null
!=
h
&&
""
!==
this
.
tracking
){
a
.
preventDefault
(),
this
.
firstKeyDown
&&
(
this
.
firstKeyDown
=!
1
,
this
.
callOnStart
());
var
i
=
this
;
b
(
function
(){
var
a
=
i
.
roundStep
(
i
.
sanitizeValue
(
h
));
if
(
i
.
options
.
draggableRangeOnly
){
var
b
,
c
,
d
=
i
.
highValue
-
i
.
lowValue
;
"lowValue"
===
i
.
tracking
?(
b
=
a
,
c
=
a
+
d
,
c
>
i
.
maxValue
&&
(
c
=
i
.
maxValue
,
b
=
c
-
d
)):(
c
=
a
,
b
=
a
-
d
,
b
<
i
.
minValue
&&
(
b
=
i
.
minValue
,
c
=
b
+
d
)),
i
.
positionTrackingBar
(
b
,
c
)}
else
i
.
positionTrackingHandle
(
a
)})}},
onDragStart
:
function
(
a
,
b
,
c
){
var
d
=
this
.
getEventPosition
(
c
);
this
.
dragging
=
{
active
:
!
0
,
value
:
this
.
positionToValue
(
d
),
difference
:
this
.
highValue
-
this
.
lowValue
,
lowLimit
:
this
.
options
.
rightToLeft
?
this
.
minH
.
rzsp
-
d
:
d
-
this
.
minH
.
rzsp
,
highLimit
:
this
.
options
.
rightToLeft
?
d
-
this
.
maxH
.
rzsp
:
this
.
maxH
.
rzsp
-
d
},
this
.
onStart
(
a
,
b
,
c
)},
getValue
:
function
(
a
,
b
,
c
,
d
){
var
e
=
this
.
options
.
rightToLeft
,
f
=
null
;
return
f
=
"min"
===
a
?
c
?
d
?
e
?
this
.
minValue
:
this
.
maxValue
-
this
.
dragging
.
difference
:
e
?
this
.
maxValue
-
this
.
dragging
.
difference
:
this
.
minValue
:
e
?
this
.
positionToValue
(
b
+
this
.
dragging
.
lowLimit
):
this
.
positionToValue
(
b
-
this
.
dragging
.
lowLimit
):
c
?
d
?
e
?
this
.
minValue
+
this
.
dragging
.
difference
:
this
.
maxValue
:
e
?
this
.
maxValue
:
this
.
minValue
+
this
.
dragging
.
difference
:
e
?
this
.
positionToValue
(
b
+
this
.
dragging
.
lowLimit
)
+
this
.
dragging
.
difference
:
this
.
positionToValue
(
b
-
this
.
dragging
.
lowLimit
)
+
this
.
dragging
.
difference
,
this
.
roundStep
(
f
)},
onDragMove
:
function
(
a
,
b
){
var
c
,
d
,
e
,
f
,
g
,
h
,
i
,
j
,
k
=
this
.
getEventPosition
(
b
);
if
(
this
.
options
.
rightToLeft
?(
e
=
this
.
dragging
.
lowLimit
,
f
=
this
.
dragging
.
highLimit
,
i
=
this
.
maxH
,
j
=
this
.
minH
):(
e
=
this
.
dragging
.
highLimit
,
f
=
this
.
dragging
.
lowLimit
,
i
=
this
.
minH
,
j
=
this
.
maxH
),
g
=
f
>=
k
,
h
=
k
>=
this
.
maxPos
-
e
,
g
){
if
(
0
===
i
.
rzsp
)
return
;
c
=
this
.
getValue
(
"min"
,
k
,
!
0
,
!
1
),
d
=
this
.
getValue
(
"max"
,
k
,
!
0
,
!
1
)}
else
if
(
h
){
if
(
j
.
rzsp
===
this
.
maxPos
)
return
;
d
=
this
.
getValue
(
"max"
,
k
,
!
0
,
!
0
),
c
=
this
.
getValue
(
"min"
,
k
,
!
0
,
!
0
)}
else
c
=
this
.
getValue
(
"min"
,
k
,
!
1
),
d
=
this
.
getValue
(
"max"
,
k
,
!
1
);
this
.
positionTrackingBar
(
c
,
d
)},
positionTrackingBar
:
function
(
a
,
b
){
null
!=
this
.
options
.
minLimit
&&
a
<
this
.
options
.
minLimit
&&
(
a
=
this
.
options
.
minLimit
,
b
=
a
+
this
.
dragging
.
difference
),
null
!=
this
.
options
.
maxLimit
&&
b
>
this
.
options
.
maxLimit
&&
(
b
=
this
.
options
.
maxLimit
,
a
=
b
-
this
.
dragging
.
difference
),
this
.
lowValue
=
a
,
this
.
highValue
=
b
,
this
.
applyLowValue
(),
this
.
range
&&
this
.
applyHighValue
(),
this
.
applyModel
(
!
0
),
this
.
updateHandles
(
"lowValue"
,
this
.
valueToPosition
(
a
)),
this
.
updateHandles
(
"highValue"
,
this
.
valueToPosition
(
b
))},
positionTrackingHandle
:
function
(
a
){
var
b
=!
1
;
a
=
this
.
applyMinMaxLimit
(
a
),
this
.
range
&&
(
this
.
options
.
pushRange
?(
a
=
this
.
applyPushRange
(
a
),
b
=!
0
):(
this
.
options
.
noSwitching
&&
(
"lowValue"
===
this
.
tracking
&&
a
>
this
.
highValue
?
a
=
this
.
applyMinMaxRange
(
this
.
highValue
):
"highValue"
===
this
.
tracking
&&
a
<
this
.
lowValue
&&
(
a
=
this
.
applyMinMaxRange
(
this
.
lowValue
))),
a
=
this
.
applyMinMaxRange
(
a
),
"lowValue"
===
this
.
tracking
&&
a
>
this
.
highValue
?(
this
.
lowValue
=
this
.
highValue
,
this
.
applyLowValue
(),
this
.
applyModel
(),
this
.
updateHandles
(
this
.
tracking
,
this
.
maxH
.
rzsp
),
this
.
updateAriaAttributes
(),
this
.
tracking
=
"highValue"
,
this
.
minH
.
removeClass
(
"rz-active"
),
this
.
maxH
.
addClass
(
"rz-active"
),
this
.
options
.
keyboardSupport
&&
this
.
focusElement
(
this
.
maxH
),
b
=!
0
):
"highValue"
===
this
.
tracking
&&
a
<
this
.
lowValue
&&
(
this
.
highValue
=
this
.
lowValue
,
this
.
applyHighValue
(),
this
.
applyModel
(),
this
.
updateHandles
(
this
.
tracking
,
this
.
minH
.
rzsp
),
this
.
updateAriaAttributes
(),
this
.
tracking
=
"lowValue"
,
this
.
maxH
.
removeClass
(
"rz-active"
),
this
.
minH
.
addClass
(
"rz-active"
),
this
.
options
.
keyboardSupport
&&
this
.
focusElement
(
this
.
minH
),
b
=!
0
))),
this
[
this
.
tracking
]
!==
a
&&
(
this
[
this
.
tracking
]
=
a
,
"lowValue"
===
this
.
tracking
?
this
.
applyLowValue
():
this
.
applyHighValue
(),
this
.
applyModel
(),
this
.
updateHandles
(
this
.
tracking
,
this
.
valueToPosition
(
a
)),
this
.
updateAriaAttributes
(),
b
=!
0
),
b
&&
this
.
applyModel
(
!
0
)},
applyMinMaxLimit
:
function
(
a
){
return
null
!=
this
.
options
.
minLimit
&&
a
<
this
.
options
.
minLimit
?
this
.
options
.
minLimit
:
null
!=
this
.
options
.
maxLimit
&&
a
>
this
.
options
.
maxLimit
?
this
.
options
.
maxLimit
:
a
},
applyMinMaxRange
:
function
(
a
){
var
b
=
"lowValue"
===
this
.
tracking
?
this
.
highValue
:
this
.
lowValue
,
c
=
Math
.
abs
(
a
-
b
);
return
null
!=
this
.
options
.
minRange
&&
c
<
this
.
options
.
minRange
?
"lowValue"
===
this
.
tracking
?
this
.
highValue
-
this
.
options
.
minRange
:
this
.
lowValue
+
this
.
options
.
minRange
:
null
!=
this
.
options
.
maxRange
&&
c
>
this
.
options
.
maxRange
?
"lowValue"
===
this
.
tracking
?
this
.
highValue
-
this
.
options
.
maxRange
:
this
.
lowValue
+
this
.
options
.
maxRange
:
a
},
applyPushRange
:
function
(
a
){
var
b
=
"lowValue"
===
this
.
tracking
?
this
.
highValue
-
a
:
a
-
this
.
lowValue
,
c
=
null
!==
this
.
options
.
minRange
?
this
.
options
.
minRange
:
this
.
options
.
step
,
d
=
this
.
options
.
maxRange
;
return
c
>
b
?(
"lowValue"
===
this
.
tracking
?(
this
.
highValue
=
Math
.
min
(
a
+
c
,
this
.
maxValue
),
a
=
this
.
highValue
-
c
,
this
.
applyHighValue
(),
this
.
updateHandles
(
"highValue"
,
this
.
valueToPosition
(
this
.
highValue
))):(
this
.
lowValue
=
Math
.
max
(
a
-
c
,
this
.
minValue
),
a
=
this
.
lowValue
+
c
,
this
.
applyLowValue
(),
this
.
updateHandles
(
"lowValue"
,
this
.
valueToPosition
(
this
.
lowValue
))),
this
.
updateAriaAttributes
()):
null
!==
d
&&
b
>
d
&&
(
"lowValue"
===
this
.
tracking
?(
this
.
highValue
=
a
+
d
,
this
.
applyHighValue
(),
this
.
updateHandles
(
"highValue"
,
this
.
valueToPosition
(
this
.
highValue
))):(
this
.
lowValue
=
a
-
d
,
this
.
applyLowValue
(),
this
.
updateHandles
(
"lowValue"
,
this
.
valueToPosition
(
this
.
lowValue
))),
this
.
updateAriaAttributes
()),
a
},
applyModel
:
function
(
a
){
this
.
internalChange
=!
0
,
this
.
scope
.
$apply
(),
a
&&
this
.
callOnChange
(),
this
.
internalChange
=!
1
},
callOnStart
:
function
(){
if
(
this
.
options
.
onStart
){
var
a
=
this
,
b
=
"lowValue"
===
this
.
tracking
?
"min"
:
"max"
;
this
.
scope
.
$evalAsync
(
function
(){
a
.
options
.
onStart
(
a
.
options
.
id
,
a
.
scope
.
rzSliderModel
,
a
.
scope
.
rzSliderHigh
,
b
);
})}},
callOnChange
:
function
(){
if
(
this
.
options
.
onChange
){
var
a
=
this
,
b
=
"lowValue"
===
this
.
tracking
?
"min"
:
"max"
;
this
.
scope
.
$evalAsync
(
function
(){
a
.
options
.
onChange
(
a
.
options
.
id
,
a
.
scope
.
rzSliderModel
,
a
.
scope
.
rzSliderHigh
,
b
)})}},
callOnEnd
:
function
(){
if
(
this
.
options
.
onEnd
){
var
a
=
this
,
b
=
"lowValue"
===
this
.
tracking
?
"min"
:
"max"
;
this
.
scope
.
$evalAsync
(
function
(){
a
.
options
.
onEnd
(
a
.
options
.
id
,
a
.
scope
.
rzSliderModel
,
a
.
scope
.
rzSliderHigh
,
b
)})}
this
.
scope
.
$emit
(
"slideEnded"
)}},
h
}]).
directive
(
"rzslider"
,[
"RzSlider"
,
function
(
a
){
return
{
restrict
:
"AE"
,
replace
:
!
0
,
scope
:{
rzSliderModel
:
"=?"
,
rzSliderHigh
:
"=?"
,
rzSliderOptions
:
"&?"
,
rzSliderTplUrl
:
"@"
},
templateUrl
:
function
(
a
,
b
){
return
b
.
rzSliderTplUrl
||
"rzSliderTpl.html"
},
link
:
function
(
b
,
c
){
b
.
slider
=
new
a
(
b
,
c
)}}}]);
return
b
.
run
([
"$templateCache"
,
function
(
a
){
a
.
put
(
"rzSliderTpl.html"
,
'<div class=rzslider><span class=rz-bar-wrapper><span class=rz-bar></span></span> <span class=rz-bar-wrapper><span class="rz-bar rz-selection" ng-style=barStyle></span></span> <span class="rz-pointer rz-pointer-min" ng-style=minPointerStyle></span> <span class="rz-pointer rz-pointer-max" ng-style=maxPointerStyle></span> <span class="rz-bubble rz-limit rz-floor"></span> <span class="rz-bubble rz-limit rz-ceil"></span> <span class=rz-bubble></span> <span class=rz-bubble></span> <span class=rz-bubble></span><ul ng-show=showTicks class=rz-ticks><li ng-repeat="t in ticks track by $index" class=rz-tick ng-class="{
\'
rz-selected
\'
: t.selected}" ng-style=t.style ng-attr-uib-tooltip="{{ t.tooltip }}" ng-attr-tooltip-placement={{t.tooltipPlacement}} ng-attr-tooltip-append-to-body="{{ t.tooltip ? true : undefined}}"><span ng-if="t.value != null" class=rz-tick-value ng-attr-uib-tooltip="{{ t.valueTooltip }}" ng-attr-tooltip-placement={{t.valueTooltipPlacement}}>{{ t.value }}</span> <span ng-if="t.legend != null" class=rz-tick-legend>{{ t.legend }}</span></li></ul></div>'
)}]),
b
.
name
});
\ No newline at end of file
/*! angularjs-slider - v6.1.2 - (c) Rafal Zajac <rzajac@gmail.com>, Valentin Hervieu <valentin@hervieu.me>, Jussi Saarivirta <jusasi@gmail.com>, Angelin Sirbu <angelin.sirbu@gmail.com> - https://github.com/angular-slider/angularjs-slider - 2017-05-25 */
!
function
(
a
,
b
){
"use strict"
;
if
(
"function"
==
typeof
define
&&
define
.
amd
)
define
([
"angular"
],
b
);
else
if
(
"object"
==
typeof
module
&&
module
.
exports
){
var
c
=
angular
||
require
(
"angular"
);
c
&&
c
.
module
||
"undefined"
==
typeof
angular
||
(
c
=
angular
),
module
.
exports
=
b
(
c
)}
else
b
(
a
.
angular
)}(
this
,
function
(
a
){
"use strict"
;
var
b
=
a
.
module
(
"rzModule"
,[]).
factory
(
"RzSliderOptions"
,
function
(){
var
b
=
{
floor
:
0
,
ceil
:
null
,
step
:
1
,
precision
:
0
,
minRange
:
null
,
maxRange
:
null
,
pushRange
:
!
1
,
minLimit
:
null
,
maxLimit
:
null
,
id
:
null
,
translate
:
null
,
getLegend
:
null
,
stepsArray
:
null
,
bindIndexForStepsArray
:
!
1
,
draggableRange
:
!
1
,
draggableRangeOnly
:
!
1
,
showSelectionBar
:
!
1
,
showSelectionBarEnd
:
!
1
,
showSelectionBarFromValue
:
null
,
hidePointerLabels
:
!
1
,
hideLimitLabels
:
!
1
,
autoHideLimitLabels
:
!
0
,
readOnly
:
!
1
,
disabled
:
!
1
,
interval
:
350
,
showTicks
:
!
1
,
showTicksValues
:
!
1
,
ticksArray
:
null
,
ticksTooltip
:
null
,
ticksValuesTooltip
:
null
,
vertical
:
!
1
,
getSelectionBarColor
:
null
,
getTickColor
:
null
,
getPointerColor
:
null
,
keyboardSupport
:
!
0
,
scale
:
1
,
enforceStep
:
!
0
,
enforceRange
:
!
1
,
noSwitching
:
!
1
,
onlyBindHandles
:
!
1
,
onStart
:
null
,
onChange
:
null
,
onEnd
:
null
,
rightToLeft
:
!
1
,
boundPointerLabels
:
!
0
,
mergeRangeLabelsIfSame
:
!
1
,
customTemplateScope
:
null
,
logScale
:
!
1
,
customValueToPosition
:
null
,
customPositionToValue
:
null
,
selectionBarGradient
:
null
,
ariaLabel
:
null
,
ariaLabelledBy
:
null
,
ariaLabelHigh
:
null
,
ariaLabelledByHigh
:
null
},
c
=
{},
d
=
{};
return
d
.
options
=
function
(
b
){
a
.
extend
(
c
,
b
)},
d
.
getOptions
=
function
(
d
){
return
a
.
extend
({},
b
,
c
,
d
)},
d
}).
factory
(
"rzThrottle"
,[
"$timeout"
,
function
(
a
){
return
function
(
b
,
c
,
d
){
var
e
,
f
,
g
,
h
=
Date
.
now
||
function
(){
return
(
new
Date
).
getTime
()},
i
=
null
,
j
=
0
;
d
=
d
||
{};
var
k
=
function
(){
j
=
h
(),
i
=
null
,
g
=
b
.
apply
(
e
,
f
),
e
=
f
=
null
};
return
function
(){
var
l
=
h
(),
m
=
c
-
(
l
-
j
);
return
e
=
this
,
f
=
arguments
,
0
>=
m
?(
a
.
cancel
(
i
),
i
=
null
,
j
=
l
,
g
=
b
.
apply
(
e
,
f
),
e
=
f
=
null
):
i
||
d
.
trailing
===!
1
||
(
i
=
a
(
k
,
m
)),
g
}}}]).
factory
(
"RzSlider"
,[
"$timeout"
,
"$document"
,
"$window"
,
"$compile"
,
"RzSliderOptions"
,
"rzThrottle"
,
function
(
b
,
c
,
d
,
e
,
f
,
g
){
var
h
=
function
(
a
,
b
){
this
.
scope
=
a
,
this
.
lowValue
=
0
,
this
.
highValue
=
0
,
this
.
sliderElem
=
b
,
this
.
range
=
void
0
!==
this
.
scope
.
rzSliderModel
&&
void
0
!==
this
.
scope
.
rzSliderHigh
,
this
.
dragging
=
{
active
:
!
1
,
value
:
0
,
difference
:
0
,
position
:
0
,
lowLimit
:
0
,
highLimit
:
0
},
this
.
positionProperty
=
"left"
,
this
.
dimensionProperty
=
"width"
,
this
.
handleHalfDim
=
0
,
this
.
maxPos
=
0
,
this
.
precision
=
0
,
this
.
step
=
1
,
this
.
tracking
=
""
,
this
.
minValue
=
0
,
this
.
maxValue
=
0
,
this
.
valueRange
=
0
,
this
.
intermediateTicks
=!
1
,
this
.
initHasRun
=!
1
,
this
.
firstKeyDown
=!
1
,
this
.
internalChange
=!
1
,
this
.
cmbLabelShown
=!
1
,
this
.
currentFocusElement
=
null
,
this
.
fullBar
=
null
,
this
.
selBar
=
null
,
this
.
minH
=
null
,
this
.
maxH
=
null
,
this
.
flrLab
=
null
,
this
.
ceilLab
=
null
,
this
.
minLab
=
null
,
this
.
maxLab
=
null
,
this
.
cmbLab
=
null
,
this
.
ticks
=
null
,
this
.
init
()};
return
h
.
prototype
=
{
init
:
function
(){
var
b
,
c
,
e
=
this
,
f
=
function
(){
e
.
calcViewDimensions
()};
this
.
applyOptions
(),
this
.
syncLowValue
(),
this
.
range
&&
this
.
syncHighValue
(),
this
.
initElemHandles
(),
this
.
manageElementsStyle
(),
this
.
setDisabledState
(),
this
.
calcViewDimensions
(),
this
.
setMinAndMax
(),
this
.
addAccessibility
(),
this
.
updateCeilLab
(),
this
.
updateFloorLab
(),
this
.
initHandles
(),
this
.
manageEventsBindings
(),
this
.
scope
.
$on
(
"reCalcViewDimensions"
,
f
),
a
.
element
(
d
).
on
(
"resize"
,
f
),
this
.
initHasRun
=!
0
,
b
=
g
(
function
(){
e
.
onLowHandleChange
()},
e
.
options
.
interval
),
c
=
g
(
function
(){
e
.
onHighHandleChange
()},
e
.
options
.
interval
),
this
.
scope
.
$on
(
"rzSliderForceRender"
,
function
(){
e
.
resetLabelsValue
(),
b
(),
e
.
range
&&
c
(),
e
.
resetSlider
()}),
this
.
scope
.
$watch
(
"rzSliderOptions()"
,
function
(
a
,
b
){
a
!==
b
&&
(
e
.
applyOptions
(),
e
.
syncLowValue
(),
e
.
range
&&
e
.
syncHighValue
(),
e
.
resetSlider
())},
!
0
),
this
.
scope
.
$watch
(
"rzSliderModel"
,
function
(
a
,
c
){
e
.
internalChange
||
a
!==
c
&&
b
()}),
this
.
scope
.
$watch
(
"rzSliderHigh"
,
function
(
a
,
b
){
e
.
internalChange
||
a
!==
b
&&
(
null
!=
a
&&
c
(),(
e
.
range
&&
null
==
a
||!
e
.
range
&&
null
!=
a
)
&&
(
e
.
applyOptions
(),
e
.
resetSlider
()))}),
this
.
scope
.
$on
(
"$destroy"
,
function
(){
e
.
unbindEvents
(),
a
.
element
(
d
).
off
(
"resize"
,
f
),
e
.
currentFocusElement
=
null
})},
findStepIndex
:
function
(
b
){
for
(
var
c
=
0
,
d
=
0
;
d
<
this
.
options
.
stepsArray
.
length
;
d
++
){
var
e
=
this
.
options
.
stepsArray
[
d
];
if
(
e
===
b
){
c
=
d
;
break
}
if
(
a
.
isDate
(
e
)){
if
(
e
.
getTime
()
===
b
.
getTime
()){
c
=
d
;
break
}}
else
if
(
a
.
isObject
(
e
)
&&
(
a
.
isDate
(
e
.
value
)
&&
e
.
value
.
getTime
()
===
b
.
getTime
()
||
e
.
value
===
b
)){
c
=
d
;
break
}}
return
c
},
syncLowValue
:
function
(){
this
.
options
.
stepsArray
?
this
.
options
.
bindIndexForStepsArray
?
this
.
lowValue
=
this
.
scope
.
rzSliderModel
:
this
.
lowValue
=
this
.
findStepIndex
(
this
.
scope
.
rzSliderModel
):
this
.
lowValue
=
this
.
scope
.
rzSliderModel
},
syncHighValue
:
function
(){
this
.
options
.
stepsArray
?
this
.
options
.
bindIndexForStepsArray
?
this
.
highValue
=
this
.
scope
.
rzSliderHigh
:
this
.
highValue
=
this
.
findStepIndex
(
this
.
scope
.
rzSliderHigh
):
this
.
highValue
=
this
.
scope
.
rzSliderHigh
},
getStepValue
:
function
(
b
){
var
c
=
this
.
options
.
stepsArray
[
b
];
return
a
.
isDate
(
c
)?
c
:
a
.
isObject
(
c
)?
c
.
value
:
c
},
applyLowValue
:
function
(){
this
.
options
.
stepsArray
?
this
.
options
.
bindIndexForStepsArray
?
this
.
scope
.
rzSliderModel
=
this
.
lowValue
:
this
.
scope
.
rzSliderModel
=
this
.
getStepValue
(
this
.
lowValue
):
this
.
scope
.
rzSliderModel
=
this
.
lowValue
},
applyHighValue
:
function
(){
this
.
options
.
stepsArray
?
this
.
options
.
bindIndexForStepsArray
?
this
.
scope
.
rzSliderHigh
=
this
.
highValue
:
this
.
scope
.
rzSliderHigh
=
this
.
getStepValue
(
this
.
highValue
):
this
.
scope
.
rzSliderHigh
=
this
.
highValue
},
onLowHandleChange
:
function
(){
this
.
syncLowValue
(),
this
.
range
&&
this
.
syncHighValue
(),
this
.
setMinAndMax
(),
this
.
updateLowHandle
(
this
.
valueToPosition
(
this
.
lowValue
)),
this
.
updateSelectionBar
(),
this
.
updateTicksScale
(),
this
.
updateAriaAttributes
(),
this
.
range
&&
this
.
updateCmbLabel
()},
onHighHandleChange
:
function
(){
this
.
syncLowValue
(),
this
.
syncHighValue
(),
this
.
setMinAndMax
(),
this
.
updateHighHandle
(
this
.
valueToPosition
(
this
.
highValue
)),
this
.
updateSelectionBar
(),
this
.
updateTicksScale
(),
this
.
updateCmbLabel
(),
this
.
updateAriaAttributes
()},
applyOptions
:
function
(){
var
b
;
b
=
this
.
scope
.
rzSliderOptions
?
this
.
scope
.
rzSliderOptions
():{},
this
.
options
=
f
.
getOptions
(
b
),
this
.
options
.
step
<=
0
&&
(
this
.
options
.
step
=
1
),
this
.
range
=
void
0
!==
this
.
scope
.
rzSliderModel
&&
void
0
!==
this
.
scope
.
rzSliderHigh
,
this
.
options
.
draggableRange
=
this
.
range
&&
this
.
options
.
draggableRange
,
this
.
options
.
draggableRangeOnly
=
this
.
range
&&
this
.
options
.
draggableRangeOnly
,
this
.
options
.
draggableRangeOnly
&&
(
this
.
options
.
draggableRange
=!
0
),
this
.
options
.
showTicks
=
this
.
options
.
showTicks
||
this
.
options
.
showTicksValues
||!!
this
.
options
.
ticksArray
,
this
.
scope
.
showTicks
=
this
.
options
.
showTicks
,(
a
.
isNumber
(
this
.
options
.
showTicks
)
||
this
.
options
.
ticksArray
)
&&
(
this
.
intermediateTicks
=!
0
),
this
.
options
.
showSelectionBar
=
this
.
options
.
showSelectionBar
||
this
.
options
.
showSelectionBarEnd
||
null
!==
this
.
options
.
showSelectionBarFromValue
,
this
.
options
.
stepsArray
?
this
.
parseStepsArray
():(
this
.
options
.
translate
?
this
.
customTrFn
=
this
.
options
.
translate
:
this
.
customTrFn
=
function
(
a
){
return
String
(
a
)},
this
.
getLegend
=
this
.
options
.
getLegend
),
this
.
options
.
vertical
&&
(
this
.
positionProperty
=
"bottom"
,
this
.
dimensionProperty
=
"height"
),
this
.
options
.
customTemplateScope
&&
(
this
.
scope
.
custom
=
this
.
options
.
customTemplateScope
)},
parseStepsArray
:
function
(){
this
.
options
.
floor
=
0
,
this
.
options
.
ceil
=
this
.
options
.
stepsArray
.
length
-
1
,
this
.
options
.
step
=
1
,
this
.
options
.
translate
?
this
.
customTrFn
=
this
.
options
.
translate
:
this
.
customTrFn
=
function
(
a
){
return
this
.
options
.
bindIndexForStepsArray
?
this
.
getStepValue
(
a
):
a
},
this
.
getLegend
=
function
(
b
){
var
c
=
this
.
options
.
stepsArray
[
b
];
return
a
.
isObject
(
c
)?
c
.
legend
:
null
}},
resetSlider
:
function
(){
this
.
manageElementsStyle
(),
this
.
addAccessibility
(),
this
.
setMinAndMax
(),
this
.
updateCeilLab
(),
this
.
updateFloorLab
(),
this
.
unbindEvents
(),
this
.
manageEventsBindings
(),
this
.
setDisabledState
(),
this
.
calcViewDimensions
(),
this
.
refocusPointerIfNeeded
()},
refocusPointerIfNeeded
:
function
(){
this
.
currentFocusElement
&&
(
this
.
onPointerFocus
(
this
.
currentFocusElement
.
pointer
,
this
.
currentFocusElement
.
ref
),
this
.
focusElement
(
this
.
currentFocusElement
.
pointer
))},
initElemHandles
:
function
(){
a
.
forEach
(
this
.
sliderElem
.
children
(),
function
(
b
,
c
){
var
d
=
a
.
element
(
b
);
switch
(
c
){
case
0
:
this
.
fullBar
=
d
;
break
;
case
1
:
this
.
selBar
=
d
;
break
;
case
2
:
this
.
minH
=
d
;
break
;
case
3
:
this
.
maxH
=
d
;
break
;
case
4
:
this
.
flrLab
=
d
;
break
;
case
5
:
this
.
ceilLab
=
d
;
break
;
case
6
:
this
.
minLab
=
d
;
break
;
case
7
:
this
.
maxLab
=
d
;
break
;
case
8
:
this
.
cmbLab
=
d
;
break
;
case
9
:
this
.
ticks
=
d
}},
this
),
this
.
selBar
.
rzsp
=
0
,
this
.
minH
.
rzsp
=
0
,
this
.
maxH
.
rzsp
=
0
,
this
.
flrLab
.
rzsp
=
0
,
this
.
ceilLab
.
rzsp
=
0
,
this
.
minLab
.
rzsp
=
0
,
this
.
maxLab
.
rzsp
=
0
,
this
.
cmbLab
.
rzsp
=
0
},
manageElementsStyle
:
function
(){
this
.
range
?
this
.
maxH
.
css
(
"display"
,
""
):
this
.
maxH
.
css
(
"display"
,
"none"
),
this
.
alwaysHide
(
this
.
flrLab
,
this
.
options
.
showTicksValues
||
this
.
options
.
hideLimitLabels
),
this
.
alwaysHide
(
this
.
ceilLab
,
this
.
options
.
showTicksValues
||
this
.
options
.
hideLimitLabels
);
var
a
=
this
.
options
.
showTicksValues
&&!
this
.
intermediateTicks
;
this
.
alwaysHide
(
this
.
minLab
,
a
||
this
.
options
.
hidePointerLabels
),
this
.
alwaysHide
(
this
.
maxLab
,
a
||!
this
.
range
||
this
.
options
.
hidePointerLabels
),
this
.
alwaysHide
(
this
.
cmbLab
,
a
||!
this
.
range
||
this
.
options
.
hidePointerLabels
),
this
.
alwaysHide
(
this
.
selBar
,
!
this
.
range
&&!
this
.
options
.
showSelectionBar
),
this
.
options
.
vertical
&&
this
.
sliderElem
.
addClass
(
"rz-vertical"
),
this
.
options
.
draggableRange
?
this
.
selBar
.
addClass
(
"rz-draggable"
):
this
.
selBar
.
removeClass
(
"rz-draggable"
),
this
.
intermediateTicks
&&
this
.
options
.
showTicksValues
&&
this
.
ticks
.
addClass
(
"rz-ticks-values-under"
)},
alwaysHide
:
function
(
a
,
b
){
a
.
rzAlwaysHide
=
b
,
b
?
this
.
hideEl
(
a
):
this
.
showEl
(
a
)},
manageEventsBindings
:
function
(){
this
.
options
.
disabled
||
this
.
options
.
readOnly
?
this
.
unbindEvents
():
this
.
bindEvents
()},
setDisabledState
:
function
(){
this
.
options
.
disabled
?
this
.
sliderElem
.
attr
(
"disabled"
,
"disabled"
):
this
.
sliderElem
.
attr
(
"disabled"
,
null
)},
resetLabelsValue
:
function
(){
this
.
minLab
.
rzsv
=
void
0
,
this
.
maxLab
.
rzsv
=
void
0
},
initHandles
:
function
(){
this
.
updateLowHandle
(
this
.
valueToPosition
(
this
.
lowValue
)),
this
.
range
&&
this
.
updateHighHandle
(
this
.
valueToPosition
(
this
.
highValue
)),
this
.
updateSelectionBar
(),
this
.
range
&&
this
.
updateCmbLabel
(),
this
.
updateTicksScale
()},
translateFn
:
function
(
a
,
b
,
c
,
d
){
d
=
void
0
===
d
?
!
0
:
d
;
var
e
=
""
,
f
=!
1
,
g
=
b
.
hasClass
(
"no-label-injection"
);
d
?(
this
.
options
.
stepsArray
&&!
this
.
options
.
bindIndexForStepsArray
&&
(
a
=
this
.
getStepValue
(
a
)),
e
=
String
(
this
.
customTrFn
(
a
,
this
.
options
.
id
,
c
))):
e
=
String
(
a
),(
void
0
===
b
.
rzsv
||
b
.
rzsv
.
length
!==
e
.
length
||
b
.
rzsv
.
length
>
0
&&
0
===
b
.
rzsd
)
&&
(
f
=!
0
,
b
.
rzsv
=
e
),
g
||
b
.
html
(
e
),
this
.
scope
[
c
+
"Label"
]
=
e
,
f
&&
this
.
getDimension
(
b
)},
setMinAndMax
:
function
(){
if
(
this
.
step
=+
this
.
options
.
step
,
this
.
precision
=+
this
.
options
.
precision
,
this
.
minValue
=
this
.
options
.
floor
,
this
.
options
.
logScale
&&
0
===
this
.
minValue
)
throw
Error
(
"Can't use floor=0 with logarithmic scale"
);
this
.
options
.
enforceStep
&&
(
this
.
lowValue
=
this
.
roundStep
(
this
.
lowValue
),
this
.
range
&&
(
this
.
highValue
=
this
.
roundStep
(
this
.
highValue
))),
null
!=
this
.
options
.
ceil
?
this
.
maxValue
=
this
.
options
.
ceil
:
this
.
maxValue
=
this
.
options
.
ceil
=
this
.
range
?
this
.
highValue
:
this
.
lowValue
,
this
.
options
.
enforceRange
&&
(
this
.
lowValue
=
this
.
sanitizeValue
(
this
.
lowValue
),
this
.
range
&&
(
this
.
highValue
=
this
.
sanitizeValue
(
this
.
highValue
))),
this
.
applyLowValue
(),
this
.
range
&&
this
.
applyHighValue
(),
this
.
valueRange
=
this
.
maxValue
-
this
.
minValue
},
addAccessibility
:
function
(){
this
.
minH
.
attr
(
"role"
,
"slider"
),
this
.
updateAriaAttributes
(),
!
this
.
options
.
keyboardSupport
||
this
.
options
.
readOnly
||
this
.
options
.
disabled
?
this
.
minH
.
attr
(
"tabindex"
,
""
):
this
.
minH
.
attr
(
"tabindex"
,
"0"
),
this
.
options
.
vertical
&&
this
.
minH
.
attr
(
"aria-orientation"
,
"vertical"
),
this
.
options
.
ariaLabel
?
this
.
minH
.
attr
(
"aria-label"
,
this
.
options
.
ariaLabel
):
this
.
options
.
ariaLabelledBy
&&
this
.
minH
.
attr
(
"aria-labelledby"
,
this
.
options
.
ariaLabelledBy
),
this
.
range
&&
(
this
.
maxH
.
attr
(
"role"
,
"slider"
),
!
this
.
options
.
keyboardSupport
||
this
.
options
.
readOnly
||
this
.
options
.
disabled
?
this
.
maxH
.
attr
(
"tabindex"
,
""
):
this
.
maxH
.
attr
(
"tabindex"
,
"0"
),
this
.
options
.
vertical
&&
this
.
maxH
.
attr
(
"aria-orientation"
,
"vertical"
),
this
.
options
.
ariaLabelHigh
?
this
.
maxH
.
attr
(
"aria-label"
,
this
.
options
.
ariaLabelHigh
):
this
.
options
.
ariaLabelledByHigh
&&
this
.
maxH
.
attr
(
"aria-labelledby"
,
this
.
options
.
ariaLabelledByHigh
))},
updateAriaAttributes
:
function
(){
this
.
minH
.
attr
({
"aria-valuenow"
:
this
.
scope
.
rzSliderModel
,
"aria-valuetext"
:
this
.
customTrFn
(
this
.
scope
.
rzSliderModel
,
this
.
options
.
id
,
"model"
),
"aria-valuemin"
:
this
.
minValue
,
"aria-valuemax"
:
this
.
maxValue
}),
this
.
range
&&
this
.
maxH
.
attr
({
"aria-valuenow"
:
this
.
scope
.
rzSliderHigh
,
"aria-valuetext"
:
this
.
customTrFn
(
this
.
scope
.
rzSliderHigh
,
this
.
options
.
id
,
"high"
),
"aria-valuemin"
:
this
.
minValue
,
"aria-valuemax"
:
this
.
maxValue
})},
calcViewDimensions
:
function
(){
var
a
=
this
.
getDimension
(
this
.
minH
);
if
(
this
.
handleHalfDim
=
a
/
2
,
this
.
barDimension
=
this
.
getDimension
(
this
.
fullBar
),
this
.
maxPos
=
this
.
barDimension
-
a
,
this
.
getDimension
(
this
.
sliderElem
),
this
.
sliderElem
.
rzsp
=
this
.
sliderElem
[
0
].
getBoundingClientRect
()[
this
.
positionProperty
],
this
.
initHasRun
){
this
.
updateFloorLab
(),
this
.
updateCeilLab
(),
this
.
initHandles
();
var
c
=
this
;
b
(
function
(){
c
.
updateTicksScale
()})}},
updateTicksScale
:
function
(){
if
(
this
.
options
.
showTicks
){
var
a
=
this
.
options
.
ticksArray
||
this
.
getTicksArray
(),
b
=
this
.
options
.
vertical
?
"translateY"
:
"translateX"
,
c
=
this
;
this
.
options
.
rightToLeft
&&
a
.
reverse
(),
this
.
scope
.
ticks
=
a
.
map
(
function
(
a
){
var
d
=
c
.
valueToPosition
(
a
);
c
.
options
.
vertical
&&
(
d
=
c
.
maxPos
-
d
);
var
e
=
b
+
"("
+
Math
.
round
(
d
)
+
"px)"
,
f
=
{
selected
:
c
.
isTickSelected
(
a
),
style
:{
"-webkit-transform"
:
e
,
"-moz-transform"
:
e
,
"-o-transform"
:
e
,
"-ms-transform"
:
e
,
transform
:
e
}};
if
(
f
.
selected
&&
c
.
options
.
getSelectionBarColor
&&
(
f
.
style
[
"background-color"
]
=
c
.
getSelectionBarColor
()),
!
f
.
selected
&&
c
.
options
.
getTickColor
&&
(
f
.
style
[
"background-color"
]
=
c
.
getTickColor
(
a
)),
c
.
options
.
ticksTooltip
&&
(
f
.
tooltip
=
c
.
options
.
ticksTooltip
(
a
),
f
.
tooltipPlacement
=
c
.
options
.
vertical
?
"right"
:
"top"
),
c
.
options
.
showTicksValues
&&
(
f
.
value
=
c
.
getDisplayValue
(
a
,
"tick-value"
),
c
.
options
.
ticksValuesTooltip
&&
(
f
.
valueTooltip
=
c
.
options
.
ticksValuesTooltip
(
a
),
f
.
valueTooltipPlacement
=
c
.
options
.
vertical
?
"right"
:
"top"
)),
c
.
getLegend
){
var
g
=
c
.
getLegend
(
a
,
c
.
options
.
id
);
g
&&
(
f
.
legend
=
g
)}
return
f
})}},
getTicksArray
:
function
(){
var
a
=
this
.
step
,
b
=
[];
this
.
intermediateTicks
&&
(
a
=
this
.
options
.
showTicks
);
for
(
var
c
=
this
.
minValue
;
c
<=
this
.
maxValue
;
c
+=
a
)
b
.
push
(
c
);
return
b
},
isTickSelected
:
function
(
a
){
if
(
!
this
.
range
)
if
(
null
!==
this
.
options
.
showSelectionBarFromValue
){
var
b
=
this
.
options
.
showSelectionBarFromValue
;
if
(
this
.
lowValue
>
b
&&
a
>=
b
&&
a
<=
this
.
lowValue
)
return
!
0
;
if
(
this
.
lowValue
<
b
&&
b
>=
a
&&
a
>=
this
.
lowValue
)
return
!
0
}
else
if
(
this
.
options
.
showSelectionBarEnd
){
if
(
a
>=
this
.
lowValue
)
return
!
0
}
else
if
(
this
.
options
.
showSelectionBar
&&
a
<=
this
.
lowValue
)
return
!
0
;
return
this
.
range
&&
a
>=
this
.
lowValue
&&
a
<=
this
.
highValue
?
!
0
:
!
1
},
updateFloorLab
:
function
(){
this
.
translateFn
(
this
.
minValue
,
this
.
flrLab
,
"floor"
),
this
.
getDimension
(
this
.
flrLab
);
var
a
=
this
.
options
.
rightToLeft
?
this
.
barDimension
-
this
.
flrLab
.
rzsd
:
0
;
this
.
setPosition
(
this
.
flrLab
,
a
)},
updateCeilLab
:
function
(){
this
.
translateFn
(
this
.
maxValue
,
this
.
ceilLab
,
"ceil"
),
this
.
getDimension
(
this
.
ceilLab
);
var
a
=
this
.
options
.
rightToLeft
?
0
:
this
.
barDimension
-
this
.
ceilLab
.
rzsd
;
this
.
setPosition
(
this
.
ceilLab
,
a
)},
updateHandles
:
function
(
a
,
b
){
"lowValue"
===
a
?
this
.
updateLowHandle
(
b
):
this
.
updateHighHandle
(
b
),
this
.
updateSelectionBar
(),
this
.
updateTicksScale
(),
this
.
range
&&
this
.
updateCmbLabel
()},
getHandleLabelPos
:
function
(
a
,
b
){
var
c
=
this
[
a
].
rzsd
,
d
=
b
-
c
/
2
+
this
.
handleHalfDim
,
e
=
this
.
barDimension
-
c
;
return
this
.
options
.
boundPointerLabels
?
this
.
options
.
rightToLeft
&&
"minLab"
===
a
||!
this
.
options
.
rightToLeft
&&
"maxLab"
===
a
?
Math
.
min
(
d
,
e
):
Math
.
min
(
Math
.
max
(
d
,
0
),
e
):
d
},
updateLowHandle
:
function
(
a
){
if
(
this
.
setPosition
(
this
.
minH
,
a
),
this
.
translateFn
(
this
.
lowValue
,
this
.
minLab
,
"model"
),
this
.
setPosition
(
this
.
minLab
,
this
.
getHandleLabelPos
(
"minLab"
,
a
)),
this
.
options
.
getPointerColor
){
var
b
=
this
.
getPointerColor
(
"min"
);
this
.
scope
.
minPointerStyle
=
{
backgroundColor
:
b
}}
this
.
options
.
autoHideLimitLabels
&&
this
.
shFloorCeil
()},
updateHighHandle
:
function
(
a
){
if
(
this
.
setPosition
(
this
.
maxH
,
a
),
this
.
translateFn
(
this
.
highValue
,
this
.
maxLab
,
"high"
),
this
.
setPosition
(
this
.
maxLab
,
this
.
getHandleLabelPos
(
"maxLab"
,
a
)),
this
.
options
.
getPointerColor
){
var
b
=
this
.
getPointerColor
(
"max"
);
this
.
scope
.
maxPointerStyle
=
{
backgroundColor
:
b
}}
this
.
options
.
autoHideLimitLabels
&&
this
.
shFloorCeil
()},
shFloorCeil
:
function
(){
if
(
!
this
.
options
.
hidePointerLabels
){
var
a
=!
1
,
b
=!
1
,
c
=
this
.
isLabelBelowFloorLab
(
this
.
minLab
),
d
=
this
.
isLabelAboveCeilLab
(
this
.
minLab
),
e
=
this
.
isLabelAboveCeilLab
(
this
.
maxLab
),
f
=
this
.
isLabelBelowFloorLab
(
this
.
cmbLab
),
g
=
this
.
isLabelAboveCeilLab
(
this
.
cmbLab
);
if
(
c
?(
a
=!
0
,
this
.
hideEl
(
this
.
flrLab
)):(
a
=!
1
,
this
.
showEl
(
this
.
flrLab
)),
d
?(
b
=!
0
,
this
.
hideEl
(
this
.
ceilLab
)):(
b
=!
1
,
this
.
showEl
(
this
.
ceilLab
)),
this
.
range
){
var
h
=
this
.
cmbLabelShown
?
g
:
e
,
i
=
this
.
cmbLabelShown
?
f
:
c
;
h
?
this
.
hideEl
(
this
.
ceilLab
):
b
||
this
.
showEl
(
this
.
ceilLab
),
i
?
this
.
hideEl
(
this
.
flrLab
):
a
||
this
.
showEl
(
this
.
flrLab
)}}},
isLabelBelowFloorLab
:
function
(
a
){
var
b
=
this
.
options
.
rightToLeft
,
c
=
a
.
rzsp
,
d
=
a
.
rzsd
,
e
=
this
.
flrLab
.
rzsp
,
f
=
this
.
flrLab
.
rzsd
;
return
b
?
c
+
d
>=
e
-
2
:
e
+
f
+
2
>=
c
},
isLabelAboveCeilLab
:
function
(
a
){
var
b
=
this
.
options
.
rightToLeft
,
c
=
a
.
rzsp
,
d
=
a
.
rzsd
,
e
=
this
.
ceilLab
.
rzsp
,
f
=
this
.
ceilLab
.
rzsd
;
return
b
?
e
+
f
+
2
>=
c
:
c
+
d
>=
e
-
2
},
updateSelectionBar
:
function
(){
var
a
=
0
,
b
=
0
,
c
=
this
.
options
.
rightToLeft
?
!
this
.
options
.
showSelectionBarEnd
:
this
.
options
.
showSelectionBarEnd
,
d
=
this
.
options
.
rightToLeft
?
this
.
maxH
.
rzsp
+
this
.
handleHalfDim
:
this
.
minH
.
rzsp
+
this
.
handleHalfDim
;
if
(
this
.
range
)
b
=
Math
.
abs
(
this
.
maxH
.
rzsp
-
this
.
minH
.
rzsp
),
a
=
d
;
else
if
(
null
!==
this
.
options
.
showSelectionBarFromValue
){
var
e
=
this
.
options
.
showSelectionBarFromValue
,
f
=
this
.
valueToPosition
(
e
),
g
=
this
.
options
.
rightToLeft
?
this
.
lowValue
<=
e
:
this
.
lowValue
>
e
;
g
?(
b
=
this
.
minH
.
rzsp
-
f
,
a
=
f
+
this
.
handleHalfDim
):(
b
=
f
-
this
.
minH
.
rzsp
,
a
=
this
.
minH
.
rzsp
+
this
.
handleHalfDim
)}
else
c
?(
b
=
Math
.
abs
(
this
.
maxPos
-
this
.
minH
.
rzsp
)
+
this
.
handleHalfDim
,
a
=
this
.
minH
.
rzsp
+
this
.
handleHalfDim
):(
b
=
this
.
minH
.
rzsp
+
this
.
handleHalfDim
,
a
=
0
);
if
(
this
.
setDimension
(
this
.
selBar
,
b
),
this
.
setPosition
(
this
.
selBar
,
a
),
this
.
options
.
getSelectionBarColor
){
var
h
=
this
.
getSelectionBarColor
();
this
.
scope
.
barStyle
=
{
backgroundColor
:
h
}}
else
if
(
this
.
options
.
selectionBarGradient
){
var
i
=
null
!==
this
.
options
.
showSelectionBarFromValue
?
this
.
valueToPosition
(
this
.
options
.
showSelectionBarFromValue
):
0
,
j
=
i
-
a
>
0
^
c
,
k
=
this
.
options
.
vertical
?
j
?
"bottom"
:
"top"
:
j
?
"left"
:
"right"
;
this
.
scope
.
barStyle
=
{
backgroundImage
:
"linear-gradient(to "
+
k
+
", "
+
this
.
options
.
selectionBarGradient
.
from
+
" 0%,"
+
this
.
options
.
selectionBarGradient
.
to
+
" 100%)"
},
this
.
options
.
vertical
?(
this
.
scope
.
barStyle
.
backgroundPosition
=
"center "
+
(
i
+
b
+
a
+
(
j
?
-
this
.
handleHalfDim
:
0
))
+
"px"
,
this
.
scope
.
barStyle
.
backgroundSize
=
"100% "
+
(
this
.
barDimension
-
this
.
handleHalfDim
)
+
"px"
):(
this
.
scope
.
barStyle
.
backgroundPosition
=
i
-
a
+
(
j
?
this
.
handleHalfDim
:
0
)
+
"px center"
,
this
.
scope
.
barStyle
.
backgroundSize
=
this
.
barDimension
-
this
.
handleHalfDim
+
"px 100%"
)}},
getSelectionBarColor
:
function
(){
return
this
.
range
?
this
.
options
.
getSelectionBarColor
(
this
.
scope
.
rzSliderModel
,
this
.
scope
.
rzSliderHigh
):
this
.
options
.
getSelectionBarColor
(
this
.
scope
.
rzSliderModel
)},
getPointerColor
:
function
(
a
){
return
"max"
===
a
?
this
.
options
.
getPointerColor
(
this
.
scope
.
rzSliderHigh
,
a
):
this
.
options
.
getPointerColor
(
this
.
scope
.
rzSliderModel
,
a
)},
getTickColor
:
function
(
a
){
return
this
.
options
.
getTickColor
(
a
)},
updateCmbLabel
:
function
(){
var
a
=
null
;
if
(
a
=
this
.
options
.
rightToLeft
?
this
.
minLab
.
rzsp
-
this
.
minLab
.
rzsd
-
10
<=
this
.
maxLab
.
rzsp
:
this
.
minLab
.
rzsp
+
this
.
minLab
.
rzsd
+
10
>=
this
.
maxLab
.
rzsp
){
var
b
=
this
.
getDisplayValue
(
this
.
lowValue
,
"model"
),
c
=
this
.
getDisplayValue
(
this
.
highValue
,
"high"
),
d
=
""
;
d
=
this
.
options
.
mergeRangeLabelsIfSame
&&
b
===
c
?
b
:
this
.
options
.
rightToLeft
?
c
+
" - "
+
b
:
b
+
" - "
+
c
,
this
.
translateFn
(
d
,
this
.
cmbLab
,
"cmb"
,
!
1
);
var
e
=
this
.
options
.
boundPointerLabels
?
Math
.
min
(
Math
.
max
(
this
.
selBar
.
rzsp
+
this
.
selBar
.
rzsd
/
2
-
this
.
cmbLab
.
rzsd
/
2
,
0
),
this
.
barDimension
-
this
.
cmbLab
.
rzsd
):
this
.
selBar
.
rzsp
+
this
.
selBar
.
rzsd
/
2
-
this
.
cmbLab
.
rzsd
/
2
;
this
.
setPosition
(
this
.
cmbLab
,
e
),
this
.
cmbLabelShown
=!
0
,
this
.
hideEl
(
this
.
minLab
),
this
.
hideEl
(
this
.
maxLab
),
this
.
showEl
(
this
.
cmbLab
)}
else
this
.
cmbLabelShown
=!
1
,
this
.
updateHighHandle
(
this
.
valueToPosition
(
this
.
highValue
)),
this
.
updateLowHandle
(
this
.
valueToPosition
(
this
.
lowValue
)),
this
.
showEl
(
this
.
maxLab
),
this
.
showEl
(
this
.
minLab
),
this
.
hideEl
(
this
.
cmbLab
);
this
.
options
.
autoHideLimitLabels
&&
this
.
shFloorCeil
()},
getDisplayValue
:
function
(
a
,
b
){
return
this
.
options
.
stepsArray
&&!
this
.
options
.
bindIndexForStepsArray
&&
(
a
=
this
.
getStepValue
(
a
)),
this
.
customTrFn
(
a
,
this
.
options
.
id
,
b
)},
roundStep
:
function
(
a
,
b
){
var
c
=
b
?
b
:
this
.
step
,
d
=
parseFloat
((
a
-
this
.
minValue
)
/
c
).
toPrecision
(
12
);
d
=
Math
.
round
(
+
d
)
*
c
;
var
e
=
(
this
.
minValue
+
d
).
toFixed
(
this
.
precision
);
return
+
e
},
hideEl
:
function
(
a
){
return
a
.
css
({
visibility
:
"hidden"
})},
showEl
:
function
(
a
){
return
a
.
rzAlwaysHide
?
a
:
a
.
css
({
visibility
:
"visible"
})},
setPosition
:
function
(
a
,
b
){
a
.
rzsp
=
b
;
var
c
=
{};
return
c
[
this
.
positionProperty
]
=
Math
.
round
(
b
)
+
"px"
,
a
.
css
(
c
),
b
},
getDimension
:
function
(
a
){
var
b
=
a
[
0
].
getBoundingClientRect
();
return
this
.
options
.
vertical
?
a
.
rzsd
=
(
b
.
bottom
-
b
.
top
)
*
this
.
options
.
scale
:
a
.
rzsd
=
(
b
.
right
-
b
.
left
)
*
this
.
options
.
scale
,
a
.
rzsd
},
setDimension
:
function
(
a
,
b
){
a
.
rzsd
=
b
;
var
c
=
{};
return
c
[
this
.
dimensionProperty
]
=
Math
.
round
(
b
)
+
"px"
,
a
.
css
(
c
),
b
},
sanitizeValue
:
function
(
a
){
return
Math
.
min
(
Math
.
max
(
a
,
this
.
minValue
),
this
.
maxValue
)},
valueToPosition
:
function
(
a
){
var
b
=
this
.
linearValueToPosition
;
this
.
options
.
customValueToPosition
?
b
=
this
.
options
.
customValueToPosition
:
this
.
options
.
logScale
&&
(
b
=
this
.
logValueToPosition
),
a
=
this
.
sanitizeValue
(
a
);
var
c
=
b
(
a
,
this
.
minValue
,
this
.
maxValue
)
||
0
;
return
this
.
options
.
rightToLeft
&&
(
c
=
1
-
c
),
c
*
this
.
maxPos
},
linearValueToPosition
:
function
(
a
,
b
,
c
){
var
d
=
c
-
b
;
return
(
a
-
b
)
/
d
},
logValueToPosition
:
function
(
a
,
b
,
c
){
a
=
Math
.
log
(
a
),
b
=
Math
.
log
(
b
),
c
=
Math
.
log
(
c
);
var
d
=
c
-
b
;
return
(
a
-
b
)
/
d
},
positionToValue
:
function
(
a
){
var
b
=
a
/
this
.
maxPos
;
this
.
options
.
rightToLeft
&&
(
b
=
1
-
b
);
var
c
=
this
.
linearPositionToValue
;
return
this
.
options
.
customPositionToValue
?
c
=
this
.
options
.
customPositionToValue
:
this
.
options
.
logScale
&&
(
c
=
this
.
logPositionToValue
),
c
(
b
,
this
.
minValue
,
this
.
maxValue
)
||
0
},
linearPositionToValue
:
function
(
a
,
b
,
c
){
return
a
*
(
c
-
b
)
+
b
},
logPositionToValue
:
function
(
a
,
b
,
c
){
b
=
Math
.
log
(
b
),
c
=
Math
.
log
(
c
);
var
d
=
a
*
(
c
-
b
)
+
b
;
return
Math
.
exp
(
d
)},
getEventXY
:
function
(
a
,
b
){
var
c
=
this
.
options
.
vertical
?
"clientY"
:
"clientX"
;
if
(
void
0
!==
a
[
c
])
return
a
[
c
];
var
d
=
void
0
===
a
.
originalEvent
?
a
.
touches
:
a
.
originalEvent
.
touches
;
if
(
void
0
!==
b
)
for
(
var
e
=
0
;
e
<
d
.
length
;
e
++
)
if
(
d
[
e
].
identifier
==
b
)
return
d
[
e
][
c
];
return
d
[
0
][
c
]},
getEventPosition
:
function
(
a
,
b
){
var
c
=
this
.
sliderElem
.
rzsp
,
d
=
0
;
return
d
=
this
.
options
.
vertical
?
-
this
.
getEventXY
(
a
,
b
)
+
c
:
this
.
getEventXY
(
a
,
b
)
-
c
,
d
*
this
.
options
.
scale
-
this
.
handleHalfDim
},
getEventNames
:
function
(
a
){
var
b
=
{
moveEvent
:
""
,
endEvent
:
""
};
return
a
.
touches
||
void
0
!==
a
.
originalEvent
&&
a
.
originalEvent
.
touches
?(
b
.
moveEvent
=
"touchmove"
,
b
.
endEvent
=
"touchend"
):(
b
.
moveEvent
=
"mousemove"
,
b
.
endEvent
=
"mouseup"
),
b
},
getNearestHandle
:
function
(
a
){
if
(
!
this
.
range
)
return
this
.
minH
;
var
b
=
this
.
getEventPosition
(
a
),
c
=
Math
.
abs
(
b
-
this
.
minH
.
rzsp
),
d
=
Math
.
abs
(
b
-
this
.
maxH
.
rzsp
);
return
d
>
c
?
this
.
minH
:
c
>
d
?
this
.
maxH
:
this
.
options
.
rightToLeft
?
b
>
this
.
minH
.
rzsp
?
this
.
minH
:
this
.
maxH
:
b
<
this
.
minH
.
rzsp
?
this
.
minH
:
this
.
maxH
},
focusElement
:
function
(
a
){
var
b
=
0
;
a
[
b
].
focus
()},
bindEvents
:
function
(){
var
b
,
c
,
d
;
this
.
options
.
draggableRange
?(
b
=
"rzSliderDrag"
,
c
=
this
.
onDragStart
,
d
=
this
.
onDragMove
):(
b
=
"lowValue"
,
c
=
this
.
onStart
,
d
=
this
.
onMove
),
this
.
options
.
onlyBindHandles
||
(
this
.
selBar
.
on
(
"mousedown"
,
a
.
bind
(
this
,
c
,
null
,
b
)),
this
.
selBar
.
on
(
"mousedown"
,
a
.
bind
(
this
,
d
,
this
.
selBar
))),
this
.
options
.
draggableRangeOnly
?(
this
.
minH
.
on
(
"mousedown"
,
a
.
bind
(
this
,
c
,
null
,
b
)),
this
.
maxH
.
on
(
"mousedown"
,
a
.
bind
(
this
,
c
,
null
,
b
))):(
this
.
minH
.
on
(
"mousedown"
,
a
.
bind
(
this
,
this
.
onStart
,
this
.
minH
,
"lowValue"
)),
this
.
range
&&
this
.
maxH
.
on
(
"mousedown"
,
a
.
bind
(
this
,
this
.
onStart
,
this
.
maxH
,
"highValue"
)),
this
.
options
.
onlyBindHandles
||
(
this
.
fullBar
.
on
(
"mousedown"
,
a
.
bind
(
this
,
this
.
onStart
,
null
,
null
)),
this
.
fullBar
.
on
(
"mousedown"
,
a
.
bind
(
this
,
this
.
onMove
,
this
.
fullBar
)),
this
.
ticks
.
on
(
"mousedown"
,
a
.
bind
(
this
,
this
.
onStart
,
null
,
null
)),
this
.
ticks
.
on
(
"mousedown"
,
a
.
bind
(
this
,
this
.
onTickClick
,
this
.
ticks
)))),
this
.
options
.
onlyBindHandles
||
(
this
.
selBar
.
on
(
"touchstart"
,
a
.
bind
(
this
,
c
,
null
,
b
)),
this
.
selBar
.
on
(
"touchstart"
,
a
.
bind
(
this
,
d
,
this
.
selBar
))),
this
.
options
.
draggableRangeOnly
?(
this
.
minH
.
on
(
"touchstart"
,
a
.
bind
(
this
,
c
,
null
,
b
)),
this
.
maxH
.
on
(
"touchstart"
,
a
.
bind
(
this
,
c
,
null
,
b
))):(
this
.
minH
.
on
(
"touchstart"
,
a
.
bind
(
this
,
this
.
onStart
,
this
.
minH
,
"lowValue"
)),
this
.
range
&&
this
.
maxH
.
on
(
"touchstart"
,
a
.
bind
(
this
,
this
.
onStart
,
this
.
maxH
,
"highValue"
)),
this
.
options
.
onlyBindHandles
||
(
this
.
fullBar
.
on
(
"touchstart"
,
a
.
bind
(
this
,
this
.
onStart
,
null
,
null
)),
this
.
fullBar
.
on
(
"touchstart"
,
a
.
bind
(
this
,
this
.
onMove
,
this
.
fullBar
)),
this
.
ticks
.
on
(
"touchstart"
,
a
.
bind
(
this
,
this
.
onStart
,
null
,
null
)),
this
.
ticks
.
on
(
"touchstart"
,
a
.
bind
(
this
,
this
.
onTickClick
,
this
.
ticks
)))),
this
.
options
.
keyboardSupport
&&
(
this
.
minH
.
on
(
"focus"
,
a
.
bind
(
this
,
this
.
onPointerFocus
,
this
.
minH
,
"lowValue"
)),
this
.
range
&&
this
.
maxH
.
on
(
"focus"
,
a
.
bind
(
this
,
this
.
onPointerFocus
,
this
.
maxH
,
"highValue"
)))},
unbindEvents
:
function
(){
this
.
minH
.
off
(),
this
.
maxH
.
off
(),
this
.
fullBar
.
off
(),
this
.
selBar
.
off
(),
this
.
ticks
.
off
()},
onStart
:
function
(
b
,
d
,
e
){
var
f
,
g
,
h
=
this
.
getEventNames
(
e
);
e
.
stopPropagation
(),
e
.
preventDefault
(),
this
.
calcViewDimensions
(),
b
?
this
.
tracking
=
d
:(
b
=
this
.
getNearestHandle
(
e
),
this
.
tracking
=
b
===
this
.
minH
?
"lowValue"
:
"highValue"
),
b
.
addClass
(
"rz-active"
),
this
.
options
.
keyboardSupport
&&
this
.
focusElement
(
b
),
f
=
a
.
bind
(
this
,
this
.
dragging
.
active
?
this
.
onDragMove
:
this
.
onMove
,
b
),
g
=
a
.
bind
(
this
,
this
.
onEnd
,
f
),
c
.
on
(
h
.
moveEvent
,
f
),
c
.
on
(
h
.
endEvent
,
g
),
this
.
ehEndToBeRemovedOnEnd
=
g
,
this
.
callOnStart
();
var
i
=
void
0
===
e
.
originalEvent
?
e
.
changedTouches
:
e
.
originalEvent
.
changedTouches
;
i
&&
(
this
.
touchId
||
(
this
.
isDragging
=!
0
,
this
.
touchId
=
i
[
0
].
identifier
))},
onMove
:
function
(
b
,
c
,
d
){
var
e
,
f
=
void
0
===
c
.
originalEvent
?
c
.
changedTouches
:
c
.
originalEvent
.
changedTouches
;
if
(
f
)
for
(
var
g
=
0
;
g
<
f
.
length
;
g
++
)
if
(
f
[
g
].
identifier
==
this
.
touchId
){
e
=
f
[
g
];
break
}
if
(
!
f
||
e
){
var
h
,
i
=
this
.
getEventPosition
(
c
,
e
?
e
.
identifier
:
void
0
),
j
=
this
.
options
.
rightToLeft
?
this
.
minValue
:
this
.
maxValue
,
k
=
this
.
options
.
rightToLeft
?
this
.
maxValue
:
this
.
minValue
;
0
>=
i
?
h
=
k
:
i
>=
this
.
maxPos
?
h
=
j
:(
h
=
this
.
positionToValue
(
i
),
h
=
d
&&
a
.
isNumber
(
this
.
options
.
showTicks
)?
this
.
roundStep
(
h
,
this
.
options
.
showTicks
):
this
.
roundStep
(
h
)),
this
.
positionTrackingHandle
(
h
)}},
onEnd
:
function
(
a
,
b
){
var
d
=
void
0
===
b
.
originalEvent
?
b
.
changedTouches
:
b
.
originalEvent
.
changedTouches
;
if
(
!
d
||
d
[
0
].
identifier
==
this
.
touchId
){
this
.
isDragging
=!
1
,
this
.
touchId
=
null
,
c
.
off
(
"touchend"
,
this
.
ehEndToBeRemovedOnEnd
);
var
e
=
this
.
getEventNames
(
b
).
moveEvent
;
this
.
options
.
keyboardSupport
||
(
this
.
minH
.
removeClass
(
"rz-active"
),
this
.
maxH
.
removeClass
(
"rz-active"
),
this
.
tracking
=
""
),
this
.
dragging
.
active
=!
1
,
c
.
off
(
e
,
a
),
this
.
callOnEnd
()}},
onTickClick
:
function
(
a
,
b
){
this
.
onMove
(
a
,
b
,
!
0
)},
onPointerFocus
:
function
(
b
,
c
){
this
.
tracking
=
c
,
b
.
one
(
"blur"
,
a
.
bind
(
this
,
this
.
onPointerBlur
,
b
)),
b
.
on
(
"keydown"
,
a
.
bind
(
this
,
this
.
onKeyboardEvent
)),
b
.
on
(
"keyup"
,
a
.
bind
(
this
,
this
.
onKeyUp
)),
this
.
firstKeyDown
=!
0
,
b
.
addClass
(
"rz-active"
),
this
.
currentFocusElement
=
{
pointer
:
b
,
ref
:
c
}},
onKeyUp
:
function
(){
this
.
firstKeyDown
=!
0
,
this
.
callOnEnd
()},
onPointerBlur
:
function
(
a
){
a
.
off
(
"keydown"
),
a
.
off
(
"keyup"
),
a
.
removeClass
(
"rz-active"
),
this
.
isDragging
||
(
this
.
tracking
=
""
,
this
.
currentFocusElement
=
null
)},
getKeyActions
:
function
(
a
){
var
b
=
a
+
this
.
step
,
c
=
a
-
this
.
step
,
d
=
a
+
this
.
valueRange
/
10
,
e
=
a
-
this
.
valueRange
/
10
,
f
=
{
UP
:
b
,
DOWN
:
c
,
LEFT
:
c
,
RIGHT
:
b
,
PAGEUP
:
d
,
PAGEDOWN
:
e
,
HOME
:
this
.
minValue
,
END
:
this
.
maxValue
};
return
this
.
options
.
rightToLeft
&&
(
f
.
LEFT
=
b
,
f
.
RIGHT
=
c
,
this
.
options
.
vertical
&&
(
f
.
UP
=
c
,
f
.
DOWN
=
b
)),
f
},
onKeyboardEvent
:
function
(
a
){
var
c
=
this
[
this
.
tracking
],
d
=
a
.
keyCode
||
a
.
which
,
e
=
{
38
:
"UP"
,
40
:
"DOWN"
,
37
:
"LEFT"
,
39
:
"RIGHT"
,
33
:
"PAGEUP"
,
34
:
"PAGEDOWN"
,
36
:
"HOME"
,
35
:
"END"
},
f
=
this
.
getKeyActions
(
c
),
g
=
e
[
d
],
h
=
f
[
g
];
if
(
null
!=
h
&&
""
!==
this
.
tracking
){
a
.
preventDefault
(),
this
.
firstKeyDown
&&
(
this
.
firstKeyDown
=!
1
,
this
.
callOnStart
());
var
i
=
this
;
b
(
function
(){
var
a
=
i
.
roundStep
(
i
.
sanitizeValue
(
h
));
if
(
i
.
options
.
draggableRangeOnly
){
var
b
,
c
,
d
=
i
.
highValue
-
i
.
lowValue
;
"lowValue"
===
i
.
tracking
?(
b
=
a
,
c
=
a
+
d
,
c
>
i
.
maxValue
&&
(
c
=
i
.
maxValue
,
b
=
c
-
d
)):(
c
=
a
,
b
=
a
-
d
,
b
<
i
.
minValue
&&
(
b
=
i
.
minValue
,
c
=
b
+
d
)),
i
.
positionTrackingBar
(
b
,
c
)}
else
i
.
positionTrackingHandle
(
a
)})}},
onDragStart
:
function
(
a
,
b
,
c
){
var
d
=
this
.
getEventPosition
(
c
);
this
.
dragging
=
{
active
:
!
0
,
value
:
this
.
positionToValue
(
d
),
difference
:
this
.
highValue
-
this
.
lowValue
,
lowLimit
:
this
.
options
.
rightToLeft
?
this
.
minH
.
rzsp
-
d
:
d
-
this
.
minH
.
rzsp
,
highLimit
:
this
.
options
.
rightToLeft
?
d
-
this
.
maxH
.
rzsp
:
this
.
maxH
.
rzsp
-
d
},
this
.
onStart
(
a
,
b
,
c
)},
getValue
:
function
(
a
,
b
,
c
,
d
){
var
e
=
this
.
options
.
rightToLeft
,
f
=
null
;
return
f
=
"min"
===
a
?
c
?
d
?
e
?
this
.
minValue
:
this
.
maxValue
-
this
.
dragging
.
difference
:
e
?
this
.
maxValue
-
this
.
dragging
.
difference
:
this
.
minValue
:
e
?
this
.
positionToValue
(
b
+
this
.
dragging
.
lowLimit
):
this
.
positionToValue
(
b
-
this
.
dragging
.
lowLimit
):
c
?
d
?
e
?
this
.
minValue
+
this
.
dragging
.
difference
:
this
.
maxValue
:
e
?
this
.
maxValue
:
this
.
minValue
+
this
.
dragging
.
difference
:
e
?
this
.
positionToValue
(
b
+
this
.
dragging
.
lowLimit
)
+
this
.
dragging
.
difference
:
this
.
positionToValue
(
b
-
this
.
dragging
.
lowLimit
)
+
this
.
dragging
.
difference
,
this
.
roundStep
(
f
)},
onDragMove
:
function
(
a
,
b
){
var
c
,
d
,
e
,
f
,
g
,
h
,
i
,
j
,
k
=
this
.
getEventPosition
(
b
);
if
(
this
.
options
.
rightToLeft
?(
e
=
this
.
dragging
.
lowLimit
,
f
=
this
.
dragging
.
highLimit
,
i
=
this
.
maxH
,
j
=
this
.
minH
):(
e
=
this
.
dragging
.
highLimit
,
f
=
this
.
dragging
.
lowLimit
,
i
=
this
.
minH
,
j
=
this
.
maxH
),
g
=
f
>=
k
,
h
=
k
>=
this
.
maxPos
-
e
,
g
){
if
(
0
===
i
.
rzsp
)
return
;
c
=
this
.
getValue
(
"min"
,
k
,
!
0
,
!
1
),
d
=
this
.
getValue
(
"max"
,
k
,
!
0
,
!
1
)}
else
if
(
h
){
if
(
j
.
rzsp
===
this
.
maxPos
)
return
;
d
=
this
.
getValue
(
"max"
,
k
,
!
0
,
!
0
),
c
=
this
.
getValue
(
"min"
,
k
,
!
0
,
!
0
)}
else
c
=
this
.
getValue
(
"min"
,
k
,
!
1
),
d
=
this
.
getValue
(
"max"
,
k
,
!
1
);
this
.
positionTrackingBar
(
c
,
d
)},
positionTrackingBar
:
function
(
a
,
b
){
null
!=
this
.
options
.
minLimit
&&
a
<
this
.
options
.
minLimit
&&
(
a
=
this
.
options
.
minLimit
,
b
=
a
+
this
.
dragging
.
difference
),
null
!=
this
.
options
.
maxLimit
&&
b
>
this
.
options
.
maxLimit
&&
(
b
=
this
.
options
.
maxLimit
,
a
=
b
-
this
.
dragging
.
difference
),
this
.
lowValue
=
a
,
this
.
highValue
=
b
,
this
.
applyLowValue
(),
this
.
range
&&
this
.
applyHighValue
(),
this
.
applyModel
(
!
0
),
this
.
updateHandles
(
"lowValue"
,
this
.
valueToPosition
(
a
)),
this
.
updateHandles
(
"highValue"
,
this
.
valueToPosition
(
b
))},
positionTrackingHandle
:
function
(
a
){
var
b
=!
1
;
a
=
this
.
applyMinMaxLimit
(
a
),
this
.
range
&&
(
this
.
options
.
pushRange
?(
a
=
this
.
applyPushRange
(
a
),
b
=!
0
):(
this
.
options
.
noSwitching
&&
(
"lowValue"
===
this
.
tracking
&&
a
>
this
.
highValue
?
a
=
this
.
applyMinMaxRange
(
this
.
highValue
):
"highValue"
===
this
.
tracking
&&
a
<
this
.
lowValue
&&
(
a
=
this
.
applyMinMaxRange
(
this
.
lowValue
))),
a
=
this
.
applyMinMaxRange
(
a
),
"lowValue"
===
this
.
tracking
&&
a
>
this
.
highValue
?(
this
.
lowValue
=
this
.
highValue
,
this
.
applyLowValue
(),
this
.
applyModel
(),
this
.
updateHandles
(
this
.
tracking
,
this
.
maxH
.
rzsp
),
this
.
updateAriaAttributes
(),
this
.
tracking
=
"highValue"
,
this
.
minH
.
removeClass
(
"rz-active"
),
this
.
maxH
.
addClass
(
"rz-active"
),
this
.
options
.
keyboardSupport
&&
this
.
focusElement
(
this
.
maxH
),
b
=!
0
):
"highValue"
===
this
.
tracking
&&
a
<
this
.
lowValue
&&
(
this
.
highValue
=
this
.
lowValue
,
this
.
applyHighValue
(),
this
.
applyModel
(),
this
.
updateHandles
(
this
.
tracking
,
this
.
minH
.
rzsp
),
this
.
updateAriaAttributes
(),
this
.
tracking
=
"lowValue"
,
this
.
maxH
.
removeClass
(
"rz-active"
),
this
.
minH
.
addClass
(
"rz-active"
),
this
.
options
.
keyboardSupport
&&
this
.
focusElement
(
this
.
minH
),
b
=!
0
))),
this
[
this
.
tracking
]
!==
a
&&
(
this
[
this
.
tracking
]
=
a
,
"lowValue"
===
this
.
tracking
?
this
.
applyLowValue
():
this
.
applyHighValue
(),
this
.
applyModel
(),
this
.
updateHandles
(
this
.
tracking
,
this
.
valueToPosition
(
a
)),
this
.
updateAriaAttributes
(),
b
=!
0
),
b
&&
this
.
applyModel
(
!
0
)},
applyMinMaxLimit
:
function
(
a
){
return
null
!=
this
.
options
.
minLimit
&&
a
<
this
.
options
.
minLimit
?
this
.
options
.
minLimit
:
null
!=
this
.
options
.
maxLimit
&&
a
>
this
.
options
.
maxLimit
?
this
.
options
.
maxLimit
:
a
},
applyMinMaxRange
:
function
(
a
){
var
b
=
"lowValue"
===
this
.
tracking
?
this
.
highValue
:
this
.
lowValue
,
c
=
Math
.
abs
(
a
-
b
);
return
null
!=
this
.
options
.
minRange
&&
c
<
this
.
options
.
minRange
?
"lowValue"
===
this
.
tracking
?
this
.
highValue
-
this
.
options
.
minRange
:
this
.
lowValue
+
this
.
options
.
minRange
:
null
!=
this
.
options
.
maxRange
&&
c
>
this
.
options
.
maxRange
?
"lowValue"
===
this
.
tracking
?
this
.
highValue
-
this
.
options
.
maxRange
:
this
.
lowValue
+
this
.
options
.
maxRange
:
a
},
applyPushRange
:
function
(
a
){
var
b
=
"lowValue"
===
this
.
tracking
?
this
.
highValue
-
a
:
a
-
this
.
lowValue
,
c
=
null
!==
this
.
options
.
minRange
?
this
.
options
.
minRange
:
this
.
options
.
step
,
d
=
this
.
options
.
maxRange
;
return
c
>
b
?(
"lowValue"
===
this
.
tracking
?(
this
.
highValue
=
Math
.
min
(
a
+
c
,
this
.
maxValue
),
a
=
this
.
highValue
-
c
,
this
.
applyHighValue
(),
this
.
updateHandles
(
"highValue"
,
this
.
valueToPosition
(
this
.
highValue
))):(
this
.
lowValue
=
Math
.
max
(
a
-
c
,
this
.
minValue
),
a
=
this
.
lowValue
+
c
,
this
.
applyLowValue
(),
this
.
updateHandles
(
"lowValue"
,
this
.
valueToPosition
(
this
.
lowValue
))),
this
.
updateAriaAttributes
()):
null
!==
d
&&
b
>
d
&&
(
"lowValue"
===
this
.
tracking
?(
this
.
highValue
=
a
+
d
,
this
.
applyHighValue
(),
this
.
updateHandles
(
"highValue"
,
this
.
valueToPosition
(
this
.
highValue
))):(
this
.
lowValue
=
a
-
d
,
this
.
applyLowValue
(),
this
.
updateHandles
(
"lowValue"
,
this
.
valueToPosition
(
this
.
lowValue
))),
this
.
updateAriaAttributes
()),
a
},
applyModel
:
function
(
a
){
this
.
internalChange
=!
0
,
this
.
scope
.
$apply
(),
a
&&
this
.
callOnChange
(),
this
.
internalChange
=!
1
},
callOnStart
:
function
(){
if
(
this
.
options
.
onStart
){
var
a
=
this
,
b
=
"lowValue"
===
this
.
tracking
?
"min"
:
"max"
;
this
.
scope
.
$evalAsync
(
function
(){
a
.
options
.
onStart
(
a
.
options
.
id
,
a
.
scope
.
rzSliderModel
,
a
.
scope
.
rzSliderHigh
,
b
)})}},
callOnChange
:
function
(){
if
(
this
.
options
.
onChange
){
var
a
=
this
,
b
=
"lowValue"
===
this
.
tracking
?
"min"
:
"max"
;
this
.
scope
.
$evalAsync
(
function
(){
a
.
options
.
onChange
(
a
.
options
.
id
,
a
.
scope
.
rzSliderModel
,
a
.
scope
.
rzSliderHigh
,
b
)})}},
callOnEnd
:
function
(){
if
(
this
.
options
.
onEnd
){
var
a
=
this
,
b
=
"lowValue"
===
this
.
tracking
?
"min"
:
"max"
;
this
.
scope
.
$evalAsync
(
function
(){
a
.
options
.
onEnd
(
a
.
options
.
id
,
a
.
scope
.
rzSliderModel
,
a
.
scope
.
rzSliderHigh
,
b
)})}
this
.
scope
.
$emit
(
"slideEnded"
)}},
h
}]).
directive
(
"rzslider"
,[
"RzSlider"
,
function
(
a
){
return
{
restrict
:
"AE"
,
replace
:
!
0
,
scope
:{
rzSliderModel
:
"=?"
,
rzSliderHigh
:
"=?"
,
rzSliderOptions
:
"&?"
,
rzSliderTplUrl
:
"@"
},
templateUrl
:
function
(
a
,
b
){
return
b
.
rzSliderTplUrl
||
"rzSliderTpl.html"
},
link
:
function
(
b
,
c
){
b
.
slider
=
new
a
(
b
,
c
)}}}]);
return
b
.
run
([
"$templateCache"
,
function
(
a
){
a
.
put
(
"rzSliderTpl.html"
,
'<div class=rzslider><span class=rz-bar-wrapper><span class=rz-bar></span></span> <span class=rz-bar-wrapper><span class="rz-bar rz-selection" ng-style=barStyle></span></span> <span class="rz-pointer rz-pointer-min" ng-style=minPointerStyle></span> <span class="rz-pointer rz-pointer-max" ng-style=maxPointerStyle></span> <span class="rz-bubble rz-limit rz-floor"></span> <span class="rz-bubble rz-limit rz-ceil"></span> <span class=rz-bubble></span> <span class=rz-bubble></span> <span class=rz-bubble></span><ul ng-show=showTicks class=rz-ticks><li ng-repeat="t in ticks track by $index" class=rz-tick ng-class="{
\'
rz-selected
\'
: t.selected}" ng-style=t.style ng-attr-uib-tooltip="{{ t.tooltip }}" ng-attr-tooltip-placement={{t.tooltipPlacement}} ng-attr-tooltip-append-to-body="{{ t.tooltip ? true : undefined}}"><span ng-if="t.value != null" class=rz-tick-value ng-attr-uib-tooltip="{{ t.valueTooltip }}" ng-attr-tooltip-placement={{t.valueTooltipPlacement}}>{{ t.value }}</span> <span ng-if="t.legend != null" class=rz-tick-legend>{{ t.legend }}</span></li></ul></div>'
)}]),
b
.
name
});
\ No newline at end of file
dist/rzslider.scss
View file @
9bca8ac9
/*! angularjs-slider - v6.1.2 -
(c) Rafal Zajac <rzajac@gmail.com>, Valentin Hervieu <valentin@hervieu.me>, Jussi Saarivirta <jusasi@gmail.com>, Angelin Sirbu <angelin.sirbu@gmail.com> -
https://github.com/angular-slider/angularjs-slider -
2017-05-
1
5 */
2017-05-
2
5 */
.rzslider
{
position
:
relative
;
display
:
inline-block
;
...
...
@@ -257,4 +257,4 @@
bottom
:
auto
;
left
:
auto
;
}
/*# sourceMappingURL=data:application/json;base64,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VixzQkFBc0I7RUFDdEIsaUJBQWlCO0NBQ2xCOztBQUVEO0VBQ0UsT0FBTztFQUNQLFdBQVc7RUFDWCxXQUFXO0VBQ1gsU0FBUztFQUNULGFBQWE7Q0FDZDs7QUFFRDtFQUNFLGlCQUFpQjtFQUNqQixrQkFBa0I7RUFDbEIsdUJBQXVCO0NBQ3hCOztBQUVEO0VBQ0UsVUFBVTtFQUNWLFdBQVc7RUFDWCxzQ0FBOEI7VUFBOUIsOEJBQThCO0NBQy9COztBQUVEO0VBQ0UsVUFBVTtFQUNWLFlBQVk7RUFDWixnQkFBZ0I7RUFDaEIsb0JBQW9CO0VBQ3BCLHNDQUE4QjtVQUE5Qiw4QkFBOEI7Q0FDL0I7O0FBRUQ7RUFDRSxZQUFZO0VBQ1osYUFBYTtFQUNiLFdBQVc7Q0FDWiIsImZpbGUiOiJyenNsaWRlci5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyIvKiEgYW5ndWxhcmpzLXNsaWRlciAtIHY2LjEuMiAtIFxuIChjKSBSYWZhbCBaYWphYyA8cnphamFjQGdtYWlsLmNvbT4sIFZhbGVudGluIEhlcnZpZXUgPHZhbGVudGluQGhlcnZpZXUubWU+LCBKdXNzaSBTYWFyaXZpcnRhIDxqdXNhc2lAZ21haWwuY29tPiwgQW5nZWxpbiBTaXJidSA8YW5nZWxpbi5zaXJidUBnbWFpbC5jb20+IC0gXG4gaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXItc2xpZGVyL2FuZ3VsYXJqcy1zbGlkZXIgLSBcbiAyMDE3LTA1LTE1ICovXG4ucnpzbGlkZXIge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogNHB4O1xuICBtYXJnaW46IDM1cHggMCAxNXB4IDA7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIHVzZXItc2VsZWN0OiBub25lO1xufVxuXG4ucnpzbGlkZXIud2l0aC1sZWdlbmQge1xuICBtYXJnaW4tYm90dG9tOiA0MHB4O1xufVxuXG4ucnpzbGlkZXJbZGlzYWJsZWRdIHtcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbn1cblxuLnJ6c2xpZGVyW2Rpc2FibGVkXSAucnotcG9pbnRlciB7XG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XG4gIGJhY2tncm91bmQtY29sb3I6ICNkOGUwZjM7XG59XG5cbi5yenNsaWRlcltkaXNhYmxlZF0gLnJ6LWRyYWdnYWJsZSB7XG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XG59XG5cbi5yenNsaWRlcltkaXNhYmxlZF0gLnJ6LXNlbGVjdGlvbiB7XG4gIGJhY2tncm91bmQ6ICM4YjkxYTI7XG59XG5cbi5yenNsaWRlcltkaXNhYmxlZF0gLnJ6LXRpY2sge1xuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xufVxuXG4ucnpzbGlkZXJbZGlzYWJsZWRdIC5yei10aWNrLnJ6LXNlbGVjdGVkIHtcbiAgYmFja2dyb3VuZDogIzhiOTFhMjtcbn1cblxuLnJ6c2xpZGVyIHNwYW4ge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbn1cblxuLnJ6c2xpZGVyIC5yei1iYXNlIHtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgcGFkZGluZzogMDtcbn1cblxuLnJ6c2xpZGVyIC5yei1iYXItd3JhcHBlciB7XG4gIGxlZnQ6IDA7XG4gIHotaW5kZXg6IDE7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDMycHg7XG4gIHBhZGRpbmctdG9wOiAxNnB4O1xuICBtYXJnaW4tdG9wOiAtMTZweDtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbn1cblxuLnJ6c2xpZGVyIC5yei1kcmFnZ2FibGUge1xuICBjdXJzb3I6IG1vdmU7XG59XG5cbi5yenNsaWRlciAucnotYmFyIHtcbiAgbGVmdDogMDtcbiAgei1pbmRleDogMTtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogNHB4O1xuICBiYWNrZ3JvdW5kOiAjZDhlMGYzO1xuICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDJweDtcbiAgICAgLW1vei1ib3JkZXItcmFkaXVzOiAycHg7XG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogMnB4O1xufVxuXG4ucnpzbGlkZXIgLnJ6LXNlbGVjdGlvbiB7XG4gIHotaW5kZXg6IDI7XG4gIGJhY2tncm91bmQ6ICMwZGI5ZjA7XG4gIC13ZWJraXQtYm9yZGVyLXJhZGl1czogMnB4O1xuICAgICAtbW96LWJvcmRlci1yYWRpdXM6IDJweDtcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAycHg7XG59XG5cbi5yenNsaWRlciAucnotcG9pbnRlciB7XG4gIHRvcDogLTE0cHg7XG4gIHotaW5kZXg6IDM7XG4gIHdpZHRoOiAzMnB4O1xuICBoZWlnaHQ6IDMycHg7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzBkYjlmMDtcbiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAxNnB4O1xuICAgICAtbW96LWJvcmRlci1yYWRpdXM6IDE2cHg7XG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogMTZweDtcbn1cblxuLnJ6c2xpZGVyIC5yei1wb2ludGVyOmFmdGVyIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDEycHg7XG4gIGxlZnQ6IDEycHg7XG4gIHdpZHRoOiA4cHg7XG4gIGhlaWdodDogOHB4O1xuICBiYWNrZ3JvdW5kOiAjZmZmZmZmO1xuICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDRweDtcbiAgICAgLW1vei1ib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICBjb250ZW50OiAnJztcbn1cblxuLnJ6c2xpZGVyIC5yei1wb2ludGVyOmhvdmVyOmFmdGVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjtcbn1cblxuLnJ6c2xpZGVyIC5yei1wb2ludGVyLnJ6LWFjdGl2ZSB7XG4gIHotaW5kZXg6IDQ7XG59XG5cbi5yenNsaWRlciAucnotcG9pbnRlci5yei1hY3RpdmU6YWZ0ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDUxYWZmO1xufVxuXG4ucnpzbGlkZXIgLnJ6LWJ1YmJsZSB7XG4gIGJvdHRvbTogMTZweDtcbiAgcGFkZGluZzogMXB4IDNweDtcbiAgY29sb3I6ICM1NTYzN2Q7XG4gIGN1cnNvcjogZGVmYXVsdDtcbn1cblxuLnJ6c2xpZGVyIC5yei1idWJibGUucnotbGltaXQge1xuICBjb2xvcjogIzU1NjM3ZDtcbn1cblxuLnJ6c2xpZGVyIC5yei10aWNrcyB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAtM3B4O1xuICBsZWZ0OiAwO1xuICB6LWluZGV4OiAxO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAwO1xuICBtYXJnaW46IDA7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG5cbi5yenNsaWRlciAucnotdGlja3MtdmFsdWVzLXVuZGVyIC5yei10aWNrLXZhbHVlIHtcbiAgdG9wOiBhdXRvO1xuICBib3R0b206IC0zMnB4O1xufVxuXG4ucnpzbGlkZXIgLnJ6LXRpY2sge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgd2lkdGg6IDEwcHg7XG4gIGhlaWdodDogMTBweDtcbiAgbWFyZ2luLWxlZnQ6IDExcHg7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBiYWNrZ3JvdW5kOiAjZDhlMGYzO1xuICBib3JkZXItcmFkaXVzOiA1MCU7XG59XG5cbi5yenNsaWRlciAucnotdGljay5yei1zZWxlY3RlZCB7XG4gIGJhY2tncm91bmQ6ICMwZGI5ZjA7XG59XG5cbi5yenNsaWRlciAucnotdGljay12YWx1ZSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAtMzBweDtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgMCk7XG59XG5cbi5yenNsaWRlciAucnotdGljay1sZWdlbmQge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMjRweDtcbiAgbWF4LXdpZHRoOiA1MHB4O1xuICB3aGl0ZS1zcGFjZTogbm9ybWFsO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAwKTtcbn1cblxuLnJ6c2xpZGVyLnJ6LXZlcnRpY2FsIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB3aWR0aDogNHB4O1xuICBoZWlnaHQ6IDEwMCU7XG4gIHBhZGRpbmc6IDA7XG4gIG1hcmdpbjogMCAyMHB4O1xuICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7XG59XG5cbi5yenNsaWRlci5yei12ZXJ0aWNhbCAucnotYmFzZSB7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIHBhZGRpbmc6IDA7XG59XG5cbi5yenNsaWRlci5yei12ZXJ0aWNhbCAucnotYmFyLXdyYXBwZXIge1xuICB0b3A6IGF1dG87XG4gIGxlZnQ6IDA7XG4gIHdpZHRoOiAzMnB4O1xuICBoZWlnaHQ6IDEwMCU7XG4gIHBhZGRpbmc6IDAgMCAwIDE2cHg7XG4gIG1hcmdpbjogMCAwIDAgLTE2cHg7XG59XG5cbi5yenNsaWRlci5yei12ZXJ0aWNhbCAucnotYmFyIHtcbiAgYm90dG9tOiAwO1xuICBsZWZ0OiBhdXRvO1xuICB3aWR0aDogNHB4O1xuICBoZWlnaHQ6IDEwMCU7XG59XG5cbi5yenNsaWRlci5yei12ZXJ0aWNhbCAucnotcG9pbnRlciB7XG4gIHRvcDogYXV0bztcbiAgYm90dG9tOiAwO1xuICBsZWZ0OiAtMTRweCAhaW1wb3J0YW50O1xufVxuXG4ucnpzbGlkZXIucnotdmVydGljYWwgLnJ6LWJ1YmJsZSB7XG4gIGJvdHRvbTogMDtcbiAgbGVmdDogMTZweCAhaW1wb3J0YW50O1xuICBtYXJnaW4tbGVmdDogM3B4O1xufVxuXG4ucnpzbGlkZXIucnotdmVydGljYWwgLnJ6LXRpY2tzIHtcbiAgdG9wOiAwO1xuICBsZWZ0OiAtM3B4O1xuICB6LWluZGV4OiAxO1xuICB3aWR0aDogMDtcbiAgaGVpZ2h0OiAxMDAlO1xufVxuXG4ucnpzbGlkZXIucnotdmVydGljYWwgLnJ6LXRpY2sge1xuICBtYXJnaW4tdG9wOiAxMXB4O1xuICBtYXJnaW4tbGVmdDogYXV0bztcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cblxuLnJ6c2xpZGVyLnJ6LXZlcnRpY2FsIC5yei10aWNrLXZhbHVlIHtcbiAgdG9wOiBhdXRvO1xuICBsZWZ0OiAyNHB4O1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAtMjglKTtcbn1cblxuLnJ6c2xpZGVyLnJ6LXZlcnRpY2FsIC5yei10aWNrLWxlZ2VuZCB7XG4gIHRvcDogYXV0bztcbiAgcmlnaHQ6IDI0cHg7XG4gIG1heC13aWR0aDogbm9uZTtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgLTI4JSk7XG59XG5cbi5yenNsaWRlci5yei12ZXJ0aWNhbCAucnotdGlja3MtdmFsdWVzLXVuZGVyIC5yei10aWNrLXZhbHVlIHtcbiAgcmlnaHQ6IDI0cHg7XG4gIGJvdHRvbTogYXV0bztcbiAgbGVmdDogYXV0bztcbn0iXX0= */
\ No newline at end of file
/*# sourceMappingURL=data:application/json;base64,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VixzQkFBc0I7RUFDdEIsaUJBQWlCO0NBQ2xCOztBQUVEO0VBQ0UsT0FBTztFQUNQLFdBQVc7RUFDWCxXQUFXO0VBQ1gsU0FBUztFQUNULGFBQWE7Q0FDZDs7QUFFRDtFQUNFLGlCQUFpQjtFQUNqQixrQkFBa0I7RUFDbEIsdUJBQXVCO0NBQ3hCOztBQUVEO0VBQ0UsVUFBVTtFQUNWLFdBQVc7RUFDWCxzQ0FBOEI7VUFBOUIsOEJBQThCO0NBQy9COztBQUVEO0VBQ0UsVUFBVTtFQUNWLFlBQVk7RUFDWixnQkFBZ0I7RUFDaEIsb0JBQW9CO0VBQ3BCLHNDQUE4QjtVQUE5Qiw4QkFBOEI7Q0FDL0I7O0FBRUQ7RUFDRSxZQUFZO0VBQ1osYUFBYTtFQUNiLFdBQVc7Q0FDWiIsImZpbGUiOiJyenNsaWRlci5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyIvKiEgYW5ndWxhcmpzLXNsaWRlciAtIHY2LjEuMiAtIFxyXG4gKGMpIFJhZmFsIFphamFjIDxyemFqYWNAZ21haWwuY29tPiwgVmFsZW50aW4gSGVydmlldSA8dmFsZW50aW5AaGVydmlldS5tZT4sIEp1c3NpIFNhYXJpdmlydGEgPGp1c2FzaUBnbWFpbC5jb20+LCBBbmdlbGluIFNpcmJ1IDxhbmdlbGluLnNpcmJ1QGdtYWlsLmNvbT4gLSBcclxuIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyLXNsaWRlci9hbmd1bGFyanMtc2xpZGVyIC0gXHJcbiAyMDE3LTA1LTI1ICovXHJcbi5yenNsaWRlciB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiA0cHg7XG4gIG1hcmdpbjogMzVweCAwIDE1cHggMDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG59XG5cbi5yenNsaWRlci53aXRoLWxlZ2VuZCB7XG4gIG1hcmdpbi1ib3R0b206IDQwcHg7XG59XG5cbi5yenNsaWRlcltkaXNhYmxlZF0ge1xuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xufVxuXG4ucnpzbGlkZXJbZGlzYWJsZWRdIC5yei1wb2ludGVyIHtcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Q4ZTBmMztcbn1cblxuLnJ6c2xpZGVyW2Rpc2FibGVkXSAucnotZHJhZ2dhYmxlIHtcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbn1cblxuLnJ6c2xpZGVyW2Rpc2FibGVkXSAucnotc2VsZWN0aW9uIHtcbiAgYmFja2dyb3VuZDogIzhiOTFhMjtcbn1cblxuLnJ6c2xpZGVyW2Rpc2FibGVkXSAucnotdGljayB7XG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XG59XG5cbi5yenNsaWRlcltkaXNhYmxlZF0gLnJ6LXRpY2sucnotc2VsZWN0ZWQge1xuICBiYWNrZ3JvdW5kOiAjOGI5MWEyO1xufVxuXG4ucnpzbGlkZXIgc3BhbiB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xufVxuXG4ucnpzbGlkZXIgLnJ6LWJhc2Uge1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBwYWRkaW5nOiAwO1xufVxuXG4ucnpzbGlkZXIgLnJ6LWJhci13cmFwcGVyIHtcbiAgbGVmdDogMDtcbiAgei1pbmRleDogMTtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMzJweDtcbiAgcGFkZGluZy10b3A6IDE2cHg7XG4gIG1hcmdpbi10b3A6IC0xNnB4O1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xufVxuXG4ucnpzbGlkZXIgLnJ6LWRyYWdnYWJsZSB7XG4gIGN1cnNvcjogbW92ZTtcbn1cblxuLnJ6c2xpZGVyIC5yei1iYXIge1xuICBsZWZ0OiAwO1xuICB6LWluZGV4OiAxO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiA0cHg7XG4gIGJhY2tncm91bmQ6ICNkOGUwZjM7XG4gIC13ZWJraXQtYm9yZGVyLXJhZGl1czogMnB4O1xuICAgICAtbW96LWJvcmRlci1yYWRpdXM6IDJweDtcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAycHg7XG59XG5cbi5yenNsaWRlciAucnotc2VsZWN0aW9uIHtcbiAgei1pbmRleDogMjtcbiAgYmFja2dyb3VuZDogIzBkYjlmMDtcbiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAycHg7XG4gICAgIC1tb3otYm9yZGVyLXJhZGl1czogMnB4O1xuICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDJweDtcbn1cblxuLnJ6c2xpZGVyIC5yei1wb2ludGVyIHtcbiAgdG9wOiAtMTRweDtcbiAgei1pbmRleDogMztcbiAgd2lkdGg6IDMycHg7XG4gIGhlaWdodDogMzJweDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMGRiOWYwO1xuICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDE2cHg7XG4gICAgIC1tb3otYm9yZGVyLXJhZGl1czogMTZweDtcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAxNnB4O1xufVxuXG4ucnpzbGlkZXIgLnJ6LXBvaW50ZXI6YWZ0ZXIge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMTJweDtcbiAgbGVmdDogMTJweDtcbiAgd2lkdGg6IDhweDtcbiAgaGVpZ2h0OiA4cHg7XG4gIGJhY2tncm91bmQ6ICNmZmZmZmY7XG4gIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAtbW96LWJvcmRlci1yYWRpdXM6IDRweDtcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gIGNvbnRlbnQ6ICcnO1xufVxuXG4ucnpzbGlkZXIgLnJ6LXBvaW50ZXI6aG92ZXI6YWZ0ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmO1xufVxuXG4ucnpzbGlkZXIgLnJ6LXBvaW50ZXIucnotYWN0aXZlIHtcbiAgei1pbmRleDogNDtcbn1cblxuLnJ6c2xpZGVyIC5yei1wb2ludGVyLnJ6LWFjdGl2ZTphZnRlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM0NTFhZmY7XG59XG5cbi5yenNsaWRlciAucnotYnViYmxlIHtcbiAgYm90dG9tOiAxNnB4O1xuICBwYWRkaW5nOiAxcHggM3B4O1xuICBjb2xvcjogIzU1NjM3ZDtcbiAgY3Vyc29yOiBkZWZhdWx0O1xufVxuXG4ucnpzbGlkZXIgLnJ6LWJ1YmJsZS5yei1saW1pdCB7XG4gIGNvbG9yOiAjNTU2MzdkO1xufVxuXG4ucnpzbGlkZXIgLnJ6LXRpY2tzIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IC0zcHg7XG4gIGxlZnQ6IDA7XG4gIHotaW5kZXg6IDE7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDA7XG4gIG1hcmdpbjogMDtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbn1cblxuLnJ6c2xpZGVyIC5yei10aWNrcy12YWx1ZXMtdW5kZXIgLnJ6LXRpY2stdmFsdWUge1xuICB0b3A6IGF1dG87XG4gIGJvdHRvbTogLTMycHg7XG59XG5cbi5yenNsaWRlciAucnotdGljayB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICB3aWR0aDogMTBweDtcbiAgaGVpZ2h0OiAxMHB4O1xuICBtYXJnaW4tbGVmdDogMTFweDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGJhY2tncm91bmQ6ICNkOGUwZjM7XG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcbn1cblxuLnJ6c2xpZGVyIC5yei10aWNrLnJ6LXNlbGVjdGVkIHtcbiAgYmFja2dyb3VuZDogIzBkYjlmMDtcbn1cblxuLnJ6c2xpZGVyIC5yei10aWNrLXZhbHVlIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IC0zMHB4O1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAwKTtcbn1cblxuLnJ6c2xpZGVyIC5yei10aWNrLWxlZ2VuZCB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAyNHB4O1xuICBtYXgtd2lkdGg6IDUwcHg7XG4gIHdoaXRlLXNwYWNlOiBub3JtYWw7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIDApO1xufVxuXG4ucnpzbGlkZXIucnotdmVydGljYWwge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHdpZHRoOiA0cHg7XG4gIGhlaWdodDogMTAwJTtcbiAgcGFkZGluZzogMDtcbiAgbWFyZ2luOiAwIDIwcHg7XG4gIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTtcbn1cblxuLnJ6c2xpZGVyLnJ6LXZlcnRpY2FsIC5yei1iYXNlIHtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgcGFkZGluZzogMDtcbn1cblxuLnJ6c2xpZGVyLnJ6LXZlcnRpY2FsIC5yei1iYXItd3JhcHBlciB7XG4gIHRvcDogYXV0bztcbiAgbGVmdDogMDtcbiAgd2lkdGg6IDMycHg7XG4gIGhlaWdodDogMTAwJTtcbiAgcGFkZGluZzogMCAwIDAgMTZweDtcbiAgbWFyZ2luOiAwIDAgMCAtMTZweDtcbn1cblxuLnJ6c2xpZGVyLnJ6LXZlcnRpY2FsIC5yei1iYXIge1xuICBib3R0b206IDA7XG4gIGxlZnQ6IGF1dG87XG4gIHdpZHRoOiA0cHg7XG4gIGhlaWdodDogMTAwJTtcbn1cblxuLnJ6c2xpZGVyLnJ6LXZlcnRpY2FsIC5yei1wb2ludGVyIHtcbiAgdG9wOiBhdXRvO1xuICBib3R0b206IDA7XG4gIGxlZnQ6IC0xNHB4ICFpbXBvcnRhbnQ7XG59XG5cbi5yenNsaWRlci5yei12ZXJ0aWNhbCAucnotYnViYmxlIHtcbiAgYm90dG9tOiAwO1xuICBsZWZ0OiAxNnB4ICFpbXBvcnRhbnQ7XG4gIG1hcmdpbi1sZWZ0OiAzcHg7XG59XG5cbi5yenNsaWRlci5yei12ZXJ0aWNhbCAucnotdGlja3Mge1xuICB0b3A6IDA7XG4gIGxlZnQ6IC0zcHg7XG4gIHotaW5kZXg6IDE7XG4gIHdpZHRoOiAwO1xuICBoZWlnaHQ6IDEwMCU7XG59XG5cbi5yenNsaWRlci5yei12ZXJ0aWNhbCAucnotdGljayB7XG4gIG1hcmdpbi10b3A6IDExcHg7XG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuXG4ucnpzbGlkZXIucnotdmVydGljYWwgLnJ6LXRpY2stdmFsdWUge1xuICB0b3A6IGF1dG87XG4gIGxlZnQ6IDI0cHg7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIC0yOCUpO1xufVxuXG4ucnpzbGlkZXIucnotdmVydGljYWwgLnJ6LXRpY2stbGVnZW5kIHtcbiAgdG9wOiBhdXRvO1xuICByaWdodDogMjRweDtcbiAgbWF4LXdpZHRoOiBub25lO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAtMjglKTtcbn1cblxuLnJ6c2xpZGVyLnJ6LXZlcnRpY2FsIC5yei10aWNrcy12YWx1ZXMtdW5kZXIgLnJ6LXRpY2stdmFsdWUge1xuICByaWdodDogMjRweDtcbiAgYm90dG9tOiBhdXRvO1xuICBsZWZ0OiBhdXRvO1xufSJdfQ== */
\ No newline at end of file
src/rzslider.js
View file @
9bca8ac9
...
...
@@ -162,7 +162,7 @@
.
factory
(
'RzSlider'
,
function
(
$timeout
,
$document
,
$window
,
$compile
,
RzSliderOptions
,
rzThrottle
)
{
'use strict'
;
/**
* Slider
*
...
...
@@ -462,7 +462,7 @@
}
return
index
;
},
syncLowValue
:
function
()
{
if
(
this
.
options
.
stepsArray
)
{
if
(
!
this
.
options
.
bindIndexForStepsArray
)
...
...
@@ -1564,32 +1564,46 @@
* Get the X-coordinate or Y-coordinate of an event
*
* @param {Object} event The event
* @param targetTouchId The identifier of the touch with the X/Y coordinates
* @returns {number}
*/
getEventXY
:
function
(
event
)
{
getEventXY
:
function
(
event
,
targetTouchId
)
{
/* http://stackoverflow.com/a/12336075/282882 */
//noinspection JSLint
var
clientXY
=
this
.
options
.
vertical
?
'clientY'
:
'clientX'
;
if
(
event
[
clientXY
]
!==
undefined
)
{
return
event
[
clientXY
];
}
return
event
.
originalEvent
===
undefined
?
event
.
touches
[
0
][
clientXY
]
:
event
.
originalEvent
.
touches
[
0
][
clientXY
];
var
eventXY
;
var
touches
=
event
.
originalEvent
===
undefined
?
event
.
touches
:
event
.
originalEvent
.
touches
;
if
(
targetTouchId
!==
undefined
)
{
for
(
var
i
=
0
;
i
<
touches
.
length
;
i
++
)
{
if
(
touches
[
i
].
identifier
==
targetTouchId
)
{
return
touches
[
i
][
clientXY
];
}
}
}
// If no target touch or the target touch was not found in the event
// returns the coordinates of the first touch
return
touches
[
0
][
clientXY
];
},
/**
* Compute the event position depending on whether the slider is horizontal or vertical
* @param event
* @param targetTouchId If targetTouchId is provided it will be considered the position of that
* @returns {number}
*/
getEventPosition
:
function
(
event
)
{
getEventPosition
:
function
(
event
,
targetTouchId
)
{
var
sliderPos
=
this
.
sliderElem
.
rzsp
,
eventPos
=
0
;
if
(
this
.
options
.
vertical
)
eventPos
=
-
this
.
getEventXY
(
event
)
+
sliderPos
;
eventPos
=
-
this
.
getEventXY
(
event
,
targetTouchId
)
+
sliderPos
;
else
eventPos
=
this
.
getEventXY
(
event
)
-
sliderPos
;
eventPos
=
this
.
getEventXY
(
event
,
targetTouchId
)
-
sliderPos
;
return
eventPos
*
this
.
options
.
scale
-
this
.
handleHalfDim
;
// #346 handleHalfDim is already scaled
},
...
...
@@ -1767,8 +1781,19 @@
ehEnd
=
angular
.
bind
(
this
,
this
.
onEnd
,
ehMove
);
$document
.
on
(
eventNames
.
moveEvent
,
ehMove
);
$document
.
one
(
eventNames
.
endEvent
,
ehEnd
);
$document
.
on
(
eventNames
.
endEvent
,
ehEnd
);
this
.
ehEndToBeRemovedOnEnd
=
ehEnd
;
this
.
callOnStart
();
var
changedTouches
=
event
.
originalEvent
===
undefined
?
event
.
changedTouches
:
event
.
originalEvent
.
changedTouches
;
if
(
changedTouches
)
{
// Store the touch identifier
if
(
!
this
.
touchId
)
{
this
.
isDragging
=
true
;
this
.
touchId
=
changedTouches
[
0
].
identifier
;
}
}
},
/**
...
...
@@ -1780,7 +1805,22 @@
* @returns {undefined}
*/
onMove
:
function
(
pointer
,
event
,
fromTick
)
{
var
newPos
=
this
.
getEventPosition
(
event
),
var
changedTouches
=
event
.
originalEvent
===
undefined
?
event
.
changedTouches
:
event
.
originalEvent
.
changedTouches
;
var
touchForThisSlider
;
if
(
changedTouches
)
{
for
(
var
i
=
0
;
i
<
changedTouches
.
length
;
i
++
)
{
if
(
changedTouches
[
i
].
identifier
==
this
.
touchId
)
{
touchForThisSlider
=
changedTouches
[
i
];
break
;
}
}
}
if
(
changedTouches
&&
!
touchForThisSlider
)
{
return
;
}
var
newPos
=
this
.
getEventPosition
(
event
,
touchForThisSlider
?
touchForThisSlider
.
identifier
:
undefined
),
newValue
,
ceilValue
=
this
.
options
.
rightToLeft
?
this
.
minValue
:
this
.
maxValue
,
flrValue
=
this
.
options
.
rightToLeft
?
this
.
maxValue
:
this
.
minValue
;
...
...
@@ -1798,7 +1838,7 @@
}
this
.
positionTrackingHandle
(
newValue
);
},
/**
* onEnd event handler
*
...
...
@@ -1807,6 +1847,16 @@
* @returns {undefined}
*/
onEnd
:
function
(
ehMove
,
event
)
{
var
changedTouches
=
event
.
originalEvent
===
undefined
?
event
.
changedTouches
:
event
.
originalEvent
.
changedTouches
;
if
(
changedTouches
&&
changedTouches
[
0
].
identifier
!=
this
.
touchId
)
{
return
;
}
this
.
isDragging
=
false
;
this
.
touchId
=
null
;
// Touch event, the listener was added by us so we need to remove it
$document
.
off
(
"touchend"
,
this
.
ehEndToBeRemovedOnEnd
);
var
moveEventName
=
this
.
getEventNames
(
event
).
moveEvent
;
if
(
!
this
.
options
.
keyboardSupport
)
{
...
...
@@ -1846,9 +1896,11 @@
onPointerBlur
:
function
(
pointer
)
{
pointer
.
off
(
'keydown'
);
pointer
.
off
(
'keyup'
);
this
.
tracking
=
''
;
pointer
.
removeClass
(
'rz-active'
);
this
.
currentFocusElement
=
null
if
(
!
this
.
isDragging
)
{
this
.
tracking
=
''
;
this
.
currentFocusElement
=
null
}
},
/**
...
...
tests/specs/helper.js
View file @
9bca8ac9
...
...
@@ -95,7 +95,74 @@
};
$document
.
triggerHandler
(
event
);
};
h
.
fireTouchstartWithOriginalEvent
=
function
(
element
,
position
,
touchIdentifier
,
touchesIds
,
vertical
)
{
var
event
=
{
type
:
'touchstart'
,
originalEvent
:
this
.
getTouchEvent
(
'touchstart'
,
position
,
vertical
,
touchIdentifier
,
touchesIds
,
sinon
.
stub
())};
element
.
triggerHandler
(
event
);
return
event
;
};
h
.
fireTouchstartWithoutOriginalEvent
=
function
(
element
,
position
,
touchIdentifier
,
touchesIds
,
vertical
)
{
var
event
=
this
.
getTouchEvent
(
'touchstart'
,
position
,
vertical
,
touchIdentifier
,
touchesIds
,
sinon
.
stub
());
element
.
triggerHandler
(
event
);
return
event
;
};
h
.
fireTouchmoveWithOriginalEvent
=
function
(
position
,
touchIdentifier
,
touchesIds
,
vertical
)
{
var
event
=
{
type
:
'touchmove'
,
originalEvent
:
this
.
getTouchEvent
(
'touchmove'
,
position
,
vertical
,
touchIdentifier
,
touchesIds
)};
$document
.
triggerHandler
(
event
);
return
event
;
};
h
.
fireTouchmoveWithoutOriginalEvent
=
function
(
position
,
touchIdentifier
,
touchesIds
,
vertical
)
{
var
event
=
this
.
getTouchEvent
(
'touchmove'
,
position
,
vertical
,
touchIdentifier
,
touchesIds
);
$document
.
triggerHandler
(
event
);
return
event
;
};
h
.
fireTouchendWithOriginalEvent
=
function
(
touchIdentifier
,
touchesIds
,
vertical
)
{
var
event
=
{
type
:
'touchend'
,
originalEvent
:
this
.
getTouchEvent
(
'touchend'
,
0
,
vertical
,
touchIdentifier
,
touchesIds
)};
$document
.
triggerHandler
(
event
);
return
event
;
};
h
.
fireTouchendWithoutOriginalEvent
=
function
(
touchIdentifier
,
touchesIds
,
vertical
)
{
var
event
=
this
.
getTouchEvent
(
'touchend'
,
0
,
vertical
,
touchIdentifier
,
touchesIds
);
$document
.
triggerHandler
(
event
);
return
event
;
};
h
.
getTouchEvent
=
function
(
type
,
position
,
vertical
,
changedTouchId
,
touchesIds
,
preventDefaultAndStopPropagation
)
{
var
positionProp
=
vertical
?
'clientY'
:
'clientX'
;
var
changedTouches
=
[{
identifier
:
changedTouchId
}];
changedTouches
[
0
][
positionProp
]
=
position
;
var
touches
=
[];
for
(
var
i
=
0
;
i
<
touchesIds
.
length
;
i
++
)
{
var
touch
=
{
identifier
:
touchesIds
[
i
]};
if
(
touch
.
identifier
==
changedTouchId
)
{
touch
[
positionProp
]
=
position
;
}
touches
.
push
(
touch
);
}
var
originalEvent
=
{
type
:
type
,
preventDefault
:
preventDefaultAndStopPropagation
,
stopPropagation
:
preventDefaultAndStopPropagation
,
changedTouches
:
changedTouches
,
touches
:
touches
};
return
originalEvent
;
}
h
.
pressKeydown
=
function
(
element
,
key
,
options
)
{
options
=
options
||
{};
key
=
key
.
toUpperCase
();
...
...
@@ -129,7 +196,7 @@
h
.
moveMouseToValue
=
function
(
value
)
{
h
.
fireMousemove
(
h
.
getMousePosition
(
value
));
};
return
h
;
});
}());
tests/specs/mouse-controls/single-slider-horizontal-test.js
View file @
9bca8ac9
...
...
@@ -407,5 +407,99 @@
expect
(
helper
.
slider
.
callOnStart
.
callCount
).
to
.
equal
(
1
);
expect
(
helper
.
slider
.
callOnChange
.
callCount
).
to
.
equal
(
1
);
});
it
(
'should handle touch start, touch move and touch end correctly when multitouch with originalEvent'
,
function
()
{
sinon
.
spy
(
helper
.
slider
,
'positionTrackingHandle'
);
sinon
.
spy
(
helper
.
slider
,
'callOnChange'
);
// Touch start for the slider
helper
.
fireTouchstartWithOriginalEvent
(
helper
.
slider
.
minH
,
0
,
0
,
[
0
]);
var
expectedValue
=
50
;
var
touchPositionForSlider
=
helper
.
getMousePosition
(
expectedValue
);
// Touch move for the slider
helper
.
fireTouchmoveWithOriginalEvent
(
touchPositionForSlider
,
0
,
[
0
,
1
]);
// Simultaneous touch move but not on slider
var
otherTouchPosition
=
touchPositionForSlider
+
100
;
helper
.
fireTouchmoveWithOriginalEvent
(
otherTouchPosition
,
1
,
[
0
,
1
]);
// The slider does not react
expect
(
helper
.
scope
.
slider
.
value
).
to
.
equal
(
expectedValue
);
expect
(
helper
.
slider
.
positionTrackingHandle
.
callCount
).
to
.
equal
(
1
);
expect
(
helper
.
slider
.
callOnChange
.
callCount
).
to
.
equal
(
1
);
// The other simultaneous touch ends
helper
.
fireTouchendWithOriginalEvent
(
1
,
[
0
,
1
]);
var
expectedValue
=
60
;
var
touchPositionForSlider
=
helper
.
getMousePosition
(
expectedValue
);
// Touch move for the slider
helper
.
fireTouchmoveWithOriginalEvent
(
touchPositionForSlider
,
0
,
[
0
,
1
]);
// Can still drag the slider
expect
(
helper
.
scope
.
slider
.
value
).
to
.
equal
(
expectedValue
);
expect
(
helper
.
slider
.
positionTrackingHandle
.
callCount
).
to
.
equal
(
2
);
expect
(
helper
.
slider
.
callOnChange
.
callCount
).
to
.
equal
(
2
);
// Slider touch ends
helper
.
fireTouchendWithOriginalEvent
(
0
,
[
0
,
1
]);
// Touch move for the slider
var
touchPositionForSlider
=
helper
.
getMousePosition
(
70
);
helper
.
fireTouchmoveWithOriginalEvent
(
touchPositionForSlider
,
0
,
[
0
,
1
]);
// Can not drag the slider anymore
expect
(
helper
.
scope
.
slider
.
value
).
to
.
equal
(
expectedValue
);
expect
(
helper
.
slider
.
positionTrackingHandle
.
callCount
).
to
.
equal
(
2
);
expect
(
helper
.
slider
.
callOnChange
.
callCount
).
to
.
equal
(
2
);
});
it
(
'should handle touch start, touch move and touch end correctly when multitouch without originalEvent'
,
function
()
{
sinon
.
spy
(
helper
.
slider
,
'positionTrackingHandle'
);
sinon
.
spy
(
helper
.
slider
,
'callOnChange'
);
// Touch start for the slider
var
eventOnSlider
=
helper
.
fireTouchstartWithoutOriginalEvent
(
helper
.
slider
.
minH
,
0
,
0
,
[
0
]);
var
expectedValue
=
50
;
var
touchPositionForSlider
=
helper
.
getMousePosition
(
expectedValue
);
// Touch move for the slider
helper
.
fireTouchmoveWithoutOriginalEvent
(
touchPositionForSlider
,
0
,
[
0
,
1
]);
// Simultaneous touch move but not on slider
var
otherTouchPosition
=
touchPositionForSlider
+
100
;
helper
.
fireTouchmoveWithoutOriginalEvent
(
otherTouchPosition
,
1
,
[
0
,
1
]);
// The slider does not react
expect
(
helper
.
scope
.
slider
.
value
).
to
.
equal
(
expectedValue
);
expect
(
helper
.
slider
.
positionTrackingHandle
.
callCount
).
to
.
equal
(
1
);
expect
(
helper
.
slider
.
callOnChange
.
callCount
).
to
.
equal
(
1
);
// The other simultaneous touch ends
helper
.
fireTouchendWithoutOriginalEvent
(
1
,
[
0
,
1
]);
var
expectedValue
=
60
;
var
touchPositionForSlider
=
helper
.
getMousePosition
(
expectedValue
);
// Touch move for slider
helper
.
fireTouchmoveWithoutOriginalEvent
(
touchPositionForSlider
,
0
,
[
0
,
1
]);
// Can still drag the slider
expect
(
helper
.
scope
.
slider
.
value
).
to
.
equal
(
expectedValue
);
expect
(
helper
.
slider
.
positionTrackingHandle
.
callCount
).
to
.
equal
(
2
);
expect
(
helper
.
slider
.
callOnChange
.
callCount
).
to
.
equal
(
2
);
// Slider touch ends
helper
.
fireTouchendWithoutOriginalEvent
(
0
,
[
0
,
1
]);
// Touch move for the slider
var
touchPositionForSlider
=
helper
.
getMousePosition
(
70
);
helper
.
fireTouchmoveWithoutOriginalEvent
(
touchPositionForSlider
,
0
,
[
0
,
1
]);
// Can not drag the slider anymore
expect
(
helper
.
scope
.
slider
.
value
).
to
.
equal
(
expectedValue
);
expect
(
helper
.
slider
.
positionTrackingHandle
.
callCount
).
to
.
equal
(
2
);
expect
(
helper
.
slider
.
callOnChange
.
callCount
).
to
.
equal
(
2
);
});
});
}());
tests/specs/mouse-controls/single-slider-vertical-test.js
View file @
9bca8ac9
...
...
@@ -414,6 +414,101 @@
expect
(
helper
.
slider
.
callOnStart
.
callCount
).
to
.
equal
(
1
);
expect
(
helper
.
slider
.
callOnChange
.
callCount
).
to
.
equal
(
1
);
});
it
(
'should handle touch start, touch move and touch end correctly when multitouch with originalEvent'
,
function
()
{
sinon
.
spy
(
helper
.
slider
,
'positionTrackingHandle'
);
sinon
.
spy
(
helper
.
slider
,
'callOnChange'
);
// Touch start for the slider
var
eventOnSlider
=
helper
.
fireTouchstartWithOriginalEvent
(
helper
.
slider
.
minH
,
0
,
0
,
[
0
],
true
);
var
expectedValue
=
50
;
var
touchPositionForSlider
=
helper
.
slider
.
sliderElem
.
rzsp
-
helper
.
slider
.
valueToPosition
(
expectedValue
)
-
helper
.
slider
.
handleHalfDim
;
// Touch move for the slider
helper
.
fireTouchmoveWithOriginalEvent
(
touchPositionForSlider
,
0
,
[
0
,
1
],
true
);
// Simultaneous touch move but not on slider
var
otherTouchPosition
=
touchPositionForSlider
+
100
;
helper
.
fireTouchmoveWithOriginalEvent
(
otherTouchPosition
,
1
,
[
0
,
1
],
true
);
// The slider does not react
expect
(
helper
.
scope
.
slider
.
value
).
to
.
equal
(
expectedValue
);
expect
(
helper
.
slider
.
positionTrackingHandle
.
callCount
).
to
.
equal
(
1
);
expect
(
helper
.
slider
.
callOnChange
.
callCount
).
to
.
equal
(
1
);
// The other simultaneous touch ends
helper
.
fireTouchendWithOriginalEvent
(
1
,
[
0
,
1
],
true
);
var
expectedValue
=
60
;
var
touchPositionForSlider
=
helper
.
slider
.
sliderElem
.
rzsp
-
helper
.
slider
.
valueToPosition
(
expectedValue
)
-
helper
.
slider
.
handleHalfDim
;
// Touch move for the slider
helper
.
fireTouchmoveWithOriginalEvent
(
touchPositionForSlider
,
0
,
[
0
,
1
],
true
);
// Can still drag the slider
expect
(
helper
.
scope
.
slider
.
value
).
to
.
equal
(
expectedValue
);
expect
(
helper
.
slider
.
positionTrackingHandle
.
callCount
).
to
.
equal
(
2
);
expect
(
helper
.
slider
.
callOnChange
.
callCount
).
to
.
equal
(
2
);
// Slider touch ends
helper
.
fireTouchendWithOriginalEvent
(
0
,
[
0
,
1
],
true
);
// Touch move for the slider
var
touchPositionForSlider
=
helper
.
slider
.
sliderElem
.
rzsp
-
helper
.
slider
.
valueToPosition
(
70
)
-
helper
.
slider
.
handleHalfDim
;
helper
.
fireTouchmoveWithOriginalEvent
(
touchPositionForSlider
,
0
,
[
0
,
1
],
true
);
//Can not drag the slider anymore
expect
(
helper
.
scope
.
slider
.
value
).
to
.
equal
(
expectedValue
);
expect
(
helper
.
slider
.
positionTrackingHandle
.
callCount
).
to
.
equal
(
2
);
expect
(
helper
.
slider
.
callOnChange
.
callCount
).
to
.
equal
(
2
);
});
it
(
'should handle touch start, touch move and touch end correctly when multitouch without originalEvent'
,
function
()
{
sinon
.
spy
(
helper
.
slider
,
'positionTrackingHandle'
);
sinon
.
spy
(
helper
.
slider
,
'callOnChange'
);
// Touch start for the slider
var
eventOnSlider
=
helper
.
fireTouchstartWithoutOriginalEvent
(
helper
.
slider
.
minH
,
0
,
0
,
[
0
],
true
);
var
expectedValue
=
50
;
var
touchPositionForSlider
=
helper
.
slider
.
sliderElem
.
rzsp
-
helper
.
slider
.
valueToPosition
(
expectedValue
)
-
helper
.
slider
.
handleHalfDim
;
// Touch move for slider
helper
.
fireTouchmoveWithoutOriginalEvent
(
touchPositionForSlider
,
0
,
[
0
,
1
],
true
);
// Simultaneous touch move but not on slider
var
otherTouchPosition
=
touchPositionForSlider
+
100
;
helper
.
fireTouchmoveWithoutOriginalEvent
(
otherTouchPosition
,
1
,
[
0
,
1
],
true
);
// The slider does not react
expect
(
helper
.
scope
.
slider
.
value
).
to
.
equal
(
expectedValue
);
expect
(
helper
.
slider
.
positionTrackingHandle
.
callCount
).
to
.
equal
(
1
);
expect
(
helper
.
slider
.
callOnChange
.
callCount
).
to
.
equal
(
1
);
// The other simultaneous touch ends
helper
.
fireTouchendWithoutOriginalEvent
(
1
,
[
0
,
1
],
true
);
var
expectedValue
=
60
;
var
touchPositionForSlider
=
helper
.
slider
.
sliderElem
.
rzsp
-
helper
.
slider
.
valueToPosition
(
expectedValue
)
-
helper
.
slider
.
handleHalfDim
;
// Touch move for slider
helper
.
fireTouchmoveWithoutOriginalEvent
(
touchPositionForSlider
,
0
,
[
0
,
1
],
true
);
// Can still drag the slider
expect
(
helper
.
scope
.
slider
.
value
).
to
.
equal
(
expectedValue
);
expect
(
helper
.
slider
.
positionTrackingHandle
.
callCount
).
to
.
equal
(
2
);
expect
(
helper
.
slider
.
callOnChange
.
callCount
).
to
.
equal
(
2
);
// Slider touch ends
helper
.
fireTouchendWithoutOriginalEvent
(
0
,
[
0
,
1
],
true
);
// Touch move for the slider
var
touchPositionForSlider
=
helper
.
slider
.
sliderElem
.
rzsp
-
helper
.
slider
.
valueToPosition
(
70
)
-
helper
.
slider
.
handleHalfDim
;
// Can not drag the slider anymore
helper
.
fireTouchmoveWithoutOriginalEvent
(
touchPositionForSlider
,
0
,
[
0
,
1
],
true
);
expect
(
helper
.
scope
.
slider
.
value
).
to
.
equal
(
expectedValue
);
expect
(
helper
.
slider
.
positionTrackingHandle
.
callCount
).
to
.
equal
(
2
);
expect
(
helper
.
slider
.
callOnChange
.
callCount
).
to
.
equal
(
2
);
});
});
}());
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment