From f82aa4c734dc022a84c9e769f688d2647f8716e4 Mon Sep 17 00:00:00 2001 From: adrien <adrien@malingrey.fr> Date: Sun, 26 Sep 2021 01:43:44 +0200 Subject: [PATCH] Materialized --- css/icons.css | 23 + css/materialize.css | 9085 +++++++++++++++ css/style.css | 10 + fonts/flUhRq6tzZclQEJ-Vdg-IuiaDsNc.woff2 | Bin 0 -> 110560 bytes nok.png => img/nok.png | Bin ok.png => img/ok.png | Bin wait.gif => img/wait.gif | Bin index.php | 16 +- js/materialize.js | 12374 +++++++++++++++++++++ script.js => js/script.js | 4 +- siteNetworks.php | 139 +- sitesList.php | 48 +- style.css | 45 - 13 files changed, 21611 insertions(+), 133 deletions(-) create mode 100644 css/icons.css create mode 100644 css/materialize.css create mode 100644 css/style.css create mode 100644 fonts/flUhRq6tzZclQEJ-Vdg-IuiaDsNc.woff2 rename nok.png => img/nok.png (100%) rename ok.png => img/ok.png (100%) rename wait.gif => img/wait.gif (100%) create mode 100644 js/materialize.js rename script.js => js/script.js (81%) delete mode 100644 style.css diff --git a/css/icons.css b/css/icons.css new file mode 100644 index 0000000..5725228 --- /dev/null +++ b/css/icons.css @@ -0,0 +1,23 @@ +/* fallback */ +@font-face { + font-family: 'Material Icons'; + font-style: normal; + font-weight: 400; + src: url(../fonts/flUhRq6tzZclQEJ-Vdg-IuiaDsNc.woff2) format('woff2'); +} + +.material-icons { + font-family: 'Material Icons'; + font-weight: normal; + font-style: normal; + font-size: 24px; + line-height: 1; + letter-spacing: normal; + text-transform: none; + display: inline-block; + white-space: nowrap; + word-wrap: normal; + direction: ltr; + -moz-font-feature-settings: 'liga'; + -moz-osx-font-smoothing: grayscale; +} diff --git a/css/materialize.css b/css/materialize.css new file mode 100644 index 0000000..68bb261 --- /dev/null +++ b/css/materialize.css @@ -0,0 +1,9085 @@ +/*! + * Materialize v1.0.0 (http://materializecss.com) + * Copyright 2014-2017 Materialize + * MIT License (https://raw.githubusercontent.com/Dogfalo/materialize/master/LICENSE) + */ +.materialize-red { + background-color: #e51c23 !important; +} + +.materialize-red-text { + color: #e51c23 !important; +} + +.materialize-red.lighten-5 { + background-color: #fdeaeb !important; +} + +.materialize-red-text.text-lighten-5 { + color: #fdeaeb !important; +} + +.materialize-red.lighten-4 { + background-color: #f8c1c3 !important; +} + +.materialize-red-text.text-lighten-4 { + color: #f8c1c3 !important; +} + +.materialize-red.lighten-3 { + background-color: #f3989b !important; +} + +.materialize-red-text.text-lighten-3 { + color: #f3989b !important; +} + +.materialize-red.lighten-2 { + background-color: #ee6e73 !important; +} + +.materialize-red-text.text-lighten-2 { + color: #ee6e73 !important; +} + +.materialize-red.lighten-1 { + background-color: #ea454b !important; +} + +.materialize-red-text.text-lighten-1 { + color: #ea454b !important; +} + +.materialize-red.darken-1 { + background-color: #d0181e !important; +} + +.materialize-red-text.text-darken-1 { + color: #d0181e !important; +} + +.materialize-red.darken-2 { + background-color: #b9151b !important; +} + +.materialize-red-text.text-darken-2 { + color: #b9151b !important; +} + +.materialize-red.darken-3 { + background-color: #a21318 !important; +} + +.materialize-red-text.text-darken-3 { + color: #a21318 !important; +} + +.materialize-red.darken-4 { + background-color: #8b1014 !important; +} + +.materialize-red-text.text-darken-4 { + color: #8b1014 !important; +} + +.red { + background-color: #F44336 !important; +} + +.red-text { + color: #F44336 !important; +} + +.red.lighten-5 { + background-color: #FFEBEE !important; +} + +.red-text.text-lighten-5 { + color: #FFEBEE !important; +} + +.red.lighten-4 { + background-color: #FFCDD2 !important; +} + +.red-text.text-lighten-4 { + color: #FFCDD2 !important; +} + +.red.lighten-3 { + background-color: #EF9A9A !important; +} + +.red-text.text-lighten-3 { + color: #EF9A9A !important; +} + +.red.lighten-2 { + background-color: #E57373 !important; +} + +.red-text.text-lighten-2 { + color: #E57373 !important; +} + +.red.lighten-1 { + background-color: #EF5350 !important; +} + +.red-text.text-lighten-1 { + color: #EF5350 !important; +} + +.red.darken-1 { + background-color: #E53935 !important; +} + +.red-text.text-darken-1 { + color: #E53935 !important; +} + +.red.darken-2 { + background-color: #D32F2F !important; +} + +.red-text.text-darken-2 { + color: #D32F2F !important; +} + +.red.darken-3 { + background-color: #C62828 !important; +} + +.red-text.text-darken-3 { + color: #C62828 !important; +} + +.red.darken-4 { + background-color: #B71C1C !important; +} + +.red-text.text-darken-4 { + color: #B71C1C !important; +} + +.red.accent-1 { + background-color: #FF8A80 !important; +} + +.red-text.text-accent-1 { + color: #FF8A80 !important; +} + +.red.accent-2 { + background-color: #FF5252 !important; +} + +.red-text.text-accent-2 { + color: #FF5252 !important; +} + +.red.accent-3 { + background-color: #FF1744 !important; +} + +.red-text.text-accent-3 { + color: #FF1744 !important; +} + +.red.accent-4 { + background-color: #D50000 !important; +} + +.red-text.text-accent-4 { + color: #D50000 !important; +} + +.pink { + background-color: #e91e63 !important; +} + +.pink-text { + color: #e91e63 !important; +} + +.pink.lighten-5 { + background-color: #fce4ec !important; +} + +.pink-text.text-lighten-5 { + color: #fce4ec !important; +} + +.pink.lighten-4 { + background-color: #f8bbd0 !important; +} + +.pink-text.text-lighten-4 { + color: #f8bbd0 !important; +} + +.pink.lighten-3 { + background-color: #f48fb1 !important; +} + +.pink-text.text-lighten-3 { + color: #f48fb1 !important; +} + +.pink.lighten-2 { + background-color: #f06292 !important; +} + +.pink-text.text-lighten-2 { + color: #f06292 !important; +} + +.pink.lighten-1 { + background-color: #ec407a !important; +} + +.pink-text.text-lighten-1 { + color: #ec407a !important; +} + +.pink.darken-1 { + background-color: #d81b60 !important; +} + +.pink-text.text-darken-1 { + color: #d81b60 !important; +} + +.pink.darken-2 { + background-color: #c2185b !important; +} + +.pink-text.text-darken-2 { + color: #c2185b !important; +} + +.pink.darken-3 { + background-color: #ad1457 !important; +} + +.pink-text.text-darken-3 { + color: #ad1457 !important; +} + +.pink.darken-4 { + background-color: #880e4f !important; +} + +.pink-text.text-darken-4 { + color: #880e4f !important; +} + +.pink.accent-1 { + background-color: #ff80ab !important; +} + +.pink-text.text-accent-1 { + color: #ff80ab !important; +} + +.pink.accent-2 { + background-color: #ff4081 !important; +} + +.pink-text.text-accent-2 { + color: #ff4081 !important; +} + +.pink.accent-3 { + background-color: #f50057 !important; +} + +.pink-text.text-accent-3 { + color: #f50057 !important; +} + +.pink.accent-4 { + background-color: #c51162 !important; +} + +.pink-text.text-accent-4 { + color: #c51162 !important; +} + +.purple { + background-color: #9c27b0 !important; +} + +.purple-text { + color: #9c27b0 !important; +} + +.purple.lighten-5 { + background-color: #f3e5f5 !important; +} + +.purple-text.text-lighten-5 { + color: #f3e5f5 !important; +} + +.purple.lighten-4 { + background-color: #e1bee7 !important; +} + +.purple-text.text-lighten-4 { + color: #e1bee7 !important; +} + +.purple.lighten-3 { + background-color: #ce93d8 !important; +} + +.purple-text.text-lighten-3 { + color: #ce93d8 !important; +} + +.purple.lighten-2 { + background-color: #ba68c8 !important; +} + +.purple-text.text-lighten-2 { + color: #ba68c8 !important; +} + +.purple.lighten-1 { + background-color: #ab47bc !important; +} + +.purple-text.text-lighten-1 { + color: #ab47bc !important; +} + +.purple.darken-1 { + background-color: #8e24aa !important; +} + +.purple-text.text-darken-1 { + color: #8e24aa !important; +} + +.purple.darken-2 { + background-color: #7b1fa2 !important; +} + +.purple-text.text-darken-2 { + color: #7b1fa2 !important; +} + +.purple.darken-3 { + background-color: #6a1b9a !important; +} + +.purple-text.text-darken-3 { + color: #6a1b9a !important; +} + +.purple.darken-4 { + background-color: #4a148c !important; +} + +.purple-text.text-darken-4 { + color: #4a148c !important; +} + +.purple.accent-1 { + background-color: #ea80fc !important; +} + +.purple-text.text-accent-1 { + color: #ea80fc !important; +} + +.purple.accent-2 { + background-color: #e040fb !important; +} + +.purple-text.text-accent-2 { + color: #e040fb !important; +} + +.purple.accent-3 { + background-color: #d500f9 !important; +} + +.purple-text.text-accent-3 { + color: #d500f9 !important; +} + +.purple.accent-4 { + background-color: #aa00ff !important; +} + +.purple-text.text-accent-4 { + color: #aa00ff !important; +} + +.deep-purple { + background-color: #673ab7 !important; +} + +.deep-purple-text { + color: #673ab7 !important; +} + +.deep-purple.lighten-5 { + background-color: #ede7f6 !important; +} + +.deep-purple-text.text-lighten-5 { + color: #ede7f6 !important; +} + +.deep-purple.lighten-4 { + background-color: #d1c4e9 !important; +} + +.deep-purple-text.text-lighten-4 { + color: #d1c4e9 !important; +} + +.deep-purple.lighten-3 { + background-color: #b39ddb !important; +} + +.deep-purple-text.text-lighten-3 { + color: #b39ddb !important; +} + +.deep-purple.lighten-2 { + background-color: #9575cd !important; +} + +.deep-purple-text.text-lighten-2 { + color: #9575cd !important; +} + +.deep-purple.lighten-1 { + background-color: #7e57c2 !important; +} + +.deep-purple-text.text-lighten-1 { + color: #7e57c2 !important; +} + +.deep-purple.darken-1 { + background-color: #5e35b1 !important; +} + +.deep-purple-text.text-darken-1 { + color: #5e35b1 !important; +} + +.deep-purple.darken-2 { + background-color: #512da8 !important; +} + +.deep-purple-text.text-darken-2 { + color: #512da8 !important; +} + +.deep-purple.darken-3 { + background-color: #4527a0 !important; +} + +.deep-purple-text.text-darken-3 { + color: #4527a0 !important; +} + +.deep-purple.darken-4 { + background-color: #311b92 !important; +} + +.deep-purple-text.text-darken-4 { + color: #311b92 !important; +} + +.deep-purple.accent-1 { + background-color: #b388ff !important; +} + +.deep-purple-text.text-accent-1 { + color: #b388ff !important; +} + +.deep-purple.accent-2 { + background-color: #7c4dff !important; +} + +.deep-purple-text.text-accent-2 { + color: #7c4dff !important; +} + +.deep-purple.accent-3 { + background-color: #651fff !important; +} + +.deep-purple-text.text-accent-3 { + color: #651fff !important; +} + +.deep-purple.accent-4 { + background-color: #6200ea !important; +} + +.deep-purple-text.text-accent-4 { + color: #6200ea !important; +} + +.indigo { + background-color: #3f51b5 !important; +} + +.indigo-text { + color: #3f51b5 !important; +} + +.indigo.lighten-5 { + background-color: #e8eaf6 !important; +} + +.indigo-text.text-lighten-5 { + color: #e8eaf6 !important; +} + +.indigo.lighten-4 { + background-color: #c5cae9 !important; +} + +.indigo-text.text-lighten-4 { + color: #c5cae9 !important; +} + +.indigo.lighten-3 { + background-color: #9fa8da !important; +} + +.indigo-text.text-lighten-3 { + color: #9fa8da !important; +} + +.indigo.lighten-2 { + background-color: #7986cb !important; +} + +.indigo-text.text-lighten-2 { + color: #7986cb !important; +} + +.indigo.lighten-1 { + background-color: #5c6bc0 !important; +} + +.indigo-text.text-lighten-1 { + color: #5c6bc0 !important; +} + +.indigo.darken-1 { + background-color: #3949ab !important; +} + +.indigo-text.text-darken-1 { + color: #3949ab !important; +} + +.indigo.darken-2 { + background-color: #303f9f !important; +} + +.indigo-text.text-darken-2 { + color: #303f9f !important; +} + +.indigo.darken-3 { + background-color: #283593 !important; +} + +.indigo-text.text-darken-3 { + color: #283593 !important; +} + +.indigo.darken-4 { + background-color: #1a237e !important; +} + +.indigo-text.text-darken-4 { + color: #1a237e !important; +} + +.indigo.accent-1 { + background-color: #8c9eff !important; +} + +.indigo-text.text-accent-1 { + color: #8c9eff !important; +} + +.indigo.accent-2 { + background-color: #536dfe !important; +} + +.indigo-text.text-accent-2 { + color: #536dfe !important; +} + +.indigo.accent-3 { + background-color: #3d5afe !important; +} + +.indigo-text.text-accent-3 { + color: #3d5afe !important; +} + +.indigo.accent-4 { + background-color: #304ffe !important; +} + +.indigo-text.text-accent-4 { + color: #304ffe !important; +} + +.blue { + background-color: #2196F3 !important; +} + +.blue-text { + color: #2196F3 !important; +} + +.blue.lighten-5 { + background-color: #E3F2FD !important; +} + +.blue-text.text-lighten-5 { + color: #E3F2FD !important; +} + +.blue.lighten-4 { + background-color: #BBDEFB !important; +} + +.blue-text.text-lighten-4 { + color: #BBDEFB !important; +} + +.blue.lighten-3 { + background-color: #90CAF9 !important; +} + +.blue-text.text-lighten-3 { + color: #90CAF9 !important; +} + +.blue.lighten-2 { + background-color: #64B5F6 !important; +} + +.blue-text.text-lighten-2 { + color: #64B5F6 !important; +} + +.blue.lighten-1 { + background-color: #42A5F5 !important; +} + +.blue-text.text-lighten-1 { + color: #42A5F5 !important; +} + +.blue.darken-1 { + background-color: #1E88E5 !important; +} + +.blue-text.text-darken-1 { + color: #1E88E5 !important; +} + +.blue.darken-2 { + background-color: #1976D2 !important; +} + +.blue-text.text-darken-2 { + color: #1976D2 !important; +} + +.blue.darken-3 { + background-color: #1565C0 !important; +} + +.blue-text.text-darken-3 { + color: #1565C0 !important; +} + +.blue.darken-4 { + background-color: #0D47A1 !important; +} + +.blue-text.text-darken-4 { + color: #0D47A1 !important; +} + +.blue.accent-1 { + background-color: #82B1FF !important; +} + +.blue-text.text-accent-1 { + color: #82B1FF !important; +} + +.blue.accent-2 { + background-color: #448AFF !important; +} + +.blue-text.text-accent-2 { + color: #448AFF !important; +} + +.blue.accent-3 { + background-color: #2979FF !important; +} + +.blue-text.text-accent-3 { + color: #2979FF !important; +} + +.blue.accent-4 { + background-color: #2962FF !important; +} + +.blue-text.text-accent-4 { + color: #2962FF !important; +} + +.light-blue { + background-color: #03a9f4 !important; +} + +.light-blue-text { + color: #03a9f4 !important; +} + +.light-blue.lighten-5 { + background-color: #e1f5fe !important; +} + +.light-blue-text.text-lighten-5 { + color: #e1f5fe !important; +} + +.light-blue.lighten-4 { + background-color: #b3e5fc !important; +} + +.light-blue-text.text-lighten-4 { + color: #b3e5fc !important; +} + +.light-blue.lighten-3 { + background-color: #81d4fa !important; +} + +.light-blue-text.text-lighten-3 { + color: #81d4fa !important; +} + +.light-blue.lighten-2 { + background-color: #4fc3f7 !important; +} + +.light-blue-text.text-lighten-2 { + color: #4fc3f7 !important; +} + +.light-blue.lighten-1 { + background-color: #29b6f6 !important; +} + +.light-blue-text.text-lighten-1 { + color: #29b6f6 !important; +} + +.light-blue.darken-1 { + background-color: #039be5 !important; +} + +.light-blue-text.text-darken-1 { + color: #039be5 !important; +} + +.light-blue.darken-2 { + background-color: #0288d1 !important; +} + +.light-blue-text.text-darken-2 { + color: #0288d1 !important; +} + +.light-blue.darken-3 { + background-color: #0277bd !important; +} + +.light-blue-text.text-darken-3 { + color: #0277bd !important; +} + +.light-blue.darken-4 { + background-color: #01579b !important; +} + +.light-blue-text.text-darken-4 { + color: #01579b !important; +} + +.light-blue.accent-1 { + background-color: #80d8ff !important; +} + +.light-blue-text.text-accent-1 { + color: #80d8ff !important; +} + +.light-blue.accent-2 { + background-color: #40c4ff !important; +} + +.light-blue-text.text-accent-2 { + color: #40c4ff !important; +} + +.light-blue.accent-3 { + background-color: #00b0ff !important; +} + +.light-blue-text.text-accent-3 { + color: #00b0ff !important; +} + +.light-blue.accent-4 { + background-color: #0091ea !important; +} + +.light-blue-text.text-accent-4 { + color: #0091ea !important; +} + +.cyan { + background-color: #00bcd4 !important; +} + +.cyan-text { + color: #00bcd4 !important; +} + +.cyan.lighten-5 { + background-color: #e0f7fa !important; +} + +.cyan-text.text-lighten-5 { + color: #e0f7fa !important; +} + +.cyan.lighten-4 { + background-color: #b2ebf2 !important; +} + +.cyan-text.text-lighten-4 { + color: #b2ebf2 !important; +} + +.cyan.lighten-3 { + background-color: #80deea !important; +} + +.cyan-text.text-lighten-3 { + color: #80deea !important; +} + +.cyan.lighten-2 { + background-color: #4dd0e1 !important; +} + +.cyan-text.text-lighten-2 { + color: #4dd0e1 !important; +} + +.cyan.lighten-1 { + background-color: #26c6da !important; +} + +.cyan-text.text-lighten-1 { + color: #26c6da !important; +} + +.cyan.darken-1 { + background-color: #00acc1 !important; +} + +.cyan-text.text-darken-1 { + color: #00acc1 !important; +} + +.cyan.darken-2 { + background-color: #0097a7 !important; +} + +.cyan-text.text-darken-2 { + color: #0097a7 !important; +} + +.cyan.darken-3 { + background-color: #00838f !important; +} + +.cyan-text.text-darken-3 { + color: #00838f !important; +} + +.cyan.darken-4 { + background-color: #006064 !important; +} + +.cyan-text.text-darken-4 { + color: #006064 !important; +} + +.cyan.accent-1 { + background-color: #84ffff !important; +} + +.cyan-text.text-accent-1 { + color: #84ffff !important; +} + +.cyan.accent-2 { + background-color: #18ffff !important; +} + +.cyan-text.text-accent-2 { + color: #18ffff !important; +} + +.cyan.accent-3 { + background-color: #00e5ff !important; +} + +.cyan-text.text-accent-3 { + color: #00e5ff !important; +} + +.cyan.accent-4 { + background-color: #00b8d4 !important; +} + +.cyan-text.text-accent-4 { + color: #00b8d4 !important; +} + +.teal { + background-color: #009688 !important; +} + +.teal-text { + color: #009688 !important; +} + +.teal.lighten-5 { + background-color: #e0f2f1 !important; +} + +.teal-text.text-lighten-5 { + color: #e0f2f1 !important; +} + +.teal.lighten-4 { + background-color: #b2dfdb !important; +} + +.teal-text.text-lighten-4 { + color: #b2dfdb !important; +} + +.teal.lighten-3 { + background-color: #80cbc4 !important; +} + +.teal-text.text-lighten-3 { + color: #80cbc4 !important; +} + +.teal.lighten-2 { + background-color: #4db6ac !important; +} + +.teal-text.text-lighten-2 { + color: #4db6ac !important; +} + +.teal.lighten-1 { + background-color: #26a69a !important; +} + +.teal-text.text-lighten-1 { + color: #26a69a !important; +} + +.teal.darken-1 { + background-color: #00897b !important; +} + +.teal-text.text-darken-1 { + color: #00897b !important; +} + +.teal.darken-2 { + background-color: #00796b !important; +} + +.teal-text.text-darken-2 { + color: #00796b !important; +} + +.teal.darken-3 { + background-color: #00695c !important; +} + +.teal-text.text-darken-3 { + color: #00695c !important; +} + +.teal.darken-4 { + background-color: #004d40 !important; +} + +.teal-text.text-darken-4 { + color: #004d40 !important; +} + +.teal.accent-1 { + background-color: #a7ffeb !important; +} + +.teal-text.text-accent-1 { + color: #a7ffeb !important; +} + +.teal.accent-2 { + background-color: #64ffda !important; +} + +.teal-text.text-accent-2 { + color: #64ffda !important; +} + +.teal.accent-3 { + background-color: #1de9b6 !important; +} + +.teal-text.text-accent-3 { + color: #1de9b6 !important; +} + +.teal.accent-4 { + background-color: #00bfa5 !important; +} + +.teal-text.text-accent-4 { + color: #00bfa5 !important; +} + +.green { + background-color: #4CAF50 !important; +} + +.green-text { + color: #4CAF50 !important; +} + +.green.lighten-5 { + background-color: #E8F5E9 !important; +} + +.green-text.text-lighten-5 { + color: #E8F5E9 !important; +} + +.green.lighten-4 { + background-color: #C8E6C9 !important; +} + +.green-text.text-lighten-4 { + color: #C8E6C9 !important; +} + +.green.lighten-3 { + background-color: #A5D6A7 !important; +} + +.green-text.text-lighten-3 { + color: #A5D6A7 !important; +} + +.green.lighten-2 { + background-color: #81C784 !important; +} + +.green-text.text-lighten-2 { + color: #81C784 !important; +} + +.green.lighten-1 { + background-color: #66BB6A !important; +} + +.green-text.text-lighten-1 { + color: #66BB6A !important; +} + +.green.darken-1 { + background-color: #43A047 !important; +} + +.green-text.text-darken-1 { + color: #43A047 !important; +} + +.green.darken-2 { + background-color: #388E3C !important; +} + +.green-text.text-darken-2 { + color: #388E3C !important; +} + +.green.darken-3 { + background-color: #2E7D32 !important; +} + +.green-text.text-darken-3 { + color: #2E7D32 !important; +} + +.green.darken-4 { + background-color: #1B5E20 !important; +} + +.green-text.text-darken-4 { + color: #1B5E20 !important; +} + +.green.accent-1 { + background-color: #B9F6CA !important; +} + +.green-text.text-accent-1 { + color: #B9F6CA !important; +} + +.green.accent-2 { + background-color: #69F0AE !important; +} + +.green-text.text-accent-2 { + color: #69F0AE !important; +} + +.green.accent-3 { + background-color: #00E676 !important; +} + +.green-text.text-accent-3 { + color: #00E676 !important; +} + +.green.accent-4 { + background-color: #00C853 !important; +} + +.green-text.text-accent-4 { + color: #00C853 !important; +} + +.light-green { + background-color: #8bc34a !important; +} + +.light-green-text { + color: #8bc34a !important; +} + +.light-green.lighten-5 { + background-color: #f1f8e9 !important; +} + +.light-green-text.text-lighten-5 { + color: #f1f8e9 !important; +} + +.light-green.lighten-4 { + background-color: #dcedc8 !important; +} + +.light-green-text.text-lighten-4 { + color: #dcedc8 !important; +} + +.light-green.lighten-3 { + background-color: #c5e1a5 !important; +} + +.light-green-text.text-lighten-3 { + color: #c5e1a5 !important; +} + +.light-green.lighten-2 { + background-color: #aed581 !important; +} + +.light-green-text.text-lighten-2 { + color: #aed581 !important; +} + +.light-green.lighten-1 { + background-color: #9ccc65 !important; +} + +.light-green-text.text-lighten-1 { + color: #9ccc65 !important; +} + +.light-green.darken-1 { + background-color: #7cb342 !important; +} + +.light-green-text.text-darken-1 { + color: #7cb342 !important; +} + +.light-green.darken-2 { + background-color: #689f38 !important; +} + +.light-green-text.text-darken-2 { + color: #689f38 !important; +} + +.light-green.darken-3 { + background-color: #558b2f !important; +} + +.light-green-text.text-darken-3 { + color: #558b2f !important; +} + +.light-green.darken-4 { + background-color: #33691e !important; +} + +.light-green-text.text-darken-4 { + color: #33691e !important; +} + +.light-green.accent-1 { + background-color: #ccff90 !important; +} + +.light-green-text.text-accent-1 { + color: #ccff90 !important; +} + +.light-green.accent-2 { + background-color: #b2ff59 !important; +} + +.light-green-text.text-accent-2 { + color: #b2ff59 !important; +} + +.light-green.accent-3 { + background-color: #76ff03 !important; +} + +.light-green-text.text-accent-3 { + color: #76ff03 !important; +} + +.light-green.accent-4 { + background-color: #64dd17 !important; +} + +.light-green-text.text-accent-4 { + color: #64dd17 !important; +} + +.lime { + background-color: #cddc39 !important; +} + +.lime-text { + color: #cddc39 !important; +} + +.lime.lighten-5 { + background-color: #f9fbe7 !important; +} + +.lime-text.text-lighten-5 { + color: #f9fbe7 !important; +} + +.lime.lighten-4 { + background-color: #f0f4c3 !important; +} + +.lime-text.text-lighten-4 { + color: #f0f4c3 !important; +} + +.lime.lighten-3 { + background-color: #e6ee9c !important; +} + +.lime-text.text-lighten-3 { + color: #e6ee9c !important; +} + +.lime.lighten-2 { + background-color: #dce775 !important; +} + +.lime-text.text-lighten-2 { + color: #dce775 !important; +} + +.lime.lighten-1 { + background-color: #d4e157 !important; +} + +.lime-text.text-lighten-1 { + color: #d4e157 !important; +} + +.lime.darken-1 { + background-color: #c0ca33 !important; +} + +.lime-text.text-darken-1 { + color: #c0ca33 !important; +} + +.lime.darken-2 { + background-color: #afb42b !important; +} + +.lime-text.text-darken-2 { + color: #afb42b !important; +} + +.lime.darken-3 { + background-color: #9e9d24 !important; +} + +.lime-text.text-darken-3 { + color: #9e9d24 !important; +} + +.lime.darken-4 { + background-color: #827717 !important; +} + +.lime-text.text-darken-4 { + color: #827717 !important; +} + +.lime.accent-1 { + background-color: #f4ff81 !important; +} + +.lime-text.text-accent-1 { + color: #f4ff81 !important; +} + +.lime.accent-2 { + background-color: #eeff41 !important; +} + +.lime-text.text-accent-2 { + color: #eeff41 !important; +} + +.lime.accent-3 { + background-color: #c6ff00 !important; +} + +.lime-text.text-accent-3 { + color: #c6ff00 !important; +} + +.lime.accent-4 { + background-color: #aeea00 !important; +} + +.lime-text.text-accent-4 { + color: #aeea00 !important; +} + +.yellow { + background-color: #ffeb3b !important; +} + +.yellow-text { + color: #ffeb3b !important; +} + +.yellow.lighten-5 { + background-color: #fffde7 !important; +} + +.yellow-text.text-lighten-5 { + color: #fffde7 !important; +} + +.yellow.lighten-4 { + background-color: #fff9c4 !important; +} + +.yellow-text.text-lighten-4 { + color: #fff9c4 !important; +} + +.yellow.lighten-3 { + background-color: #fff59d !important; +} + +.yellow-text.text-lighten-3 { + color: #fff59d !important; +} + +.yellow.lighten-2 { + background-color: #fff176 !important; +} + +.yellow-text.text-lighten-2 { + color: #fff176 !important; +} + +.yellow.lighten-1 { + background-color: #ffee58 !important; +} + +.yellow-text.text-lighten-1 { + color: #ffee58 !important; +} + +.yellow.darken-1 { + background-color: #fdd835 !important; +} + +.yellow-text.text-darken-1 { + color: #fdd835 !important; +} + +.yellow.darken-2 { + background-color: #fbc02d !important; +} + +.yellow-text.text-darken-2 { + color: #fbc02d !important; +} + +.yellow.darken-3 { + background-color: #f9a825 !important; +} + +.yellow-text.text-darken-3 { + color: #f9a825 !important; +} + +.yellow.darken-4 { + background-color: #f57f17 !important; +} + +.yellow-text.text-darken-4 { + color: #f57f17 !important; +} + +.yellow.accent-1 { + background-color: #ffff8d !important; +} + +.yellow-text.text-accent-1 { + color: #ffff8d !important; +} + +.yellow.accent-2 { + background-color: #ffff00 !important; +} + +.yellow-text.text-accent-2 { + color: #ffff00 !important; +} + +.yellow.accent-3 { + background-color: #ffea00 !important; +} + +.yellow-text.text-accent-3 { + color: #ffea00 !important; +} + +.yellow.accent-4 { + background-color: #ffd600 !important; +} + +.yellow-text.text-accent-4 { + color: #ffd600 !important; +} + +.amber { + background-color: #ffc107 !important; +} + +.amber-text { + color: #ffc107 !important; +} + +.amber.lighten-5 { + background-color: #fff8e1 !important; +} + +.amber-text.text-lighten-5 { + color: #fff8e1 !important; +} + +.amber.lighten-4 { + background-color: #ffecb3 !important; +} + +.amber-text.text-lighten-4 { + color: #ffecb3 !important; +} + +.amber.lighten-3 { + background-color: #ffe082 !important; +} + +.amber-text.text-lighten-3 { + color: #ffe082 !important; +} + +.amber.lighten-2 { + background-color: #ffd54f !important; +} + +.amber-text.text-lighten-2 { + color: #ffd54f !important; +} + +.amber.lighten-1 { + background-color: #ffca28 !important; +} + +.amber-text.text-lighten-1 { + color: #ffca28 !important; +} + +.amber.darken-1 { + background-color: #ffb300 !important; +} + +.amber-text.text-darken-1 { + color: #ffb300 !important; +} + +.amber.darken-2 { + background-color: #ffa000 !important; +} + +.amber-text.text-darken-2 { + color: #ffa000 !important; +} + +.amber.darken-3 { + background-color: #ff8f00 !important; +} + +.amber-text.text-darken-3 { + color: #ff8f00 !important; +} + +.amber.darken-4 { + background-color: #ff6f00 !important; +} + +.amber-text.text-darken-4 { + color: #ff6f00 !important; +} + +.amber.accent-1 { + background-color: #ffe57f !important; +} + +.amber-text.text-accent-1 { + color: #ffe57f !important; +} + +.amber.accent-2 { + background-color: #ffd740 !important; +} + +.amber-text.text-accent-2 { + color: #ffd740 !important; +} + +.amber.accent-3 { + background-color: #ffc400 !important; +} + +.amber-text.text-accent-3 { + color: #ffc400 !important; +} + +.amber.accent-4 { + background-color: #ffab00 !important; +} + +.amber-text.text-accent-4 { + color: #ffab00 !important; +} + +.orange { + background-color: #ff9800 !important; +} + +.orange-text { + color: #ff9800 !important; +} + +.orange.lighten-5 { + background-color: #fff3e0 !important; +} + +.orange-text.text-lighten-5 { + color: #fff3e0 !important; +} + +.orange.lighten-4 { + background-color: #ffe0b2 !important; +} + +.orange-text.text-lighten-4 { + color: #ffe0b2 !important; +} + +.orange.lighten-3 { + background-color: #ffcc80 !important; +} + +.orange-text.text-lighten-3 { + color: #ffcc80 !important; +} + +.orange.lighten-2 { + background-color: #ffb74d !important; +} + +.orange-text.text-lighten-2 { + color: #ffb74d !important; +} + +.orange.lighten-1 { + background-color: #ffa726 !important; +} + +.orange-text.text-lighten-1 { + color: #ffa726 !important; +} + +.orange.darken-1 { + background-color: #fb8c00 !important; +} + +.orange-text.text-darken-1 { + color: #fb8c00 !important; +} + +.orange.darken-2 { + background-color: #f57c00 !important; +} + +.orange-text.text-darken-2 { + color: #f57c00 !important; +} + +.orange.darken-3 { + background-color: #ef6c00 !important; +} + +.orange-text.text-darken-3 { + color: #ef6c00 !important; +} + +.orange.darken-4 { + background-color: #e65100 !important; +} + +.orange-text.text-darken-4 { + color: #e65100 !important; +} + +.orange.accent-1 { + background-color: #ffd180 !important; +} + +.orange-text.text-accent-1 { + color: #ffd180 !important; +} + +.orange.accent-2 { + background-color: #ffab40 !important; +} + +.orange-text.text-accent-2 { + color: #ffab40 !important; +} + +.orange.accent-3 { + background-color: #ff9100 !important; +} + +.orange-text.text-accent-3 { + color: #ff9100 !important; +} + +.orange.accent-4 { + background-color: #ff6d00 !important; +} + +.orange-text.text-accent-4 { + color: #ff6d00 !important; +} + +.deep-orange { + background-color: #ff5722 !important; +} + +.deep-orange-text { + color: #ff5722 !important; +} + +.deep-orange.lighten-5 { + background-color: #fbe9e7 !important; +} + +.deep-orange-text.text-lighten-5 { + color: #fbe9e7 !important; +} + +.deep-orange.lighten-4 { + background-color: #ffccbc !important; +} + +.deep-orange-text.text-lighten-4 { + color: #ffccbc !important; +} + +.deep-orange.lighten-3 { + background-color: #ffab91 !important; +} + +.deep-orange-text.text-lighten-3 { + color: #ffab91 !important; +} + +.deep-orange.lighten-2 { + background-color: #ff8a65 !important; +} + +.deep-orange-text.text-lighten-2 { + color: #ff8a65 !important; +} + +.deep-orange.lighten-1 { + background-color: #ff7043 !important; +} + +.deep-orange-text.text-lighten-1 { + color: #ff7043 !important; +} + +.deep-orange.darken-1 { + background-color: #f4511e !important; +} + +.deep-orange-text.text-darken-1 { + color: #f4511e !important; +} + +.deep-orange.darken-2 { + background-color: #e64a19 !important; +} + +.deep-orange-text.text-darken-2 { + color: #e64a19 !important; +} + +.deep-orange.darken-3 { + background-color: #d84315 !important; +} + +.deep-orange-text.text-darken-3 { + color: #d84315 !important; +} + +.deep-orange.darken-4 { + background-color: #bf360c !important; +} + +.deep-orange-text.text-darken-4 { + color: #bf360c !important; +} + +.deep-orange.accent-1 { + background-color: #ff9e80 !important; +} + +.deep-orange-text.text-accent-1 { + color: #ff9e80 !important; +} + +.deep-orange.accent-2 { + background-color: #ff6e40 !important; +} + +.deep-orange-text.text-accent-2 { + color: #ff6e40 !important; +} + +.deep-orange.accent-3 { + background-color: #ff3d00 !important; +} + +.deep-orange-text.text-accent-3 { + color: #ff3d00 !important; +} + +.deep-orange.accent-4 { + background-color: #dd2c00 !important; +} + +.deep-orange-text.text-accent-4 { + color: #dd2c00 !important; +} + +.brown { + background-color: #795548 !important; +} + +.brown-text { + color: #795548 !important; +} + +.brown.lighten-5 { + background-color: #efebe9 !important; +} + +.brown-text.text-lighten-5 { + color: #efebe9 !important; +} + +.brown.lighten-4 { + background-color: #d7ccc8 !important; +} + +.brown-text.text-lighten-4 { + color: #d7ccc8 !important; +} + +.brown.lighten-3 { + background-color: #bcaaa4 !important; +} + +.brown-text.text-lighten-3 { + color: #bcaaa4 !important; +} + +.brown.lighten-2 { + background-color: #a1887f !important; +} + +.brown-text.text-lighten-2 { + color: #a1887f !important; +} + +.brown.lighten-1 { + background-color: #8d6e63 !important; +} + +.brown-text.text-lighten-1 { + color: #8d6e63 !important; +} + +.brown.darken-1 { + background-color: #6d4c41 !important; +} + +.brown-text.text-darken-1 { + color: #6d4c41 !important; +} + +.brown.darken-2 { + background-color: #5d4037 !important; +} + +.brown-text.text-darken-2 { + color: #5d4037 !important; +} + +.brown.darken-3 { + background-color: #4e342e !important; +} + +.brown-text.text-darken-3 { + color: #4e342e !important; +} + +.brown.darken-4 { + background-color: #3e2723 !important; +} + +.brown-text.text-darken-4 { + color: #3e2723 !important; +} + +.blue-grey { + background-color: #607d8b !important; +} + +.blue-grey-text { + color: #607d8b !important; +} + +.blue-grey.lighten-5 { + background-color: #eceff1 !important; +} + +.blue-grey-text.text-lighten-5 { + color: #eceff1 !important; +} + +.blue-grey.lighten-4 { + background-color: #cfd8dc !important; +} + +.blue-grey-text.text-lighten-4 { + color: #cfd8dc !important; +} + +.blue-grey.lighten-3 { + background-color: #b0bec5 !important; +} + +.blue-grey-text.text-lighten-3 { + color: #b0bec5 !important; +} + +.blue-grey.lighten-2 { + background-color: #90a4ae !important; +} + +.blue-grey-text.text-lighten-2 { + color: #90a4ae !important; +} + +.blue-grey.lighten-1 { + background-color: #78909c !important; +} + +.blue-grey-text.text-lighten-1 { + color: #78909c !important; +} + +.blue-grey.darken-1 { + background-color: #546e7a !important; +} + +.blue-grey-text.text-darken-1 { + color: #546e7a !important; +} + +.blue-grey.darken-2 { + background-color: #455a64 !important; +} + +.blue-grey-text.text-darken-2 { + color: #455a64 !important; +} + +.blue-grey.darken-3 { + background-color: #37474f !important; +} + +.blue-grey-text.text-darken-3 { + color: #37474f !important; +} + +.blue-grey.darken-4 { + background-color: #263238 !important; +} + +.blue-grey-text.text-darken-4 { + color: #263238 !important; +} + +.grey { + background-color: #9e9e9e !important; +} + +.grey-text { + color: #9e9e9e !important; +} + +.grey.lighten-5 { + background-color: #fafafa !important; +} + +.grey-text.text-lighten-5 { + color: #fafafa !important; +} + +.grey.lighten-4 { + background-color: #f5f5f5 !important; +} + +.grey-text.text-lighten-4 { + color: #f5f5f5 !important; +} + +.grey.lighten-3 { + background-color: #eeeeee !important; +} + +.grey-text.text-lighten-3 { + color: #eeeeee !important; +} + +.grey.lighten-2 { + background-color: #e0e0e0 !important; +} + +.grey-text.text-lighten-2 { + color: #e0e0e0 !important; +} + +.grey.lighten-1 { + background-color: #bdbdbd !important; +} + +.grey-text.text-lighten-1 { + color: #bdbdbd !important; +} + +.grey.darken-1 { + background-color: #757575 !important; +} + +.grey-text.text-darken-1 { + color: #757575 !important; +} + +.grey.darken-2 { + background-color: #616161 !important; +} + +.grey-text.text-darken-2 { + color: #616161 !important; +} + +.grey.darken-3 { + background-color: #424242 !important; +} + +.grey-text.text-darken-3 { + color: #424242 !important; +} + +.grey.darken-4 { + background-color: #212121 !important; +} + +.grey-text.text-darken-4 { + color: #212121 !important; +} + +.black { + background-color: #000000 !important; +} + +.black-text { + color: #000000 !important; +} + +.white { + background-color: #FFFFFF !important; +} + +.white-text { + color: #FFFFFF !important; +} + +.transparent { + background-color: transparent !important; +} + +.transparent-text { + color: transparent !important; +} + +/*! normalize.css v7.0.0 | MIT License | github.com/necolas/normalize.css */ +/* Document + ========================================================================== */ +/** + * 1. Correct the line height in all browsers. + * 2. Prevent adjustments of font size after orientation changes in + * IE on Windows Phone and in iOS. + */ +html { + line-height: 1.15; + /* 1 */ + -ms-text-size-adjust: 100%; + /* 2 */ + -webkit-text-size-adjust: 100%; + /* 2 */ +} + +/* Sections + ========================================================================== */ +/** + * Remove the margin in all browsers (opinionated). + */ +body { + margin: 0; +} + +/** + * Add the correct display in IE 9-. + */ +article, +aside, +footer, +header, +nav, +section { + display: block; +} + +/** + * Correct the font size and margin on `h1` elements within `section` and + * `article` contexts in Chrome, Firefox, and Safari. + */ +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +/* Grouping content + ========================================================================== */ +/** + * Add the correct display in IE 9-. + * 1. Add the correct display in IE. + */ +figcaption, +figure, +main { + /* 1 */ + display: block; +} + +/** + * Add the correct margin in IE 8. + */ +figure { + margin: 1em 40px; +} + +/** + * 1. Add the correct box sizing in Firefox. + * 2. Show the overflow in Edge and IE. + */ +hr { + -webkit-box-sizing: content-box; + box-sizing: content-box; + /* 1 */ + height: 0; + /* 1 */ + overflow: visible; + /* 2 */ +} + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ +pre { + font-family: monospace, monospace; + /* 1 */ + font-size: 1em; + /* 2 */ +} + +/* Text-level semantics + ========================================================================== */ +/** + * 1. Remove the gray background on active links in IE 10. + * 2. Remove gaps in links underline in iOS 8+ and Safari 8+. + */ +a { + background-color: transparent; + /* 1 */ + -webkit-text-decoration-skip: objects; + /* 2 */ +} + +/** + * 1. Remove the bottom border in Chrome 57- and Firefox 39-. + * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. + */ +abbr[title] { + border-bottom: none; + /* 1 */ + text-decoration: underline; + /* 2 */ + -webkit-text-decoration: underline dotted; + -moz-text-decoration: underline dotted; + text-decoration: underline dotted; + /* 2 */ +} + +/** + * Prevent the duplicate application of `bolder` by the next rule in Safari 6. + */ +b, +strong { + font-weight: inherit; +} + +/** + * Add the correct font weight in Chrome, Edge, and Safari. + */ +b, +strong { + font-weight: bolder; +} + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ +code, +kbd, +samp { + font-family: monospace, monospace; + /* 1 */ + font-size: 1em; + /* 2 */ +} + +/** + * Add the correct font style in Android 4.3-. + */ +dfn { + font-style: italic; +} + +/** + * Add the correct background and color in IE 9-. + */ +mark { + background-color: #ff0; + color: #000; +} + +/** + * Add the correct font size in all browsers. + */ +small { + font-size: 80%; +} + +/** + * Prevent `sub` and `sup` elements from affecting the line height in + * all browsers. + */ +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +/* Embedded content + ========================================================================== */ +/** + * Add the correct display in IE 9-. + */ +audio, +video { + display: inline-block; +} + +/** + * Add the correct display in iOS 4-7. + */ +audio:not([controls]) { + display: none; + height: 0; +} + +/** + * Remove the border on images inside links in IE 10-. + */ +img { + border-style: none; +} + +/** + * Hide the overflow in IE. + */ +svg:not(:root) { + overflow: hidden; +} + +/* Forms + ========================================================================== */ +/** + * 1. Change the font styles in all browsers (opinionated). + * 2. Remove the margin in Firefox and Safari. + */ +button, +input, +optgroup, +select, +textarea { + font-family: sans-serif; + /* 1 */ + font-size: 100%; + /* 1 */ + line-height: 1.15; + /* 1 */ + margin: 0; + /* 2 */ +} + +/** + * Show the overflow in IE. + * 1. Show the overflow in Edge. + */ +button, +input { + /* 1 */ + overflow: visible; +} + +/** + * Remove the inheritance of text transform in Edge, Firefox, and IE. + * 1. Remove the inheritance of text transform in Firefox. + */ +button, +select { + /* 1 */ + text-transform: none; +} + +/** + * 1. Prevent a WebKit bug where (2) destroys native `audio` and `video` + * controls in Android 4. + * 2. Correct the inability to style clickable types in iOS and Safari. + */ +button, +html [type="button"], +[type="reset"], +[type="submit"] { + -webkit-appearance: button; + /* 2 */ +} + +/** + * Remove the inner border and padding in Firefox. + */ +button::-moz-focus-inner, +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner { + border-style: none; + padding: 0; +} + +/** + * Restore the focus styles unset by the previous rule. + */ +button:-moz-focusring, +[type="button"]:-moz-focusring, +[type="reset"]:-moz-focusring, +[type="submit"]:-moz-focusring { + outline: 1px dotted ButtonText; +} + +/** + * Correct the padding in Firefox. + */ +fieldset { + padding: 0.35em 0.75em 0.625em; +} + +/** + * 1. Correct the text wrapping in Edge and IE. + * 2. Correct the color inheritance from `fieldset` elements in IE. + * 3. Remove the padding so developers are not caught out when they zero out + * `fieldset` elements in all browsers. + */ +legend { + -webkit-box-sizing: border-box; + box-sizing: border-box; + /* 1 */ + color: inherit; + /* 2 */ + display: table; + /* 1 */ + max-width: 100%; + /* 1 */ + padding: 0; + /* 3 */ + white-space: normal; + /* 1 */ +} + +/** + * 1. Add the correct display in IE 9-. + * 2. Add the correct vertical alignment in Chrome, Firefox, and Opera. + */ +progress { + display: inline-block; + /* 1 */ + vertical-align: baseline; + /* 2 */ +} + +/** + * Remove the default vertical scrollbar in IE. + */ +textarea { + overflow: auto; +} + +/** + * 1. Add the correct box sizing in IE 10-. + * 2. Remove the padding in IE 10-. + */ +[type="checkbox"], +[type="radio"] { + -webkit-box-sizing: border-box; + box-sizing: border-box; + /* 1 */ + padding: 0; + /* 2 */ +} + +/** + * Correct the cursor style of increment and decrement buttons in Chrome. + */ +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +/** + * 1. Correct the odd appearance in Chrome and Safari. + * 2. Correct the outline style in Safari. + */ +[type="search"] { + -webkit-appearance: textfield; + /* 1 */ + outline-offset: -2px; + /* 2 */ +} + +/** + * Remove the inner padding and cancel buttons in Chrome and Safari on macOS. + */ +[type="search"]::-webkit-search-cancel-button, +[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +/** + * 1. Correct the inability to style clickable types in iOS and Safari. + * 2. Change font properties to `inherit` in Safari. + */ +::-webkit-file-upload-button { + -webkit-appearance: button; + /* 1 */ + font: inherit; + /* 2 */ +} + +/* Interactive + ========================================================================== */ +/* + * Add the correct display in IE 9-. + * 1. Add the correct display in Edge, IE, and Firefox. + */ +details, +menu { + display: block; +} + +/* + * Add the correct display in all browsers. + */ +summary { + display: list-item; +} + +/* Scripting + ========================================================================== */ +/** + * Add the correct display in IE 9-. + */ +canvas { + display: inline-block; +} + +/** + * Add the correct display in IE. + */ +template { + display: none; +} + +/* Hidden + ========================================================================== */ +/** + * Add the correct display in IE 10-. + */ +[hidden] { + display: none; +} + +html { + -webkit-box-sizing: border-box; + box-sizing: border-box; +} + +*, *:before, *:after { + -webkit-box-sizing: inherit; + box-sizing: inherit; +} + +button, +input, +optgroup, +select, +textarea { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; +} + +ul:not(.browser-default) { + padding-left: 0; + list-style-type: none; +} + +ul:not(.browser-default) > li { + list-style-type: none; +} + +a { + color: #039be5; + text-decoration: none; + -webkit-tap-highlight-color: transparent; +} + +.valign-wrapper { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; +} + +.clearfix { + clear: both; +} + +.z-depth-0 { + -webkit-box-shadow: none !important; + box-shadow: none !important; +} + +/* 2dp elevation modified*/ +.z-depth-1, nav, .card-panel, .card, .toast, .btn, .btn-large, .btn-small, .btn-floating, .dropdown-content, .collapsible, .sidenav { + -webkit-box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.12), 0 1px 5px 0 rgba(0, 0, 0, 0.2); + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.12), 0 1px 5px 0 rgba(0, 0, 0, 0.2); +} + +.z-depth-1-half, .btn:hover, .btn-large:hover, .btn-small:hover, .btn-floating:hover { + -webkit-box-shadow: 0 3px 3px 0 rgba(0, 0, 0, 0.14), 0 1px 7px 0 rgba(0, 0, 0, 0.12), 0 3px 1px -1px rgba(0, 0, 0, 0.2); + box-shadow: 0 3px 3px 0 rgba(0, 0, 0, 0.14), 0 1px 7px 0 rgba(0, 0, 0, 0.12), 0 3px 1px -1px rgba(0, 0, 0, 0.2); +} + +/* 6dp elevation modified*/ +.z-depth-2 { + -webkit-box-shadow: 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12), 0 2px 4px -1px rgba(0, 0, 0, 0.3); + box-shadow: 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12), 0 2px 4px -1px rgba(0, 0, 0, 0.3); +} + +/* 12dp elevation modified*/ +.z-depth-3 { + -webkit-box-shadow: 0 8px 17px 2px rgba(0, 0, 0, 0.14), 0 3px 14px 2px rgba(0, 0, 0, 0.12), 0 5px 5px -3px rgba(0, 0, 0, 0.2); + box-shadow: 0 8px 17px 2px rgba(0, 0, 0, 0.14), 0 3px 14px 2px rgba(0, 0, 0, 0.12), 0 5px 5px -3px rgba(0, 0, 0, 0.2); +} + +/* 16dp elevation */ +.z-depth-4 { + -webkit-box-shadow: 0 16px 24px 2px rgba(0, 0, 0, 0.14), 0 6px 30px 5px rgba(0, 0, 0, 0.12), 0 8px 10px -7px rgba(0, 0, 0, 0.2); + box-shadow: 0 16px 24px 2px rgba(0, 0, 0, 0.14), 0 6px 30px 5px rgba(0, 0, 0, 0.12), 0 8px 10px -7px rgba(0, 0, 0, 0.2); +} + +/* 24dp elevation */ +.z-depth-5, .modal { + -webkit-box-shadow: 0 24px 38px 3px rgba(0, 0, 0, 0.14), 0 9px 46px 8px rgba(0, 0, 0, 0.12), 0 11px 15px -7px rgba(0, 0, 0, 0.2); + box-shadow: 0 24px 38px 3px rgba(0, 0, 0, 0.14), 0 9px 46px 8px rgba(0, 0, 0, 0.12), 0 11px 15px -7px rgba(0, 0, 0, 0.2); +} + +.hoverable { + -webkit-transition: -webkit-box-shadow .25s; + transition: -webkit-box-shadow .25s; + transition: box-shadow .25s; + transition: box-shadow .25s, -webkit-box-shadow .25s; +} + +.hoverable:hover { + -webkit-box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19); + box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19); +} + +.divider { + height: 1px; + overflow: hidden; + background-color: #e0e0e0; +} + +blockquote { + margin: 20px 0; + padding-left: 1.5rem; + border-left: 5px solid #ee6e73; +} + +i { + line-height: inherit; +} + +i.left { + float: left; + margin-right: 15px; +} + +i.right { + float: right; + margin-left: 15px; +} + +i.tiny { + font-size: 1rem; +} + +i.small { + font-size: 2rem; +} + +i.medium { + font-size: 4rem; +} + +i.large { + font-size: 6rem; +} + +img.responsive-img, +video.responsive-video { + max-width: 100%; + height: auto; +} + +.pagination li { + display: inline-block; + border-radius: 2px; + text-align: center; + vertical-align: top; + height: 30px; +} + +.pagination li a { + color: #444; + display: inline-block; + font-size: 1.2rem; + padding: 0 10px; + line-height: 30px; +} + +.pagination li.active a { + color: #fff; +} + +.pagination li.active { + background-color: #ee6e73; +} + +.pagination li.disabled a { + cursor: default; + color: #999; +} + +.pagination li i { + font-size: 2rem; +} + +.pagination li.pages ul li { + display: inline-block; + float: none; +} + +@media only screen and (max-width: 992px) { + .pagination { + width: 100%; + } + .pagination li.prev, + .pagination li.next { + width: 10%; + } + .pagination li.pages { + width: 80%; + overflow: hidden; + white-space: nowrap; + } +} + +.breadcrumb { + font-size: 18px; + color: rgba(255, 255, 255, 0.7); +} + +.breadcrumb i, +.breadcrumb [class^="mdi-"], .breadcrumb [class*="mdi-"], +.breadcrumb i.material-icons { + display: inline-block; + float: left; + font-size: 24px; +} + +.breadcrumb:before { + content: '\E5CC'; + color: rgba(255, 255, 255, 0.7); + vertical-align: top; + display: inline-block; + font-family: 'Material Icons'; + font-weight: normal; + font-style: normal; + font-size: 25px; + margin: 0 10px 0 8px; + -webkit-font-smoothing: antialiased; +} + +.breadcrumb:first-child:before { + display: none; +} + +.breadcrumb:last-child { + color: #fff; +} + +.parallax-container { + position: relative; + overflow: hidden; + height: 500px; +} + +.parallax-container .parallax { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: -1; +} + +.parallax-container .parallax img { + opacity: 0; + position: absolute; + left: 50%; + bottom: 0; + min-width: 100%; + min-height: 100%; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + -webkit-transform: translateX(-50%); + transform: translateX(-50%); +} + +.pin-top, .pin-bottom { + position: relative; +} + +.pinned { + position: fixed !important; +} + +/********************* + Transition Classes +**********************/ +ul.staggered-list li { + opacity: 0; +} + +.fade-in { + opacity: 0; + -webkit-transform-origin: 0 50%; + transform-origin: 0 50%; +} + +/********************* + Media Query Classes +**********************/ +@media only screen and (max-width: 600px) { + .hide-on-small-only, .hide-on-small-and-down { + display: none !important; + } +} + +@media only screen and (max-width: 992px) { + .hide-on-med-and-down { + display: none !important; + } +} + +@media only screen and (min-width: 601px) { + .hide-on-med-and-up { + display: none !important; + } +} + +@media only screen and (min-width: 600px) and (max-width: 992px) { + .hide-on-med-only { + display: none !important; + } +} + +@media only screen and (min-width: 993px) { + .hide-on-large-only { + display: none !important; + } +} + +@media only screen and (min-width: 1201px) { + .hide-on-extra-large-only { + display: none !important; + } +} + +@media only screen and (min-width: 1201px) { + .show-on-extra-large { + display: block !important; + } +} + +@media only screen and (min-width: 993px) { + .show-on-large { + display: block !important; + } +} + +@media only screen and (min-width: 600px) and (max-width: 992px) { + .show-on-medium { + display: block !important; + } +} + +@media only screen and (max-width: 600px) { + .show-on-small { + display: block !important; + } +} + +@media only screen and (min-width: 601px) { + .show-on-medium-and-up { + display: block !important; + } +} + +@media only screen and (max-width: 992px) { + .show-on-medium-and-down { + display: block !important; + } +} + +@media only screen and (max-width: 600px) { + .center-on-small-only { + text-align: center; + } +} + +.page-footer { + padding-top: 20px; + color: #fff; + background-color: #ee6e73; +} + +.page-footer .footer-copyright { + overflow: hidden; + min-height: 50px; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: justify; + -webkit-justify-content: space-between; + -ms-flex-pack: justify; + justify-content: space-between; + padding: 10px 0px; + color: rgba(255, 255, 255, 0.8); + background-color: rgba(51, 51, 51, 0.08); +} + +table, th, td { + border: none; +} + +table { + width: 100%; + display: table; + border-collapse: collapse; + border-spacing: 0; +} + +table.striped tr { + border-bottom: none; +} + +table.striped > tbody > tr:nth-child(odd) { + background-color: rgba(242, 242, 242, 0.5); +} + +table.striped > tbody > tr > td { + border-radius: 0; +} + +table.highlight > tbody > tr { + -webkit-transition: background-color .25s ease; + transition: background-color .25s ease; +} + +table.highlight > tbody > tr:hover { + background-color: rgba(242, 242, 242, 0.5); +} + +table.centered thead tr th, table.centered tbody tr td { + text-align: center; +} + +tr { + border-bottom: 1px solid rgba(0, 0, 0, 0.12); +} + +td, th { + padding: 15px 5px; + display: table-cell; + text-align: left; + vertical-align: middle; + border-radius: 2px; +} + +@media only screen and (max-width: 992px) { + table.responsive-table { + width: 100%; + border-collapse: collapse; + border-spacing: 0; + display: block; + position: relative; + /* sort out borders */ + } + table.responsive-table td:empty:before { + content: '\00a0'; + } + table.responsive-table th, + table.responsive-table td { + margin: 0; + vertical-align: top; + } + table.responsive-table th { + text-align: left; + } + table.responsive-table thead { + display: block; + float: left; + } + table.responsive-table thead tr { + display: block; + padding: 0 10px 0 0; + } + table.responsive-table thead tr th::before { + content: "\00a0"; + } + table.responsive-table tbody { + display: block; + width: auto; + position: relative; + overflow-x: auto; + white-space: nowrap; + } + table.responsive-table tbody tr { + display: inline-block; + vertical-align: top; + } + table.responsive-table th { + display: block; + text-align: right; + } + table.responsive-table td { + display: block; + min-height: 1.25em; + text-align: left; + } + table.responsive-table tr { + border-bottom: none; + padding: 0 10px; + } + table.responsive-table thead { + border: 0; + border-right: 1px solid rgba(0, 0, 0, 0.12); + } +} + +.collection { + margin: 0.5rem 0 1rem 0; + border: 1px solid #e0e0e0; + border-radius: 2px; + overflow: hidden; + position: relative; +} + +.collection .collection-item { + background-color: #fff; + line-height: 1.5rem; + padding: 10px 20px; + margin: 0; + border-bottom: 1px solid #e0e0e0; +} + +.collection .collection-item.avatar { + min-height: 84px; + padding-left: 72px; + position: relative; +} + +.collection .collection-item.avatar:not(.circle-clipper) > .circle, +.collection .collection-item.avatar :not(.circle-clipper) > .circle { + position: absolute; + width: 42px; + height: 42px; + overflow: hidden; + left: 15px; + display: inline-block; + vertical-align: middle; +} + +.collection .collection-item.avatar i.circle { + font-size: 18px; + line-height: 42px; + color: #fff; + background-color: #999; + text-align: center; +} + +.collection .collection-item.avatar .title { + font-size: 16px; +} + +.collection .collection-item.avatar p { + margin: 0; +} + +.collection .collection-item.avatar .secondary-content { + position: absolute; + top: 16px; + right: 16px; +} + +.collection .collection-item:last-child { + border-bottom: none; +} + +.collection .collection-item.active { + background-color: #26a69a; + color: #eafaf9; +} + +.collection .collection-item.active .secondary-content { + color: #fff; +} + +.collection a.collection-item { + display: block; + -webkit-transition: .25s; + transition: .25s; + color: #26a69a; +} + +.collection a.collection-item:not(.active):hover { + background-color: #ddd; +} + +.collection.with-header .collection-header { + background-color: #fff; + border-bottom: 1px solid #e0e0e0; + padding: 10px 20px; +} + +.collection.with-header .collection-item { + padding-left: 30px; +} + +.collection.with-header .collection-item.avatar { + padding-left: 72px; +} + +.secondary-content { + float: right; + color: #26a69a; +} + +.collapsible .collection { + margin: 0; + border: none; +} + +.video-container { + position: relative; + padding-bottom: 56.25%; + height: 0; + overflow: hidden; +} + +.video-container iframe, .video-container object, .video-container embed { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} + +.progress { + position: relative; + height: 4px; + display: block; + width: 100%; + background-color: #acece6; + border-radius: 2px; + margin: 0.5rem 0 1rem 0; + overflow: hidden; +} + +.progress .determinate { + position: absolute; + top: 0; + left: 0; + bottom: 0; + background-color: #26a69a; + -webkit-transition: width .3s linear; + transition: width .3s linear; +} + +.progress .indeterminate { + background-color: #26a69a; +} + +.progress .indeterminate:before { + content: ''; + position: absolute; + background-color: inherit; + top: 0; + left: 0; + bottom: 0; + will-change: left, right; + -webkit-animation: indeterminate 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite; + animation: indeterminate 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite; +} + +.progress .indeterminate:after { + content: ''; + position: absolute; + background-color: inherit; + top: 0; + left: 0; + bottom: 0; + will-change: left, right; + -webkit-animation: indeterminate-short 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) infinite; + animation: indeterminate-short 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) infinite; + -webkit-animation-delay: 1.15s; + animation-delay: 1.15s; +} + +@-webkit-keyframes indeterminate { + 0% { + left: -35%; + right: 100%; + } + 60% { + left: 100%; + right: -90%; + } + 100% { + left: 100%; + right: -90%; + } +} + +@keyframes indeterminate { + 0% { + left: -35%; + right: 100%; + } + 60% { + left: 100%; + right: -90%; + } + 100% { + left: 100%; + right: -90%; + } +} + +@-webkit-keyframes indeterminate-short { + 0% { + left: -200%; + right: 100%; + } + 60% { + left: 107%; + right: -8%; + } + 100% { + left: 107%; + right: -8%; + } +} + +@keyframes indeterminate-short { + 0% { + left: -200%; + right: 100%; + } + 60% { + left: 107%; + right: -8%; + } + 100% { + left: 107%; + right: -8%; + } +} + +/******************* + Utility Classes +*******************/ +.hide { + display: none !important; +} + +.left-align { + text-align: left; +} + +.right-align { + text-align: right; +} + +.center, .center-align { + text-align: center; +} + +.left { + float: left !important; +} + +.right { + float: right !important; +} + +.no-select, input[type=range], +input[type=range] + .thumb { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.circle { + border-radius: 50%; +} + +.center-block { + display: block; + margin-left: auto; + margin-right: auto; +} + +.truncate { + display: block; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.no-padding { + padding: 0 !important; +} + +span.badge { + min-width: 3rem; + padding: 0 6px; + margin-left: 14px; + text-align: center; + font-size: 1rem; + line-height: 22px; + height: 22px; + color: #757575; + float: right; + -webkit-box-sizing: border-box; + box-sizing: border-box; +} + +span.badge.new { + font-weight: 300; + font-size: 0.8rem; + color: #fff; + background-color: #26a69a; + border-radius: 2px; +} + +span.badge.new:after { + content: " new"; +} + +span.badge[data-badge-caption]::after { + content: " " attr(data-badge-caption); +} + +nav ul a span.badge { + display: inline-block; + float: none; + margin-left: 4px; + line-height: 22px; + height: 22px; + -webkit-font-smoothing: auto; +} + +.collection-item span.badge { + margin-top: calc(0.75rem - 11px); +} + +.collapsible span.badge { + margin-left: auto; +} + +.sidenav span.badge { + margin-top: calc(24px - 11px); +} + +table span.badge { + display: inline-block; + float: none; + margin-left: auto; +} + +/* This is needed for some mobile phones to display the Google Icon font properly */ +.material-icons { + text-rendering: optimizeLegibility; + -webkit-font-feature-settings: 'liga'; + -moz-font-feature-settings: 'liga'; + font-feature-settings: 'liga'; +} + +.container { + margin: 0 auto; + max-width: 1280px; + width: 90%; +} + +@media only screen and (min-width: 601px) { + .container { + width: 85%; + } +} + +@media only screen and (min-width: 993px) { + .container { + width: 70%; + } +} + +.col .row { + margin-left: -0.75rem; + margin-right: -0.75rem; +} + +.section { + padding-top: 1rem; + padding-bottom: 1rem; +} + +.section.no-pad { + padding: 0; +} + +.section.no-pad-bot { + padding-bottom: 0; +} + +.section.no-pad-top { + padding-top: 0; +} + +.row { + margin-left: auto; + margin-right: auto; + margin-bottom: 20px; +} + +.row:after { + content: ""; + display: table; + clear: both; +} + +.row .col { + float: left; + -webkit-box-sizing: border-box; + box-sizing: border-box; + padding: 0 0.75rem; + min-height: 1px; +} + +.row .col[class*="push-"], .row .col[class*="pull-"] { + position: relative; +} + +.row .col.s1 { + width: 8.3333333333%; + margin-left: auto; + left: auto; + right: auto; +} + +.row .col.s2 { + width: 16.6666666667%; + margin-left: auto; + left: auto; + right: auto; +} + +.row .col.s3 { + width: 25%; + margin-left: auto; + left: auto; + right: auto; +} + +.row .col.s4 { + width: 33.3333333333%; + margin-left: auto; + left: auto; + right: auto; +} + +.row .col.s5 { + width: 41.6666666667%; + margin-left: auto; + left: auto; + right: auto; +} + +.row .col.s6 { + width: 50%; + margin-left: auto; + left: auto; + right: auto; +} + +.row .col.s7 { + width: 58.3333333333%; + margin-left: auto; + left: auto; + right: auto; +} + +.row .col.s8 { + width: 66.6666666667%; + margin-left: auto; + left: auto; + right: auto; +} + +.row .col.s9 { + width: 75%; + margin-left: auto; + left: auto; + right: auto; +} + +.row .col.s10 { + width: 83.3333333333%; + margin-left: auto; + left: auto; + right: auto; +} + +.row .col.s11 { + width: 91.6666666667%; + margin-left: auto; + left: auto; + right: auto; +} + +.row .col.s12 { + width: 100%; + margin-left: auto; + left: auto; + right: auto; +} + +.row .col.offset-s1 { + margin-left: 8.3333333333%; +} + +.row .col.pull-s1 { + right: 8.3333333333%; +} + +.row .col.push-s1 { + left: 8.3333333333%; +} + +.row .col.offset-s2 { + margin-left: 16.6666666667%; +} + +.row .col.pull-s2 { + right: 16.6666666667%; +} + +.row .col.push-s2 { + left: 16.6666666667%; +} + +.row .col.offset-s3 { + margin-left: 25%; +} + +.row .col.pull-s3 { + right: 25%; +} + +.row .col.push-s3 { + left: 25%; +} + +.row .col.offset-s4 { + margin-left: 33.3333333333%; +} + +.row .col.pull-s4 { + right: 33.3333333333%; +} + +.row .col.push-s4 { + left: 33.3333333333%; +} + +.row .col.offset-s5 { + margin-left: 41.6666666667%; +} + +.row .col.pull-s5 { + right: 41.6666666667%; +} + +.row .col.push-s5 { + left: 41.6666666667%; +} + +.row .col.offset-s6 { + margin-left: 50%; +} + +.row .col.pull-s6 { + right: 50%; +} + +.row .col.push-s6 { + left: 50%; +} + +.row .col.offset-s7 { + margin-left: 58.3333333333%; +} + +.row .col.pull-s7 { + right: 58.3333333333%; +} + +.row .col.push-s7 { + left: 58.3333333333%; +} + +.row .col.offset-s8 { + margin-left: 66.6666666667%; +} + +.row .col.pull-s8 { + right: 66.6666666667%; +} + +.row .col.push-s8 { + left: 66.6666666667%; +} + +.row .col.offset-s9 { + margin-left: 75%; +} + +.row .col.pull-s9 { + right: 75%; +} + +.row .col.push-s9 { + left: 75%; +} + +.row .col.offset-s10 { + margin-left: 83.3333333333%; +} + +.row .col.pull-s10 { + right: 83.3333333333%; +} + +.row .col.push-s10 { + left: 83.3333333333%; +} + +.row .col.offset-s11 { + margin-left: 91.6666666667%; +} + +.row .col.pull-s11 { + right: 91.6666666667%; +} + +.row .col.push-s11 { + left: 91.6666666667%; +} + +.row .col.offset-s12 { + margin-left: 100%; +} + +.row .col.pull-s12 { + right: 100%; +} + +.row .col.push-s12 { + left: 100%; +} + +@media only screen and (min-width: 601px) { + .row .col.m1 { + width: 8.3333333333%; + margin-left: auto; + left: auto; + right: auto; + } + .row .col.m2 { + width: 16.6666666667%; + margin-left: auto; + left: auto; + right: auto; + } + .row .col.m3 { + width: 25%; + margin-left: auto; + left: auto; + right: auto; + } + .row .col.m4 { + width: 33.3333333333%; + margin-left: auto; + left: auto; + right: auto; + } + .row .col.m5 { + width: 41.6666666667%; + margin-left: auto; + left: auto; + right: auto; + } + .row .col.m6 { + width: 50%; + margin-left: auto; + left: auto; + right: auto; + } + .row .col.m7 { + width: 58.3333333333%; + margin-left: auto; + left: auto; + right: auto; + } + .row .col.m8 { + width: 66.6666666667%; + margin-left: auto; + left: auto; + right: auto; + } + .row .col.m9 { + width: 75%; + margin-left: auto; + left: auto; + right: auto; + } + .row .col.m10 { + width: 83.3333333333%; + margin-left: auto; + left: auto; + right: auto; + } + .row .col.m11 { + width: 91.6666666667%; + margin-left: auto; + left: auto; + right: auto; + } + .row .col.m12 { + width: 100%; + margin-left: auto; + left: auto; + right: auto; + } + .row .col.offset-m1 { + margin-left: 8.3333333333%; + } + .row .col.pull-m1 { + right: 8.3333333333%; + } + .row .col.push-m1 { + left: 8.3333333333%; + } + .row .col.offset-m2 { + margin-left: 16.6666666667%; + } + .row .col.pull-m2 { + right: 16.6666666667%; + } + .row .col.push-m2 { + left: 16.6666666667%; + } + .row .col.offset-m3 { + margin-left: 25%; + } + .row .col.pull-m3 { + right: 25%; + } + .row .col.push-m3 { + left: 25%; + } + .row .col.offset-m4 { + margin-left: 33.3333333333%; + } + .row .col.pull-m4 { + right: 33.3333333333%; + } + .row .col.push-m4 { + left: 33.3333333333%; + } + .row .col.offset-m5 { + margin-left: 41.6666666667%; + } + .row .col.pull-m5 { + right: 41.6666666667%; + } + .row .col.push-m5 { + left: 41.6666666667%; + } + .row .col.offset-m6 { + margin-left: 50%; + } + .row .col.pull-m6 { + right: 50%; + } + .row .col.push-m6 { + left: 50%; + } + .row .col.offset-m7 { + margin-left: 58.3333333333%; + } + .row .col.pull-m7 { + right: 58.3333333333%; + } + .row .col.push-m7 { + left: 58.3333333333%; + } + .row .col.offset-m8 { + margin-left: 66.6666666667%; + } + .row .col.pull-m8 { + right: 66.6666666667%; + } + .row .col.push-m8 { + left: 66.6666666667%; + } + .row .col.offset-m9 { + margin-left: 75%; + } + .row .col.pull-m9 { + right: 75%; + } + .row .col.push-m9 { + left: 75%; + } + .row .col.offset-m10 { + margin-left: 83.3333333333%; + } + .row .col.pull-m10 { + right: 83.3333333333%; + } + .row .col.push-m10 { + left: 83.3333333333%; + } + .row .col.offset-m11 { + margin-left: 91.6666666667%; + } + .row .col.pull-m11 { + right: 91.6666666667%; + } + .row .col.push-m11 { + left: 91.6666666667%; + } + .row .col.offset-m12 { + margin-left: 100%; + } + .row .col.pull-m12 { + right: 100%; + } + .row .col.push-m12 { + left: 100%; + } +} + +@media only screen and (min-width: 993px) { + .row .col.l1 { + width: 8.3333333333%; + margin-left: auto; + left: auto; + right: auto; + } + .row .col.l2 { + width: 16.6666666667%; + margin-left: auto; + left: auto; + right: auto; + } + .row .col.l3 { + width: 25%; + margin-left: auto; + left: auto; + right: auto; + } + .row .col.l4 { + width: 33.3333333333%; + margin-left: auto; + left: auto; + right: auto; + } + .row .col.l5 { + width: 41.6666666667%; + margin-left: auto; + left: auto; + right: auto; + } + .row .col.l6 { + width: 50%; + margin-left: auto; + left: auto; + right: auto; + } + .row .col.l7 { + width: 58.3333333333%; + margin-left: auto; + left: auto; + right: auto; + } + .row .col.l8 { + width: 66.6666666667%; + margin-left: auto; + left: auto; + right: auto; + } + .row .col.l9 { + width: 75%; + margin-left: auto; + left: auto; + right: auto; + } + .row .col.l10 { + width: 83.3333333333%; + margin-left: auto; + left: auto; + right: auto; + } + .row .col.l11 { + width: 91.6666666667%; + margin-left: auto; + left: auto; + right: auto; + } + .row .col.l12 { + width: 100%; + margin-left: auto; + left: auto; + right: auto; + } + .row .col.offset-l1 { + margin-left: 8.3333333333%; + } + .row .col.pull-l1 { + right: 8.3333333333%; + } + .row .col.push-l1 { + left: 8.3333333333%; + } + .row .col.offset-l2 { + margin-left: 16.6666666667%; + } + .row .col.pull-l2 { + right: 16.6666666667%; + } + .row .col.push-l2 { + left: 16.6666666667%; + } + .row .col.offset-l3 { + margin-left: 25%; + } + .row .col.pull-l3 { + right: 25%; + } + .row .col.push-l3 { + left: 25%; + } + .row .col.offset-l4 { + margin-left: 33.3333333333%; + } + .row .col.pull-l4 { + right: 33.3333333333%; + } + .row .col.push-l4 { + left: 33.3333333333%; + } + .row .col.offset-l5 { + margin-left: 41.6666666667%; + } + .row .col.pull-l5 { + right: 41.6666666667%; + } + .row .col.push-l5 { + left: 41.6666666667%; + } + .row .col.offset-l6 { + margin-left: 50%; + } + .row .col.pull-l6 { + right: 50%; + } + .row .col.push-l6 { + left: 50%; + } + .row .col.offset-l7 { + margin-left: 58.3333333333%; + } + .row .col.pull-l7 { + right: 58.3333333333%; + } + .row .col.push-l7 { + left: 58.3333333333%; + } + .row .col.offset-l8 { + margin-left: 66.6666666667%; + } + .row .col.pull-l8 { + right: 66.6666666667%; + } + .row .col.push-l8 { + left: 66.6666666667%; + } + .row .col.offset-l9 { + margin-left: 75%; + } + .row .col.pull-l9 { + right: 75%; + } + .row .col.push-l9 { + left: 75%; + } + .row .col.offset-l10 { + margin-left: 83.3333333333%; + } + .row .col.pull-l10 { + right: 83.3333333333%; + } + .row .col.push-l10 { + left: 83.3333333333%; + } + .row .col.offset-l11 { + margin-left: 91.6666666667%; + } + .row .col.pull-l11 { + right: 91.6666666667%; + } + .row .col.push-l11 { + left: 91.6666666667%; + } + .row .col.offset-l12 { + margin-left: 100%; + } + .row .col.pull-l12 { + right: 100%; + } + .row .col.push-l12 { + left: 100%; + } +} + +@media only screen and (min-width: 1201px) { + .row .col.xl1 { + width: 8.3333333333%; + margin-left: auto; + left: auto; + right: auto; + } + .row .col.xl2 { + width: 16.6666666667%; + margin-left: auto; + left: auto; + right: auto; + } + .row .col.xl3 { + width: 25%; + margin-left: auto; + left: auto; + right: auto; + } + .row .col.xl4 { + width: 33.3333333333%; + margin-left: auto; + left: auto; + right: auto; + } + .row .col.xl5 { + width: 41.6666666667%; + margin-left: auto; + left: auto; + right: auto; + } + .row .col.xl6 { + width: 50%; + margin-left: auto; + left: auto; + right: auto; + } + .row .col.xl7 { + width: 58.3333333333%; + margin-left: auto; + left: auto; + right: auto; + } + .row .col.xl8 { + width: 66.6666666667%; + margin-left: auto; + left: auto; + right: auto; + } + .row .col.xl9 { + width: 75%; + margin-left: auto; + left: auto; + right: auto; + } + .row .col.xl10 { + width: 83.3333333333%; + margin-left: auto; + left: auto; + right: auto; + } + .row .col.xl11 { + width: 91.6666666667%; + margin-left: auto; + left: auto; + right: auto; + } + .row .col.xl12 { + width: 100%; + margin-left: auto; + left: auto; + right: auto; + } + .row .col.offset-xl1 { + margin-left: 8.3333333333%; + } + .row .col.pull-xl1 { + right: 8.3333333333%; + } + .row .col.push-xl1 { + left: 8.3333333333%; + } + .row .col.offset-xl2 { + margin-left: 16.6666666667%; + } + .row .col.pull-xl2 { + right: 16.6666666667%; + } + .row .col.push-xl2 { + left: 16.6666666667%; + } + .row .col.offset-xl3 { + margin-left: 25%; + } + .row .col.pull-xl3 { + right: 25%; + } + .row .col.push-xl3 { + left: 25%; + } + .row .col.offset-xl4 { + margin-left: 33.3333333333%; + } + .row .col.pull-xl4 { + right: 33.3333333333%; + } + .row .col.push-xl4 { + left: 33.3333333333%; + } + .row .col.offset-xl5 { + margin-left: 41.6666666667%; + } + .row .col.pull-xl5 { + right: 41.6666666667%; + } + .row .col.push-xl5 { + left: 41.6666666667%; + } + .row .col.offset-xl6 { + margin-left: 50%; + } + .row .col.pull-xl6 { + right: 50%; + } + .row .col.push-xl6 { + left: 50%; + } + .row .col.offset-xl7 { + margin-left: 58.3333333333%; + } + .row .col.pull-xl7 { + right: 58.3333333333%; + } + .row .col.push-xl7 { + left: 58.3333333333%; + } + .row .col.offset-xl8 { + margin-left: 66.6666666667%; + } + .row .col.pull-xl8 { + right: 66.6666666667%; + } + .row .col.push-xl8 { + left: 66.6666666667%; + } + .row .col.offset-xl9 { + margin-left: 75%; + } + .row .col.pull-xl9 { + right: 75%; + } + .row .col.push-xl9 { + left: 75%; + } + .row .col.offset-xl10 { + margin-left: 83.3333333333%; + } + .row .col.pull-xl10 { + right: 83.3333333333%; + } + .row .col.push-xl10 { + left: 83.3333333333%; + } + .row .col.offset-xl11 { + margin-left: 91.6666666667%; + } + .row .col.pull-xl11 { + right: 91.6666666667%; + } + .row .col.push-xl11 { + left: 91.6666666667%; + } + .row .col.offset-xl12 { + margin-left: 100%; + } + .row .col.pull-xl12 { + right: 100%; + } + .row .col.push-xl12 { + left: 100%; + } +} + +nav { + color: #fff; + background-color: #ee6e73; + width: 100%; + height: 56px; + line-height: 56px; +} + +nav.nav-extended { + height: auto; +} + +nav.nav-extended .nav-wrapper { + min-height: 56px; + height: auto; +} + +nav.nav-extended .nav-content { + position: relative; + line-height: normal; +} + +nav a { + color: #fff; +} + +nav i, +nav [class^="mdi-"], nav [class*="mdi-"], +nav i.material-icons { + display: block; + font-size: 24px; + height: 56px; + line-height: 56px; +} + +nav .nav-wrapper { + position: relative; + height: 100%; +} + +@media only screen and (min-width: 993px) { + nav a.sidenav-trigger { + display: none; + } +} + +nav .sidenav-trigger { + float: left; + position: relative; + z-index: 1; + height: 56px; + margin: 0 18px; +} + +nav .sidenav-trigger i { + height: 56px; + line-height: 56px; +} + +nav .brand-logo { + position: absolute; + color: #fff; + display: inline-block; + font-size: 2.1rem; + padding: 0; +} + +nav .brand-logo.center { + left: 50%; + -webkit-transform: translateX(-50%); + transform: translateX(-50%); +} + +@media only screen and (max-width: 992px) { + nav .brand-logo { + left: 50%; + -webkit-transform: translateX(-50%); + transform: translateX(-50%); + } + nav .brand-logo.left, nav .brand-logo.right { + padding: 0; + -webkit-transform: none; + transform: none; + } + nav .brand-logo.left { + left: 0.5rem; + } + nav .brand-logo.right { + right: 0.5rem; + left: auto; + } +} + +nav .brand-logo.right { + right: 0.5rem; + padding: 0; +} + +nav .brand-logo i, +nav .brand-logo [class^="mdi-"], nav .brand-logo [class*="mdi-"], +nav .brand-logo i.material-icons { + float: left; + margin-right: 15px; +} + +nav .nav-title { + display: inline-block; + font-size: 32px; + padding: 28px 0; +} + +nav ul { + margin: 0; +} + +nav ul li { + -webkit-transition: background-color .3s; + transition: background-color .3s; + float: left; + padding: 0; +} + +nav ul li.active { + background-color: rgba(0, 0, 0, 0.1); +} + +nav ul a { + -webkit-transition: background-color .3s; + transition: background-color .3s; + font-size: 1rem; + color: #fff; + display: block; + padding: 0 15px; + cursor: pointer; +} + +nav ul a.btn, nav ul a.btn-large, nav ul a.btn-small, nav ul a.btn-large, nav ul a.btn-flat, nav ul a.btn-floating { + margin-top: -2px; + margin-left: 15px; + margin-right: 15px; +} + +nav ul a.btn > .material-icons, nav ul a.btn-large > .material-icons, nav ul a.btn-small > .material-icons, nav ul a.btn-large > .material-icons, nav ul a.btn-flat > .material-icons, nav ul a.btn-floating > .material-icons { + height: inherit; + line-height: inherit; +} + +nav ul a:hover { + background-color: rgba(0, 0, 0, 0.1); +} + +nav ul.left { + float: left; +} + +nav form { + height: 100%; +} + +nav .input-field { + margin: 0; + height: 100%; +} + +nav .input-field input { + height: 100%; + font-size: 1.2rem; + border: none; + padding-left: 2rem; +} + +nav .input-field input:focus, nav .input-field input[type=text]:valid, nav .input-field input[type=password]:valid, nav .input-field input[type=email]:valid, nav .input-field input[type=url]:valid, nav .input-field input[type=date]:valid { + border: none; + -webkit-box-shadow: none; + box-shadow: none; +} + +nav .input-field label { + top: 0; + left: 0; +} + +nav .input-field label i { + color: rgba(255, 255, 255, 0.7); + -webkit-transition: color .3s; + transition: color .3s; +} + +nav .input-field label.active i { + color: #fff; +} + +.navbar-fixed { + position: relative; + height: 56px; + z-index: 997; +} + +.navbar-fixed nav { + position: fixed; +} + +@media only screen and (min-width: 601px) { + nav.nav-extended .nav-wrapper { + min-height: 64px; + } + nav, nav .nav-wrapper i, nav a.sidenav-trigger, nav a.sidenav-trigger i { + height: 64px; + line-height: 64px; + } + .navbar-fixed { + height: 64px; + } +} + +a { + text-decoration: none; +} + +html { + line-height: 1.5; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; + font-weight: normal; + color: rgba(0, 0, 0, 0.87); +} + +@media only screen and (min-width: 0) { + html { + font-size: 14px; + } +} + +@media only screen and (min-width: 992px) { + html { + font-size: 14.5px; + } +} + +@media only screen and (min-width: 1200px) { + html { + font-size: 15px; + } +} + +h1, h2, h3, h4, h5, h6 { + font-weight: 400; + line-height: 1.3; +} + +h1 a, h2 a, h3 a, h4 a, h5 a, h6 a { + font-weight: inherit; +} + +h1 { + font-size: 4.2rem; + line-height: 110%; + margin: 2.8rem 0 1.68rem 0; +} + +h2 { + font-size: 3.56rem; + line-height: 110%; + margin: 2.3733333333rem 0 1.424rem 0; +} + +h3 { + font-size: 2.92rem; + line-height: 110%; + margin: 1.9466666667rem 0 1.168rem 0; +} + +h4 { + font-size: 2.28rem; + line-height: 110%; + margin: 1.52rem 0 0.912rem 0; +} + +h5 { + font-size: 1.64rem; + line-height: 110%; + margin: 1.0933333333rem 0 0.656rem 0; +} + +h6 { + font-size: 1.15rem; + line-height: 110%; + margin: 0.7666666667rem 0 0.46rem 0; +} + +em { + font-style: italic; +} + +strong { + font-weight: 500; +} + +small { + font-size: 75%; +} + +.light { + font-weight: 300; +} + +.thin { + font-weight: 200; +} + +@media only screen and (min-width: 360px) { + .flow-text { + font-size: 1.2rem; + } +} + +@media only screen and (min-width: 390px) { + .flow-text { + font-size: 1.224rem; + } +} + +@media only screen and (min-width: 420px) { + .flow-text { + font-size: 1.248rem; + } +} + +@media only screen and (min-width: 450px) { + .flow-text { + font-size: 1.272rem; + } +} + +@media only screen and (min-width: 480px) { + .flow-text { + font-size: 1.296rem; + } +} + +@media only screen and (min-width: 510px) { + .flow-text { + font-size: 1.32rem; + } +} + +@media only screen and (min-width: 540px) { + .flow-text { + font-size: 1.344rem; + } +} + +@media only screen and (min-width: 570px) { + .flow-text { + font-size: 1.368rem; + } +} + +@media only screen and (min-width: 600px) { + .flow-text { + font-size: 1.392rem; + } +} + +@media only screen and (min-width: 630px) { + .flow-text { + font-size: 1.416rem; + } +} + +@media only screen and (min-width: 660px) { + .flow-text { + font-size: 1.44rem; + } +} + +@media only screen and (min-width: 690px) { + .flow-text { + font-size: 1.464rem; + } +} + +@media only screen and (min-width: 720px) { + .flow-text { + font-size: 1.488rem; + } +} + +@media only screen and (min-width: 750px) { + .flow-text { + font-size: 1.512rem; + } +} + +@media only screen and (min-width: 780px) { + .flow-text { + font-size: 1.536rem; + } +} + +@media only screen and (min-width: 810px) { + .flow-text { + font-size: 1.56rem; + } +} + +@media only screen and (min-width: 840px) { + .flow-text { + font-size: 1.584rem; + } +} + +@media only screen and (min-width: 870px) { + .flow-text { + font-size: 1.608rem; + } +} + +@media only screen and (min-width: 900px) { + .flow-text { + font-size: 1.632rem; + } +} + +@media only screen and (min-width: 930px) { + .flow-text { + font-size: 1.656rem; + } +} + +@media only screen and (min-width: 960px) { + .flow-text { + font-size: 1.68rem; + } +} + +@media only screen and (max-width: 360px) { + .flow-text { + font-size: 1.2rem; + } +} + +.scale-transition { + -webkit-transition: -webkit-transform 0.3s cubic-bezier(0.53, 0.01, 0.36, 1.63) !important; + transition: -webkit-transform 0.3s cubic-bezier(0.53, 0.01, 0.36, 1.63) !important; + transition: transform 0.3s cubic-bezier(0.53, 0.01, 0.36, 1.63) !important; + transition: transform 0.3s cubic-bezier(0.53, 0.01, 0.36, 1.63), -webkit-transform 0.3s cubic-bezier(0.53, 0.01, 0.36, 1.63) !important; +} + +.scale-transition.scale-out { + -webkit-transform: scale(0); + transform: scale(0); + -webkit-transition: -webkit-transform .2s !important; + transition: -webkit-transform .2s !important; + transition: transform .2s !important; + transition: transform .2s, -webkit-transform .2s !important; +} + +.scale-transition.scale-in { + -webkit-transform: scale(1); + transform: scale(1); +} + +.card-panel { + -webkit-transition: -webkit-box-shadow .25s; + transition: -webkit-box-shadow .25s; + transition: box-shadow .25s; + transition: box-shadow .25s, -webkit-box-shadow .25s; + padding: 24px; + margin: 0.5rem 0 1rem 0; + border-radius: 2px; + background-color: #fff; +} + +.card { + position: relative; + margin: 0.5rem 0 1rem 0; + background-color: #fff; + -webkit-transition: -webkit-box-shadow .25s; + transition: -webkit-box-shadow .25s; + transition: box-shadow .25s; + transition: box-shadow .25s, -webkit-box-shadow .25s; + border-radius: 2px; +} + +.card .card-title { + font-size: 24px; + font-weight: 300; +} + +.card .card-title.activator { + cursor: pointer; +} + +.card.small, .card.medium, .card.large { + position: relative; +} + +.card.small .card-image, .card.medium .card-image, .card.large .card-image { + max-height: 60%; + overflow: hidden; +} + +.card.small .card-image + .card-content, .card.medium .card-image + .card-content, .card.large .card-image + .card-content { + max-height: 40%; +} + +.card.small .card-content, .card.medium .card-content, .card.large .card-content { + max-height: 100%; + overflow: hidden; +} + +.card.small .card-action, .card.medium .card-action, .card.large .card-action { + position: absolute; + bottom: 0; + left: 0; + right: 0; +} + +.card.small { + height: 300px; +} + +.card.medium { + height: 400px; +} + +.card.large { + height: 500px; +} + +.card.horizontal { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; +} + +.card.horizontal.small .card-image, .card.horizontal.medium .card-image, .card.horizontal.large .card-image { + height: 100%; + max-height: none; + overflow: visible; +} + +.card.horizontal.small .card-image img, .card.horizontal.medium .card-image img, .card.horizontal.large .card-image img { + height: 100%; +} + +.card.horizontal .card-image { + max-width: 50%; +} + +.card.horizontal .card-image img { + border-radius: 2px 0 0 2px; + max-width: 100%; + width: auto; +} + +.card.horizontal .card-stacked { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-flex: 1; + -webkit-flex: 1; + -ms-flex: 1; + flex: 1; + position: relative; +} + +.card.horizontal .card-stacked .card-content { + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; +} + +.card.sticky-action .card-action { + z-index: 2; +} + +.card.sticky-action .card-reveal { + z-index: 1; + padding-bottom: 64px; +} + +.card .card-image { + position: relative; +} + +.card .card-image img { + display: block; + border-radius: 2px 2px 0 0; + position: relative; + left: 0; + right: 0; + top: 0; + bottom: 0; + width: 100%; +} + +.card .card-image .card-title { + color: #fff; + position: absolute; + bottom: 0; + left: 0; + max-width: 100%; + padding: 24px; +} + +.card .card-content { + padding: 24px; + border-radius: 0 0 2px 2px; +} + +.card .card-content p { + margin: 0; +} + +.card .card-content .card-title { + display: block; + line-height: 32px; + margin-bottom: 8px; +} + +.card .card-content .card-title i { + line-height: 32px; +} + +.card .card-action { + background-color: inherit; + border-top: 1px solid rgba(160, 160, 160, 0.2); + position: relative; + padding: 16px 24px; +} + +.card .card-action:last-child { + border-radius: 0 0 2px 2px; +} + +.card .card-action a:not(.btn):not(.btn-large):not(.btn-small):not(.btn-large):not(.btn-floating) { + color: #ffab40; + margin-right: 24px; + -webkit-transition: color .3s ease; + transition: color .3s ease; + text-transform: uppercase; +} + +.card .card-action a:not(.btn):not(.btn-large):not(.btn-small):not(.btn-large):not(.btn-floating):hover { + color: #ffd8a6; +} + +.card .card-reveal { + padding: 24px; + position: absolute; + background-color: #fff; + width: 100%; + overflow-y: auto; + left: 0; + top: 100%; + height: 100%; + z-index: 3; + display: none; +} + +.card .card-reveal .card-title { + cursor: pointer; + display: block; +} + +#toast-container { + display: block; + position: fixed; + z-index: 10000; +} + +@media only screen and (max-width: 600px) { + #toast-container { + min-width: 100%; + bottom: 0%; + } +} + +@media only screen and (min-width: 601px) and (max-width: 992px) { + #toast-container { + left: 5%; + bottom: 7%; + max-width: 90%; + } +} + +@media only screen and (min-width: 993px) { + #toast-container { + top: 10%; + right: 7%; + max-width: 86%; + } +} + +.toast { + border-radius: 2px; + top: 35px; + width: auto; + margin-top: 10px; + position: relative; + max-width: 100%; + height: auto; + min-height: 48px; + line-height: 1.5em; + background-color: #323232; + padding: 10px 25px; + font-size: 1.1rem; + font-weight: 300; + color: #fff; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: justify; + -webkit-justify-content: space-between; + -ms-flex-pack: justify; + justify-content: space-between; + cursor: default; +} + +.toast .toast-action { + color: #eeff41; + font-weight: 500; + margin-right: -25px; + margin-left: 3rem; +} + +.toast.rounded { + border-radius: 24px; +} + +@media only screen and (max-width: 600px) { + .toast { + width: 100%; + border-radius: 0; + } +} + +.tabs { + position: relative; + overflow-x: auto; + overflow-y: hidden; + height: 48px; + width: 100%; + background-color: #fff; + margin: 0 auto; + white-space: nowrap; +} + +.tabs.tabs-transparent { + background-color: transparent; +} + +.tabs.tabs-transparent .tab a, +.tabs.tabs-transparent .tab.disabled a, +.tabs.tabs-transparent .tab.disabled a:hover { + color: rgba(255, 255, 255, 0.7); +} + +.tabs.tabs-transparent .tab a:hover, +.tabs.tabs-transparent .tab a.active { + color: #fff; +} + +.tabs.tabs-transparent .indicator { + background-color: #fff; +} + +.tabs.tabs-fixed-width { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; +} + +.tabs.tabs-fixed-width .tab { + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; +} + +.tabs .tab { + display: inline-block; + text-align: center; + line-height: 48px; + height: 48px; + padding: 0; + margin: 0; + text-transform: uppercase; +} + +.tabs .tab a { + color: rgba(238, 110, 115, 0.7); + display: block; + width: 100%; + height: 100%; + padding: 0 24px; + font-size: 14px; + text-overflow: ellipsis; + overflow: hidden; + -webkit-transition: color .28s ease, background-color .28s ease; + transition: color .28s ease, background-color .28s ease; +} + +.tabs .tab a:focus, .tabs .tab a:focus.active { + background-color: rgba(246, 178, 181, 0.2); + outline: none; +} + +.tabs .tab a:hover, .tabs .tab a.active { + background-color: transparent; + color: #ee6e73; +} + +.tabs .tab.disabled a, +.tabs .tab.disabled a:hover { + color: rgba(238, 110, 115, 0.4); + cursor: default; +} + +.tabs .indicator { + position: absolute; + bottom: 0; + height: 2px; + background-color: #f6b2b5; + will-change: left, right; +} + +@media only screen and (max-width: 992px) { + .tabs { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + } + .tabs .tab { + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; + } + .tabs .tab a { + padding: 0 12px; + } +} + +.material-tooltip { + padding: 10px 8px; + font-size: 1rem; + z-index: 2000; + background-color: transparent; + border-radius: 2px; + color: #fff; + min-height: 36px; + line-height: 120%; + opacity: 0; + position: absolute; + text-align: center; + max-width: calc(100% - 4px); + overflow: hidden; + left: 0; + top: 0; + pointer-events: none; + visibility: hidden; + background-color: #323232; +} + +.backdrop { + position: absolute; + opacity: 0; + height: 7px; + width: 14px; + border-radius: 0 0 50% 50%; + background-color: #323232; + z-index: -1; + -webkit-transform-origin: 50% 0%; + transform-origin: 50% 0%; + visibility: hidden; +} + +.btn, .btn-large, .btn-small, +.btn-flat { + border: none; + border-radius: 2px; + display: inline-block; + height: 36px; + line-height: 36px; + padding: 0 16px; + text-transform: uppercase; + vertical-align: middle; + -webkit-tap-highlight-color: transparent; +} + +.btn.disabled, .disabled.btn-large, .disabled.btn-small, +.btn-floating.disabled, +.btn-large.disabled, +.btn-small.disabled, +.btn-flat.disabled, +.btn:disabled, +.btn-large:disabled, +.btn-small:disabled, +.btn-floating:disabled, +.btn-large:disabled, +.btn-small:disabled, +.btn-flat:disabled, +.btn[disabled], +.btn-large[disabled], +.btn-small[disabled], +.btn-floating[disabled], +.btn-large[disabled], +.btn-small[disabled], +.btn-flat[disabled] { + pointer-events: none; + background-color: #DFDFDF !important; + -webkit-box-shadow: none; + box-shadow: none; + color: #9F9F9F !important; + cursor: default; +} + +.btn.disabled:hover, .disabled.btn-large:hover, .disabled.btn-small:hover, +.btn-floating.disabled:hover, +.btn-large.disabled:hover, +.btn-small.disabled:hover, +.btn-flat.disabled:hover, +.btn:disabled:hover, +.btn-large:disabled:hover, +.btn-small:disabled:hover, +.btn-floating:disabled:hover, +.btn-large:disabled:hover, +.btn-small:disabled:hover, +.btn-flat:disabled:hover, +.btn[disabled]:hover, +.btn-large[disabled]:hover, +.btn-small[disabled]:hover, +.btn-floating[disabled]:hover, +.btn-large[disabled]:hover, +.btn-small[disabled]:hover, +.btn-flat[disabled]:hover { + background-color: #DFDFDF !important; + color: #9F9F9F !important; +} + +.btn, .btn-large, .btn-small, +.btn-floating, +.btn-large, +.btn-small, +.btn-flat { + font-size: 14px; + outline: 0; +} + +.btn i, .btn-large i, .btn-small i, +.btn-floating i, +.btn-large i, +.btn-small i, +.btn-flat i { + font-size: 1.3rem; + line-height: inherit; +} + +.btn:focus, .btn-large:focus, .btn-small:focus, +.btn-floating:focus { + background-color: #1d7d74; +} + +.btn, .btn-large, .btn-small { + text-decoration: none; + color: #fff; + background-color: #26a69a; + text-align: center; + letter-spacing: .5px; + -webkit-transition: background-color .2s ease-out; + transition: background-color .2s ease-out; + cursor: pointer; +} + +.btn:hover, .btn-large:hover, .btn-small:hover { + background-color: #2bbbad; +} + +.btn-floating { + display: inline-block; + color: #fff; + position: relative; + overflow: hidden; + z-index: 1; + width: 40px; + height: 40px; + line-height: 40px; + padding: 0; + background-color: #26a69a; + border-radius: 50%; + -webkit-transition: background-color .3s; + transition: background-color .3s; + cursor: pointer; + vertical-align: middle; +} + +.btn-floating:hover { + background-color: #26a69a; +} + +.btn-floating:before { + border-radius: 0; +} + +.btn-floating.btn-large { + width: 56px; + height: 56px; + padding: 0; +} + +.btn-floating.btn-large.halfway-fab { + bottom: -28px; +} + +.btn-floating.btn-large i { + line-height: 56px; +} + +.btn-floating.btn-small { + width: 32.4px; + height: 32.4px; +} + +.btn-floating.btn-small.halfway-fab { + bottom: -16.2px; +} + +.btn-floating.btn-small i { + line-height: 32.4px; +} + +.btn-floating.halfway-fab { + position: absolute; + right: 24px; + bottom: -20px; +} + +.btn-floating.halfway-fab.left { + right: auto; + left: 24px; +} + +.btn-floating i { + width: inherit; + display: inline-block; + text-align: center; + color: #fff; + font-size: 1.6rem; + line-height: 40px; +} + +button.btn-floating { + border: none; +} + +.fixed-action-btn { + position: fixed; + right: 23px; + bottom: 23px; + padding-top: 15px; + margin-bottom: 0; + z-index: 997; +} + +.fixed-action-btn.active ul { + visibility: visible; +} + +.fixed-action-btn.direction-left, .fixed-action-btn.direction-right { + padding: 0 0 0 15px; +} + +.fixed-action-btn.direction-left ul, .fixed-action-btn.direction-right ul { + text-align: right; + right: 64px; + top: 50%; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + height: 100%; + left: auto; + /*width 100% only goes to width of button container */ + width: 500px; +} + +.fixed-action-btn.direction-left ul li, .fixed-action-btn.direction-right ul li { + display: inline-block; + margin: 7.5px 15px 0 0; +} + +.fixed-action-btn.direction-right { + padding: 0 15px 0 0; +} + +.fixed-action-btn.direction-right ul { + text-align: left; + direction: rtl; + left: 64px; + right: auto; +} + +.fixed-action-btn.direction-right ul li { + margin: 7.5px 0 0 15px; +} + +.fixed-action-btn.direction-bottom { + padding: 0 0 15px 0; +} + +.fixed-action-btn.direction-bottom ul { + top: 64px; + bottom: auto; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: reverse; + -webkit-flex-direction: column-reverse; + -ms-flex-direction: column-reverse; + flex-direction: column-reverse; +} + +.fixed-action-btn.direction-bottom ul li { + margin: 15px 0 0 0; +} + +.fixed-action-btn.toolbar { + padding: 0; + height: 56px; +} + +.fixed-action-btn.toolbar.active > a i { + opacity: 0; +} + +.fixed-action-btn.toolbar ul { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + top: 0; + bottom: 0; + z-index: 1; +} + +.fixed-action-btn.toolbar ul li { + -webkit-box-flex: 1; + -webkit-flex: 1; + -ms-flex: 1; + flex: 1; + display: inline-block; + margin: 0; + height: 100%; + -webkit-transition: none; + transition: none; +} + +.fixed-action-btn.toolbar ul li a { + display: block; + overflow: hidden; + position: relative; + width: 100%; + height: 100%; + background-color: transparent; + -webkit-box-shadow: none; + box-shadow: none; + color: #fff; + line-height: 56px; + z-index: 1; +} + +.fixed-action-btn.toolbar ul li a i { + line-height: inherit; +} + +.fixed-action-btn ul { + left: 0; + right: 0; + text-align: center; + position: absolute; + bottom: 64px; + margin: 0; + visibility: hidden; +} + +.fixed-action-btn ul li { + margin-bottom: 15px; +} + +.fixed-action-btn ul a.btn-floating { + opacity: 0; +} + +.fixed-action-btn .fab-backdrop { + position: absolute; + top: 0; + left: 0; + z-index: -1; + width: 40px; + height: 40px; + background-color: #26a69a; + border-radius: 50%; + -webkit-transform: scale(0); + transform: scale(0); +} + +.btn-flat { + -webkit-box-shadow: none; + box-shadow: none; + background-color: transparent; + color: #343434; + cursor: pointer; + -webkit-transition: background-color .2s; + transition: background-color .2s; +} + +.btn-flat:focus, .btn-flat:hover { + -webkit-box-shadow: none; + box-shadow: none; +} + +.btn-flat:focus { + background-color: rgba(0, 0, 0, 0.1); +} + +.btn-flat.disabled, .btn-flat.btn-flat[disabled] { + background-color: transparent !important; + color: #b3b2b2 !important; + cursor: default; +} + +.btn-large { + height: 54px; + line-height: 54px; + font-size: 15px; + padding: 0 28px; +} + +.btn-large i { + font-size: 1.6rem; +} + +.btn-small { + height: 32.4px; + line-height: 32.4px; + font-size: 13px; +} + +.btn-small i { + font-size: 1.2rem; +} + +.btn-block { + display: block; +} + +.dropdown-content { + background-color: #fff; + margin: 0; + display: none; + min-width: 100px; + overflow-y: auto; + opacity: 0; + position: absolute; + left: 0; + top: 0; + z-index: 9999; + -webkit-transform-origin: 0 0; + transform-origin: 0 0; +} + +.dropdown-content:focus { + outline: 0; +} + +.dropdown-content li { + clear: both; + color: rgba(0, 0, 0, 0.87); + cursor: pointer; + min-height: 50px; + line-height: 1.5rem; + width: 100%; + text-align: left; +} + +.dropdown-content li:hover, .dropdown-content li.active { + background-color: #eee; +} + +.dropdown-content li:focus { + outline: none; +} + +.dropdown-content li.divider { + min-height: 0; + height: 1px; +} + +.dropdown-content li > a, .dropdown-content li > span { + font-size: 16px; + color: #26a69a; + display: block; + line-height: 22px; + padding: 14px 16px; +} + +.dropdown-content li > span > label { + top: 1px; + left: 0; + height: 18px; +} + +.dropdown-content li > a > i { + height: inherit; + line-height: inherit; + float: left; + margin: 0 24px 0 0; + width: 24px; +} + +body.keyboard-focused .dropdown-content li:focus { + background-color: #dadada; +} + +.input-field.col .dropdown-content [type="checkbox"] + label { + top: 1px; + left: 0; + height: 18px; + -webkit-transform: none; + transform: none; +} + +.dropdown-trigger { + cursor: pointer; +} + +/*! + * Waves v0.6.0 + * http://fian.my.id/Waves + * + * Copyright 2014 Alfiana E. Sibuea and other contributors + * Released under the MIT license + * https://github.com/fians/Waves/blob/master/LICENSE + */ +.waves-effect { + position: relative; + cursor: pointer; + display: inline-block; + overflow: hidden; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + -webkit-tap-highlight-color: transparent; + vertical-align: middle; + z-index: 1; + -webkit-transition: .3s ease-out; + transition: .3s ease-out; +} + +.waves-effect .waves-ripple { + position: absolute; + border-radius: 50%; + width: 20px; + height: 20px; + margin-top: -10px; + margin-left: -10px; + opacity: 0; + background: rgba(0, 0, 0, 0.2); + -webkit-transition: all 0.7s ease-out; + transition: all 0.7s ease-out; + -webkit-transition-property: opacity, -webkit-transform; + transition-property: opacity, -webkit-transform; + transition-property: transform, opacity; + transition-property: transform, opacity, -webkit-transform; + -webkit-transform: scale(0); + transform: scale(0); + pointer-events: none; +} + +.waves-effect.waves-light .waves-ripple { + background-color: rgba(255, 255, 255, 0.45); +} + +.waves-effect.waves-red .waves-ripple { + background-color: rgba(244, 67, 54, 0.7); +} + +.waves-effect.waves-yellow .waves-ripple { + background-color: rgba(255, 235, 59, 0.7); +} + +.waves-effect.waves-orange .waves-ripple { + background-color: rgba(255, 152, 0, 0.7); +} + +.waves-effect.waves-purple .waves-ripple { + background-color: rgba(156, 39, 176, 0.7); +} + +.waves-effect.waves-green .waves-ripple { + background-color: rgba(76, 175, 80, 0.7); +} + +.waves-effect.waves-teal .waves-ripple { + background-color: rgba(0, 150, 136, 0.7); +} + +.waves-effect input[type="button"], .waves-effect input[type="reset"], .waves-effect input[type="submit"] { + border: 0; + font-style: normal; + font-size: inherit; + text-transform: inherit; + background: none; +} + +.waves-effect img { + position: relative; + z-index: -1; +} + +.waves-notransition { + -webkit-transition: none !important; + transition: none !important; +} + +.waves-circle { + -webkit-transform: translateZ(0); + transform: translateZ(0); + -webkit-mask-image: -webkit-radial-gradient(circle, white 100%, black 100%); +} + +.waves-input-wrapper { + border-radius: 0.2em; + vertical-align: bottom; +} + +.waves-input-wrapper .waves-button-input { + position: relative; + top: 0; + left: 0; + z-index: 1; +} + +.waves-circle { + text-align: center; + width: 2.5em; + height: 2.5em; + line-height: 2.5em; + border-radius: 50%; + -webkit-mask-image: none; +} + +.waves-block { + display: block; +} + +/* Firefox Bug: link not triggered */ +.waves-effect .waves-ripple { + z-index: -1; +} + +.modal { + display: none; + position: fixed; + left: 0; + right: 0; + background-color: #fafafa; + padding: 0; + max-height: 70%; + width: 55%; + margin: auto; + overflow-y: auto; + border-radius: 2px; + will-change: top, opacity; +} + +.modal:focus { + outline: none; +} + +@media only screen and (max-width: 992px) { + .modal { + width: 80%; + } +} + +.modal h1, .modal h2, .modal h3, .modal h4 { + margin-top: 0; +} + +.modal .modal-content { + padding: 24px; +} + +.modal .modal-close { + cursor: pointer; +} + +.modal .modal-footer { + border-radius: 0 0 2px 2px; + background-color: #fafafa; + padding: 4px 6px; + height: 56px; + width: 100%; + text-align: right; +} + +.modal .modal-footer .btn, .modal .modal-footer .btn-large, .modal .modal-footer .btn-small, .modal .modal-footer .btn-flat { + margin: 6px 0; +} + +.modal-overlay { + position: fixed; + z-index: 999; + top: -25%; + left: 0; + bottom: 0; + right: 0; + height: 125%; + width: 100%; + background: #000; + display: none; + will-change: opacity; +} + +.modal.modal-fixed-footer { + padding: 0; + height: 70%; +} + +.modal.modal-fixed-footer .modal-content { + position: absolute; + height: calc(100% - 56px); + max-height: 100%; + width: 100%; + overflow-y: auto; +} + +.modal.modal-fixed-footer .modal-footer { + border-top: 1px solid rgba(0, 0, 0, 0.1); + position: absolute; + bottom: 0; +} + +.modal.bottom-sheet { + top: auto; + bottom: -100%; + margin: 0; + width: 100%; + max-height: 45%; + border-radius: 0; + will-change: bottom, opacity; +} + +.collapsible { + border-top: 1px solid #ddd; + border-right: 1px solid #ddd; + border-left: 1px solid #ddd; + margin: 0.5rem 0 1rem 0; +} + +.collapsible-header { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + cursor: pointer; + -webkit-tap-highlight-color: transparent; + line-height: 1.5; + padding: 1rem; + background-color: #fff; + border-bottom: 1px solid #ddd; +} + +.collapsible-header:focus { + outline: 0; +} + +.collapsible-header i { + width: 2rem; + font-size: 1.6rem; + display: inline-block; + text-align: center; + margin-right: 1rem; +} + +.keyboard-focused .collapsible-header:focus { + background-color: #eee; +} + +.collapsible-body { + display: none; + border-bottom: 1px solid #ddd; + -webkit-box-sizing: border-box; + box-sizing: border-box; + padding: 2rem; +} + +.sidenav .collapsible, +.sidenav.fixed .collapsible { + border: none; + -webkit-box-shadow: none; + box-shadow: none; +} + +.sidenav .collapsible li, +.sidenav.fixed .collapsible li { + padding: 0; +} + +.sidenav .collapsible-header, +.sidenav.fixed .collapsible-header { + background-color: transparent; + border: none; + line-height: inherit; + height: inherit; + padding: 0 16px; +} + +.sidenav .collapsible-header:hover, +.sidenav.fixed .collapsible-header:hover { + background-color: rgba(0, 0, 0, 0.05); +} + +.sidenav .collapsible-header i, +.sidenav.fixed .collapsible-header i { + line-height: inherit; +} + +.sidenav .collapsible-body, +.sidenav.fixed .collapsible-body { + border: 0; + background-color: #fff; +} + +.sidenav .collapsible-body li a, +.sidenav.fixed .collapsible-body li a { + padding: 0 23.5px 0 31px; +} + +.collapsible.popout { + border: none; + -webkit-box-shadow: none; + box-shadow: none; +} + +.collapsible.popout > li { + -webkit-box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 2px 10px 0 rgba(0, 0, 0, 0.12); + box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 2px 10px 0 rgba(0, 0, 0, 0.12); + margin: 0 24px; + -webkit-transition: margin 0.35s cubic-bezier(0.25, 0.46, 0.45, 0.94); + transition: margin 0.35s cubic-bezier(0.25, 0.46, 0.45, 0.94); +} + +.collapsible.popout > li.active { + -webkit-box-shadow: 0 5px 11px 0 rgba(0, 0, 0, 0.18), 0 4px 15px 0 rgba(0, 0, 0, 0.15); + box-shadow: 0 5px 11px 0 rgba(0, 0, 0, 0.18), 0 4px 15px 0 rgba(0, 0, 0, 0.15); + margin: 16px 0; +} + +.chip { + display: inline-block; + height: 32px; + font-size: 13px; + font-weight: 500; + color: rgba(0, 0, 0, 0.6); + line-height: 32px; + padding: 0 12px; + border-radius: 16px; + background-color: #e4e4e4; + margin-bottom: 5px; + margin-right: 5px; +} + +.chip:focus { + outline: none; + background-color: #26a69a; + color: #fff; +} + +.chip > img { + float: left; + margin: 0 8px 0 -12px; + height: 32px; + width: 32px; + border-radius: 50%; +} + +.chip .close { + cursor: pointer; + float: right; + font-size: 16px; + line-height: 32px; + padding-left: 8px; +} + +.chips { + border: none; + border-bottom: 1px solid #9e9e9e; + -webkit-box-shadow: none; + box-shadow: none; + margin: 0 0 8px 0; + min-height: 45px; + outline: none; + -webkit-transition: all .3s; + transition: all .3s; +} + +.chips.focus { + border-bottom: 1px solid #26a69a; + -webkit-box-shadow: 0 1px 0 0 #26a69a; + box-shadow: 0 1px 0 0 #26a69a; +} + +.chips:hover { + cursor: text; +} + +.chips .input { + background: none; + border: 0; + color: rgba(0, 0, 0, 0.6); + display: inline-block; + font-size: 16px; + height: 3rem; + line-height: 32px; + outline: 0; + margin: 0; + padding: 0 !important; + width: 120px !important; +} + +.chips .input:focus { + border: 0 !important; + -webkit-box-shadow: none !important; + box-shadow: none !important; +} + +.chips .autocomplete-content { + margin-top: 0; + margin-bottom: 0; +} + +.prefix ~ .chips { + margin-left: 3rem; + width: 92%; + width: calc(100% - 3rem); +} + +.chips:empty ~ label { + font-size: 0.8rem; + -webkit-transform: translateY(-140%); + transform: translateY(-140%); +} + +.materialboxed { + display: block; + cursor: -webkit-zoom-in; + cursor: zoom-in; + position: relative; + -webkit-transition: opacity .4s; + transition: opacity .4s; + -webkit-backface-visibility: hidden; +} + +.materialboxed:hover:not(.active) { + opacity: .8; +} + +.materialboxed.active { + cursor: -webkit-zoom-out; + cursor: zoom-out; +} + +#materialbox-overlay { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + background-color: #292929; + z-index: 1000; + will-change: opacity; +} + +.materialbox-caption { + position: fixed; + display: none; + color: #fff; + line-height: 50px; + bottom: 0; + left: 0; + width: 100%; + text-align: center; + padding: 0% 15%; + height: 50px; + z-index: 1000; + -webkit-font-smoothing: antialiased; +} + +select:focus { + outline: 1px solid #c9f3ef; +} + +button:focus { + outline: none; + background-color: #2ab7a9; +} + +label { + font-size: 0.8rem; + color: #9e9e9e; +} + +/* Text Inputs + Textarea + ========================================================================== */ +/* Style Placeholders */ +::-webkit-input-placeholder { + color: #d1d1d1; +} +::-moz-placeholder { + color: #d1d1d1; +} +:-ms-input-placeholder { + color: #d1d1d1; +} +::-ms-input-placeholder { + color: #d1d1d1; +} +::placeholder { + color: #d1d1d1; +} + +/* Text inputs */ +input:not([type]), +input[type=text]:not(.browser-default), +input[type=password]:not(.browser-default), +input[type=email]:not(.browser-default), +input[type=url]:not(.browser-default), +input[type=time]:not(.browser-default), +input[type=date]:not(.browser-default), +input[type=datetime]:not(.browser-default), +input[type=datetime-local]:not(.browser-default), +input[type=tel]:not(.browser-default), +input[type=number]:not(.browser-default), +input[type=search]:not(.browser-default), +textarea.materialize-textarea { + background-color: transparent; + border: none; + border-bottom: 1px solid #9e9e9e; + border-radius: 0; + outline: none; + height: 3rem; + width: 100%; + font-size: 16px; + margin: 0 0 8px 0; + padding: 0; + -webkit-box-shadow: none; + box-shadow: none; + -webkit-box-sizing: content-box; + box-sizing: content-box; + -webkit-transition: border .3s, -webkit-box-shadow .3s; + transition: border .3s, -webkit-box-shadow .3s; + transition: box-shadow .3s, border .3s; + transition: box-shadow .3s, border .3s, -webkit-box-shadow .3s; +} + +input:not([type]):disabled, input:not([type])[readonly="readonly"], +input[type=text]:not(.browser-default):disabled, +input[type=text]:not(.browser-default)[readonly="readonly"], +input[type=password]:not(.browser-default):disabled, +input[type=password]:not(.browser-default)[readonly="readonly"], +input[type=email]:not(.browser-default):disabled, +input[type=email]:not(.browser-default)[readonly="readonly"], +input[type=url]:not(.browser-default):disabled, +input[type=url]:not(.browser-default)[readonly="readonly"], +input[type=time]:not(.browser-default):disabled, +input[type=time]:not(.browser-default)[readonly="readonly"], +input[type=date]:not(.browser-default):disabled, +input[type=date]:not(.browser-default)[readonly="readonly"], +input[type=datetime]:not(.browser-default):disabled, +input[type=datetime]:not(.browser-default)[readonly="readonly"], +input[type=datetime-local]:not(.browser-default):disabled, +input[type=datetime-local]:not(.browser-default)[readonly="readonly"], +input[type=tel]:not(.browser-default):disabled, +input[type=tel]:not(.browser-default)[readonly="readonly"], +input[type=number]:not(.browser-default):disabled, +input[type=number]:not(.browser-default)[readonly="readonly"], +input[type=search]:not(.browser-default):disabled, +input[type=search]:not(.browser-default)[readonly="readonly"], +textarea.materialize-textarea:disabled, +textarea.materialize-textarea[readonly="readonly"] { + color: rgba(0, 0, 0, 0.42); + border-bottom: 1px dotted rgba(0, 0, 0, 0.42); +} + +input:not([type]):disabled + label, +input:not([type])[readonly="readonly"] + label, +input[type=text]:not(.browser-default):disabled + label, +input[type=text]:not(.browser-default)[readonly="readonly"] + label, +input[type=password]:not(.browser-default):disabled + label, +input[type=password]:not(.browser-default)[readonly="readonly"] + label, +input[type=email]:not(.browser-default):disabled + label, +input[type=email]:not(.browser-default)[readonly="readonly"] + label, +input[type=url]:not(.browser-default):disabled + label, +input[type=url]:not(.browser-default)[readonly="readonly"] + label, +input[type=time]:not(.browser-default):disabled + label, +input[type=time]:not(.browser-default)[readonly="readonly"] + label, +input[type=date]:not(.browser-default):disabled + label, +input[type=date]:not(.browser-default)[readonly="readonly"] + label, +input[type=datetime]:not(.browser-default):disabled + label, +input[type=datetime]:not(.browser-default)[readonly="readonly"] + label, +input[type=datetime-local]:not(.browser-default):disabled + label, +input[type=datetime-local]:not(.browser-default)[readonly="readonly"] + label, +input[type=tel]:not(.browser-default):disabled + label, +input[type=tel]:not(.browser-default)[readonly="readonly"] + label, +input[type=number]:not(.browser-default):disabled + label, +input[type=number]:not(.browser-default)[readonly="readonly"] + label, +input[type=search]:not(.browser-default):disabled + label, +input[type=search]:not(.browser-default)[readonly="readonly"] + label, +textarea.materialize-textarea:disabled + label, +textarea.materialize-textarea[readonly="readonly"] + label { + color: rgba(0, 0, 0, 0.42); +} + +input:not([type]):focus:not([readonly]), +input[type=text]:not(.browser-default):focus:not([readonly]), +input[type=password]:not(.browser-default):focus:not([readonly]), +input[type=email]:not(.browser-default):focus:not([readonly]), +input[type=url]:not(.browser-default):focus:not([readonly]), +input[type=time]:not(.browser-default):focus:not([readonly]), +input[type=date]:not(.browser-default):focus:not([readonly]), +input[type=datetime]:not(.browser-default):focus:not([readonly]), +input[type=datetime-local]:not(.browser-default):focus:not([readonly]), +input[type=tel]:not(.browser-default):focus:not([readonly]), +input[type=number]:not(.browser-default):focus:not([readonly]), +input[type=search]:not(.browser-default):focus:not([readonly]), +textarea.materialize-textarea:focus:not([readonly]) { + border-bottom: 1px solid #26a69a; + -webkit-box-shadow: 0 1px 0 0 #26a69a; + box-shadow: 0 1px 0 0 #26a69a; +} + +input:not([type]):focus:not([readonly]) + label, +input[type=text]:not(.browser-default):focus:not([readonly]) + label, +input[type=password]:not(.browser-default):focus:not([readonly]) + label, +input[type=email]:not(.browser-default):focus:not([readonly]) + label, +input[type=url]:not(.browser-default):focus:not([readonly]) + label, +input[type=time]:not(.browser-default):focus:not([readonly]) + label, +input[type=date]:not(.browser-default):focus:not([readonly]) + label, +input[type=datetime]:not(.browser-default):focus:not([readonly]) + label, +input[type=datetime-local]:not(.browser-default):focus:not([readonly]) + label, +input[type=tel]:not(.browser-default):focus:not([readonly]) + label, +input[type=number]:not(.browser-default):focus:not([readonly]) + label, +input[type=search]:not(.browser-default):focus:not([readonly]) + label, +textarea.materialize-textarea:focus:not([readonly]) + label { + color: #26a69a; +} + +input:not([type]):focus.valid ~ label, +input[type=text]:not(.browser-default):focus.valid ~ label, +input[type=password]:not(.browser-default):focus.valid ~ label, +input[type=email]:not(.browser-default):focus.valid ~ label, +input[type=url]:not(.browser-default):focus.valid ~ label, +input[type=time]:not(.browser-default):focus.valid ~ label, +input[type=date]:not(.browser-default):focus.valid ~ label, +input[type=datetime]:not(.browser-default):focus.valid ~ label, +input[type=datetime-local]:not(.browser-default):focus.valid ~ label, +input[type=tel]:not(.browser-default):focus.valid ~ label, +input[type=number]:not(.browser-default):focus.valid ~ label, +input[type=search]:not(.browser-default):focus.valid ~ label, +textarea.materialize-textarea:focus.valid ~ label { + color: #4CAF50; +} + +input:not([type]):focus.invalid ~ label, +input[type=text]:not(.browser-default):focus.invalid ~ label, +input[type=password]:not(.browser-default):focus.invalid ~ label, +input[type=email]:not(.browser-default):focus.invalid ~ label, +input[type=url]:not(.browser-default):focus.invalid ~ label, +input[type=time]:not(.browser-default):focus.invalid ~ label, +input[type=date]:not(.browser-default):focus.invalid ~ label, +input[type=datetime]:not(.browser-default):focus.invalid ~ label, +input[type=datetime-local]:not(.browser-default):focus.invalid ~ label, +input[type=tel]:not(.browser-default):focus.invalid ~ label, +input[type=number]:not(.browser-default):focus.invalid ~ label, +input[type=search]:not(.browser-default):focus.invalid ~ label, +textarea.materialize-textarea:focus.invalid ~ label { + color: #F44336; +} + +input:not([type]).validate + label, +input[type=text]:not(.browser-default).validate + label, +input[type=password]:not(.browser-default).validate + label, +input[type=email]:not(.browser-default).validate + label, +input[type=url]:not(.browser-default).validate + label, +input[type=time]:not(.browser-default).validate + label, +input[type=date]:not(.browser-default).validate + label, +input[type=datetime]:not(.browser-default).validate + label, +input[type=datetime-local]:not(.browser-default).validate + label, +input[type=tel]:not(.browser-default).validate + label, +input[type=number]:not(.browser-default).validate + label, +input[type=search]:not(.browser-default).validate + label, +textarea.materialize-textarea.validate + label { + width: 100%; +} + +/* Validation Sass Placeholders */ +input.valid:not([type]), input.valid:not([type]):focus, +input.valid[type=text]:not(.browser-default), +input.valid[type=text]:not(.browser-default):focus, +input.valid[type=password]:not(.browser-default), +input.valid[type=password]:not(.browser-default):focus, +input.valid[type=email]:not(.browser-default), +input.valid[type=email]:not(.browser-default):focus, +input.valid[type=url]:not(.browser-default), +input.valid[type=url]:not(.browser-default):focus, +input.valid[type=time]:not(.browser-default), +input.valid[type=time]:not(.browser-default):focus, +input.valid[type=date]:not(.browser-default), +input.valid[type=date]:not(.browser-default):focus, +input.valid[type=datetime]:not(.browser-default), +input.valid[type=datetime]:not(.browser-default):focus, +input.valid[type=datetime-local]:not(.browser-default), +input.valid[type=datetime-local]:not(.browser-default):focus, +input.valid[type=tel]:not(.browser-default), +input.valid[type=tel]:not(.browser-default):focus, +input.valid[type=number]:not(.browser-default), +input.valid[type=number]:not(.browser-default):focus, +input.valid[type=search]:not(.browser-default), +input.valid[type=search]:not(.browser-default):focus, +textarea.materialize-textarea.valid, +textarea.materialize-textarea.valid:focus, .select-wrapper.valid > input.select-dropdown { + border-bottom: 1px solid #4CAF50; + -webkit-box-shadow: 0 1px 0 0 #4CAF50; + box-shadow: 0 1px 0 0 #4CAF50; +} + +input.invalid:not([type]), input.invalid:not([type]):focus, +input.invalid[type=text]:not(.browser-default), +input.invalid[type=text]:not(.browser-default):focus, +input.invalid[type=password]:not(.browser-default), +input.invalid[type=password]:not(.browser-default):focus, +input.invalid[type=email]:not(.browser-default), +input.invalid[type=email]:not(.browser-default):focus, +input.invalid[type=url]:not(.browser-default), +input.invalid[type=url]:not(.browser-default):focus, +input.invalid[type=time]:not(.browser-default), +input.invalid[type=time]:not(.browser-default):focus, +input.invalid[type=date]:not(.browser-default), +input.invalid[type=date]:not(.browser-default):focus, +input.invalid[type=datetime]:not(.browser-default), +input.invalid[type=datetime]:not(.browser-default):focus, +input.invalid[type=datetime-local]:not(.browser-default), +input.invalid[type=datetime-local]:not(.browser-default):focus, +input.invalid[type=tel]:not(.browser-default), +input.invalid[type=tel]:not(.browser-default):focus, +input.invalid[type=number]:not(.browser-default), +input.invalid[type=number]:not(.browser-default):focus, +input.invalid[type=search]:not(.browser-default), +input.invalid[type=search]:not(.browser-default):focus, +textarea.materialize-textarea.invalid, +textarea.materialize-textarea.invalid:focus, .select-wrapper.invalid > input.select-dropdown, +.select-wrapper.invalid > input.select-dropdown:focus { + border-bottom: 1px solid #F44336; + -webkit-box-shadow: 0 1px 0 0 #F44336; + box-shadow: 0 1px 0 0 #F44336; +} + +input:not([type]).valid ~ .helper-text[data-success], +input:not([type]):focus.valid ~ .helper-text[data-success], +input:not([type]).invalid ~ .helper-text[data-error], +input:not([type]):focus.invalid ~ .helper-text[data-error], +input[type=text]:not(.browser-default).valid ~ .helper-text[data-success], +input[type=text]:not(.browser-default):focus.valid ~ .helper-text[data-success], +input[type=text]:not(.browser-default).invalid ~ .helper-text[data-error], +input[type=text]:not(.browser-default):focus.invalid ~ .helper-text[data-error], +input[type=password]:not(.browser-default).valid ~ .helper-text[data-success], +input[type=password]:not(.browser-default):focus.valid ~ .helper-text[data-success], +input[type=password]:not(.browser-default).invalid ~ .helper-text[data-error], +input[type=password]:not(.browser-default):focus.invalid ~ .helper-text[data-error], +input[type=email]:not(.browser-default).valid ~ .helper-text[data-success], +input[type=email]:not(.browser-default):focus.valid ~ .helper-text[data-success], +input[type=email]:not(.browser-default).invalid ~ .helper-text[data-error], +input[type=email]:not(.browser-default):focus.invalid ~ .helper-text[data-error], +input[type=url]:not(.browser-default).valid ~ .helper-text[data-success], +input[type=url]:not(.browser-default):focus.valid ~ .helper-text[data-success], +input[type=url]:not(.browser-default).invalid ~ .helper-text[data-error], +input[type=url]:not(.browser-default):focus.invalid ~ .helper-text[data-error], +input[type=time]:not(.browser-default).valid ~ .helper-text[data-success], +input[type=time]:not(.browser-default):focus.valid ~ .helper-text[data-success], +input[type=time]:not(.browser-default).invalid ~ .helper-text[data-error], +input[type=time]:not(.browser-default):focus.invalid ~ .helper-text[data-error], +input[type=date]:not(.browser-default).valid ~ .helper-text[data-success], +input[type=date]:not(.browser-default):focus.valid ~ .helper-text[data-success], +input[type=date]:not(.browser-default).invalid ~ .helper-text[data-error], +input[type=date]:not(.browser-default):focus.invalid ~ .helper-text[data-error], +input[type=datetime]:not(.browser-default).valid ~ .helper-text[data-success], +input[type=datetime]:not(.browser-default):focus.valid ~ .helper-text[data-success], +input[type=datetime]:not(.browser-default).invalid ~ .helper-text[data-error], +input[type=datetime]:not(.browser-default):focus.invalid ~ .helper-text[data-error], +input[type=datetime-local]:not(.browser-default).valid ~ .helper-text[data-success], +input[type=datetime-local]:not(.browser-default):focus.valid ~ .helper-text[data-success], +input[type=datetime-local]:not(.browser-default).invalid ~ .helper-text[data-error], +input[type=datetime-local]:not(.browser-default):focus.invalid ~ .helper-text[data-error], +input[type=tel]:not(.browser-default).valid ~ .helper-text[data-success], +input[type=tel]:not(.browser-default):focus.valid ~ .helper-text[data-success], +input[type=tel]:not(.browser-default).invalid ~ .helper-text[data-error], +input[type=tel]:not(.browser-default):focus.invalid ~ .helper-text[data-error], +input[type=number]:not(.browser-default).valid ~ .helper-text[data-success], +input[type=number]:not(.browser-default):focus.valid ~ .helper-text[data-success], +input[type=number]:not(.browser-default).invalid ~ .helper-text[data-error], +input[type=number]:not(.browser-default):focus.invalid ~ .helper-text[data-error], +input[type=search]:not(.browser-default).valid ~ .helper-text[data-success], +input[type=search]:not(.browser-default):focus.valid ~ .helper-text[data-success], +input[type=search]:not(.browser-default).invalid ~ .helper-text[data-error], +input[type=search]:not(.browser-default):focus.invalid ~ .helper-text[data-error], +textarea.materialize-textarea.valid ~ .helper-text[data-success], +textarea.materialize-textarea:focus.valid ~ .helper-text[data-success], +textarea.materialize-textarea.invalid ~ .helper-text[data-error], +textarea.materialize-textarea:focus.invalid ~ .helper-text[data-error], .select-wrapper.valid .helper-text[data-success], +.select-wrapper.invalid ~ .helper-text[data-error] { + color: transparent; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + pointer-events: none; +} + +input:not([type]).valid ~ .helper-text:after, +input:not([type]):focus.valid ~ .helper-text:after, +input[type=text]:not(.browser-default).valid ~ .helper-text:after, +input[type=text]:not(.browser-default):focus.valid ~ .helper-text:after, +input[type=password]:not(.browser-default).valid ~ .helper-text:after, +input[type=password]:not(.browser-default):focus.valid ~ .helper-text:after, +input[type=email]:not(.browser-default).valid ~ .helper-text:after, +input[type=email]:not(.browser-default):focus.valid ~ .helper-text:after, +input[type=url]:not(.browser-default).valid ~ .helper-text:after, +input[type=url]:not(.browser-default):focus.valid ~ .helper-text:after, +input[type=time]:not(.browser-default).valid ~ .helper-text:after, +input[type=time]:not(.browser-default):focus.valid ~ .helper-text:after, +input[type=date]:not(.browser-default).valid ~ .helper-text:after, +input[type=date]:not(.browser-default):focus.valid ~ .helper-text:after, +input[type=datetime]:not(.browser-default).valid ~ .helper-text:after, +input[type=datetime]:not(.browser-default):focus.valid ~ .helper-text:after, +input[type=datetime-local]:not(.browser-default).valid ~ .helper-text:after, +input[type=datetime-local]:not(.browser-default):focus.valid ~ .helper-text:after, +input[type=tel]:not(.browser-default).valid ~ .helper-text:after, +input[type=tel]:not(.browser-default):focus.valid ~ .helper-text:after, +input[type=number]:not(.browser-default).valid ~ .helper-text:after, +input[type=number]:not(.browser-default):focus.valid ~ .helper-text:after, +input[type=search]:not(.browser-default).valid ~ .helper-text:after, +input[type=search]:not(.browser-default):focus.valid ~ .helper-text:after, +textarea.materialize-textarea.valid ~ .helper-text:after, +textarea.materialize-textarea:focus.valid ~ .helper-text:after, .select-wrapper.valid ~ .helper-text:after { + content: attr(data-success); + color: #4CAF50; +} + +input:not([type]).invalid ~ .helper-text:after, +input:not([type]):focus.invalid ~ .helper-text:after, +input[type=text]:not(.browser-default).invalid ~ .helper-text:after, +input[type=text]:not(.browser-default):focus.invalid ~ .helper-text:after, +input[type=password]:not(.browser-default).invalid ~ .helper-text:after, +input[type=password]:not(.browser-default):focus.invalid ~ .helper-text:after, +input[type=email]:not(.browser-default).invalid ~ .helper-text:after, +input[type=email]:not(.browser-default):focus.invalid ~ .helper-text:after, +input[type=url]:not(.browser-default).invalid ~ .helper-text:after, +input[type=url]:not(.browser-default):focus.invalid ~ .helper-text:after, +input[type=time]:not(.browser-default).invalid ~ .helper-text:after, +input[type=time]:not(.browser-default):focus.invalid ~ .helper-text:after, +input[type=date]:not(.browser-default).invalid ~ .helper-text:after, +input[type=date]:not(.browser-default):focus.invalid ~ .helper-text:after, +input[type=datetime]:not(.browser-default).invalid ~ .helper-text:after, +input[type=datetime]:not(.browser-default):focus.invalid ~ .helper-text:after, +input[type=datetime-local]:not(.browser-default).invalid ~ .helper-text:after, +input[type=datetime-local]:not(.browser-default):focus.invalid ~ .helper-text:after, +input[type=tel]:not(.browser-default).invalid ~ .helper-text:after, +input[type=tel]:not(.browser-default):focus.invalid ~ .helper-text:after, +input[type=number]:not(.browser-default).invalid ~ .helper-text:after, +input[type=number]:not(.browser-default):focus.invalid ~ .helper-text:after, +input[type=search]:not(.browser-default).invalid ~ .helper-text:after, +input[type=search]:not(.browser-default):focus.invalid ~ .helper-text:after, +textarea.materialize-textarea.invalid ~ .helper-text:after, +textarea.materialize-textarea:focus.invalid ~ .helper-text:after, .select-wrapper.invalid ~ .helper-text:after { + content: attr(data-error); + color: #F44336; +} + +input:not([type]) + label:after, +input[type=text]:not(.browser-default) + label:after, +input[type=password]:not(.browser-default) + label:after, +input[type=email]:not(.browser-default) + label:after, +input[type=url]:not(.browser-default) + label:after, +input[type=time]:not(.browser-default) + label:after, +input[type=date]:not(.browser-default) + label:after, +input[type=datetime]:not(.browser-default) + label:after, +input[type=datetime-local]:not(.browser-default) + label:after, +input[type=tel]:not(.browser-default) + label:after, +input[type=number]:not(.browser-default) + label:after, +input[type=search]:not(.browser-default) + label:after, +textarea.materialize-textarea + label:after, .select-wrapper + label:after { + display: block; + content: ""; + position: absolute; + top: 100%; + left: 0; + opacity: 0; + -webkit-transition: .2s opacity ease-out, .2s color ease-out; + transition: .2s opacity ease-out, .2s color ease-out; +} + +.input-field { + position: relative; + margin-top: 1rem; + margin-bottom: 1rem; +} + +.input-field.inline { + display: inline-block; + vertical-align: middle; + margin-left: 5px; +} + +.input-field.inline input, +.input-field.inline .select-dropdown { + margin-bottom: 1rem; +} + +.input-field.col label { + left: 0.75rem; +} + +.input-field.col .prefix ~ label, +.input-field.col .prefix ~ .validate ~ label { + width: calc(100% - 3rem - 1.5rem); +} + +.input-field > label { + color: #9e9e9e; + position: absolute; + top: 0; + left: 0; + font-size: 1rem; + cursor: text; + -webkit-transition: color .2s ease-out, -webkit-transform .2s ease-out; + transition: color .2s ease-out, -webkit-transform .2s ease-out; + transition: transform .2s ease-out, color .2s ease-out; + transition: transform .2s ease-out, color .2s ease-out, -webkit-transform .2s ease-out; + -webkit-transform-origin: 0% 100%; + transform-origin: 0% 100%; + text-align: initial; + -webkit-transform: translateY(12px); + transform: translateY(12px); +} + +.input-field > label:not(.label-icon).active { + -webkit-transform: translateY(-14px) scale(0.8); + transform: translateY(-14px) scale(0.8); + -webkit-transform-origin: 0 0; + transform-origin: 0 0; +} + +.input-field > input[type]:-webkit-autofill:not(.browser-default):not([type="search"]) + label, +.input-field > input[type=date]:not(.browser-default) + label, +.input-field > input[type=time]:not(.browser-default) + label { + -webkit-transform: translateY(-14px) scale(0.8); + transform: translateY(-14px) scale(0.8); + -webkit-transform-origin: 0 0; + transform-origin: 0 0; +} + +.input-field .helper-text { + position: relative; + min-height: 18px; + display: block; + font-size: 12px; + color: rgba(0, 0, 0, 0.54); +} + +.input-field .helper-text::after { + opacity: 1; + position: absolute; + top: 0; + left: 0; +} + +.input-field .prefix { + position: absolute; + width: 3rem; + font-size: 2rem; + -webkit-transition: color .2s; + transition: color .2s; + top: 0.5rem; +} + +.input-field .prefix.active { + color: #26a69a; +} + +.input-field .prefix ~ input, +.input-field .prefix ~ textarea, +.input-field .prefix ~ label, +.input-field .prefix ~ .validate ~ label, +.input-field .prefix ~ .helper-text, +.input-field .prefix ~ .autocomplete-content { + margin-left: 3rem; + width: 92%; + width: calc(100% - 3rem); +} + +.input-field .prefix ~ label { + margin-left: 3rem; +} + +@media only screen and (max-width: 992px) { + .input-field .prefix ~ input { + width: 86%; + width: calc(100% - 3rem); + } +} + +@media only screen and (max-width: 600px) { + .input-field .prefix ~ input { + width: 80%; + width: calc(100% - 3rem); + } +} + +/* Search Field */ +.input-field input[type=search] { + display: block; + line-height: inherit; + -webkit-transition: .3s background-color; + transition: .3s background-color; +} + +.nav-wrapper .input-field input[type=search] { + height: inherit; + padding-left: 4rem; + width: calc(100% - 4rem); + border: 0; + -webkit-box-shadow: none; + box-shadow: none; +} + +.input-field input[type=search]:focus:not(.browser-default) { + background-color: #fff; + border: 0; + -webkit-box-shadow: none; + box-shadow: none; + color: #444; +} + +.input-field input[type=search]:focus:not(.browser-default) + label i, +.input-field input[type=search]:focus:not(.browser-default) ~ .mdi-navigation-close, +.input-field input[type=search]:focus:not(.browser-default) ~ .material-icons { + color: #444; +} + +.input-field input[type=search] + .label-icon { + -webkit-transform: none; + transform: none; + left: 1rem; +} + +.input-field input[type=search] ~ .mdi-navigation-close, +.input-field input[type=search] ~ .material-icons { + position: absolute; + top: 0; + right: 1rem; + color: transparent; + cursor: pointer; + font-size: 2rem; + -webkit-transition: .3s color; + transition: .3s color; +} + +/* Textarea */ +textarea { + width: 100%; + height: 3rem; + background-color: transparent; +} + +textarea.materialize-textarea { + line-height: normal; + overflow-y: hidden; + /* prevents scroll bar flash */ + padding: .8rem 0 .8rem 0; + /* prevents text jump on Enter keypress */ + resize: none; + min-height: 3rem; + -webkit-box-sizing: border-box; + box-sizing: border-box; +} + +.hiddendiv { + visibility: hidden; + white-space: pre-wrap; + word-wrap: break-word; + overflow-wrap: break-word; + /* future version of deprecated 'word-wrap' */ + padding-top: 1.2rem; + /* prevents text jump on Enter keypress */ + position: absolute; + top: 0; + z-index: -1; +} + +/* Autocomplete */ +.autocomplete-content li .highlight { + color: #444; +} + +.autocomplete-content li img { + height: 40px; + width: 40px; + margin: 5px 15px; +} + +/* Character Counter */ +.character-counter { + min-height: 18px; +} + +/* Radio Buttons + ========================================================================== */ +[type="radio"]:not(:checked), +[type="radio"]:checked { + position: absolute; + opacity: 0; + pointer-events: none; +} + +[type="radio"]:not(:checked) + span, +[type="radio"]:checked + span { + position: relative; + padding-left: 35px; + cursor: pointer; + display: inline-block; + height: 25px; + line-height: 25px; + font-size: 1rem; + -webkit-transition: .28s ease; + transition: .28s ease; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +[type="radio"] + span:before, +[type="radio"] + span:after { + content: ''; + position: absolute; + left: 0; + top: 0; + margin: 4px; + width: 16px; + height: 16px; + z-index: 0; + -webkit-transition: .28s ease; + transition: .28s ease; +} + +/* Unchecked styles */ +[type="radio"]:not(:checked) + span:before, +[type="radio"]:not(:checked) + span:after, +[type="radio"]:checked + span:before, +[type="radio"]:checked + span:after, +[type="radio"].with-gap:checked + span:before, +[type="radio"].with-gap:checked + span:after { + border-radius: 50%; +} + +[type="radio"]:not(:checked) + span:before, +[type="radio"]:not(:checked) + span:after { + border: 2px solid #5a5a5a; +} + +[type="radio"]:not(:checked) + span:after { + -webkit-transform: scale(0); + transform: scale(0); +} + +/* Checked styles */ +[type="radio"]:checked + span:before { + border: 2px solid transparent; +} + +[type="radio"]:checked + span:after, +[type="radio"].with-gap:checked + span:before, +[type="radio"].with-gap:checked + span:after { + border: 2px solid #26a69a; +} + +[type="radio"]:checked + span:after, +[type="radio"].with-gap:checked + span:after { + background-color: #26a69a; +} + +[type="radio"]:checked + span:after { + -webkit-transform: scale(1.02); + transform: scale(1.02); +} + +/* Radio With gap */ +[type="radio"].with-gap:checked + span:after { + -webkit-transform: scale(0.5); + transform: scale(0.5); +} + +/* Focused styles */ +[type="radio"].tabbed:focus + span:before { + -webkit-box-shadow: 0 0 0 10px rgba(0, 0, 0, 0.1); + box-shadow: 0 0 0 10px rgba(0, 0, 0, 0.1); +} + +/* Disabled Radio With gap */ +[type="radio"].with-gap:disabled:checked + span:before { + border: 2px solid rgba(0, 0, 0, 0.42); +} + +[type="radio"].with-gap:disabled:checked + span:after { + border: none; + background-color: rgba(0, 0, 0, 0.42); +} + +/* Disabled style */ +[type="radio"]:disabled:not(:checked) + span:before, +[type="radio"]:disabled:checked + span:before { + background-color: transparent; + border-color: rgba(0, 0, 0, 0.42); +} + +[type="radio"]:disabled + span { + color: rgba(0, 0, 0, 0.42); +} + +[type="radio"]:disabled:not(:checked) + span:before { + border-color: rgba(0, 0, 0, 0.42); +} + +[type="radio"]:disabled:checked + span:after { + background-color: rgba(0, 0, 0, 0.42); + border-color: #949494; +} + +/* Checkboxes + ========================================================================== */ +/* Remove default checkbox */ +[type="checkbox"]:not(:checked), +[type="checkbox"]:checked { + position: absolute; + opacity: 0; + pointer-events: none; +} + +[type="checkbox"] { + /* checkbox aspect */ +} + +[type="checkbox"] + span:not(.lever) { + position: relative; + padding-left: 35px; + cursor: pointer; + display: inline-block; + height: 25px; + line-height: 25px; + font-size: 1rem; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +[type="checkbox"] + span:not(.lever):before, +[type="checkbox"]:not(.filled-in) + span:not(.lever):after { + content: ''; + position: absolute; + top: 0; + left: 0; + width: 18px; + height: 18px; + z-index: 0; + border: 2px solid #5a5a5a; + border-radius: 1px; + margin-top: 3px; + -webkit-transition: .2s; + transition: .2s; +} + +[type="checkbox"]:not(.filled-in) + span:not(.lever):after { + border: 0; + -webkit-transform: scale(0); + transform: scale(0); +} + +[type="checkbox"]:not(:checked):disabled + span:not(.lever):before { + border: none; + background-color: rgba(0, 0, 0, 0.42); +} + +[type="checkbox"].tabbed:focus + span:not(.lever):after { + -webkit-transform: scale(1); + transform: scale(1); + border: 0; + border-radius: 50%; + -webkit-box-shadow: 0 0 0 10px rgba(0, 0, 0, 0.1); + box-shadow: 0 0 0 10px rgba(0, 0, 0, 0.1); + background-color: rgba(0, 0, 0, 0.1); +} + +[type="checkbox"]:checked + span:not(.lever):before { + top: -4px; + left: -5px; + width: 12px; + height: 22px; + border-top: 2px solid transparent; + border-left: 2px solid transparent; + border-right: 2px solid #26a69a; + border-bottom: 2px solid #26a69a; + -webkit-transform: rotate(40deg); + transform: rotate(40deg); + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + -webkit-transform-origin: 100% 100%; + transform-origin: 100% 100%; +} + +[type="checkbox"]:checked:disabled + span:before { + border-right: 2px solid rgba(0, 0, 0, 0.42); + border-bottom: 2px solid rgba(0, 0, 0, 0.42); +} + +/* Indeterminate checkbox */ +[type="checkbox"]:indeterminate + span:not(.lever):before { + top: -11px; + left: -12px; + width: 10px; + height: 22px; + border-top: none; + border-left: none; + border-right: 2px solid #26a69a; + border-bottom: none; + -webkit-transform: rotate(90deg); + transform: rotate(90deg); + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + -webkit-transform-origin: 100% 100%; + transform-origin: 100% 100%; +} + +[type="checkbox"]:indeterminate:disabled + span:not(.lever):before { + border-right: 2px solid rgba(0, 0, 0, 0.42); + background-color: transparent; +} + +[type="checkbox"].filled-in + span:not(.lever):after { + border-radius: 2px; +} + +[type="checkbox"].filled-in + span:not(.lever):before, +[type="checkbox"].filled-in + span:not(.lever):after { + content: ''; + left: 0; + position: absolute; + /* .1s delay is for check animation */ + -webkit-transition: border .25s, background-color .25s, width .20s .1s, height .20s .1s, top .20s .1s, left .20s .1s; + transition: border .25s, background-color .25s, width .20s .1s, height .20s .1s, top .20s .1s, left .20s .1s; + z-index: 1; +} + +[type="checkbox"].filled-in:not(:checked) + span:not(.lever):before { + width: 0; + height: 0; + border: 3px solid transparent; + left: 6px; + top: 10px; + -webkit-transform: rotateZ(37deg); + transform: rotateZ(37deg); + -webkit-transform-origin: 100% 100%; + transform-origin: 100% 100%; +} + +[type="checkbox"].filled-in:not(:checked) + span:not(.lever):after { + height: 20px; + width: 20px; + background-color: transparent; + border: 2px solid #5a5a5a; + top: 0px; + z-index: 0; +} + +[type="checkbox"].filled-in:checked + span:not(.lever):before { + top: 0; + left: 1px; + width: 8px; + height: 13px; + border-top: 2px solid transparent; + border-left: 2px solid transparent; + border-right: 2px solid #fff; + border-bottom: 2px solid #fff; + -webkit-transform: rotateZ(37deg); + transform: rotateZ(37deg); + -webkit-transform-origin: 100% 100%; + transform-origin: 100% 100%; +} + +[type="checkbox"].filled-in:checked + span:not(.lever):after { + top: 0; + width: 20px; + height: 20px; + border: 2px solid #26a69a; + background-color: #26a69a; + z-index: 0; +} + +[type="checkbox"].filled-in.tabbed:focus + span:not(.lever):after { + border-radius: 2px; + border-color: #5a5a5a; + background-color: rgba(0, 0, 0, 0.1); +} + +[type="checkbox"].filled-in.tabbed:checked:focus + span:not(.lever):after { + border-radius: 2px; + background-color: #26a69a; + border-color: #26a69a; +} + +[type="checkbox"].filled-in:disabled:not(:checked) + span:not(.lever):before { + background-color: transparent; + border: 2px solid transparent; +} + +[type="checkbox"].filled-in:disabled:not(:checked) + span:not(.lever):after { + border-color: transparent; + background-color: #949494; +} + +[type="checkbox"].filled-in:disabled:checked + span:not(.lever):before { + background-color: transparent; +} + +[type="checkbox"].filled-in:disabled:checked + span:not(.lever):after { + background-color: #949494; + border-color: #949494; +} + +/* Switch + ========================================================================== */ +.switch, +.switch * { + -webkit-tap-highlight-color: transparent; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.switch label { + cursor: pointer; +} + +.switch label input[type=checkbox] { + opacity: 0; + width: 0; + height: 0; +} + +.switch label input[type=checkbox]:checked + .lever { + background-color: #84c7c1; +} + +.switch label input[type=checkbox]:checked + .lever:before, .switch label input[type=checkbox]:checked + .lever:after { + left: 18px; +} + +.switch label input[type=checkbox]:checked + .lever:after { + background-color: #26a69a; +} + +.switch label .lever { + content: ""; + display: inline-block; + position: relative; + width: 36px; + height: 14px; + background-color: rgba(0, 0, 0, 0.38); + border-radius: 15px; + margin-right: 10px; + -webkit-transition: background 0.3s ease; + transition: background 0.3s ease; + vertical-align: middle; + margin: 0 16px; +} + +.switch label .lever:before, .switch label .lever:after { + content: ""; + position: absolute; + display: inline-block; + width: 20px; + height: 20px; + border-radius: 50%; + left: 0; + top: -3px; + -webkit-transition: left 0.3s ease, background .3s ease, -webkit-box-shadow 0.1s ease, -webkit-transform .1s ease; + transition: left 0.3s ease, background .3s ease, -webkit-box-shadow 0.1s ease, -webkit-transform .1s ease; + transition: left 0.3s ease, background .3s ease, box-shadow 0.1s ease, transform .1s ease; + transition: left 0.3s ease, background .3s ease, box-shadow 0.1s ease, transform .1s ease, -webkit-box-shadow 0.1s ease, -webkit-transform .1s ease; +} + +.switch label .lever:before { + background-color: rgba(38, 166, 154, 0.15); +} + +.switch label .lever:after { + background-color: #F1F1F1; + -webkit-box-shadow: 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12); + box-shadow: 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12); +} + +input[type=checkbox]:checked:not(:disabled) ~ .lever:active::before, +input[type=checkbox]:checked:not(:disabled).tabbed:focus ~ .lever::before { + -webkit-transform: scale(2.4); + transform: scale(2.4); + background-color: rgba(38, 166, 154, 0.15); +} + +input[type=checkbox]:not(:disabled) ~ .lever:active:before, +input[type=checkbox]:not(:disabled).tabbed:focus ~ .lever::before { + -webkit-transform: scale(2.4); + transform: scale(2.4); + background-color: rgba(0, 0, 0, 0.08); +} + +.switch input[type=checkbox][disabled] + .lever { + cursor: default; + background-color: rgba(0, 0, 0, 0.12); +} + +.switch label input[type=checkbox][disabled] + .lever:after, +.switch label input[type=checkbox][disabled]:checked + .lever:after { + background-color: #949494; +} + +/* Select Field + ========================================================================== */ +select { + display: none; +} + +select.browser-default { + display: block; +} + +select { + background-color: rgba(255, 255, 255, 0.9); + width: 100%; + padding: 5px; + border: 1px solid #f2f2f2; + border-radius: 2px; + height: 3rem; +} + +.select-label { + position: absolute; +} + +.select-wrapper { + position: relative; +} + +.select-wrapper.valid + label, +.select-wrapper.invalid + label { + width: 100%; + pointer-events: none; +} + +.select-wrapper input.select-dropdown { + position: relative; + cursor: pointer; + background-color: transparent; + border: none; + border-bottom: 1px solid #9e9e9e; + outline: none; + height: 3rem; + line-height: 3rem; + width: 100%; + font-size: 16px; + margin: 0 0 8px 0; + padding: 0; + display: block; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + z-index: 1; +} + +.select-wrapper input.select-dropdown:focus { + border-bottom: 1px solid #26a69a; +} + +.select-wrapper .caret { + position: absolute; + right: 0; + top: 0; + bottom: 0; + margin: auto 0; + z-index: 0; + fill: rgba(0, 0, 0, 0.87); +} + +.select-wrapper + label { + position: absolute; + top: -26px; + font-size: 0.8rem; +} + +select:disabled { + color: rgba(0, 0, 0, 0.42); +} + +.select-wrapper.disabled + label { + color: rgba(0, 0, 0, 0.42); +} + +.select-wrapper.disabled .caret { + fill: rgba(0, 0, 0, 0.42); +} + +.select-wrapper input.select-dropdown:disabled { + color: rgba(0, 0, 0, 0.42); + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.select-wrapper i { + color: rgba(0, 0, 0, 0.3); +} + +.select-dropdown li.disabled, +.select-dropdown li.disabled > span, +.select-dropdown li.optgroup { + color: rgba(0, 0, 0, 0.3); + background-color: transparent; +} + +body.keyboard-focused .select-dropdown.dropdown-content li:focus { + background-color: rgba(0, 0, 0, 0.08); +} + +.select-dropdown.dropdown-content li:hover { + background-color: rgba(0, 0, 0, 0.08); +} + +.select-dropdown.dropdown-content li.selected { + background-color: rgba(0, 0, 0, 0.03); +} + +.prefix ~ .select-wrapper { + margin-left: 3rem; + width: 92%; + width: calc(100% - 3rem); +} + +.prefix ~ label { + margin-left: 3rem; +} + +.select-dropdown li img { + height: 40px; + width: 40px; + margin: 5px 15px; + float: right; +} + +.select-dropdown li.optgroup { + border-top: 1px solid #eee; +} + +.select-dropdown li.optgroup.selected > span { + color: rgba(0, 0, 0, 0.7); +} + +.select-dropdown li.optgroup > span { + color: rgba(0, 0, 0, 0.4); +} + +.select-dropdown li.optgroup ~ li.optgroup-option { + padding-left: 1rem; +} + +/* File Input + ========================================================================== */ +.file-field { + position: relative; +} + +.file-field .file-path-wrapper { + overflow: hidden; + padding-left: 10px; +} + +.file-field input.file-path { + width: 100%; +} + +.file-field .btn, .file-field .btn-large, .file-field .btn-small { + float: left; + height: 3rem; + line-height: 3rem; +} + +.file-field span { + cursor: pointer; +} + +.file-field input[type=file] { + position: absolute; + top: 0; + right: 0; + left: 0; + bottom: 0; + width: 100%; + margin: 0; + padding: 0; + font-size: 20px; + cursor: pointer; + opacity: 0; + filter: alpha(opacity=0); +} + +.file-field input[type=file]::-webkit-file-upload-button { + display: none; +} + +/* Range + ========================================================================== */ +.range-field { + position: relative; +} + +input[type=range], +input[type=range] + .thumb { + cursor: pointer; +} + +input[type=range] { + position: relative; + background-color: transparent; + border: none; + outline: none; + width: 100%; + margin: 15px 0; + padding: 0; +} + +input[type=range]:focus { + outline: none; +} + +input[type=range] + .thumb { + position: absolute; + top: 10px; + left: 0; + border: none; + height: 0; + width: 0; + border-radius: 50%; + background-color: #26a69a; + margin-left: 7px; + -webkit-transform-origin: 50% 50%; + transform-origin: 50% 50%; + -webkit-transform: rotate(-45deg); + transform: rotate(-45deg); +} + +input[type=range] + .thumb .value { + display: block; + width: 30px; + text-align: center; + color: #26a69a; + font-size: 0; + -webkit-transform: rotate(45deg); + transform: rotate(45deg); +} + +input[type=range] + .thumb.active { + border-radius: 50% 50% 50% 0; +} + +input[type=range] + .thumb.active .value { + color: #fff; + margin-left: -1px; + margin-top: 8px; + font-size: 10px; +} + +input[type=range] { + -webkit-appearance: none; +} + +input[type=range]::-webkit-slider-runnable-track { + height: 3px; + background: #c2c0c2; + border: none; +} + +input[type=range]::-webkit-slider-thumb { + border: none; + height: 14px; + width: 14px; + border-radius: 50%; + background: #26a69a; + -webkit-transition: -webkit-box-shadow .3s; + transition: -webkit-box-shadow .3s; + transition: box-shadow .3s; + transition: box-shadow .3s, -webkit-box-shadow .3s; + -webkit-appearance: none; + background-color: #26a69a; + -webkit-transform-origin: 50% 50%; + transform-origin: 50% 50%; + margin: -5px 0 0 0; +} + +.keyboard-focused input[type=range]:focus:not(.active)::-webkit-slider-thumb { + -webkit-box-shadow: 0 0 0 10px rgba(38, 166, 154, 0.26); + box-shadow: 0 0 0 10px rgba(38, 166, 154, 0.26); +} + +input[type=range] { + /* fix for FF unable to apply focus style bug */ + border: 1px solid white; + /*required for proper track sizing in FF*/ +} + +input[type=range]::-moz-range-track { + height: 3px; + background: #c2c0c2; + border: none; +} + +input[type=range]::-moz-focus-inner { + border: 0; +} + +input[type=range]::-moz-range-thumb { + border: none; + height: 14px; + width: 14px; + border-radius: 50%; + background: #26a69a; + -webkit-transition: -webkit-box-shadow .3s; + transition: -webkit-box-shadow .3s; + transition: box-shadow .3s; + transition: box-shadow .3s, -webkit-box-shadow .3s; + margin-top: -5px; +} + +input[type=range]:-moz-focusring { + outline: 1px solid #fff; + outline-offset: -1px; +} + +.keyboard-focused input[type=range]:focus:not(.active)::-moz-range-thumb { + box-shadow: 0 0 0 10px rgba(38, 166, 154, 0.26); +} + +input[type=range]::-ms-track { + height: 3px; + background: transparent; + border-color: transparent; + border-width: 6px 0; + /*remove default tick marks*/ + color: transparent; +} + +input[type=range]::-ms-fill-lower { + background: #777; +} + +input[type=range]::-ms-fill-upper { + background: #ddd; +} + +input[type=range]::-ms-thumb { + border: none; + height: 14px; + width: 14px; + border-radius: 50%; + background: #26a69a; + -webkit-transition: -webkit-box-shadow .3s; + transition: -webkit-box-shadow .3s; + transition: box-shadow .3s; + transition: box-shadow .3s, -webkit-box-shadow .3s; +} + +.keyboard-focused input[type=range]:focus:not(.active)::-ms-thumb { + box-shadow: 0 0 0 10px rgba(38, 166, 154, 0.26); +} + +/*************** + Nav List +***************/ +.table-of-contents.fixed { + position: fixed; +} + +.table-of-contents li { + padding: 2px 0; +} + +.table-of-contents a { + display: inline-block; + font-weight: 300; + color: #757575; + padding-left: 16px; + height: 1.5rem; + line-height: 1.5rem; + letter-spacing: .4; + display: inline-block; +} + +.table-of-contents a:hover { + color: #a8a8a8; + padding-left: 15px; + border-left: 1px solid #ee6e73; +} + +.table-of-contents a.active { + font-weight: 500; + padding-left: 14px; + border-left: 2px solid #ee6e73; +} + +.sidenav { + position: fixed; + width: 300px; + left: 0; + top: 0; + margin: 0; + -webkit-transform: translateX(-100%); + transform: translateX(-100%); + height: 100%; + height: calc(100% + 60px); + height: -moz-calc(100%); + padding-bottom: 60px; + background-color: #fff; + z-index: 999; + overflow-y: auto; + will-change: transform; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + -webkit-transform: translateX(-105%); + transform: translateX(-105%); +} + +.sidenav.right-aligned { + right: 0; + -webkit-transform: translateX(105%); + transform: translateX(105%); + left: auto; + -webkit-transform: translateX(100%); + transform: translateX(100%); +} + +.sidenav .collapsible { + margin: 0; +} + +.sidenav li { + float: none; + line-height: 48px; +} + +.sidenav li.active { + background-color: rgba(0, 0, 0, 0.05); +} + +.sidenav li > a { + color: rgba(0, 0, 0, 0.87); + display: block; + font-size: 14px; + font-weight: 500; + height: 48px; + line-height: 48px; + padding: 0 32px; +} + +.sidenav li > a:hover { + background-color: rgba(0, 0, 0, 0.05); +} + +.sidenav li > a.btn, .sidenav li > a.btn-large, .sidenav li > a.btn-small, .sidenav li > a.btn-large, .sidenav li > a.btn-flat, .sidenav li > a.btn-floating { + margin: 10px 15px; +} + +.sidenav li > a.btn, .sidenav li > a.btn-large, .sidenav li > a.btn-small, .sidenav li > a.btn-large, .sidenav li > a.btn-floating { + color: #fff; +} + +.sidenav li > a.btn-flat { + color: #343434; +} + +.sidenav li > a.btn:hover, .sidenav li > a.btn-large:hover, .sidenav li > a.btn-small:hover, .sidenav li > a.btn-large:hover { + background-color: #2bbbad; +} + +.sidenav li > a.btn-floating:hover { + background-color: #26a69a; +} + +.sidenav li > a > i, +.sidenav li > a > [class^="mdi-"], .sidenav li > a li > a > [class*="mdi-"], +.sidenav li > a > i.material-icons { + float: left; + height: 48px; + line-height: 48px; + margin: 0 32px 0 0; + width: 24px; + color: rgba(0, 0, 0, 0.54); +} + +.sidenav .divider { + margin: 8px 0 0 0; +} + +.sidenav .subheader { + cursor: initial; + pointer-events: none; + color: rgba(0, 0, 0, 0.54); + font-size: 14px; + font-weight: 500; + line-height: 48px; +} + +.sidenav .subheader:hover { + background-color: transparent; +} + +.sidenav .user-view { + position: relative; + padding: 32px 32px 0; + margin-bottom: 8px; +} + +.sidenav .user-view > a { + height: auto; + padding: 0; +} + +.sidenav .user-view > a:hover { + background-color: transparent; +} + +.sidenav .user-view .background { + overflow: hidden; + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: -1; +} + +.sidenav .user-view .circle, .sidenav .user-view .name, .sidenav .user-view .email { + display: block; +} + +.sidenav .user-view .circle { + height: 64px; + width: 64px; +} + +.sidenav .user-view .name, +.sidenav .user-view .email { + font-size: 14px; + line-height: 24px; +} + +.sidenav .user-view .name { + margin-top: 16px; + font-weight: 500; +} + +.sidenav .user-view .email { + padding-bottom: 16px; + font-weight: 400; +} + +.drag-target { + height: 100%; + width: 10px; + position: fixed; + top: 0; + z-index: 998; +} + +.drag-target.right-aligned { + right: 0; +} + +.sidenav.sidenav-fixed { + left: 0; + -webkit-transform: translateX(0); + transform: translateX(0); + position: fixed; +} + +.sidenav.sidenav-fixed.right-aligned { + right: 0; + left: auto; +} + +@media only screen and (max-width: 992px) { + .sidenav.sidenav-fixed { + -webkit-transform: translateX(-105%); + transform: translateX(-105%); + } + .sidenav.sidenav-fixed.right-aligned { + -webkit-transform: translateX(105%); + transform: translateX(105%); + } + .sidenav > a { + padding: 0 16px; + } + .sidenav .user-view { + padding: 16px 16px 0; + } +} + +.sidenav .collapsible-body > ul:not(.collapsible) > li.active, +.sidenav.sidenav-fixed .collapsible-body > ul:not(.collapsible) > li.active { + background-color: #ee6e73; +} + +.sidenav .collapsible-body > ul:not(.collapsible) > li.active a, +.sidenav.sidenav-fixed .collapsible-body > ul:not(.collapsible) > li.active a { + color: #fff; +} + +.sidenav .collapsible-body { + padding: 0; +} + +.sidenav-overlay { + position: fixed; + top: 0; + left: 0; + right: 0; + opacity: 0; + height: 120vh; + background-color: rgba(0, 0, 0, 0.5); + z-index: 997; + display: none; +} + +/* + @license + Copyright (c) 2014 The Polymer Project Authors. All rights reserved. + This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt + The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt + The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt + Code distributed by Google as part of the polymer project is also + subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt + */ +/**************************/ +/* STYLES FOR THE SPINNER */ +/**************************/ +/* + * Constants: + * STROKEWIDTH = 3px + * ARCSIZE = 270 degrees (amount of circle the arc takes up) + * ARCTIME = 1333ms (time it takes to expand and contract arc) + * ARCSTARTROT = 216 degrees (how much the start location of the arc + * should rotate each time, 216 gives us a + * 5 pointed star shape (it's 360/5 * 3). + * For a 7 pointed star, we might do + * 360/7 * 3 = 154.286) + * CONTAINERWIDTH = 28px + * SHRINK_TIME = 400ms + */ +.preloader-wrapper { + display: inline-block; + position: relative; + width: 50px; + height: 50px; +} + +.preloader-wrapper.small { + width: 36px; + height: 36px; +} + +.preloader-wrapper.big { + width: 64px; + height: 64px; +} + +.preloader-wrapper.active { + /* duration: 360 * ARCTIME / (ARCSTARTROT + (360-ARCSIZE)) */ + -webkit-animation: container-rotate 1568ms linear infinite; + animation: container-rotate 1568ms linear infinite; +} + +@-webkit-keyframes container-rotate { + to { + -webkit-transform: rotate(360deg); + } +} + +@keyframes container-rotate { + to { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} + +.spinner-layer { + position: absolute; + width: 100%; + height: 100%; + opacity: 0; + border-color: #26a69a; +} + +.spinner-blue, +.spinner-blue-only { + border-color: #4285f4; +} + +.spinner-red, +.spinner-red-only { + border-color: #db4437; +} + +.spinner-yellow, +.spinner-yellow-only { + border-color: #f4b400; +} + +.spinner-green, +.spinner-green-only { + border-color: #0f9d58; +} + +/** + * IMPORTANT NOTE ABOUT CSS ANIMATION PROPERTIES (keanulee): + * + * iOS Safari (tested on iOS 8.1) does not handle animation-delay very well - it doesn't + * guarantee that the animation will start _exactly_ after that value. So we avoid using + * animation-delay and instead set custom keyframes for each color (as redundant as it + * seems). + * + * We write out each animation in full (instead of separating animation-name, + * animation-duration, etc.) because under the polyfill, Safari does not recognize those + * specific properties properly, treats them as -webkit-animation, and overrides the + * other animation rules. See https://github.com/Polymer/platform/issues/53. + */ +.active .spinner-layer.spinner-blue { + /* durations: 4 * ARCTIME */ + -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, blue-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; + animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, blue-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; +} + +.active .spinner-layer.spinner-red { + /* durations: 4 * ARCTIME */ + -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, red-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; + animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, red-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; +} + +.active .spinner-layer.spinner-yellow { + /* durations: 4 * ARCTIME */ + -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, yellow-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; + animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, yellow-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; +} + +.active .spinner-layer.spinner-green { + /* durations: 4 * ARCTIME */ + -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, green-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; + animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, green-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; +} + +.active .spinner-layer, +.active .spinner-layer.spinner-blue-only, +.active .spinner-layer.spinner-red-only, +.active .spinner-layer.spinner-yellow-only, +.active .spinner-layer.spinner-green-only { + /* durations: 4 * ARCTIME */ + opacity: 1; + -webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; + animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; +} + +@-webkit-keyframes fill-unfill-rotate { + 12.5% { + -webkit-transform: rotate(135deg); + } + /* 0.5 * ARCSIZE */ + 25% { + -webkit-transform: rotate(270deg); + } + /* 1 * ARCSIZE */ + 37.5% { + -webkit-transform: rotate(405deg); + } + /* 1.5 * ARCSIZE */ + 50% { + -webkit-transform: rotate(540deg); + } + /* 2 * ARCSIZE */ + 62.5% { + -webkit-transform: rotate(675deg); + } + /* 2.5 * ARCSIZE */ + 75% { + -webkit-transform: rotate(810deg); + } + /* 3 * ARCSIZE */ + 87.5% { + -webkit-transform: rotate(945deg); + } + /* 3.5 * ARCSIZE */ + to { + -webkit-transform: rotate(1080deg); + } + /* 4 * ARCSIZE */ +} + +@keyframes fill-unfill-rotate { + 12.5% { + -webkit-transform: rotate(135deg); + transform: rotate(135deg); + } + /* 0.5 * ARCSIZE */ + 25% { + -webkit-transform: rotate(270deg); + transform: rotate(270deg); + } + /* 1 * ARCSIZE */ + 37.5% { + -webkit-transform: rotate(405deg); + transform: rotate(405deg); + } + /* 1.5 * ARCSIZE */ + 50% { + -webkit-transform: rotate(540deg); + transform: rotate(540deg); + } + /* 2 * ARCSIZE */ + 62.5% { + -webkit-transform: rotate(675deg); + transform: rotate(675deg); + } + /* 2.5 * ARCSIZE */ + 75% { + -webkit-transform: rotate(810deg); + transform: rotate(810deg); + } + /* 3 * ARCSIZE */ + 87.5% { + -webkit-transform: rotate(945deg); + transform: rotate(945deg); + } + /* 3.5 * ARCSIZE */ + to { + -webkit-transform: rotate(1080deg); + transform: rotate(1080deg); + } + /* 4 * ARCSIZE */ +} + +@-webkit-keyframes blue-fade-in-out { + from { + opacity: 1; + } + 25% { + opacity: 1; + } + 26% { + opacity: 0; + } + 89% { + opacity: 0; + } + 90% { + opacity: 1; + } + 100% { + opacity: 1; + } +} + +@keyframes blue-fade-in-out { + from { + opacity: 1; + } + 25% { + opacity: 1; + } + 26% { + opacity: 0; + } + 89% { + opacity: 0; + } + 90% { + opacity: 1; + } + 100% { + opacity: 1; + } +} + +@-webkit-keyframes red-fade-in-out { + from { + opacity: 0; + } + 15% { + opacity: 0; + } + 25% { + opacity: 1; + } + 50% { + opacity: 1; + } + 51% { + opacity: 0; + } +} + +@keyframes red-fade-in-out { + from { + opacity: 0; + } + 15% { + opacity: 0; + } + 25% { + opacity: 1; + } + 50% { + opacity: 1; + } + 51% { + opacity: 0; + } +} + +@-webkit-keyframes yellow-fade-in-out { + from { + opacity: 0; + } + 40% { + opacity: 0; + } + 50% { + opacity: 1; + } + 75% { + opacity: 1; + } + 76% { + opacity: 0; + } +} + +@keyframes yellow-fade-in-out { + from { + opacity: 0; + } + 40% { + opacity: 0; + } + 50% { + opacity: 1; + } + 75% { + opacity: 1; + } + 76% { + opacity: 0; + } +} + +@-webkit-keyframes green-fade-in-out { + from { + opacity: 0; + } + 65% { + opacity: 0; + } + 75% { + opacity: 1; + } + 90% { + opacity: 1; + } + 100% { + opacity: 0; + } +} + +@keyframes green-fade-in-out { + from { + opacity: 0; + } + 65% { + opacity: 0; + } + 75% { + opacity: 1; + } + 90% { + opacity: 1; + } + 100% { + opacity: 0; + } +} + +/** + * Patch the gap that appear between the two adjacent div.circle-clipper while the + * spinner is rotating (appears on Chrome 38, Safari 7.1, and IE 11). + */ +.gap-patch { + position: absolute; + top: 0; + left: 45%; + width: 10%; + height: 100%; + overflow: hidden; + border-color: inherit; +} + +.gap-patch .circle { + width: 1000%; + left: -450%; +} + +.circle-clipper { + display: inline-block; + position: relative; + width: 50%; + height: 100%; + overflow: hidden; + border-color: inherit; +} + +.circle-clipper .circle { + width: 200%; + height: 100%; + border-width: 3px; + /* STROKEWIDTH */ + border-style: solid; + border-color: inherit; + border-bottom-color: transparent !important; + border-radius: 50%; + -webkit-animation: none; + animation: none; + position: absolute; + top: 0; + right: 0; + bottom: 0; +} + +.circle-clipper.left .circle { + left: 0; + border-right-color: transparent !important; + -webkit-transform: rotate(129deg); + transform: rotate(129deg); +} + +.circle-clipper.right .circle { + left: -100%; + border-left-color: transparent !important; + -webkit-transform: rotate(-129deg); + transform: rotate(-129deg); +} + +.active .circle-clipper.left .circle { + /* duration: ARCTIME */ + -webkit-animation: left-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; + animation: left-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; +} + +.active .circle-clipper.right .circle { + /* duration: ARCTIME */ + -webkit-animation: right-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; + animation: right-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both; +} + +@-webkit-keyframes left-spin { + from { + -webkit-transform: rotate(130deg); + } + 50% { + -webkit-transform: rotate(-5deg); + } + to { + -webkit-transform: rotate(130deg); + } +} + +@keyframes left-spin { + from { + -webkit-transform: rotate(130deg); + transform: rotate(130deg); + } + 50% { + -webkit-transform: rotate(-5deg); + transform: rotate(-5deg); + } + to { + -webkit-transform: rotate(130deg); + transform: rotate(130deg); + } +} + +@-webkit-keyframes right-spin { + from { + -webkit-transform: rotate(-130deg); + } + 50% { + -webkit-transform: rotate(5deg); + } + to { + -webkit-transform: rotate(-130deg); + } +} + +@keyframes right-spin { + from { + -webkit-transform: rotate(-130deg); + transform: rotate(-130deg); + } + 50% { + -webkit-transform: rotate(5deg); + transform: rotate(5deg); + } + to { + -webkit-transform: rotate(-130deg); + transform: rotate(-130deg); + } +} + +#spinnerContainer.cooldown { + /* duration: SHRINK_TIME */ + -webkit-animation: container-rotate 1568ms linear infinite, fade-out 400ms cubic-bezier(0.4, 0, 0.2, 1); + animation: container-rotate 1568ms linear infinite, fade-out 400ms cubic-bezier(0.4, 0, 0.2, 1); +} + +@-webkit-keyframes fade-out { + from { + opacity: 1; + } + to { + opacity: 0; + } +} + +@keyframes fade-out { + from { + opacity: 1; + } + to { + opacity: 0; + } +} + +.slider { + position: relative; + height: 400px; + width: 100%; +} + +.slider.fullscreen { + height: 100%; + width: 100%; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; +} + +.slider.fullscreen ul.slides { + height: 100%; +} + +.slider.fullscreen ul.indicators { + z-index: 2; + bottom: 30px; +} + +.slider .slides { + background-color: #9e9e9e; + margin: 0; + height: 400px; +} + +.slider .slides li { + opacity: 0; + position: absolute; + top: 0; + left: 0; + z-index: 1; + width: 100%; + height: inherit; + overflow: hidden; +} + +.slider .slides li img { + height: 100%; + width: 100%; + background-size: cover; + background-position: center; +} + +.slider .slides li .caption { + color: #fff; + position: absolute; + top: 15%; + left: 15%; + width: 70%; + opacity: 0; +} + +.slider .slides li .caption p { + color: #e0e0e0; +} + +.slider .slides li.active { + z-index: 2; +} + +.slider .indicators { + position: absolute; + text-align: center; + left: 0; + right: 0; + bottom: 0; + margin: 0; +} + +.slider .indicators .indicator-item { + display: inline-block; + position: relative; + cursor: pointer; + height: 16px; + width: 16px; + margin: 0 12px; + background-color: #e0e0e0; + -webkit-transition: background-color .3s; + transition: background-color .3s; + border-radius: 50%; +} + +.slider .indicators .indicator-item.active { + background-color: #4CAF50; +} + +.carousel { + overflow: hidden; + position: relative; + width: 100%; + height: 400px; + -webkit-perspective: 500px; + perspective: 500px; + -webkit-transform-style: preserve-3d; + transform-style: preserve-3d; + -webkit-transform-origin: 0% 50%; + transform-origin: 0% 50%; +} + +.carousel.carousel-slider { + top: 0; + left: 0; +} + +.carousel.carousel-slider .carousel-fixed-item { + position: absolute; + left: 0; + right: 0; + bottom: 20px; + z-index: 1; +} + +.carousel.carousel-slider .carousel-fixed-item.with-indicators { + bottom: 68px; +} + +.carousel.carousel-slider .carousel-item { + width: 100%; + height: 100%; + min-height: 400px; + position: absolute; + top: 0; + left: 0; +} + +.carousel.carousel-slider .carousel-item h2 { + font-size: 24px; + font-weight: 500; + line-height: 32px; +} + +.carousel.carousel-slider .carousel-item p { + font-size: 15px; +} + +.carousel .carousel-item { + visibility: hidden; + width: 200px; + height: 200px; + position: absolute; + top: 0; + left: 0; +} + +.carousel .carousel-item > img { + width: 100%; +} + +.carousel .indicators { + position: absolute; + text-align: center; + left: 0; + right: 0; + bottom: 0; + margin: 0; +} + +.carousel .indicators .indicator-item { + display: inline-block; + position: relative; + cursor: pointer; + height: 8px; + width: 8px; + margin: 24px 4px; + background-color: rgba(255, 255, 255, 0.5); + -webkit-transition: background-color .3s; + transition: background-color .3s; + border-radius: 50%; +} + +.carousel .indicators .indicator-item.active { + background-color: #fff; +} + +.carousel.scrolling .carousel-item .materialboxed, +.carousel .carousel-item:not(.active) .materialboxed { + pointer-events: none; +} + +.tap-target-wrapper { + width: 800px; + height: 800px; + position: fixed; + z-index: 1000; + visibility: hidden; + -webkit-transition: visibility 0s .3s; + transition: visibility 0s .3s; +} + +.tap-target-wrapper.open { + visibility: visible; + -webkit-transition: visibility 0s; + transition: visibility 0s; +} + +.tap-target-wrapper.open .tap-target { + -webkit-transform: scale(1); + transform: scale(1); + opacity: .95; + -webkit-transition: opacity 0.3s cubic-bezier(0.42, 0, 0.58, 1), -webkit-transform 0.3s cubic-bezier(0.42, 0, 0.58, 1); + transition: opacity 0.3s cubic-bezier(0.42, 0, 0.58, 1), -webkit-transform 0.3s cubic-bezier(0.42, 0, 0.58, 1); + transition: transform 0.3s cubic-bezier(0.42, 0, 0.58, 1), opacity 0.3s cubic-bezier(0.42, 0, 0.58, 1); + transition: transform 0.3s cubic-bezier(0.42, 0, 0.58, 1), opacity 0.3s cubic-bezier(0.42, 0, 0.58, 1), -webkit-transform 0.3s cubic-bezier(0.42, 0, 0.58, 1); +} + +.tap-target-wrapper.open .tap-target-wave::before { + -webkit-transform: scale(1); + transform: scale(1); +} + +.tap-target-wrapper.open .tap-target-wave::after { + visibility: visible; + -webkit-animation: pulse-animation 1s cubic-bezier(0.24, 0, 0.38, 1) infinite; + animation: pulse-animation 1s cubic-bezier(0.24, 0, 0.38, 1) infinite; + -webkit-transition: opacity .3s, + visibility 0s 1s, + -webkit-transform .3s; + transition: opacity .3s, + visibility 0s 1s, + -webkit-transform .3s; + transition: opacity .3s, + transform .3s, + visibility 0s 1s; + transition: opacity .3s, + transform .3s, + visibility 0s 1s, + -webkit-transform .3s; +} + +.tap-target { + position: absolute; + font-size: 1rem; + border-radius: 50%; + background-color: #ee6e73; + -webkit-box-shadow: 0 20px 20px 0 rgba(0, 0, 0, 0.14), 0 10px 50px 0 rgba(0, 0, 0, 0.12), 0 30px 10px -20px rgba(0, 0, 0, 0.2); + box-shadow: 0 20px 20px 0 rgba(0, 0, 0, 0.14), 0 10px 50px 0 rgba(0, 0, 0, 0.12), 0 30px 10px -20px rgba(0, 0, 0, 0.2); + width: 100%; + height: 100%; + opacity: 0; + -webkit-transform: scale(0); + transform: scale(0); + -webkit-transition: opacity 0.3s cubic-bezier(0.42, 0, 0.58, 1), -webkit-transform 0.3s cubic-bezier(0.42, 0, 0.58, 1); + transition: opacity 0.3s cubic-bezier(0.42, 0, 0.58, 1), -webkit-transform 0.3s cubic-bezier(0.42, 0, 0.58, 1); + transition: transform 0.3s cubic-bezier(0.42, 0, 0.58, 1), opacity 0.3s cubic-bezier(0.42, 0, 0.58, 1); + transition: transform 0.3s cubic-bezier(0.42, 0, 0.58, 1), opacity 0.3s cubic-bezier(0.42, 0, 0.58, 1), -webkit-transform 0.3s cubic-bezier(0.42, 0, 0.58, 1); +} + +.tap-target-content { + position: relative; + display: table-cell; +} + +.tap-target-wave { + position: absolute; + border-radius: 50%; + z-index: 10001; +} + +.tap-target-wave::before, .tap-target-wave::after { + content: ''; + display: block; + position: absolute; + width: 100%; + height: 100%; + border-radius: 50%; + background-color: #ffffff; +} + +.tap-target-wave::before { + -webkit-transform: scale(0); + transform: scale(0); + -webkit-transition: -webkit-transform .3s; + transition: -webkit-transform .3s; + transition: transform .3s; + transition: transform .3s, -webkit-transform .3s; +} + +.tap-target-wave::after { + visibility: hidden; + -webkit-transition: opacity .3s, + visibility 0s, + -webkit-transform .3s; + transition: opacity .3s, + visibility 0s, + -webkit-transform .3s; + transition: opacity .3s, + transform .3s, + visibility 0s; + transition: opacity .3s, + transform .3s, + visibility 0s, + -webkit-transform .3s; + z-index: -1; +} + +.tap-target-origin { + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); + z-index: 10002; + position: absolute !important; +} + +.tap-target-origin:not(.btn):not(.btn-large):not(.btn-small), .tap-target-origin:not(.btn):not(.btn-large):not(.btn-small):hover { + background: none; +} + +@media only screen and (max-width: 600px) { + .tap-target, .tap-target-wrapper { + width: 600px; + height: 600px; + } +} + +.pulse { + overflow: visible; + position: relative; +} + +.pulse::before { + content: ''; + display: block; + position: absolute; + width: 100%; + height: 100%; + top: 0; + left: 0; + background-color: inherit; + border-radius: inherit; + -webkit-transition: opacity .3s, -webkit-transform .3s; + transition: opacity .3s, -webkit-transform .3s; + transition: opacity .3s, transform .3s; + transition: opacity .3s, transform .3s, -webkit-transform .3s; + -webkit-animation: pulse-animation 1s cubic-bezier(0.24, 0, 0.38, 1) infinite; + animation: pulse-animation 1s cubic-bezier(0.24, 0, 0.38, 1) infinite; + z-index: -1; +} + +@-webkit-keyframes pulse-animation { + 0% { + opacity: 1; + -webkit-transform: scale(1); + transform: scale(1); + } + 50% { + opacity: 0; + -webkit-transform: scale(1.5); + transform: scale(1.5); + } + 100% { + opacity: 0; + -webkit-transform: scale(1.5); + transform: scale(1.5); + } +} + +@keyframes pulse-animation { + 0% { + opacity: 1; + -webkit-transform: scale(1); + transform: scale(1); + } + 50% { + opacity: 0; + -webkit-transform: scale(1.5); + transform: scale(1.5); + } + 100% { + opacity: 0; + -webkit-transform: scale(1.5); + transform: scale(1.5); + } +} + +/* Modal */ +.datepicker-modal { + max-width: 325px; + min-width: 300px; + max-height: none; +} + +.datepicker-container.modal-content { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + padding: 0; +} + +.datepicker-controls { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: justify; + -webkit-justify-content: space-between; + -ms-flex-pack: justify; + justify-content: space-between; + width: 280px; + margin: 0 auto; +} + +.datepicker-controls .selects-container { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; +} + +.datepicker-controls .select-wrapper input { + border-bottom: none; + text-align: center; + margin: 0; +} + +.datepicker-controls .select-wrapper input:focus { + border-bottom: none; +} + +.datepicker-controls .select-wrapper .caret { + display: none; +} + +.datepicker-controls .select-year input { + width: 50px; +} + +.datepicker-controls .select-month input { + width: 70px; +} + +.month-prev, .month-next { + margin-top: 4px; + cursor: pointer; + background-color: transparent; + border: none; +} + +/* Date Display */ +.datepicker-date-display { + -webkit-box-flex: 1; + -webkit-flex: 1 auto; + -ms-flex: 1 auto; + flex: 1 auto; + background-color: #26a69a; + color: #fff; + padding: 20px 22px; + font-weight: 500; +} + +.datepicker-date-display .year-text { + display: block; + font-size: 1.5rem; + line-height: 25px; + color: rgba(255, 255, 255, 0.7); +} + +.datepicker-date-display .date-text { + display: block; + font-size: 2.8rem; + line-height: 47px; + font-weight: 500; +} + +/* Calendar */ +.datepicker-calendar-container { + -webkit-box-flex: 2.5; + -webkit-flex: 2.5 auto; + -ms-flex: 2.5 auto; + flex: 2.5 auto; +} + +.datepicker-table { + width: 280px; + font-size: 1rem; + margin: 0 auto; +} + +.datepicker-table thead { + border-bottom: none; +} + +.datepicker-table th { + padding: 10px 5px; + text-align: center; +} + +.datepicker-table tr { + border: none; +} + +.datepicker-table abbr { + text-decoration: none; + color: #999; +} + +.datepicker-table td { + border-radius: 50%; + padding: 0; +} + +.datepicker-table td.is-today { + color: #26a69a; +} + +.datepicker-table td.is-selected { + background-color: #26a69a; + color: #fff; +} + +.datepicker-table td.is-outside-current-month, .datepicker-table td.is-disabled { + color: rgba(0, 0, 0, 0.3); + pointer-events: none; +} + +.datepicker-day-button { + background-color: transparent; + border: none; + line-height: 38px; + display: block; + width: 100%; + border-radius: 50%; + padding: 0 5px; + cursor: pointer; + color: inherit; +} + +.datepicker-day-button:focus { + background-color: rgba(43, 161, 150, 0.25); +} + +/* Footer */ +.datepicker-footer { + width: 280px; + margin: 0 auto; + padding-bottom: 5px; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: justify; + -webkit-justify-content: space-between; + -ms-flex-pack: justify; + justify-content: space-between; +} + +.datepicker-cancel, +.datepicker-clear, +.datepicker-today, +.datepicker-done { + color: #26a69a; + padding: 0 1rem; +} + +.datepicker-clear { + color: #F44336; +} + +/* Media Queries */ +@media only screen and (min-width: 601px) { + .datepicker-modal { + max-width: 625px; + } + .datepicker-container.modal-content { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + } + .datepicker-date-display { + -webkit-box-flex: 0; + -webkit-flex: 0 1 270px; + -ms-flex: 0 1 270px; + flex: 0 1 270px; + } + .datepicker-controls, + .datepicker-table, + .datepicker-footer { + width: 320px; + } + .datepicker-day-button { + line-height: 44px; + } +} + +/* Timepicker Containers */ +.timepicker-modal { + max-width: 325px; + max-height: none; +} + +.timepicker-container.modal-content { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + padding: 0; +} + +.text-primary { + color: white; +} + +/* Clock Digital Display */ +.timepicker-digital-display { + -webkit-box-flex: 1; + -webkit-flex: 1 auto; + -ms-flex: 1 auto; + flex: 1 auto; + background-color: #26a69a; + padding: 10px; + font-weight: 300; +} + +.timepicker-text-container { + font-size: 4rem; + font-weight: bold; + text-align: center; + color: rgba(255, 255, 255, 0.6); + font-weight: 400; + position: relative; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.timepicker-span-hours, +.timepicker-span-minutes, +.timepicker-span-am-pm div { + cursor: pointer; +} + +.timepicker-span-hours { + margin-right: 3px; +} + +.timepicker-span-minutes { + margin-left: 3px; +} + +.timepicker-display-am-pm { + font-size: 1.3rem; + position: absolute; + right: 1rem; + bottom: 1rem; + font-weight: 400; +} + +/* Analog Clock Display */ +.timepicker-analog-display { + -webkit-box-flex: 2.5; + -webkit-flex: 2.5 auto; + -ms-flex: 2.5 auto; + flex: 2.5 auto; +} + +.timepicker-plate { + background-color: #eee; + border-radius: 50%; + width: 270px; + height: 270px; + overflow: visible; + position: relative; + margin: auto; + margin-top: 25px; + margin-bottom: 5px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.timepicker-canvas, +.timepicker-dial { + position: absolute; + left: 0; + right: 0; + top: 0; + bottom: 0; +} + +.timepicker-minutes { + visibility: hidden; +} + +.timepicker-tick { + border-radius: 50%; + color: rgba(0, 0, 0, 0.87); + line-height: 40px; + text-align: center; + width: 40px; + height: 40px; + position: absolute; + cursor: pointer; + font-size: 15px; +} + +.timepicker-tick.active, +.timepicker-tick:hover { + background-color: rgba(38, 166, 154, 0.25); +} + +.timepicker-dial { + -webkit-transition: opacity 350ms, -webkit-transform 350ms; + transition: opacity 350ms, -webkit-transform 350ms; + transition: transform 350ms, opacity 350ms; + transition: transform 350ms, opacity 350ms, -webkit-transform 350ms; +} + +.timepicker-dial-out { + opacity: 0; +} + +.timepicker-dial-out.timepicker-hours { + -webkit-transform: scale(1.1, 1.1); + transform: scale(1.1, 1.1); +} + +.timepicker-dial-out.timepicker-minutes { + -webkit-transform: scale(0.8, 0.8); + transform: scale(0.8, 0.8); +} + +.timepicker-canvas { + -webkit-transition: opacity 175ms; + transition: opacity 175ms; +} + +.timepicker-canvas line { + stroke: #26a69a; + stroke-width: 4; + stroke-linecap: round; +} + +.timepicker-canvas-out { + opacity: 0.25; +} + +.timepicker-canvas-bearing { + stroke: none; + fill: #26a69a; +} + +.timepicker-canvas-bg { + stroke: none; + fill: #26a69a; +} + +/* Footer */ +.timepicker-footer { + margin: 0 auto; + padding: 5px 1rem; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: justify; + -webkit-justify-content: space-between; + -ms-flex-pack: justify; + justify-content: space-between; +} + +.timepicker-clear { + color: #F44336; +} + +.timepicker-close { + color: #26a69a; +} + +.timepicker-clear, +.timepicker-close { + padding: 0 20px; +} + +/* Media Queries */ +@media only screen and (min-width: 601px) { + .timepicker-modal { + max-width: 600px; + } + .timepicker-container.modal-content { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + } + .timepicker-text-container { + top: 32%; + } + .timepicker-display-am-pm { + position: relative; + right: auto; + bottom: auto; + text-align: center; + margin-top: 1.2rem; + } +} diff --git a/css/style.css b/css/style.css new file mode 100644 index 0000000..303f503 --- /dev/null +++ b/css/style.css @@ -0,0 +1,10 @@ + +.td-input { + padding: 0; + } + +.td-input input[type="text"]:not(.browser-default) { + margin: 0; + background-repeat: no-repeat; + background-position: right center; +} \ No newline at end of file diff --git a/fonts/flUhRq6tzZclQEJ-Vdg-IuiaDsNc.woff2 b/fonts/flUhRq6tzZclQEJ-Vdg-IuiaDsNc.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..28fc9e48d600b3b63d289184e75d30c5243656cb GIT binary patch literal 110560 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Μ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 literal 0 HcmV?d00001 diff --git a/nok.png b/img/nok.png similarity index 100% rename from nok.png rename to img/nok.png diff --git a/ok.png b/img/ok.png similarity index 100% rename from ok.png rename to img/ok.png diff --git a/wait.gif b/img/wait.gif similarity index 100% rename from wait.gif rename to img/wait.gif diff --git a/index.php b/index.php index 47ccd13..dee80e4 100644 --- a/index.php +++ b/index.php @@ -1,7 +1,21 @@ +<?php include "connect.php"; ?> +<html> + <head> + <title>TablIP</title> + <link rel="stylesheet" href="css/style.css"/> + <link rel="stylesheet" href="css/icons.css"/> + <link rel="stylesheet" href="css/materialize.css"/> + <script type="text/javascript" src="js/script.js"></script> + <meta name="viewport" content="width=device-width, initial-scale=1.0"/> + </head> + <body> + <script type="text/javascript" src="js/materialize.js"></script> <?php if (isset($_GET["site"])) { include "siteNetworks.php"; } else { include "sitesList.php"; } -?> \ No newline at end of file +?> + </body> +</html> \ No newline at end of file diff --git a/js/materialize.js b/js/materialize.js new file mode 100644 index 0000000..1e18382 --- /dev/null +++ b/js/materialize.js @@ -0,0 +1,12374 @@ +/*! + * Materialize v1.0.0 (http://materializecss.com) + * Copyright 2014-2017 Materialize + * MIT License (https://raw.githubusercontent.com/Dogfalo/materialize/master/LICENSE) + */ +var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }; + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +/*! cash-dom 1.3.5, https://github.com/kenwheeler/cash @license MIT */ +(function (factory) { + window.cash = factory(); +})(function () { + var doc = document, + win = window, + ArrayProto = Array.prototype, + slice = ArrayProto.slice, + filter = ArrayProto.filter, + push = ArrayProto.push; + + var noop = function () {}, + isFunction = function (item) { + // @see https://crbug.com/568448 + return typeof item === typeof noop && item.call; + }, + isString = function (item) { + return typeof item === typeof ""; + }; + + var idMatch = /^#[\w-]*$/, + classMatch = /^\.[\w-]*$/, + htmlMatch = /<.+>/, + singlet = /^\w+$/; + + function find(selector, context) { + context = context || doc; + var elems = classMatch.test(selector) ? context.getElementsByClassName(selector.slice(1)) : singlet.test(selector) ? context.getElementsByTagName(selector) : context.querySelectorAll(selector); + return elems; + } + + var frag; + function parseHTML(str) { + if (!frag) { + frag = doc.implementation.createHTMLDocument(null); + var base = frag.createElement("base"); + base.href = doc.location.href; + frag.head.appendChild(base); + } + + frag.body.innerHTML = str; + + return frag.body.childNodes; + } + + function onReady(fn) { + if (doc.readyState !== "loading") { + fn(); + } else { + doc.addEventListener("DOMContentLoaded", fn); + } + } + + function Init(selector, context) { + if (!selector) { + return this; + } + + // If already a cash collection, don't do any further processing + if (selector.cash && selector !== win) { + return selector; + } + + var elems = selector, + i = 0, + length; + + if (isString(selector)) { + elems = idMatch.test(selector) ? + // If an ID use the faster getElementById check + doc.getElementById(selector.slice(1)) : htmlMatch.test(selector) ? + // If HTML, parse it into real elements + parseHTML(selector) : + // else use `find` + find(selector, context); + + // If function, use as shortcut for DOM ready + } else if (isFunction(selector)) { + onReady(selector);return this; + } + + if (!elems) { + return this; + } + + // If a single DOM element is passed in or received via ID, return the single element + if (elems.nodeType || elems === win) { + this[0] = elems; + this.length = 1; + } else { + // Treat like an array and loop through each item. + length = this.length = elems.length; + for (; i < length; i++) { + this[i] = elems[i]; + } + } + + return this; + } + + function cash(selector, context) { + return new Init(selector, context); + } + + var fn = cash.fn = cash.prototype = Init.prototype = { // jshint ignore:line + cash: true, + length: 0, + push: push, + splice: ArrayProto.splice, + map: ArrayProto.map, + init: Init + }; + + Object.defineProperty(fn, "constructor", { value: cash }); + + cash.parseHTML = parseHTML; + cash.noop = noop; + cash.isFunction = isFunction; + cash.isString = isString; + + cash.extend = fn.extend = function (target) { + target = target || {}; + + var args = slice.call(arguments), + length = args.length, + i = 1; + + if (args.length === 1) { + target = this; + i = 0; + } + + for (; i < length; i++) { + if (!args[i]) { + continue; + } + for (var key in args[i]) { + if (args[i].hasOwnProperty(key)) { + target[key] = args[i][key]; + } + } + } + + return target; + }; + + function each(collection, callback) { + var l = collection.length, + i = 0; + + for (; i < l; i++) { + if (callback.call(collection[i], collection[i], i, collection) === false) { + break; + } + } + } + + function matches(el, selector) { + var m = el && (el.matches || el.webkitMatchesSelector || el.mozMatchesSelector || el.msMatchesSelector || el.oMatchesSelector); + return !!m && m.call(el, selector); + } + + function getCompareFunction(selector) { + return ( + /* Use browser's `matches` function if string */ + isString(selector) ? matches : + /* Match a cash element */ + selector.cash ? function (el) { + return selector.is(el); + } : + /* Direct comparison */ + function (el, selector) { + return el === selector; + } + ); + } + + function unique(collection) { + return cash(slice.call(collection).filter(function (item, index, self) { + return self.indexOf(item) === index; + })); + } + + cash.extend({ + merge: function (first, second) { + var len = +second.length, + i = first.length, + j = 0; + + for (; j < len; i++, j++) { + first[i] = second[j]; + } + + first.length = i; + return first; + }, + + each: each, + matches: matches, + unique: unique, + isArray: Array.isArray, + isNumeric: function (n) { + return !isNaN(parseFloat(n)) && isFinite(n); + } + + }); + + var uid = cash.uid = "_cash" + Date.now(); + + function getDataCache(node) { + return node[uid] = node[uid] || {}; + } + + function setData(node, key, value) { + return getDataCache(node)[key] = value; + } + + function getData(node, key) { + var c = getDataCache(node); + if (c[key] === undefined) { + c[key] = node.dataset ? node.dataset[key] : cash(node).attr("data-" + key); + } + return c[key]; + } + + function removeData(node, key) { + var c = getDataCache(node); + if (c) { + delete c[key]; + } else if (node.dataset) { + delete node.dataset[key]; + } else { + cash(node).removeAttr("data-" + name); + } + } + + fn.extend({ + data: function (name, value) { + if (isString(name)) { + return value === undefined ? getData(this[0], name) : this.each(function (v) { + return setData(v, name, value); + }); + } + + for (var key in name) { + this.data(key, name[key]); + } + + return this; + }, + + removeData: function (key) { + return this.each(function (v) { + return removeData(v, key); + }); + } + + }); + + var notWhiteMatch = /\S+/g; + + function getClasses(c) { + return isString(c) && c.match(notWhiteMatch); + } + + function hasClass(v, c) { + return v.classList ? v.classList.contains(c) : new RegExp("(^| )" + c + "( |$)", "gi").test(v.className); + } + + function addClass(v, c, spacedName) { + if (v.classList) { + v.classList.add(c); + } else if (spacedName.indexOf(" " + c + " ")) { + v.className += " " + c; + } + } + + function removeClass(v, c) { + if (v.classList) { + v.classList.remove(c); + } else { + v.className = v.className.replace(c, ""); + } + } + + fn.extend({ + addClass: function (c) { + var classes = getClasses(c); + + return classes ? this.each(function (v) { + var spacedName = " " + v.className + " "; + each(classes, function (c) { + addClass(v, c, spacedName); + }); + }) : this; + }, + + attr: function (name, value) { + if (!name) { + return undefined; + } + + if (isString(name)) { + if (value === undefined) { + return this[0] ? this[0].getAttribute ? this[0].getAttribute(name) : this[0][name] : undefined; + } + + return this.each(function (v) { + if (v.setAttribute) { + v.setAttribute(name, value); + } else { + v[name] = value; + } + }); + } + + for (var key in name) { + this.attr(key, name[key]); + } + + return this; + }, + + hasClass: function (c) { + var check = false, + classes = getClasses(c); + if (classes && classes.length) { + this.each(function (v) { + check = hasClass(v, classes[0]); + return !check; + }); + } + return check; + }, + + prop: function (name, value) { + if (isString(name)) { + return value === undefined ? this[0][name] : this.each(function (v) { + v[name] = value; + }); + } + + for (var key in name) { + this.prop(key, name[key]); + } + + return this; + }, + + removeAttr: function (name) { + return this.each(function (v) { + if (v.removeAttribute) { + v.removeAttribute(name); + } else { + delete v[name]; + } + }); + }, + + removeClass: function (c) { + if (!arguments.length) { + return this.attr("class", ""); + } + var classes = getClasses(c); + return classes ? this.each(function (v) { + each(classes, function (c) { + removeClass(v, c); + }); + }) : this; + }, + + removeProp: function (name) { + return this.each(function (v) { + delete v[name]; + }); + }, + + toggleClass: function (c, state) { + if (state !== undefined) { + return this[state ? "addClass" : "removeClass"](c); + } + var classes = getClasses(c); + return classes ? this.each(function (v) { + var spacedName = " " + v.className + " "; + each(classes, function (c) { + if (hasClass(v, c)) { + removeClass(v, c); + } else { + addClass(v, c, spacedName); + } + }); + }) : this; + } }); + + fn.extend({ + add: function (selector, context) { + return unique(cash.merge(this, cash(selector, context))); + }, + + each: function (callback) { + each(this, callback); + return this; + }, + + eq: function (index) { + return cash(this.get(index)); + }, + + filter: function (selector) { + if (!selector) { + return this; + } + + var comparator = isFunction(selector) ? selector : getCompareFunction(selector); + + return cash(filter.call(this, function (e) { + return comparator(e, selector); + })); + }, + + first: function () { + return this.eq(0); + }, + + get: function (index) { + if (index === undefined) { + return slice.call(this); + } + return index < 0 ? this[index + this.length] : this[index]; + }, + + index: function (elem) { + var child = elem ? cash(elem)[0] : this[0], + collection = elem ? this : cash(child).parent().children(); + return slice.call(collection).indexOf(child); + }, + + last: function () { + return this.eq(-1); + } + + }); + + var camelCase = function () { + var camelRegex = /(?:^\w|[A-Z]|\b\w)/g, + whiteSpace = /[\s-_]+/g; + return function (str) { + return str.replace(camelRegex, function (letter, index) { + return letter[index === 0 ? "toLowerCase" : "toUpperCase"](); + }).replace(whiteSpace, ""); + }; + }(); + + var getPrefixedProp = function () { + var cache = {}, + doc = document, + div = doc.createElement("div"), + style = div.style; + + return function (prop) { + prop = camelCase(prop); + if (cache[prop]) { + return cache[prop]; + } + + var ucProp = prop.charAt(0).toUpperCase() + prop.slice(1), + prefixes = ["webkit", "moz", "ms", "o"], + props = (prop + " " + prefixes.join(ucProp + " ") + ucProp).split(" "); + + each(props, function (p) { + if (p in style) { + cache[p] = prop = cache[prop] = p; + return false; + } + }); + + return cache[prop]; + }; + }(); + + cash.prefixedProp = getPrefixedProp; + cash.camelCase = camelCase; + + fn.extend({ + css: function (prop, value) { + if (isString(prop)) { + prop = getPrefixedProp(prop); + return arguments.length > 1 ? this.each(function (v) { + return v.style[prop] = value; + }) : win.getComputedStyle(this[0])[prop]; + } + + for (var key in prop) { + this.css(key, prop[key]); + } + + return this; + } + + }); + + function compute(el, prop) { + return parseInt(win.getComputedStyle(el[0], null)[prop], 10) || 0; + } + + each(["Width", "Height"], function (v) { + var lower = v.toLowerCase(); + + fn[lower] = function () { + return this[0].getBoundingClientRect()[lower]; + }; + + fn["inner" + v] = function () { + return this[0]["client" + v]; + }; + + fn["outer" + v] = function (margins) { + return this[0]["offset" + v] + (margins ? compute(this, "margin" + (v === "Width" ? "Left" : "Top")) + compute(this, "margin" + (v === "Width" ? "Right" : "Bottom")) : 0); + }; + }); + + function registerEvent(node, eventName, callback) { + var eventCache = getData(node, "_cashEvents") || setData(node, "_cashEvents", {}); + eventCache[eventName] = eventCache[eventName] || []; + eventCache[eventName].push(callback); + node.addEventListener(eventName, callback); + } + + function removeEvent(node, eventName, callback) { + var events = getData(node, "_cashEvents"), + eventCache = events && events[eventName], + index; + + if (!eventCache) { + return; + } + + if (callback) { + node.removeEventListener(eventName, callback); + index = eventCache.indexOf(callback); + if (index >= 0) { + eventCache.splice(index, 1); + } + } else { + each(eventCache, function (event) { + node.removeEventListener(eventName, event); + }); + eventCache = []; + } + } + + fn.extend({ + off: function (eventName, callback) { + return this.each(function (v) { + return removeEvent(v, eventName, callback); + }); + }, + + on: function (eventName, delegate, callback, runOnce) { + // jshint ignore:line + var originalCallback; + if (!isString(eventName)) { + for (var key in eventName) { + this.on(key, delegate, eventName[key]); + } + return this; + } + + if (isFunction(delegate)) { + callback = delegate; + delegate = null; + } + + if (eventName === "ready") { + onReady(callback); + return this; + } + + if (delegate) { + originalCallback = callback; + callback = function (e) { + var t = e.target; + while (!matches(t, delegate)) { + if (t === this || t === null) { + return t = false; + } + + t = t.parentNode; + } + + if (t) { + originalCallback.call(t, e); + } + }; + } + + return this.each(function (v) { + var finalCallback = callback; + if (runOnce) { + finalCallback = function () { + callback.apply(this, arguments); + removeEvent(v, eventName, finalCallback); + }; + } + registerEvent(v, eventName, finalCallback); + }); + }, + + one: function (eventName, delegate, callback) { + return this.on(eventName, delegate, callback, true); + }, + + ready: onReady, + + /** + * Modified + * Triggers browser event + * @param String eventName + * @param Object data - Add properties to event object + */ + trigger: function (eventName, data) { + if (document.createEvent) { + var evt = document.createEvent('HTMLEvents'); + evt.initEvent(eventName, true, false); + evt = this.extend(evt, data); + return this.each(function (v) { + return v.dispatchEvent(evt); + }); + } + } + + }); + + function encode(name, value) { + return "&" + encodeURIComponent(name) + "=" + encodeURIComponent(value).replace(/%20/g, "+"); + } + + function getSelectMultiple_(el) { + var values = []; + each(el.options, function (o) { + if (o.selected) { + values.push(o.value); + } + }); + return values.length ? values : null; + } + + function getSelectSingle_(el) { + var selectedIndex = el.selectedIndex; + return selectedIndex >= 0 ? el.options[selectedIndex].value : null; + } + + function getValue(el) { + var type = el.type; + if (!type) { + return null; + } + switch (type.toLowerCase()) { + case "select-one": + return getSelectSingle_(el); + case "select-multiple": + return getSelectMultiple_(el); + case "radio": + return el.checked ? el.value : null; + case "checkbox": + return el.checked ? el.value : null; + default: + return el.value ? el.value : null; + } + } + + fn.extend({ + serialize: function () { + var query = ""; + + each(this[0].elements || this, function (el) { + if (el.disabled || el.tagName === "FIELDSET") { + return; + } + var name = el.name; + switch (el.type.toLowerCase()) { + case "file": + case "reset": + case "submit": + case "button": + break; + case "select-multiple": + var values = getValue(el); + if (values !== null) { + each(values, function (value) { + query += encode(name, value); + }); + } + break; + default: + var value = getValue(el); + if (value !== null) { + query += encode(name, value); + } + } + }); + + return query.substr(1); + }, + + val: function (value) { + if (value === undefined) { + return getValue(this[0]); + } + + return this.each(function (v) { + return v.value = value; + }); + } + + }); + + function insertElement(el, child, prepend) { + if (prepend) { + var first = el.childNodes[0]; + el.insertBefore(child, first); + } else { + el.appendChild(child); + } + } + + function insertContent(parent, child, prepend) { + var str = isString(child); + + if (!str && child.length) { + each(child, function (v) { + return insertContent(parent, v, prepend); + }); + return; + } + + each(parent, str ? function (v) { + return v.insertAdjacentHTML(prepend ? "afterbegin" : "beforeend", child); + } : function (v, i) { + return insertElement(v, i === 0 ? child : child.cloneNode(true), prepend); + }); + } + + fn.extend({ + after: function (selector) { + cash(selector).insertAfter(this); + return this; + }, + + append: function (content) { + insertContent(this, content); + return this; + }, + + appendTo: function (parent) { + insertContent(cash(parent), this); + return this; + }, + + before: function (selector) { + cash(selector).insertBefore(this); + return this; + }, + + clone: function () { + return cash(this.map(function (v) { + return v.cloneNode(true); + })); + }, + + empty: function () { + this.html(""); + return this; + }, + + html: function (content) { + if (content === undefined) { + return this[0].innerHTML; + } + var source = content.nodeType ? content[0].outerHTML : content; + return this.each(function (v) { + return v.innerHTML = source; + }); + }, + + insertAfter: function (selector) { + var _this = this; + + cash(selector).each(function (el, i) { + var parent = el.parentNode, + sibling = el.nextSibling; + _this.each(function (v) { + parent.insertBefore(i === 0 ? v : v.cloneNode(true), sibling); + }); + }); + + return this; + }, + + insertBefore: function (selector) { + var _this2 = this; + cash(selector).each(function (el, i) { + var parent = el.parentNode; + _this2.each(function (v) { + parent.insertBefore(i === 0 ? v : v.cloneNode(true), el); + }); + }); + return this; + }, + + prepend: function (content) { + insertContent(this, content, true); + return this; + }, + + prependTo: function (parent) { + insertContent(cash(parent), this, true); + return this; + }, + + remove: function () { + return this.each(function (v) { + if (!!v.parentNode) { + return v.parentNode.removeChild(v); + } + }); + }, + + text: function (content) { + if (content === undefined) { + return this[0].textContent; + } + return this.each(function (v) { + return v.textContent = content; + }); + } + + }); + + var docEl = doc.documentElement; + + fn.extend({ + position: function () { + var el = this[0]; + return { + left: el.offsetLeft, + top: el.offsetTop + }; + }, + + offset: function () { + var rect = this[0].getBoundingClientRect(); + return { + top: rect.top + win.pageYOffset - docEl.clientTop, + left: rect.left + win.pageXOffset - docEl.clientLeft + }; + }, + + offsetParent: function () { + return cash(this[0].offsetParent); + } + + }); + + fn.extend({ + children: function (selector) { + var elems = []; + this.each(function (el) { + push.apply(elems, el.children); + }); + elems = unique(elems); + + return !selector ? elems : elems.filter(function (v) { + return matches(v, selector); + }); + }, + + closest: function (selector) { + if (!selector || this.length < 1) { + return cash(); + } + if (this.is(selector)) { + return this.filter(selector); + } + return this.parent().closest(selector); + }, + + is: function (selector) { + if (!selector) { + return false; + } + + var match = false, + comparator = getCompareFunction(selector); + + this.each(function (el) { + match = comparator(el, selector); + return !match; + }); + + return match; + }, + + find: function (selector) { + if (!selector || selector.nodeType) { + return cash(selector && this.has(selector).length ? selector : null); + } + + var elems = []; + this.each(function (el) { + push.apply(elems, find(selector, el)); + }); + + return unique(elems); + }, + + has: function (selector) { + var comparator = isString(selector) ? function (el) { + return find(selector, el).length !== 0; + } : function (el) { + return el.contains(selector); + }; + + return this.filter(comparator); + }, + + next: function () { + return cash(this[0].nextElementSibling); + }, + + not: function (selector) { + if (!selector) { + return this; + } + + var comparator = getCompareFunction(selector); + + return this.filter(function (el) { + return !comparator(el, selector); + }); + }, + + parent: function () { + var result = []; + + this.each(function (item) { + if (item && item.parentNode) { + result.push(item.parentNode); + } + }); + + return unique(result); + }, + + parents: function (selector) { + var last, + result = []; + + this.each(function (item) { + last = item; + + while (last && last.parentNode && last !== doc.body.parentNode) { + last = last.parentNode; + + if (!selector || selector && matches(last, selector)) { + result.push(last); + } + } + }); + + return unique(result); + }, + + prev: function () { + return cash(this[0].previousElementSibling); + }, + + siblings: function (selector) { + var collection = this.parent().children(selector), + el = this[0]; + + return collection.filter(function (i) { + return i !== el; + }); + } + + }); + + return cash; +}); +; +var Component = function () { + /** + * Generic constructor for all components + * @constructor + * @param {Element} el + * @param {Object} options + */ + function Component(classDef, el, options) { + _classCallCheck(this, Component); + + // Display error if el is valid HTML Element + if (!(el instanceof Element)) { + console.error(Error(el + ' is not an HTML Element')); + } + + // If exists, destroy and reinitialize in child + var ins = classDef.getInstance(el); + if (!!ins) { + ins.destroy(); + } + + this.el = el; + this.$el = cash(el); + } + + /** + * Initializes components + * @param {class} classDef + * @param {Element | NodeList | jQuery} els + * @param {Object} options + */ + + + _createClass(Component, null, [{ + key: "init", + value: function init(classDef, els, options) { + var instances = null; + if (els instanceof Element) { + instances = new classDef(els, options); + } else if (!!els && (els.jquery || els.cash || els instanceof NodeList)) { + var instancesArr = []; + for (var i = 0; i < els.length; i++) { + instancesArr.push(new classDef(els[i], options)); + } + instances = instancesArr; + } + + return instances; + } + }]); + + return Component; +}(); + +; // Required for Meteor package, the use of window prevents export by Meteor +(function (window) { + if (window.Package) { + M = {}; + } else { + window.M = {}; + } + + // Check for jQuery + M.jQueryLoaded = !!window.jQuery; +})(window); + +// AMD +if (typeof define === 'function' && define.amd) { + define('M', [], function () { + return M; + }); + + // Common JS +} else if (typeof exports !== 'undefined' && !exports.nodeType) { + if (typeof module !== 'undefined' && !module.nodeType && module.exports) { + exports = module.exports = M; + } + exports.default = M; +} + +M.version = '1.0.0'; + +M.keys = { + TAB: 9, + ENTER: 13, + ESC: 27, + ARROW_UP: 38, + ARROW_DOWN: 40 +}; + +/** + * TabPress Keydown handler + */ +M.tabPressed = false; +M.keyDown = false; +var docHandleKeydown = function (e) { + M.keyDown = true; + if (e.which === M.keys.TAB || e.which === M.keys.ARROW_DOWN || e.which === M.keys.ARROW_UP) { + M.tabPressed = true; + } +}; +var docHandleKeyup = function (e) { + M.keyDown = false; + if (e.which === M.keys.TAB || e.which === M.keys.ARROW_DOWN || e.which === M.keys.ARROW_UP) { + M.tabPressed = false; + } +}; +var docHandleFocus = function (e) { + if (M.keyDown) { + document.body.classList.add('keyboard-focused'); + } +}; +var docHandleBlur = function (e) { + document.body.classList.remove('keyboard-focused'); +}; +document.addEventListener('keydown', docHandleKeydown, true); +document.addEventListener('keyup', docHandleKeyup, true); +document.addEventListener('focus', docHandleFocus, true); +document.addEventListener('blur', docHandleBlur, true); + +/** + * Initialize jQuery wrapper for plugin + * @param {Class} plugin javascript class + * @param {string} pluginName jQuery plugin name + * @param {string} classRef Class reference name + */ +M.initializeJqueryWrapper = function (plugin, pluginName, classRef) { + jQuery.fn[pluginName] = function (methodOrOptions) { + // Call plugin method if valid method name is passed in + if (plugin.prototype[methodOrOptions]) { + var params = Array.prototype.slice.call(arguments, 1); + + // Getter methods + if (methodOrOptions.slice(0, 3) === 'get') { + var instance = this.first()[0][classRef]; + return instance[methodOrOptions].apply(instance, params); + } + + // Void methods + return this.each(function () { + var instance = this[classRef]; + instance[methodOrOptions].apply(instance, params); + }); + + // Initialize plugin if options or no argument is passed in + } else if (typeof methodOrOptions === 'object' || !methodOrOptions) { + plugin.init(this, arguments[0]); + return this; + } + + // Return error if an unrecognized method name is passed in + jQuery.error("Method " + methodOrOptions + " does not exist on jQuery." + pluginName); + }; +}; + +/** + * Automatically initialize components + * @param {Element} context DOM Element to search within for components + */ +M.AutoInit = function (context) { + // Use document.body if no context is given + var root = !!context ? context : document.body; + + var registry = { + Autocomplete: root.querySelectorAll('.autocomplete:not(.no-autoinit)'), + Carousel: root.querySelectorAll('.carousel:not(.no-autoinit)'), + Chips: root.querySelectorAll('.chips:not(.no-autoinit)'), + Collapsible: root.querySelectorAll('.collapsible:not(.no-autoinit)'), + Datepicker: root.querySelectorAll('.datepicker:not(.no-autoinit)'), + Dropdown: root.querySelectorAll('.dropdown-trigger:not(.no-autoinit)'), + Materialbox: root.querySelectorAll('.materialboxed:not(.no-autoinit)'), + Modal: root.querySelectorAll('.modal:not(.no-autoinit)'), + Parallax: root.querySelectorAll('.parallax:not(.no-autoinit)'), + Pushpin: root.querySelectorAll('.pushpin:not(.no-autoinit)'), + ScrollSpy: root.querySelectorAll('.scrollspy:not(.no-autoinit)'), + FormSelect: root.querySelectorAll('select:not(.no-autoinit)'), + Sidenav: root.querySelectorAll('.sidenav:not(.no-autoinit)'), + Tabs: root.querySelectorAll('.tabs:not(.no-autoinit)'), + TapTarget: root.querySelectorAll('.tap-target:not(.no-autoinit)'), + Timepicker: root.querySelectorAll('.timepicker:not(.no-autoinit)'), + Tooltip: root.querySelectorAll('.tooltipped:not(.no-autoinit)'), + FloatingActionButton: root.querySelectorAll('.fixed-action-btn:not(.no-autoinit)') + }; + + for (var pluginName in registry) { + var plugin = M[pluginName]; + plugin.init(registry[pluginName]); + } +}; + +/** + * Generate approximated selector string for a jQuery object + * @param {jQuery} obj jQuery object to be parsed + * @returns {string} + */ +M.objectSelectorString = function (obj) { + var tagStr = obj.prop('tagName') || ''; + var idStr = obj.attr('id') || ''; + var classStr = obj.attr('class') || ''; + return (tagStr + idStr + classStr).replace(/\s/g, ''); +}; + +// Unique Random ID +M.guid = function () { + function s4() { + return Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1); + } + return function () { + return s4() + s4() + '-' + s4() + '-' + s4() + '-' + s4() + '-' + s4() + s4() + s4(); + }; +}(); + +/** + * Escapes hash from special characters + * @param {string} hash String returned from this.hash + * @returns {string} + */ +M.escapeHash = function (hash) { + return hash.replace(/(:|\.|\[|\]|,|=|\/)/g, '\\$1'); +}; + +M.elementOrParentIsFixed = function (element) { + var $element = $(element); + var $checkElements = $element.add($element.parents()); + var isFixed = false; + $checkElements.each(function () { + if ($(this).css('position') === 'fixed') { + isFixed = true; + return false; + } + }); + return isFixed; +}; + +/** + * @typedef {Object} Edges + * @property {Boolean} top If the top edge was exceeded + * @property {Boolean} right If the right edge was exceeded + * @property {Boolean} bottom If the bottom edge was exceeded + * @property {Boolean} left If the left edge was exceeded + */ + +/** + * @typedef {Object} Bounding + * @property {Number} left left offset coordinate + * @property {Number} top top offset coordinate + * @property {Number} width + * @property {Number} height + */ + +/** + * Escapes hash from special characters + * @param {Element} container Container element that acts as the boundary + * @param {Bounding} bounding element bounding that is being checked + * @param {Number} offset offset from edge that counts as exceeding + * @returns {Edges} + */ +M.checkWithinContainer = function (container, bounding, offset) { + var edges = { + top: false, + right: false, + bottom: false, + left: false + }; + + var containerRect = container.getBoundingClientRect(); + // If body element is smaller than viewport, use viewport height instead. + var containerBottom = container === document.body ? Math.max(containerRect.bottom, window.innerHeight) : containerRect.bottom; + + var scrollLeft = container.scrollLeft; + var scrollTop = container.scrollTop; + + var scrolledX = bounding.left - scrollLeft; + var scrolledY = bounding.top - scrollTop; + + // Check for container and viewport for each edge + if (scrolledX < containerRect.left + offset || scrolledX < offset) { + edges.left = true; + } + + if (scrolledX + bounding.width > containerRect.right - offset || scrolledX + bounding.width > window.innerWidth - offset) { + edges.right = true; + } + + if (scrolledY < containerRect.top + offset || scrolledY < offset) { + edges.top = true; + } + + if (scrolledY + bounding.height > containerBottom - offset || scrolledY + bounding.height > window.innerHeight - offset) { + edges.bottom = true; + } + + return edges; +}; + +M.checkPossibleAlignments = function (el, container, bounding, offset) { + var canAlign = { + top: true, + right: true, + bottom: true, + left: true, + spaceOnTop: null, + spaceOnRight: null, + spaceOnBottom: null, + spaceOnLeft: null + }; + + var containerAllowsOverflow = getComputedStyle(container).overflow === 'visible'; + var containerRect = container.getBoundingClientRect(); + var containerHeight = Math.min(containerRect.height, window.innerHeight); + var containerWidth = Math.min(containerRect.width, window.innerWidth); + var elOffsetRect = el.getBoundingClientRect(); + + var scrollLeft = container.scrollLeft; + var scrollTop = container.scrollTop; + + var scrolledX = bounding.left - scrollLeft; + var scrolledYTopEdge = bounding.top - scrollTop; + var scrolledYBottomEdge = bounding.top + elOffsetRect.height - scrollTop; + + // Check for container and viewport for left + canAlign.spaceOnRight = !containerAllowsOverflow ? containerWidth - (scrolledX + bounding.width) : window.innerWidth - (elOffsetRect.left + bounding.width); + if (canAlign.spaceOnRight < 0) { + canAlign.left = false; + } + + // Check for container and viewport for Right + canAlign.spaceOnLeft = !containerAllowsOverflow ? scrolledX - bounding.width + elOffsetRect.width : elOffsetRect.right - bounding.width; + if (canAlign.spaceOnLeft < 0) { + canAlign.right = false; + } + + // Check for container and viewport for Top + canAlign.spaceOnBottom = !containerAllowsOverflow ? containerHeight - (scrolledYTopEdge + bounding.height + offset) : window.innerHeight - (elOffsetRect.top + bounding.height + offset); + if (canAlign.spaceOnBottom < 0) { + canAlign.top = false; + } + + // Check for container and viewport for Bottom + canAlign.spaceOnTop = !containerAllowsOverflow ? scrolledYBottomEdge - (bounding.height - offset) : elOffsetRect.bottom - (bounding.height + offset); + if (canAlign.spaceOnTop < 0) { + canAlign.bottom = false; + } + + return canAlign; +}; + +M.getOverflowParent = function (element) { + if (element == null) { + return null; + } + + if (element === document.body || getComputedStyle(element).overflow !== 'visible') { + return element; + } + + return M.getOverflowParent(element.parentElement); +}; + +/** + * Gets id of component from a trigger + * @param {Element} trigger trigger + * @returns {string} + */ +M.getIdFromTrigger = function (trigger) { + var id = trigger.getAttribute('data-target'); + if (!id) { + id = trigger.getAttribute('href'); + if (id) { + id = id.slice(1); + } else { + id = ''; + } + } + return id; +}; + +/** + * Multi browser support for document scroll top + * @returns {Number} + */ +M.getDocumentScrollTop = function () { + return window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0; +}; + +/** + * Multi browser support for document scroll left + * @returns {Number} + */ +M.getDocumentScrollLeft = function () { + return window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft || 0; +}; + +/** + * @typedef {Object} Edges + * @property {Boolean} top If the top edge was exceeded + * @property {Boolean} right If the right edge was exceeded + * @property {Boolean} bottom If the bottom edge was exceeded + * @property {Boolean} left If the left edge was exceeded + */ + +/** + * @typedef {Object} Bounding + * @property {Number} left left offset coordinate + * @property {Number} top top offset coordinate + * @property {Number} width + * @property {Number} height + */ + +/** + * Get time in ms + * @license https://raw.github.com/jashkenas/underscore/master/LICENSE + * @type {function} + * @return {number} + */ +var getTime = Date.now || function () { + return new Date().getTime(); +}; + +/** + * Returns a function, that, when invoked, will only be triggered at most once + * during a given window of time. Normally, the throttled function will run + * as much as it can, without ever going more than once per `wait` duration; + * but if you'd like to disable the execution on the leading edge, pass + * `{leading: false}`. To disable execution on the trailing edge, ditto. + * @license https://raw.github.com/jashkenas/underscore/master/LICENSE + * @param {function} func + * @param {number} wait + * @param {Object=} options + * @returns {Function} + */ +M.throttle = function (func, wait, options) { + var context = void 0, + args = void 0, + result = void 0; + var timeout = null; + var previous = 0; + options || (options = {}); + var later = function () { + previous = options.leading === false ? 0 : getTime(); + timeout = null; + result = func.apply(context, args); + context = args = null; + }; + return function () { + var now = getTime(); + if (!previous && options.leading === false) previous = now; + var remaining = wait - (now - previous); + context = this; + args = arguments; + if (remaining <= 0) { + clearTimeout(timeout); + timeout = null; + previous = now; + result = func.apply(context, args); + context = args = null; + } else if (!timeout && options.trailing !== false) { + timeout = setTimeout(later, remaining); + } + return result; + }; +}; +; /* + v2.2.0 + 2017 Julian Garnier + Released under the MIT license + */ +var $jscomp = { scope: {} };$jscomp.defineProperty = "function" == typeof Object.defineProperties ? Object.defineProperty : function (e, r, p) { + if (p.get || p.set) throw new TypeError("ES3 does not support getters and setters.");e != Array.prototype && e != Object.prototype && (e[r] = p.value); +};$jscomp.getGlobal = function (e) { + return "undefined" != typeof window && window === e ? e : "undefined" != typeof global && null != global ? global : e; +};$jscomp.global = $jscomp.getGlobal(this);$jscomp.SYMBOL_PREFIX = "jscomp_symbol_"; +$jscomp.initSymbol = function () { + $jscomp.initSymbol = function () {};$jscomp.global.Symbol || ($jscomp.global.Symbol = $jscomp.Symbol); +};$jscomp.symbolCounter_ = 0;$jscomp.Symbol = function (e) { + return $jscomp.SYMBOL_PREFIX + (e || "") + $jscomp.symbolCounter_++; +}; +$jscomp.initSymbolIterator = function () { + $jscomp.initSymbol();var e = $jscomp.global.Symbol.iterator;e || (e = $jscomp.global.Symbol.iterator = $jscomp.global.Symbol("iterator"));"function" != typeof Array.prototype[e] && $jscomp.defineProperty(Array.prototype, e, { configurable: !0, writable: !0, value: function () { + return $jscomp.arrayIterator(this); + } });$jscomp.initSymbolIterator = function () {}; +};$jscomp.arrayIterator = function (e) { + var r = 0;return $jscomp.iteratorPrototype(function () { + return r < e.length ? { done: !1, value: e[r++] } : { done: !0 }; + }); +}; +$jscomp.iteratorPrototype = function (e) { + $jscomp.initSymbolIterator();e = { next: e };e[$jscomp.global.Symbol.iterator] = function () { + return this; + };return e; +};$jscomp.array = $jscomp.array || {};$jscomp.iteratorFromArray = function (e, r) { + $jscomp.initSymbolIterator();e instanceof String && (e += "");var p = 0, + m = { next: function () { + if (p < e.length) { + var u = p++;return { value: r(u, e[u]), done: !1 }; + }m.next = function () { + return { done: !0, value: void 0 }; + };return m.next(); + } };m[Symbol.iterator] = function () { + return m; + };return m; +}; +$jscomp.polyfill = function (e, r, p, m) { + if (r) { + p = $jscomp.global;e = e.split(".");for (m = 0; m < e.length - 1; m++) { + var u = e[m];u in p || (p[u] = {});p = p[u]; + }e = e[e.length - 1];m = p[e];r = r(m);r != m && null != r && $jscomp.defineProperty(p, e, { configurable: !0, writable: !0, value: r }); + } +};$jscomp.polyfill("Array.prototype.keys", function (e) { + return e ? e : function () { + return $jscomp.iteratorFromArray(this, function (e) { + return e; + }); + }; +}, "es6-impl", "es3");var $jscomp$this = this; +(function (r) { + M.anime = r(); +})(function () { + function e(a) { + if (!h.col(a)) try { + return document.querySelectorAll(a); + } catch (c) {} + }function r(a, c) { + for (var d = a.length, b = 2 <= arguments.length ? arguments[1] : void 0, f = [], n = 0; n < d; n++) { + if (n in a) { + var k = a[n];c.call(b, k, n, a) && f.push(k); + } + }return f; + }function p(a) { + return a.reduce(function (a, d) { + return a.concat(h.arr(d) ? p(d) : d); + }, []); + }function m(a) { + if (h.arr(a)) return a; + h.str(a) && (a = e(a) || a);return a instanceof NodeList || a instanceof HTMLCollection ? [].slice.call(a) : [a]; + }function u(a, c) { + return a.some(function (a) { + return a === c; + }); + }function C(a) { + var c = {}, + d;for (d in a) { + c[d] = a[d]; + }return c; + }function D(a, c) { + var d = C(a), + b;for (b in a) { + d[b] = c.hasOwnProperty(b) ? c[b] : a[b]; + }return d; + }function z(a, c) { + var d = C(a), + b;for (b in c) { + d[b] = h.und(a[b]) ? c[b] : a[b]; + }return d; + }function T(a) { + a = a.replace(/^#?([a-f\d])([a-f\d])([a-f\d])$/i, function (a, c, d, k) { + return c + c + d + d + k + k; + });var c = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(a); + a = parseInt(c[1], 16);var d = parseInt(c[2], 16), + c = parseInt(c[3], 16);return "rgba(" + a + "," + d + "," + c + ",1)"; + }function U(a) { + function c(a, c, b) { + 0 > b && (b += 1);1 < b && --b;return b < 1 / 6 ? a + 6 * (c - a) * b : .5 > b ? c : b < 2 / 3 ? a + (c - a) * (2 / 3 - b) * 6 : a; + }var d = /hsl\((\d+),\s*([\d.]+)%,\s*([\d.]+)%\)/g.exec(a) || /hsla\((\d+),\s*([\d.]+)%,\s*([\d.]+)%,\s*([\d.]+)\)/g.exec(a);a = parseInt(d[1]) / 360;var b = parseInt(d[2]) / 100, + f = parseInt(d[3]) / 100, + d = d[4] || 1;if (0 == b) f = b = a = f;else { + var n = .5 > f ? f * (1 + b) : f + b - f * b, + k = 2 * f - n, + f = c(k, n, a + 1 / 3), + b = c(k, n, a);a = c(k, n, a - 1 / 3); + }return "rgba(" + 255 * f + "," + 255 * b + "," + 255 * a + "," + d + ")"; + }function y(a) { + if (a = /([\+\-]?[0-9#\.]+)(%|px|pt|em|rem|in|cm|mm|ex|ch|pc|vw|vh|vmin|vmax|deg|rad|turn)?$/.exec(a)) return a[2]; + }function V(a) { + if (-1 < a.indexOf("translate") || "perspective" === a) return "px";if (-1 < a.indexOf("rotate") || -1 < a.indexOf("skew")) return "deg"; + }function I(a, c) { + return h.fnc(a) ? a(c.target, c.id, c.total) : a; + }function E(a, c) { + if (c in a.style) return getComputedStyle(a).getPropertyValue(c.replace(/([a-z])([A-Z])/g, "$1-$2").toLowerCase()) || "0"; + }function J(a, c) { + if (h.dom(a) && u(W, c)) return "transform";if (h.dom(a) && (a.getAttribute(c) || h.svg(a) && a[c])) return "attribute";if (h.dom(a) && "transform" !== c && E(a, c)) return "css";if (null != a[c]) return "object"; + }function X(a, c) { + var d = V(c), + d = -1 < c.indexOf("scale") ? 1 : 0 + d;a = a.style.transform;if (!a) return d;for (var b = [], f = [], n = [], k = /(\w+)\((.+?)\)/g; b = k.exec(a);) { + f.push(b[1]), n.push(b[2]); + }a = r(n, function (a, b) { + return f[b] === c; + });return a.length ? a[0] : d; + }function K(a, c) { + switch (J(a, c)) {case "transform": + return X(a, c);case "css": + return E(a, c);case "attribute": + return a.getAttribute(c);}return a[c] || 0; + }function L(a, c) { + var d = /^(\*=|\+=|-=)/.exec(a);if (!d) return a;var b = y(a) || 0;c = parseFloat(c);a = parseFloat(a.replace(d[0], ""));switch (d[0][0]) {case "+": + return c + a + b;case "-": + return c - a + b;case "*": + return c * a + b;} + }function F(a, c) { + return Math.sqrt(Math.pow(c.x - a.x, 2) + Math.pow(c.y - a.y, 2)); + }function M(a) { + a = a.points;for (var c = 0, d, b = 0; b < a.numberOfItems; b++) { + var f = a.getItem(b);0 < b && (c += F(d, f));d = f; + }return c; + }function N(a) { + if (a.getTotalLength) return a.getTotalLength();switch (a.tagName.toLowerCase()) {case "circle": + return 2 * Math.PI * a.getAttribute("r");case "rect": + return 2 * a.getAttribute("width") + 2 * a.getAttribute("height");case "line": + return F({ x: a.getAttribute("x1"), y: a.getAttribute("y1") }, { x: a.getAttribute("x2"), y: a.getAttribute("y2") });case "polyline": + return M(a);case "polygon": + var c = a.points;return M(a) + F(c.getItem(c.numberOfItems - 1), c.getItem(0));} + }function Y(a, c) { + function d(b) { + b = void 0 === b ? 0 : b;return a.el.getPointAtLength(1 <= c + b ? c + b : 0); + }var b = d(), + f = d(-1), + n = d(1);switch (a.property) {case "x": + return b.x;case "y": + return b.y; + case "angle": + return 180 * Math.atan2(n.y - f.y, n.x - f.x) / Math.PI;} + }function O(a, c) { + var d = /-?\d*\.?\d+/g, + b;b = h.pth(a) ? a.totalLength : a;if (h.col(b)) { + if (h.rgb(b)) { + var f = /rgb\((\d+,\s*[\d]+,\s*[\d]+)\)/g.exec(b);b = f ? "rgba(" + f[1] + ",1)" : b; + } else b = h.hex(b) ? T(b) : h.hsl(b) ? U(b) : void 0; + } else f = (f = y(b)) ? b.substr(0, b.length - f.length) : b, b = c && !/\s/g.test(b) ? f + c : f;b += "";return { original: b, numbers: b.match(d) ? b.match(d).map(Number) : [0], strings: h.str(a) || c ? b.split(d) : [] }; + }function P(a) { + a = a ? p(h.arr(a) ? a.map(m) : m(a)) : [];return r(a, function (a, d, b) { + return b.indexOf(a) === d; + }); + }function Z(a) { + var c = P(a);return c.map(function (a, b) { + return { target: a, id: b, total: c.length }; + }); + }function aa(a, c) { + var d = C(c);if (h.arr(a)) { + var b = a.length;2 !== b || h.obj(a[0]) ? h.fnc(c.duration) || (d.duration = c.duration / b) : a = { value: a }; + }return m(a).map(function (a, b) { + b = b ? 0 : c.delay;a = h.obj(a) && !h.pth(a) ? a : { value: a };h.und(a.delay) && (a.delay = b);return a; + }).map(function (a) { + return z(a, d); + }); + }function ba(a, c) { + var d = {}, + b;for (b in a) { + var f = I(a[b], c);h.arr(f) && (f = f.map(function (a) { + return I(a, c); + }), 1 === f.length && (f = f[0]));d[b] = f; + }d.duration = parseFloat(d.duration);d.delay = parseFloat(d.delay);return d; + }function ca(a) { + return h.arr(a) ? A.apply(this, a) : Q[a]; + }function da(a, c) { + var d;return a.tweens.map(function (b) { + b = ba(b, c);var f = b.value, + e = K(c.target, a.name), + k = d ? d.to.original : e, + k = h.arr(f) ? f[0] : k, + w = L(h.arr(f) ? f[1] : f, k), + e = y(w) || y(k) || y(e);b.from = O(k, e);b.to = O(w, e);b.start = d ? d.end : a.offset;b.end = b.start + b.delay + b.duration;b.easing = ca(b.easing);b.elasticity = (1E3 - Math.min(Math.max(b.elasticity, 1), 999)) / 1E3;b.isPath = h.pth(f);b.isColor = h.col(b.from.original);b.isColor && (b.round = 1);return d = b; + }); + }function ea(a, c) { + return r(p(a.map(function (a) { + return c.map(function (b) { + var c = J(a.target, b.name);if (c) { + var d = da(b, a);b = { type: c, property: b.name, animatable: a, tweens: d, duration: d[d.length - 1].end, delay: d[0].delay }; + } else b = void 0;return b; + }); + })), function (a) { + return !h.und(a); + }); + }function R(a, c, d, b) { + var f = "delay" === a;return c.length ? (f ? Math.min : Math.max).apply(Math, c.map(function (b) { + return b[a]; + })) : f ? b.delay : d.offset + b.delay + b.duration; + }function fa(a) { + var c = D(ga, a), + d = D(S, a), + b = Z(a.targets), + f = [], + e = z(c, d), + k;for (k in a) { + e.hasOwnProperty(k) || "targets" === k || f.push({ name: k, offset: e.offset, tweens: aa(a[k], d) }); + }a = ea(b, f);return z(c, { children: [], animatables: b, animations: a, duration: R("duration", a, c, d), delay: R("delay", a, c, d) }); + }function q(a) { + function c() { + return window.Promise && new Promise(function (a) { + return p = a; + }); + }function d(a) { + return g.reversed ? g.duration - a : a; + }function b(a) { + for (var b = 0, c = {}, d = g.animations, f = d.length; b < f;) { + var e = d[b], + k = e.animatable, + h = e.tweens, + n = h.length - 1, + l = h[n];n && (l = r(h, function (b) { + return a < b.end; + })[0] || l);for (var h = Math.min(Math.max(a - l.start - l.delay, 0), l.duration) / l.duration, w = isNaN(h) ? 1 : l.easing(h, l.elasticity), h = l.to.strings, p = l.round, n = [], m = void 0, m = l.to.numbers.length, t = 0; t < m; t++) { + var x = void 0, + x = l.to.numbers[t], + q = l.from.numbers[t], + x = l.isPath ? Y(l.value, w * x) : q + w * (x - q);p && (l.isColor && 2 < t || (x = Math.round(x * p) / p));n.push(x); + }if (l = h.length) for (m = h[0], w = 0; w < l; w++) { + p = h[w + 1], t = n[w], isNaN(t) || (m = p ? m + (t + p) : m + (t + " ")); + } else m = n[0];ha[e.type](k.target, e.property, m, c, k.id);e.currentValue = m;b++; + }if (b = Object.keys(c).length) for (d = 0; d < b; d++) { + H || (H = E(document.body, "transform") ? "transform" : "-webkit-transform"), g.animatables[d].target.style[H] = c[d].join(" "); + }g.currentTime = a;g.progress = a / g.duration * 100; + }function f(a) { + if (g[a]) g[a](g); + }function e() { + g.remaining && !0 !== g.remaining && g.remaining--; + }function k(a) { + var k = g.duration, + n = g.offset, + w = n + g.delay, + r = g.currentTime, + x = g.reversed, + q = d(a);if (g.children.length) { + var u = g.children, + v = u.length; + if (q >= g.currentTime) for (var G = 0; G < v; G++) { + u[G].seek(q); + } else for (; v--;) { + u[v].seek(q); + } + }if (q >= w || !k) g.began || (g.began = !0, f("begin")), f("run");if (q > n && q < k) b(q);else if (q <= n && 0 !== r && (b(0), x && e()), q >= k && r !== k || !k) b(k), x || e();f("update");a >= k && (g.remaining ? (t = h, "alternate" === g.direction && (g.reversed = !g.reversed)) : (g.pause(), g.completed || (g.completed = !0, f("complete"), "Promise" in window && (p(), m = c()))), l = 0); + }a = void 0 === a ? {} : a;var h, + t, + l = 0, + p = null, + m = c(), + g = fa(a);g.reset = function () { + var a = g.direction, + c = g.loop;g.currentTime = 0;g.progress = 0;g.paused = !0;g.began = !1;g.completed = !1;g.reversed = "reverse" === a;g.remaining = "alternate" === a && 1 === c ? 2 : c;b(0);for (a = g.children.length; a--;) { + g.children[a].reset(); + } + };g.tick = function (a) { + h = a;t || (t = h);k((l + h - t) * q.speed); + };g.seek = function (a) { + k(d(a)); + };g.pause = function () { + var a = v.indexOf(g);-1 < a && v.splice(a, 1);g.paused = !0; + };g.play = function () { + g.paused && (g.paused = !1, t = 0, l = d(g.currentTime), v.push(g), B || ia()); + };g.reverse = function () { + g.reversed = !g.reversed;t = 0;l = d(g.currentTime); + };g.restart = function () { + g.pause(); + g.reset();g.play(); + };g.finished = m;g.reset();g.autoplay && g.play();return g; + }var ga = { update: void 0, begin: void 0, run: void 0, complete: void 0, loop: 1, direction: "normal", autoplay: !0, offset: 0 }, + S = { duration: 1E3, delay: 0, easing: "easeOutElastic", elasticity: 500, round: 0 }, + W = "translateX translateY translateZ rotate rotateX rotateY rotateZ scale scaleX scaleY scaleZ skewX skewY perspective".split(" "), + H, + h = { arr: function (a) { + return Array.isArray(a); + }, obj: function (a) { + return -1 < Object.prototype.toString.call(a).indexOf("Object"); + }, + pth: function (a) { + return h.obj(a) && a.hasOwnProperty("totalLength"); + }, svg: function (a) { + return a instanceof SVGElement; + }, dom: function (a) { + return a.nodeType || h.svg(a); + }, str: function (a) { + return "string" === typeof a; + }, fnc: function (a) { + return "function" === typeof a; + }, und: function (a) { + return "undefined" === typeof a; + }, hex: function (a) { + return (/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(a) + ); + }, rgb: function (a) { + return (/^rgb/.test(a) + ); + }, hsl: function (a) { + return (/^hsl/.test(a) + ); + }, col: function (a) { + return h.hex(a) || h.rgb(a) || h.hsl(a); + } }, + A = function () { + function a(a, d, b) { + return (((1 - 3 * b + 3 * d) * a + (3 * b - 6 * d)) * a + 3 * d) * a; + }return function (c, d, b, f) { + if (0 <= c && 1 >= c && 0 <= b && 1 >= b) { + var e = new Float32Array(11);if (c !== d || b !== f) for (var k = 0; 11 > k; ++k) { + e[k] = a(.1 * k, c, b); + }return function (k) { + if (c === d && b === f) return k;if (0 === k) return 0;if (1 === k) return 1;for (var h = 0, l = 1; 10 !== l && e[l] <= k; ++l) { + h += .1; + }--l;var l = h + (k - e[l]) / (e[l + 1] - e[l]) * .1, + n = 3 * (1 - 3 * b + 3 * c) * l * l + 2 * (3 * b - 6 * c) * l + 3 * c;if (.001 <= n) { + for (h = 0; 4 > h; ++h) { + n = 3 * (1 - 3 * b + 3 * c) * l * l + 2 * (3 * b - 6 * c) * l + 3 * c;if (0 === n) break;var m = a(l, c, b) - k, + l = l - m / n; + }k = l; + } else if (0 === n) k = l;else { + var l = h, + h = h + .1, + g = 0;do { + m = l + (h - l) / 2, n = a(m, c, b) - k, 0 < n ? h = m : l = m; + } while (1e-7 < Math.abs(n) && 10 > ++g);k = m; + }return a(k, d, f); + }; + } + }; + }(), + Q = function () { + function a(a, b) { + return 0 === a || 1 === a ? a : -Math.pow(2, 10 * (a - 1)) * Math.sin(2 * (a - 1 - b / (2 * Math.PI) * Math.asin(1)) * Math.PI / b); + }var c = "Quad Cubic Quart Quint Sine Expo Circ Back Elastic".split(" "), + d = { In: [[.55, .085, .68, .53], [.55, .055, .675, .19], [.895, .03, .685, .22], [.755, .05, .855, .06], [.47, 0, .745, .715], [.95, .05, .795, .035], [.6, .04, .98, .335], [.6, -.28, .735, .045], a], Out: [[.25, .46, .45, .94], [.215, .61, .355, 1], [.165, .84, .44, 1], [.23, 1, .32, 1], [.39, .575, .565, 1], [.19, 1, .22, 1], [.075, .82, .165, 1], [.175, .885, .32, 1.275], function (b, c) { + return 1 - a(1 - b, c); + }], InOut: [[.455, .03, .515, .955], [.645, .045, .355, 1], [.77, 0, .175, 1], [.86, 0, .07, 1], [.445, .05, .55, .95], [1, 0, 0, 1], [.785, .135, .15, .86], [.68, -.55, .265, 1.55], function (b, c) { + return .5 > b ? a(2 * b, c) / 2 : 1 - a(-2 * b + 2, c) / 2; + }] }, + b = { linear: A(.25, .25, .75, .75) }, + f = {}, + e;for (e in d) { + f.type = e, d[f.type].forEach(function (a) { + return function (d, f) { + b["ease" + a.type + c[f]] = h.fnc(d) ? d : A.apply($jscomp$this, d); + }; + }(f)), f = { type: f.type }; + }return b; + }(), + ha = { css: function (a, c, d) { + return a.style[c] = d; + }, attribute: function (a, c, d) { + return a.setAttribute(c, d); + }, object: function (a, c, d) { + return a[c] = d; + }, transform: function (a, c, d, b, f) { + b[f] || (b[f] = []);b[f].push(c + "(" + d + ")"); + } }, + v = [], + B = 0, + ia = function () { + function a() { + B = requestAnimationFrame(c); + }function c(c) { + var b = v.length;if (b) { + for (var d = 0; d < b;) { + v[d] && v[d].tick(c), d++; + }a(); + } else cancelAnimationFrame(B), B = 0; + }return a; + }();q.version = "2.2.0";q.speed = 1;q.running = v;q.remove = function (a) { + a = P(a);for (var c = v.length; c--;) { + for (var d = v[c], b = d.animations, f = b.length; f--;) { + u(a, b[f].animatable.target) && (b.splice(f, 1), b.length || d.pause()); + } + } + };q.getValue = K;q.path = function (a, c) { + var d = h.str(a) ? e(a)[0] : a, + b = c || 100;return function (a) { + return { el: d, property: a, totalLength: N(d) * (b / 100) }; + }; + };q.setDashoffset = function (a) { + var c = N(a);a.setAttribute("stroke-dasharray", c);return c; + };q.bezier = A;q.easings = Q;q.timeline = function (a) { + var c = q(a);c.pause();c.duration = 0;c.add = function (d) { + c.children.forEach(function (a) { + a.began = !0;a.completed = !0; + });m(d).forEach(function (b) { + var d = z(b, D(S, a || {}));d.targets = d.targets || a.targets;b = c.duration;var e = d.offset;d.autoplay = !1;d.direction = c.direction;d.offset = h.und(e) ? b : L(e, b);c.began = !0;c.completed = !0;c.seek(d.offset);d = q(d);d.began = !0;d.completed = !0;d.duration > b && (c.duration = d.duration);c.children.push(d); + });c.seek(0);c.reset();c.autoplay && c.restart();return c; + };return c; + };q.random = function (a, c) { + return Math.floor(Math.random() * (c - a + 1)) + a; + };return q; +}); +;(function ($, anim) { + 'use strict'; + + var _defaults = { + accordion: true, + onOpenStart: undefined, + onOpenEnd: undefined, + onCloseStart: undefined, + onCloseEnd: undefined, + inDuration: 300, + outDuration: 300 + }; + + /** + * @class + * + */ + + var Collapsible = function (_Component) { + _inherits(Collapsible, _Component); + + /** + * Construct Collapsible instance + * @constructor + * @param {Element} el + * @param {Object} options + */ + function Collapsible(el, options) { + _classCallCheck(this, Collapsible); + + var _this3 = _possibleConstructorReturn(this, (Collapsible.__proto__ || Object.getPrototypeOf(Collapsible)).call(this, Collapsible, el, options)); + + _this3.el.M_Collapsible = _this3; + + /** + * Options for the collapsible + * @member Collapsible#options + * @prop {Boolean} [accordion=false] - Type of the collapsible + * @prop {Function} onOpenStart - Callback function called before collapsible is opened + * @prop {Function} onOpenEnd - Callback function called after collapsible is opened + * @prop {Function} onCloseStart - Callback function called before collapsible is closed + * @prop {Function} onCloseEnd - Callback function called after collapsible is closed + * @prop {Number} inDuration - Transition in duration in milliseconds. + * @prop {Number} outDuration - Transition duration in milliseconds. + */ + _this3.options = $.extend({}, Collapsible.defaults, options); + + // Setup tab indices + _this3.$headers = _this3.$el.children('li').children('.collapsible-header'); + _this3.$headers.attr('tabindex', 0); + + _this3._setupEventHandlers(); + + // Open first active + var $activeBodies = _this3.$el.children('li.active').children('.collapsible-body'); + if (_this3.options.accordion) { + // Handle Accordion + $activeBodies.first().css('display', 'block'); + } else { + // Handle Expandables + $activeBodies.css('display', 'block'); + } + return _this3; + } + + _createClass(Collapsible, [{ + key: "destroy", + + + /** + * Teardown component + */ + value: function destroy() { + this._removeEventHandlers(); + this.el.M_Collapsible = undefined; + } + + /** + * Setup Event Handlers + */ + + }, { + key: "_setupEventHandlers", + value: function _setupEventHandlers() { + var _this4 = this; + + this._handleCollapsibleClickBound = this._handleCollapsibleClick.bind(this); + this._handleCollapsibleKeydownBound = this._handleCollapsibleKeydown.bind(this); + this.el.addEventListener('click', this._handleCollapsibleClickBound); + this.$headers.each(function (header) { + header.addEventListener('keydown', _this4._handleCollapsibleKeydownBound); + }); + } + + /** + * Remove Event Handlers + */ + + }, { + key: "_removeEventHandlers", + value: function _removeEventHandlers() { + var _this5 = this; + + this.el.removeEventListener('click', this._handleCollapsibleClickBound); + this.$headers.each(function (header) { + header.removeEventListener('keydown', _this5._handleCollapsibleKeydownBound); + }); + } + + /** + * Handle Collapsible Click + * @param {Event} e + */ + + }, { + key: "_handleCollapsibleClick", + value: function _handleCollapsibleClick(e) { + var $header = $(e.target).closest('.collapsible-header'); + if (e.target && $header.length) { + var $collapsible = $header.closest('.collapsible'); + if ($collapsible[0] === this.el) { + var $collapsibleLi = $header.closest('li'); + var $collapsibleLis = $collapsible.children('li'); + var isActive = $collapsibleLi[0].classList.contains('active'); + var index = $collapsibleLis.index($collapsibleLi); + + if (isActive) { + this.close(index); + } else { + this.open(index); + } + } + } + } + + /** + * Handle Collapsible Keydown + * @param {Event} e + */ + + }, { + key: "_handleCollapsibleKeydown", + value: function _handleCollapsibleKeydown(e) { + if (e.keyCode === 13) { + this._handleCollapsibleClickBound(e); + } + } + + /** + * Animate in collapsible slide + * @param {Number} index - 0th index of slide + */ + + }, { + key: "_animateIn", + value: function _animateIn(index) { + var _this6 = this; + + var $collapsibleLi = this.$el.children('li').eq(index); + if ($collapsibleLi.length) { + var $body = $collapsibleLi.children('.collapsible-body'); + + anim.remove($body[0]); + $body.css({ + display: 'block', + overflow: 'hidden', + height: 0, + paddingTop: '', + paddingBottom: '' + }); + + var pTop = $body.css('padding-top'); + var pBottom = $body.css('padding-bottom'); + var finalHeight = $body[0].scrollHeight; + $body.css({ + paddingTop: 0, + paddingBottom: 0 + }); + + anim({ + targets: $body[0], + height: finalHeight, + paddingTop: pTop, + paddingBottom: pBottom, + duration: this.options.inDuration, + easing: 'easeInOutCubic', + complete: function (anim) { + $body.css({ + overflow: '', + paddingTop: '', + paddingBottom: '', + height: '' + }); + + // onOpenEnd callback + if (typeof _this6.options.onOpenEnd === 'function') { + _this6.options.onOpenEnd.call(_this6, $collapsibleLi[0]); + } + } + }); + } + } + + /** + * Animate out collapsible slide + * @param {Number} index - 0th index of slide to open + */ + + }, { + key: "_animateOut", + value: function _animateOut(index) { + var _this7 = this; + + var $collapsibleLi = this.$el.children('li').eq(index); + if ($collapsibleLi.length) { + var $body = $collapsibleLi.children('.collapsible-body'); + anim.remove($body[0]); + $body.css('overflow', 'hidden'); + anim({ + targets: $body[0], + height: 0, + paddingTop: 0, + paddingBottom: 0, + duration: this.options.outDuration, + easing: 'easeInOutCubic', + complete: function () { + $body.css({ + height: '', + overflow: '', + padding: '', + display: '' + }); + + // onCloseEnd callback + if (typeof _this7.options.onCloseEnd === 'function') { + _this7.options.onCloseEnd.call(_this7, $collapsibleLi[0]); + } + } + }); + } + } + + /** + * Open Collapsible + * @param {Number} index - 0th index of slide + */ + + }, { + key: "open", + value: function open(index) { + var _this8 = this; + + var $collapsibleLi = this.$el.children('li').eq(index); + if ($collapsibleLi.length && !$collapsibleLi[0].classList.contains('active')) { + // onOpenStart callback + if (typeof this.options.onOpenStart === 'function') { + this.options.onOpenStart.call(this, $collapsibleLi[0]); + } + + // Handle accordion behavior + if (this.options.accordion) { + var $collapsibleLis = this.$el.children('li'); + var $activeLis = this.$el.children('li.active'); + $activeLis.each(function (el) { + var index = $collapsibleLis.index($(el)); + _this8.close(index); + }); + } + + // Animate in + $collapsibleLi[0].classList.add('active'); + this._animateIn(index); + } + } + + /** + * Close Collapsible + * @param {Number} index - 0th index of slide + */ + + }, { + key: "close", + value: function close(index) { + var $collapsibleLi = this.$el.children('li').eq(index); + if ($collapsibleLi.length && $collapsibleLi[0].classList.contains('active')) { + // onCloseStart callback + if (typeof this.options.onCloseStart === 'function') { + this.options.onCloseStart.call(this, $collapsibleLi[0]); + } + + // Animate out + $collapsibleLi[0].classList.remove('active'); + this._animateOut(index); + } + } + }], [{ + key: "init", + value: function init(els, options) { + return _get(Collapsible.__proto__ || Object.getPrototypeOf(Collapsible), "init", this).call(this, this, els, options); + } + + /** + * Get Instance + */ + + }, { + key: "getInstance", + value: function getInstance(el) { + var domElem = !!el.jquery ? el[0] : el; + return domElem.M_Collapsible; + } + }, { + key: "defaults", + get: function () { + return _defaults; + } + }]); + + return Collapsible; + }(Component); + + M.Collapsible = Collapsible; + + if (M.jQueryLoaded) { + M.initializeJqueryWrapper(Collapsible, 'collapsible', 'M_Collapsible'); + } +})(cash, M.anime); +;(function ($, anim) { + 'use strict'; + + var _defaults = { + alignment: 'left', + autoFocus: true, + constrainWidth: true, + container: null, + coverTrigger: true, + closeOnClick: true, + hover: false, + inDuration: 150, + outDuration: 250, + onOpenStart: null, + onOpenEnd: null, + onCloseStart: null, + onCloseEnd: null, + onItemClick: null + }; + + /** + * @class + */ + + var Dropdown = function (_Component2) { + _inherits(Dropdown, _Component2); + + function Dropdown(el, options) { + _classCallCheck(this, Dropdown); + + var _this9 = _possibleConstructorReturn(this, (Dropdown.__proto__ || Object.getPrototypeOf(Dropdown)).call(this, Dropdown, el, options)); + + _this9.el.M_Dropdown = _this9; + Dropdown._dropdowns.push(_this9); + + _this9.id = M.getIdFromTrigger(el); + _this9.dropdownEl = document.getElementById(_this9.id); + _this9.$dropdownEl = $(_this9.dropdownEl); + + /** + * Options for the dropdown + * @member Dropdown#options + * @prop {String} [alignment='left'] - Edge which the dropdown is aligned to + * @prop {Boolean} [autoFocus=true] - Automatically focus dropdown el for keyboard + * @prop {Boolean} [constrainWidth=true] - Constrain width to width of the button + * @prop {Element} container - Container element to attach dropdown to (optional) + * @prop {Boolean} [coverTrigger=true] - Place dropdown over trigger + * @prop {Boolean} [closeOnClick=true] - Close on click of dropdown item + * @prop {Boolean} [hover=false] - Open dropdown on hover + * @prop {Number} [inDuration=150] - Duration of open animation in ms + * @prop {Number} [outDuration=250] - Duration of close animation in ms + * @prop {Function} onOpenStart - Function called when dropdown starts opening + * @prop {Function} onOpenEnd - Function called when dropdown finishes opening + * @prop {Function} onCloseStart - Function called when dropdown starts closing + * @prop {Function} onCloseEnd - Function called when dropdown finishes closing + */ + _this9.options = $.extend({}, Dropdown.defaults, options); + + /** + * Describes open/close state of dropdown + * @type {Boolean} + */ + _this9.isOpen = false; + + /** + * Describes if dropdown content is scrollable + * @type {Boolean} + */ + _this9.isScrollable = false; + + /** + * Describes if touch moving on dropdown content + * @type {Boolean} + */ + _this9.isTouchMoving = false; + + _this9.focusedIndex = -1; + _this9.filterQuery = []; + + // Move dropdown-content after dropdown-trigger + if (!!_this9.options.container) { + $(_this9.options.container).append(_this9.dropdownEl); + } else { + _this9.$el.after(_this9.dropdownEl); + } + + _this9._makeDropdownFocusable(); + _this9._resetFilterQueryBound = _this9._resetFilterQuery.bind(_this9); + _this9._handleDocumentClickBound = _this9._handleDocumentClick.bind(_this9); + _this9._handleDocumentTouchmoveBound = _this9._handleDocumentTouchmove.bind(_this9); + _this9._handleDropdownClickBound = _this9._handleDropdownClick.bind(_this9); + _this9._handleDropdownKeydownBound = _this9._handleDropdownKeydown.bind(_this9); + _this9._handleTriggerKeydownBound = _this9._handleTriggerKeydown.bind(_this9); + _this9._setupEventHandlers(); + return _this9; + } + + _createClass(Dropdown, [{ + key: "destroy", + + + /** + * Teardown component + */ + value: function destroy() { + this._resetDropdownStyles(); + this._removeEventHandlers(); + Dropdown._dropdowns.splice(Dropdown._dropdowns.indexOf(this), 1); + this.el.M_Dropdown = undefined; + } + + /** + * Setup Event Handlers + */ + + }, { + key: "_setupEventHandlers", + value: function _setupEventHandlers() { + // Trigger keydown handler + this.el.addEventListener('keydown', this._handleTriggerKeydownBound); + + // Item click handler + this.dropdownEl.addEventListener('click', this._handleDropdownClickBound); + + // Hover event handlers + if (this.options.hover) { + this._handleMouseEnterBound = this._handleMouseEnter.bind(this); + this.el.addEventListener('mouseenter', this._handleMouseEnterBound); + this._handleMouseLeaveBound = this._handleMouseLeave.bind(this); + this.el.addEventListener('mouseleave', this._handleMouseLeaveBound); + this.dropdownEl.addEventListener('mouseleave', this._handleMouseLeaveBound); + + // Click event handlers + } else { + this._handleClickBound = this._handleClick.bind(this); + this.el.addEventListener('click', this._handleClickBound); + } + } + + /** + * Remove Event Handlers + */ + + }, { + key: "_removeEventHandlers", + value: function _removeEventHandlers() { + this.el.removeEventListener('keydown', this._handleTriggerKeydownBound); + this.dropdownEl.removeEventListener('click', this._handleDropdownClickBound); + + if (this.options.hover) { + this.el.removeEventListener('mouseenter', this._handleMouseEnterBound); + this.el.removeEventListener('mouseleave', this._handleMouseLeaveBound); + this.dropdownEl.removeEventListener('mouseleave', this._handleMouseLeaveBound); + } else { + this.el.removeEventListener('click', this._handleClickBound); + } + } + }, { + key: "_setupTemporaryEventHandlers", + value: function _setupTemporaryEventHandlers() { + // Use capture phase event handler to prevent click + document.body.addEventListener('click', this._handleDocumentClickBound, true); + document.body.addEventListener('touchend', this._handleDocumentClickBound); + document.body.addEventListener('touchmove', this._handleDocumentTouchmoveBound); + this.dropdownEl.addEventListener('keydown', this._handleDropdownKeydownBound); + } + }, { + key: "_removeTemporaryEventHandlers", + value: function _removeTemporaryEventHandlers() { + // Use capture phase event handler to prevent click + document.body.removeEventListener('click', this._handleDocumentClickBound, true); + document.body.removeEventListener('touchend', this._handleDocumentClickBound); + document.body.removeEventListener('touchmove', this._handleDocumentTouchmoveBound); + this.dropdownEl.removeEventListener('keydown', this._handleDropdownKeydownBound); + } + }, { + key: "_handleClick", + value: function _handleClick(e) { + e.preventDefault(); + this.open(); + } + }, { + key: "_handleMouseEnter", + value: function _handleMouseEnter() { + this.open(); + } + }, { + key: "_handleMouseLeave", + value: function _handleMouseLeave(e) { + var toEl = e.toElement || e.relatedTarget; + var leaveToDropdownContent = !!$(toEl).closest('.dropdown-content').length; + var leaveToActiveDropdownTrigger = false; + + var $closestTrigger = $(toEl).closest('.dropdown-trigger'); + if ($closestTrigger.length && !!$closestTrigger[0].M_Dropdown && $closestTrigger[0].M_Dropdown.isOpen) { + leaveToActiveDropdownTrigger = true; + } + + // Close hover dropdown if mouse did not leave to either active dropdown-trigger or dropdown-content + if (!leaveToActiveDropdownTrigger && !leaveToDropdownContent) { + this.close(); + } + } + }, { + key: "_handleDocumentClick", + value: function _handleDocumentClick(e) { + var _this10 = this; + + var $target = $(e.target); + if (this.options.closeOnClick && $target.closest('.dropdown-content').length && !this.isTouchMoving) { + // isTouchMoving to check if scrolling on mobile. + setTimeout(function () { + _this10.close(); + }, 0); + } else if ($target.closest('.dropdown-trigger').length || !$target.closest('.dropdown-content').length) { + setTimeout(function () { + _this10.close(); + }, 0); + } + this.isTouchMoving = false; + } + }, { + key: "_handleTriggerKeydown", + value: function _handleTriggerKeydown(e) { + // ARROW DOWN OR ENTER WHEN SELECT IS CLOSED - open Dropdown + if ((e.which === M.keys.ARROW_DOWN || e.which === M.keys.ENTER) && !this.isOpen) { + e.preventDefault(); + this.open(); + } + } + + /** + * Handle Document Touchmove + * @param {Event} e + */ + + }, { + key: "_handleDocumentTouchmove", + value: function _handleDocumentTouchmove(e) { + var $target = $(e.target); + if ($target.closest('.dropdown-content').length) { + this.isTouchMoving = true; + } + } + + /** + * Handle Dropdown Click + * @param {Event} e + */ + + }, { + key: "_handleDropdownClick", + value: function _handleDropdownClick(e) { + // onItemClick callback + if (typeof this.options.onItemClick === 'function') { + var itemEl = $(e.target).closest('li')[0]; + this.options.onItemClick.call(this, itemEl); + } + } + + /** + * Handle Dropdown Keydown + * @param {Event} e + */ + + }, { + key: "_handleDropdownKeydown", + value: function _handleDropdownKeydown(e) { + if (e.which === M.keys.TAB) { + e.preventDefault(); + this.close(); + + // Navigate down dropdown list + } else if ((e.which === M.keys.ARROW_DOWN || e.which === M.keys.ARROW_UP) && this.isOpen) { + e.preventDefault(); + var direction = e.which === M.keys.ARROW_DOWN ? 1 : -1; + var newFocusedIndex = this.focusedIndex; + var foundNewIndex = false; + do { + newFocusedIndex = newFocusedIndex + direction; + + if (!!this.dropdownEl.children[newFocusedIndex] && this.dropdownEl.children[newFocusedIndex].tabIndex !== -1) { + foundNewIndex = true; + break; + } + } while (newFocusedIndex < this.dropdownEl.children.length && newFocusedIndex >= 0); + + if (foundNewIndex) { + this.focusedIndex = newFocusedIndex; + this._focusFocusedItem(); + } + + // ENTER selects choice on focused item + } else if (e.which === M.keys.ENTER && this.isOpen) { + // Search for <a> and <button> + var focusedElement = this.dropdownEl.children[this.focusedIndex]; + var $activatableElement = $(focusedElement).find('a, button').first(); + + // Click a or button tag if exists, otherwise click li tag + if (!!$activatableElement.length) { + $activatableElement[0].click(); + } else if (!!focusedElement) { + focusedElement.click(); + } + + // Close dropdown on ESC + } else if (e.which === M.keys.ESC && this.isOpen) { + e.preventDefault(); + this.close(); + } + + // CASE WHEN USER TYPE LETTERS + var letter = String.fromCharCode(e.which).toLowerCase(), + nonLetters = [9, 13, 27, 38, 40]; + if (letter && nonLetters.indexOf(e.which) === -1) { + this.filterQuery.push(letter); + + var string = this.filterQuery.join(''), + newOptionEl = $(this.dropdownEl).find('li').filter(function (el) { + return $(el).text().toLowerCase().indexOf(string) === 0; + })[0]; + + if (newOptionEl) { + this.focusedIndex = $(newOptionEl).index(); + this._focusFocusedItem(); + } + } + + this.filterTimeout = setTimeout(this._resetFilterQueryBound, 1000); + } + + /** + * Setup dropdown + */ + + }, { + key: "_resetFilterQuery", + value: function _resetFilterQuery() { + this.filterQuery = []; + } + }, { + key: "_resetDropdownStyles", + value: function _resetDropdownStyles() { + this.$dropdownEl.css({ + display: '', + width: '', + height: '', + left: '', + top: '', + 'transform-origin': '', + transform: '', + opacity: '' + }); + } + }, { + key: "_makeDropdownFocusable", + value: function _makeDropdownFocusable() { + // Needed for arrow key navigation + this.dropdownEl.tabIndex = 0; + + // Only set tabindex if it hasn't been set by user + $(this.dropdownEl).children().each(function (el) { + if (!el.getAttribute('tabindex')) { + el.setAttribute('tabindex', 0); + } + }); + } + }, { + key: "_focusFocusedItem", + value: function _focusFocusedItem() { + if (this.focusedIndex >= 0 && this.focusedIndex < this.dropdownEl.children.length && this.options.autoFocus) { + this.dropdownEl.children[this.focusedIndex].focus(); + } + } + }, { + key: "_getDropdownPosition", + value: function _getDropdownPosition() { + var offsetParentBRect = this.el.offsetParent.getBoundingClientRect(); + var triggerBRect = this.el.getBoundingClientRect(); + var dropdownBRect = this.dropdownEl.getBoundingClientRect(); + + var idealHeight = dropdownBRect.height; + var idealWidth = dropdownBRect.width; + var idealXPos = triggerBRect.left - dropdownBRect.left; + var idealYPos = triggerBRect.top - dropdownBRect.top; + + var dropdownBounds = { + left: idealXPos, + top: idealYPos, + height: idealHeight, + width: idealWidth + }; + + // Countainer here will be closest ancestor with overflow: hidden + var closestOverflowParent = !!this.dropdownEl.offsetParent ? this.dropdownEl.offsetParent : this.dropdownEl.parentNode; + + var alignments = M.checkPossibleAlignments(this.el, closestOverflowParent, dropdownBounds, this.options.coverTrigger ? 0 : triggerBRect.height); + + var verticalAlignment = 'top'; + var horizontalAlignment = this.options.alignment; + idealYPos += this.options.coverTrigger ? 0 : triggerBRect.height; + + // Reset isScrollable + this.isScrollable = false; + + if (!alignments.top) { + if (alignments.bottom) { + verticalAlignment = 'bottom'; + } else { + this.isScrollable = true; + + // Determine which side has most space and cutoff at correct height + if (alignments.spaceOnTop > alignments.spaceOnBottom) { + verticalAlignment = 'bottom'; + idealHeight += alignments.spaceOnTop; + idealYPos -= alignments.spaceOnTop; + } else { + idealHeight += alignments.spaceOnBottom; + } + } + } + + // If preferred horizontal alignment is possible + if (!alignments[horizontalAlignment]) { + var oppositeAlignment = horizontalAlignment === 'left' ? 'right' : 'left'; + if (alignments[oppositeAlignment]) { + horizontalAlignment = oppositeAlignment; + } else { + // Determine which side has most space and cutoff at correct height + if (alignments.spaceOnLeft > alignments.spaceOnRight) { + horizontalAlignment = 'right'; + idealWidth += alignments.spaceOnLeft; + idealXPos -= alignments.spaceOnLeft; + } else { + horizontalAlignment = 'left'; + idealWidth += alignments.spaceOnRight; + } + } + } + + if (verticalAlignment === 'bottom') { + idealYPos = idealYPos - dropdownBRect.height + (this.options.coverTrigger ? triggerBRect.height : 0); + } + if (horizontalAlignment === 'right') { + idealXPos = idealXPos - dropdownBRect.width + triggerBRect.width; + } + return { + x: idealXPos, + y: idealYPos, + verticalAlignment: verticalAlignment, + horizontalAlignment: horizontalAlignment, + height: idealHeight, + width: idealWidth + }; + } + + /** + * Animate in dropdown + */ + + }, { + key: "_animateIn", + value: function _animateIn() { + var _this11 = this; + + anim.remove(this.dropdownEl); + anim({ + targets: this.dropdownEl, + opacity: { + value: [0, 1], + easing: 'easeOutQuad' + }, + scaleX: [0.3, 1], + scaleY: [0.3, 1], + duration: this.options.inDuration, + easing: 'easeOutQuint', + complete: function (anim) { + if (_this11.options.autoFocus) { + _this11.dropdownEl.focus(); + } + + // onOpenEnd callback + if (typeof _this11.options.onOpenEnd === 'function') { + _this11.options.onOpenEnd.call(_this11, _this11.el); + } + } + }); + } + + /** + * Animate out dropdown + */ + + }, { + key: "_animateOut", + value: function _animateOut() { + var _this12 = this; + + anim.remove(this.dropdownEl); + anim({ + targets: this.dropdownEl, + opacity: { + value: 0, + easing: 'easeOutQuint' + }, + scaleX: 0.3, + scaleY: 0.3, + duration: this.options.outDuration, + easing: 'easeOutQuint', + complete: function (anim) { + _this12._resetDropdownStyles(); + + // onCloseEnd callback + if (typeof _this12.options.onCloseEnd === 'function') { + _this12.options.onCloseEnd.call(_this12, _this12.el); + } + } + }); + } + + /** + * Place dropdown + */ + + }, { + key: "_placeDropdown", + value: function _placeDropdown() { + // Set width before calculating positionInfo + var idealWidth = this.options.constrainWidth ? this.el.getBoundingClientRect().width : this.dropdownEl.getBoundingClientRect().width; + this.dropdownEl.style.width = idealWidth + 'px'; + + var positionInfo = this._getDropdownPosition(); + this.dropdownEl.style.left = positionInfo.x + 'px'; + this.dropdownEl.style.top = positionInfo.y + 'px'; + this.dropdownEl.style.height = positionInfo.height + 'px'; + this.dropdownEl.style.width = positionInfo.width + 'px'; + this.dropdownEl.style.transformOrigin = (positionInfo.horizontalAlignment === 'left' ? '0' : '100%') + " " + (positionInfo.verticalAlignment === 'top' ? '0' : '100%'); + } + + /** + * Open Dropdown + */ + + }, { + key: "open", + value: function open() { + if (this.isOpen) { + return; + } + this.isOpen = true; + + // onOpenStart callback + if (typeof this.options.onOpenStart === 'function') { + this.options.onOpenStart.call(this, this.el); + } + + // Reset styles + this._resetDropdownStyles(); + this.dropdownEl.style.display = 'block'; + + this._placeDropdown(); + this._animateIn(); + this._setupTemporaryEventHandlers(); + } + + /** + * Close Dropdown + */ + + }, { + key: "close", + value: function close() { + if (!this.isOpen) { + return; + } + this.isOpen = false; + this.focusedIndex = -1; + + // onCloseStart callback + if (typeof this.options.onCloseStart === 'function') { + this.options.onCloseStart.call(this, this.el); + } + + this._animateOut(); + this._removeTemporaryEventHandlers(); + + if (this.options.autoFocus) { + this.el.focus(); + } + } + + /** + * Recalculate dimensions + */ + + }, { + key: "recalculateDimensions", + value: function recalculateDimensions() { + if (this.isOpen) { + this.$dropdownEl.css({ + width: '', + height: '', + left: '', + top: '', + 'transform-origin': '' + }); + this._placeDropdown(); + } + } + }], [{ + key: "init", + value: function init(els, options) { + return _get(Dropdown.__proto__ || Object.getPrototypeOf(Dropdown), "init", this).call(this, this, els, options); + } + + /** + * Get Instance + */ + + }, { + key: "getInstance", + value: function getInstance(el) { + var domElem = !!el.jquery ? el[0] : el; + return domElem.M_Dropdown; + } + }, { + key: "defaults", + get: function () { + return _defaults; + } + }]); + + return Dropdown; + }(Component); + + /** + * @static + * @memberof Dropdown + */ + + + Dropdown._dropdowns = []; + + M.Dropdown = Dropdown; + + if (M.jQueryLoaded) { + M.initializeJqueryWrapper(Dropdown, 'dropdown', 'M_Dropdown'); + } +})(cash, M.anime); +;(function ($, anim) { + 'use strict'; + + var _defaults = { + opacity: 0.5, + inDuration: 250, + outDuration: 250, + onOpenStart: null, + onOpenEnd: null, + onCloseStart: null, + onCloseEnd: null, + preventScrolling: true, + dismissible: true, + startingTop: '4%', + endingTop: '10%' + }; + + /** + * @class + * + */ + + var Modal = function (_Component3) { + _inherits(Modal, _Component3); + + /** + * Construct Modal instance and set up overlay + * @constructor + * @param {Element} el + * @param {Object} options + */ + function Modal(el, options) { + _classCallCheck(this, Modal); + + var _this13 = _possibleConstructorReturn(this, (Modal.__proto__ || Object.getPrototypeOf(Modal)).call(this, Modal, el, options)); + + _this13.el.M_Modal = _this13; + + /** + * Options for the modal + * @member Modal#options + * @prop {Number} [opacity=0.5] - Opacity of the modal overlay + * @prop {Number} [inDuration=250] - Length in ms of enter transition + * @prop {Number} [outDuration=250] - Length in ms of exit transition + * @prop {Function} onOpenStart - Callback function called before modal is opened + * @prop {Function} onOpenEnd - Callback function called after modal is opened + * @prop {Function} onCloseStart - Callback function called before modal is closed + * @prop {Function} onCloseEnd - Callback function called after modal is closed + * @prop {Boolean} [dismissible=true] - Allow modal to be dismissed by keyboard or overlay click + * @prop {String} [startingTop='4%'] - startingTop + * @prop {String} [endingTop='10%'] - endingTop + */ + _this13.options = $.extend({}, Modal.defaults, options); + + /** + * Describes open/close state of modal + * @type {Boolean} + */ + _this13.isOpen = false; + + _this13.id = _this13.$el.attr('id'); + _this13._openingTrigger = undefined; + _this13.$overlay = $('<div class="modal-overlay"></div>'); + _this13.el.tabIndex = 0; + _this13._nthModalOpened = 0; + + Modal._count++; + _this13._setupEventHandlers(); + return _this13; + } + + _createClass(Modal, [{ + key: "destroy", + + + /** + * Teardown component + */ + value: function destroy() { + Modal._count--; + this._removeEventHandlers(); + this.el.removeAttribute('style'); + this.$overlay.remove(); + this.el.M_Modal = undefined; + } + + /** + * Setup Event Handlers + */ + + }, { + key: "_setupEventHandlers", + value: function _setupEventHandlers() { + this._handleOverlayClickBound = this._handleOverlayClick.bind(this); + this._handleModalCloseClickBound = this._handleModalCloseClick.bind(this); + + if (Modal._count === 1) { + document.body.addEventListener('click', this._handleTriggerClick); + } + this.$overlay[0].addEventListener('click', this._handleOverlayClickBound); + this.el.addEventListener('click', this._handleModalCloseClickBound); + } + + /** + * Remove Event Handlers + */ + + }, { + key: "_removeEventHandlers", + value: function _removeEventHandlers() { + if (Modal._count === 0) { + document.body.removeEventListener('click', this._handleTriggerClick); + } + this.$overlay[0].removeEventListener('click', this._handleOverlayClickBound); + this.el.removeEventListener('click', this._handleModalCloseClickBound); + } + + /** + * Handle Trigger Click + * @param {Event} e + */ + + }, { + key: "_handleTriggerClick", + value: function _handleTriggerClick(e) { + var $trigger = $(e.target).closest('.modal-trigger'); + if ($trigger.length) { + var modalId = M.getIdFromTrigger($trigger[0]); + var modalInstance = document.getElementById(modalId).M_Modal; + if (modalInstance) { + modalInstance.open($trigger); + } + e.preventDefault(); + } + } + + /** + * Handle Overlay Click + */ + + }, { + key: "_handleOverlayClick", + value: function _handleOverlayClick() { + if (this.options.dismissible) { + this.close(); + } + } + + /** + * Handle Modal Close Click + * @param {Event} e + */ + + }, { + key: "_handleModalCloseClick", + value: function _handleModalCloseClick(e) { + var $closeTrigger = $(e.target).closest('.modal-close'); + if ($closeTrigger.length) { + this.close(); + } + } + + /** + * Handle Keydown + * @param {Event} e + */ + + }, { + key: "_handleKeydown", + value: function _handleKeydown(e) { + // ESC key + if (e.keyCode === 27 && this.options.dismissible) { + this.close(); + } + } + + /** + * Handle Focus + * @param {Event} e + */ + + }, { + key: "_handleFocus", + value: function _handleFocus(e) { + // Only trap focus if this modal is the last model opened (prevents loops in nested modals). + if (!this.el.contains(e.target) && this._nthModalOpened === Modal._modalsOpen) { + this.el.focus(); + } + } + + /** + * Animate in modal + */ + + }, { + key: "_animateIn", + value: function _animateIn() { + var _this14 = this; + + // Set initial styles + $.extend(this.el.style, { + display: 'block', + opacity: 0 + }); + $.extend(this.$overlay[0].style, { + display: 'block', + opacity: 0 + }); + + // Animate overlay + anim({ + targets: this.$overlay[0], + opacity: this.options.opacity, + duration: this.options.inDuration, + easing: 'easeOutQuad' + }); + + // Define modal animation options + var enterAnimOptions = { + targets: this.el, + duration: this.options.inDuration, + easing: 'easeOutCubic', + // Handle modal onOpenEnd callback + complete: function () { + if (typeof _this14.options.onOpenEnd === 'function') { + _this14.options.onOpenEnd.call(_this14, _this14.el, _this14._openingTrigger); + } + } + }; + + // Bottom sheet animation + if (this.el.classList.contains('bottom-sheet')) { + $.extend(enterAnimOptions, { + bottom: 0, + opacity: 1 + }); + anim(enterAnimOptions); + + // Normal modal animation + } else { + $.extend(enterAnimOptions, { + top: [this.options.startingTop, this.options.endingTop], + opacity: 1, + scaleX: [0.8, 1], + scaleY: [0.8, 1] + }); + anim(enterAnimOptions); + } + } + + /** + * Animate out modal + */ + + }, { + key: "_animateOut", + value: function _animateOut() { + var _this15 = this; + + // Animate overlay + anim({ + targets: this.$overlay[0], + opacity: 0, + duration: this.options.outDuration, + easing: 'easeOutQuart' + }); + + // Define modal animation options + var exitAnimOptions = { + targets: this.el, + duration: this.options.outDuration, + easing: 'easeOutCubic', + // Handle modal ready callback + complete: function () { + _this15.el.style.display = 'none'; + _this15.$overlay.remove(); + + // Call onCloseEnd callback + if (typeof _this15.options.onCloseEnd === 'function') { + _this15.options.onCloseEnd.call(_this15, _this15.el); + } + } + }; + + // Bottom sheet animation + if (this.el.classList.contains('bottom-sheet')) { + $.extend(exitAnimOptions, { + bottom: '-100%', + opacity: 0 + }); + anim(exitAnimOptions); + + // Normal modal animation + } else { + $.extend(exitAnimOptions, { + top: [this.options.endingTop, this.options.startingTop], + opacity: 0, + scaleX: 0.8, + scaleY: 0.8 + }); + anim(exitAnimOptions); + } + } + + /** + * Open Modal + * @param {cash} [$trigger] + */ + + }, { + key: "open", + value: function open($trigger) { + if (this.isOpen) { + return; + } + + this.isOpen = true; + Modal._modalsOpen++; + this._nthModalOpened = Modal._modalsOpen; + + // Set Z-Index based on number of currently open modals + this.$overlay[0].style.zIndex = 1000 + Modal._modalsOpen * 2; + this.el.style.zIndex = 1000 + Modal._modalsOpen * 2 + 1; + + // Set opening trigger, undefined indicates modal was opened by javascript + this._openingTrigger = !!$trigger ? $trigger[0] : undefined; + + // onOpenStart callback + if (typeof this.options.onOpenStart === 'function') { + this.options.onOpenStart.call(this, this.el, this._openingTrigger); + } + + if (this.options.preventScrolling) { + document.body.style.overflow = 'hidden'; + } + + this.el.classList.add('open'); + this.el.insertAdjacentElement('afterend', this.$overlay[0]); + + if (this.options.dismissible) { + this._handleKeydownBound = this._handleKeydown.bind(this); + this._handleFocusBound = this._handleFocus.bind(this); + document.addEventListener('keydown', this._handleKeydownBound); + document.addEventListener('focus', this._handleFocusBound, true); + } + + anim.remove(this.el); + anim.remove(this.$overlay[0]); + this._animateIn(); + + // Focus modal + this.el.focus(); + + return this; + } + + /** + * Close Modal + */ + + }, { + key: "close", + value: function close() { + if (!this.isOpen) { + return; + } + + this.isOpen = false; + Modal._modalsOpen--; + this._nthModalOpened = 0; + + // Call onCloseStart callback + if (typeof this.options.onCloseStart === 'function') { + this.options.onCloseStart.call(this, this.el); + } + + this.el.classList.remove('open'); + + // Enable body scrolling only if there are no more modals open. + if (Modal._modalsOpen === 0) { + document.body.style.overflow = ''; + } + + if (this.options.dismissible) { + document.removeEventListener('keydown', this._handleKeydownBound); + document.removeEventListener('focus', this._handleFocusBound, true); + } + + anim.remove(this.el); + anim.remove(this.$overlay[0]); + this._animateOut(); + return this; + } + }], [{ + key: "init", + value: function init(els, options) { + return _get(Modal.__proto__ || Object.getPrototypeOf(Modal), "init", this).call(this, this, els, options); + } + + /** + * Get Instance + */ + + }, { + key: "getInstance", + value: function getInstance(el) { + var domElem = !!el.jquery ? el[0] : el; + return domElem.M_Modal; + } + }, { + key: "defaults", + get: function () { + return _defaults; + } + }]); + + return Modal; + }(Component); + + /** + * @static + * @memberof Modal + */ + + + Modal._modalsOpen = 0; + + /** + * @static + * @memberof Modal + */ + Modal._count = 0; + + M.Modal = Modal; + + if (M.jQueryLoaded) { + M.initializeJqueryWrapper(Modal, 'modal', 'M_Modal'); + } +})(cash, M.anime); +;(function ($, anim) { + 'use strict'; + + var _defaults = { + inDuration: 275, + outDuration: 200, + onOpenStart: null, + onOpenEnd: null, + onCloseStart: null, + onCloseEnd: null + }; + + /** + * @class + * + */ + + var Materialbox = function (_Component4) { + _inherits(Materialbox, _Component4); + + /** + * Construct Materialbox instance + * @constructor + * @param {Element} el + * @param {Object} options + */ + function Materialbox(el, options) { + _classCallCheck(this, Materialbox); + + var _this16 = _possibleConstructorReturn(this, (Materialbox.__proto__ || Object.getPrototypeOf(Materialbox)).call(this, Materialbox, el, options)); + + _this16.el.M_Materialbox = _this16; + + /** + * Options for the modal + * @member Materialbox#options + * @prop {Number} [inDuration=275] - Length in ms of enter transition + * @prop {Number} [outDuration=200] - Length in ms of exit transition + * @prop {Function} onOpenStart - Callback function called before materialbox is opened + * @prop {Function} onOpenEnd - Callback function called after materialbox is opened + * @prop {Function} onCloseStart - Callback function called before materialbox is closed + * @prop {Function} onCloseEnd - Callback function called after materialbox is closed + */ + _this16.options = $.extend({}, Materialbox.defaults, options); + + _this16.overlayActive = false; + _this16.doneAnimating = true; + _this16.placeholder = $('<div></div>').addClass('material-placeholder'); + _this16.originalWidth = 0; + _this16.originalHeight = 0; + _this16.originInlineStyles = _this16.$el.attr('style'); + _this16.caption = _this16.el.getAttribute('data-caption') || ''; + + // Wrap + _this16.$el.before(_this16.placeholder); + _this16.placeholder.append(_this16.$el); + + _this16._setupEventHandlers(); + return _this16; + } + + _createClass(Materialbox, [{ + key: "destroy", + + + /** + * Teardown component + */ + value: function destroy() { + this._removeEventHandlers(); + this.el.M_Materialbox = undefined; + + // Unwrap image + $(this.placeholder).after(this.el).remove(); + + this.$el.removeAttr('style'); + } + + /** + * Setup Event Handlers + */ + + }, { + key: "_setupEventHandlers", + value: function _setupEventHandlers() { + this._handleMaterialboxClickBound = this._handleMaterialboxClick.bind(this); + this.el.addEventListener('click', this._handleMaterialboxClickBound); + } + + /** + * Remove Event Handlers + */ + + }, { + key: "_removeEventHandlers", + value: function _removeEventHandlers() { + this.el.removeEventListener('click', this._handleMaterialboxClickBound); + } + + /** + * Handle Materialbox Click + * @param {Event} e + */ + + }, { + key: "_handleMaterialboxClick", + value: function _handleMaterialboxClick(e) { + // If already modal, return to original + if (this.doneAnimating === false || this.overlayActive && this.doneAnimating) { + this.close(); + } else { + this.open(); + } + } + + /** + * Handle Window Scroll + */ + + }, { + key: "_handleWindowScroll", + value: function _handleWindowScroll() { + if (this.overlayActive) { + this.close(); + } + } + + /** + * Handle Window Resize + */ + + }, { + key: "_handleWindowResize", + value: function _handleWindowResize() { + if (this.overlayActive) { + this.close(); + } + } + + /** + * Handle Window Resize + * @param {Event} e + */ + + }, { + key: "_handleWindowEscape", + value: function _handleWindowEscape(e) { + // ESC key + if (e.keyCode === 27 && this.doneAnimating && this.overlayActive) { + this.close(); + } + } + + /** + * Find ancestors with overflow: hidden; and make visible + */ + + }, { + key: "_makeAncestorsOverflowVisible", + value: function _makeAncestorsOverflowVisible() { + this.ancestorsChanged = $(); + var ancestor = this.placeholder[0].parentNode; + while (ancestor !== null && !$(ancestor).is(document)) { + var curr = $(ancestor); + if (curr.css('overflow') !== 'visible') { + curr.css('overflow', 'visible'); + if (this.ancestorsChanged === undefined) { + this.ancestorsChanged = curr; + } else { + this.ancestorsChanged = this.ancestorsChanged.add(curr); + } + } + ancestor = ancestor.parentNode; + } + } + + /** + * Animate image in + */ + + }, { + key: "_animateImageIn", + value: function _animateImageIn() { + var _this17 = this; + + var animOptions = { + targets: this.el, + height: [this.originalHeight, this.newHeight], + width: [this.originalWidth, this.newWidth], + left: M.getDocumentScrollLeft() + this.windowWidth / 2 - this.placeholder.offset().left - this.newWidth / 2, + top: M.getDocumentScrollTop() + this.windowHeight / 2 - this.placeholder.offset().top - this.newHeight / 2, + duration: this.options.inDuration, + easing: 'easeOutQuad', + complete: function () { + _this17.doneAnimating = true; + + // onOpenEnd callback + if (typeof _this17.options.onOpenEnd === 'function') { + _this17.options.onOpenEnd.call(_this17, _this17.el); + } + } + }; + + // Override max-width or max-height if needed + this.maxWidth = this.$el.css('max-width'); + this.maxHeight = this.$el.css('max-height'); + if (this.maxWidth !== 'none') { + animOptions.maxWidth = this.newWidth; + } + if (this.maxHeight !== 'none') { + animOptions.maxHeight = this.newHeight; + } + + anim(animOptions); + } + + /** + * Animate image out + */ + + }, { + key: "_animateImageOut", + value: function _animateImageOut() { + var _this18 = this; + + var animOptions = { + targets: this.el, + width: this.originalWidth, + height: this.originalHeight, + left: 0, + top: 0, + duration: this.options.outDuration, + easing: 'easeOutQuad', + complete: function () { + _this18.placeholder.css({ + height: '', + width: '', + position: '', + top: '', + left: '' + }); + + // Revert to width or height attribute + if (_this18.attrWidth) { + _this18.$el.attr('width', _this18.attrWidth); + } + if (_this18.attrHeight) { + _this18.$el.attr('height', _this18.attrHeight); + } + + _this18.$el.removeAttr('style'); + _this18.originInlineStyles && _this18.$el.attr('style', _this18.originInlineStyles); + + // Remove class + _this18.$el.removeClass('active'); + _this18.doneAnimating = true; + + // Remove overflow overrides on ancestors + if (_this18.ancestorsChanged.length) { + _this18.ancestorsChanged.css('overflow', ''); + } + + // onCloseEnd callback + if (typeof _this18.options.onCloseEnd === 'function') { + _this18.options.onCloseEnd.call(_this18, _this18.el); + } + } + }; + + anim(animOptions); + } + + /** + * Update open and close vars + */ + + }, { + key: "_updateVars", + value: function _updateVars() { + this.windowWidth = window.innerWidth; + this.windowHeight = window.innerHeight; + this.caption = this.el.getAttribute('data-caption') || ''; + } + + /** + * Open Materialbox + */ + + }, { + key: "open", + value: function open() { + var _this19 = this; + + this._updateVars(); + this.originalWidth = this.el.getBoundingClientRect().width; + this.originalHeight = this.el.getBoundingClientRect().height; + + // Set states + this.doneAnimating = false; + this.$el.addClass('active'); + this.overlayActive = true; + + // onOpenStart callback + if (typeof this.options.onOpenStart === 'function') { + this.options.onOpenStart.call(this, this.el); + } + + // Set positioning for placeholder + this.placeholder.css({ + width: this.placeholder[0].getBoundingClientRect().width + 'px', + height: this.placeholder[0].getBoundingClientRect().height + 'px', + position: 'relative', + top: 0, + left: 0 + }); + + this._makeAncestorsOverflowVisible(); + + // Set css on origin + this.$el.css({ + position: 'absolute', + 'z-index': 1000, + 'will-change': 'left, top, width, height' + }); + + // Change from width or height attribute to css + this.attrWidth = this.$el.attr('width'); + this.attrHeight = this.$el.attr('height'); + if (this.attrWidth) { + this.$el.css('width', this.attrWidth + 'px'); + this.$el.removeAttr('width'); + } + if (this.attrHeight) { + this.$el.css('width', this.attrHeight + 'px'); + this.$el.removeAttr('height'); + } + + // Add overlay + this.$overlay = $('<div id="materialbox-overlay"></div>').css({ + opacity: 0 + }).one('click', function () { + if (_this19.doneAnimating) { + _this19.close(); + } + }); + + // Put before in origin image to preserve z-index layering. + this.$el.before(this.$overlay); + + // Set dimensions if needed + var overlayOffset = this.$overlay[0].getBoundingClientRect(); + this.$overlay.css({ + width: this.windowWidth + 'px', + height: this.windowHeight + 'px', + left: -1 * overlayOffset.left + 'px', + top: -1 * overlayOffset.top + 'px' + }); + + anim.remove(this.el); + anim.remove(this.$overlay[0]); + + // Animate Overlay + anim({ + targets: this.$overlay[0], + opacity: 1, + duration: this.options.inDuration, + easing: 'easeOutQuad' + }); + + // Add and animate caption if it exists + if (this.caption !== '') { + if (this.$photocaption) { + anim.remove(this.$photoCaption[0]); + } + this.$photoCaption = $('<div class="materialbox-caption"></div>'); + this.$photoCaption.text(this.caption); + $('body').append(this.$photoCaption); + this.$photoCaption.css({ display: 'inline' }); + + anim({ + targets: this.$photoCaption[0], + opacity: 1, + duration: this.options.inDuration, + easing: 'easeOutQuad' + }); + } + + // Resize Image + var ratio = 0; + var widthPercent = this.originalWidth / this.windowWidth; + var heightPercent = this.originalHeight / this.windowHeight; + this.newWidth = 0; + this.newHeight = 0; + + if (widthPercent > heightPercent) { + ratio = this.originalHeight / this.originalWidth; + this.newWidth = this.windowWidth * 0.9; + this.newHeight = this.windowWidth * 0.9 * ratio; + } else { + ratio = this.originalWidth / this.originalHeight; + this.newWidth = this.windowHeight * 0.9 * ratio; + this.newHeight = this.windowHeight * 0.9; + } + + this._animateImageIn(); + + // Handle Exit triggers + this._handleWindowScrollBound = this._handleWindowScroll.bind(this); + this._handleWindowResizeBound = this._handleWindowResize.bind(this); + this._handleWindowEscapeBound = this._handleWindowEscape.bind(this); + + window.addEventListener('scroll', this._handleWindowScrollBound); + window.addEventListener('resize', this._handleWindowResizeBound); + window.addEventListener('keyup', this._handleWindowEscapeBound); + } + + /** + * Close Materialbox + */ + + }, { + key: "close", + value: function close() { + var _this20 = this; + + this._updateVars(); + this.doneAnimating = false; + + // onCloseStart callback + if (typeof this.options.onCloseStart === 'function') { + this.options.onCloseStart.call(this, this.el); + } + + anim.remove(this.el); + anim.remove(this.$overlay[0]); + + if (this.caption !== '') { + anim.remove(this.$photoCaption[0]); + } + + // disable exit handlers + window.removeEventListener('scroll', this._handleWindowScrollBound); + window.removeEventListener('resize', this._handleWindowResizeBound); + window.removeEventListener('keyup', this._handleWindowEscapeBound); + + anim({ + targets: this.$overlay[0], + opacity: 0, + duration: this.options.outDuration, + easing: 'easeOutQuad', + complete: function () { + _this20.overlayActive = false; + _this20.$overlay.remove(); + } + }); + + this._animateImageOut(); + + // Remove Caption + reset css settings on image + if (this.caption !== '') { + anim({ + targets: this.$photoCaption[0], + opacity: 0, + duration: this.options.outDuration, + easing: 'easeOutQuad', + complete: function () { + _this20.$photoCaption.remove(); + } + }); + } + } + }], [{ + key: "init", + value: function init(els, options) { + return _get(Materialbox.__proto__ || Object.getPrototypeOf(Materialbox), "init", this).call(this, this, els, options); + } + + /** + * Get Instance + */ + + }, { + key: "getInstance", + value: function getInstance(el) { + var domElem = !!el.jquery ? el[0] : el; + return domElem.M_Materialbox; + } + }, { + key: "defaults", + get: function () { + return _defaults; + } + }]); + + return Materialbox; + }(Component); + + M.Materialbox = Materialbox; + + if (M.jQueryLoaded) { + M.initializeJqueryWrapper(Materialbox, 'materialbox', 'M_Materialbox'); + } +})(cash, M.anime); +;(function ($) { + 'use strict'; + + var _defaults = { + responsiveThreshold: 0 // breakpoint for swipeable + }; + + var Parallax = function (_Component5) { + _inherits(Parallax, _Component5); + + function Parallax(el, options) { + _classCallCheck(this, Parallax); + + var _this21 = _possibleConstructorReturn(this, (Parallax.__proto__ || Object.getPrototypeOf(Parallax)).call(this, Parallax, el, options)); + + _this21.el.M_Parallax = _this21; + + /** + * Options for the Parallax + * @member Parallax#options + * @prop {Number} responsiveThreshold + */ + _this21.options = $.extend({}, Parallax.defaults, options); + _this21._enabled = window.innerWidth > _this21.options.responsiveThreshold; + + _this21.$img = _this21.$el.find('img').first(); + _this21.$img.each(function () { + var el = this; + if (el.complete) $(el).trigger('load'); + }); + + _this21._updateParallax(); + _this21._setupEventHandlers(); + _this21._setupStyles(); + + Parallax._parallaxes.push(_this21); + return _this21; + } + + _createClass(Parallax, [{ + key: "destroy", + + + /** + * Teardown component + */ + value: function destroy() { + Parallax._parallaxes.splice(Parallax._parallaxes.indexOf(this), 1); + this.$img[0].style.transform = ''; + this._removeEventHandlers(); + + this.$el[0].M_Parallax = undefined; + } + }, { + key: "_setupEventHandlers", + value: function _setupEventHandlers() { + this._handleImageLoadBound = this._handleImageLoad.bind(this); + this.$img[0].addEventListener('load', this._handleImageLoadBound); + + if (Parallax._parallaxes.length === 0) { + Parallax._handleScrollThrottled = M.throttle(Parallax._handleScroll, 5); + window.addEventListener('scroll', Parallax._handleScrollThrottled); + + Parallax._handleWindowResizeThrottled = M.throttle(Parallax._handleWindowResize, 5); + window.addEventListener('resize', Parallax._handleWindowResizeThrottled); + } + } + }, { + key: "_removeEventHandlers", + value: function _removeEventHandlers() { + this.$img[0].removeEventListener('load', this._handleImageLoadBound); + + if (Parallax._parallaxes.length === 0) { + window.removeEventListener('scroll', Parallax._handleScrollThrottled); + window.removeEventListener('resize', Parallax._handleWindowResizeThrottled); + } + } + }, { + key: "_setupStyles", + value: function _setupStyles() { + this.$img[0].style.opacity = 1; + } + }, { + key: "_handleImageLoad", + value: function _handleImageLoad() { + this._updateParallax(); + } + }, { + key: "_updateParallax", + value: function _updateParallax() { + var containerHeight = this.$el.height() > 0 ? this.el.parentNode.offsetHeight : 500; + var imgHeight = this.$img[0].offsetHeight; + var parallaxDist = imgHeight - containerHeight; + var bottom = this.$el.offset().top + containerHeight; + var top = this.$el.offset().top; + var scrollTop = M.getDocumentScrollTop(); + var windowHeight = window.innerHeight; + var windowBottom = scrollTop + windowHeight; + var percentScrolled = (windowBottom - top) / (containerHeight + windowHeight); + var parallax = parallaxDist * percentScrolled; + + if (!this._enabled) { + this.$img[0].style.transform = ''; + } else if (bottom > scrollTop && top < scrollTop + windowHeight) { + this.$img[0].style.transform = "translate3D(-50%, " + parallax + "px, 0)"; + } + } + }], [{ + key: "init", + value: function init(els, options) { + return _get(Parallax.__proto__ || Object.getPrototypeOf(Parallax), "init", this).call(this, this, els, options); + } + + /** + * Get Instance + */ + + }, { + key: "getInstance", + value: function getInstance(el) { + var domElem = !!el.jquery ? el[0] : el; + return domElem.M_Parallax; + } + }, { + key: "_handleScroll", + value: function _handleScroll() { + for (var i = 0; i < Parallax._parallaxes.length; i++) { + var parallaxInstance = Parallax._parallaxes[i]; + parallaxInstance._updateParallax.call(parallaxInstance); + } + } + }, { + key: "_handleWindowResize", + value: function _handleWindowResize() { + for (var i = 0; i < Parallax._parallaxes.length; i++) { + var parallaxInstance = Parallax._parallaxes[i]; + parallaxInstance._enabled = window.innerWidth > parallaxInstance.options.responsiveThreshold; + } + } + }, { + key: "defaults", + get: function () { + return _defaults; + } + }]); + + return Parallax; + }(Component); + + /** + * @static + * @memberof Parallax + */ + + + Parallax._parallaxes = []; + + M.Parallax = Parallax; + + if (M.jQueryLoaded) { + M.initializeJqueryWrapper(Parallax, 'parallax', 'M_Parallax'); + } +})(cash); +;(function ($, anim) { + 'use strict'; + + var _defaults = { + duration: 300, + onShow: null, + swipeable: false, + responsiveThreshold: Infinity // breakpoint for swipeable + }; + + /** + * @class + * + */ + + var Tabs = function (_Component6) { + _inherits(Tabs, _Component6); + + /** + * Construct Tabs instance + * @constructor + * @param {Element} el + * @param {Object} options + */ + function Tabs(el, options) { + _classCallCheck(this, Tabs); + + var _this22 = _possibleConstructorReturn(this, (Tabs.__proto__ || Object.getPrototypeOf(Tabs)).call(this, Tabs, el, options)); + + _this22.el.M_Tabs = _this22; + + /** + * Options for the Tabs + * @member Tabs#options + * @prop {Number} duration + * @prop {Function} onShow + * @prop {Boolean} swipeable + * @prop {Number} responsiveThreshold + */ + _this22.options = $.extend({}, Tabs.defaults, options); + + // Setup + _this22.$tabLinks = _this22.$el.children('li.tab').children('a'); + _this22.index = 0; + _this22._setupActiveTabLink(); + + // Setup tabs content + if (_this22.options.swipeable) { + _this22._setupSwipeableTabs(); + } else { + _this22._setupNormalTabs(); + } + + // Setup tabs indicator after content to ensure accurate widths + _this22._setTabsAndTabWidth(); + _this22._createIndicator(); + + _this22._setupEventHandlers(); + return _this22; + } + + _createClass(Tabs, [{ + key: "destroy", + + + /** + * Teardown component + */ + value: function destroy() { + this._removeEventHandlers(); + this._indicator.parentNode.removeChild(this._indicator); + + if (this.options.swipeable) { + this._teardownSwipeableTabs(); + } else { + this._teardownNormalTabs(); + } + + this.$el[0].M_Tabs = undefined; + } + + /** + * Setup Event Handlers + */ + + }, { + key: "_setupEventHandlers", + value: function _setupEventHandlers() { + this._handleWindowResizeBound = this._handleWindowResize.bind(this); + window.addEventListener('resize', this._handleWindowResizeBound); + + this._handleTabClickBound = this._handleTabClick.bind(this); + this.el.addEventListener('click', this._handleTabClickBound); + } + + /** + * Remove Event Handlers + */ + + }, { + key: "_removeEventHandlers", + value: function _removeEventHandlers() { + window.removeEventListener('resize', this._handleWindowResizeBound); + this.el.removeEventListener('click', this._handleTabClickBound); + } + + /** + * Handle window Resize + */ + + }, { + key: "_handleWindowResize", + value: function _handleWindowResize() { + this._setTabsAndTabWidth(); + + if (this.tabWidth !== 0 && this.tabsWidth !== 0) { + this._indicator.style.left = this._calcLeftPos(this.$activeTabLink) + 'px'; + this._indicator.style.right = this._calcRightPos(this.$activeTabLink) + 'px'; + } + } + + /** + * Handle tab click + * @param {Event} e + */ + + }, { + key: "_handleTabClick", + value: function _handleTabClick(e) { + var _this23 = this; + + var tab = $(e.target).closest('li.tab'); + var tabLink = $(e.target).closest('a'); + + // Handle click on tab link only + if (!tabLink.length || !tabLink.parent().hasClass('tab')) { + return; + } + + if (tab.hasClass('disabled')) { + e.preventDefault(); + return; + } + + // Act as regular link if target attribute is specified. + if (!!tabLink.attr('target')) { + return; + } + + // Make the old tab inactive. + this.$activeTabLink.removeClass('active'); + var $oldContent = this.$content; + + // Update the variables with the new link and content + this.$activeTabLink = tabLink; + this.$content = $(M.escapeHash(tabLink[0].hash)); + this.$tabLinks = this.$el.children('li.tab').children('a'); + + // Make the tab active. + this.$activeTabLink.addClass('active'); + var prevIndex = this.index; + this.index = Math.max(this.$tabLinks.index(tabLink), 0); + + // Swap content + if (this.options.swipeable) { + if (this._tabsCarousel) { + this._tabsCarousel.set(this.index, function () { + if (typeof _this23.options.onShow === 'function') { + _this23.options.onShow.call(_this23, _this23.$content[0]); + } + }); + } + } else { + if (this.$content.length) { + this.$content[0].style.display = 'block'; + this.$content.addClass('active'); + if (typeof this.options.onShow === 'function') { + this.options.onShow.call(this, this.$content[0]); + } + + if ($oldContent.length && !$oldContent.is(this.$content)) { + $oldContent[0].style.display = 'none'; + $oldContent.removeClass('active'); + } + } + } + + // Update widths after content is swapped (scrollbar bugfix) + this._setTabsAndTabWidth(); + + // Update indicator + this._animateIndicator(prevIndex); + + // Prevent the anchor's default click action + e.preventDefault(); + } + + /** + * Generate elements for tab indicator. + */ + + }, { + key: "_createIndicator", + value: function _createIndicator() { + var _this24 = this; + + var indicator = document.createElement('li'); + indicator.classList.add('indicator'); + + this.el.appendChild(indicator); + this._indicator = indicator; + + setTimeout(function () { + _this24._indicator.style.left = _this24._calcLeftPos(_this24.$activeTabLink) + 'px'; + _this24._indicator.style.right = _this24._calcRightPos(_this24.$activeTabLink) + 'px'; + }, 0); + } + + /** + * Setup first active tab link. + */ + + }, { + key: "_setupActiveTabLink", + value: function _setupActiveTabLink() { + // If the location.hash matches one of the links, use that as the active tab. + this.$activeTabLink = $(this.$tabLinks.filter('[href="' + location.hash + '"]')); + + // If no match is found, use the first link or any with class 'active' as the initial active tab. + if (this.$activeTabLink.length === 0) { + this.$activeTabLink = this.$el.children('li.tab').children('a.active').first(); + } + if (this.$activeTabLink.length === 0) { + this.$activeTabLink = this.$el.children('li.tab').children('a').first(); + } + + this.$tabLinks.removeClass('active'); + this.$activeTabLink[0].classList.add('active'); + + this.index = Math.max(this.$tabLinks.index(this.$activeTabLink), 0); + + if (this.$activeTabLink.length) { + this.$content = $(M.escapeHash(this.$activeTabLink[0].hash)); + this.$content.addClass('active'); + } + } + + /** + * Setup swipeable tabs + */ + + }, { + key: "_setupSwipeableTabs", + value: function _setupSwipeableTabs() { + var _this25 = this; + + // Change swipeable according to responsive threshold + if (window.innerWidth > this.options.responsiveThreshold) { + this.options.swipeable = false; + } + + var $tabsContent = $(); + this.$tabLinks.each(function (link) { + var $currContent = $(M.escapeHash(link.hash)); + $currContent.addClass('carousel-item'); + $tabsContent = $tabsContent.add($currContent); + }); + + var $tabsWrapper = $('<div class="tabs-content carousel carousel-slider"></div>'); + $tabsContent.first().before($tabsWrapper); + $tabsWrapper.append($tabsContent); + $tabsContent[0].style.display = ''; + + // Keep active tab index to set initial carousel slide + var activeTabIndex = this.$activeTabLink.closest('.tab').index(); + + this._tabsCarousel = M.Carousel.init($tabsWrapper[0], { + fullWidth: true, + noWrap: true, + onCycleTo: function (item) { + var prevIndex = _this25.index; + _this25.index = $(item).index(); + _this25.$activeTabLink.removeClass('active'); + _this25.$activeTabLink = _this25.$tabLinks.eq(_this25.index); + _this25.$activeTabLink.addClass('active'); + _this25._animateIndicator(prevIndex); + if (typeof _this25.options.onShow === 'function') { + _this25.options.onShow.call(_this25, _this25.$content[0]); + } + } + }); + + // Set initial carousel slide to active tab + this._tabsCarousel.set(activeTabIndex); + } + + /** + * Teardown normal tabs. + */ + + }, { + key: "_teardownSwipeableTabs", + value: function _teardownSwipeableTabs() { + var $tabsWrapper = this._tabsCarousel.$el; + this._tabsCarousel.destroy(); + + // Unwrap + $tabsWrapper.after($tabsWrapper.children()); + $tabsWrapper.remove(); + } + + /** + * Setup normal tabs. + */ + + }, { + key: "_setupNormalTabs", + value: function _setupNormalTabs() { + // Hide Tabs Content + this.$tabLinks.not(this.$activeTabLink).each(function (link) { + if (!!link.hash) { + var $currContent = $(M.escapeHash(link.hash)); + if ($currContent.length) { + $currContent[0].style.display = 'none'; + } + } + }); + } + + /** + * Teardown normal tabs. + */ + + }, { + key: "_teardownNormalTabs", + value: function _teardownNormalTabs() { + // show Tabs Content + this.$tabLinks.each(function (link) { + if (!!link.hash) { + var $currContent = $(M.escapeHash(link.hash)); + if ($currContent.length) { + $currContent[0].style.display = ''; + } + } + }); + } + + /** + * set tabs and tab width + */ + + }, { + key: "_setTabsAndTabWidth", + value: function _setTabsAndTabWidth() { + this.tabsWidth = this.$el.width(); + this.tabWidth = Math.max(this.tabsWidth, this.el.scrollWidth) / this.$tabLinks.length; + } + + /** + * Finds right attribute for indicator based on active tab. + * @param {cash} el + */ + + }, { + key: "_calcRightPos", + value: function _calcRightPos(el) { + return Math.ceil(this.tabsWidth - el.position().left - el[0].getBoundingClientRect().width); + } + + /** + * Finds left attribute for indicator based on active tab. + * @param {cash} el + */ + + }, { + key: "_calcLeftPos", + value: function _calcLeftPos(el) { + return Math.floor(el.position().left); + } + }, { + key: "updateTabIndicator", + value: function updateTabIndicator() { + this._setTabsAndTabWidth(); + this._animateIndicator(this.index); + } + + /** + * Animates Indicator to active tab. + * @param {Number} prevIndex + */ + + }, { + key: "_animateIndicator", + value: function _animateIndicator(prevIndex) { + var leftDelay = 0, + rightDelay = 0; + + if (this.index - prevIndex >= 0) { + leftDelay = 90; + } else { + rightDelay = 90; + } + + // Animate + var animOptions = { + targets: this._indicator, + left: { + value: this._calcLeftPos(this.$activeTabLink), + delay: leftDelay + }, + right: { + value: this._calcRightPos(this.$activeTabLink), + delay: rightDelay + }, + duration: this.options.duration, + easing: 'easeOutQuad' + }; + anim.remove(this._indicator); + anim(animOptions); + } + + /** + * Select tab. + * @param {String} tabId + */ + + }, { + key: "select", + value: function select(tabId) { + var tab = this.$tabLinks.filter('[href="#' + tabId + '"]'); + if (tab.length) { + tab.trigger('click'); + } + } + }], [{ + key: "init", + value: function init(els, options) { + return _get(Tabs.__proto__ || Object.getPrototypeOf(Tabs), "init", this).call(this, this, els, options); + } + + /** + * Get Instance + */ + + }, { + key: "getInstance", + value: function getInstance(el) { + var domElem = !!el.jquery ? el[0] : el; + return domElem.M_Tabs; + } + }, { + key: "defaults", + get: function () { + return _defaults; + } + }]); + + return Tabs; + }(Component); + + M.Tabs = Tabs; + + if (M.jQueryLoaded) { + M.initializeJqueryWrapper(Tabs, 'tabs', 'M_Tabs'); + } +})(cash, M.anime); +;(function ($, anim) { + 'use strict'; + + var _defaults = { + exitDelay: 200, + enterDelay: 0, + html: null, + margin: 5, + inDuration: 250, + outDuration: 200, + position: 'bottom', + transitionMovement: 10 + }; + + /** + * @class + * + */ + + var Tooltip = function (_Component7) { + _inherits(Tooltip, _Component7); + + /** + * Construct Tooltip instance + * @constructor + * @param {Element} el + * @param {Object} options + */ + function Tooltip(el, options) { + _classCallCheck(this, Tooltip); + + var _this26 = _possibleConstructorReturn(this, (Tooltip.__proto__ || Object.getPrototypeOf(Tooltip)).call(this, Tooltip, el, options)); + + _this26.el.M_Tooltip = _this26; + _this26.options = $.extend({}, Tooltip.defaults, options); + + _this26.isOpen = false; + _this26.isHovered = false; + _this26.isFocused = false; + _this26._appendTooltipEl(); + _this26._setupEventHandlers(); + return _this26; + } + + _createClass(Tooltip, [{ + key: "destroy", + + + /** + * Teardown component + */ + value: function destroy() { + $(this.tooltipEl).remove(); + this._removeEventHandlers(); + this.el.M_Tooltip = undefined; + } + }, { + key: "_appendTooltipEl", + value: function _appendTooltipEl() { + var tooltipEl = document.createElement('div'); + tooltipEl.classList.add('material-tooltip'); + this.tooltipEl = tooltipEl; + + var tooltipContentEl = document.createElement('div'); + tooltipContentEl.classList.add('tooltip-content'); + tooltipContentEl.innerHTML = this.options.html; + tooltipEl.appendChild(tooltipContentEl); + document.body.appendChild(tooltipEl); + } + }, { + key: "_updateTooltipContent", + value: function _updateTooltipContent() { + this.tooltipEl.querySelector('.tooltip-content').innerHTML = this.options.html; + } + }, { + key: "_setupEventHandlers", + value: function _setupEventHandlers() { + this._handleMouseEnterBound = this._handleMouseEnter.bind(this); + this._handleMouseLeaveBound = this._handleMouseLeave.bind(this); + this._handleFocusBound = this._handleFocus.bind(this); + this._handleBlurBound = this._handleBlur.bind(this); + this.el.addEventListener('mouseenter', this._handleMouseEnterBound); + this.el.addEventListener('mouseleave', this._handleMouseLeaveBound); + this.el.addEventListener('focus', this._handleFocusBound, true); + this.el.addEventListener('blur', this._handleBlurBound, true); + } + }, { + key: "_removeEventHandlers", + value: function _removeEventHandlers() { + this.el.removeEventListener('mouseenter', this._handleMouseEnterBound); + this.el.removeEventListener('mouseleave', this._handleMouseLeaveBound); + this.el.removeEventListener('focus', this._handleFocusBound, true); + this.el.removeEventListener('blur', this._handleBlurBound, true); + } + }, { + key: "open", + value: function open(isManual) { + if (this.isOpen) { + return; + } + isManual = isManual === undefined ? true : undefined; // Default value true + this.isOpen = true; + // Update tooltip content with HTML attribute options + this.options = $.extend({}, this.options, this._getAttributeOptions()); + this._updateTooltipContent(); + this._setEnterDelayTimeout(isManual); + } + }, { + key: "close", + value: function close() { + if (!this.isOpen) { + return; + } + + this.isHovered = false; + this.isFocused = false; + this.isOpen = false; + this._setExitDelayTimeout(); + } + + /** + * Create timeout which delays when the tooltip closes + */ + + }, { + key: "_setExitDelayTimeout", + value: function _setExitDelayTimeout() { + var _this27 = this; + + clearTimeout(this._exitDelayTimeout); + + this._exitDelayTimeout = setTimeout(function () { + if (_this27.isHovered || _this27.isFocused) { + return; + } + + _this27._animateOut(); + }, this.options.exitDelay); + } + + /** + * Create timeout which delays when the toast closes + */ + + }, { + key: "_setEnterDelayTimeout", + value: function _setEnterDelayTimeout(isManual) { + var _this28 = this; + + clearTimeout(this._enterDelayTimeout); + + this._enterDelayTimeout = setTimeout(function () { + if (!_this28.isHovered && !_this28.isFocused && !isManual) { + return; + } + + _this28._animateIn(); + }, this.options.enterDelay); + } + }, { + key: "_positionTooltip", + value: function _positionTooltip() { + var origin = this.el, + tooltip = this.tooltipEl, + originHeight = origin.offsetHeight, + originWidth = origin.offsetWidth, + tooltipHeight = tooltip.offsetHeight, + tooltipWidth = tooltip.offsetWidth, + newCoordinates = void 0, + margin = this.options.margin, + targetTop = void 0, + targetLeft = void 0; + + this.xMovement = 0, this.yMovement = 0; + + targetTop = origin.getBoundingClientRect().top + M.getDocumentScrollTop(); + targetLeft = origin.getBoundingClientRect().left + M.getDocumentScrollLeft(); + + if (this.options.position === 'top') { + targetTop += -tooltipHeight - margin; + targetLeft += originWidth / 2 - tooltipWidth / 2; + this.yMovement = -this.options.transitionMovement; + } else if (this.options.position === 'right') { + targetTop += originHeight / 2 - tooltipHeight / 2; + targetLeft += originWidth + margin; + this.xMovement = this.options.transitionMovement; + } else if (this.options.position === 'left') { + targetTop += originHeight / 2 - tooltipHeight / 2; + targetLeft += -tooltipWidth - margin; + this.xMovement = -this.options.transitionMovement; + } else { + targetTop += originHeight + margin; + targetLeft += originWidth / 2 - tooltipWidth / 2; + this.yMovement = this.options.transitionMovement; + } + + newCoordinates = this._repositionWithinScreen(targetLeft, targetTop, tooltipWidth, tooltipHeight); + $(tooltip).css({ + top: newCoordinates.y + 'px', + left: newCoordinates.x + 'px' + }); + } + }, { + key: "_repositionWithinScreen", + value: function _repositionWithinScreen(x, y, width, height) { + var scrollLeft = M.getDocumentScrollLeft(); + var scrollTop = M.getDocumentScrollTop(); + var newX = x - scrollLeft; + var newY = y - scrollTop; + + var bounding = { + left: newX, + top: newY, + width: width, + height: height + }; + + var offset = this.options.margin + this.options.transitionMovement; + var edges = M.checkWithinContainer(document.body, bounding, offset); + + if (edges.left) { + newX = offset; + } else if (edges.right) { + newX -= newX + width - window.innerWidth; + } + + if (edges.top) { + newY = offset; + } else if (edges.bottom) { + newY -= newY + height - window.innerHeight; + } + + return { + x: newX + scrollLeft, + y: newY + scrollTop + }; + } + }, { + key: "_animateIn", + value: function _animateIn() { + this._positionTooltip(); + this.tooltipEl.style.visibility = 'visible'; + anim.remove(this.tooltipEl); + anim({ + targets: this.tooltipEl, + opacity: 1, + translateX: this.xMovement, + translateY: this.yMovement, + duration: this.options.inDuration, + easing: 'easeOutCubic' + }); + } + }, { + key: "_animateOut", + value: function _animateOut() { + anim.remove(this.tooltipEl); + anim({ + targets: this.tooltipEl, + opacity: 0, + translateX: 0, + translateY: 0, + duration: this.options.outDuration, + easing: 'easeOutCubic' + }); + } + }, { + key: "_handleMouseEnter", + value: function _handleMouseEnter() { + this.isHovered = true; + this.isFocused = false; // Allows close of tooltip when opened by focus. + this.open(false); + } + }, { + key: "_handleMouseLeave", + value: function _handleMouseLeave() { + this.isHovered = false; + this.isFocused = false; // Allows close of tooltip when opened by focus. + this.close(); + } + }, { + key: "_handleFocus", + value: function _handleFocus() { + if (M.tabPressed) { + this.isFocused = true; + this.open(false); + } + } + }, { + key: "_handleBlur", + value: function _handleBlur() { + this.isFocused = false; + this.close(); + } + }, { + key: "_getAttributeOptions", + value: function _getAttributeOptions() { + var attributeOptions = {}; + var tooltipTextOption = this.el.getAttribute('data-tooltip'); + var positionOption = this.el.getAttribute('data-position'); + + if (tooltipTextOption) { + attributeOptions.html = tooltipTextOption; + } + + if (positionOption) { + attributeOptions.position = positionOption; + } + return attributeOptions; + } + }], [{ + key: "init", + value: function init(els, options) { + return _get(Tooltip.__proto__ || Object.getPrototypeOf(Tooltip), "init", this).call(this, this, els, options); + } + + /** + * Get Instance + */ + + }, { + key: "getInstance", + value: function getInstance(el) { + var domElem = !!el.jquery ? el[0] : el; + return domElem.M_Tooltip; + } + }, { + key: "defaults", + get: function () { + return _defaults; + } + }]); + + return Tooltip; + }(Component); + + M.Tooltip = Tooltip; + + if (M.jQueryLoaded) { + M.initializeJqueryWrapper(Tooltip, 'tooltip', 'M_Tooltip'); + } +})(cash, M.anime); +; /*! + * Waves v0.6.4 + * http://fian.my.id/Waves + * + * Copyright 2014 Alfiana E. Sibuea and other contributors + * Released under the MIT license + * https://github.com/fians/Waves/blob/master/LICENSE + */ + +;(function (window) { + 'use strict'; + + var Waves = Waves || {}; + var $$ = document.querySelectorAll.bind(document); + + // Find exact position of element + function isWindow(obj) { + return obj !== null && obj === obj.window; + } + + function getWindow(elem) { + return isWindow(elem) ? elem : elem.nodeType === 9 && elem.defaultView; + } + + function offset(elem) { + var docElem, + win, + box = { top: 0, left: 0 }, + doc = elem && elem.ownerDocument; + + docElem = doc.documentElement; + + if (typeof elem.getBoundingClientRect !== typeof undefined) { + box = elem.getBoundingClientRect(); + } + win = getWindow(doc); + return { + top: box.top + win.pageYOffset - docElem.clientTop, + left: box.left + win.pageXOffset - docElem.clientLeft + }; + } + + function convertStyle(obj) { + var style = ''; + + for (var a in obj) { + if (obj.hasOwnProperty(a)) { + style += a + ':' + obj[a] + ';'; + } + } + + return style; + } + + var Effect = { + + // Effect delay + duration: 750, + + show: function (e, element) { + + // Disable right click + if (e.button === 2) { + return false; + } + + var el = element || this; + + // Create ripple + var ripple = document.createElement('div'); + ripple.className = 'waves-ripple'; + el.appendChild(ripple); + + // Get click coordinate and element witdh + var pos = offset(el); + var relativeY = e.pageY - pos.top; + var relativeX = e.pageX - pos.left; + var scale = 'scale(' + el.clientWidth / 100 * 10 + ')'; + + // Support for touch devices + if ('touches' in e) { + relativeY = e.touches[0].pageY - pos.top; + relativeX = e.touches[0].pageX - pos.left; + } + + // Attach data to element + ripple.setAttribute('data-hold', Date.now()); + ripple.setAttribute('data-scale', scale); + ripple.setAttribute('data-x', relativeX); + ripple.setAttribute('data-y', relativeY); + + // Set ripple position + var rippleStyle = { + 'top': relativeY + 'px', + 'left': relativeX + 'px' + }; + + ripple.className = ripple.className + ' waves-notransition'; + ripple.setAttribute('style', convertStyle(rippleStyle)); + ripple.className = ripple.className.replace('waves-notransition', ''); + + // Scale the ripple + rippleStyle['-webkit-transform'] = scale; + rippleStyle['-moz-transform'] = scale; + rippleStyle['-ms-transform'] = scale; + rippleStyle['-o-transform'] = scale; + rippleStyle.transform = scale; + rippleStyle.opacity = '1'; + + rippleStyle['-webkit-transition-duration'] = Effect.duration + 'ms'; + rippleStyle['-moz-transition-duration'] = Effect.duration + 'ms'; + rippleStyle['-o-transition-duration'] = Effect.duration + 'ms'; + rippleStyle['transition-duration'] = Effect.duration + 'ms'; + + rippleStyle['-webkit-transition-timing-function'] = 'cubic-bezier(0.250, 0.460, 0.450, 0.940)'; + rippleStyle['-moz-transition-timing-function'] = 'cubic-bezier(0.250, 0.460, 0.450, 0.940)'; + rippleStyle['-o-transition-timing-function'] = 'cubic-bezier(0.250, 0.460, 0.450, 0.940)'; + rippleStyle['transition-timing-function'] = 'cubic-bezier(0.250, 0.460, 0.450, 0.940)'; + + ripple.setAttribute('style', convertStyle(rippleStyle)); + }, + + hide: function (e) { + TouchHandler.touchup(e); + + var el = this; + var width = el.clientWidth * 1.4; + + // Get first ripple + var ripple = null; + var ripples = el.getElementsByClassName('waves-ripple'); + if (ripples.length > 0) { + ripple = ripples[ripples.length - 1]; + } else { + return false; + } + + var relativeX = ripple.getAttribute('data-x'); + var relativeY = ripple.getAttribute('data-y'); + var scale = ripple.getAttribute('data-scale'); + + // Get delay beetween mousedown and mouse leave + var diff = Date.now() - Number(ripple.getAttribute('data-hold')); + var delay = 350 - diff; + + if (delay < 0) { + delay = 0; + } + + // Fade out ripple after delay + setTimeout(function () { + var style = { + 'top': relativeY + 'px', + 'left': relativeX + 'px', + 'opacity': '0', + + // Duration + '-webkit-transition-duration': Effect.duration + 'ms', + '-moz-transition-duration': Effect.duration + 'ms', + '-o-transition-duration': Effect.duration + 'ms', + 'transition-duration': Effect.duration + 'ms', + '-webkit-transform': scale, + '-moz-transform': scale, + '-ms-transform': scale, + '-o-transform': scale, + 'transform': scale + }; + + ripple.setAttribute('style', convertStyle(style)); + + setTimeout(function () { + try { + el.removeChild(ripple); + } catch (e) { + return false; + } + }, Effect.duration); + }, delay); + }, + + // Little hack to make <input> can perform waves effect + wrapInput: function (elements) { + for (var a = 0; a < elements.length; a++) { + var el = elements[a]; + + if (el.tagName.toLowerCase() === 'input') { + var parent = el.parentNode; + + // If input already have parent just pass through + if (parent.tagName.toLowerCase() === 'i' && parent.className.indexOf('waves-effect') !== -1) { + continue; + } + + // Put element class and style to the specified parent + var wrapper = document.createElement('i'); + wrapper.className = el.className + ' waves-input-wrapper'; + + var elementStyle = el.getAttribute('style'); + + if (!elementStyle) { + elementStyle = ''; + } + + wrapper.setAttribute('style', elementStyle); + + el.className = 'waves-button-input'; + el.removeAttribute('style'); + + // Put element as child + parent.replaceChild(wrapper, el); + wrapper.appendChild(el); + } + } + } + }; + + /** + * Disable mousedown event for 500ms during and after touch + */ + var TouchHandler = { + /* uses an integer rather than bool so there's no issues with + * needing to clear timeouts if another touch event occurred + * within the 500ms. Cannot mouseup between touchstart and + * touchend, nor in the 500ms after touchend. */ + touches: 0, + allowEvent: function (e) { + var allow = true; + + if (e.type === 'touchstart') { + TouchHandler.touches += 1; //push + } else if (e.type === 'touchend' || e.type === 'touchcancel') { + setTimeout(function () { + if (TouchHandler.touches > 0) { + TouchHandler.touches -= 1; //pop after 500ms + } + }, 500); + } else if (e.type === 'mousedown' && TouchHandler.touches > 0) { + allow = false; + } + + return allow; + }, + touchup: function (e) { + TouchHandler.allowEvent(e); + } + }; + + /** + * Delegated click handler for .waves-effect element. + * returns null when .waves-effect element not in "click tree" + */ + function getWavesEffectElement(e) { + if (TouchHandler.allowEvent(e) === false) { + return null; + } + + var element = null; + var target = e.target || e.srcElement; + + while (target.parentNode !== null) { + if (!(target instanceof SVGElement) && target.className.indexOf('waves-effect') !== -1) { + element = target; + break; + } + target = target.parentNode; + } + return element; + } + + /** + * Bubble the click and show effect if .waves-effect elem was found + */ + function showEffect(e) { + var element = getWavesEffectElement(e); + + if (element !== null) { + Effect.show(e, element); + + if ('ontouchstart' in window) { + element.addEventListener('touchend', Effect.hide, false); + element.addEventListener('touchcancel', Effect.hide, false); + } + + element.addEventListener('mouseup', Effect.hide, false); + element.addEventListener('mouseleave', Effect.hide, false); + element.addEventListener('dragend', Effect.hide, false); + } + } + + Waves.displayEffect = function (options) { + options = options || {}; + + if ('duration' in options) { + Effect.duration = options.duration; + } + + //Wrap input inside <i> tag + Effect.wrapInput($$('.waves-effect')); + + if ('ontouchstart' in window) { + document.body.addEventListener('touchstart', showEffect, false); + } + + document.body.addEventListener('mousedown', showEffect, false); + }; + + /** + * Attach Waves to an input element (or any element which doesn't + * bubble mouseup/mousedown events). + * Intended to be used with dynamically loaded forms/inputs, or + * where the user doesn't want a delegated click handler. + */ + Waves.attach = function (element) { + //FUTURE: automatically add waves classes and allow users + // to specify them with an options param? Eg. light/classic/button + if (element.tagName.toLowerCase() === 'input') { + Effect.wrapInput([element]); + element = element.parentNode; + } + + if ('ontouchstart' in window) { + element.addEventListener('touchstart', showEffect, false); + } + + element.addEventListener('mousedown', showEffect, false); + }; + + window.Waves = Waves; + + document.addEventListener('DOMContentLoaded', function () { + Waves.displayEffect(); + }, false); +})(window); +;(function ($, anim) { + 'use strict'; + + var _defaults = { + html: '', + displayLength: 4000, + inDuration: 300, + outDuration: 375, + classes: '', + completeCallback: null, + activationPercent: 0.8 + }; + + var Toast = function () { + function Toast(options) { + _classCallCheck(this, Toast); + + /** + * Options for the toast + * @member Toast#options + */ + this.options = $.extend({}, Toast.defaults, options); + this.message = this.options.html; + + /** + * Describes current pan state toast + * @type {Boolean} + */ + this.panning = false; + + /** + * Time remaining until toast is removed + */ + this.timeRemaining = this.options.displayLength; + + if (Toast._toasts.length === 0) { + Toast._createContainer(); + } + + // Create new toast + Toast._toasts.push(this); + var toastElement = this._createToast(); + toastElement.M_Toast = this; + this.el = toastElement; + this.$el = $(toastElement); + this._animateIn(); + this._setTimer(); + } + + _createClass(Toast, [{ + key: "_createToast", + + + /** + * Create toast and append it to toast container + */ + value: function _createToast() { + var toast = document.createElement('div'); + toast.classList.add('toast'); + + // Add custom classes onto toast + if (!!this.options.classes.length) { + $(toast).addClass(this.options.classes); + } + + // Set content + if (typeof HTMLElement === 'object' ? this.message instanceof HTMLElement : this.message && typeof this.message === 'object' && this.message !== null && this.message.nodeType === 1 && typeof this.message.nodeName === 'string') { + toast.appendChild(this.message); + + // Check if it is jQuery object + } else if (!!this.message.jquery) { + $(toast).append(this.message[0]); + + // Insert as html; + } else { + toast.innerHTML = this.message; + } + + // Append toasft + Toast._container.appendChild(toast); + return toast; + } + + /** + * Animate in toast + */ + + }, { + key: "_animateIn", + value: function _animateIn() { + // Animate toast in + anim({ + targets: this.el, + top: 0, + opacity: 1, + duration: this.options.inDuration, + easing: 'easeOutCubic' + }); + } + + /** + * Create setInterval which automatically removes toast when timeRemaining >= 0 + * has been reached + */ + + }, { + key: "_setTimer", + value: function _setTimer() { + var _this29 = this; + + if (this.timeRemaining !== Infinity) { + this.counterInterval = setInterval(function () { + // If toast is not being dragged, decrease its time remaining + if (!_this29.panning) { + _this29.timeRemaining -= 20; + } + + // Animate toast out + if (_this29.timeRemaining <= 0) { + _this29.dismiss(); + } + }, 20); + } + } + + /** + * Dismiss toast with animation + */ + + }, { + key: "dismiss", + value: function dismiss() { + var _this30 = this; + + window.clearInterval(this.counterInterval); + var activationDistance = this.el.offsetWidth * this.options.activationPercent; + + if (this.wasSwiped) { + this.el.style.transition = 'transform .05s, opacity .05s'; + this.el.style.transform = "translateX(" + activationDistance + "px)"; + this.el.style.opacity = 0; + } + + anim({ + targets: this.el, + opacity: 0, + marginTop: -40, + duration: this.options.outDuration, + easing: 'easeOutExpo', + complete: function () { + // Call the optional callback + if (typeof _this30.options.completeCallback === 'function') { + _this30.options.completeCallback(); + } + // Remove toast from DOM + _this30.$el.remove(); + Toast._toasts.splice(Toast._toasts.indexOf(_this30), 1); + if (Toast._toasts.length === 0) { + Toast._removeContainer(); + } + } + }); + } + }], [{ + key: "getInstance", + + + /** + * Get Instance + */ + value: function getInstance(el) { + var domElem = !!el.jquery ? el[0] : el; + return domElem.M_Toast; + } + + /** + * Append toast container and add event handlers + */ + + }, { + key: "_createContainer", + value: function _createContainer() { + var container = document.createElement('div'); + container.setAttribute('id', 'toast-container'); + + // Add event handler + container.addEventListener('touchstart', Toast._onDragStart); + container.addEventListener('touchmove', Toast._onDragMove); + container.addEventListener('touchend', Toast._onDragEnd); + + container.addEventListener('mousedown', Toast._onDragStart); + document.addEventListener('mousemove', Toast._onDragMove); + document.addEventListener('mouseup', Toast._onDragEnd); + + document.body.appendChild(container); + Toast._container = container; + } + + /** + * Remove toast container and event handlers + */ + + }, { + key: "_removeContainer", + value: function _removeContainer() { + // Add event handler + document.removeEventListener('mousemove', Toast._onDragMove); + document.removeEventListener('mouseup', Toast._onDragEnd); + + $(Toast._container).remove(); + Toast._container = null; + } + + /** + * Begin drag handler + * @param {Event} e + */ + + }, { + key: "_onDragStart", + value: function _onDragStart(e) { + if (e.target && $(e.target).closest('.toast').length) { + var $toast = $(e.target).closest('.toast'); + var toast = $toast[0].M_Toast; + toast.panning = true; + Toast._draggedToast = toast; + toast.el.classList.add('panning'); + toast.el.style.transition = ''; + toast.startingXPos = Toast._xPos(e); + toast.time = Date.now(); + toast.xPos = Toast._xPos(e); + } + } + + /** + * Drag move handler + * @param {Event} e + */ + + }, { + key: "_onDragMove", + value: function _onDragMove(e) { + if (!!Toast._draggedToast) { + e.preventDefault(); + var toast = Toast._draggedToast; + toast.deltaX = Math.abs(toast.xPos - Toast._xPos(e)); + toast.xPos = Toast._xPos(e); + toast.velocityX = toast.deltaX / (Date.now() - toast.time); + toast.time = Date.now(); + + var totalDeltaX = toast.xPos - toast.startingXPos; + var activationDistance = toast.el.offsetWidth * toast.options.activationPercent; + toast.el.style.transform = "translateX(" + totalDeltaX + "px)"; + toast.el.style.opacity = 1 - Math.abs(totalDeltaX / activationDistance); + } + } + + /** + * End drag handler + */ + + }, { + key: "_onDragEnd", + value: function _onDragEnd() { + if (!!Toast._draggedToast) { + var toast = Toast._draggedToast; + toast.panning = false; + toast.el.classList.remove('panning'); + + var totalDeltaX = toast.xPos - toast.startingXPos; + var activationDistance = toast.el.offsetWidth * toast.options.activationPercent; + var shouldBeDismissed = Math.abs(totalDeltaX) > activationDistance || toast.velocityX > 1; + + // Remove toast + if (shouldBeDismissed) { + toast.wasSwiped = true; + toast.dismiss(); + + // Animate toast back to original position + } else { + toast.el.style.transition = 'transform .2s, opacity .2s'; + toast.el.style.transform = ''; + toast.el.style.opacity = ''; + } + Toast._draggedToast = null; + } + } + + /** + * Get x position of mouse or touch event + * @param {Event} e + */ + + }, { + key: "_xPos", + value: function _xPos(e) { + if (e.targetTouches && e.targetTouches.length >= 1) { + return e.targetTouches[0].clientX; + } + // mouse event + return e.clientX; + } + + /** + * Remove all toasts + */ + + }, { + key: "dismissAll", + value: function dismissAll() { + for (var toastIndex in Toast._toasts) { + Toast._toasts[toastIndex].dismiss(); + } + } + }, { + key: "defaults", + get: function () { + return _defaults; + } + }]); + + return Toast; + }(); + + /** + * @static + * @memberof Toast + * @type {Array.<Toast>} + */ + + + Toast._toasts = []; + + /** + * @static + * @memberof Toast + */ + Toast._container = null; + + /** + * @static + * @memberof Toast + * @type {Toast} + */ + Toast._draggedToast = null; + + M.Toast = Toast; + M.toast = function (options) { + return new Toast(options); + }; +})(cash, M.anime); +;(function ($, anim) { + 'use strict'; + + var _defaults = { + edge: 'left', + draggable: true, + inDuration: 250, + outDuration: 200, + onOpenStart: null, + onOpenEnd: null, + onCloseStart: null, + onCloseEnd: null, + preventScrolling: true + }; + + /** + * @class + */ + + var Sidenav = function (_Component8) { + _inherits(Sidenav, _Component8); + + /** + * Construct Sidenav instance and set up overlay + * @constructor + * @param {Element} el + * @param {Object} options + */ + function Sidenav(el, options) { + _classCallCheck(this, Sidenav); + + var _this31 = _possibleConstructorReturn(this, (Sidenav.__proto__ || Object.getPrototypeOf(Sidenav)).call(this, Sidenav, el, options)); + + _this31.el.M_Sidenav = _this31; + _this31.id = _this31.$el.attr('id'); + + /** + * Options for the Sidenav + * @member Sidenav#options + * @prop {String} [edge='left'] - Side of screen on which Sidenav appears + * @prop {Boolean} [draggable=true] - Allow swipe gestures to open/close Sidenav + * @prop {Number} [inDuration=250] - Length in ms of enter transition + * @prop {Number} [outDuration=200] - Length in ms of exit transition + * @prop {Function} onOpenStart - Function called when sidenav starts entering + * @prop {Function} onOpenEnd - Function called when sidenav finishes entering + * @prop {Function} onCloseStart - Function called when sidenav starts exiting + * @prop {Function} onCloseEnd - Function called when sidenav finishes exiting + */ + _this31.options = $.extend({}, Sidenav.defaults, options); + + /** + * Describes open/close state of Sidenav + * @type {Boolean} + */ + _this31.isOpen = false; + + /** + * Describes if Sidenav is fixed + * @type {Boolean} + */ + _this31.isFixed = _this31.el.classList.contains('sidenav-fixed'); + + /** + * Describes if Sidenav is being draggeed + * @type {Boolean} + */ + _this31.isDragged = false; + + // Window size variables for window resize checks + _this31.lastWindowWidth = window.innerWidth; + _this31.lastWindowHeight = window.innerHeight; + + _this31._createOverlay(); + _this31._createDragTarget(); + _this31._setupEventHandlers(); + _this31._setupClasses(); + _this31._setupFixed(); + + Sidenav._sidenavs.push(_this31); + return _this31; + } + + _createClass(Sidenav, [{ + key: "destroy", + + + /** + * Teardown component + */ + value: function destroy() { + this._removeEventHandlers(); + this._enableBodyScrolling(); + this._overlay.parentNode.removeChild(this._overlay); + this.dragTarget.parentNode.removeChild(this.dragTarget); + this.el.M_Sidenav = undefined; + this.el.style.transform = ''; + + var index = Sidenav._sidenavs.indexOf(this); + if (index >= 0) { + Sidenav._sidenavs.splice(index, 1); + } + } + }, { + key: "_createOverlay", + value: function _createOverlay() { + var overlay = document.createElement('div'); + this._closeBound = this.close.bind(this); + overlay.classList.add('sidenav-overlay'); + + overlay.addEventListener('click', this._closeBound); + + document.body.appendChild(overlay); + this._overlay = overlay; + } + }, { + key: "_setupEventHandlers", + value: function _setupEventHandlers() { + if (Sidenav._sidenavs.length === 0) { + document.body.addEventListener('click', this._handleTriggerClick); + } + + this._handleDragTargetDragBound = this._handleDragTargetDrag.bind(this); + this._handleDragTargetReleaseBound = this._handleDragTargetRelease.bind(this); + this._handleCloseDragBound = this._handleCloseDrag.bind(this); + this._handleCloseReleaseBound = this._handleCloseRelease.bind(this); + this._handleCloseTriggerClickBound = this._handleCloseTriggerClick.bind(this); + + this.dragTarget.addEventListener('touchmove', this._handleDragTargetDragBound); + this.dragTarget.addEventListener('touchend', this._handleDragTargetReleaseBound); + this._overlay.addEventListener('touchmove', this._handleCloseDragBound); + this._overlay.addEventListener('touchend', this._handleCloseReleaseBound); + this.el.addEventListener('touchmove', this._handleCloseDragBound); + this.el.addEventListener('touchend', this._handleCloseReleaseBound); + this.el.addEventListener('click', this._handleCloseTriggerClickBound); + + // Add resize for side nav fixed + if (this.isFixed) { + this._handleWindowResizeBound = this._handleWindowResize.bind(this); + window.addEventListener('resize', this._handleWindowResizeBound); + } + } + }, { + key: "_removeEventHandlers", + value: function _removeEventHandlers() { + if (Sidenav._sidenavs.length === 1) { + document.body.removeEventListener('click', this._handleTriggerClick); + } + + this.dragTarget.removeEventListener('touchmove', this._handleDragTargetDragBound); + this.dragTarget.removeEventListener('touchend', this._handleDragTargetReleaseBound); + this._overlay.removeEventListener('touchmove', this._handleCloseDragBound); + this._overlay.removeEventListener('touchend', this._handleCloseReleaseBound); + this.el.removeEventListener('touchmove', this._handleCloseDragBound); + this.el.removeEventListener('touchend', this._handleCloseReleaseBound); + this.el.removeEventListener('click', this._handleCloseTriggerClickBound); + + // Remove resize for side nav fixed + if (this.isFixed) { + window.removeEventListener('resize', this._handleWindowResizeBound); + } + } + + /** + * Handle Trigger Click + * @param {Event} e + */ + + }, { + key: "_handleTriggerClick", + value: function _handleTriggerClick(e) { + var $trigger = $(e.target).closest('.sidenav-trigger'); + if (e.target && $trigger.length) { + var sidenavId = M.getIdFromTrigger($trigger[0]); + + var sidenavInstance = document.getElementById(sidenavId).M_Sidenav; + if (sidenavInstance) { + sidenavInstance.open($trigger); + } + e.preventDefault(); + } + } + + /** + * Set variables needed at the beggining of drag + * and stop any current transition. + * @param {Event} e + */ + + }, { + key: "_startDrag", + value: function _startDrag(e) { + var clientX = e.targetTouches[0].clientX; + this.isDragged = true; + this._startingXpos = clientX; + this._xPos = this._startingXpos; + this._time = Date.now(); + this._width = this.el.getBoundingClientRect().width; + this._overlay.style.display = 'block'; + this._initialScrollTop = this.isOpen ? this.el.scrollTop : M.getDocumentScrollTop(); + this._verticallyScrolling = false; + anim.remove(this.el); + anim.remove(this._overlay); + } + + /** + * Set variables needed at each drag move update tick + * @param {Event} e + */ + + }, { + key: "_dragMoveUpdate", + value: function _dragMoveUpdate(e) { + var clientX = e.targetTouches[0].clientX; + var currentScrollTop = this.isOpen ? this.el.scrollTop : M.getDocumentScrollTop(); + this.deltaX = Math.abs(this._xPos - clientX); + this._xPos = clientX; + this.velocityX = this.deltaX / (Date.now() - this._time); + this._time = Date.now(); + if (this._initialScrollTop !== currentScrollTop) { + this._verticallyScrolling = true; + } + } + + /** + * Handles Dragging of Sidenav + * @param {Event} e + */ + + }, { + key: "_handleDragTargetDrag", + value: function _handleDragTargetDrag(e) { + // Check if draggable + if (!this.options.draggable || this._isCurrentlyFixed() || this._verticallyScrolling) { + return; + } + + // If not being dragged, set initial drag start variables + if (!this.isDragged) { + this._startDrag(e); + } + + // Run touchmove updates + this._dragMoveUpdate(e); + + // Calculate raw deltaX + var totalDeltaX = this._xPos - this._startingXpos; + + // dragDirection is the attempted user drag direction + var dragDirection = totalDeltaX > 0 ? 'right' : 'left'; + + // Don't allow totalDeltaX to exceed Sidenav width or be dragged in the opposite direction + totalDeltaX = Math.min(this._width, Math.abs(totalDeltaX)); + if (this.options.edge === dragDirection) { + totalDeltaX = 0; + } + + /** + * transformX is the drag displacement + * transformPrefix is the initial transform placement + * Invert values if Sidenav is right edge + */ + var transformX = totalDeltaX; + var transformPrefix = 'translateX(-100%)'; + if (this.options.edge === 'right') { + transformPrefix = 'translateX(100%)'; + transformX = -transformX; + } + + // Calculate open/close percentage of sidenav, with open = 1 and close = 0 + this.percentOpen = Math.min(1, totalDeltaX / this._width); + + // Set transform and opacity styles + this.el.style.transform = transformPrefix + " translateX(" + transformX + "px)"; + this._overlay.style.opacity = this.percentOpen; + } + + /** + * Handle Drag Target Release + */ + + }, { + key: "_handleDragTargetRelease", + value: function _handleDragTargetRelease() { + if (this.isDragged) { + if (this.percentOpen > 0.2) { + this.open(); + } else { + this._animateOut(); + } + + this.isDragged = false; + this._verticallyScrolling = false; + } + } + + /** + * Handle Close Drag + * @param {Event} e + */ + + }, { + key: "_handleCloseDrag", + value: function _handleCloseDrag(e) { + if (this.isOpen) { + // Check if draggable + if (!this.options.draggable || this._isCurrentlyFixed() || this._verticallyScrolling) { + return; + } + + // If not being dragged, set initial drag start variables + if (!this.isDragged) { + this._startDrag(e); + } + + // Run touchmove updates + this._dragMoveUpdate(e); + + // Calculate raw deltaX + var totalDeltaX = this._xPos - this._startingXpos; + + // dragDirection is the attempted user drag direction + var dragDirection = totalDeltaX > 0 ? 'right' : 'left'; + + // Don't allow totalDeltaX to exceed Sidenav width or be dragged in the opposite direction + totalDeltaX = Math.min(this._width, Math.abs(totalDeltaX)); + if (this.options.edge !== dragDirection) { + totalDeltaX = 0; + } + + var transformX = -totalDeltaX; + if (this.options.edge === 'right') { + transformX = -transformX; + } + + // Calculate open/close percentage of sidenav, with open = 1 and close = 0 + this.percentOpen = Math.min(1, 1 - totalDeltaX / this._width); + + // Set transform and opacity styles + this.el.style.transform = "translateX(" + transformX + "px)"; + this._overlay.style.opacity = this.percentOpen; + } + } + + /** + * Handle Close Release + */ + + }, { + key: "_handleCloseRelease", + value: function _handleCloseRelease() { + if (this.isOpen && this.isDragged) { + if (this.percentOpen > 0.8) { + this._animateIn(); + } else { + this.close(); + } + + this.isDragged = false; + this._verticallyScrolling = false; + } + } + + /** + * Handles closing of Sidenav when element with class .sidenav-close + */ + + }, { + key: "_handleCloseTriggerClick", + value: function _handleCloseTriggerClick(e) { + var $closeTrigger = $(e.target).closest('.sidenav-close'); + if ($closeTrigger.length && !this._isCurrentlyFixed()) { + this.close(); + } + } + + /** + * Handle Window Resize + */ + + }, { + key: "_handleWindowResize", + value: function _handleWindowResize() { + // Only handle horizontal resizes + if (this.lastWindowWidth !== window.innerWidth) { + if (window.innerWidth > 992) { + this.open(); + } else { + this.close(); + } + } + + this.lastWindowWidth = window.innerWidth; + this.lastWindowHeight = window.innerHeight; + } + }, { + key: "_setupClasses", + value: function _setupClasses() { + if (this.options.edge === 'right') { + this.el.classList.add('right-aligned'); + this.dragTarget.classList.add('right-aligned'); + } + } + }, { + key: "_removeClasses", + value: function _removeClasses() { + this.el.classList.remove('right-aligned'); + this.dragTarget.classList.remove('right-aligned'); + } + }, { + key: "_setupFixed", + value: function _setupFixed() { + if (this._isCurrentlyFixed()) { + this.open(); + } + } + }, { + key: "_isCurrentlyFixed", + value: function _isCurrentlyFixed() { + return this.isFixed && window.innerWidth > 992; + } + }, { + key: "_createDragTarget", + value: function _createDragTarget() { + var dragTarget = document.createElement('div'); + dragTarget.classList.add('drag-target'); + document.body.appendChild(dragTarget); + this.dragTarget = dragTarget; + } + }, { + key: "_preventBodyScrolling", + value: function _preventBodyScrolling() { + var body = document.body; + body.style.overflow = 'hidden'; + } + }, { + key: "_enableBodyScrolling", + value: function _enableBodyScrolling() { + var body = document.body; + body.style.overflow = ''; + } + }, { + key: "open", + value: function open() { + if (this.isOpen === true) { + return; + } + + this.isOpen = true; + + // Run onOpenStart callback + if (typeof this.options.onOpenStart === 'function') { + this.options.onOpenStart.call(this, this.el); + } + + // Handle fixed Sidenav + if (this._isCurrentlyFixed()) { + anim.remove(this.el); + anim({ + targets: this.el, + translateX: 0, + duration: 0, + easing: 'easeOutQuad' + }); + this._enableBodyScrolling(); + this._overlay.style.display = 'none'; + + // Handle non-fixed Sidenav + } else { + if (this.options.preventScrolling) { + this._preventBodyScrolling(); + } + + if (!this.isDragged || this.percentOpen != 1) { + this._animateIn(); + } + } + } + }, { + key: "close", + value: function close() { + if (this.isOpen === false) { + return; + } + + this.isOpen = false; + + // Run onCloseStart callback + if (typeof this.options.onCloseStart === 'function') { + this.options.onCloseStart.call(this, this.el); + } + + // Handle fixed Sidenav + if (this._isCurrentlyFixed()) { + var transformX = this.options.edge === 'left' ? '-105%' : '105%'; + this.el.style.transform = "translateX(" + transformX + ")"; + + // Handle non-fixed Sidenav + } else { + this._enableBodyScrolling(); + + if (!this.isDragged || this.percentOpen != 0) { + this._animateOut(); + } else { + this._overlay.style.display = 'none'; + } + } + } + }, { + key: "_animateIn", + value: function _animateIn() { + this._animateSidenavIn(); + this._animateOverlayIn(); + } + }, { + key: "_animateSidenavIn", + value: function _animateSidenavIn() { + var _this32 = this; + + var slideOutPercent = this.options.edge === 'left' ? -1 : 1; + if (this.isDragged) { + slideOutPercent = this.options.edge === 'left' ? slideOutPercent + this.percentOpen : slideOutPercent - this.percentOpen; + } + + anim.remove(this.el); + anim({ + targets: this.el, + translateX: [slideOutPercent * 100 + "%", 0], + duration: this.options.inDuration, + easing: 'easeOutQuad', + complete: function () { + // Run onOpenEnd callback + if (typeof _this32.options.onOpenEnd === 'function') { + _this32.options.onOpenEnd.call(_this32, _this32.el); + } + } + }); + } + }, { + key: "_animateOverlayIn", + value: function _animateOverlayIn() { + var start = 0; + if (this.isDragged) { + start = this.percentOpen; + } else { + $(this._overlay).css({ + display: 'block' + }); + } + + anim.remove(this._overlay); + anim({ + targets: this._overlay, + opacity: [start, 1], + duration: this.options.inDuration, + easing: 'easeOutQuad' + }); + } + }, { + key: "_animateOut", + value: function _animateOut() { + this._animateSidenavOut(); + this._animateOverlayOut(); + } + }, { + key: "_animateSidenavOut", + value: function _animateSidenavOut() { + var _this33 = this; + + var endPercent = this.options.edge === 'left' ? -1 : 1; + var slideOutPercent = 0; + if (this.isDragged) { + slideOutPercent = this.options.edge === 'left' ? endPercent + this.percentOpen : endPercent - this.percentOpen; + } + + anim.remove(this.el); + anim({ + targets: this.el, + translateX: [slideOutPercent * 100 + "%", endPercent * 105 + "%"], + duration: this.options.outDuration, + easing: 'easeOutQuad', + complete: function () { + // Run onOpenEnd callback + if (typeof _this33.options.onCloseEnd === 'function') { + _this33.options.onCloseEnd.call(_this33, _this33.el); + } + } + }); + } + }, { + key: "_animateOverlayOut", + value: function _animateOverlayOut() { + var _this34 = this; + + anim.remove(this._overlay); + anim({ + targets: this._overlay, + opacity: 0, + duration: this.options.outDuration, + easing: 'easeOutQuad', + complete: function () { + $(_this34._overlay).css('display', 'none'); + } + }); + } + }], [{ + key: "init", + value: function init(els, options) { + return _get(Sidenav.__proto__ || Object.getPrototypeOf(Sidenav), "init", this).call(this, this, els, options); + } + + /** + * Get Instance + */ + + }, { + key: "getInstance", + value: function getInstance(el) { + var domElem = !!el.jquery ? el[0] : el; + return domElem.M_Sidenav; + } + }, { + key: "defaults", + get: function () { + return _defaults; + } + }]); + + return Sidenav; + }(Component); + + /** + * @static + * @memberof Sidenav + * @type {Array.<Sidenav>} + */ + + + Sidenav._sidenavs = []; + + M.Sidenav = Sidenav; + + if (M.jQueryLoaded) { + M.initializeJqueryWrapper(Sidenav, 'sidenav', 'M_Sidenav'); + } +})(cash, M.anime); +;(function ($, anim) { + 'use strict'; + + var _defaults = { + throttle: 100, + scrollOffset: 200, // offset - 200 allows elements near bottom of page to scroll + activeClass: 'active', + getActiveElement: function (id) { + return 'a[href="#' + id + '"]'; + } + }; + + /** + * @class + * + */ + + var ScrollSpy = function (_Component9) { + _inherits(ScrollSpy, _Component9); + + /** + * Construct ScrollSpy instance + * @constructor + * @param {Element} el + * @param {Object} options + */ + function ScrollSpy(el, options) { + _classCallCheck(this, ScrollSpy); + + var _this35 = _possibleConstructorReturn(this, (ScrollSpy.__proto__ || Object.getPrototypeOf(ScrollSpy)).call(this, ScrollSpy, el, options)); + + _this35.el.M_ScrollSpy = _this35; + + /** + * Options for the modal + * @member Modal#options + * @prop {Number} [throttle=100] - Throttle of scroll handler + * @prop {Number} [scrollOffset=200] - Offset for centering element when scrolled to + * @prop {String} [activeClass='active'] - Class applied to active elements + * @prop {Function} [getActiveElement] - Used to find active element + */ + _this35.options = $.extend({}, ScrollSpy.defaults, options); + + // setup + ScrollSpy._elements.push(_this35); + ScrollSpy._count++; + ScrollSpy._increment++; + _this35.tickId = -1; + _this35.id = ScrollSpy._increment; + _this35._setupEventHandlers(); + _this35._handleWindowScroll(); + return _this35; + } + + _createClass(ScrollSpy, [{ + key: "destroy", + + + /** + * Teardown component + */ + value: function destroy() { + ScrollSpy._elements.splice(ScrollSpy._elements.indexOf(this), 1); + ScrollSpy._elementsInView.splice(ScrollSpy._elementsInView.indexOf(this), 1); + ScrollSpy._visibleElements.splice(ScrollSpy._visibleElements.indexOf(this.$el), 1); + ScrollSpy._count--; + this._removeEventHandlers(); + $(this.options.getActiveElement(this.$el.attr('id'))).removeClass(this.options.activeClass); + this.el.M_ScrollSpy = undefined; + } + + /** + * Setup Event Handlers + */ + + }, { + key: "_setupEventHandlers", + value: function _setupEventHandlers() { + var throttledResize = M.throttle(this._handleWindowScroll, 200); + this._handleThrottledResizeBound = throttledResize.bind(this); + this._handleWindowScrollBound = this._handleWindowScroll.bind(this); + if (ScrollSpy._count === 1) { + window.addEventListener('scroll', this._handleWindowScrollBound); + window.addEventListener('resize', this._handleThrottledResizeBound); + document.body.addEventListener('click', this._handleTriggerClick); + } + } + + /** + * Remove Event Handlers + */ + + }, { + key: "_removeEventHandlers", + value: function _removeEventHandlers() { + if (ScrollSpy._count === 0) { + window.removeEventListener('scroll', this._handleWindowScrollBound); + window.removeEventListener('resize', this._handleThrottledResizeBound); + document.body.removeEventListener('click', this._handleTriggerClick); + } + } + + /** + * Handle Trigger Click + * @param {Event} e + */ + + }, { + key: "_handleTriggerClick", + value: function _handleTriggerClick(e) { + var $trigger = $(e.target); + for (var i = ScrollSpy._elements.length - 1; i >= 0; i--) { + var scrollspy = ScrollSpy._elements[i]; + if ($trigger.is('a[href="#' + scrollspy.$el.attr('id') + '"]')) { + e.preventDefault(); + var offset = scrollspy.$el.offset().top + 1; + + anim({ + targets: [document.documentElement, document.body], + scrollTop: offset - scrollspy.options.scrollOffset, + duration: 400, + easing: 'easeOutCubic' + }); + break; + } + } + } + + /** + * Handle Window Scroll + */ + + }, { + key: "_handleWindowScroll", + value: function _handleWindowScroll() { + // unique tick id + ScrollSpy._ticks++; + + // viewport rectangle + var top = M.getDocumentScrollTop(), + left = M.getDocumentScrollLeft(), + right = left + window.innerWidth, + bottom = top + window.innerHeight; + + // determine which elements are in view + var intersections = ScrollSpy._findElements(top, right, bottom, left); + for (var i = 0; i < intersections.length; i++) { + var scrollspy = intersections[i]; + var lastTick = scrollspy.tickId; + if (lastTick < 0) { + // entered into view + scrollspy._enter(); + } + + // update tick id + scrollspy.tickId = ScrollSpy._ticks; + } + + for (var _i = 0; _i < ScrollSpy._elementsInView.length; _i++) { + var _scrollspy = ScrollSpy._elementsInView[_i]; + var _lastTick = _scrollspy.tickId; + if (_lastTick >= 0 && _lastTick !== ScrollSpy._ticks) { + // exited from view + _scrollspy._exit(); + _scrollspy.tickId = -1; + } + } + + // remember elements in view for next tick + ScrollSpy._elementsInView = intersections; + } + + /** + * Find elements that are within the boundary + * @param {number} top + * @param {number} right + * @param {number} bottom + * @param {number} left + * @return {Array.<ScrollSpy>} A collection of elements + */ + + }, { + key: "_enter", + value: function _enter() { + ScrollSpy._visibleElements = ScrollSpy._visibleElements.filter(function (value) { + return value.height() != 0; + }); + + if (ScrollSpy._visibleElements[0]) { + $(this.options.getActiveElement(ScrollSpy._visibleElements[0].attr('id'))).removeClass(this.options.activeClass); + if (ScrollSpy._visibleElements[0][0].M_ScrollSpy && this.id < ScrollSpy._visibleElements[0][0].M_ScrollSpy.id) { + ScrollSpy._visibleElements.unshift(this.$el); + } else { + ScrollSpy._visibleElements.push(this.$el); + } + } else { + ScrollSpy._visibleElements.push(this.$el); + } + + $(this.options.getActiveElement(ScrollSpy._visibleElements[0].attr('id'))).addClass(this.options.activeClass); + } + }, { + key: "_exit", + value: function _exit() { + var _this36 = this; + + ScrollSpy._visibleElements = ScrollSpy._visibleElements.filter(function (value) { + return value.height() != 0; + }); + + if (ScrollSpy._visibleElements[0]) { + $(this.options.getActiveElement(ScrollSpy._visibleElements[0].attr('id'))).removeClass(this.options.activeClass); + + ScrollSpy._visibleElements = ScrollSpy._visibleElements.filter(function (el) { + return el.attr('id') != _this36.$el.attr('id'); + }); + if (ScrollSpy._visibleElements[0]) { + // Check if empty + $(this.options.getActiveElement(ScrollSpy._visibleElements[0].attr('id'))).addClass(this.options.activeClass); + } + } + } + }], [{ + key: "init", + value: function init(els, options) { + return _get(ScrollSpy.__proto__ || Object.getPrototypeOf(ScrollSpy), "init", this).call(this, this, els, options); + } + + /** + * Get Instance + */ + + }, { + key: "getInstance", + value: function getInstance(el) { + var domElem = !!el.jquery ? el[0] : el; + return domElem.M_ScrollSpy; + } + }, { + key: "_findElements", + value: function _findElements(top, right, bottom, left) { + var hits = []; + for (var i = 0; i < ScrollSpy._elements.length; i++) { + var scrollspy = ScrollSpy._elements[i]; + var currTop = top + scrollspy.options.scrollOffset || 200; + + if (scrollspy.$el.height() > 0) { + var elTop = scrollspy.$el.offset().top, + elLeft = scrollspy.$el.offset().left, + elRight = elLeft + scrollspy.$el.width(), + elBottom = elTop + scrollspy.$el.height(); + + var isIntersect = !(elLeft > right || elRight < left || elTop > bottom || elBottom < currTop); + + if (isIntersect) { + hits.push(scrollspy); + } + } + } + return hits; + } + }, { + key: "defaults", + get: function () { + return _defaults; + } + }]); + + return ScrollSpy; + }(Component); + + /** + * @static + * @memberof ScrollSpy + * @type {Array.<ScrollSpy>} + */ + + + ScrollSpy._elements = []; + + /** + * @static + * @memberof ScrollSpy + * @type {Array.<ScrollSpy>} + */ + ScrollSpy._elementsInView = []; + + /** + * @static + * @memberof ScrollSpy + * @type {Array.<cash>} + */ + ScrollSpy._visibleElements = []; + + /** + * @static + * @memberof ScrollSpy + */ + ScrollSpy._count = 0; + + /** + * @static + * @memberof ScrollSpy + */ + ScrollSpy._increment = 0; + + /** + * @static + * @memberof ScrollSpy + */ + ScrollSpy._ticks = 0; + + M.ScrollSpy = ScrollSpy; + + if (M.jQueryLoaded) { + M.initializeJqueryWrapper(ScrollSpy, 'scrollSpy', 'M_ScrollSpy'); + } +})(cash, M.anime); +;(function ($) { + 'use strict'; + + var _defaults = { + data: {}, // Autocomplete data set + limit: Infinity, // Limit of results the autocomplete shows + onAutocomplete: null, // Callback for when autocompleted + minLength: 1, // Min characters before autocomplete starts + sortFunction: function (a, b, inputString) { + // Sort function for sorting autocomplete results + return a.indexOf(inputString) - b.indexOf(inputString); + } + }; + + /** + * @class + * + */ + + var Autocomplete = function (_Component10) { + _inherits(Autocomplete, _Component10); + + /** + * Construct Autocomplete instance + * @constructor + * @param {Element} el + * @param {Object} options + */ + function Autocomplete(el, options) { + _classCallCheck(this, Autocomplete); + + var _this37 = _possibleConstructorReturn(this, (Autocomplete.__proto__ || Object.getPrototypeOf(Autocomplete)).call(this, Autocomplete, el, options)); + + _this37.el.M_Autocomplete = _this37; + + /** + * Options for the autocomplete + * @member Autocomplete#options + * @prop {Number} duration + * @prop {Number} dist + * @prop {number} shift + * @prop {number} padding + * @prop {Boolean} fullWidth + * @prop {Boolean} indicators + * @prop {Boolean} noWrap + * @prop {Function} onCycleTo + */ + _this37.options = $.extend({}, Autocomplete.defaults, options); + + // Setup + _this37.isOpen = false; + _this37.count = 0; + _this37.activeIndex = -1; + _this37.oldVal; + _this37.$inputField = _this37.$el.closest('.input-field'); + _this37.$active = $(); + _this37._mousedown = false; + _this37._setupDropdown(); + + _this37._setupEventHandlers(); + return _this37; + } + + _createClass(Autocomplete, [{ + key: "destroy", + + + /** + * Teardown component + */ + value: function destroy() { + this._removeEventHandlers(); + this._removeDropdown(); + this.el.M_Autocomplete = undefined; + } + + /** + * Setup Event Handlers + */ + + }, { + key: "_setupEventHandlers", + value: function _setupEventHandlers() { + this._handleInputBlurBound = this._handleInputBlur.bind(this); + this._handleInputKeyupAndFocusBound = this._handleInputKeyupAndFocus.bind(this); + this._handleInputKeydownBound = this._handleInputKeydown.bind(this); + this._handleInputClickBound = this._handleInputClick.bind(this); + this._handleContainerMousedownAndTouchstartBound = this._handleContainerMousedownAndTouchstart.bind(this); + this._handleContainerMouseupAndTouchendBound = this._handleContainerMouseupAndTouchend.bind(this); + + this.el.addEventListener('blur', this._handleInputBlurBound); + this.el.addEventListener('keyup', this._handleInputKeyupAndFocusBound); + this.el.addEventListener('focus', this._handleInputKeyupAndFocusBound); + this.el.addEventListener('keydown', this._handleInputKeydownBound); + this.el.addEventListener('click', this._handleInputClickBound); + this.container.addEventListener('mousedown', this._handleContainerMousedownAndTouchstartBound); + this.container.addEventListener('mouseup', this._handleContainerMouseupAndTouchendBound); + + if (typeof window.ontouchstart !== 'undefined') { + this.container.addEventListener('touchstart', this._handleContainerMousedownAndTouchstartBound); + this.container.addEventListener('touchend', this._handleContainerMouseupAndTouchendBound); + } + } + + /** + * Remove Event Handlers + */ + + }, { + key: "_removeEventHandlers", + value: function _removeEventHandlers() { + this.el.removeEventListener('blur', this._handleInputBlurBound); + this.el.removeEventListener('keyup', this._handleInputKeyupAndFocusBound); + this.el.removeEventListener('focus', this._handleInputKeyupAndFocusBound); + this.el.removeEventListener('keydown', this._handleInputKeydownBound); + this.el.removeEventListener('click', this._handleInputClickBound); + this.container.removeEventListener('mousedown', this._handleContainerMousedownAndTouchstartBound); + this.container.removeEventListener('mouseup', this._handleContainerMouseupAndTouchendBound); + + if (typeof window.ontouchstart !== 'undefined') { + this.container.removeEventListener('touchstart', this._handleContainerMousedownAndTouchstartBound); + this.container.removeEventListener('touchend', this._handleContainerMouseupAndTouchendBound); + } + } + + /** + * Setup dropdown + */ + + }, { + key: "_setupDropdown", + value: function _setupDropdown() { + var _this38 = this; + + this.container = document.createElement('ul'); + this.container.id = "autocomplete-options-" + M.guid(); + $(this.container).addClass('autocomplete-content dropdown-content'); + this.$inputField.append(this.container); + this.el.setAttribute('data-target', this.container.id); + + this.dropdown = M.Dropdown.init(this.el, { + autoFocus: false, + closeOnClick: false, + coverTrigger: false, + onItemClick: function (itemEl) { + _this38.selectOption($(itemEl)); + } + }); + + // Sketchy removal of dropdown click handler + this.el.removeEventListener('click', this.dropdown._handleClickBound); + } + + /** + * Remove dropdown + */ + + }, { + key: "_removeDropdown", + value: function _removeDropdown() { + this.container.parentNode.removeChild(this.container); + } + + /** + * Handle Input Blur + */ + + }, { + key: "_handleInputBlur", + value: function _handleInputBlur() { + if (!this._mousedown) { + this.close(); + this._resetAutocomplete(); + } + } + + /** + * Handle Input Keyup and Focus + * @param {Event} e + */ + + }, { + key: "_handleInputKeyupAndFocus", + value: function _handleInputKeyupAndFocus(e) { + if (e.type === 'keyup') { + Autocomplete._keydown = false; + } + + this.count = 0; + var val = this.el.value.toLowerCase(); + + // Don't capture enter or arrow key usage. + if (e.keyCode === 13 || e.keyCode === 38 || e.keyCode === 40) { + return; + } + + // Check if the input isn't empty + // Check if focus triggered by tab + if (this.oldVal !== val && (M.tabPressed || e.type !== 'focus')) { + this.open(); + } + + // Update oldVal + this.oldVal = val; + } + + /** + * Handle Input Keydown + * @param {Event} e + */ + + }, { + key: "_handleInputKeydown", + value: function _handleInputKeydown(e) { + Autocomplete._keydown = true; + + // Arrow keys and enter key usage + var keyCode = e.keyCode, + liElement = void 0, + numItems = $(this.container).children('li').length; + + // select element on Enter + if (keyCode === M.keys.ENTER && this.activeIndex >= 0) { + liElement = $(this.container).children('li').eq(this.activeIndex); + if (liElement.length) { + this.selectOption(liElement); + e.preventDefault(); + } + return; + } + + // Capture up and down key + if (keyCode === M.keys.ARROW_UP || keyCode === M.keys.ARROW_DOWN) { + e.preventDefault(); + + if (keyCode === M.keys.ARROW_UP && this.activeIndex > 0) { + this.activeIndex--; + } + + if (keyCode === M.keys.ARROW_DOWN && this.activeIndex < numItems - 1) { + this.activeIndex++; + } + + this.$active.removeClass('active'); + if (this.activeIndex >= 0) { + this.$active = $(this.container).children('li').eq(this.activeIndex); + this.$active.addClass('active'); + } + } + } + + /** + * Handle Input Click + * @param {Event} e + */ + + }, { + key: "_handleInputClick", + value: function _handleInputClick(e) { + this.open(); + } + + /** + * Handle Container Mousedown and Touchstart + * @param {Event} e + */ + + }, { + key: "_handleContainerMousedownAndTouchstart", + value: function _handleContainerMousedownAndTouchstart(e) { + this._mousedown = true; + } + + /** + * Handle Container Mouseup and Touchend + * @param {Event} e + */ + + }, { + key: "_handleContainerMouseupAndTouchend", + value: function _handleContainerMouseupAndTouchend(e) { + this._mousedown = false; + } + + /** + * Highlight partial match + */ + + }, { + key: "_highlight", + value: function _highlight(string, $el) { + var img = $el.find('img'); + var matchStart = $el.text().toLowerCase().indexOf('' + string.toLowerCase() + ''), + matchEnd = matchStart + string.length - 1, + beforeMatch = $el.text().slice(0, matchStart), + matchText = $el.text().slice(matchStart, matchEnd + 1), + afterMatch = $el.text().slice(matchEnd + 1); + $el.html("<span>" + beforeMatch + "<span class='highlight'>" + matchText + "</span>" + afterMatch + "</span>"); + if (img.length) { + $el.prepend(img); + } + } + + /** + * Reset current element position + */ + + }, { + key: "_resetCurrentElement", + value: function _resetCurrentElement() { + this.activeIndex = -1; + this.$active.removeClass('active'); + } + + /** + * Reset autocomplete elements + */ + + }, { + key: "_resetAutocomplete", + value: function _resetAutocomplete() { + $(this.container).empty(); + this._resetCurrentElement(); + this.oldVal = null; + this.isOpen = false; + this._mousedown = false; + } + + /** + * Select autocomplete option + * @param {Element} el Autocomplete option list item element + */ + + }, { + key: "selectOption", + value: function selectOption(el) { + var text = el.text().trim(); + this.el.value = text; + this.$el.trigger('change'); + this._resetAutocomplete(); + this.close(); + + // Handle onAutocomplete callback. + if (typeof this.options.onAutocomplete === 'function') { + this.options.onAutocomplete.call(this, text); + } + } + + /** + * Render dropdown content + * @param {Object} data data set + * @param {String} val current input value + */ + + }, { + key: "_renderDropdown", + value: function _renderDropdown(data, val) { + var _this39 = this; + + this._resetAutocomplete(); + + var matchingData = []; + + // Gather all matching data + for (var key in data) { + if (data.hasOwnProperty(key) && key.toLowerCase().indexOf(val) !== -1) { + // Break if past limit + if (this.count >= this.options.limit) { + break; + } + + var entry = { + data: data[key], + key: key + }; + matchingData.push(entry); + + this.count++; + } + } + + // Sort + if (this.options.sortFunction) { + var sortFunctionBound = function (a, b) { + return _this39.options.sortFunction(a.key.toLowerCase(), b.key.toLowerCase(), val.toLowerCase()); + }; + matchingData.sort(sortFunctionBound); + } + + // Render + for (var i = 0; i < matchingData.length; i++) { + var _entry = matchingData[i]; + var $autocompleteOption = $('<li></li>'); + if (!!_entry.data) { + $autocompleteOption.append("<img src=\"" + _entry.data + "\" class=\"right circle\"><span>" + _entry.key + "</span>"); + } else { + $autocompleteOption.append('<span>' + _entry.key + '</span>'); + } + + $(this.container).append($autocompleteOption); + this._highlight(val, $autocompleteOption); + } + } + + /** + * Open Autocomplete Dropdown + */ + + }, { + key: "open", + value: function open() { + var val = this.el.value.toLowerCase(); + + this._resetAutocomplete(); + + if (val.length >= this.options.minLength) { + this.isOpen = true; + this._renderDropdown(this.options.data, val); + } + + // Open dropdown + if (!this.dropdown.isOpen) { + this.dropdown.open(); + } else { + // Recalculate dropdown when its already open + this.dropdown.recalculateDimensions(); + } + } + + /** + * Close Autocomplete Dropdown + */ + + }, { + key: "close", + value: function close() { + this.dropdown.close(); + } + + /** + * Update Data + * @param {Object} data + */ + + }, { + key: "updateData", + value: function updateData(data) { + var val = this.el.value.toLowerCase(); + this.options.data = data; + + if (this.isOpen) { + this._renderDropdown(data, val); + } + } + }], [{ + key: "init", + value: function init(els, options) { + return _get(Autocomplete.__proto__ || Object.getPrototypeOf(Autocomplete), "init", this).call(this, this, els, options); + } + + /** + * Get Instance + */ + + }, { + key: "getInstance", + value: function getInstance(el) { + var domElem = !!el.jquery ? el[0] : el; + return domElem.M_Autocomplete; + } + }, { + key: "defaults", + get: function () { + return _defaults; + } + }]); + + return Autocomplete; + }(Component); + + /** + * @static + * @memberof Autocomplete + */ + + + Autocomplete._keydown = false; + + M.Autocomplete = Autocomplete; + + if (M.jQueryLoaded) { + M.initializeJqueryWrapper(Autocomplete, 'autocomplete', 'M_Autocomplete'); + } +})(cash); +;(function ($) { + // Function to update labels of text fields + M.updateTextFields = function () { + var input_selector = 'input[type=text], input[type=password], input[type=email], input[type=url], input[type=tel], input[type=number], input[type=search], input[type=date], input[type=time], textarea'; + $(input_selector).each(function (element, index) { + var $this = $(this); + if (element.value.length > 0 || $(element).is(':focus') || element.autofocus || $this.attr('placeholder') !== null) { + $this.siblings('label').addClass('active'); + } else if (element.validity) { + $this.siblings('label').toggleClass('active', element.validity.badInput === true); + } else { + $this.siblings('label').removeClass('active'); + } + }); + }; + + M.validate_field = function (object) { + var hasLength = object.attr('data-length') !== null; + var lenAttr = parseInt(object.attr('data-length')); + var len = object[0].value.length; + + if (len === 0 && object[0].validity.badInput === false && !object.is(':required')) { + if (object.hasClass('validate')) { + object.removeClass('valid'); + object.removeClass('invalid'); + } + } else { + if (object.hasClass('validate')) { + // Check for character counter attributes + if (object.is(':valid') && hasLength && len <= lenAttr || object.is(':valid') && !hasLength) { + object.removeClass('invalid'); + object.addClass('valid'); + } else { + object.removeClass('valid'); + object.addClass('invalid'); + } + } + } + }; + + M.textareaAutoResize = function ($textarea) { + // Wrap if native element + if ($textarea instanceof Element) { + $textarea = $($textarea); + } + + if (!$textarea.length) { + console.error('No textarea element found'); + return; + } + + // Textarea Auto Resize + var hiddenDiv = $('.hiddendiv').first(); + if (!hiddenDiv.length) { + hiddenDiv = $('<div class="hiddendiv common"></div>'); + $('body').append(hiddenDiv); + } + + // Set font properties of hiddenDiv + var fontFamily = $textarea.css('font-family'); + var fontSize = $textarea.css('font-size'); + var lineHeight = $textarea.css('line-height'); + + // Firefox can't handle padding shorthand. + var paddingTop = $textarea.css('padding-top'); + var paddingRight = $textarea.css('padding-right'); + var paddingBottom = $textarea.css('padding-bottom'); + var paddingLeft = $textarea.css('padding-left'); + + if (fontSize) { + hiddenDiv.css('font-size', fontSize); + } + if (fontFamily) { + hiddenDiv.css('font-family', fontFamily); + } + if (lineHeight) { + hiddenDiv.css('line-height', lineHeight); + } + if (paddingTop) { + hiddenDiv.css('padding-top', paddingTop); + } + if (paddingRight) { + hiddenDiv.css('padding-right', paddingRight); + } + if (paddingBottom) { + hiddenDiv.css('padding-bottom', paddingBottom); + } + if (paddingLeft) { + hiddenDiv.css('padding-left', paddingLeft); + } + + // Set original-height, if none + if (!$textarea.data('original-height')) { + $textarea.data('original-height', $textarea.height()); + } + + if ($textarea.attr('wrap') === 'off') { + hiddenDiv.css('overflow-wrap', 'normal').css('white-space', 'pre'); + } + + hiddenDiv.text($textarea[0].value + '\n'); + var content = hiddenDiv.html().replace(/\n/g, '<br>'); + hiddenDiv.html(content); + + // When textarea is hidden, width goes crazy. + // Approximate with half of window size + + if ($textarea[0].offsetWidth > 0 && $textarea[0].offsetHeight > 0) { + hiddenDiv.css('width', $textarea.width() + 'px'); + } else { + hiddenDiv.css('width', window.innerWidth / 2 + 'px'); + } + + /** + * Resize if the new height is greater than the + * original height of the textarea + */ + if ($textarea.data('original-height') <= hiddenDiv.innerHeight()) { + $textarea.css('height', hiddenDiv.innerHeight() + 'px'); + } else if ($textarea[0].value.length < $textarea.data('previous-length')) { + /** + * In case the new height is less than original height, it + * means the textarea has less text than before + * So we set the height to the original one + */ + $textarea.css('height', $textarea.data('original-height') + 'px'); + } + $textarea.data('previous-length', $textarea[0].value.length); + }; + + $(document).ready(function () { + // Text based inputs + var input_selector = 'input[type=text], input[type=password], input[type=email], input[type=url], input[type=tel], input[type=number], input[type=search], input[type=date], input[type=time], textarea'; + + // Add active if form auto complete + $(document).on('change', input_selector, function () { + if (this.value.length !== 0 || $(this).attr('placeholder') !== null) { + $(this).siblings('label').addClass('active'); + } + M.validate_field($(this)); + }); + + // Add active if input element has been pre-populated on document ready + $(document).ready(function () { + M.updateTextFields(); + }); + + // HTML DOM FORM RESET handling + $(document).on('reset', function (e) { + var formReset = $(e.target); + if (formReset.is('form')) { + formReset.find(input_selector).removeClass('valid').removeClass('invalid'); + formReset.find(input_selector).each(function (e) { + if (this.value.length) { + $(this).siblings('label').removeClass('active'); + } + }); + + // Reset select (after native reset) + setTimeout(function () { + formReset.find('select').each(function () { + // check if initialized + if (this.M_FormSelect) { + $(this).trigger('change'); + } + }); + }, 0); + } + }); + + /** + * Add active when element has focus + * @param {Event} e + */ + document.addEventListener('focus', function (e) { + if ($(e.target).is(input_selector)) { + $(e.target).siblings('label, .prefix').addClass('active'); + } + }, true); + + /** + * Remove active when element is blurred + * @param {Event} e + */ + document.addEventListener('blur', function (e) { + var $inputElement = $(e.target); + if ($inputElement.is(input_selector)) { + var selector = '.prefix'; + + if ($inputElement[0].value.length === 0 && $inputElement[0].validity.badInput !== true && $inputElement.attr('placeholder') === null) { + selector += ', label'; + } + $inputElement.siblings(selector).removeClass('active'); + M.validate_field($inputElement); + } + }, true); + + // Radio and Checkbox focus class + var radio_checkbox = 'input[type=radio], input[type=checkbox]'; + $(document).on('keyup', radio_checkbox, function (e) { + // TAB, check if tabbing to radio or checkbox. + if (e.which === M.keys.TAB) { + $(this).addClass('tabbed'); + var $this = $(this); + $this.one('blur', function (e) { + $(this).removeClass('tabbed'); + }); + return; + } + }); + + var text_area_selector = '.materialize-textarea'; + $(text_area_selector).each(function () { + var $textarea = $(this); + /** + * Resize textarea on document load after storing + * the original height and the original length + */ + $textarea.data('original-height', $textarea.height()); + $textarea.data('previous-length', this.value.length); + M.textareaAutoResize($textarea); + }); + + $(document).on('keyup', text_area_selector, function () { + M.textareaAutoResize($(this)); + }); + $(document).on('keydown', text_area_selector, function () { + M.textareaAutoResize($(this)); + }); + + // File Input Path + $(document).on('change', '.file-field input[type="file"]', function () { + var file_field = $(this).closest('.file-field'); + var path_input = file_field.find('input.file-path'); + var files = $(this)[0].files; + var file_names = []; + for (var i = 0; i < files.length; i++) { + file_names.push(files[i].name); + } + path_input[0].value = file_names.join(', '); + path_input.trigger('change'); + }); + }); // End of $(document).ready +})(cash); +;(function ($, anim) { + 'use strict'; + + var _defaults = { + indicators: true, + height: 400, + duration: 500, + interval: 6000 + }; + + /** + * @class + * + */ + + var Slider = function (_Component11) { + _inherits(Slider, _Component11); + + /** + * Construct Slider instance and set up overlay + * @constructor + * @param {Element} el + * @param {Object} options + */ + function Slider(el, options) { + _classCallCheck(this, Slider); + + var _this40 = _possibleConstructorReturn(this, (Slider.__proto__ || Object.getPrototypeOf(Slider)).call(this, Slider, el, options)); + + _this40.el.M_Slider = _this40; + + /** + * Options for the modal + * @member Slider#options + * @prop {Boolean} [indicators=true] - Show indicators + * @prop {Number} [height=400] - height of slider + * @prop {Number} [duration=500] - Length in ms of slide transition + * @prop {Number} [interval=6000] - Length in ms of slide interval + */ + _this40.options = $.extend({}, Slider.defaults, options); + + // setup + _this40.$slider = _this40.$el.find('.slides'); + _this40.$slides = _this40.$slider.children('li'); + _this40.activeIndex = _this40.$slides.filter(function (item) { + return $(item).hasClass('active'); + }).first().index(); + if (_this40.activeIndex != -1) { + _this40.$active = _this40.$slides.eq(_this40.activeIndex); + } + + _this40._setSliderHeight(); + + // Set initial positions of captions + _this40.$slides.find('.caption').each(function (el) { + _this40._animateCaptionIn(el, 0); + }); + + // Move img src into background-image + _this40.$slides.find('img').each(function (el) { + var placeholderBase64 = 'data:image/gif;base64,R0lGODlhAQABAIABAP///wAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=='; + if ($(el).attr('src') !== placeholderBase64) { + $(el).css('background-image', 'url("' + $(el).attr('src') + '")'); + $(el).attr('src', placeholderBase64); + } + }); + + _this40._setupIndicators(); + + // Show active slide + if (_this40.$active) { + _this40.$active.css('display', 'block'); + } else { + _this40.$slides.first().addClass('active'); + anim({ + targets: _this40.$slides.first()[0], + opacity: 1, + duration: _this40.options.duration, + easing: 'easeOutQuad' + }); + + _this40.activeIndex = 0; + _this40.$active = _this40.$slides.eq(_this40.activeIndex); + + // Update indicators + if (_this40.options.indicators) { + _this40.$indicators.eq(_this40.activeIndex).addClass('active'); + } + } + + // Adjust height to current slide + _this40.$active.find('img').each(function (el) { + anim({ + targets: _this40.$active.find('.caption')[0], + opacity: 1, + translateX: 0, + translateY: 0, + duration: _this40.options.duration, + easing: 'easeOutQuad' + }); + }); + + _this40._setupEventHandlers(); + + // auto scroll + _this40.start(); + return _this40; + } + + _createClass(Slider, [{ + key: "destroy", + + + /** + * Teardown component + */ + value: function destroy() { + this.pause(); + this._removeIndicators(); + this._removeEventHandlers(); + this.el.M_Slider = undefined; + } + + /** + * Setup Event Handlers + */ + + }, { + key: "_setupEventHandlers", + value: function _setupEventHandlers() { + var _this41 = this; + + this._handleIntervalBound = this._handleInterval.bind(this); + this._handleIndicatorClickBound = this._handleIndicatorClick.bind(this); + + if (this.options.indicators) { + this.$indicators.each(function (el) { + el.addEventListener('click', _this41._handleIndicatorClickBound); + }); + } + } + + /** + * Remove Event Handlers + */ + + }, { + key: "_removeEventHandlers", + value: function _removeEventHandlers() { + var _this42 = this; + + if (this.options.indicators) { + this.$indicators.each(function (el) { + el.removeEventListener('click', _this42._handleIndicatorClickBound); + }); + } + } + + /** + * Handle indicator click + * @param {Event} e + */ + + }, { + key: "_handleIndicatorClick", + value: function _handleIndicatorClick(e) { + var currIndex = $(e.target).index(); + this.set(currIndex); + } + + /** + * Handle Interval + */ + + }, { + key: "_handleInterval", + value: function _handleInterval() { + var newActiveIndex = this.$slider.find('.active').index(); + if (this.$slides.length === newActiveIndex + 1) newActiveIndex = 0; + // loop to start + else newActiveIndex += 1; + + this.set(newActiveIndex); + } + + /** + * Animate in caption + * @param {Element} caption + * @param {Number} duration + */ + + }, { + key: "_animateCaptionIn", + value: function _animateCaptionIn(caption, duration) { + var animOptions = { + targets: caption, + opacity: 0, + duration: duration, + easing: 'easeOutQuad' + }; + + if ($(caption).hasClass('center-align')) { + animOptions.translateY = -100; + } else if ($(caption).hasClass('right-align')) { + animOptions.translateX = 100; + } else if ($(caption).hasClass('left-align')) { + animOptions.translateX = -100; + } + + anim(animOptions); + } + + /** + * Set height of slider + */ + + }, { + key: "_setSliderHeight", + value: function _setSliderHeight() { + // If fullscreen, do nothing + if (!this.$el.hasClass('fullscreen')) { + if (this.options.indicators) { + // Add height if indicators are present + this.$el.css('height', this.options.height + 40 + 'px'); + } else { + this.$el.css('height', this.options.height + 'px'); + } + this.$slider.css('height', this.options.height + 'px'); + } + } + + /** + * Setup indicators + */ + + }, { + key: "_setupIndicators", + value: function _setupIndicators() { + var _this43 = this; + + if (this.options.indicators) { + this.$indicators = $('<ul class="indicators"></ul>'); + this.$slides.each(function (el, index) { + var $indicator = $('<li class="indicator-item"></li>'); + _this43.$indicators.append($indicator[0]); + }); + this.$el.append(this.$indicators[0]); + this.$indicators = this.$indicators.children('li.indicator-item'); + } + } + + /** + * Remove indicators + */ + + }, { + key: "_removeIndicators", + value: function _removeIndicators() { + this.$el.find('ul.indicators').remove(); + } + + /** + * Cycle to nth item + * @param {Number} index + */ + + }, { + key: "set", + value: function set(index) { + var _this44 = this; + + // Wrap around indices. + if (index >= this.$slides.length) index = 0;else if (index < 0) index = this.$slides.length - 1; + + // Only do if index changes + if (this.activeIndex != index) { + this.$active = this.$slides.eq(this.activeIndex); + var $caption = this.$active.find('.caption'); + this.$active.removeClass('active'); + + anim({ + targets: this.$active[0], + opacity: 0, + duration: this.options.duration, + easing: 'easeOutQuad', + complete: function () { + _this44.$slides.not('.active').each(function (el) { + anim({ + targets: el, + opacity: 0, + translateX: 0, + translateY: 0, + duration: 0, + easing: 'easeOutQuad' + }); + }); + } + }); + + this._animateCaptionIn($caption[0], this.options.duration); + + // Update indicators + if (this.options.indicators) { + this.$indicators.eq(this.activeIndex).removeClass('active'); + this.$indicators.eq(index).addClass('active'); + } + + anim({ + targets: this.$slides.eq(index)[0], + opacity: 1, + duration: this.options.duration, + easing: 'easeOutQuad' + }); + + anim({ + targets: this.$slides.eq(index).find('.caption')[0], + opacity: 1, + translateX: 0, + translateY: 0, + duration: this.options.duration, + delay: this.options.duration, + easing: 'easeOutQuad' + }); + + this.$slides.eq(index).addClass('active'); + this.activeIndex = index; + + // Reset interval + this.start(); + } + } + + /** + * Pause slider interval + */ + + }, { + key: "pause", + value: function pause() { + clearInterval(this.interval); + } + + /** + * Start slider interval + */ + + }, { + key: "start", + value: function start() { + clearInterval(this.interval); + this.interval = setInterval(this._handleIntervalBound, this.options.duration + this.options.interval); + } + + /** + * Move to next slide + */ + + }, { + key: "next", + value: function next() { + var newIndex = this.activeIndex + 1; + + // Wrap around indices. + if (newIndex >= this.$slides.length) newIndex = 0;else if (newIndex < 0) newIndex = this.$slides.length - 1; + + this.set(newIndex); + } + + /** + * Move to previous slide + */ + + }, { + key: "prev", + value: function prev() { + var newIndex = this.activeIndex - 1; + + // Wrap around indices. + if (newIndex >= this.$slides.length) newIndex = 0;else if (newIndex < 0) newIndex = this.$slides.length - 1; + + this.set(newIndex); + } + }], [{ + key: "init", + value: function init(els, options) { + return _get(Slider.__proto__ || Object.getPrototypeOf(Slider), "init", this).call(this, this, els, options); + } + + /** + * Get Instance + */ + + }, { + key: "getInstance", + value: function getInstance(el) { + var domElem = !!el.jquery ? el[0] : el; + return domElem.M_Slider; + } + }, { + key: "defaults", + get: function () { + return _defaults; + } + }]); + + return Slider; + }(Component); + + M.Slider = Slider; + + if (M.jQueryLoaded) { + M.initializeJqueryWrapper(Slider, 'slider', 'M_Slider'); + } +})(cash, M.anime); +;(function ($, anim) { + $(document).on('click', '.card', function (e) { + if ($(this).children('.card-reveal').length) { + var $card = $(e.target).closest('.card'); + if ($card.data('initialOverflow') === undefined) { + $card.data('initialOverflow', $card.css('overflow') === undefined ? '' : $card.css('overflow')); + } + var $cardReveal = $(this).find('.card-reveal'); + if ($(e.target).is($('.card-reveal .card-title')) || $(e.target).is($('.card-reveal .card-title i'))) { + // Make Reveal animate down and display none + anim({ + targets: $cardReveal[0], + translateY: 0, + duration: 225, + easing: 'easeInOutQuad', + complete: function (anim) { + var el = anim.animatables[0].target; + $(el).css({ display: 'none' }); + $card.css('overflow', $card.data('initialOverflow')); + } + }); + } else if ($(e.target).is($('.card .activator')) || $(e.target).is($('.card .activator i'))) { + $card.css('overflow', 'hidden'); + $cardReveal.css({ display: 'block' }); + anim({ + targets: $cardReveal[0], + translateY: '-100%', + duration: 300, + easing: 'easeInOutQuad' + }); + } + } + }); +})(cash, M.anime); +;(function ($) { + 'use strict'; + + var _defaults = { + data: [], + placeholder: '', + secondaryPlaceholder: '', + autocompleteOptions: {}, + limit: Infinity, + onChipAdd: null, + onChipSelect: null, + onChipDelete: null + }; + + /** + * @typedef {Object} chip + * @property {String} tag chip tag string + * @property {String} [image] chip avatar image string + */ + + /** + * @class + * + */ + + var Chips = function (_Component12) { + _inherits(Chips, _Component12); + + /** + * Construct Chips instance and set up overlay + * @constructor + * @param {Element} el + * @param {Object} options + */ + function Chips(el, options) { + _classCallCheck(this, Chips); + + var _this45 = _possibleConstructorReturn(this, (Chips.__proto__ || Object.getPrototypeOf(Chips)).call(this, Chips, el, options)); + + _this45.el.M_Chips = _this45; + + /** + * Options for the modal + * @member Chips#options + * @prop {Array} data + * @prop {String} placeholder + * @prop {String} secondaryPlaceholder + * @prop {Object} autocompleteOptions + */ + _this45.options = $.extend({}, Chips.defaults, options); + + _this45.$el.addClass('chips input-field'); + _this45.chipsData = []; + _this45.$chips = $(); + _this45._setupInput(); + _this45.hasAutocomplete = Object.keys(_this45.options.autocompleteOptions).length > 0; + + // Set input id + if (!_this45.$input.attr('id')) { + _this45.$input.attr('id', M.guid()); + } + + // Render initial chips + if (_this45.options.data.length) { + _this45.chipsData = _this45.options.data; + _this45._renderChips(_this45.chipsData); + } + + // Setup autocomplete if needed + if (_this45.hasAutocomplete) { + _this45._setupAutocomplete(); + } + + _this45._setPlaceholder(); + _this45._setupLabel(); + _this45._setupEventHandlers(); + return _this45; + } + + _createClass(Chips, [{ + key: "getData", + + + /** + * Get Chips Data + */ + value: function getData() { + return this.chipsData; + } + + /** + * Teardown component + */ + + }, { + key: "destroy", + value: function destroy() { + this._removeEventHandlers(); + this.$chips.remove(); + this.el.M_Chips = undefined; + } + + /** + * Setup Event Handlers + */ + + }, { + key: "_setupEventHandlers", + value: function _setupEventHandlers() { + this._handleChipClickBound = this._handleChipClick.bind(this); + this._handleInputKeydownBound = this._handleInputKeydown.bind(this); + this._handleInputFocusBound = this._handleInputFocus.bind(this); + this._handleInputBlurBound = this._handleInputBlur.bind(this); + + this.el.addEventListener('click', this._handleChipClickBound); + document.addEventListener('keydown', Chips._handleChipsKeydown); + document.addEventListener('keyup', Chips._handleChipsKeyup); + this.el.addEventListener('blur', Chips._handleChipsBlur, true); + this.$input[0].addEventListener('focus', this._handleInputFocusBound); + this.$input[0].addEventListener('blur', this._handleInputBlurBound); + this.$input[0].addEventListener('keydown', this._handleInputKeydownBound); + } + + /** + * Remove Event Handlers + */ + + }, { + key: "_removeEventHandlers", + value: function _removeEventHandlers() { + this.el.removeEventListener('click', this._handleChipClickBound); + document.removeEventListener('keydown', Chips._handleChipsKeydown); + document.removeEventListener('keyup', Chips._handleChipsKeyup); + this.el.removeEventListener('blur', Chips._handleChipsBlur, true); + this.$input[0].removeEventListener('focus', this._handleInputFocusBound); + this.$input[0].removeEventListener('blur', this._handleInputBlurBound); + this.$input[0].removeEventListener('keydown', this._handleInputKeydownBound); + } + + /** + * Handle Chip Click + * @param {Event} e + */ + + }, { + key: "_handleChipClick", + value: function _handleChipClick(e) { + var $chip = $(e.target).closest('.chip'); + var clickedClose = $(e.target).is('.close'); + if ($chip.length) { + var index = $chip.index(); + if (clickedClose) { + // delete chip + this.deleteChip(index); + this.$input[0].focus(); + } else { + // select chip + this.selectChip(index); + } + + // Default handle click to focus on input + } else { + this.$input[0].focus(); + } + } + + /** + * Handle Chips Keydown + * @param {Event} e + */ + + }, { + key: "_handleInputFocus", + + + /** + * Handle Input Focus + */ + value: function _handleInputFocus() { + this.$el.addClass('focus'); + } + + /** + * Handle Input Blur + */ + + }, { + key: "_handleInputBlur", + value: function _handleInputBlur() { + this.$el.removeClass('focus'); + } + + /** + * Handle Input Keydown + * @param {Event} e + */ + + }, { + key: "_handleInputKeydown", + value: function _handleInputKeydown(e) { + Chips._keydown = true; + + // enter + if (e.keyCode === 13) { + // Override enter if autocompleting. + if (this.hasAutocomplete && this.autocomplete && this.autocomplete.isOpen) { + return; + } + + e.preventDefault(); + this.addChip({ + tag: this.$input[0].value + }); + this.$input[0].value = ''; + + // delete or left + } else if ((e.keyCode === 8 || e.keyCode === 37) && this.$input[0].value === '' && this.chipsData.length) { + e.preventDefault(); + this.selectChip(this.chipsData.length - 1); + } + } + + /** + * Render Chip + * @param {chip} chip + * @return {Element} + */ + + }, { + key: "_renderChip", + value: function _renderChip(chip) { + if (!chip.tag) { + return; + } + + var renderedChip = document.createElement('div'); + var closeIcon = document.createElement('i'); + renderedChip.classList.add('chip'); + renderedChip.textContent = chip.tag; + renderedChip.setAttribute('tabindex', 0); + $(closeIcon).addClass('material-icons close'); + closeIcon.textContent = 'close'; + + // attach image if needed + if (chip.image) { + var img = document.createElement('img'); + img.setAttribute('src', chip.image); + renderedChip.insertBefore(img, renderedChip.firstChild); + } + + renderedChip.appendChild(closeIcon); + return renderedChip; + } + + /** + * Render Chips + */ + + }, { + key: "_renderChips", + value: function _renderChips() { + this.$chips.remove(); + for (var i = 0; i < this.chipsData.length; i++) { + var chipEl = this._renderChip(this.chipsData[i]); + this.$el.append(chipEl); + this.$chips.add(chipEl); + } + + // move input to end + this.$el.append(this.$input[0]); + } + + /** + * Setup Autocomplete + */ + + }, { + key: "_setupAutocomplete", + value: function _setupAutocomplete() { + var _this46 = this; + + this.options.autocompleteOptions.onAutocomplete = function (val) { + _this46.addChip({ + tag: val + }); + _this46.$input[0].value = ''; + _this46.$input[0].focus(); + }; + + this.autocomplete = M.Autocomplete.init(this.$input[0], this.options.autocompleteOptions); + } + + /** + * Setup Input + */ + + }, { + key: "_setupInput", + value: function _setupInput() { + this.$input = this.$el.find('input'); + if (!this.$input.length) { + this.$input = $('<input></input>'); + this.$el.append(this.$input); + } + + this.$input.addClass('input'); + } + + /** + * Setup Label + */ + + }, { + key: "_setupLabel", + value: function _setupLabel() { + this.$label = this.$el.find('label'); + if (this.$label.length) { + this.$label.setAttribute('for', this.$input.attr('id')); + } + } + + /** + * Set placeholder + */ + + }, { + key: "_setPlaceholder", + value: function _setPlaceholder() { + if (this.chipsData !== undefined && !this.chipsData.length && this.options.placeholder) { + $(this.$input).prop('placeholder', this.options.placeholder); + } else if ((this.chipsData === undefined || !!this.chipsData.length) && this.options.secondaryPlaceholder) { + $(this.$input).prop('placeholder', this.options.secondaryPlaceholder); + } + } + + /** + * Check if chip is valid + * @param {chip} chip + */ + + }, { + key: "_isValid", + value: function _isValid(chip) { + if (chip.hasOwnProperty('tag') && chip.tag !== '') { + var exists = false; + for (var i = 0; i < this.chipsData.length; i++) { + if (this.chipsData[i].tag === chip.tag) { + exists = true; + break; + } + } + return !exists; + } + + return false; + } + + /** + * Add chip + * @param {chip} chip + */ + + }, { + key: "addChip", + value: function addChip(chip) { + if (!this._isValid(chip) || this.chipsData.length >= this.options.limit) { + return; + } + + var renderedChip = this._renderChip(chip); + this.$chips.add(renderedChip); + this.chipsData.push(chip); + $(this.$input).before(renderedChip); + this._setPlaceholder(); + + // fire chipAdd callback + if (typeof this.options.onChipAdd === 'function') { + this.options.onChipAdd.call(this, this.$el, renderedChip); + } + } + + /** + * Delete chip + * @param {Number} chip + */ + + }, { + key: "deleteChip", + value: function deleteChip(chipIndex) { + var $chip = this.$chips.eq(chipIndex); + this.$chips.eq(chipIndex).remove(); + this.$chips = this.$chips.filter(function (el) { + return $(el).index() >= 0; + }); + this.chipsData.splice(chipIndex, 1); + this._setPlaceholder(); + + // fire chipDelete callback + if (typeof this.options.onChipDelete === 'function') { + this.options.onChipDelete.call(this, this.$el, $chip[0]); + } + } + + /** + * Select chip + * @param {Number} chip + */ + + }, { + key: "selectChip", + value: function selectChip(chipIndex) { + var $chip = this.$chips.eq(chipIndex); + this._selectedChip = $chip; + $chip[0].focus(); + + // fire chipSelect callback + if (typeof this.options.onChipSelect === 'function') { + this.options.onChipSelect.call(this, this.$el, $chip[0]); + } + } + }], [{ + key: "init", + value: function init(els, options) { + return _get(Chips.__proto__ || Object.getPrototypeOf(Chips), "init", this).call(this, this, els, options); + } + + /** + * Get Instance + */ + + }, { + key: "getInstance", + value: function getInstance(el) { + var domElem = !!el.jquery ? el[0] : el; + return domElem.M_Chips; + } + }, { + key: "_handleChipsKeydown", + value: function _handleChipsKeydown(e) { + Chips._keydown = true; + + var $chips = $(e.target).closest('.chips'); + var chipsKeydown = e.target && $chips.length; + + // Don't handle keydown inputs on input and textarea + if ($(e.target).is('input, textarea') || !chipsKeydown) { + return; + } + + var currChips = $chips[0].M_Chips; + + // backspace and delete + if (e.keyCode === 8 || e.keyCode === 46) { + e.preventDefault(); + + var selectIndex = currChips.chipsData.length; + if (currChips._selectedChip) { + var index = currChips._selectedChip.index(); + currChips.deleteChip(index); + currChips._selectedChip = null; + + // Make sure selectIndex doesn't go negative + selectIndex = Math.max(index - 1, 0); + } + + if (currChips.chipsData.length) { + currChips.selectChip(selectIndex); + } + + // left arrow key + } else if (e.keyCode === 37) { + if (currChips._selectedChip) { + var _selectIndex = currChips._selectedChip.index() - 1; + if (_selectIndex < 0) { + return; + } + currChips.selectChip(_selectIndex); + } + + // right arrow key + } else if (e.keyCode === 39) { + if (currChips._selectedChip) { + var _selectIndex2 = currChips._selectedChip.index() + 1; + + if (_selectIndex2 >= currChips.chipsData.length) { + currChips.$input[0].focus(); + } else { + currChips.selectChip(_selectIndex2); + } + } + } + } + + /** + * Handle Chips Keyup + * @param {Event} e + */ + + }, { + key: "_handleChipsKeyup", + value: function _handleChipsKeyup(e) { + Chips._keydown = false; + } + + /** + * Handle Chips Blur + * @param {Event} e + */ + + }, { + key: "_handleChipsBlur", + value: function _handleChipsBlur(e) { + if (!Chips._keydown) { + var $chips = $(e.target).closest('.chips'); + var currChips = $chips[0].M_Chips; + + currChips._selectedChip = null; + } + } + }, { + key: "defaults", + get: function () { + return _defaults; + } + }]); + + return Chips; + }(Component); + + /** + * @static + * @memberof Chips + */ + + + Chips._keydown = false; + + M.Chips = Chips; + + if (M.jQueryLoaded) { + M.initializeJqueryWrapper(Chips, 'chips', 'M_Chips'); + } + + $(document).ready(function () { + // Handle removal of static chips. + $(document.body).on('click', '.chip .close', function () { + var $chips = $(this).closest('.chips'); + if ($chips.length && $chips[0].M_Chips) { + return; + } + $(this).closest('.chip').remove(); + }); + }); +})(cash); +;(function ($) { + 'use strict'; + + var _defaults = { + top: 0, + bottom: Infinity, + offset: 0, + onPositionChange: null + }; + + /** + * @class + * + */ + + var Pushpin = function (_Component13) { + _inherits(Pushpin, _Component13); + + /** + * Construct Pushpin instance + * @constructor + * @param {Element} el + * @param {Object} options + */ + function Pushpin(el, options) { + _classCallCheck(this, Pushpin); + + var _this47 = _possibleConstructorReturn(this, (Pushpin.__proto__ || Object.getPrototypeOf(Pushpin)).call(this, Pushpin, el, options)); + + _this47.el.M_Pushpin = _this47; + + /** + * Options for the modal + * @member Pushpin#options + */ + _this47.options = $.extend({}, Pushpin.defaults, options); + + _this47.originalOffset = _this47.el.offsetTop; + Pushpin._pushpins.push(_this47); + _this47._setupEventHandlers(); + _this47._updatePosition(); + return _this47; + } + + _createClass(Pushpin, [{ + key: "destroy", + + + /** + * Teardown component + */ + value: function destroy() { + this.el.style.top = null; + this._removePinClasses(); + this._removeEventHandlers(); + + // Remove pushpin Inst + var index = Pushpin._pushpins.indexOf(this); + Pushpin._pushpins.splice(index, 1); + } + }, { + key: "_setupEventHandlers", + value: function _setupEventHandlers() { + document.addEventListener('scroll', Pushpin._updateElements); + } + }, { + key: "_removeEventHandlers", + value: function _removeEventHandlers() { + document.removeEventListener('scroll', Pushpin._updateElements); + } + }, { + key: "_updatePosition", + value: function _updatePosition() { + var scrolled = M.getDocumentScrollTop() + this.options.offset; + + if (this.options.top <= scrolled && this.options.bottom >= scrolled && !this.el.classList.contains('pinned')) { + this._removePinClasses(); + this.el.style.top = this.options.offset + "px"; + this.el.classList.add('pinned'); + + // onPositionChange callback + if (typeof this.options.onPositionChange === 'function') { + this.options.onPositionChange.call(this, 'pinned'); + } + } + + // Add pin-top (when scrolled position is above top) + if (scrolled < this.options.top && !this.el.classList.contains('pin-top')) { + this._removePinClasses(); + this.el.style.top = 0; + this.el.classList.add('pin-top'); + + // onPositionChange callback + if (typeof this.options.onPositionChange === 'function') { + this.options.onPositionChange.call(this, 'pin-top'); + } + } + + // Add pin-bottom (when scrolled position is below bottom) + if (scrolled > this.options.bottom && !this.el.classList.contains('pin-bottom')) { + this._removePinClasses(); + this.el.classList.add('pin-bottom'); + this.el.style.top = this.options.bottom - this.originalOffset + "px"; + + // onPositionChange callback + if (typeof this.options.onPositionChange === 'function') { + this.options.onPositionChange.call(this, 'pin-bottom'); + } + } + } + }, { + key: "_removePinClasses", + value: function _removePinClasses() { + // IE 11 bug (can't remove multiple classes in one line) + this.el.classList.remove('pin-top'); + this.el.classList.remove('pinned'); + this.el.classList.remove('pin-bottom'); + } + }], [{ + key: "init", + value: function init(els, options) { + return _get(Pushpin.__proto__ || Object.getPrototypeOf(Pushpin), "init", this).call(this, this, els, options); + } + + /** + * Get Instance + */ + + }, { + key: "getInstance", + value: function getInstance(el) { + var domElem = !!el.jquery ? el[0] : el; + return domElem.M_Pushpin; + } + }, { + key: "_updateElements", + value: function _updateElements() { + for (var elIndex in Pushpin._pushpins) { + var pInstance = Pushpin._pushpins[elIndex]; + pInstance._updatePosition(); + } + } + }, { + key: "defaults", + get: function () { + return _defaults; + } + }]); + + return Pushpin; + }(Component); + + /** + * @static + * @memberof Pushpin + */ + + + Pushpin._pushpins = []; + + M.Pushpin = Pushpin; + + if (M.jQueryLoaded) { + M.initializeJqueryWrapper(Pushpin, 'pushpin', 'M_Pushpin'); + } +})(cash); +;(function ($, anim) { + 'use strict'; + + var _defaults = { + direction: 'top', + hoverEnabled: true, + toolbarEnabled: false + }; + + $.fn.reverse = [].reverse; + + /** + * @class + * + */ + + var FloatingActionButton = function (_Component14) { + _inherits(FloatingActionButton, _Component14); + + /** + * Construct FloatingActionButton instance + * @constructor + * @param {Element} el + * @param {Object} options + */ + function FloatingActionButton(el, options) { + _classCallCheck(this, FloatingActionButton); + + var _this48 = _possibleConstructorReturn(this, (FloatingActionButton.__proto__ || Object.getPrototypeOf(FloatingActionButton)).call(this, FloatingActionButton, el, options)); + + _this48.el.M_FloatingActionButton = _this48; + + /** + * Options for the fab + * @member FloatingActionButton#options + * @prop {Boolean} [direction] - Direction fab menu opens + * @prop {Boolean} [hoverEnabled=true] - Enable hover vs click + * @prop {Boolean} [toolbarEnabled=false] - Enable toolbar transition + */ + _this48.options = $.extend({}, FloatingActionButton.defaults, options); + + _this48.isOpen = false; + _this48.$anchor = _this48.$el.children('a').first(); + _this48.$menu = _this48.$el.children('ul').first(); + _this48.$floatingBtns = _this48.$el.find('ul .btn-floating'); + _this48.$floatingBtnsReverse = _this48.$el.find('ul .btn-floating').reverse(); + _this48.offsetY = 0; + _this48.offsetX = 0; + + _this48.$el.addClass("direction-" + _this48.options.direction); + if (_this48.options.direction === 'top') { + _this48.offsetY = 40; + } else if (_this48.options.direction === 'right') { + _this48.offsetX = -40; + } else if (_this48.options.direction === 'bottom') { + _this48.offsetY = -40; + } else { + _this48.offsetX = 40; + } + _this48._setupEventHandlers(); + return _this48; + } + + _createClass(FloatingActionButton, [{ + key: "destroy", + + + /** + * Teardown component + */ + value: function destroy() { + this._removeEventHandlers(); + this.el.M_FloatingActionButton = undefined; + } + + /** + * Setup Event Handlers + */ + + }, { + key: "_setupEventHandlers", + value: function _setupEventHandlers() { + this._handleFABClickBound = this._handleFABClick.bind(this); + this._handleOpenBound = this.open.bind(this); + this._handleCloseBound = this.close.bind(this); + + if (this.options.hoverEnabled && !this.options.toolbarEnabled) { + this.el.addEventListener('mouseenter', this._handleOpenBound); + this.el.addEventListener('mouseleave', this._handleCloseBound); + } else { + this.el.addEventListener('click', this._handleFABClickBound); + } + } + + /** + * Remove Event Handlers + */ + + }, { + key: "_removeEventHandlers", + value: function _removeEventHandlers() { + if (this.options.hoverEnabled && !this.options.toolbarEnabled) { + this.el.removeEventListener('mouseenter', this._handleOpenBound); + this.el.removeEventListener('mouseleave', this._handleCloseBound); + } else { + this.el.removeEventListener('click', this._handleFABClickBound); + } + } + + /** + * Handle FAB Click + */ + + }, { + key: "_handleFABClick", + value: function _handleFABClick() { + if (this.isOpen) { + this.close(); + } else { + this.open(); + } + } + + /** + * Handle Document Click + * @param {Event} e + */ + + }, { + key: "_handleDocumentClick", + value: function _handleDocumentClick(e) { + if (!$(e.target).closest(this.$menu).length) { + this.close(); + } + } + + /** + * Open FAB + */ + + }, { + key: "open", + value: function open() { + if (this.isOpen) { + return; + } + + if (this.options.toolbarEnabled) { + this._animateInToolbar(); + } else { + this._animateInFAB(); + } + this.isOpen = true; + } + + /** + * Close FAB + */ + + }, { + key: "close", + value: function close() { + if (!this.isOpen) { + return; + } + + if (this.options.toolbarEnabled) { + window.removeEventListener('scroll', this._handleCloseBound, true); + document.body.removeEventListener('click', this._handleDocumentClickBound, true); + this._animateOutToolbar(); + } else { + this._animateOutFAB(); + } + this.isOpen = false; + } + + /** + * Classic FAB Menu open + */ + + }, { + key: "_animateInFAB", + value: function _animateInFAB() { + var _this49 = this; + + this.$el.addClass('active'); + + var time = 0; + this.$floatingBtnsReverse.each(function (el) { + anim({ + targets: el, + opacity: 1, + scale: [0.4, 1], + translateY: [_this49.offsetY, 0], + translateX: [_this49.offsetX, 0], + duration: 275, + delay: time, + easing: 'easeInOutQuad' + }); + time += 40; + }); + } + + /** + * Classic FAB Menu close + */ + + }, { + key: "_animateOutFAB", + value: function _animateOutFAB() { + var _this50 = this; + + this.$floatingBtnsReverse.each(function (el) { + anim.remove(el); + anim({ + targets: el, + opacity: 0, + scale: 0.4, + translateY: _this50.offsetY, + translateX: _this50.offsetX, + duration: 175, + easing: 'easeOutQuad', + complete: function () { + _this50.$el.removeClass('active'); + } + }); + }); + } + + /** + * Toolbar transition Menu open + */ + + }, { + key: "_animateInToolbar", + value: function _animateInToolbar() { + var _this51 = this; + + var scaleFactor = void 0; + var windowWidth = window.innerWidth; + var windowHeight = window.innerHeight; + var btnRect = this.el.getBoundingClientRect(); + var backdrop = $('<div class="fab-backdrop"></div>'); + var fabColor = this.$anchor.css('background-color'); + this.$anchor.append(backdrop); + + this.offsetX = btnRect.left - windowWidth / 2 + btnRect.width / 2; + this.offsetY = windowHeight - btnRect.bottom; + scaleFactor = windowWidth / backdrop[0].clientWidth; + this.btnBottom = btnRect.bottom; + this.btnLeft = btnRect.left; + this.btnWidth = btnRect.width; + + // Set initial state + this.$el.addClass('active'); + this.$el.css({ + 'text-align': 'center', + width: '100%', + bottom: 0, + left: 0, + transform: 'translateX(' + this.offsetX + 'px)', + transition: 'none' + }); + this.$anchor.css({ + transform: 'translateY(' + -this.offsetY + 'px)', + transition: 'none' + }); + backdrop.css({ + 'background-color': fabColor + }); + + setTimeout(function () { + _this51.$el.css({ + transform: '', + transition: 'transform .2s cubic-bezier(0.550, 0.085, 0.680, 0.530), background-color 0s linear .2s' + }); + _this51.$anchor.css({ + overflow: 'visible', + transform: '', + transition: 'transform .2s' + }); + + setTimeout(function () { + _this51.$el.css({ + overflow: 'hidden', + 'background-color': fabColor + }); + backdrop.css({ + transform: 'scale(' + scaleFactor + ')', + transition: 'transform .2s cubic-bezier(0.550, 0.055, 0.675, 0.190)' + }); + _this51.$menu.children('li').children('a').css({ + opacity: 1 + }); + + // Scroll to close. + _this51._handleDocumentClickBound = _this51._handleDocumentClick.bind(_this51); + window.addEventListener('scroll', _this51._handleCloseBound, true); + document.body.addEventListener('click', _this51._handleDocumentClickBound, true); + }, 100); + }, 0); + } + + /** + * Toolbar transition Menu close + */ + + }, { + key: "_animateOutToolbar", + value: function _animateOutToolbar() { + var _this52 = this; + + var windowWidth = window.innerWidth; + var windowHeight = window.innerHeight; + var backdrop = this.$el.find('.fab-backdrop'); + var fabColor = this.$anchor.css('background-color'); + + this.offsetX = this.btnLeft - windowWidth / 2 + this.btnWidth / 2; + this.offsetY = windowHeight - this.btnBottom; + + // Hide backdrop + this.$el.removeClass('active'); + this.$el.css({ + 'background-color': 'transparent', + transition: 'none' + }); + this.$anchor.css({ + transition: 'none' + }); + backdrop.css({ + transform: 'scale(0)', + 'background-color': fabColor + }); + this.$menu.children('li').children('a').css({ + opacity: '' + }); + + setTimeout(function () { + backdrop.remove(); + + // Set initial state. + _this52.$el.css({ + 'text-align': '', + width: '', + bottom: '', + left: '', + overflow: '', + 'background-color': '', + transform: 'translate3d(' + -_this52.offsetX + 'px,0,0)' + }); + _this52.$anchor.css({ + overflow: '', + transform: 'translate3d(0,' + _this52.offsetY + 'px,0)' + }); + + setTimeout(function () { + _this52.$el.css({ + transform: 'translate3d(0,0,0)', + transition: 'transform .2s' + }); + _this52.$anchor.css({ + transform: 'translate3d(0,0,0)', + transition: 'transform .2s cubic-bezier(0.550, 0.055, 0.675, 0.190)' + }); + }, 20); + }, 200); + } + }], [{ + key: "init", + value: function init(els, options) { + return _get(FloatingActionButton.__proto__ || Object.getPrototypeOf(FloatingActionButton), "init", this).call(this, this, els, options); + } + + /** + * Get Instance + */ + + }, { + key: "getInstance", + value: function getInstance(el) { + var domElem = !!el.jquery ? el[0] : el; + return domElem.M_FloatingActionButton; + } + }, { + key: "defaults", + get: function () { + return _defaults; + } + }]); + + return FloatingActionButton; + }(Component); + + M.FloatingActionButton = FloatingActionButton; + + if (M.jQueryLoaded) { + M.initializeJqueryWrapper(FloatingActionButton, 'floatingActionButton', 'M_FloatingActionButton'); + } +})(cash, M.anime); +;(function ($) { + 'use strict'; + + var _defaults = { + // Close when date is selected + autoClose: false, + + // the default output format for the input field value + format: 'mmm dd, yyyy', + + // Used to create date object from current input string + parse: null, + + // The initial date to view when first opened + defaultDate: null, + + // Make the `defaultDate` the initial selected value + setDefaultDate: false, + + disableWeekends: false, + + disableDayFn: null, + + // First day of week (0: Sunday, 1: Monday etc) + firstDay: 0, + + // The earliest date that can be selected + minDate: null, + // Thelatest date that can be selected + maxDate: null, + + // Number of years either side, or array of upper/lower range + yearRange: 10, + + // used internally (don't config outside) + minYear: 0, + maxYear: 9999, + minMonth: undefined, + maxMonth: undefined, + + startRange: null, + endRange: null, + + isRTL: false, + + // Render the month after year in the calendar title + showMonthAfterYear: false, + + // Render days of the calendar grid that fall in the next or previous month + showDaysInNextAndPreviousMonths: false, + + // Specify a DOM element to render the calendar in + container: null, + + // Show clear button + showClearBtn: false, + + // internationalization + i18n: { + cancel: 'Cancel', + clear: 'Clear', + done: 'Ok', + previousMonth: '‹', + nextMonth: '›', + months: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], + monthsShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], + weekdays: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], + weekdaysShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], + weekdaysAbbrev: ['S', 'M', 'T', 'W', 'T', 'F', 'S'] + }, + + // events array + events: [], + + // callback function + onSelect: null, + onOpen: null, + onClose: null, + onDraw: null + }; + + /** + * @class + * + */ + + var Datepicker = function (_Component15) { + _inherits(Datepicker, _Component15); + + /** + * Construct Datepicker instance and set up overlay + * @constructor + * @param {Element} el + * @param {Object} options + */ + function Datepicker(el, options) { + _classCallCheck(this, Datepicker); + + var _this53 = _possibleConstructorReturn(this, (Datepicker.__proto__ || Object.getPrototypeOf(Datepicker)).call(this, Datepicker, el, options)); + + _this53.el.M_Datepicker = _this53; + + _this53.options = $.extend({}, Datepicker.defaults, options); + + // make sure i18n defaults are not lost when only few i18n option properties are passed + if (!!options && options.hasOwnProperty('i18n') && typeof options.i18n === 'object') { + _this53.options.i18n = $.extend({}, Datepicker.defaults.i18n, options.i18n); + } + + // Remove time component from minDate and maxDate options + if (_this53.options.minDate) _this53.options.minDate.setHours(0, 0, 0, 0); + if (_this53.options.maxDate) _this53.options.maxDate.setHours(0, 0, 0, 0); + + _this53.id = M.guid(); + + _this53._setupVariables(); + _this53._insertHTMLIntoDOM(); + _this53._setupModal(); + + _this53._setupEventHandlers(); + + if (!_this53.options.defaultDate) { + _this53.options.defaultDate = new Date(Date.parse(_this53.el.value)); + } + + var defDate = _this53.options.defaultDate; + if (Datepicker._isDate(defDate)) { + if (_this53.options.setDefaultDate) { + _this53.setDate(defDate, true); + _this53.setInputValue(); + } else { + _this53.gotoDate(defDate); + } + } else { + _this53.gotoDate(new Date()); + } + + /** + * Describes open/close state of datepicker + * @type {Boolean} + */ + _this53.isOpen = false; + return _this53; + } + + _createClass(Datepicker, [{ + key: "destroy", + + + /** + * Teardown component + */ + value: function destroy() { + this._removeEventHandlers(); + this.modal.destroy(); + $(this.modalEl).remove(); + this.destroySelects(); + this.el.M_Datepicker = undefined; + } + }, { + key: "destroySelects", + value: function destroySelects() { + var oldYearSelect = this.calendarEl.querySelector('.orig-select-year'); + if (oldYearSelect) { + M.FormSelect.getInstance(oldYearSelect).destroy(); + } + var oldMonthSelect = this.calendarEl.querySelector('.orig-select-month'); + if (oldMonthSelect) { + M.FormSelect.getInstance(oldMonthSelect).destroy(); + } + } + }, { + key: "_insertHTMLIntoDOM", + value: function _insertHTMLIntoDOM() { + if (this.options.showClearBtn) { + $(this.clearBtn).css({ visibility: '' }); + this.clearBtn.innerHTML = this.options.i18n.clear; + } + + this.doneBtn.innerHTML = this.options.i18n.done; + this.cancelBtn.innerHTML = this.options.i18n.cancel; + + if (this.options.container) { + this.$modalEl.appendTo(this.options.container); + } else { + this.$modalEl.insertBefore(this.el); + } + } + }, { + key: "_setupModal", + value: function _setupModal() { + var _this54 = this; + + this.modalEl.id = 'modal-' + this.id; + this.modal = M.Modal.init(this.modalEl, { + onCloseEnd: function () { + _this54.isOpen = false; + } + }); + } + }, { + key: "toString", + value: function toString(format) { + var _this55 = this; + + format = format || this.options.format; + if (!Datepicker._isDate(this.date)) { + return ''; + } + + var formatArray = format.split(/(d{1,4}|m{1,4}|y{4}|yy|!.)/g); + var formattedDate = formatArray.map(function (label) { + if (_this55.formats[label]) { + return _this55.formats[label](); + } + + return label; + }).join(''); + return formattedDate; + } + }, { + key: "setDate", + value: function setDate(date, preventOnSelect) { + if (!date) { + this.date = null; + this._renderDateDisplay(); + return this.draw(); + } + if (typeof date === 'string') { + date = new Date(Date.parse(date)); + } + if (!Datepicker._isDate(date)) { + return; + } + + var min = this.options.minDate, + max = this.options.maxDate; + + if (Datepicker._isDate(min) && date < min) { + date = min; + } else if (Datepicker._isDate(max) && date > max) { + date = max; + } + + this.date = new Date(date.getTime()); + + this._renderDateDisplay(); + + Datepicker._setToStartOfDay(this.date); + this.gotoDate(this.date); + + if (!preventOnSelect && typeof this.options.onSelect === 'function') { + this.options.onSelect.call(this, this.date); + } + } + }, { + key: "setInputValue", + value: function setInputValue() { + this.el.value = this.toString(); + this.$el.trigger('change', { firedBy: this }); + } + }, { + key: "_renderDateDisplay", + value: function _renderDateDisplay() { + var displayDate = Datepicker._isDate(this.date) ? this.date : new Date(); + var i18n = this.options.i18n; + var day = i18n.weekdaysShort[displayDate.getDay()]; + var month = i18n.monthsShort[displayDate.getMonth()]; + var date = displayDate.getDate(); + this.yearTextEl.innerHTML = displayDate.getFullYear(); + this.dateTextEl.innerHTML = day + ", " + month + " " + date; + } + + /** + * change view to a specific date + */ + + }, { + key: "gotoDate", + value: function gotoDate(date) { + var newCalendar = true; + + if (!Datepicker._isDate(date)) { + return; + } + + if (this.calendars) { + var firstVisibleDate = new Date(this.calendars[0].year, this.calendars[0].month, 1), + lastVisibleDate = new Date(this.calendars[this.calendars.length - 1].year, this.calendars[this.calendars.length - 1].month, 1), + visibleDate = date.getTime(); + // get the end of the month + lastVisibleDate.setMonth(lastVisibleDate.getMonth() + 1); + lastVisibleDate.setDate(lastVisibleDate.getDate() - 1); + newCalendar = visibleDate < firstVisibleDate.getTime() || lastVisibleDate.getTime() < visibleDate; + } + + if (newCalendar) { + this.calendars = [{ + month: date.getMonth(), + year: date.getFullYear() + }]; + } + + this.adjustCalendars(); + } + }, { + key: "adjustCalendars", + value: function adjustCalendars() { + this.calendars[0] = this.adjustCalendar(this.calendars[0]); + this.draw(); + } + }, { + key: "adjustCalendar", + value: function adjustCalendar(calendar) { + if (calendar.month < 0) { + calendar.year -= Math.ceil(Math.abs(calendar.month) / 12); + calendar.month += 12; + } + if (calendar.month > 11) { + calendar.year += Math.floor(Math.abs(calendar.month) / 12); + calendar.month -= 12; + } + return calendar; + } + }, { + key: "nextMonth", + value: function nextMonth() { + this.calendars[0].month++; + this.adjustCalendars(); + } + }, { + key: "prevMonth", + value: function prevMonth() { + this.calendars[0].month--; + this.adjustCalendars(); + } + }, { + key: "render", + value: function render(year, month, randId) { + var opts = this.options, + now = new Date(), + days = Datepicker._getDaysInMonth(year, month), + before = new Date(year, month, 1).getDay(), + data = [], + row = []; + Datepicker._setToStartOfDay(now); + if (opts.firstDay > 0) { + before -= opts.firstDay; + if (before < 0) { + before += 7; + } + } + var previousMonth = month === 0 ? 11 : month - 1, + nextMonth = month === 11 ? 0 : month + 1, + yearOfPreviousMonth = month === 0 ? year - 1 : year, + yearOfNextMonth = month === 11 ? year + 1 : year, + daysInPreviousMonth = Datepicker._getDaysInMonth(yearOfPreviousMonth, previousMonth); + var cells = days + before, + after = cells; + while (after > 7) { + after -= 7; + } + cells += 7 - after; + var isWeekSelected = false; + for (var i = 0, r = 0; i < cells; i++) { + var day = new Date(year, month, 1 + (i - before)), + isSelected = Datepicker._isDate(this.date) ? Datepicker._compareDates(day, this.date) : false, + isToday = Datepicker._compareDates(day, now), + hasEvent = opts.events.indexOf(day.toDateString()) !== -1 ? true : false, + isEmpty = i < before || i >= days + before, + dayNumber = 1 + (i - before), + monthNumber = month, + yearNumber = year, + isStartRange = opts.startRange && Datepicker._compareDates(opts.startRange, day), + isEndRange = opts.endRange && Datepicker._compareDates(opts.endRange, day), + isInRange = opts.startRange && opts.endRange && opts.startRange < day && day < opts.endRange, + isDisabled = opts.minDate && day < opts.minDate || opts.maxDate && day > opts.maxDate || opts.disableWeekends && Datepicker._isWeekend(day) || opts.disableDayFn && opts.disableDayFn(day); + + if (isEmpty) { + if (i < before) { + dayNumber = daysInPreviousMonth + dayNumber; + monthNumber = previousMonth; + yearNumber = yearOfPreviousMonth; + } else { + dayNumber = dayNumber - days; + monthNumber = nextMonth; + yearNumber = yearOfNextMonth; + } + } + + var dayConfig = { + day: dayNumber, + month: monthNumber, + year: yearNumber, + hasEvent: hasEvent, + isSelected: isSelected, + isToday: isToday, + isDisabled: isDisabled, + isEmpty: isEmpty, + isStartRange: isStartRange, + isEndRange: isEndRange, + isInRange: isInRange, + showDaysInNextAndPreviousMonths: opts.showDaysInNextAndPreviousMonths + }; + + row.push(this.renderDay(dayConfig)); + + if (++r === 7) { + data.push(this.renderRow(row, opts.isRTL, isWeekSelected)); + row = []; + r = 0; + isWeekSelected = false; + } + } + return this.renderTable(opts, data, randId); + } + }, { + key: "renderDay", + value: function renderDay(opts) { + var arr = []; + var ariaSelected = 'false'; + if (opts.isEmpty) { + if (opts.showDaysInNextAndPreviousMonths) { + arr.push('is-outside-current-month'); + arr.push('is-selection-disabled'); + } else { + return '<td class="is-empty"></td>'; + } + } + if (opts.isDisabled) { + arr.push('is-disabled'); + } + + if (opts.isToday) { + arr.push('is-today'); + } + if (opts.isSelected) { + arr.push('is-selected'); + ariaSelected = 'true'; + } + if (opts.hasEvent) { + arr.push('has-event'); + } + if (opts.isInRange) { + arr.push('is-inrange'); + } + if (opts.isStartRange) { + arr.push('is-startrange'); + } + if (opts.isEndRange) { + arr.push('is-endrange'); + } + return "<td data-day=\"" + opts.day + "\" class=\"" + arr.join(' ') + "\" aria-selected=\"" + ariaSelected + "\">" + ("<button class=\"datepicker-day-button\" type=\"button\" data-year=\"" + opts.year + "\" data-month=\"" + opts.month + "\" data-day=\"" + opts.day + "\">" + opts.day + "</button>") + '</td>'; + } + }, { + key: "renderRow", + value: function renderRow(days, isRTL, isRowSelected) { + return '<tr class="datepicker-row' + (isRowSelected ? ' is-selected' : '') + '">' + (isRTL ? days.reverse() : days).join('') + '</tr>'; + } + }, { + key: "renderTable", + value: function renderTable(opts, data, randId) { + return '<div class="datepicker-table-wrapper"><table cellpadding="0" cellspacing="0" class="datepicker-table" role="grid" aria-labelledby="' + randId + '">' + this.renderHead(opts) + this.renderBody(data) + '</table></div>'; + } + }, { + key: "renderHead", + value: function renderHead(opts) { + var i = void 0, + arr = []; + for (i = 0; i < 7; i++) { + arr.push("<th scope=\"col\"><abbr title=\"" + this.renderDayName(opts, i) + "\">" + this.renderDayName(opts, i, true) + "</abbr></th>"); + } + return '<thead><tr>' + (opts.isRTL ? arr.reverse() : arr).join('') + '</tr></thead>'; + } + }, { + key: "renderBody", + value: function renderBody(rows) { + return '<tbody>' + rows.join('') + '</tbody>'; + } + }, { + key: "renderTitle", + value: function renderTitle(instance, c, year, month, refYear, randId) { + var i = void 0, + j = void 0, + arr = void 0, + opts = this.options, + isMinYear = year === opts.minYear, + isMaxYear = year === opts.maxYear, + html = '<div id="' + randId + '" class="datepicker-controls" role="heading" aria-live="assertive">', + monthHtml = void 0, + yearHtml = void 0, + prev = true, + next = true; + + for (arr = [], i = 0; i < 12; i++) { + arr.push('<option value="' + (year === refYear ? i - c : 12 + i - c) + '"' + (i === month ? ' selected="selected"' : '') + (isMinYear && i < opts.minMonth || isMaxYear && i > opts.maxMonth ? 'disabled="disabled"' : '') + '>' + opts.i18n.months[i] + '</option>'); + } + + monthHtml = '<select class="datepicker-select orig-select-month" tabindex="-1">' + arr.join('') + '</select>'; + + if ($.isArray(opts.yearRange)) { + i = opts.yearRange[0]; + j = opts.yearRange[1] + 1; + } else { + i = year - opts.yearRange; + j = 1 + year + opts.yearRange; + } + + for (arr = []; i < j && i <= opts.maxYear; i++) { + if (i >= opts.minYear) { + arr.push("<option value=\"" + i + "\" " + (i === year ? 'selected="selected"' : '') + ">" + i + "</option>"); + } + } + + yearHtml = "<select class=\"datepicker-select orig-select-year\" tabindex=\"-1\">" + arr.join('') + "</select>"; + + var leftArrow = '<svg fill="#000000" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"><path d="M15.41 16.09l-4.58-4.59 4.58-4.59L14 5.5l-6 6 6 6z"/><path d="M0-.5h24v24H0z" fill="none"/></svg>'; + html += "<button class=\"month-prev" + (prev ? '' : ' is-disabled') + "\" type=\"button\">" + leftArrow + "</button>"; + + html += '<div class="selects-container">'; + if (opts.showMonthAfterYear) { + html += yearHtml + monthHtml; + } else { + html += monthHtml + yearHtml; + } + html += '</div>'; + + if (isMinYear && (month === 0 || opts.minMonth >= month)) { + prev = false; + } + + if (isMaxYear && (month === 11 || opts.maxMonth <= month)) { + next = false; + } + + var rightArrow = '<svg fill="#000000" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"><path d="M8.59 16.34l4.58-4.59-4.58-4.59L10 5.75l6 6-6 6z"/><path d="M0-.25h24v24H0z" fill="none"/></svg>'; + html += "<button class=\"month-next" + (next ? '' : ' is-disabled') + "\" type=\"button\">" + rightArrow + "</button>"; + + return html += '</div>'; + } + + /** + * refresh the HTML + */ + + }, { + key: "draw", + value: function draw(force) { + if (!this.isOpen && !force) { + return; + } + var opts = this.options, + minYear = opts.minYear, + maxYear = opts.maxYear, + minMonth = opts.minMonth, + maxMonth = opts.maxMonth, + html = '', + randId = void 0; + + if (this._y <= minYear) { + this._y = minYear; + if (!isNaN(minMonth) && this._m < minMonth) { + this._m = minMonth; + } + } + if (this._y >= maxYear) { + this._y = maxYear; + if (!isNaN(maxMonth) && this._m > maxMonth) { + this._m = maxMonth; + } + } + + randId = 'datepicker-title-' + Math.random().toString(36).replace(/[^a-z]+/g, '').substr(0, 2); + + for (var c = 0; c < 1; c++) { + this._renderDateDisplay(); + html += this.renderTitle(this, c, this.calendars[c].year, this.calendars[c].month, this.calendars[0].year, randId) + this.render(this.calendars[c].year, this.calendars[c].month, randId); + } + + this.destroySelects(); + + this.calendarEl.innerHTML = html; + + // Init Materialize Select + var yearSelect = this.calendarEl.querySelector('.orig-select-year'); + var monthSelect = this.calendarEl.querySelector('.orig-select-month'); + M.FormSelect.init(yearSelect, { + classes: 'select-year', + dropdownOptions: { container: document.body, constrainWidth: false } + }); + M.FormSelect.init(monthSelect, { + classes: 'select-month', + dropdownOptions: { container: document.body, constrainWidth: false } + }); + + // Add change handlers for select + yearSelect.addEventListener('change', this._handleYearChange.bind(this)); + monthSelect.addEventListener('change', this._handleMonthChange.bind(this)); + + if (typeof this.options.onDraw === 'function') { + this.options.onDraw(this); + } + } + + /** + * Setup Event Handlers + */ + + }, { + key: "_setupEventHandlers", + value: function _setupEventHandlers() { + this._handleInputKeydownBound = this._handleInputKeydown.bind(this); + this._handleInputClickBound = this._handleInputClick.bind(this); + this._handleInputChangeBound = this._handleInputChange.bind(this); + this._handleCalendarClickBound = this._handleCalendarClick.bind(this); + this._finishSelectionBound = this._finishSelection.bind(this); + this._handleMonthChange = this._handleMonthChange.bind(this); + this._closeBound = this.close.bind(this); + + this.el.addEventListener('click', this._handleInputClickBound); + this.el.addEventListener('keydown', this._handleInputKeydownBound); + this.el.addEventListener('change', this._handleInputChangeBound); + this.calendarEl.addEventListener('click', this._handleCalendarClickBound); + this.doneBtn.addEventListener('click', this._finishSelectionBound); + this.cancelBtn.addEventListener('click', this._closeBound); + + if (this.options.showClearBtn) { + this._handleClearClickBound = this._handleClearClick.bind(this); + this.clearBtn.addEventListener('click', this._handleClearClickBound); + } + } + }, { + key: "_setupVariables", + value: function _setupVariables() { + var _this56 = this; + + this.$modalEl = $(Datepicker._template); + this.modalEl = this.$modalEl[0]; + + this.calendarEl = this.modalEl.querySelector('.datepicker-calendar'); + + this.yearTextEl = this.modalEl.querySelector('.year-text'); + this.dateTextEl = this.modalEl.querySelector('.date-text'); + if (this.options.showClearBtn) { + this.clearBtn = this.modalEl.querySelector('.datepicker-clear'); + } + this.doneBtn = this.modalEl.querySelector('.datepicker-done'); + this.cancelBtn = this.modalEl.querySelector('.datepicker-cancel'); + + this.formats = { + d: function () { + return _this56.date.getDate(); + }, + dd: function () { + var d = _this56.date.getDate(); + return (d < 10 ? '0' : '') + d; + }, + ddd: function () { + return _this56.options.i18n.weekdaysShort[_this56.date.getDay()]; + }, + dddd: function () { + return _this56.options.i18n.weekdays[_this56.date.getDay()]; + }, + m: function () { + return _this56.date.getMonth() + 1; + }, + mm: function () { + var m = _this56.date.getMonth() + 1; + return (m < 10 ? '0' : '') + m; + }, + mmm: function () { + return _this56.options.i18n.monthsShort[_this56.date.getMonth()]; + }, + mmmm: function () { + return _this56.options.i18n.months[_this56.date.getMonth()]; + }, + yy: function () { + return ('' + _this56.date.getFullYear()).slice(2); + }, + yyyy: function () { + return _this56.date.getFullYear(); + } + }; + } + + /** + * Remove Event Handlers + */ + + }, { + key: "_removeEventHandlers", + value: function _removeEventHandlers() { + this.el.removeEventListener('click', this._handleInputClickBound); + this.el.removeEventListener('keydown', this._handleInputKeydownBound); + this.el.removeEventListener('change', this._handleInputChangeBound); + this.calendarEl.removeEventListener('click', this._handleCalendarClickBound); + } + }, { + key: "_handleInputClick", + value: function _handleInputClick() { + this.open(); + } + }, { + key: "_handleInputKeydown", + value: function _handleInputKeydown(e) { + if (e.which === M.keys.ENTER) { + e.preventDefault(); + this.open(); + } + } + }, { + key: "_handleCalendarClick", + value: function _handleCalendarClick(e) { + if (!this.isOpen) { + return; + } + + var $target = $(e.target); + if (!$target.hasClass('is-disabled')) { + if ($target.hasClass('datepicker-day-button') && !$target.hasClass('is-empty') && !$target.parent().hasClass('is-disabled')) { + this.setDate(new Date(e.target.getAttribute('data-year'), e.target.getAttribute('data-month'), e.target.getAttribute('data-day'))); + if (this.options.autoClose) { + this._finishSelection(); + } + } else if ($target.closest('.month-prev').length) { + this.prevMonth(); + } else if ($target.closest('.month-next').length) { + this.nextMonth(); + } + } + } + }, { + key: "_handleClearClick", + value: function _handleClearClick() { + this.date = null; + this.setInputValue(); + this.close(); + } + }, { + key: "_handleMonthChange", + value: function _handleMonthChange(e) { + this.gotoMonth(e.target.value); + } + }, { + key: "_handleYearChange", + value: function _handleYearChange(e) { + this.gotoYear(e.target.value); + } + + /** + * change view to a specific month (zero-index, e.g. 0: January) + */ + + }, { + key: "gotoMonth", + value: function gotoMonth(month) { + if (!isNaN(month)) { + this.calendars[0].month = parseInt(month, 10); + this.adjustCalendars(); + } + } + + /** + * change view to a specific full year (e.g. "2012") + */ + + }, { + key: "gotoYear", + value: function gotoYear(year) { + if (!isNaN(year)) { + this.calendars[0].year = parseInt(year, 10); + this.adjustCalendars(); + } + } + }, { + key: "_handleInputChange", + value: function _handleInputChange(e) { + var date = void 0; + + // Prevent change event from being fired when triggered by the plugin + if (e.firedBy === this) { + return; + } + if (this.options.parse) { + date = this.options.parse(this.el.value, this.options.format); + } else { + date = new Date(Date.parse(this.el.value)); + } + + if (Datepicker._isDate(date)) { + this.setDate(date); + } + } + }, { + key: "renderDayName", + value: function renderDayName(opts, day, abbr) { + day += opts.firstDay; + while (day >= 7) { + day -= 7; + } + return abbr ? opts.i18n.weekdaysAbbrev[day] : opts.i18n.weekdays[day]; + } + + /** + * Set input value to the selected date and close Datepicker + */ + + }, { + key: "_finishSelection", + value: function _finishSelection() { + this.setInputValue(); + this.close(); + } + + /** + * Open Datepicker + */ + + }, { + key: "open", + value: function open() { + if (this.isOpen) { + return; + } + + this.isOpen = true; + if (typeof this.options.onOpen === 'function') { + this.options.onOpen.call(this); + } + this.draw(); + this.modal.open(); + return this; + } + + /** + * Close Datepicker + */ + + }, { + key: "close", + value: function close() { + if (!this.isOpen) { + return; + } + + this.isOpen = false; + if (typeof this.options.onClose === 'function') { + this.options.onClose.call(this); + } + this.modal.close(); + return this; + } + }], [{ + key: "init", + value: function init(els, options) { + return _get(Datepicker.__proto__ || Object.getPrototypeOf(Datepicker), "init", this).call(this, this, els, options); + } + }, { + key: "_isDate", + value: function _isDate(obj) { + return (/Date/.test(Object.prototype.toString.call(obj)) && !isNaN(obj.getTime()) + ); + } + }, { + key: "_isWeekend", + value: function _isWeekend(date) { + var day = date.getDay(); + return day === 0 || day === 6; + } + }, { + key: "_setToStartOfDay", + value: function _setToStartOfDay(date) { + if (Datepicker._isDate(date)) date.setHours(0, 0, 0, 0); + } + }, { + key: "_getDaysInMonth", + value: function _getDaysInMonth(year, month) { + return [31, Datepicker._isLeapYear(year) ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month]; + } + }, { + key: "_isLeapYear", + value: function _isLeapYear(year) { + // solution by Matti Virkkunen: http://stackoverflow.com/a/4881951 + return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0; + } + }, { + key: "_compareDates", + value: function _compareDates(a, b) { + // weak date comparison (use setToStartOfDay(date) to ensure correct result) + return a.getTime() === b.getTime(); + } + }, { + key: "_setToStartOfDay", + value: function _setToStartOfDay(date) { + if (Datepicker._isDate(date)) date.setHours(0, 0, 0, 0); + } + + /** + * Get Instance + */ + + }, { + key: "getInstance", + value: function getInstance(el) { + var domElem = !!el.jquery ? el[0] : el; + return domElem.M_Datepicker; + } + }, { + key: "defaults", + get: function () { + return _defaults; + } + }]); + + return Datepicker; + }(Component); + + Datepicker._template = ['<div class= "modal datepicker-modal">', '<div class="modal-content datepicker-container">', '<div class="datepicker-date-display">', '<span class="year-text"></span>', '<span class="date-text"></span>', '</div>', '<div class="datepicker-calendar-container">', '<div class="datepicker-calendar"></div>', '<div class="datepicker-footer">', '<button class="btn-flat datepicker-clear waves-effect" style="visibility: hidden;" type="button"></button>', '<div class="confirmation-btns">', '<button class="btn-flat datepicker-cancel waves-effect" type="button"></button>', '<button class="btn-flat datepicker-done waves-effect" type="button"></button>', '</div>', '</div>', '</div>', '</div>', '</div>'].join(''); + + M.Datepicker = Datepicker; + + if (M.jQueryLoaded) { + M.initializeJqueryWrapper(Datepicker, 'datepicker', 'M_Datepicker'); + } +})(cash); +;(function ($) { + 'use strict'; + + var _defaults = { + dialRadius: 135, + outerRadius: 105, + innerRadius: 70, + tickRadius: 20, + duration: 350, + container: null, + defaultTime: 'now', // default time, 'now' or '13:14' e.g. + fromNow: 0, // Millisecond offset from the defaultTime + showClearBtn: false, + + // internationalization + i18n: { + cancel: 'Cancel', + clear: 'Clear', + done: 'Ok' + }, + + autoClose: false, // auto close when minute is selected + twelveHour: true, // change to 12 hour AM/PM clock from 24 hour + vibrate: true, // vibrate the device when dragging clock hand + + // Callbacks + onOpenStart: null, + onOpenEnd: null, + onCloseStart: null, + onCloseEnd: null, + onSelect: null + }; + + /** + * @class + * + */ + + var Timepicker = function (_Component16) { + _inherits(Timepicker, _Component16); + + function Timepicker(el, options) { + _classCallCheck(this, Timepicker); + + var _this57 = _possibleConstructorReturn(this, (Timepicker.__proto__ || Object.getPrototypeOf(Timepicker)).call(this, Timepicker, el, options)); + + _this57.el.M_Timepicker = _this57; + + _this57.options = $.extend({}, Timepicker.defaults, options); + + _this57.id = M.guid(); + _this57._insertHTMLIntoDOM(); + _this57._setupModal(); + _this57._setupVariables(); + _this57._setupEventHandlers(); + + _this57._clockSetup(); + _this57._pickerSetup(); + return _this57; + } + + _createClass(Timepicker, [{ + key: "destroy", + + + /** + * Teardown component + */ + value: function destroy() { + this._removeEventHandlers(); + this.modal.destroy(); + $(this.modalEl).remove(); + this.el.M_Timepicker = undefined; + } + + /** + * Setup Event Handlers + */ + + }, { + key: "_setupEventHandlers", + value: function _setupEventHandlers() { + this._handleInputKeydownBound = this._handleInputKeydown.bind(this); + this._handleInputClickBound = this._handleInputClick.bind(this); + this._handleClockClickStartBound = this._handleClockClickStart.bind(this); + this._handleDocumentClickMoveBound = this._handleDocumentClickMove.bind(this); + this._handleDocumentClickEndBound = this._handleDocumentClickEnd.bind(this); + + this.el.addEventListener('click', this._handleInputClickBound); + this.el.addEventListener('keydown', this._handleInputKeydownBound); + this.plate.addEventListener('mousedown', this._handleClockClickStartBound); + this.plate.addEventListener('touchstart', this._handleClockClickStartBound); + + $(this.spanHours).on('click', this.showView.bind(this, 'hours')); + $(this.spanMinutes).on('click', this.showView.bind(this, 'minutes')); + } + }, { + key: "_removeEventHandlers", + value: function _removeEventHandlers() { + this.el.removeEventListener('click', this._handleInputClickBound); + this.el.removeEventListener('keydown', this._handleInputKeydownBound); + } + }, { + key: "_handleInputClick", + value: function _handleInputClick() { + this.open(); + } + }, { + key: "_handleInputKeydown", + value: function _handleInputKeydown(e) { + if (e.which === M.keys.ENTER) { + e.preventDefault(); + this.open(); + } + } + }, { + key: "_handleClockClickStart", + value: function _handleClockClickStart(e) { + e.preventDefault(); + var clockPlateBR = this.plate.getBoundingClientRect(); + var offset = { x: clockPlateBR.left, y: clockPlateBR.top }; + + this.x0 = offset.x + this.options.dialRadius; + this.y0 = offset.y + this.options.dialRadius; + this.moved = false; + var clickPos = Timepicker._Pos(e); + this.dx = clickPos.x - this.x0; + this.dy = clickPos.y - this.y0; + + // Set clock hands + this.setHand(this.dx, this.dy, false); + + // Mousemove on document + document.addEventListener('mousemove', this._handleDocumentClickMoveBound); + document.addEventListener('touchmove', this._handleDocumentClickMoveBound); + + // Mouseup on document + document.addEventListener('mouseup', this._handleDocumentClickEndBound); + document.addEventListener('touchend', this._handleDocumentClickEndBound); + } + }, { + key: "_handleDocumentClickMove", + value: function _handleDocumentClickMove(e) { + e.preventDefault(); + var clickPos = Timepicker._Pos(e); + var x = clickPos.x - this.x0; + var y = clickPos.y - this.y0; + this.moved = true; + this.setHand(x, y, false, true); + } + }, { + key: "_handleDocumentClickEnd", + value: function _handleDocumentClickEnd(e) { + var _this58 = this; + + e.preventDefault(); + document.removeEventListener('mouseup', this._handleDocumentClickEndBound); + document.removeEventListener('touchend', this._handleDocumentClickEndBound); + var clickPos = Timepicker._Pos(e); + var x = clickPos.x - this.x0; + var y = clickPos.y - this.y0; + if (this.moved && x === this.dx && y === this.dy) { + this.setHand(x, y); + } + + if (this.currentView === 'hours') { + this.showView('minutes', this.options.duration / 2); + } else if (this.options.autoClose) { + $(this.minutesView).addClass('timepicker-dial-out'); + setTimeout(function () { + _this58.done(); + }, this.options.duration / 2); + } + + if (typeof this.options.onSelect === 'function') { + this.options.onSelect.call(this, this.hours, this.minutes); + } + + // Unbind mousemove event + document.removeEventListener('mousemove', this._handleDocumentClickMoveBound); + document.removeEventListener('touchmove', this._handleDocumentClickMoveBound); + } + }, { + key: "_insertHTMLIntoDOM", + value: function _insertHTMLIntoDOM() { + this.$modalEl = $(Timepicker._template); + this.modalEl = this.$modalEl[0]; + this.modalEl.id = 'modal-' + this.id; + + // Append popover to input by default + var containerEl = document.querySelector(this.options.container); + if (this.options.container && !!containerEl) { + this.$modalEl.appendTo(containerEl); + } else { + this.$modalEl.insertBefore(this.el); + } + } + }, { + key: "_setupModal", + value: function _setupModal() { + var _this59 = this; + + this.modal = M.Modal.init(this.modalEl, { + onOpenStart: this.options.onOpenStart, + onOpenEnd: this.options.onOpenEnd, + onCloseStart: this.options.onCloseStart, + onCloseEnd: function () { + if (typeof _this59.options.onCloseEnd === 'function') { + _this59.options.onCloseEnd.call(_this59); + } + _this59.isOpen = false; + } + }); + } + }, { + key: "_setupVariables", + value: function _setupVariables() { + this.currentView = 'hours'; + this.vibrate = navigator.vibrate ? 'vibrate' : navigator.webkitVibrate ? 'webkitVibrate' : null; + + this._canvas = this.modalEl.querySelector('.timepicker-canvas'); + this.plate = this.modalEl.querySelector('.timepicker-plate'); + + this.hoursView = this.modalEl.querySelector('.timepicker-hours'); + this.minutesView = this.modalEl.querySelector('.timepicker-minutes'); + this.spanHours = this.modalEl.querySelector('.timepicker-span-hours'); + this.spanMinutes = this.modalEl.querySelector('.timepicker-span-minutes'); + this.spanAmPm = this.modalEl.querySelector('.timepicker-span-am-pm'); + this.footer = this.modalEl.querySelector('.timepicker-footer'); + this.amOrPm = 'PM'; + } + }, { + key: "_pickerSetup", + value: function _pickerSetup() { + var $clearBtn = $("<button class=\"btn-flat timepicker-clear waves-effect\" style=\"visibility: hidden;\" type=\"button\" tabindex=\"" + (this.options.twelveHour ? '3' : '1') + "\">" + this.options.i18n.clear + "</button>").appendTo(this.footer).on('click', this.clear.bind(this)); + if (this.options.showClearBtn) { + $clearBtn.css({ visibility: '' }); + } + + var confirmationBtnsContainer = $('<div class="confirmation-btns"></div>'); + $('<button class="btn-flat timepicker-close waves-effect" type="button" tabindex="' + (this.options.twelveHour ? '3' : '1') + '">' + this.options.i18n.cancel + '</button>').appendTo(confirmationBtnsContainer).on('click', this.close.bind(this)); + $('<button class="btn-flat timepicker-close waves-effect" type="button" tabindex="' + (this.options.twelveHour ? '3' : '1') + '">' + this.options.i18n.done + '</button>').appendTo(confirmationBtnsContainer).on('click', this.done.bind(this)); + confirmationBtnsContainer.appendTo(this.footer); + } + }, { + key: "_clockSetup", + value: function _clockSetup() { + if (this.options.twelveHour) { + this.$amBtn = $('<div class="am-btn">AM</div>'); + this.$pmBtn = $('<div class="pm-btn">PM</div>'); + this.$amBtn.on('click', this._handleAmPmClick.bind(this)).appendTo(this.spanAmPm); + this.$pmBtn.on('click', this._handleAmPmClick.bind(this)).appendTo(this.spanAmPm); + } + + this._buildHoursView(); + this._buildMinutesView(); + this._buildSVGClock(); + } + }, { + key: "_buildSVGClock", + value: function _buildSVGClock() { + // Draw clock hands and others + var dialRadius = this.options.dialRadius; + var tickRadius = this.options.tickRadius; + var diameter = dialRadius * 2; + + var svg = Timepicker._createSVGEl('svg'); + svg.setAttribute('class', 'timepicker-svg'); + svg.setAttribute('width', diameter); + svg.setAttribute('height', diameter); + var g = Timepicker._createSVGEl('g'); + g.setAttribute('transform', 'translate(' + dialRadius + ',' + dialRadius + ')'); + var bearing = Timepicker._createSVGEl('circle'); + bearing.setAttribute('class', 'timepicker-canvas-bearing'); + bearing.setAttribute('cx', 0); + bearing.setAttribute('cy', 0); + bearing.setAttribute('r', 4); + var hand = Timepicker._createSVGEl('line'); + hand.setAttribute('x1', 0); + hand.setAttribute('y1', 0); + var bg = Timepicker._createSVGEl('circle'); + bg.setAttribute('class', 'timepicker-canvas-bg'); + bg.setAttribute('r', tickRadius); + g.appendChild(hand); + g.appendChild(bg); + g.appendChild(bearing); + svg.appendChild(g); + this._canvas.appendChild(svg); + + this.hand = hand; + this.bg = bg; + this.bearing = bearing; + this.g = g; + } + }, { + key: "_buildHoursView", + value: function _buildHoursView() { + var $tick = $('<div class="timepicker-tick"></div>'); + // Hours view + if (this.options.twelveHour) { + for (var i = 1; i < 13; i += 1) { + var tick = $tick.clone(); + var radian = i / 6 * Math.PI; + var radius = this.options.outerRadius; + tick.css({ + left: this.options.dialRadius + Math.sin(radian) * radius - this.options.tickRadius + 'px', + top: this.options.dialRadius - Math.cos(radian) * radius - this.options.tickRadius + 'px' + }); + tick.html(i === 0 ? '00' : i); + this.hoursView.appendChild(tick[0]); + // tick.on(mousedownEvent, mousedown); + } + } else { + for (var _i2 = 0; _i2 < 24; _i2 += 1) { + var _tick = $tick.clone(); + var _radian = _i2 / 6 * Math.PI; + var inner = _i2 > 0 && _i2 < 13; + var _radius = inner ? this.options.innerRadius : this.options.outerRadius; + _tick.css({ + left: this.options.dialRadius + Math.sin(_radian) * _radius - this.options.tickRadius + 'px', + top: this.options.dialRadius - Math.cos(_radian) * _radius - this.options.tickRadius + 'px' + }); + _tick.html(_i2 === 0 ? '00' : _i2); + this.hoursView.appendChild(_tick[0]); + // tick.on(mousedownEvent, mousedown); + } + } + } + }, { + key: "_buildMinutesView", + value: function _buildMinutesView() { + var $tick = $('<div class="timepicker-tick"></div>'); + // Minutes view + for (var i = 0; i < 60; i += 5) { + var tick = $tick.clone(); + var radian = i / 30 * Math.PI; + tick.css({ + left: this.options.dialRadius + Math.sin(radian) * this.options.outerRadius - this.options.tickRadius + 'px', + top: this.options.dialRadius - Math.cos(radian) * this.options.outerRadius - this.options.tickRadius + 'px' + }); + tick.html(Timepicker._addLeadingZero(i)); + this.minutesView.appendChild(tick[0]); + } + } + }, { + key: "_handleAmPmClick", + value: function _handleAmPmClick(e) { + var $btnClicked = $(e.target); + this.amOrPm = $btnClicked.hasClass('am-btn') ? 'AM' : 'PM'; + this._updateAmPmView(); + } + }, { + key: "_updateAmPmView", + value: function _updateAmPmView() { + if (this.options.twelveHour) { + this.$amBtn.toggleClass('text-primary', this.amOrPm === 'AM'); + this.$pmBtn.toggleClass('text-primary', this.amOrPm === 'PM'); + } + } + }, { + key: "_updateTimeFromInput", + value: function _updateTimeFromInput() { + // Get the time + var value = ((this.el.value || this.options.defaultTime || '') + '').split(':'); + if (this.options.twelveHour && !(typeof value[1] === 'undefined')) { + if (value[1].toUpperCase().indexOf('AM') > 0) { + this.amOrPm = 'AM'; + } else { + this.amOrPm = 'PM'; + } + value[1] = value[1].replace('AM', '').replace('PM', ''); + } + if (value[0] === 'now') { + var now = new Date(+new Date() + this.options.fromNow); + value = [now.getHours(), now.getMinutes()]; + if (this.options.twelveHour) { + this.amOrPm = value[0] >= 12 && value[0] < 24 ? 'PM' : 'AM'; + } + } + this.hours = +value[0] || 0; + this.minutes = +value[1] || 0; + this.spanHours.innerHTML = this.hours; + this.spanMinutes.innerHTML = Timepicker._addLeadingZero(this.minutes); + + this._updateAmPmView(); + } + }, { + key: "showView", + value: function showView(view, delay) { + if (view === 'minutes' && $(this.hoursView).css('visibility') === 'visible') { + // raiseCallback(this.options.beforeHourSelect); + } + var isHours = view === 'hours', + nextView = isHours ? this.hoursView : this.minutesView, + hideView = isHours ? this.minutesView : this.hoursView; + this.currentView = view; + + $(this.spanHours).toggleClass('text-primary', isHours); + $(this.spanMinutes).toggleClass('text-primary', !isHours); + + // Transition view + hideView.classList.add('timepicker-dial-out'); + $(nextView).css('visibility', 'visible').removeClass('timepicker-dial-out'); + + // Reset clock hand + this.resetClock(delay); + + // After transitions ended + clearTimeout(this.toggleViewTimer); + this.toggleViewTimer = setTimeout(function () { + $(hideView).css('visibility', 'hidden'); + }, this.options.duration); + } + }, { + key: "resetClock", + value: function resetClock(delay) { + var view = this.currentView, + value = this[view], + isHours = view === 'hours', + unit = Math.PI / (isHours ? 6 : 30), + radian = value * unit, + radius = isHours && value > 0 && value < 13 ? this.options.innerRadius : this.options.outerRadius, + x = Math.sin(radian) * radius, + y = -Math.cos(radian) * radius, + self = this; + + if (delay) { + $(this.canvas).addClass('timepicker-canvas-out'); + setTimeout(function () { + $(self.canvas).removeClass('timepicker-canvas-out'); + self.setHand(x, y); + }, delay); + } else { + this.setHand(x, y); + } + } + }, { + key: "setHand", + value: function setHand(x, y, roundBy5) { + var _this60 = this; + + var radian = Math.atan2(x, -y), + isHours = this.currentView === 'hours', + unit = Math.PI / (isHours || roundBy5 ? 6 : 30), + z = Math.sqrt(x * x + y * y), + inner = isHours && z < (this.options.outerRadius + this.options.innerRadius) / 2, + radius = inner ? this.options.innerRadius : this.options.outerRadius; + + if (this.options.twelveHour) { + radius = this.options.outerRadius; + } + + // Radian should in range [0, 2PI] + if (radian < 0) { + radian = Math.PI * 2 + radian; + } + + // Get the round value + var value = Math.round(radian / unit); + + // Get the round radian + radian = value * unit; + + // Correct the hours or minutes + if (this.options.twelveHour) { + if (isHours) { + if (value === 0) value = 12; + } else { + if (roundBy5) value *= 5; + if (value === 60) value = 0; + } + } else { + if (isHours) { + if (value === 12) { + value = 0; + } + value = inner ? value === 0 ? 12 : value : value === 0 ? 0 : value + 12; + } else { + if (roundBy5) { + value *= 5; + } + if (value === 60) { + value = 0; + } + } + } + + // Once hours or minutes changed, vibrate the device + if (this[this.currentView] !== value) { + if (this.vibrate && this.options.vibrate) { + // Do not vibrate too frequently + if (!this.vibrateTimer) { + navigator[this.vibrate](10); + this.vibrateTimer = setTimeout(function () { + _this60.vibrateTimer = null; + }, 100); + } + } + } + + this[this.currentView] = value; + if (isHours) { + this['spanHours'].innerHTML = value; + } else { + this['spanMinutes'].innerHTML = Timepicker._addLeadingZero(value); + } + + // Set clock hand and others' position + var cx1 = Math.sin(radian) * (radius - this.options.tickRadius), + cy1 = -Math.cos(radian) * (radius - this.options.tickRadius), + cx2 = Math.sin(radian) * radius, + cy2 = -Math.cos(radian) * radius; + this.hand.setAttribute('x2', cx1); + this.hand.setAttribute('y2', cy1); + this.bg.setAttribute('cx', cx2); + this.bg.setAttribute('cy', cy2); + } + }, { + key: "open", + value: function open() { + if (this.isOpen) { + return; + } + + this.isOpen = true; + this._updateTimeFromInput(); + this.showView('hours'); + + this.modal.open(); + } + }, { + key: "close", + value: function close() { + if (!this.isOpen) { + return; + } + + this.isOpen = false; + this.modal.close(); + } + + /** + * Finish timepicker selection. + */ + + }, { + key: "done", + value: function done(e, clearValue) { + // Set input value + var last = this.el.value; + var value = clearValue ? '' : Timepicker._addLeadingZero(this.hours) + ':' + Timepicker._addLeadingZero(this.minutes); + this.time = value; + if (!clearValue && this.options.twelveHour) { + value = value + " " + this.amOrPm; + } + this.el.value = value; + + // Trigger change event + if (value !== last) { + this.$el.trigger('change'); + } + + this.close(); + this.el.focus(); + } + }, { + key: "clear", + value: function clear() { + this.done(null, true); + } + }], [{ + key: "init", + value: function init(els, options) { + return _get(Timepicker.__proto__ || Object.getPrototypeOf(Timepicker), "init", this).call(this, this, els, options); + } + }, { + key: "_addLeadingZero", + value: function _addLeadingZero(num) { + return (num < 10 ? '0' : '') + num; + } + }, { + key: "_createSVGEl", + value: function _createSVGEl(name) { + var svgNS = 'http://www.w3.org/2000/svg'; + return document.createElementNS(svgNS, name); + } + + /** + * @typedef {Object} Point + * @property {number} x The X Coordinate + * @property {number} y The Y Coordinate + */ + + /** + * Get x position of mouse or touch event + * @param {Event} e + * @return {Point} x and y location + */ + + }, { + key: "_Pos", + value: function _Pos(e) { + if (e.targetTouches && e.targetTouches.length >= 1) { + return { x: e.targetTouches[0].clientX, y: e.targetTouches[0].clientY }; + } + // mouse event + return { x: e.clientX, y: e.clientY }; + } + + /** + * Get Instance + */ + + }, { + key: "getInstance", + value: function getInstance(el) { + var domElem = !!el.jquery ? el[0] : el; + return domElem.M_Timepicker; + } + }, { + key: "defaults", + get: function () { + return _defaults; + } + }]); + + return Timepicker; + }(Component); + + Timepicker._template = ['<div class= "modal timepicker-modal">', '<div class="modal-content timepicker-container">', '<div class="timepicker-digital-display">', '<div class="timepicker-text-container">', '<div class="timepicker-display-column">', '<span class="timepicker-span-hours text-primary"></span>', ':', '<span class="timepicker-span-minutes"></span>', '</div>', '<div class="timepicker-display-column timepicker-display-am-pm">', '<div class="timepicker-span-am-pm"></div>', '</div>', '</div>', '</div>', '<div class="timepicker-analog-display">', '<div class="timepicker-plate">', '<div class="timepicker-canvas"></div>', '<div class="timepicker-dial timepicker-hours"></div>', '<div class="timepicker-dial timepicker-minutes timepicker-dial-out"></div>', '</div>', '<div class="timepicker-footer"></div>', '</div>', '</div>', '</div>'].join(''); + + M.Timepicker = Timepicker; + + if (M.jQueryLoaded) { + M.initializeJqueryWrapper(Timepicker, 'timepicker', 'M_Timepicker'); + } +})(cash); +;(function ($) { + 'use strict'; + + var _defaults = {}; + + /** + * @class + * + */ + + var CharacterCounter = function (_Component17) { + _inherits(CharacterCounter, _Component17); + + /** + * Construct CharacterCounter instance + * @constructor + * @param {Element} el + * @param {Object} options + */ + function CharacterCounter(el, options) { + _classCallCheck(this, CharacterCounter); + + var _this61 = _possibleConstructorReturn(this, (CharacterCounter.__proto__ || Object.getPrototypeOf(CharacterCounter)).call(this, CharacterCounter, el, options)); + + _this61.el.M_CharacterCounter = _this61; + + /** + * Options for the character counter + */ + _this61.options = $.extend({}, CharacterCounter.defaults, options); + + _this61.isInvalid = false; + _this61.isValidLength = false; + _this61._setupCounter(); + _this61._setupEventHandlers(); + return _this61; + } + + _createClass(CharacterCounter, [{ + key: "destroy", + + + /** + * Teardown component + */ + value: function destroy() { + this._removeEventHandlers(); + this.el.CharacterCounter = undefined; + this._removeCounter(); + } + + /** + * Setup Event Handlers + */ + + }, { + key: "_setupEventHandlers", + value: function _setupEventHandlers() { + this._handleUpdateCounterBound = this.updateCounter.bind(this); + + this.el.addEventListener('focus', this._handleUpdateCounterBound, true); + this.el.addEventListener('input', this._handleUpdateCounterBound, true); + } + + /** + * Remove Event Handlers + */ + + }, { + key: "_removeEventHandlers", + value: function _removeEventHandlers() { + this.el.removeEventListener('focus', this._handleUpdateCounterBound, true); + this.el.removeEventListener('input', this._handleUpdateCounterBound, true); + } + + /** + * Setup counter element + */ + + }, { + key: "_setupCounter", + value: function _setupCounter() { + this.counterEl = document.createElement('span'); + $(this.counterEl).addClass('character-counter').css({ + float: 'right', + 'font-size': '12px', + height: 1 + }); + + this.$el.parent().append(this.counterEl); + } + + /** + * Remove counter element + */ + + }, { + key: "_removeCounter", + value: function _removeCounter() { + $(this.counterEl).remove(); + } + + /** + * Update counter + */ + + }, { + key: "updateCounter", + value: function updateCounter() { + var maxLength = +this.$el.attr('data-length'), + actualLength = this.el.value.length; + this.isValidLength = actualLength <= maxLength; + var counterString = actualLength; + + if (maxLength) { + counterString += '/' + maxLength; + this._validateInput(); + } + + $(this.counterEl).html(counterString); + } + + /** + * Add validation classes + */ + + }, { + key: "_validateInput", + value: function _validateInput() { + if (this.isValidLength && this.isInvalid) { + this.isInvalid = false; + this.$el.removeClass('invalid'); + } else if (!this.isValidLength && !this.isInvalid) { + this.isInvalid = true; + this.$el.removeClass('valid'); + this.$el.addClass('invalid'); + } + } + }], [{ + key: "init", + value: function init(els, options) { + return _get(CharacterCounter.__proto__ || Object.getPrototypeOf(CharacterCounter), "init", this).call(this, this, els, options); + } + + /** + * Get Instance + */ + + }, { + key: "getInstance", + value: function getInstance(el) { + var domElem = !!el.jquery ? el[0] : el; + return domElem.M_CharacterCounter; + } + }, { + key: "defaults", + get: function () { + return _defaults; + } + }]); + + return CharacterCounter; + }(Component); + + M.CharacterCounter = CharacterCounter; + + if (M.jQueryLoaded) { + M.initializeJqueryWrapper(CharacterCounter, 'characterCounter', 'M_CharacterCounter'); + } +})(cash); +;(function ($) { + 'use strict'; + + var _defaults = { + duration: 200, // ms + dist: -100, // zoom scale TODO: make this more intuitive as an option + shift: 0, // spacing for center image + padding: 0, // Padding between non center items + numVisible: 5, // Number of visible items in carousel + fullWidth: false, // Change to full width styles + indicators: false, // Toggle indicators + noWrap: false, // Don't wrap around and cycle through items. + onCycleTo: null // Callback for when a new slide is cycled to. + }; + + /** + * @class + * + */ + + var Carousel = function (_Component18) { + _inherits(Carousel, _Component18); + + /** + * Construct Carousel instance + * @constructor + * @param {Element} el + * @param {Object} options + */ + function Carousel(el, options) { + _classCallCheck(this, Carousel); + + var _this62 = _possibleConstructorReturn(this, (Carousel.__proto__ || Object.getPrototypeOf(Carousel)).call(this, Carousel, el, options)); + + _this62.el.M_Carousel = _this62; + + /** + * Options for the carousel + * @member Carousel#options + * @prop {Number} duration + * @prop {Number} dist + * @prop {Number} shift + * @prop {Number} padding + * @prop {Number} numVisible + * @prop {Boolean} fullWidth + * @prop {Boolean} indicators + * @prop {Boolean} noWrap + * @prop {Function} onCycleTo + */ + _this62.options = $.extend({}, Carousel.defaults, options); + + // Setup + _this62.hasMultipleSlides = _this62.$el.find('.carousel-item').length > 1; + _this62.showIndicators = _this62.options.indicators && _this62.hasMultipleSlides; + _this62.noWrap = _this62.options.noWrap || !_this62.hasMultipleSlides; + _this62.pressed = false; + _this62.dragged = false; + _this62.offset = _this62.target = 0; + _this62.images = []; + _this62.itemWidth = _this62.$el.find('.carousel-item').first().innerWidth(); + _this62.itemHeight = _this62.$el.find('.carousel-item').first().innerHeight(); + _this62.dim = _this62.itemWidth * 2 + _this62.options.padding || 1; // Make sure dim is non zero for divisions. + _this62._autoScrollBound = _this62._autoScroll.bind(_this62); + _this62._trackBound = _this62._track.bind(_this62); + + // Full Width carousel setup + if (_this62.options.fullWidth) { + _this62.options.dist = 0; + _this62._setCarouselHeight(); + + // Offset fixed items when indicators. + if (_this62.showIndicators) { + _this62.$el.find('.carousel-fixed-item').addClass('with-indicators'); + } + } + + // Iterate through slides + _this62.$indicators = $('<ul class="indicators"></ul>'); + _this62.$el.find('.carousel-item').each(function (el, i) { + _this62.images.push(el); + if (_this62.showIndicators) { + var $indicator = $('<li class="indicator-item"></li>'); + + // Add active to first by default. + if (i === 0) { + $indicator[0].classList.add('active'); + } + + _this62.$indicators.append($indicator); + } + }); + if (_this62.showIndicators) { + _this62.$el.append(_this62.$indicators); + } + _this62.count = _this62.images.length; + + // Cap numVisible at count + _this62.options.numVisible = Math.min(_this62.count, _this62.options.numVisible); + + // Setup cross browser string + _this62.xform = 'transform'; + ['webkit', 'Moz', 'O', 'ms'].every(function (prefix) { + var e = prefix + 'Transform'; + if (typeof document.body.style[e] !== 'undefined') { + _this62.xform = e; + return false; + } + return true; + }); + + _this62._setupEventHandlers(); + _this62._scroll(_this62.offset); + return _this62; + } + + _createClass(Carousel, [{ + key: "destroy", + + + /** + * Teardown component + */ + value: function destroy() { + this._removeEventHandlers(); + this.el.M_Carousel = undefined; + } + + /** + * Setup Event Handlers + */ + + }, { + key: "_setupEventHandlers", + value: function _setupEventHandlers() { + var _this63 = this; + + this._handleCarouselTapBound = this._handleCarouselTap.bind(this); + this._handleCarouselDragBound = this._handleCarouselDrag.bind(this); + this._handleCarouselReleaseBound = this._handleCarouselRelease.bind(this); + this._handleCarouselClickBound = this._handleCarouselClick.bind(this); + + if (typeof window.ontouchstart !== 'undefined') { + this.el.addEventListener('touchstart', this._handleCarouselTapBound); + this.el.addEventListener('touchmove', this._handleCarouselDragBound); + this.el.addEventListener('touchend', this._handleCarouselReleaseBound); + } + + this.el.addEventListener('mousedown', this._handleCarouselTapBound); + this.el.addEventListener('mousemove', this._handleCarouselDragBound); + this.el.addEventListener('mouseup', this._handleCarouselReleaseBound); + this.el.addEventListener('mouseleave', this._handleCarouselReleaseBound); + this.el.addEventListener('click', this._handleCarouselClickBound); + + if (this.showIndicators && this.$indicators) { + this._handleIndicatorClickBound = this._handleIndicatorClick.bind(this); + this.$indicators.find('.indicator-item').each(function (el, i) { + el.addEventListener('click', _this63._handleIndicatorClickBound); + }); + } + + // Resize + var throttledResize = M.throttle(this._handleResize, 200); + this._handleThrottledResizeBound = throttledResize.bind(this); + + window.addEventListener('resize', this._handleThrottledResizeBound); + } + + /** + * Remove Event Handlers + */ + + }, { + key: "_removeEventHandlers", + value: function _removeEventHandlers() { + var _this64 = this; + + if (typeof window.ontouchstart !== 'undefined') { + this.el.removeEventListener('touchstart', this._handleCarouselTapBound); + this.el.removeEventListener('touchmove', this._handleCarouselDragBound); + this.el.removeEventListener('touchend', this._handleCarouselReleaseBound); + } + this.el.removeEventListener('mousedown', this._handleCarouselTapBound); + this.el.removeEventListener('mousemove', this._handleCarouselDragBound); + this.el.removeEventListener('mouseup', this._handleCarouselReleaseBound); + this.el.removeEventListener('mouseleave', this._handleCarouselReleaseBound); + this.el.removeEventListener('click', this._handleCarouselClickBound); + + if (this.showIndicators && this.$indicators) { + this.$indicators.find('.indicator-item').each(function (el, i) { + el.removeEventListener('click', _this64._handleIndicatorClickBound); + }); + } + + window.removeEventListener('resize', this._handleThrottledResizeBound); + } + + /** + * Handle Carousel Tap + * @param {Event} e + */ + + }, { + key: "_handleCarouselTap", + value: function _handleCarouselTap(e) { + // Fixes firefox draggable image bug + if (e.type === 'mousedown' && $(e.target).is('img')) { + e.preventDefault(); + } + this.pressed = true; + this.dragged = false; + this.verticalDragged = false; + this.reference = this._xpos(e); + this.referenceY = this._ypos(e); + + this.velocity = this.amplitude = 0; + this.frame = this.offset; + this.timestamp = Date.now(); + clearInterval(this.ticker); + this.ticker = setInterval(this._trackBound, 100); + } + + /** + * Handle Carousel Drag + * @param {Event} e + */ + + }, { + key: "_handleCarouselDrag", + value: function _handleCarouselDrag(e) { + var x = void 0, + y = void 0, + delta = void 0, + deltaY = void 0; + if (this.pressed) { + x = this._xpos(e); + y = this._ypos(e); + delta = this.reference - x; + deltaY = Math.abs(this.referenceY - y); + if (deltaY < 30 && !this.verticalDragged) { + // If vertical scrolling don't allow dragging. + if (delta > 2 || delta < -2) { + this.dragged = true; + this.reference = x; + this._scroll(this.offset + delta); + } + } else if (this.dragged) { + // If dragging don't allow vertical scroll. + e.preventDefault(); + e.stopPropagation(); + return false; + } else { + // Vertical scrolling. + this.verticalDragged = true; + } + } + + if (this.dragged) { + // If dragging don't allow vertical scroll. + e.preventDefault(); + e.stopPropagation(); + return false; + } + } + + /** + * Handle Carousel Release + * @param {Event} e + */ + + }, { + key: "_handleCarouselRelease", + value: function _handleCarouselRelease(e) { + if (this.pressed) { + this.pressed = false; + } else { + return; + } + + clearInterval(this.ticker); + this.target = this.offset; + if (this.velocity > 10 || this.velocity < -10) { + this.amplitude = 0.9 * this.velocity; + this.target = this.offset + this.amplitude; + } + this.target = Math.round(this.target / this.dim) * this.dim; + + // No wrap of items. + if (this.noWrap) { + if (this.target >= this.dim * (this.count - 1)) { + this.target = this.dim * (this.count - 1); + } else if (this.target < 0) { + this.target = 0; + } + } + this.amplitude = this.target - this.offset; + this.timestamp = Date.now(); + requestAnimationFrame(this._autoScrollBound); + + if (this.dragged) { + e.preventDefault(); + e.stopPropagation(); + } + return false; + } + + /** + * Handle Carousel CLick + * @param {Event} e + */ + + }, { + key: "_handleCarouselClick", + value: function _handleCarouselClick(e) { + // Disable clicks if carousel was dragged. + if (this.dragged) { + e.preventDefault(); + e.stopPropagation(); + return false; + } else if (!this.options.fullWidth) { + var clickedIndex = $(e.target).closest('.carousel-item').index(); + var diff = this._wrap(this.center) - clickedIndex; + + // Disable clicks if carousel was shifted by click + if (diff !== 0) { + e.preventDefault(); + e.stopPropagation(); + } + this._cycleTo(clickedIndex); + } + } + + /** + * Handle Indicator CLick + * @param {Event} e + */ + + }, { + key: "_handleIndicatorClick", + value: function _handleIndicatorClick(e) { + e.stopPropagation(); + + var indicator = $(e.target).closest('.indicator-item'); + if (indicator.length) { + this._cycleTo(indicator.index()); + } + } + + /** + * Handle Throttle Resize + * @param {Event} e + */ + + }, { + key: "_handleResize", + value: function _handleResize(e) { + if (this.options.fullWidth) { + this.itemWidth = this.$el.find('.carousel-item').first().innerWidth(); + this.imageHeight = this.$el.find('.carousel-item.active').height(); + this.dim = this.itemWidth * 2 + this.options.padding; + this.offset = this.center * 2 * this.itemWidth; + this.target = this.offset; + this._setCarouselHeight(true); + } else { + this._scroll(); + } + } + + /** + * Set carousel height based on first slide + * @param {Booleam} imageOnly - true for image slides + */ + + }, { + key: "_setCarouselHeight", + value: function _setCarouselHeight(imageOnly) { + var _this65 = this; + + var firstSlide = this.$el.find('.carousel-item.active').length ? this.$el.find('.carousel-item.active').first() : this.$el.find('.carousel-item').first(); + var firstImage = firstSlide.find('img').first(); + if (firstImage.length) { + if (firstImage[0].complete) { + // If image won't trigger the load event + var imageHeight = firstImage.height(); + if (imageHeight > 0) { + this.$el.css('height', imageHeight + 'px'); + } else { + // If image still has no height, use the natural dimensions to calculate + var naturalWidth = firstImage[0].naturalWidth; + var naturalHeight = firstImage[0].naturalHeight; + var adjustedHeight = this.$el.width() / naturalWidth * naturalHeight; + this.$el.css('height', adjustedHeight + 'px'); + } + } else { + // Get height when image is loaded normally + firstImage.one('load', function (el, i) { + _this65.$el.css('height', el.offsetHeight + 'px'); + }); + } + } else if (!imageOnly) { + var slideHeight = firstSlide.height(); + this.$el.css('height', slideHeight + 'px'); + } + } + + /** + * Get x position from event + * @param {Event} e + */ + + }, { + key: "_xpos", + value: function _xpos(e) { + // touch event + if (e.targetTouches && e.targetTouches.length >= 1) { + return e.targetTouches[0].clientX; + } + + // mouse event + return e.clientX; + } + + /** + * Get y position from event + * @param {Event} e + */ + + }, { + key: "_ypos", + value: function _ypos(e) { + // touch event + if (e.targetTouches && e.targetTouches.length >= 1) { + return e.targetTouches[0].clientY; + } + + // mouse event + return e.clientY; + } + + /** + * Wrap index + * @param {Number} x + */ + + }, { + key: "_wrap", + value: function _wrap(x) { + return x >= this.count ? x % this.count : x < 0 ? this._wrap(this.count + x % this.count) : x; + } + + /** + * Tracks scrolling information + */ + + }, { + key: "_track", + value: function _track() { + var now = void 0, + elapsed = void 0, + delta = void 0, + v = void 0; + + now = Date.now(); + elapsed = now - this.timestamp; + this.timestamp = now; + delta = this.offset - this.frame; + this.frame = this.offset; + + v = 1000 * delta / (1 + elapsed); + this.velocity = 0.8 * v + 0.2 * this.velocity; + } + + /** + * Auto scrolls to nearest carousel item. + */ + + }, { + key: "_autoScroll", + value: function _autoScroll() { + var elapsed = void 0, + delta = void 0; + + if (this.amplitude) { + elapsed = Date.now() - this.timestamp; + delta = this.amplitude * Math.exp(-elapsed / this.options.duration); + if (delta > 2 || delta < -2) { + this._scroll(this.target - delta); + requestAnimationFrame(this._autoScrollBound); + } else { + this._scroll(this.target); + } + } + } + + /** + * Scroll to target + * @param {Number} x + */ + + }, { + key: "_scroll", + value: function _scroll(x) { + var _this66 = this; + + // Track scrolling state + if (!this.$el.hasClass('scrolling')) { + this.el.classList.add('scrolling'); + } + if (this.scrollingTimeout != null) { + window.clearTimeout(this.scrollingTimeout); + } + this.scrollingTimeout = window.setTimeout(function () { + _this66.$el.removeClass('scrolling'); + }, this.options.duration); + + // Start actual scroll + var i = void 0, + half = void 0, + delta = void 0, + dir = void 0, + tween = void 0, + el = void 0, + alignment = void 0, + zTranslation = void 0, + tweenedOpacity = void 0, + centerTweenedOpacity = void 0; + var lastCenter = this.center; + var numVisibleOffset = 1 / this.options.numVisible; + + this.offset = typeof x === 'number' ? x : this.offset; + this.center = Math.floor((this.offset + this.dim / 2) / this.dim); + delta = this.offset - this.center * this.dim; + dir = delta < 0 ? 1 : -1; + tween = -dir * delta * 2 / this.dim; + half = this.count >> 1; + + if (this.options.fullWidth) { + alignment = 'translateX(0)'; + centerTweenedOpacity = 1; + } else { + alignment = 'translateX(' + (this.el.clientWidth - this.itemWidth) / 2 + 'px) '; + alignment += 'translateY(' + (this.el.clientHeight - this.itemHeight) / 2 + 'px)'; + centerTweenedOpacity = 1 - numVisibleOffset * tween; + } + + // Set indicator active + if (this.showIndicators) { + var diff = this.center % this.count; + var activeIndicator = this.$indicators.find('.indicator-item.active'); + if (activeIndicator.index() !== diff) { + activeIndicator.removeClass('active'); + this.$indicators.find('.indicator-item').eq(diff)[0].classList.add('active'); + } + } + + // center + // Don't show wrapped items. + if (!this.noWrap || this.center >= 0 && this.center < this.count) { + el = this.images[this._wrap(this.center)]; + + // Add active class to center item. + if (!$(el).hasClass('active')) { + this.$el.find('.carousel-item').removeClass('active'); + el.classList.add('active'); + } + var transformString = alignment + " translateX(" + -delta / 2 + "px) translateX(" + dir * this.options.shift * tween * i + "px) translateZ(" + this.options.dist * tween + "px)"; + this._updateItemStyle(el, centerTweenedOpacity, 0, transformString); + } + + for (i = 1; i <= half; ++i) { + // right side + if (this.options.fullWidth) { + zTranslation = this.options.dist; + tweenedOpacity = i === half && delta < 0 ? 1 - tween : 1; + } else { + zTranslation = this.options.dist * (i * 2 + tween * dir); + tweenedOpacity = 1 - numVisibleOffset * (i * 2 + tween * dir); + } + // Don't show wrapped items. + if (!this.noWrap || this.center + i < this.count) { + el = this.images[this._wrap(this.center + i)]; + var _transformString = alignment + " translateX(" + (this.options.shift + (this.dim * i - delta) / 2) + "px) translateZ(" + zTranslation + "px)"; + this._updateItemStyle(el, tweenedOpacity, -i, _transformString); + } + + // left side + if (this.options.fullWidth) { + zTranslation = this.options.dist; + tweenedOpacity = i === half && delta > 0 ? 1 - tween : 1; + } else { + zTranslation = this.options.dist * (i * 2 - tween * dir); + tweenedOpacity = 1 - numVisibleOffset * (i * 2 - tween * dir); + } + // Don't show wrapped items. + if (!this.noWrap || this.center - i >= 0) { + el = this.images[this._wrap(this.center - i)]; + var _transformString2 = alignment + " translateX(" + (-this.options.shift + (-this.dim * i - delta) / 2) + "px) translateZ(" + zTranslation + "px)"; + this._updateItemStyle(el, tweenedOpacity, -i, _transformString2); + } + } + + // center + // Don't show wrapped items. + if (!this.noWrap || this.center >= 0 && this.center < this.count) { + el = this.images[this._wrap(this.center)]; + var _transformString3 = alignment + " translateX(" + -delta / 2 + "px) translateX(" + dir * this.options.shift * tween + "px) translateZ(" + this.options.dist * tween + "px)"; + this._updateItemStyle(el, centerTweenedOpacity, 0, _transformString3); + } + + // onCycleTo callback + var $currItem = this.$el.find('.carousel-item').eq(this._wrap(this.center)); + if (lastCenter !== this.center && typeof this.options.onCycleTo === 'function') { + this.options.onCycleTo.call(this, $currItem[0], this.dragged); + } + + // One time callback + if (typeof this.oneTimeCallback === 'function') { + this.oneTimeCallback.call(this, $currItem[0], this.dragged); + this.oneTimeCallback = null; + } + } + + /** + * Cycle to target + * @param {Element} el + * @param {Number} opacity + * @param {Number} zIndex + * @param {String} transform + */ + + }, { + key: "_updateItemStyle", + value: function _updateItemStyle(el, opacity, zIndex, transform) { + el.style[this.xform] = transform; + el.style.zIndex = zIndex; + el.style.opacity = opacity; + el.style.visibility = 'visible'; + } + + /** + * Cycle to target + * @param {Number} n + * @param {Function} callback + */ + + }, { + key: "_cycleTo", + value: function _cycleTo(n, callback) { + var diff = this.center % this.count - n; + + // Account for wraparound. + if (!this.noWrap) { + if (diff < 0) { + if (Math.abs(diff + this.count) < Math.abs(diff)) { + diff += this.count; + } + } else if (diff > 0) { + if (Math.abs(diff - this.count) < diff) { + diff -= this.count; + } + } + } + + this.target = this.dim * Math.round(this.offset / this.dim); + // Next + if (diff < 0) { + this.target += this.dim * Math.abs(diff); + + // Prev + } else if (diff > 0) { + this.target -= this.dim * diff; + } + + // Set one time callback + if (typeof callback === 'function') { + this.oneTimeCallback = callback; + } + + // Scroll + if (this.offset !== this.target) { + this.amplitude = this.target - this.offset; + this.timestamp = Date.now(); + requestAnimationFrame(this._autoScrollBound); + } + } + + /** + * Cycle to next item + * @param {Number} [n] + */ + + }, { + key: "next", + value: function next(n) { + if (n === undefined || isNaN(n)) { + n = 1; + } + + var index = this.center + n; + if (index >= this.count || index < 0) { + if (this.noWrap) { + return; + } + + index = this._wrap(index); + } + this._cycleTo(index); + } + + /** + * Cycle to previous item + * @param {Number} [n] + */ + + }, { + key: "prev", + value: function prev(n) { + if (n === undefined || isNaN(n)) { + n = 1; + } + + var index = this.center - n; + if (index >= this.count || index < 0) { + if (this.noWrap) { + return; + } + + index = this._wrap(index); + } + + this._cycleTo(index); + } + + /** + * Cycle to nth item + * @param {Number} [n] + * @param {Function} callback + */ + + }, { + key: "set", + value: function set(n, callback) { + if (n === undefined || isNaN(n)) { + n = 0; + } + + if (n > this.count || n < 0) { + if (this.noWrap) { + return; + } + + n = this._wrap(n); + } + + this._cycleTo(n, callback); + } + }], [{ + key: "init", + value: function init(els, options) { + return _get(Carousel.__proto__ || Object.getPrototypeOf(Carousel), "init", this).call(this, this, els, options); + } + + /** + * Get Instance + */ + + }, { + key: "getInstance", + value: function getInstance(el) { + var domElem = !!el.jquery ? el[0] : el; + return domElem.M_Carousel; + } + }, { + key: "defaults", + get: function () { + return _defaults; + } + }]); + + return Carousel; + }(Component); + + M.Carousel = Carousel; + + if (M.jQueryLoaded) { + M.initializeJqueryWrapper(Carousel, 'carousel', 'M_Carousel'); + } +})(cash); +;(function ($) { + 'use strict'; + + var _defaults = { + onOpen: undefined, + onClose: undefined + }; + + /** + * @class + * + */ + + var TapTarget = function (_Component19) { + _inherits(TapTarget, _Component19); + + /** + * Construct TapTarget instance + * @constructor + * @param {Element} el + * @param {Object} options + */ + function TapTarget(el, options) { + _classCallCheck(this, TapTarget); + + var _this67 = _possibleConstructorReturn(this, (TapTarget.__proto__ || Object.getPrototypeOf(TapTarget)).call(this, TapTarget, el, options)); + + _this67.el.M_TapTarget = _this67; + + /** + * Options for the select + * @member TapTarget#options + * @prop {Function} onOpen - Callback function called when feature discovery is opened + * @prop {Function} onClose - Callback function called when feature discovery is closed + */ + _this67.options = $.extend({}, TapTarget.defaults, options); + + _this67.isOpen = false; + + // setup + _this67.$origin = $('#' + _this67.$el.attr('data-target')); + _this67._setup(); + + _this67._calculatePositioning(); + _this67._setupEventHandlers(); + return _this67; + } + + _createClass(TapTarget, [{ + key: "destroy", + + + /** + * Teardown component + */ + value: function destroy() { + this._removeEventHandlers(); + this.el.TapTarget = undefined; + } + + /** + * Setup Event Handlers + */ + + }, { + key: "_setupEventHandlers", + value: function _setupEventHandlers() { + this._handleDocumentClickBound = this._handleDocumentClick.bind(this); + this._handleTargetClickBound = this._handleTargetClick.bind(this); + this._handleOriginClickBound = this._handleOriginClick.bind(this); + + this.el.addEventListener('click', this._handleTargetClickBound); + this.originEl.addEventListener('click', this._handleOriginClickBound); + + // Resize + var throttledResize = M.throttle(this._handleResize, 200); + this._handleThrottledResizeBound = throttledResize.bind(this); + + window.addEventListener('resize', this._handleThrottledResizeBound); + } + + /** + * Remove Event Handlers + */ + + }, { + key: "_removeEventHandlers", + value: function _removeEventHandlers() { + this.el.removeEventListener('click', this._handleTargetClickBound); + this.originEl.removeEventListener('click', this._handleOriginClickBound); + window.removeEventListener('resize', this._handleThrottledResizeBound); + } + + /** + * Handle Target Click + * @param {Event} e + */ + + }, { + key: "_handleTargetClick", + value: function _handleTargetClick(e) { + this.open(); + } + + /** + * Handle Origin Click + * @param {Event} e + */ + + }, { + key: "_handleOriginClick", + value: function _handleOriginClick(e) { + this.close(); + } + + /** + * Handle Resize + * @param {Event} e + */ + + }, { + key: "_handleResize", + value: function _handleResize(e) { + this._calculatePositioning(); + } + + /** + * Handle Resize + * @param {Event} e + */ + + }, { + key: "_handleDocumentClick", + value: function _handleDocumentClick(e) { + if (!$(e.target).closest('.tap-target-wrapper').length) { + this.close(); + e.preventDefault(); + e.stopPropagation(); + } + } + + /** + * Setup Tap Target + */ + + }, { + key: "_setup", + value: function _setup() { + // Creating tap target + this.wrapper = this.$el.parent()[0]; + this.waveEl = $(this.wrapper).find('.tap-target-wave')[0]; + this.originEl = $(this.wrapper).find('.tap-target-origin')[0]; + this.contentEl = this.$el.find('.tap-target-content')[0]; + + // Creating wrapper + if (!$(this.wrapper).hasClass('.tap-target-wrapper')) { + this.wrapper = document.createElement('div'); + this.wrapper.classList.add('tap-target-wrapper'); + this.$el.before($(this.wrapper)); + this.wrapper.append(this.el); + } + + // Creating content + if (!this.contentEl) { + this.contentEl = document.createElement('div'); + this.contentEl.classList.add('tap-target-content'); + this.$el.append(this.contentEl); + } + + // Creating foreground wave + if (!this.waveEl) { + this.waveEl = document.createElement('div'); + this.waveEl.classList.add('tap-target-wave'); + + // Creating origin + if (!this.originEl) { + this.originEl = this.$origin.clone(true, true); + this.originEl.addClass('tap-target-origin'); + this.originEl.removeAttr('id'); + this.originEl.removeAttr('style'); + this.originEl = this.originEl[0]; + this.waveEl.append(this.originEl); + } + + this.wrapper.append(this.waveEl); + } + } + + /** + * Calculate positioning + */ + + }, { + key: "_calculatePositioning", + value: function _calculatePositioning() { + // Element or parent is fixed position? + var isFixed = this.$origin.css('position') === 'fixed'; + if (!isFixed) { + var parents = this.$origin.parents(); + for (var i = 0; i < parents.length; i++) { + isFixed = $(parents[i]).css('position') == 'fixed'; + if (isFixed) { + break; + } + } + } + + // Calculating origin + var originWidth = this.$origin.outerWidth(); + var originHeight = this.$origin.outerHeight(); + var originTop = isFixed ? this.$origin.offset().top - M.getDocumentScrollTop() : this.$origin.offset().top; + var originLeft = isFixed ? this.$origin.offset().left - M.getDocumentScrollLeft() : this.$origin.offset().left; + + // Calculating screen + var windowWidth = window.innerWidth; + var windowHeight = window.innerHeight; + var centerX = windowWidth / 2; + var centerY = windowHeight / 2; + var isLeft = originLeft <= centerX; + var isRight = originLeft > centerX; + var isTop = originTop <= centerY; + var isBottom = originTop > centerY; + var isCenterX = originLeft >= windowWidth * 0.25 && originLeft <= windowWidth * 0.75; + + // Calculating tap target + var tapTargetWidth = this.$el.outerWidth(); + var tapTargetHeight = this.$el.outerHeight(); + var tapTargetTop = originTop + originHeight / 2 - tapTargetHeight / 2; + var tapTargetLeft = originLeft + originWidth / 2 - tapTargetWidth / 2; + var tapTargetPosition = isFixed ? 'fixed' : 'absolute'; + + // Calculating content + var tapTargetTextWidth = isCenterX ? tapTargetWidth : tapTargetWidth / 2 + originWidth; + var tapTargetTextHeight = tapTargetHeight / 2; + var tapTargetTextTop = isTop ? tapTargetHeight / 2 : 0; + var tapTargetTextBottom = 0; + var tapTargetTextLeft = isLeft && !isCenterX ? tapTargetWidth / 2 - originWidth : 0; + var tapTargetTextRight = 0; + var tapTargetTextPadding = originWidth; + var tapTargetTextAlign = isBottom ? 'bottom' : 'top'; + + // Calculating wave + var tapTargetWaveWidth = originWidth > originHeight ? originWidth * 2 : originWidth * 2; + var tapTargetWaveHeight = tapTargetWaveWidth; + var tapTargetWaveTop = tapTargetHeight / 2 - tapTargetWaveHeight / 2; + var tapTargetWaveLeft = tapTargetWidth / 2 - tapTargetWaveWidth / 2; + + // Setting tap target + var tapTargetWrapperCssObj = {}; + tapTargetWrapperCssObj.top = isTop ? tapTargetTop + 'px' : ''; + tapTargetWrapperCssObj.right = isRight ? windowWidth - tapTargetLeft - tapTargetWidth + 'px' : ''; + tapTargetWrapperCssObj.bottom = isBottom ? windowHeight - tapTargetTop - tapTargetHeight + 'px' : ''; + tapTargetWrapperCssObj.left = isLeft ? tapTargetLeft + 'px' : ''; + tapTargetWrapperCssObj.position = tapTargetPosition; + $(this.wrapper).css(tapTargetWrapperCssObj); + + // Setting content + $(this.contentEl).css({ + width: tapTargetTextWidth + 'px', + height: tapTargetTextHeight + 'px', + top: tapTargetTextTop + 'px', + right: tapTargetTextRight + 'px', + bottom: tapTargetTextBottom + 'px', + left: tapTargetTextLeft + 'px', + padding: tapTargetTextPadding + 'px', + verticalAlign: tapTargetTextAlign + }); + + // Setting wave + $(this.waveEl).css({ + top: tapTargetWaveTop + 'px', + left: tapTargetWaveLeft + 'px', + width: tapTargetWaveWidth + 'px', + height: tapTargetWaveHeight + 'px' + }); + } + + /** + * Open TapTarget + */ + + }, { + key: "open", + value: function open() { + if (this.isOpen) { + return; + } + + // onOpen callback + if (typeof this.options.onOpen === 'function') { + this.options.onOpen.call(this, this.$origin[0]); + } + + this.isOpen = true; + this.wrapper.classList.add('open'); + + document.body.addEventListener('click', this._handleDocumentClickBound, true); + document.body.addEventListener('touchend', this._handleDocumentClickBound); + } + + /** + * Close Tap Target + */ + + }, { + key: "close", + value: function close() { + if (!this.isOpen) { + return; + } + + // onClose callback + if (typeof this.options.onClose === 'function') { + this.options.onClose.call(this, this.$origin[0]); + } + + this.isOpen = false; + this.wrapper.classList.remove('open'); + + document.body.removeEventListener('click', this._handleDocumentClickBound, true); + document.body.removeEventListener('touchend', this._handleDocumentClickBound); + } + }], [{ + key: "init", + value: function init(els, options) { + return _get(TapTarget.__proto__ || Object.getPrototypeOf(TapTarget), "init", this).call(this, this, els, options); + } + + /** + * Get Instance + */ + + }, { + key: "getInstance", + value: function getInstance(el) { + var domElem = !!el.jquery ? el[0] : el; + return domElem.M_TapTarget; + } + }, { + key: "defaults", + get: function () { + return _defaults; + } + }]); + + return TapTarget; + }(Component); + + M.TapTarget = TapTarget; + + if (M.jQueryLoaded) { + M.initializeJqueryWrapper(TapTarget, 'tapTarget', 'M_TapTarget'); + } +})(cash); +;(function ($) { + 'use strict'; + + var _defaults = { + classes: '', + dropdownOptions: {} + }; + + /** + * @class + * + */ + + var FormSelect = function (_Component20) { + _inherits(FormSelect, _Component20); + + /** + * Construct FormSelect instance + * @constructor + * @param {Element} el + * @param {Object} options + */ + function FormSelect(el, options) { + _classCallCheck(this, FormSelect); + + // Don't init if browser default version + var _this68 = _possibleConstructorReturn(this, (FormSelect.__proto__ || Object.getPrototypeOf(FormSelect)).call(this, FormSelect, el, options)); + + if (_this68.$el.hasClass('browser-default')) { + return _possibleConstructorReturn(_this68); + } + + _this68.el.M_FormSelect = _this68; + + /** + * Options for the select + * @member FormSelect#options + */ + _this68.options = $.extend({}, FormSelect.defaults, options); + + _this68.isMultiple = _this68.$el.prop('multiple'); + + // Setup + _this68.el.tabIndex = -1; + _this68._keysSelected = {}; + _this68._valueDict = {}; // Maps key to original and generated option element. + _this68._setupDropdown(); + + _this68._setupEventHandlers(); + return _this68; + } + + _createClass(FormSelect, [{ + key: "destroy", + + + /** + * Teardown component + */ + value: function destroy() { + this._removeEventHandlers(); + this._removeDropdown(); + this.el.M_FormSelect = undefined; + } + + /** + * Setup Event Handlers + */ + + }, { + key: "_setupEventHandlers", + value: function _setupEventHandlers() { + var _this69 = this; + + this._handleSelectChangeBound = this._handleSelectChange.bind(this); + this._handleOptionClickBound = this._handleOptionClick.bind(this); + this._handleInputClickBound = this._handleInputClick.bind(this); + + $(this.dropdownOptions).find('li:not(.optgroup)').each(function (el) { + el.addEventListener('click', _this69._handleOptionClickBound); + }); + this.el.addEventListener('change', this._handleSelectChangeBound); + this.input.addEventListener('click', this._handleInputClickBound); + } + + /** + * Remove Event Handlers + */ + + }, { + key: "_removeEventHandlers", + value: function _removeEventHandlers() { + var _this70 = this; + + $(this.dropdownOptions).find('li:not(.optgroup)').each(function (el) { + el.removeEventListener('click', _this70._handleOptionClickBound); + }); + this.el.removeEventListener('change', this._handleSelectChangeBound); + this.input.removeEventListener('click', this._handleInputClickBound); + } + + /** + * Handle Select Change + * @param {Event} e + */ + + }, { + key: "_handleSelectChange", + value: function _handleSelectChange(e) { + this._setValueToInput(); + } + + /** + * Handle Option Click + * @param {Event} e + */ + + }, { + key: "_handleOptionClick", + value: function _handleOptionClick(e) { + e.preventDefault(); + var option = $(e.target).closest('li')[0]; + var key = option.id; + if (!$(option).hasClass('disabled') && !$(option).hasClass('optgroup') && key.length) { + var selected = true; + + if (this.isMultiple) { + // Deselect placeholder option if still selected. + var placeholderOption = $(this.dropdownOptions).find('li.disabled.selected'); + if (placeholderOption.length) { + placeholderOption.removeClass('selected'); + placeholderOption.find('input[type="checkbox"]').prop('checked', false); + this._toggleEntryFromArray(placeholderOption[0].id); + } + selected = this._toggleEntryFromArray(key); + } else { + $(this.dropdownOptions).find('li').removeClass('selected'); + $(option).toggleClass('selected', selected); + } + + // Set selected on original select option + // Only trigger if selected state changed + var prevSelected = $(this._valueDict[key].el).prop('selected'); + if (prevSelected !== selected) { + $(this._valueDict[key].el).prop('selected', selected); + this.$el.trigger('change'); + } + } + + e.stopPropagation(); + } + + /** + * Handle Input Click + */ + + }, { + key: "_handleInputClick", + value: function _handleInputClick() { + if (this.dropdown && this.dropdown.isOpen) { + this._setValueToInput(); + this._setSelectedStates(); + } + } + + /** + * Setup dropdown + */ + + }, { + key: "_setupDropdown", + value: function _setupDropdown() { + var _this71 = this; + + this.wrapper = document.createElement('div'); + $(this.wrapper).addClass('select-wrapper ' + this.options.classes); + this.$el.before($(this.wrapper)); + this.wrapper.appendChild(this.el); + + if (this.el.disabled) { + this.wrapper.classList.add('disabled'); + } + + // Create dropdown + this.$selectOptions = this.$el.children('option, optgroup'); + this.dropdownOptions = document.createElement('ul'); + this.dropdownOptions.id = "select-options-" + M.guid(); + $(this.dropdownOptions).addClass('dropdown-content select-dropdown ' + (this.isMultiple ? 'multiple-select-dropdown' : '')); + + // Create dropdown structure. + if (this.$selectOptions.length) { + this.$selectOptions.each(function (el) { + if ($(el).is('option')) { + // Direct descendant option. + var optionEl = void 0; + if (_this71.isMultiple) { + optionEl = _this71._appendOptionWithIcon(_this71.$el, el, 'multiple'); + } else { + optionEl = _this71._appendOptionWithIcon(_this71.$el, el); + } + + _this71._addOptionToValueDict(el, optionEl); + } else if ($(el).is('optgroup')) { + // Optgroup. + var selectOptions = $(el).children('option'); + $(_this71.dropdownOptions).append($('<li class="optgroup"><span>' + el.getAttribute('label') + '</span></li>')[0]); + + selectOptions.each(function (el) { + var optionEl = _this71._appendOptionWithIcon(_this71.$el, el, 'optgroup-option'); + _this71._addOptionToValueDict(el, optionEl); + }); + } + }); + } + + this.$el.after(this.dropdownOptions); + + // Add input dropdown + this.input = document.createElement('input'); + $(this.input).addClass('select-dropdown dropdown-trigger'); + this.input.setAttribute('type', 'text'); + this.input.setAttribute('readonly', 'true'); + this.input.setAttribute('data-target', this.dropdownOptions.id); + if (this.el.disabled) { + $(this.input).prop('disabled', 'true'); + } + + this.$el.before(this.input); + this._setValueToInput(); + + // Add caret + var dropdownIcon = $('<svg class="caret" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"><path d="M7 10l5 5 5-5z"/><path d="M0 0h24v24H0z" fill="none"/></svg>'); + this.$el.before(dropdownIcon[0]); + + // Initialize dropdown + if (!this.el.disabled) { + var dropdownOptions = $.extend({}, this.options.dropdownOptions); + + // Add callback for centering selected option when dropdown content is scrollable + dropdownOptions.onOpenEnd = function (el) { + var selectedOption = $(_this71.dropdownOptions).find('.selected').first(); + + if (selectedOption.length) { + // Focus selected option in dropdown + M.keyDown = true; + _this71.dropdown.focusedIndex = selectedOption.index(); + _this71.dropdown._focusFocusedItem(); + M.keyDown = false; + + // Handle scrolling to selected option + if (_this71.dropdown.isScrollable) { + var scrollOffset = selectedOption[0].getBoundingClientRect().top - _this71.dropdownOptions.getBoundingClientRect().top; // scroll to selected option + scrollOffset -= _this71.dropdownOptions.clientHeight / 2; // center in dropdown + _this71.dropdownOptions.scrollTop = scrollOffset; + } + } + }; + + if (this.isMultiple) { + dropdownOptions.closeOnClick = false; + } + this.dropdown = M.Dropdown.init(this.input, dropdownOptions); + } + + // Add initial selections + this._setSelectedStates(); + } + + /** + * Add option to value dict + * @param {Element} el original option element + * @param {Element} optionEl generated option element + */ + + }, { + key: "_addOptionToValueDict", + value: function _addOptionToValueDict(el, optionEl) { + var index = Object.keys(this._valueDict).length; + var key = this.dropdownOptions.id + index; + var obj = {}; + optionEl.id = key; + + obj.el = el; + obj.optionEl = optionEl; + this._valueDict[key] = obj; + } + + /** + * Remove dropdown + */ + + }, { + key: "_removeDropdown", + value: function _removeDropdown() { + $(this.wrapper).find('.caret').remove(); + $(this.input).remove(); + $(this.dropdownOptions).remove(); + $(this.wrapper).before(this.$el); + $(this.wrapper).remove(); + } + + /** + * Setup dropdown + * @param {Element} select select element + * @param {Element} option option element from select + * @param {String} type + * @return {Element} option element added + */ + + }, { + key: "_appendOptionWithIcon", + value: function _appendOptionWithIcon(select, option, type) { + // Add disabled attr if disabled + var disabledClass = option.disabled ? 'disabled ' : ''; + var optgroupClass = type === 'optgroup-option' ? 'optgroup-option ' : ''; + var multipleCheckbox = this.isMultiple ? "<label><input type=\"checkbox\"" + disabledClass + "\"/><span>" + option.innerHTML + "</span></label>" : option.innerHTML; + var liEl = $('<li></li>'); + var spanEl = $('<span></span>'); + spanEl.html(multipleCheckbox); + liEl.addClass(disabledClass + " " + optgroupClass); + liEl.append(spanEl); + + // add icons + var iconUrl = option.getAttribute('data-icon'); + if (!!iconUrl) { + var imgEl = $("<img alt=\"\" src=\"" + iconUrl + "\">"); + liEl.prepend(imgEl); + } + + // Check for multiple type. + $(this.dropdownOptions).append(liEl[0]); + return liEl[0]; + } + + /** + * Toggle entry from option + * @param {String} key Option key + * @return {Boolean} if entry was added or removed + */ + + }, { + key: "_toggleEntryFromArray", + value: function _toggleEntryFromArray(key) { + var notAdded = !this._keysSelected.hasOwnProperty(key); + var $optionLi = $(this._valueDict[key].optionEl); + + if (notAdded) { + this._keysSelected[key] = true; + } else { + delete this._keysSelected[key]; + } + + $optionLi.toggleClass('selected', notAdded); + + // Set checkbox checked value + $optionLi.find('input[type="checkbox"]').prop('checked', notAdded); + + // use notAdded instead of true (to detect if the option is selected or not) + $optionLi.prop('selected', notAdded); + + return notAdded; + } + + /** + * Set text value to input + */ + + }, { + key: "_setValueToInput", + value: function _setValueToInput() { + var values = []; + var options = this.$el.find('option'); + + options.each(function (el) { + if ($(el).prop('selected')) { + var text = $(el).text(); + values.push(text); + } + }); + + if (!values.length) { + var firstDisabled = this.$el.find('option:disabled').eq(0); + if (firstDisabled.length && firstDisabled[0].value === '') { + values.push(firstDisabled.text()); + } + } + + this.input.value = values.join(', '); + } + + /** + * Set selected state of dropdown to match actual select element + */ + + }, { + key: "_setSelectedStates", + value: function _setSelectedStates() { + this._keysSelected = {}; + + for (var key in this._valueDict) { + var option = this._valueDict[key]; + var optionIsSelected = $(option.el).prop('selected'); + $(option.optionEl).find('input[type="checkbox"]').prop('checked', optionIsSelected); + if (optionIsSelected) { + this._activateOption($(this.dropdownOptions), $(option.optionEl)); + this._keysSelected[key] = true; + } else { + $(option.optionEl).removeClass('selected'); + } + } + } + + /** + * Make option as selected and scroll to selected position + * @param {jQuery} collection Select options jQuery element + * @param {Element} newOption element of the new option + */ + + }, { + key: "_activateOption", + value: function _activateOption(collection, newOption) { + if (newOption) { + if (!this.isMultiple) { + collection.find('li.selected').removeClass('selected'); + } + var option = $(newOption); + option.addClass('selected'); + } + } + + /** + * Get Selected Values + * @return {Array} Array of selected values + */ + + }, { + key: "getSelectedValues", + value: function getSelectedValues() { + var selectedValues = []; + for (var key in this._keysSelected) { + selectedValues.push(this._valueDict[key].el.value); + } + return selectedValues; + } + }], [{ + key: "init", + value: function init(els, options) { + return _get(FormSelect.__proto__ || Object.getPrototypeOf(FormSelect), "init", this).call(this, this, els, options); + } + + /** + * Get Instance + */ + + }, { + key: "getInstance", + value: function getInstance(el) { + var domElem = !!el.jquery ? el[0] : el; + return domElem.M_FormSelect; + } + }, { + key: "defaults", + get: function () { + return _defaults; + } + }]); + + return FormSelect; + }(Component); + + M.FormSelect = FormSelect; + + if (M.jQueryLoaded) { + M.initializeJqueryWrapper(FormSelect, 'formSelect', 'M_FormSelect'); + } +})(cash); +;(function ($, anim) { + 'use strict'; + + var _defaults = {}; + + /** + * @class + * + */ + + var Range = function (_Component21) { + _inherits(Range, _Component21); + + /** + * Construct Range instance + * @constructor + * @param {Element} el + * @param {Object} options + */ + function Range(el, options) { + _classCallCheck(this, Range); + + var _this72 = _possibleConstructorReturn(this, (Range.__proto__ || Object.getPrototypeOf(Range)).call(this, Range, el, options)); + + _this72.el.M_Range = _this72; + + /** + * Options for the range + * @member Range#options + */ + _this72.options = $.extend({}, Range.defaults, options); + + _this72._mousedown = false; + + // Setup + _this72._setupThumb(); + + _this72._setupEventHandlers(); + return _this72; + } + + _createClass(Range, [{ + key: "destroy", + + + /** + * Teardown component + */ + value: function destroy() { + this._removeEventHandlers(); + this._removeThumb(); + this.el.M_Range = undefined; + } + + /** + * Setup Event Handlers + */ + + }, { + key: "_setupEventHandlers", + value: function _setupEventHandlers() { + this._handleRangeChangeBound = this._handleRangeChange.bind(this); + this._handleRangeMousedownTouchstartBound = this._handleRangeMousedownTouchstart.bind(this); + this._handleRangeInputMousemoveTouchmoveBound = this._handleRangeInputMousemoveTouchmove.bind(this); + this._handleRangeMouseupTouchendBound = this._handleRangeMouseupTouchend.bind(this); + this._handleRangeBlurMouseoutTouchleaveBound = this._handleRangeBlurMouseoutTouchleave.bind(this); + + this.el.addEventListener('change', this._handleRangeChangeBound); + + this.el.addEventListener('mousedown', this._handleRangeMousedownTouchstartBound); + this.el.addEventListener('touchstart', this._handleRangeMousedownTouchstartBound); + + this.el.addEventListener('input', this._handleRangeInputMousemoveTouchmoveBound); + this.el.addEventListener('mousemove', this._handleRangeInputMousemoveTouchmoveBound); + this.el.addEventListener('touchmove', this._handleRangeInputMousemoveTouchmoveBound); + + this.el.addEventListener('mouseup', this._handleRangeMouseupTouchendBound); + this.el.addEventListener('touchend', this._handleRangeMouseupTouchendBound); + + this.el.addEventListener('blur', this._handleRangeBlurMouseoutTouchleaveBound); + this.el.addEventListener('mouseout', this._handleRangeBlurMouseoutTouchleaveBound); + this.el.addEventListener('touchleave', this._handleRangeBlurMouseoutTouchleaveBound); + } + + /** + * Remove Event Handlers + */ + + }, { + key: "_removeEventHandlers", + value: function _removeEventHandlers() { + this.el.removeEventListener('change', this._handleRangeChangeBound); + + this.el.removeEventListener('mousedown', this._handleRangeMousedownTouchstartBound); + this.el.removeEventListener('touchstart', this._handleRangeMousedownTouchstartBound); + + this.el.removeEventListener('input', this._handleRangeInputMousemoveTouchmoveBound); + this.el.removeEventListener('mousemove', this._handleRangeInputMousemoveTouchmoveBound); + this.el.removeEventListener('touchmove', this._handleRangeInputMousemoveTouchmoveBound); + + this.el.removeEventListener('mouseup', this._handleRangeMouseupTouchendBound); + this.el.removeEventListener('touchend', this._handleRangeMouseupTouchendBound); + + this.el.removeEventListener('blur', this._handleRangeBlurMouseoutTouchleaveBound); + this.el.removeEventListener('mouseout', this._handleRangeBlurMouseoutTouchleaveBound); + this.el.removeEventListener('touchleave', this._handleRangeBlurMouseoutTouchleaveBound); + } + + /** + * Handle Range Change + * @param {Event} e + */ + + }, { + key: "_handleRangeChange", + value: function _handleRangeChange() { + $(this.value).html(this.$el.val()); + + if (!$(this.thumb).hasClass('active')) { + this._showRangeBubble(); + } + + var offsetLeft = this._calcRangeOffset(); + $(this.thumb).addClass('active').css('left', offsetLeft + 'px'); + } + + /** + * Handle Range Mousedown and Touchstart + * @param {Event} e + */ + + }, { + key: "_handleRangeMousedownTouchstart", + value: function _handleRangeMousedownTouchstart(e) { + // Set indicator value + $(this.value).html(this.$el.val()); + + this._mousedown = true; + this.$el.addClass('active'); + + if (!$(this.thumb).hasClass('active')) { + this._showRangeBubble(); + } + + if (e.type !== 'input') { + var offsetLeft = this._calcRangeOffset(); + $(this.thumb).addClass('active').css('left', offsetLeft + 'px'); + } + } + + /** + * Handle Range Input, Mousemove and Touchmove + */ + + }, { + key: "_handleRangeInputMousemoveTouchmove", + value: function _handleRangeInputMousemoveTouchmove() { + if (this._mousedown) { + if (!$(this.thumb).hasClass('active')) { + this._showRangeBubble(); + } + + var offsetLeft = this._calcRangeOffset(); + $(this.thumb).addClass('active').css('left', offsetLeft + 'px'); + $(this.value).html(this.$el.val()); + } + } + + /** + * Handle Range Mouseup and Touchend + */ + + }, { + key: "_handleRangeMouseupTouchend", + value: function _handleRangeMouseupTouchend() { + this._mousedown = false; + this.$el.removeClass('active'); + } + + /** + * Handle Range Blur, Mouseout and Touchleave + */ + + }, { + key: "_handleRangeBlurMouseoutTouchleave", + value: function _handleRangeBlurMouseoutTouchleave() { + if (!this._mousedown) { + var paddingLeft = parseInt(this.$el.css('padding-left')); + var marginLeft = 7 + paddingLeft + 'px'; + + if ($(this.thumb).hasClass('active')) { + anim.remove(this.thumb); + anim({ + targets: this.thumb, + height: 0, + width: 0, + top: 10, + easing: 'easeOutQuad', + marginLeft: marginLeft, + duration: 100 + }); + } + $(this.thumb).removeClass('active'); + } + } + + /** + * Setup dropdown + */ + + }, { + key: "_setupThumb", + value: function _setupThumb() { + this.thumb = document.createElement('span'); + this.value = document.createElement('span'); + $(this.thumb).addClass('thumb'); + $(this.value).addClass('value'); + $(this.thumb).append(this.value); + this.$el.after(this.thumb); + } + + /** + * Remove dropdown + */ + + }, { + key: "_removeThumb", + value: function _removeThumb() { + $(this.thumb).remove(); + } + + /** + * morph thumb into bubble + */ + + }, { + key: "_showRangeBubble", + value: function _showRangeBubble() { + var paddingLeft = parseInt($(this.thumb).parent().css('padding-left')); + var marginLeft = -7 + paddingLeft + 'px'; // TODO: fix magic number? + anim.remove(this.thumb); + anim({ + targets: this.thumb, + height: 30, + width: 30, + top: -30, + marginLeft: marginLeft, + duration: 300, + easing: 'easeOutQuint' + }); + } + + /** + * Calculate the offset of the thumb + * @return {Number} offset in pixels + */ + + }, { + key: "_calcRangeOffset", + value: function _calcRangeOffset() { + var width = this.$el.width() - 15; + var max = parseFloat(this.$el.attr('max')) || 100; // Range default max + var min = parseFloat(this.$el.attr('min')) || 0; // Range default min + var percent = (parseFloat(this.$el.val()) - min) / (max - min); + return percent * width; + } + }], [{ + key: "init", + value: function init(els, options) { + return _get(Range.__proto__ || Object.getPrototypeOf(Range), "init", this).call(this, this, els, options); + } + + /** + * Get Instance + */ + + }, { + key: "getInstance", + value: function getInstance(el) { + var domElem = !!el.jquery ? el[0] : el; + return domElem.M_Range; + } + }, { + key: "defaults", + get: function () { + return _defaults; + } + }]); + + return Range; + }(Component); + + M.Range = Range; + + if (M.jQueryLoaded) { + M.initializeJqueryWrapper(Range, 'range', 'M_Range'); + } + + Range.init($('input[type=range]')); +})(cash, M.anime); diff --git a/script.js b/js/script.js similarity index 81% rename from script.js rename to js/script.js index 497a48f..ef3d446 100644 --- a/script.js +++ b/js/script.js @@ -1,5 +1,5 @@ function updateHost(input) { - input.style.backgroundImage = 'url(wait.gif)' + input.style.backgroundImage = 'url(img/wait.gif)' input.style.fontStyle = "italic" fetch(new Request("updateHost.php", { method:"POST", @@ -10,7 +10,7 @@ function updateHost(input) { input.style.backgroundImage = '' input.style.fontStyle = "" } else { - input.style.backgroundImage = 'url(nok.png)' + input.style.backgroundImage = 'url(img/nok.png)' } }) } diff --git a/siteNetworks.php b/siteNetworks.php index f90acd3..afe4324 100644 --- a/siteNetworks.php +++ b/siteNetworks.php @@ -1,7 +1,6 @@ <?php $MAX_LINES = 2500; -include "connect.php"; $siteName = $_GET["site"]; // Check if site is known $site = $db->prepare('SELECT id from Sites WHERE Name=:siteName'); @@ -13,17 +12,19 @@ if (!$siteId) { } ?> -<html> - <head> - <title>TablIP - <?=$siteName?></title> - <link rel="stylesheet" href="style.css"/> - <script src="script.js"></script> - </head> - <body> <header> - <h1>TablIP</h1> - <h2><?=$siteName?></h2> + <nav> + <div class="nav-wrapper navbar-fixed cyan lighten-2"> + <a href="." class="brand-logo center">TablIP</a> + <div> + <a href="." class="breadcrumb">Sites</a> + <a href=".?Site=<?=$siteName?>" class="breadcrumb"><?=$siteName?></a> + </div> + </div> + </nav> </header> + <div class="container"> + <h1><?=$siteName?></h1> <?php $networks = $db->query("SELECT * FROM `Networks` WHERE `SiteId` = $siteId"); @@ -33,71 +34,81 @@ while ($network = $networks->fetch()) $networkAddress = (int) $network["Address"]; $networkMask = (int) $network["Mask"]; ?> - <table style="width:100%"> - <caption><?=$network['Name']." : ".long2ip($networkAddress)." / ".long2ip($networkMask)?><caption> - <thead> - <tr> - <th>Adresse IP</th> - <th>Nom d'hôte</th> - <th>FQDN</th> - <th>Adresse MAC</th> - <th>Commentaires</th> - <tr> - <td><em><?= long2ip($networkAddress)?></em></td> - <td colspan="4"><em>Adresse réseau</em></td> - </tr> - </tr> - </thead> - <tbody> + <div class="card"> + <div class="card-content"> + <span class="card-title"><?=$network['Name']." @ ".long2ip($networkAddress)." / ".long2ip($networkMask)?></span> + <table class="striped responsive-table"> + <thead> + <tr> + <th>Adresse IP</th> + <th>Nom d'hôte</th> + <th>FQDN</th> + <th>Adresse MAC</th> + <th>Commentaires</th> + <tr> + <td><em><?= long2ip($networkAddress)?></em></td> + <td colspan="4"><em>Adresse réseau</em></td> + </tr> + </tr> + </thead> + <tbody> <?php for ($ip = $networkAddress + 1; ($ip+1 & $networkMask) == $networkAddress && $ip < $networkAddress + $MAX_LINES; $ip++ ) { $hosts = $db->query("SELECT * from `Hosts` WHERE IPAddress=$ip AND NetworkId=$networkId"); $host = $hosts->fetch(); ?> - <tr> - <form> - <input type="hidden" name="Ip" value=<?=$ip?>/> - <input type="hidden" name="NetworkId" value=<?=$networkId?>/> - <td><?=long2ip($ip)?></td> - <td><input type="text" onchange="updateHost(this)" name='Hostname' value="<?=$host["Hostname"]?>"/></td> - <td><input type="text" onchange="updateHost(this)" name='FQDN' value="<?=$host["FQDN"]?>"/></td> - <td><input type="text" onchange="updateHost(this)" name='MacAddress' value="<?=$host["MacAddress"]?>"/></td> - <td><input type="text" onchange="updateHost(this)" name='Comments' value="<?=$host["Comments"]?>"/></td> - </form> - </tr> + <tr> + <form> + <input type="hidden" name="Ip" value=<?=$ip?>/> + <input type="hidden" name="NetworkId" value=<?=$networkId?>/> + <td><?=long2ip($ip)?></td> + <td class="td-input"><input type="text" onchange="updateHost(this)" name='Hostname' value="<?=$host["Hostname"]?>"/></td> + <td class="td-input"><input type="text" onchange="updateHost(this)" name='FQDN' value="<?=$host["FQDN"]?>"/></td> + <td class="td-input"><input type="text" onchange="updateHost(this)" name='MacAddress' value="<?=$host["MacAddress"]?>"/></td> + <td class="td-input"><input type="text" onchange="updateHost(this)" name='Comments' value="<?=$host["Comments"]?>"/></td> + </form> + </tr> <?php } ?> - </tbody> - <tfoot> - <tr> - <td><em><?= long2ip($ip)?></em></td> - <td colspan="4"><em>Adresse de diffusion</em></td> - </tr> - </tfoot> - </table> + </tbody> + <tfoot> + <tr> + <td><em><?= long2ip($ip)?></em></td> + <td colspan="4"><em>Adresse de diffusion</em></td> + </tr> + </tfoot> + </table> + </div> + </div> <?php } $networks->closeCursor(); ?> - <form name="addNetwork" id="addNetwork" action="addNetwork.php" method="post"> - <fieldset class="add"> - <legend>Ajouter un réseau</legend> - <label for="nameInput">Nom</label> - <input type="text" id="nameInput" name="name" required/> - <label for="gatewayInput">Passerelle</label> - <input type="text" id="gatewayInput" name="gateway" pattern="^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$"/> - <label for="maskInput">Masque</label> - <input type="text" id="maskInput" name="mask" pattern="^((0|128|192|224|240|248|252|255)\.0\.0.0|255\.(0|128|192|224|240|248|252|255)\.0\.0|255\.255\.(0|128|192|224|240|248|252|255)\.0|255\.255\.255\.(0|128|192|224|240|248|252|255))$"'/> - <input type="hidden" name="siteId" value="<?=$siteId?>"/> - <input type="hidden" name="siteName" value="<?=$siteName?>"/> - <button id="addButton" type="submit">Ajouter</button> - </fieldset> - </form> + <div class="card teal lighten-5"> + <div class="card-content"> + <span class="card-title">Nouveau réseau</span> + <form name="addNetwork" id="addNetwork" action="addNetwork.php" method="post"> + <input type="hidden" name="siteId" value="<?=$siteId?>"/> + <input type="hidden" name="siteName" value="<?=$siteName?>"/> + <div class="input-field"> + <label for="nameInput">Nom</label> + <input type="text" class="validate" id="nameInput" name="name" placeholder="LAN" required/> + </div> + <div class="input-field"> + <label for="gatewayInput">Passerelle</label> + <input type="text" class="validate" id="gatewayInput" name="gateway" placeholder="192.168.0.1" pattern="^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$"/> + </div> + <div class="input-field"> + <label for="maskInput">Masque</label> + <input type="text" class="validate" id="maskInput" name="mask" placeholder="255.255.255.0" pattern="^((0|128|192|224|240|248|252|255)\.0\.0.0|255\.(0|128|192|224|240|248|252|255)\.0\.0|255\.255\.(0|128|192|224|240|248|252|255)\.0|255\.255\.255\.(0|128|192|224|240|248|252|255))$"'/> + </div> + <button type="submit" class="btn-floating halfway-fab waves-effect waves-light teal"><i class="material-icons">add</i></button> + </form> + </div> + </div> + </div> + + - <footer> - <a href=".">Accueil</a> - </footer> - </body> -</html> \ No newline at end of file diff --git a/sitesList.php b/sitesList.php index ca3dcd3..762110b 100644 --- a/sitesList.php +++ b/sitesList.php @@ -1,32 +1,38 @@ -<html> - <head> - <title>TablIP</title> - <link rel="stylesheet" href="style.css"/> - </head> - <body> <header> - <h1>TablIP</h1> + <nav> + <div class="nav-wrapper navbar-fixed teal lighten-2"> + <a href="." class="brand-logo center">TablIP</a> + <div> + <a href="." class="breadcrumb">Sites</a> + </div> + </div> + </nav> </header> - <ul> + <div class="container"> + <h1>Sites</h1> + <div class="collection"> <?php include "connect.php"; -$sites = $db->query('SELECT Name FROM Site ORDER BY Name'); +$sites = $db->query('SELECT Name FROM Sites ORDER BY Name'); while ($site = $sites->fetch()) { - echo " <li><a href='.?site=${site['Name']}'>${site['Name']}</a></li>\n"; + echo " <a href='.?site=${site['Name']}' class='collection-item'>${site['Name']}</a>\n"; } $sites->closeCursor(); ?> - </ul> - <form name="addSite" id="addSite" action="addSite.php" method="post"> - <fieldset class="add"> - <legend>Ajouter un site</legend> - <label for="siteName">Nom</label> - <input type="text" id="siteName" name="siteName" required/> - <button type="submit">Ajouter</button> - </fieldset> - </form> - </body> -</html> \ No newline at end of file + </div> + <div class="card teal lighten-5"> + <div class="card-content"> + <span class="card-title">Nouveau site</span> + <form name="addSite" id="addSite" action="addSite.php" method="post"> + <div class="input-field"> + <label for="siteName">Nom</label> + <input type="text" class="validate" id="siteName" name="siteName" placeholder="Site" required/> + </div> + <button type="submit" class="btn-floating halfway-fab waves-effect waves-light teal"><i class="material-icons">add</i></button> + </form> + </div> + </div> + </div> \ No newline at end of file diff --git a/style.css b/style.css deleted file mode 100644 index 096487f..0000000 --- a/style.css +++ /dev/null @@ -1,45 +0,0 @@ -body { - margin: auto 1em; -} - -header { - text-align: center; -} - -li { - list-style: none; -} - -table { - border-collapse: collapse; -} - -th, td { - border: solid 1px; -} - -td { - padding: 0; -} - -td input { - border: 0; - background-repeat: no-repeat; - background-position: right center; - width: 100%; -} - -.add { - display: grid; - grid-template-columns: 1fr 2fr; - grid-gap: 1em; -} -.add button { - width: 100%; - margin: auto; - grid-column: 1/3; -} - -footer { - text-align: center; -} \ No newline at end of file