├── .gitignore ├── LICENSE ├── README.md ├── app.js ├── assets ├── browserconfig.xml ├── css │ ├── main.css │ └── uikit.min.css ├── img │ ├── android-chrome-192x192.png │ ├── android-chrome-512x512.png │ ├── apple-touch-icon.png │ ├── favicon-16x16.png │ ├── favicon-32x32.png │ ├── favicon.ico │ ├── mstile-144x144.png │ ├── mstile-150x150.png │ ├── mstile-310x150.png │ ├── mstile-310x310.png │ ├── mstile-70x70.png │ └── safari-pinned-tab.svg ├── js │ ├── main.js │ ├── uikit-icons.min.js │ └── uikit.min.js └── site.webmanifest ├── boardcontrol ├── config └── default.json5 ├── package-lock.json ├── package.json ├── screenshot ├── UI_desktop.png └── UI_mobile.png └── views └── index.ejs /.gitignore: -------------------------------------------------------------------------------- 1 | # Specify filepatterns you want git to ignore. 2 | node_modules/ -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 lexb2 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Board Control 2 | 3 | ## Overview 4 | 5 | Control and monitor any GNU/Linux or MacOs system from a Web UI using customizable bash commands to do action or display information. This allow to have a quick look on what is going on the system and perform any action on it without having to start a ssh session (Headless board) or interrupt your favorite movie playing (HTPC). 6 | 7 | Mostly suited to work over local network on development board (Raspberry Pi / Orange Pi / BeagleBone..) or Linux based HTPC. The webUI can be used from a desktop or a phone. 8 | 9 | Mobile (command result cleared) | Desktop (command result display) 10 | :-------------------------:|:-------------------------: 11 | ![alt tag](screenshot/UI_mobile.png "Desktop view of the UI") | ![alt tag](screenshot/UI_desktop.png "Desktop view of the UI") 12 | 13 | ## Requirements 14 | 15 | BoardControl uses Node.js with a few modules. This allow to run it within minutes on any system without having to install and configure a classic web server. 16 | 17 | ## Install Node.js 18 | 19 | > Please refer to the latest installation guide on Node.js website: 20 | > https://nodejs.org/en/download/package-manager/ 21 | > or check below for Debian and Ubuntu based Linux distributions 22 | 23 | Install Node.js 8 (LTS) on Debian and Ubuntu based Linux distributions 24 | 25 | ```bash 26 | curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash - 27 | sudo apt-get install -y nodejs 28 | ``` 29 | 30 | Alternatively, for Node.js 9 (Current version): 31 | 32 | ```bash 33 | curl -sL https://deb.nodesource.com/setup_9.x | sudo -E bash - 34 | sudo apt-get install -y nodejs 35 | ``` 36 | 37 | ## Get BoardControl 38 | 39 | ```bash 40 | git clone https://github.com/lexb2/BoardControl.git 41 | ``` 42 | 43 | ## Use BoardControl 44 | 45 | #### Start one time as user 46 | 47 | ```bash 48 | node BoardControl/app.js 49 | ``` 50 | 51 | The following message should be displayed: 52 | 53 | > "BoardControl started and listening on port 8081" 54 | 55 | At this point BoardControl runs with your user rights, it means the commands that required root access won't work. 56 | 57 | #### Automatically run at startup as root 58 | 59 | Install Forever globally to allow the program to run continuously. 60 | https://www.npmjs.com/package/forever 61 | 62 | ```bash 63 | sudo npm install forever -g 64 | ``` 65 | 66 | The commands below copy BoardControl in /opt. 67 | All modification of the configuration should be done here. 68 | You can choose another location but if you do so, don't forget to update the `APP` value in `/etc/init.d/boardcontrol` to indicate the right path. 69 | 70 | ```bash 71 | sudo cp -R BoardControl/ /opt 72 | sudo cp /opt/BoardControl/boardcontrol /etc/init.d/boardcontrol 73 | sudo chmod +x /etc/init.d/boardcontrol 74 | sudo update-rc.d boardcontrol defaults 75 | sudo service boardcontrol start 76 | ``` 77 | 78 | #### Access BoardControl 79 | 80 | Simply browse: 81 | http://localhost:8081 82 | if you installed it locally, 83 | or 84 | http://ipAdressOfTheMachine:8081 85 | 86 | 87 | #### Configure BoardControl 88 | 89 | BoardControl is customisable using the file `default.json` 90 | located in `BoardControl/config/`. 91 | 92 | 93 | > Some characters need to be escaped for JSON: 94 | > " (Double quote) is replaced with \" 95 | > \ (Backslash) is replaced with \\ 96 | > See https://realguess.net/2016/07/29/escaping-in-json-with-backslash/ 97 | 98 | `commands` define the actions that can be done using the UI button. 99 | 100 | Field | Description 101 | --- | --- 102 | label | button label display on the website 103 | nickname | internal code of the commands, must be unique, without space or special character 104 | exec | the bash command to execute, result will be shown on website 105 | 106 | `informations` define the information that are always display at the bottom of the webpage. 107 | 108 | Field | Description 109 | --- | --- 110 | label | header label 111 | exec | the bash command to execute, result will be shown on website 112 | 113 | ```json 114 | { 115 | "config": { 116 | "listeningPort": 8081, 117 | "pageTitle": "Board control", 118 | "commands": [ 119 | { 120 | "label": "Run my command", 121 | "nickname": "mycommand", 122 | "exec": "time" 123 | }, 124 | { 125 | "label": "Run my awesome script", 126 | "nickname": "myscript", 127 | "exec": "/path/to/my/./script.sh" 128 | } 129 | ], 130 | "informations": [ 131 | { 132 | "label": "Some information 1", 133 | "exec": "free -h" 134 | }, 135 | { 136 | "label": "Some information 2", 137 | "exec": "ls /" 138 | } 139 | ] 140 | } 141 | } 142 | ``` 143 | 144 | After updating the configuration, BoardControl need to be restarted 145 | 146 | ```bash 147 | sudo service boardcontrol restart 148 | ``` 149 | 150 | #### Config example 151 | 152 | ```json 153 | { 154 | "config": { 155 | "listeningPort": 8081, 156 | "pageTitle": "BoardControl", 157 | "commands": [ 158 | { 159 | "label": "Shutdown", 160 | "nickname": "shutdown", 161 | "exec": "poweroff" 162 | }, 163 | { 164 | "label": "Reboot", 165 | "nickname": "reboot", 166 | "exec": "reboot" 167 | }, 168 | { 169 | "label": "List files", 170 | "nickname": "ls", 171 | "exec": "ls /home" 172 | }, 173 | { 174 | "label": "Run script", 175 | "nickname": "myscript", 176 | "exec": "/path/to/my/./script.sh" 177 | } 178 | ], 179 | "informations": [ 180 | { 181 | "label": "Disk free space", 182 | "exec": "df -h | grep 'data\\|root\\|Size'" 183 | }, 184 | { 185 | "label": "Free ram", 186 | "exec": "free -h" 187 | }, 188 | { 189 | "label": "Top cpu process", 190 | "exec": "ps -eo pid,comm,%cpu,%mem --sort=-%cpu | head -n 5" 191 | }, 192 | { 193 | "label": "Uptime", 194 | "exec": "uptime" 195 | }, 196 | { 197 | "label": "Public IP address", 198 | "exec": "curl -s http://checkip.dyndns.org/ | sed 's/[a-zA-Z<>/ :]//g'" 199 | }, 200 | { 201 | "label": "Local IP address", 202 | "exec": "ifconfig | grep -E \"([0-9]{1,3}\\.){3}[0-9]{1,3}\" | grep -v 127.0.0.1 | awk '{ print $2 }' | cut -f2 -d: | head -n1" 203 | } 204 | 205 | ] 206 | } 207 | } 208 | ``` 209 | 210 | ## Disclaimer 211 | This software comes with no warranty, it doesn't feature any authentification system and run as root as per installation guide below. Please use only on a trusted local network and do not expose this server to the internet, else anyone could take control your machine (hopefully only with the commands you defined). 212 | 213 | ## Uninstall 214 | 215 | sudo update-rc.d boardcontrol remove 216 | sudo rm /etc/init.d/boardcontrol 217 | 218 | And simply delete BoardControl folder (in /opt as per installation guide) -------------------------------------------------------------------------------- /app.js: -------------------------------------------------------------------------------- 1 | // Set working dir the directory of the main app 2 | process.chdir(__dirname); 3 | 4 | var http = require('http'); 5 | var url = require('url'); 6 | var exec = require('child_process').exec; 7 | var express = require('express'); 8 | var config = require('config'); 9 | var ejs = require('ejs'); 10 | 11 | var app = express(); 12 | 13 | var config = config.get('config'); 14 | 15 | // Get static file direclty from assets directory (Express) 16 | app.use(express.static('assets/')); 17 | 18 | app.get('/', function (req, res) { 19 | res.render('index.ejs', { 20 | links: config.links, 21 | commands: config.commands, 22 | pageTitle: config.pageTitle 23 | }); 24 | }); 25 | 26 | app.get('/info', function (req, res) { 27 | var informations = config.informations; 28 | var infoResults = new Array() 29 | var i; 30 | 31 | function create_child(i) { 32 | var child = exec(informations[i].exec, function (error, stdout, stderr) { 33 | //console.log("order know in callback " + i + " with PID "+ child.pid); 34 | 35 | //Need to store result on the corresponding command using order/i match. 36 | var index = infoResults.findIndex(x => x.order === i); 37 | infoResults[index].result = stdout; 38 | infoResults[index].status = "done"; 39 | 40 | // Return full results only when all async exec are done 41 | if (infoResults.filter(x => x.status == "done").length == informations.length) { 42 | res.json(infoResults); 43 | } 44 | }); 45 | return child; 46 | } 47 | 48 | for (i = 0; i < informations.length; i++) { 49 | var created_child = create_child(i); 50 | //Need to store the PID after creating the child process to match the results with the corresponding command. 51 | var infoResult = {}; 52 | infoResult["order"] = i; 53 | infoResult["label"] = informations[i].label; 54 | infoResult["result"] = ""; 55 | infoResult["status"] = "todo"; 56 | infoResults.push(infoResult); 57 | //console.log("order know in external loop " + i + " with PID "+ created_child.pid); 58 | } 59 | }); 60 | 61 | app.get('/cmd/:requestedPath', function (req, res) { 62 | var command = config.commands.filter(x => x.nickname === req.params.requestedPath).shift(); 63 | if (command) { 64 | var execCmd = command.exec; 65 | child = exec(execCmd, function (error, stdout, stderr) { 66 | var result = { status: (error ? "failure" : "success"), stdout: stdout, stderr: stderr }; 67 | res.json(result); 68 | }); 69 | } 70 | else { 71 | res.send('No command name found matching with the request "' + req.params.requestedPath + '"'); 72 | } 73 | }); 74 | 75 | console.log('BoardControl started and listening on port ' + config.get('listeningPort')); 76 | app.listen(config.get('listeningPort')); 77 | 78 | -------------------------------------------------------------------------------- /assets/browserconfig.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | #ffc40d 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /assets/css/main.css: -------------------------------------------------------------------------------- 1 | /* Global style */ 2 | html { 3 | font-family: ProximaNova,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif; 4 | font-size: 15px; 5 | font-weight: normal; 6 | line-height: 1.5; 7 | -webkit-text-size-adjust: 100%; 8 | background: #fff; 9 | color: #666; 10 | -webkit-font-smoothing: antialiased; 11 | -moz-osx-font-smoothing: grayscale; 12 | text-rendering: optimizeLegibility; 13 | } 14 | 15 | /* UIKit style override */ 16 | h1, .uk-h1 { 17 | font-size: 2rem; 18 | line-height: 1.2; 19 | margin: 0 0 20px 0; 20 | font-weight: 300; 21 | color: #222; 22 | text-transform: none; 23 | } 24 | 25 | h3, .uk-h3 { 26 | margin: 0 0 0 0; 27 | font-weight: 300; 28 | color: #222; 29 | text-transform: none; 30 | } 31 | 32 | .uk-description-list>dt { 33 | font-size: 0.975rem; 34 | } 35 | 36 | .uk-button { 37 | margin-right: 10px; 38 | margin-left: 10px; 39 | } 40 | 41 | .uk-section-small { 42 | padding-top: 10px; 43 | padding-bottom: 10px; 44 | } 45 | 46 | .uk-grid { 47 | margin-left: 0; 48 | } 49 | 50 | *+.uk-grid-margin, .uk-grid+.uk-grid, .uk-grid>.uk-grid-margin { 51 | margin-top: 20px; 52 | } 53 | 54 | .uk-card { 55 | padding-bottom: 10px; 56 | padding-top: 10px; 57 | margin-top: 20px; 58 | margin-bottom: 20px; 59 | } 60 | 61 | .uk-card-body { 62 | padding-right: 15px; 63 | padding-left: 15px; 64 | } 65 | 66 | /* Custom style */ 67 | #clearIcon { 68 | margin-left: 1rem; 69 | display: none; 70 | float: right; 71 | } 72 | 73 | #successIndicator { 74 | display: none; 75 | } 76 | 77 | #failureIndicator { 78 | display: none; 79 | } 80 | 81 | #resultContainer { 82 | display: none; 83 | } 84 | 85 | .linkBehavior { 86 | cursor: pointer; 87 | } 88 | 89 | .mono { 90 | white-space: pre; 91 | font-family: monospace; 92 | overflow: scroll; 93 | } 94 | 95 | .page-container { 96 | padding-top: 20px; 97 | padding-bottom: 20px; 98 | } -------------------------------------------------------------------------------- /assets/img/android-chrome-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lexb2/BoardControl/ff22640482c9a8c4b63168f70b76463848f6dce4/assets/img/android-chrome-192x192.png -------------------------------------------------------------------------------- /assets/img/android-chrome-512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lexb2/BoardControl/ff22640482c9a8c4b63168f70b76463848f6dce4/assets/img/android-chrome-512x512.png -------------------------------------------------------------------------------- /assets/img/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lexb2/BoardControl/ff22640482c9a8c4b63168f70b76463848f6dce4/assets/img/apple-touch-icon.png -------------------------------------------------------------------------------- /assets/img/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lexb2/BoardControl/ff22640482c9a8c4b63168f70b76463848f6dce4/assets/img/favicon-16x16.png -------------------------------------------------------------------------------- /assets/img/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lexb2/BoardControl/ff22640482c9a8c4b63168f70b76463848f6dce4/assets/img/favicon-32x32.png -------------------------------------------------------------------------------- /assets/img/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lexb2/BoardControl/ff22640482c9a8c4b63168f70b76463848f6dce4/assets/img/favicon.ico -------------------------------------------------------------------------------- /assets/img/mstile-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lexb2/BoardControl/ff22640482c9a8c4b63168f70b76463848f6dce4/assets/img/mstile-144x144.png -------------------------------------------------------------------------------- /assets/img/mstile-150x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lexb2/BoardControl/ff22640482c9a8c4b63168f70b76463848f6dce4/assets/img/mstile-150x150.png -------------------------------------------------------------------------------- /assets/img/mstile-310x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lexb2/BoardControl/ff22640482c9a8c4b63168f70b76463848f6dce4/assets/img/mstile-310x150.png -------------------------------------------------------------------------------- /assets/img/mstile-310x310.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lexb2/BoardControl/ff22640482c9a8c4b63168f70b76463848f6dce4/assets/img/mstile-310x310.png -------------------------------------------------------------------------------- /assets/img/mstile-70x70.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lexb2/BoardControl/ff22640482c9a8c4b63168f70b76463848f6dce4/assets/img/mstile-70x70.png -------------------------------------------------------------------------------- /assets/img/safari-pinned-tab.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | 8 | Created by potrace 1.11, written by Peter Selinger 2001-2013 9 | 10 | 12 | 14 | 15 | 16 | 17 | 18 | 26 | 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /assets/js/main.js: -------------------------------------------------------------------------------- 1 | function updateView(elementName, content) { 2 | document.getElementById(elementName).innerHTML = content; 3 | } 4 | 5 | function buildInformationHtml(result) { 6 | if (result.length === 0) { 7 | return; 8 | } 9 | var html = '
'; 10 | var i = 0; 11 | for (i = 0; i < result.length; i++) { 12 | html = html.concat('
' + result[i].label + '
'); 13 | html = html.concat('
' + (result[i].result == "" ? "-" : result[i].result) + '
'); 14 | if (i !== result.length - 1) { 15 | html = html.concat('
'); 16 | } 17 | } 18 | html = html.concat('
'); 19 | return html; 20 | 21 | } 22 | 23 | function getInformationAndPopulateInformationZone() { 24 | var request = new XMLHttpRequest(); 25 | request.open('GET', '/info', true); 26 | request.onload = function () { 27 | if (request.status = 200) { 28 | 29 | var resp = JSON.parse(request.response); 30 | if (resp.length > 0) { 31 | updateView("informationZone", buildInformationHtml(resp)); 32 | } 33 | else { 34 | updateView("informationZone", "No information available"); 35 | } 36 | } else { 37 | // Server returned an error 38 | updateView("informationZone", "Internal server error...please check the query response in console."); 39 | } 40 | }; 41 | 42 | request.onerror = function () { 43 | // Connection error 44 | document.getElementById("informationZone").innerHTML = "Connexion error...please check the query in console."; 45 | }; 46 | 47 | request.send(); 48 | } 49 | 50 | function sendCommandAndPopulateResultZone(commandName) { 51 | 52 | var request = new XMLHttpRequest(); 53 | request.open('GET', '/cmd/' + commandName, true); 54 | request.onload = function () { 55 | if (request.status = 200) { 56 | var resp = JSON.parse(request.response); 57 | 58 | if (resp.status === "success") { 59 | updateView("commandResult", resp.stdout); 60 | } 61 | else { 62 | updateView("commandResult", "Standard error (stderr):
" + resp.stderr + "
Standard output (stdout):
" + resp.stdout); 63 | } 64 | updateResultIndicatorAndStatus(resp.status); 65 | 66 | } else { 67 | // Server returned an error 68 | updateView("commandResult", "Internal server error...please check the query response in console."); 69 | updateResultIndicatorAndStatus("failure"); 70 | } 71 | }; 72 | 73 | request.onerror = function () { 74 | // Connection error 75 | updateView("commandResult", "Connexion error...please check the query in console."); 76 | updateResultIndicatorAndStatus("failure"); 77 | }; 78 | 79 | request.send(); 80 | } 81 | 82 | function updateResultIndicatorAndStatus(status) { 83 | switch (status) { 84 | case "success": 85 | document.getElementById("successIndicator").style.display = "inline"; 86 | document.getElementById("failureIndicator").style.display = "none"; 87 | document.getElementById("clearIcon").style.display = "inline"; 88 | document.getElementById("resultContainer").style.display = "block"; 89 | break; 90 | case "failure": 91 | document.getElementById("successIndicator").style.display = "none"; 92 | document.getElementById("failureIndicator").style.display = "inline"; 93 | document.getElementById("clearIcon").style.display = "inline"; 94 | document.getElementById("resultContainer").style.display = "block"; 95 | break; 96 | default: 97 | document.getElementById("successIndicator").style.display = "none"; 98 | document.getElementById("failureIndicator").style.display = "none"; 99 | document.getElementById("clearIcon").style.display = "none"; 100 | document.getElementById("commandResult").innerHTML = ""; 101 | document.getElementById("resultContainer").style.display = "none"; 102 | 103 | 104 | } 105 | } 106 | 107 | function modifyLinkTarget(event) 108 | { 109 | var target = event.target; 110 | 111 | if (target.tagName.toLowerCase() == 'a') { 112 | var port = target.getAttribute('href').match(/^:(\d+)(.*)/); 113 | if (port) { 114 | target.href = port[2]; 115 | target.port = port[1]; 116 | } 117 | } 118 | 119 | }; 120 | -------------------------------------------------------------------------------- /assets/js/uikit-icons.min.js: -------------------------------------------------------------------------------- 1 | /*! UIkit 3.0.0-beta.42 | http://www.getuikit.com | (c) 2014 - 2017 YOOtheme | MIT License */ 2 | 3 | !function(t,i){"object"==typeof exports&&"undefined"!=typeof module?module.exports=i():"function"==typeof define&&define.amd?define("uikiticons",i):t.UIkitIcons=i()}(this,function(){"use strict";var t={album:' ',ban:' ',behance:' ',bell:' ',bold:' ',bolt:' ',bookmark:' ',calendar:' ',camera:' ',cart:' ',check:' ',clock:' ',close:' ',code:' ',cog:' ',comment:' ',commenting:' ',comments:' ',copy:' ',database:' ',desktop:' ',download:' ',dribbble:' ',expand:' ',facebook:' ',file:' ',flickr:' ',folder:' ',forward:' ',foursquare:' ',future:' ',github:' ',gitter:' ',google:' ',grid:' ',happy:' ',hashtag:' ',heart:' ',history:' ',home:' ',image:' ',info:' ',instagram:' ',italic:' ',joomla:' ',laptop:' ',lifesaver:' ',link:' ',linkedin:' ',list:' ',location:' ',lock:' ',mail:' ',menu:' ',minus:' ',more:' ',move:' ',nut:' ',pagekit:' ',pencil:' ',phone:' ',pinterest:' ',play:' ',plus:' ',pull:' ',push:' ',question:' ',receiver:' ',refresh:' ',reply:' ',rss:' ',search:' ',server:' ',settings:' ',shrink:' ',social:' ',soundcloud:' ',star:' ',strikethrough:' ',table:' ',tablet:' ',tag:' ',thumbnails:' ',trash:' ',tripadvisor:' ',tumblr:' ',tv:' ',twitter:' ',uikit:' ',unlock:' ',upload:' ',user:' ',users:' ',vimeo:' ',warning:' ',whatsapp:' ',wordpress:' ',world:' ',xing:' ',yelp:' ',youtube:' ',"500px":' ',"arrow-down":' ',"arrow-left":' ',"arrow-right":' ',"arrow-up":' ',"chevron-down":' ',"chevron-left":' ',"chevron-right":' ',"chevron-up":' ',"cloud-download":' ',"cloud-upload":' ',"credit-card":' ',"file-edit":' ',"git-branch":' ',"git-fork":' ',"github-alt":' ',"google-plus":' ',"minus-circle":' ',"more-vertical":' ',"paint-bucket":' ',"phone-landscape":' ',"play-circle":' ',"plus-circle":' ',"quote-right":' ',"sign-in":' ',"sign-out":' ',"tablet-landscape":' ',"triangle-down":' ',"triangle-left":' ',"triangle-right":' ',"triangle-up":' ',"video-camera":' '};function i(e){i.installed||e.icon.add(t)}return"undefined"!=typeof window&&window.UIkit&&window.UIkit.use(i),i}); -------------------------------------------------------------------------------- /assets/js/uikit.min.js: -------------------------------------------------------------------------------- 1 | /*! UIkit 3.0.0-beta.42 | http://www.getuikit.com | (c) 2014 - 2017 YOOtheme | MIT License */ 2 | 3 | !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define("uikit",e):t.UIkit=e()}(this,function(){"use strict";function t(t,e){return function(i){var n=arguments.length;return n?n>1?t.apply(e,arguments):t.call(e,i):t.call(e)}}var e=Object.prototype.hasOwnProperty;function i(t,i){return e.call(t,i)}var n=/([a-z\d])([A-Z])/g;function o(t){return t.replace(n,"$1-$2").toLowerCase()}var r=/-(\w)/g;function s(t){return t.replace(r,a)}function a(t,e){return e?e.toUpperCase():""}function l(t){return t.length?a(0,t.charAt(0))+t.slice(1):""}var u=String.prototype,c=u.startsWith||function(t){return 0===this.lastIndexOf(t,0)};function h(t,e){return c.call(t,e)}var d=u.endsWith||function(t){return this.substr(-t.length)===t};function f(t,e){return d.call(t,e)}var p=function(t){return~this.indexOf(t)},m=u.includes||p,g=Array.prototype.includes||p;function v(t,e){return t&&(S(t)?m:g).call(t,e)}var w=Array.isArray;function b(t){return"function"==typeof t}function y(t){return null!==t&&"object"==typeof t}function x(t){return y(t)&&Object.getPrototypeOf(t)===Object.prototype}function k(t){return y(t)&&t===t.window}function $(t){return y(t)&&9===t.nodeType}function I(t){return y(t)&&!!t.jquery}function T(t){return t instanceof Node||y(t)&&1===t.nodeType}function E(t){return t instanceof NodeList||t instanceof HTMLCollection}function C(t){return"boolean"==typeof t}function S(t){return"string"==typeof t}function A(t){return"number"==typeof t}function _(t){return A(t)||S(t)&&!isNaN(t-parseFloat(t))}function N(t){return void 0===t}function D(t){return C(t)?t:"true"===t||"1"===t||""===t||"false"!==t&&"0"!==t&&t}function B(t){var e=Number(t);return!isNaN(e)&&e}function M(t){return parseFloat(t)||0}function O(t){return T(t)||k(t)||$(t)?t:E(t)||I(t)?t[0]:w(t)?O(t[0]):null}var P=Array.prototype;function z(t){return T(t)?[t]:E(t)?P.slice.call(t):w(t)?t.map(O).filter(Boolean):I(t)?t.toArray():[]}function H(t){return w(t)?t:S(t)?t.split(/,(?![^(]*\))/).map(function(t){return _(t)?B(t):D(t.trim())}):[t]}function W(t){return t?f(t,"ms")?M(t):1e3*M(t):0}function L(t,e,i){return t.replace(new RegExp(e+"|"+i,"mg"),function(t){return t===e?i:e})}var j=Object.assign||function(t){for(var e=[],n=arguments.length-1;n-- >0;)e[n]=arguments[n+1];t=Object(t);for(var o=0;oe[o]?i.ratio(t,o,e[o]):t}),t},cover:function(t,e){var i=this;return F(t=this.contain(t,e),function(n,o){return t=t[o]+~]/,rt=/([!>+~])(?=\s+[!>+~]|\s*$)/g;function st(t){return S(t)&&t.match(ot)}var at=Element.prototype,lt=at.matches||at.webkitMatchesSelector||at.msMatchesSelector;function ut(t,e){return z(t).some(function(t){return lt.call(t,e)})}var ct=at.closest||function(t){var e=this;do{if(ut(e,t))return e;e=e.parentNode}while(e&&1===e.nodeType)};function ht(t,e){return h(e,">")&&(e=e.slice(1)),T(t)?t.parentNode&&ct.call(t,e):z(t).map(function(t){return t.parentNode&&ct.call(t,e)}).filter(Boolean)}function dt(t,e){for(var i=[],n=O(t).parentNode;n&&1===n.nodeType;)ut(n,e)&&i.push(n),n=n.parentNode;return i}var ft=window.CSS&&CSS.escape||function(t){return t.replace(/([^\x7f-\uFFFF\w-])/g,function(t){return"\\"+t})};function pt(t){return S(t)?ft.call(null,t):""}var mt={area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,menuitem:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0};function gt(t){return z(t).some(function(t){return mt[t.tagName.toLowerCase()]})}function vt(t){return z(t).some(function(t){return t.offsetHeight||t.getBoundingClientRect().height})}var wt="input,select,textarea,button";function bt(t){return z(t).some(function(t){return ut(t,wt)})}function yt(t,e){return z(t).filter(function(t){return ut(t,e)})}function xt(t,e){return S(e)?ut(t,e)||ht(t,e):t===e||($(e)?e.documentElement:O(e)).contains(O(t))}function kt(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];var i=Ct(t),n=i[0],o=i[1],r=i[2],s=i[3],a=i[4];n=At(n),r&&(s=function(t,e,i){var n=this;return function(o){var r=o.target,s=">"===e[0]?it(e,t).reverse().filter(function(t){return xt(r,t)})[0]:ht(r,e);s&&(o.delegate=t,o.current=s,i.call(n,o))}}(n,r,s)),s.length>1&&(l=s,s=function(t){return w(t.detail)?l.apply(l,[t].concat(t.detail)):l(t)});var l;return o.split(" ").forEach(function(t){return n&&n.addEventListener(t,s,a)}),function(){return $t(n,o,s,a)}}function $t(t,e,i,n){void 0===n&&(n=!1),(t=At(t))&&e.split(" ").forEach(function(e){return t.removeEventListener(e,i,n)})}function It(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];var i=Ct(t),n=i[0],o=i[1],r=i[2],s=i[3],a=i[4],l=i[5],u=kt(n,o,r,function(t){var e=!l||l(t);e&&(u(),s(t,e))},a);return u}function Tt(t,e,i){return _t(t).reduce(function(t,n){return t&&n.dispatchEvent(Et(e,!0,!0,i))},!0)}function Et(t,e,i,n){if(void 0===e&&(e=!0),void 0===i&&(i=!1),S(t)){var o=document.createEvent("CustomEvent");o.initCustomEvent(t,e,i,n),t=o}return t}function Ct(t){return S(t[0])&&(t[0]=et(t[0])),b(t[2])&&t.splice(2,0,!1),t}function St(t){return"EventTarget"in window?t instanceof EventTarget:t&&"addEventListener"in t}function At(t){return St(t)?t:O(t)}function _t(t){return St(t)?[t]:w(t)?t.map(At).filter(Boolean):z(t)}var Nt="Promise"in window?window.Promise:Mt,Dt=2,Bt="setImmediate"in window?setImmediate:setTimeout;function Mt(t){this.state=Dt,this.value=void 0,this.deferred=[];var e=this;try{t(function(t){e.resolve(t)},function(t){e.reject(t)})}catch(t){e.reject(t)}}Mt.reject=function(t){return new Mt(function(e,i){i(t)})},Mt.resolve=function(t){return new Mt(function(e,i){e(t)})},Mt.all=function(t){return new Mt(function(e,i){var n=[],o=0;0===t.length&&e(n);function r(i){return function(r){n[i]=r,(o+=1)===t.length&&e(n)}}for(var s=0;s=200&&r.status<300||304===r.status?i(r):n(j(Error(r.statusText),{xhr:r,status:r.status}))}),kt(r,"error",function(){return n(j(Error("Network Error"),{xhr:r}))}),kt(r,"timeout",function(){return n(j(Error("Network Timeout"),{xhr:r}))}),r.send(o.data)})}function zt(){return"complete"===document.readyState||"loading"!==document.readyState&&!document.documentElement.doScroll}function Ht(t){if(zt())t();else var e=function(){i(),n(),t()},i=kt(document,"DOMContentLoaded",e),n=kt(window,"load",e)}function Wt(t,e){return e?z(t).indexOf(O(e)):z((t=O(t))&&t.parentNode.children).indexOf(t)}function Lt(t,e,i,n){void 0===i&&(i=0),void 0===n&&(n=!1);var o=(e=z(e)).length;return t=_(t)?B(t):"next"===t?i+1:"previous"===t?i-1:Wt(e,t),n?V(t,0,o-1):(t%=o)<0?t+o:t}function jt(t){return(t=O(t)).innerHTML="",t}function Ft(t,e){return t=O(t),N(e)?t.innerHTML:Vt(t.hasChildNodes()?jt(t):t,e)}function Vt(t,e){return t=O(t),qt(e,function(e){return t.appendChild(e)})}function Rt(t,e){return t=O(t),qt(e,function(e){return t.parentNode.insertBefore(e,t)})}function Yt(t,e){return t=O(t),qt(e,function(e){return t.nextSibling?Rt(t.nextSibling,e):Vt(t.parentNode,e)})}function qt(t,e){return(t=S(t)?Kt(t):t)?"length"in t?z(t).map(e):e(t):null}function Ut(t){z(t).map(function(t){return t.parentNode&&t.parentNode.removeChild(t)})}function Xt(t,e){for(e=O(Rt(t,e));e.firstChild;)e=e.firstChild;return Vt(e,t),e}function Jt(t,e){return z(z(t).map(function(t){return t.hasChildNodes?Xt(z(t.childNodes),e):Vt(t,e)}))}function Gt(t){z(t).map(function(t){return t.parentNode}).filter(function(t,e,i){return i.indexOf(t)===e}).forEach(function(t){Rt(t,t.childNodes),Ut(t)})}var Zt=/^\s*<(\w+|!)[^>]*>/,Qt=/^<(\w+)\s*\/?>(?:<\/\1>)?$/;function Kt(t){var e=Qt.exec(t);if(e)return document.createElement(e[1]);var i=document.createElement("div");return Zt.test(t)?i.insertAdjacentHTML("beforeend",t.trim()):i.textContent=t,i.childNodes.length>1?z(i.childNodes):i.firstChild}function te(t,e){if(t&&1===t.nodeType)for(e(t),t=t.firstElementChild;t;)te(t,e),t=t.nextElementSibling}function ee(t){for(var e=[],i=arguments.length-1;i-- >0;)e[i]=arguments[i+1];ae(t,e,"add")}function ie(t){for(var e=[],i=arguments.length-1;i-- >0;)e[i]=arguments[i+1];ae(t,e,"remove")}function ne(t,e){Z(t,"class",new RegExp("(^|\\s)"+e+"(?!\\S)","g"),"")}function oe(t){for(var e=[],i=arguments.length-1;i-- >0;)e[i]=arguments[i+1];e[0]&&ie(t,e[0]),e[1]&&ee(t,e[1])}function re(t,e){return z(t).some(function(t){return t.classList.contains(e)})}function se(t){for(var e=[],i=arguments.length-1;i-- >0;)e[i]=arguments[i+1];if(e.length){var n=S((e=le(e))[e.length-1])?[]:e.pop();e=e.filter(Boolean),z(t).forEach(function(t){for(var i=t.classList,o=0;oa[f]){var g=u[e]/2,w="center"===n[r]?-c[e]/2:0;"center"===i[r]&&(b(g,w)||b(-g,-w))||b(p,m)}}function b(t,i){var n=h[d]+t+i-2*o[r];if(n>=a[d]&&n+u[e]<=a[f])return h[d]=n,["element","target"].forEach(function(i){l[i][r]=t?l[i][r]===_e[e][1]?_e[e][2]:_e[e][1]:l[i][r]}),!0}}),De(t,h),l}function De(t,e){t=O(t);{if(!e)return Be(t);var i=De(t),n=he(t,"position");["left","top"].forEach(function(o){if(o in e){var r=he(t,o);t.style[o]=e[o]-i[o]+M("absolute"===n&&"auto"===r?Me(t)[o]:r)+"px"}})}}function Be(t){var e=Re(t=O(t)),i=e.pageYOffset,n=e.pageXOffset;if(k(t)){var o=t.innerHeight,r=t.innerWidth;return{top:i,left:n,height:o,width:r,bottom:i+o,right:n+r}}var s=!1;vt(t)||(s=t.style.display,t.style.display="block");var a=t.getBoundingClientRect();return!1!==s&&(t.style.display=s),{height:a.height,width:a.width,top:a.top+i,left:a.left+n,bottom:a.bottom+i,right:a.right+n}}function Me(t){var e=function(t){var e=O(t).offsetParent;for(;e&&"static"===he(e,"position");)e=e.offsetParent;return e||qe(t)}(t=O(t)),i=e===qe(t)?{top:0,left:0}:De(e),n=["top","left"].reduce(function(n,o){var r=l(o);return n[o]-=i[o]+(M(he(t,"margin"+r))||0)+(M(he(e,"border"+r+"Width"))||0),n},De(t));return{top:n.top,left:n.left}}var Oe=ze("height"),Pe=ze("width");function ze(t){var e=l(t);return function(i,n){if(i=O(i),N(n)){if(k(i))return i["inner"+e];if($(i)){var o=i.documentElement;return Math.max(o["offset"+e],o["scroll"+e])}return(n="auto"===(n=he(i,t))?i["offset"+e]:M(n)||0)-He(t,i)}he(i,t,n||0===n?+n+He(t,i)+"px":"")}}function He(t,e){return"border-box"===he(e,"boxSizing")?_e[t].slice(1).map(l).reduce(function(t,i){return t+M(he(e,"padding"+i))+M(he(e,"border"+i+"Width"))},0):0}function We(t,e,i,n){F(_e,function(o,r){var s=o[0],a=o[1],l=o[2];e[s]===l?t[a]+=i[r]*n:"center"===e[s]&&(t[a]+=i[r]*n/2)})}function Le(t){var e=/left|center|right/,i=/top|center|bottom/;return 1===(t=(t||"").split(" ")).length&&(t=e.test(t[0])?t.concat(["center"]):i.test(t[0])?["center"].concat(t):["center","center"]),{x:e.test(t[0])?t[0]:"center",y:i.test(t[1])?t[1]:"center"}}function je(t,e,i){var n=(t||"").split(" "),o=n[0],r=n[1];return{x:o?M(o)*(f(o,"%")?e/100:1):0,y:r?M(r)*(f(r,"%")?i/100:1):0}}function Fe(t){switch(t){case"left":return"right";case"right":return"left";case"top":return"bottom";case"bottom":return"top";default:return t}}function Ve(t,e,i){void 0===e&&(e=0),void 0===i&&(i=0);var n=Re(t=O(t));return vt(t)&&Y(t.getBoundingClientRect(),{top:e,left:i,bottom:e+Oe(n),right:i+Pe(n)})}function Re(t){return k(t)?t:Ye(t).defaultView}function Ye(t){return O(t).ownerDocument}function qe(t){return Ye(t).documentElement}var Ue="rtl"===X(document.documentElement,"dir"),Xe="ontouchstart"in window,Je=window.PointerEvent,Ge=Xe||window.DocumentTouch&&document instanceof DocumentTouch||navigator.maxTouchPoints,Ze=Ge?"mousedown "+(Xe?"touchstart":"pointerdown"):"mousedown",Qe=Ge?"mousemove "+(Xe?"touchmove":"pointermove"):"mousemove",Ke=Ge?"mouseup "+(Xe?"touchend":"pointerup"):"mouseup",ti=Ge&&Je?"pointerenter":"mouseenter",ei=Ge&&Je?"pointerleave":"mouseleave",ii={reads:[],writes:[],read:function(t){return this.reads.push(t),ni(),t},write:function(t){return this.writes.push(t),ni(),t},clear:function(t){return ri(this.reads,t)||ri(this.writes,t)},flush:function(){oi(this.reads),oi(this.writes.splice(0,this.writes.length)),this.scheduled=!1,(this.reads.length||this.writes.length)&&ni()}};function ni(){ii.scheduled||(ii.scheduled=!0,requestAnimationFrame(ii.flush.bind(ii)))}function oi(t){for(var e;e=t.shift();)e()}function ri(t,e){var i=t.indexOf(e);return!!~i&&!!t.splice(i,1)}function si(){}si.prototype={positions:[],position:null,init:function(){var t=this;this.positions=[],this.position=null;var e=!1;this.unbind=kt(document,"mousemove",function(i){e||(setTimeout(function(){var n=Date.now(),o=t.positions.length;o&&n-t.positions[o-1].time>100&&t.positions.splice(0,o),t.positions.push({time:n,x:i.pageX,y:i.pageY}),t.positions.length>5&&t.positions.shift(),e=!1},5),e=!0)})},cancel:function(){this.unbind&&this.unbind()},movesTo:function(t){if(this.positions.length<2)return!1;var e=De(t),i=this.positions[this.positions.length-1],n=this.positions[0];if(e.left<=i.x&&i.x<=e.right&&e.top<=i.y&&i.y<=e.bottom)return!1;var o=[[{x:e.left,y:e.top},{x:e.right,y:e.bottom}],[{x:e.right,y:e.top},{x:e.left,y:e.bottom}]];return e.right<=i.x||(e.left>=i.x?(o[0].reverse(),o[1].reverse()):e.bottom<=i.y?o[0].reverse():e.top>=i.y&&o[1].reverse()),!!o.reduce(function(t,e){return t+(ai(n,e[0])ai(i,e[1]))},0)}};function ai(t,e){return(e.y-t.y)/(e.x-t.x)}var li={};li.args=li.events=li.init=li.created=li.beforeConnect=li.connected=li.ready=li.beforeDisconnect=li.disconnected=li.destroy=function(t,e){return t=t&&!w(t)?[t]:t,e?t?t.concat(e):w(e)?e:[e]:t},li.update=function(t,e){return li.args(t,b(e)?{read:e}:e)},li.props=function(t,e){return w(e)&&(e=e.reduce(function(t,e){return t[e]=String,t},{})),li.methods(t,e)},li.computed=li.defaults=li.methods=function(t,e){return e?t?j({},t,e):e:t};var ui=function(t,e){return N(e)?t:e};function ci(t,e){var n={};if(e.mixins)for(var o=0,r=e.mixins.length;o0)}),kt(document,Qe,function(t){if(!t.defaultPrevented){var e=ki(t),i=e.x,n=e.y;wi.x2=i,wi.y2=n}}),kt(document,Ke,function(t){var e=t.type,i=t.target;wi.type===$i(e)&&(wi.x2&&Math.abs(wi.x1-wi.x2)>30||wi.y2&&Math.abs(wi.y1-wi.y2)>30?mi=setTimeout(function(){wi.el&&(Tt(wi.el,"swipe"),Tt(wi.el,"swipe"+function(t){var e=t.x1,i=t.x2,n=t.y1,o=t.y2;return Math.abs(e-i)>=Math.abs(n-o)?e-i>0?"Left":"Right":n-o>0?"Up":"Down"}(wi))),wi={}}):"last"in wi?(gi=setTimeout(function(){return Tt(wi.el,"tap")}),wi.el&&"mouseup"!==e&&xt(i,wi.el)&&(pi=setTimeout(function(){pi=null,wi.el&&!vi&&Tt(wi.el,"click"),wi={}},350))):wi={})}),kt(document,"touchcancel",bi),kt(window,"scroll",bi)});var yi=!1;kt(document,"touchstart",function(){return yi=!0},!0),kt(document,"click",function(){yi=!1}),kt(document,"touchcancel",function(){return yi=!1},!0);function xi(t){return yi||"touch"===t.pointerType}function ki(t){var e=t.touches,i=t.changedTouches,n=e&&e[0]||i&&i[0]||t;return{x:n.pageX,y:n.pageY}}function $i(t){return t.slice(0,5)}var Ii=Object.freeze({ajax:Pt,getImage:function(t){return new Nt(function(e,i){var n=new Image;n.onerror=i,n.onload=function(){return e(n)},n.src=t})},transition:ye,Transition:xe,animate:Ie,Animation:Ee,attr:X,hasAttr:J,removeAttr:G,filterAttr:Z,data:Q,addClass:ee,removeClass:ie,removeClasses:ne,replaceClass:oe,hasClass:re,toggleClass:se,$:Ce,$$:Se,positionAt:Ne,offset:De,position:Me,height:Oe,width:Pe,flipPosition:Fe,isInView:Ve,scrolledOver:function(t){if(!vt(t))return 0;var e=Re(t=O(t)),i=Ye(t),n=t.offsetHeight,o=function(t){var e=0;do{e+=t.offsetTop}while(t=t.offsetParent);return e}(t),r=Oe(e),s=r+Math.min(0,o-r),a=Math.max(0,r-(Oe(i)-(o+n)));return V((s+e.pageYOffset-o)/((s+(n-(a *",active:!1,animation:[!0],collapsible:!0,multiple:!1,clsOpen:"uk-open",toggle:"> .uk-accordion-title",content:"> .uk-accordion-content",transition:"ease"},computed:{items:function(t,e){return Se(t.targets,e)}},events:[{name:"click",delegate:function(){return this.targets+" "+this.$props.toggle},handler:function(t){t.preventDefault(),this.toggle(Wt(Se(this.targets+" "+this.$props.toggle,this.$el),t.current))}}],connected:function(){if(!1!==this.active){var t=this.items[Number(this.active)];t&&!re(t,this.clsOpen)&&this.toggle(t,!1)}},update:function(){var t=this;this.items.forEach(function(e){return t._toggleImmediate(Ce(t.content,e),re(e,t.clsOpen))});var e=!this.collapsible&&!re(this.items,this.clsOpen)&&this.items[0];e&&this.toggle(e,!1)},methods:{toggle:function(t,e){var i=this,n=Lt(t,this.items),o=yt(this.items,"."+this.clsOpen);(t=this.items[n])&&[t].concat(!this.multiple&&!v(o,t)&&o||[]).forEach(function(n){var r=n===t,s=r&&!re(n,i.clsOpen);if(s||!r||i.collapsible||!(o.length<2)){se(n,i.clsOpen,s);var a=n._wrapper?n._wrapper.firstElementChild:Ce(i.content,n);n._wrapper||(n._wrapper=Xt(a,"
"),X(n._wrapper,"hidden",s?"":null)),i._toggleImmediate(a,!0),i.toggleElement(n._wrapper,s,e).then(function(){re(n,i.clsOpen)===s&&(s||i._toggleImmediate(a,!1),n._wrapper=null,Gt(a))})}})}}})}function Pi(t){t.component("alert",{attrs:!0,mixins:[_i,Di],args:"animation",props:{close:String},defaults:{animation:[!0],selClose:".uk-alert-close",duration:150,hideProps:j({opacity:0},Di.defaults.hideProps)},events:[{name:"click",delegate:function(){return this.selClose},handler:function(t){t.preventDefault(),this.close()}}],methods:{close:function(){var t=this;this.toggleElement(this.$el).then(function(){return t.$destroy(!0)})}}})}function zi(t){Ht(function(){var e=0,i=0;if(kt(window,"load resize",function(e){return t.update(null,e)}),kt(window,"scroll",function(i){i.dir=e<=window.pageYOffset?"down":"up",i.scrollY=e=window.pageYOffset,t.update(null,i)}),kt(document,"animationstart",function(t){var e=t.target;(he(e,"animationName")||"").match(/^uk-.*(left|right)/)&&(i++,he(document.body,"overflowX","hidden"),setTimeout(function(){--i||he(document.body,"overflowX","")},W(he(e,"animationDuration"))+100))},!0),Ge){kt(document,"tap",function(t){var e=t.target;return Se(".uk-hover").forEach(function(t){return!xt(e,t)&&ie(t,"uk-hover")})}),Object.defineProperty(t,"hoverSelector",{set:function(t){kt(document,"tap",t,function(t){return ee(t.current,"uk-hover")})}}),t.hoverSelector=".uk-animation-toggle, .uk-transition-toggle, [uk-hover]"}})}function Hi(t){t.component("cover",{mixins:[_i,t.components.video.options],props:{width:Number,height:Number},defaults:{automute:!0},update:{write:function(){var t=this.$el;if(vt(t)){var e=t.parentNode,i=e.offsetHeight,n=e.offsetWidth;he(he(t,{width:"",height:""}),U.cover({width:this.width||t.clientWidth,height:this.height||t.clientHeight},{width:n+(n%2?1:0),height:i+(i%2?1:0)}))}},events:["load","resize"]},events:{loadedmetadata:function(){this.$emit()}}})}function Wi(t){var e;t.component("drop",{mixins:[Mi,Di],args:"pos",props:{mode:"list",toggle:Boolean,boundary:"query",boundaryAlign:Boolean,delayShow:Number,delayHide:Number,clsDrop:String},defaults:{mode:["click","hover"],toggle:!0,boundary:window,boundaryAlign:!1,delayShow:0,delayHide:800,clsDrop:!1,hoverIdle:200,animation:["uk-animation-fade"],cls:"uk-open"},computed:{clsDrop:function(t){var e=t.clsDrop;return e||"uk-"+this.$options.name},clsPos:function(){return this.clsDrop}},init:function(){this.tracker=new si,ee(this.$el,this.clsDrop)},connected:function(){var e=this.$props.toggle;this.toggle=e&&t.toggle(S(e)?K(e,this.$el):this.$el.previousElementSibling,{target:this.$el,mode:this.mode}),this.updateAria(this.$el)},events:[{name:"click",delegate:function(){return"."+this.clsDrop+"-close"},handler:function(t){t.preventDefault(),this.hide(!1)}},{name:"click",delegate:function(){return'a[href^="#"]'},handler:function(t){if(!t.defaultPrevented){var e=t.target.hash;e||t.preventDefault(),e&&xt(e,this.$el)||this.hide(!1)}}},{name:"beforescroll",handler:function(){this.hide(!1)}},{name:"toggle",self:!0,handler:function(t,e){t.preventDefault(),this.isToggled()?this.hide(!1):this.show(e,!1)}},{name:ti,filter:function(){return v(this.mode,"hover")},handler:function(t){xi(t)||(e&&e!==this&&e.toggle&&v(e.toggle.mode,"hover")&&!xt(t.target,e.toggle.$el)&&!q({x:t.pageX,y:t.pageY},De(e.$el))&&e.hide(!1),t.preventDefault(),this.show(this.toggle))}},{name:"toggleshow",handler:function(t,e){e&&!v(e.target,this.$el)||(t.preventDefault(),this.show(e||this.toggle))}},{name:"togglehide "+ei,handler:function(t,e){xi(t)||e&&!v(e.target,this.$el)||(t.preventDefault(),this.toggle&&v(this.toggle.mode,"hover")&&this.hide())}},{name:"beforeshow",self:!0,handler:function(){this.clearTimers(),Ee.cancel(this.$el),this.position()}},{name:"show",self:!0,handler:function(){this.tracker.init(),this.toggle&&(ee(this.toggle.$el,this.cls),X(this.toggle.$el,"aria-expanded","true")),function(){if(i)return;i=!0,kt(document,"click",function(t){var i,n=t.target,o=t.defaultPrevented;if(!o)for(;e&&e!==i&&!xt(n,e.$el)&&(!e.toggle||!xt(n,e.toggle.$el));)i=e,e.hide(!1)})}()}},{name:"beforehide",self:!0,handler:function(){this.clearTimers()}},{name:"hide",handler:function(t){var i=t.target;this.$el===i?(e=this.isActive()?null:e,this.toggle&&(ie(this.toggle.$el,this.cls),X(this.toggle.$el,"aria-expanded","false"),this.toggle.$el.blur(),Se("a, button",this.toggle.$el).forEach(function(t){return t.blur()})),this.tracker.cancel()):e=null===e&&xt(i,this.$el)&&this.isToggled()?this:e}}],update:{write:function(){this.isToggled()&&!Ee.inProgress(this.$el)&&this.position()},events:["resize"]},methods:{show:function(t,i){var n=this;void 0===i&&(i=!0);var o=function(){return!n.isToggled()&&n.toggleElement(n.$el,!0)},r=function(){if(n.toggle=t||n.toggle,n.clearTimers(),!n.isActive())if(i&&e&&e!==n&&e.isDelaying)n.showTimer=setTimeout(n.show,10);else{if(n.isParentOf(e)){if(!e.hideTimer)return;e.hide(!1)}else if(e&&!n.isChildOf(e)&&!n.isParentOf(e))for(var r;e&&e!==r&&!n.isChildOf(e);)r=e,e.hide(!1);i&&n.delayShow?n.showTimer=setTimeout(o,n.delayShow):o(),e=n}};t&&this.toggle&&t.$el!==this.toggle.$el?(It(this.$el,"hide",r),this.hide(!1)):r()},hide:function(t){var e=this;void 0===t&&(t=!0);var i=function(){return e.toggleNow(e.$el,!1)};this.clearTimers(),this.isDelaying=this.tracker.movesTo(this.$el),t&&this.isDelaying?this.hideTimer=setTimeout(this.hide,this.hoverIdle):t&&this.delayHide?this.hideTimer=setTimeout(i,this.delayHide):i()},clearTimers:function(){clearTimeout(this.showTimer),clearTimeout(this.hideTimer),this.showTimer=null,this.hideTimer=null,this.isDelaying=!1},isActive:function(){return e===this},isChildOf:function(t){return t&&t!==this&&xt(this.$el,t.$el)},isParentOf:function(t){return t&&t!==this&&xt(t.$el,this.$el)},position:function(){ne(this.$el,this.clsDrop+"-(stack|boundary)"),he(this.$el,{top:"",left:"",display:"block"}),se(this.$el,this.clsDrop+"-boundary",this.boundaryAlign);var t=De(this.boundary),e=this.boundaryAlign?t:De(this.toggle.$el);if("justify"===this.align){var i="y"===this.getAxis()?"width":"height";he(this.$el,i,e[i])}else this.$el.offsetWidth>Math.max(t.right-e.left,e.right-t.left)&&ee(this.$el,this.clsDrop+"-stack");this.positionAt(this.$el,this.boundaryAlign?this.boundary:this.toggle.$el,this.boundary),he(this.$el,"display","")}}}),t.drop.getActive=function(){return e};var i}function Li(t){t.component("dropdown",t.components.drop.extend({name:"dropdown"}))}function ji(t){t.component("form-custom",{mixins:[_i],args:"target",props:{target:Boolean},defaults:{target:!1},computed:{input:function(t,e){return Ce(wt,e)},state:function(){return this.input.nextElementSibling},target:function(t,e){var i=t.target;return i&&(!0===i&&this.input.parentNode===e&&this.input.nextElementSibling||K(i,e))}},update:function(){var t=this.target,e=this.input;if(t){var i;t[bt(t)?"value":"textContent"]=e.files&&e.files[0]?e.files[0].name:ut(e,"select")&&(i=Se("option",e).filter(function(t){return t.selected})[0])?i.textContent:e.value}},events:[{name:"focusin focusout mouseenter mouseleave",delegate:wt,handler:function(t){var e=t.type;t.current===this.input&&se(this.state,"uk-"+(v(e,"focus")?"focus":"hover"),v(["focusin","mouseenter"],e))}},{name:"change",handler:function(){this.$emit()}}]})}function Fi(t){t.component("gif",{update:{read:function(t){var e=Ve(this.$el);if(!e||t.isInView===e)return!1;t.isInView=e},write:function(){this.$el.src=this.$el.src},events:["scroll","load","resize"]}})}function Vi(t){t.component("grid",t.components.margin.extend({mixins:[_i],name:"grid",defaults:{margin:"uk-grid-margin",clsStack:"uk-grid-stack"},update:{write:function(t){var e=t.stacks;se(this.$el,this.clsStack,e)},events:["load","resize"]}}))}function Ri(t){t.component("height-match",{args:"target",props:{target:String,row:Boolean},defaults:{target:"> *",row:!0},computed:{elements:function(t,e){return Se(t.target,e)}},update:{read:function(){var t=this,e=!1;return he(this.elements,"minHeight",""),{rows:this.row?this.elements.reduce(function(t,i){return e!==i.offsetTop?t.push([i]):t[t.length-1].push(i),e=i.offsetTop,t},[]).map(function(e){return t.match(e)}):[this.match(this.elements)]}},write:function(t){t.rows.forEach(function(t){var e=t.height;return he(t.elements,"minHeight",e)})},events:["load","resize"]},methods:{match:function(t){if(t.length<2)return{};var e=[],i=0;return t.forEach(function(t){var n,o;vt(t)||(n=X(t,"style"),o=X(t,"hidden"),X(t,{style:(n||"")+";display:block !important;",hidden:null})),i=Math.max(i,t.offsetHeight),e.push(t.offsetHeight),N(n)||X(t,{style:n,hidden:o})}),t=t.filter(function(t,n){return e[n]0&&(t=e(this.$el)+o)}else{var r=De(this.$el).top;rs&&he(this.$el,"minHeight",this.minHeight),i-n>=s&&he(this.$el,"height",t)}},events:["load","resize"]}});function e(t){return t&&t.offsetHeight||0}}var qi='',Ui='',Xi='',Ji='',Gi='',Zi='',Qi='',Ki='',tn='',en='',nn='',on='',rn='',sn='',an='',ln='';function un(t){var e={},i={spinner:an,totop:ln,marker:Xi,"close-icon":qi,"close-large":Ui,"navbar-toggle-icon":Ji,"overlay-icon":Gi,"pagination-next":Zi,"pagination-previous":Qi,"search-icon":Ki,"search-large":tn,"search-navbar":en,"slidenav-next":nn,"slidenav-next-large":on,"slidenav-previous":rn,"slidenav-previous-large":sn};t.component("icon",t.components.svg.extend({attrs:["icon","ratio"],mixins:[_i],name:"icon",args:"icon",props:["icon"],defaults:{exclude:["id","style","class","src","icon"]},init:function(){ee(this.$el,"uk-icon"),Ue&&(this.icon=L(L(this.icon,"left","right"),"previous","next"))},methods:{getSvg:function(){var t=function(t){if(!i[t])return null;e[t]||(e[t]=Ce(i[t].trim()));return e[t]}(this.icon);return t?Nt.resolve(t):Nt.reject("Icon not found.")}}})),["marker","navbar-toggle-icon","overlay-icon","pagination-previous","pagination-next","totop"].forEach(function(t){return n(t)}),["slidenav-previous","slidenav-next"].forEach(function(t){return n(t,{init:function(){ee(this.$el,"uk-slidenav"),re(this.$el,"uk-slidenav-large")&&(this.icon+="-large")}})}),n("search-icon",{init:function(){re(this.$el,"uk-search-icon")&&dt(this.$el,".uk-search-large").length?this.icon="search-large":dt(this.$el,".uk-search-navbar").length&&(this.icon="search-navbar")}}),n("close",{init:function(){this.icon="close-"+(re(this.$el,"uk-close-large")?"large":"icon")}}),n("spinner",{connected:function(){var t=this;this.svg.then(function(e){return 1!==t.ratio&&he(Ce("circle",e),"stroke-width",1/t.ratio)},R)}}),t.icon.add=function(n){Object.keys(n).forEach(function(t){i[t]=n[t],delete e[t]}),t._initialized&&te(document.body,function(e){var i=t.getComponent(e,"icon");i&&i.$reset()})};function n(e,i){t.component(e,t.components.icon.extend({name:e,mixins:i?[i]:[],defaults:{icon:e}}))}}function cn(t){t.component("leader",{mixins:[_i],props:{fill:String,media:"media"},defaults:{fill:"",media:!1,clsWrapper:"uk-leader-fill",clsHide:"uk-leader-hide",attrFill:"data-fill"},computed:{fill:function(t){var e=t.fill;return e||me("leader-fill")}},connected:function(){var t;t=Jt(this.$el,''),this.wrapper=t[0]},disconnected:function(){Gt(this.wrapper.childNodes)},update:[{read:function(t){var e=t.changed,i=t.width,n=i;return{width:i=Math.floor(this.$el.offsetWidth/2),changed:e||n!==i,hide:this.media&&!window.matchMedia(this.media).matches}},write:function(t){se(this.wrapper,this.clsHide,t.hide),t.changed&&(t.changed=!1,X(this.wrapper,this.attrFill,new Array(t.width).join(this.fill)))},events:["load","resize"]}]})}function hn(t){t.component("margin",{props:{margin:String,firstColumn:Boolean},defaults:{margin:"uk-margin-small-top",firstColumn:"uk-first-column"},update:{read:function(t){var e=this.$el.children;if(!e.length||!vt(this.$el))return t.rows=!1;t.stacks=!0;for(var i=[[]],n=0;n=0;s--){var a=i[s];if(!a[0]){a.push(o);break}var l=a[0].getBoundingClientRect();if(r.top>=Math.floor(l.bottom)){i.push([o]);break}if(Math.floor(r.bottom)>l.top){if(t.stacks=!1,r.left
'+e+"
",i);return n.show(),kt(n.$el,"hidden",function(t){t.target===t.currentTarget&&n.$destroy(!0)}),n},t.modal.alert=function(e,i){return i=j({bgClose:!1,escClose:!1,labels:t.modal.labels},i),new Nt(function(n){return kt(t.modal.dialog('
'+(S(e)?e:Ft(e))+'
",i).$el,"hide",n)})},t.modal.confirm=function(e,i){return i=j({bgClose:!1,escClose:!0,labels:t.modal.labels},i),new Nt(function(n,o){var r=t.modal.dialog('
'+(S(e)?e:Ft(e))+'
",i),s=!1;kt(r.$el,"submit","form",function(t){t.preventDefault(),n(),s=!0,r.hide()}),kt(r.$el,"hide",function(){s||o()})})},t.modal.prompt=function(e,i,n){return n=j({bgClose:!1,escClose:!0,labels:t.modal.labels},n),new Nt(function(o){var r=t.modal.dialog('
",n),s=Ce("input",r.$el);s.value=i;var a=!1;kt(r.$el,"submit","form",function(t){t.preventDefault(),o(s.value),a=!0,r.hide()}),kt(r.$el,"hide",function(){a||o(null)})})},t.modal.labels={ok:"Ok",cancel:"Cancel"}}function fn(t){t.component("nav",t.components.accordion.extend({name:"nav",defaults:{targets:"> .uk-parent",toggle:"> a",content:"> ul"}}))}function pn(t){t.component("navbar",{mixins:[_i],props:{dropdown:String,mode:"list",align:String,offset:Number,boundary:Boolean,boundaryAlign:Boolean,clsDrop:String,delayShow:Number,delayHide:Number,dropbar:Boolean,dropbarMode:String,dropbarAnchor:"query",duration:Number},defaults:{dropdown:".uk-navbar-nav > li",align:Ue?"right":"left",clsDrop:"uk-navbar-dropdown",mode:void 0,offset:void 0,delayShow:void 0,delayHide:void 0,boundaryAlign:void 0,flip:"x",boundary:!0,dropbar:!1,dropbarMode:"slide",dropbarAnchor:!1,duration:200},computed:{boundary:function(t,e){var i=t.boundary,n=t.boundaryAlign;return!0===i||n?e:i},pos:function(t){return"bottom-"+t.align}},beforeConnect:function(){var t=this.$props.dropbar;this.dropbar=t&&(S(t)&&K(t,this.$el)||Ce("
")),this.dropbar&&(ee(this.dropbar,"uk-navbar-dropbar"),"slide"===this.dropbarMode&&ee(this.dropbar,"uk-navbar-dropbar-slide"))},disconnected:function(){this.dropbar&&Ut(this.dropbar)},update:function(){t.drop(Se(this.dropdown+" ."+this.clsDrop,this.$el).filter(function(e){return!t.getComponent(e,"drop")&&!t.getComponent(e,"dropdown")}),j({},this.$props,{boundary:this.boundary,pos:this.pos,offset:this.dropbar||this.offset}))},events:[{name:"mouseover",delegate:function(){return this.dropdown},handler:function(t){var e=t.current,i=this.getActive();i&&i.toggle&&!xt(i.toggle.$el,e)&&!i.tracker.movesTo(i.$el)&&i.hide(!1)}},{name:"mouseleave",el:function(){return this.dropbar},handler:function(){var t=this.getActive();t&&!ut(this.dropbar,":hover")&&t.hide()}},{name:"beforeshow",capture:!0,filter:function(){return this.dropbar},handler:function(){this.dropbar.parentNode||Yt(this.dropbarAnchor||this.$el,this.dropbar)}},{name:"show",capture:!0,filter:function(){return this.dropbar},handler:function(t,e){var i=e.$el,n=e.dir;this.clsDrop&&ee(i,this.clsDrop+"-dropbar"),"bottom"===n&&this.transitionTo(i.offsetHeight+M(he(i,"marginTop"))+M(he(i,"marginBottom")),i)}},{name:"beforehide",filter:function(){return this.dropbar},handler:function(t,e){var i=e.$el,n=this.getActive();ut(this.dropbar,":hover")&&n&&n.$el===i&&t.preventDefault()}},{name:"hide",filter:function(){return this.dropbar},handler:function(t,e){var i=e.$el,n=this.getActive();(!n||n&&n.$el===i)&&this.transitionTo(0)}}],methods:{getActive:function(){var e=t.drop.getActive();return e&&v(e.mode,"hover")&&xt(e.toggle.$el,this.$el)&&e},transitionTo:function(t,e){var i=this.dropbar,n=vt(i)?Oe(i):0;return he(e=n"),ee(this.panel.parentNode,this.clsMode)),he(document.documentElement,"overflowY",(!this.clsContentAnimation||this.flip)&&this.scrollbarWidth&&this.overlay?"scroll":""),ee(document.body,this.clsContainer,this.clsFlip,this.clsOverlay),Oe(document.body),ee(this.content,this.clsContentAnimation),ee(this.panel,this.clsSidebarAnimation,"reveal"!==this.mode?this.clsMode:""),ee(this.$el,this.clsOverlay),he(this.$el,"display","block"),Oe(this.$el)}},{name:"hide",self:!0,handler:function(){ie(this.content,this.clsContentAnimation);var t=this.getActive();("none"===this.mode||t&&t!==this&&t!==this.prev)&&Tt(this.panel,"transitionend")}},{name:"hidden",self:!0,handler:function(){if("reveal"===this.mode&&Gt(this.panel),this.overlay){if(!mn){var t=this.content,e=t.scrollLeft,i=t.scrollTop;mn={x:e,y:i}}}else mn={x:window.pageXOffset,y:window.pageYOffset};ie(this.panel,this.clsSidebarAnimation,this.clsMode),ie(this.$el,this.clsOverlay),he(this.$el,"display",""),ie(document.body,this.clsContainer,this.clsFlip,this.clsOverlay),document.body.scrollTop=mn.y,he(document.documentElement,"overflowY",""),Pe(this.content,""),Oe(this.content,""),window.scrollTo(mn.x,mn.y),mn=null}},{name:"swipeLeft swipeRight",handler:function(t){this.isToggled()&&xi(t)&&("swipeLeft"===t.type&&!this.flip||"swipeRight"===t.type&&this.flip)&&this.hide()}}]})}function vn(t){t.component("responsive",{props:["width","height"],init:function(){ee(this.$el,"uk-responsive-width")},update:{read:function(){return!!(vt(this.$el)&&this.width&&this.height)&&{width:Pe(this.$el.parentNode),height:this.height}},write:function(t){Oe(this.$el,U.contain({height:this.height,width:this.width},t).height)},events:["load","resize"]}})}function wn(t){t.component("scroll",{props:{duration:Number,offset:Number},defaults:{duration:1e3,offset:0},methods:{scrollTo:function(t){var e=this;t=t&&Ce(t)||document.body;var i=Oe(document),n=Oe(window),o=De(t).top-this.offset;if(o+n>i&&(o=i-n),Tt(this.$el,"beforescroll",[this,t])){var r=Date.now(),s=window.pageYOffset,a=function(){var i,n=s+(o-s)*(i=V((Date.now()-r)/e.duration),.5*(1-Math.cos(Math.PI*i)));window.scrollTo(window.pageXOffset,n),n!==o?requestAnimationFrame(a):Tt(e.$el,"scrolled",[e,t])};a()}}},events:{click:function(t){t.defaultPrevented||(t.preventDefault(),this.scrollTo(pt(this.$el.hash).substr(1)))}}})}function bn(t){t.component("scrollspy",{args:"cls",props:{cls:"list",target:String,hidden:Boolean,offsetTop:Number,offsetLeft:Number,repeat:Boolean,delay:Number},defaults:{cls:[],target:!1,hidden:!0,offsetTop:0,offsetLeft:0,repeat:!1,delay:0,inViewClass:"uk-scrollspy-inview"},computed:{elements:function(t,e){var i=t.target;return i?Se(i,e):[e]}},update:[{write:function(){this.hidden&&he(yt(this.elements,":not(."+this.inViewClass+")"),"visibility","hidden")}},{read:function(e){var i=this;if(!t._initialized)return"complete"===document.readyState&&requestAnimationFrame(function(){return i.$emit()}),!1;this.elements.forEach(function(t,n){var o=e[n];if(!o||o.el!==t){var r=Q(t,"uk-scrollspy-class");o={el:t,toggles:r&&r.split(",")||i.cls}}o.show=Ve(t,i.offsetTop,i.offsetLeft),e[n]=o})},write:function(e){var i=this,n=1===this.elements.length?1:0;this.elements.forEach(function(o,r){var s=e[r],a=s.toggles[r]||s.toggles[0];if(!s.show||s.inview||s.timer)!s.show&&s.inview&&i.repeat&&(s.timer&&(clearTimeout(s.timer),delete s.timer),he(o,"visibility",i.hidden?"hidden":""),ie(o,i.inViewClass),se(o,a),Tt(o,"outview"),t.update(o),s.inview=!1);else{var l=function(){he(o,"visibility",""),ee(o,i.inViewClass),se(o,a),Tt(o,"inview"),t.update(o),s.inview=!0,delete s.timer};i.delay&&n?s.timer=setTimeout(l,i.delay*n):l(),n++}})},events:["scroll","load","resize"]}]})}function yn(t){t.component("scrollspy-nav",{props:{cls:String,closest:String,scroll:Boolean,overflow:Boolean,offset:Number},defaults:{cls:"uk-active",closest:!1,scroll:!1,overflow:!0,offset:0},computed:{links:function(t,e){return Se('a[href^="#"]',e).filter(function(t){return t.hash})},elements:function(){return this.closest?ht(this.links,this.closest):this.links},targets:function(){return Se(this.links.map(function(t){return t.hash}).join(","))}},update:[{read:function(){this.scroll&&t.scroll(this.links,{offset:this.offset||0})}},{read:function(t){var e=this,i=window.pageYOffset+this.offset+1,n=Oe(document)-Oe(window)+this.offset;t.active=!1,this.targets.every(function(o,r){var s=De(o).top,a=r+1===e.targets.length;if(!e.overflow&&(0===r&&s>i||a&&s+o.offsetTop=n)for(var l=e.targets.length-1;l>r;l--)if(Ve(e.targets[l])){o=e.targets[l];break}return!(t.active=Ce(yt(e.links,'[href="#'+o.id+'"]')))})},write:function(t){var e=t.active;this.links.forEach(function(t){return t.blur()}),ie(this.elements,this.cls),e&&Tt(this.$el,"active",[e,ee(this.closest?ht(e,this.closest):e,this.cls)])},events:["scroll","load","resize"]}]})}function xn(t){t.component("sticky",{mixins:[_i],attrs:!0,props:{top:null,bottom:Boolean,offset:Number,animation:String,clsActive:String,clsInactive:String,clsFixed:String,clsBelow:String,selTarget:String,widthElement:"query",showOnUp:Boolean,media:"media",target:Number},defaults:{top:0,bottom:!1,offset:0,animation:"",clsActive:"uk-active",clsInactive:"",clsFixed:"uk-sticky-fixed",clsBelow:"uk-sticky-below",selTarget:"",widthElement:!1,showOnUp:!1,media:!1,target:!1},computed:{selTarget:function(t,e){var i=t.selTarget;return i&&Ce(i,e)||e}},connected:function(){this.placeholder=Ce('
'),this.widthElement=this.$props.widthElement||this.placeholder,this.isActive||this.hide()},disconnected:function(){this.isActive&&(this.isActive=!1,this.hide(),ie(this.selTarget,this.clsInactive)),Ut(this.placeholder),this.placeholder=null,this.widthElement=null},ready:function(){var t=this;if(this.target&&location.hash&&window.pageYOffset>0){var e=Ce(location.hash);e&&ii.read(function(){var i=De(e).top,n=De(t.$el).top,o=t.$el.offsetHeight;n+o>=i&&n<=i+e.offsetHeight&&window.scrollTo(0,i-o-t.target-t.offset)})}},events:[{name:"active",self:!0,handler:function(){oe(this.selTarget,this.clsInactive,this.clsActive)}},{name:"inactive",self:!0,handler:function(){oe(this.selTarget,this.clsActive,this.clsInactive)}}],update:[{write:function(){var t=this.placeholder,i=(this.isActive?t:this.$el).offsetHeight;he(t,j({height:"absolute"!==he(this.$el,"position")?i:""},he(this.$el,["marginTop","marginBottom","marginLeft","marginRight"]))),xt(t,document)||(Yt(this.$el,t),X(t,"hidden","")),X(this.widthElement,"hidden",null),this.width=this.widthElement.offsetWidth,X(this.widthElement,"hidden",this.isActive?null:""),this.topOffset=De(this.isActive?t:this.$el).top,this.bottomOffset=this.topOffset+i;var n=e("bottom",this);this.top=Math.max(M(e("top",this)),this.topOffset)-this.offset,this.bottom=n&&n-i,this.inactive=this.media&&!window.matchMedia(this.media).matches,this.isActive&&this.update()},events:["load","resize"]},{read:function(t,e){var i=e.scrollY;return void 0===i&&(i=window.pageYOffset),{scroll:this.scroll=i,visible:vt(this.$el)}},write:function(t,e){var i=this,n=t.visible,o=t.scroll;void 0===e&&(e={});var r=e.dir;if(!(o<0||!n||this.disabled||this.showOnUp&&!r))if(this.inactive||othis.topOffset?(Ee.cancel(this.$el),Ee.out(this.$el,this.animation).then(function(){return i.hide()},R)):this.hide()}else this.isActive?this.update():this.animation?(Ee.cancel(this.$el),this.show(),Ee.in(this.$el,this.animation).catch(R)):this.show()},events:["scroll"]}],methods:{show:function(){this.isActive=!0,this.update(),X(this.placeholder,"hidden",null)},hide:function(){this.isActive&&!re(this.selTarget,this.clsActive)||Tt(this.$el,"inactive"),ie(this.$el,this.clsFixed,this.clsBelow),he(this.$el,{position:"",top:"",width:""}),X(this.placeholder,"hidden","")},update:function(){var t=0!==this.top||this.scroll>this.top,e=Math.max(0,this.offset);this.bottom&&this.scroll>this.bottom-this.offset&&(e=this.bottom-this.scroll),he(this.$el,{position:"fixed",top:e+"px",width:this.width}),re(this.selTarget,this.clsActive)?t||Tt(this.$el,"inactive"):t&&Tt(this.$el,"active"),se(this.$el,this.clsBelow,this.scroll>this.bottomOffset),ee(this.$el,this.clsFixed)}}});function e(t,e){var i=e.$props,n=e.$el,o=e[t+"Offset"],r=i[t];if(r){if(_(r))return o+M(r);if(S(r)&&r.match(/^-?\d+vh$/))return Oe(window)*M(r)/100;var s=!0===r?n.parentNode:K(r,n);return s?De(s).top+s.offsetHeight:void 0}}}var kn={};function $n(t){t.component("svg",{attrs:!0,props:{id:String,icon:String,src:String,style:String,width:Number,height:Number,ratio:Number,class:String},defaults:{ratio:1,id:!1,exclude:["src"],class:""},init:function(){this.class+=" uk-svg"},connected:function(){var t=this;if(!this.icon&&v(this.src,"#")){var n=this.src.split("#");if(n.length>1){var o;o=n,this.src=o[0],this.icon=o[1]}}this.svg=this.getSvg().then(function(n){var o;if(S(n)?(t.icon&&v(n,""}return i[t][n]}(n,t.icon)||n),o=Ce(n.substr(n.indexOf("/g,i={}}function In(t){t.component("switcher",{mixins:[Di],args:"connect",props:{connect:String,toggle:String,active:Number,swiping:Boolean},defaults:{connect:"~.uk-switcher",toggle:"> *",active:0,swiping:!0,cls:"uk-active",clsContainer:"uk-switcher",attrItem:"uk-switcher-item",queued:!0},computed:{connects:function(t,e){return tt(t.connect,e)},toggles:function(t,e){return Se(t.toggle,e)}},events:[{name:"click",delegate:function(){return this.toggle+":not(.uk-disabled)"},handler:function(t){t.preventDefault(),this.show(t.current)}},{name:"click",el:function(){return this.connects},delegate:function(){return"["+this.attrItem+"],[data-"+this.attrItem+"]"},handler:function(t){t.preventDefault(),this.show(Q(t.current,this.attrItem))}},{name:"swipeRight swipeLeft",filter:function(){return this.swiping},el:function(){return this.connects},handler:function(t){xi(t)&&(t.preventDefault(),window.getSelection().toString()||this.show("swipeLeft"===t.type?"next":"previous"))}}],update:function(){var t=this;this.connects.forEach(function(e){return t.updateAria(e.children)}),this.show(yt(this.toggles,"."+this.cls)[0]||this.toggles[this.active]||this.toggles[0])},methods:{show:function(t){for(var e,i=this,n=this.toggles.length,o=!!this.connects.length&&Wt(yt(this.connects[0].children,"."+this.cls)[0]),r=o>=0,s="previous"===t?-1:1,a=Lt(t,this.toggles,o),l=0;l=0&&re(e,this.cls)||o===a||(ie(this.toggles,this.cls),X(this.toggles,"aria-expanded",!1),ee(e,this.cls),X(e,"aria-expanded",!0),this.connects.forEach(function(t){r?i.toggleElement([t.children[o],t.children[a]]):i.toggleNow(t.children[a])}))}}})}function Tn(t){t.component("tab",t.components.switcher.extend({mixins:[_i],name:"tab",props:{media:"media"},defaults:{media:960,attrItem:"uk-tab-item"},init:function(){var e=re(this.$el,"uk-tab-left")?"uk-tab-left":!!re(this.$el,"uk-tab-right")&&"uk-tab-right";e&&t.toggle(this.$el,{cls:e,mode:"media",media:this.media})}}))}function En(t){t.component("toggle",{mixins:[t.mixin.togglable],args:"target",props:{href:String,target:null,mode:"list",media:"media"},defaults:{href:!1,target:!1,mode:"click",queued:!0,media:!1},computed:{target:function(t,e){var i=t.href,n=t.target;return n=tt(n||i,e),n.length&&n||[e]}},events:[{name:ti+" "+ei,filter:function(){return v(this.mode,"hover")},handler:function(t){xi(t)||this.toggle("toggle"+(t.type===ti?"show":"hide"))}},{name:"click",filter:function(){return v(this.mode,"click")||Ge},handler:function(t){if(xi(t)||v(this.mode,"click")){var e;(ht(t.target,'a[href="#"], button')||(e=ht(t.target,"a[href]"))&&(this.cls||!vt(this.target)||e.hash&&ut(this.target,e.hash)))&&It(document,"click",function(t){return t.preventDefault()}),this.toggle()}}}],update:{write:function(){if(v(this.mode,"media")&&this.media){var t=this.isToggled(this.target);(window.matchMedia(this.media).matches?!t:t)&&this.toggle()}},events:["load","resize"]},methods:{toggle:function(t){Tt(this.target,t||"toggle",[this])&&this.toggleElement(this.target)}}})}function Cn(t){t.component("video",{args:"autoplay",props:{automute:Boolean,autoplay:Boolean},defaults:{automute:!1,autoplay:!0},computed:{inView:function(t){return"inview"===t.autoplay}},connected:function(){this.inView&&!J(this.$el,"preload")&&(this.$el.preload="none")},ready:function(){this.player=new di(this.$el),this.automute&&this.player.mute()},update:[{read:function(t,e){var i=e.type;return!(!this.player||!("scroll"!==i&&"resize"!==i||this.inView))&&{visible:vt(this.$el)&&"hidden"!==he(this.$el,"visibility"),inView:this.inView&&Ve(this.$el)}},write:function(t){var e=t.visible,i=t.inView;!e||this.inView&&!i?this.player.pause():(!0===this.autoplay||this.inView&&i)&&this.player.play()},events:["load","resize","scroll"]}]})}Ei.version="3.0.0-beta.42",(Sn=Ei).mixin.class=_i,Sn.mixin.container=Ni,Sn.mixin.modal=Bi,Sn.mixin.position=Mi,Sn.mixin.togglable=Di;var Sn;(An=Ei).use(En),An.use(Oi),An.use(Pi),An.use(Cn),An.use(Hi),An.use(Wi),An.use(Li),An.use(ji),An.use(Ri),An.use(Yi),An.use(hn),An.use(Fi),An.use(Vi),An.use(cn),An.use(dn),An.use(fn),An.use(pn),An.use(gn),An.use(vn),An.use(wn),An.use(bn),An.use(yn),An.use(xn),An.use($n),An.use(un),An.use(In),An.use(Tn),An.use(zi);var An;function _n(t,e){return void 0===t&&(t=0),void 0===e&&(e="%"),"translateX("+t+(t?e:"")+")"}function Nn(t){return"scale3d("+t+", "+t+", 1)"}function Dn(t){if(!Dn.installed){var e=t.util,i=e.$,n=e.assign,o=e.clamp,r=e.fastdom,s=e.getIndex,a=e.hasClass,l=e.isNumber,u=e.isRtl,c=e.Promise,h=e.toNodes,d=e.trigger;t.mixin.slider={attrs:!0,mixins:[function(t){var e=t.util.pointerDown;return{props:{autoplay:Boolean,autoplayInterval:Number,pauseOnHover:Boolean},defaults:{autoplay:!1,autoplayInterval:7e3,pauseOnHover:!0},connected:function(){this.startAutoplay()},disconnected:function(){this.stopAutoplay()},events:[{name:"visibilitychange",el:document,handler:function(){document.hidden?this.stopAutoplay():this.startAutoplay()}},{name:e,handler:"stopAutoplay"},{name:"mouseenter",filter:function(){return this.autoplay},handler:function(){this.isHovering=!0}},{name:"mouseleave",filter:function(){return this.autoplay},handler:function(){this.isHovering=!1}}],methods:{startAutoplay:function(){var t=this;this.stopAutoplay(),this.autoplay&&(this.interval=setInterval(function(){return!(t.isHovering&&t.pauseOnHover)&&!t.stack.length&&t.show("next")},this.autoplayInterval))},stopAutoplay:function(){this.interval&&clearInterval(this.interval)}}}}(t),function(t){var e=t.util,i=e.getPos,n=e.includes,o=e.isRtl,r=e.isTouch,s=e.off,a=e.on,l=e.pointerDown,u=e.pointerMove,c=e.pointerUp,h=e.preventClick,d=e.trigger;return{defaults:{threshold:10,preventCatch:!1},init:function(){var t=this;["start","move","end"].forEach(function(e){var n=t[e];t[e]=function(e){var r=i(e).x*(o?-1:1);t.prevPos=r!==t.pos?t.pos:t.prevPos,t.pos=r,n(e)}})},events:[{name:l,delegate:function(){return this.slidesSelector},handler:function(t){if(!(!r(t)&&(e=t.target,!e.children.length&&e.childNodes.length)||t.button>0||this.length<2||this.preventCatch)){var e;this.start(t)}}},{name:"dragstart",handler:function(t){t.preventDefault()}}],methods:{start:function(){this.drag=this.pos,this._transitioner?(this.percent=this._transitioner.percent(),this.drag+=this._transitioner.getDistance()*this.percent*this.dir,this._transitioner.translate(this.percent),this._transitioner.cancel(),this.dragging=!0,this.stack=[]):this.prevIndex=this.index,this.unbindMove=a(document,u,this.move,{capture:!0,passive:!1}),a(window,"scroll",this.unbindMove),a(document,c,this.end,!0)},move:function(t){var e=this,i=this.pos-this.drag;if(!(0===i||this.prevPos===this.pos||!this.dragging&&Math.abs(i)l;)e.drag-=l*e.dir,r=a,s-=l,a=e.getIndex(r+e.dir,r),l=e._getDistance(r,a)||o[r].offsetWidth;this.percent=s/l;var u,c=o[r],h=o[a],f=this.index!==a,p=r===a;[this.index,this.prevIndex].filter(function(t){return!n([a,r],t)}).forEach(function(t){d(o[t],"itemhidden",[e]),p&&(u=!0,e.prevIndex=r)}),(this.index===r&&this.prevIndex!==r||u)&&d(o[this.index],"itemshown",[this]),f&&(this.prevIndex=r,this.index=a,!p&&d(c,"beforeitemhide",[this]),d(h,"beforeitemshow",[this])),this._transitioner=this._translate(Math.abs(this.percent),c,!p&&h),f&&(!p&&d(c,"itemhide",[this]),d(h,"itemshow",[this]))}},end:function(){if(s(window,"scroll",this.unbindMove),this.unbindMove(),s(document,c,this.end,!0),this.dragging){if(this.dragging=null,this.index===this.prevIndex)this.percent=1-this.percent,this.dir*=-1,this._show(!1,this.index,!0),this._transitioner=null;else{var t=(o?this.dir*(o?1:-1):this.dir)<0==this.prevPos>this.pos;this.index=t?this.index:this.prevIndex,t&&(this.percent=1-this.percent),this.show(this.dir>0&&!t||this.dir<0&&t?"next":"previous",!0)}h()}this.drag=this.percent=null}}}}(t),function(t){var e=t.util,i=e.$,n=e.$$,o=e.data,r=e.html,s=e.toggleClass,a=e.toNumber;return{defaults:{selNav:!1},computed:{nav:function(t,e){var n=t.selNav;return i(n,e)},navItemSelector:function(t){var e=t.attrItem;return"["+e+"],[data-"+e+"]"},navItems:function(t,e){return n(this.navItemSelector,e)}},update:[{write:function(){var t=this;this.nav&&this.length!==this.nav.children.length&&r(this.nav,this.slides.map(function(e,i){return"
  • '}).join("")),s(n(this.navItemSelector,this.$el).concat(this.nav),"uk-hidden",!this.maxIndex),this.updateNav()},events:["load","resize"]}],events:[{name:"click",delegate:function(){return this.navItemSelector},handler:function(t){t.preventDefault(),t.current.blur(),this.show(o(t.current,this.attrItem))}},{name:"itemshow",handler:"updateNav"}],methods:{updateNav:function(){var t=this,e=this.getValidIndex();this.navItems.forEach(function(i){var n=o(i,t.attrItem);s(i,t.clsActive,a(n)===e),s(i,"uk-invisible",t.finite&&("previous"===n&&0===e||"next"===n&&e>=t.maxIndex))})}}}}(t)],props:{clsActivated:Boolean,easing:String,index:Number,finite:Boolean,velocity:Number},defaults:{easing:"ease",finite:!1,velocity:1,index:0,stack:[],percent:0,clsActive:"uk-active",clsActivated:!1,Transitioner:!1,transitionOptions:{}},computed:{duration:function(t,e){var i=t.velocity;return Bn(e.offsetWidth/i)},length:function(){return this.slides.length},list:function(t,e){var n=t.selList;return i(n,e)},maxIndex:function(){return this.length-1},slidesSelector:function(t){return t.selList+" > *"},slides:function(){return h(this.list.children)}},methods:{show:function(t,e){var i=this;if(void 0===e&&(e=!1),!this.dragging&&this.length){var n=this.stack,o=e?0:n.length,s=function(){n.splice(o,1),n.length&&i.show(n.shift(),!0)};if(n[e?"unshift":"push"](t),!e&&n.length>1)2===n.length&&this._transitioner.forward(Math.min(this.duration,200));else{var l=this.index,u=a(this.slides,this.clsActive)&&this.slides[l],h=this.getIndex(t,this.index),f=this.slides[h];if(u!==f){this.dir=(p=t,m=l,"next"===p?1:"previous"===p?-1:p1?"forward":"show"](o>1?Math.min(this.duration,75+75/(o-1)):this.duration,this.percent)},_getDistance:function(t,e){return new this._getTransitioner(t,t!==e&&e).getDistance()},_translate:function(t,e,i){void 0===e&&(e=this.prevIndex),void 0===i&&(i=this.index);var n=this._getTransitioner(e!==i&&e,i);return n.translate(t),n},_getTransitioner:function(t,e,i,n){return void 0===t&&(t=this.prevIndex),void 0===e&&(e=this.index),void 0===i&&(i=this.dir||1),void 0===n&&(n=this.transitionOptions),new this.Transitioner(l(t)?this.slides[t]:t,l(e)?this.slides[e]:e,i*(u?-1:1),n)}}}}}function Bn(t){return.5*t+300}function Mn(t){if(!Mn.installed){t.use(Dn);var e=t.mixin,i=t.util,n=i.addClass,o=i.assign,r=i.fastdom,s=i.isNumber,a=i.removeClass,l=function(t){var e=t.util.css,i={slide:{show:function(t){return[{transform:_n(-100*t)},{transform:_n()}]},percent:function(t){return i.translated(t)},translate:function(t,e){return[{transform:_n(-100*e*t)},{transform:_n(100*e*(1-t))}]}},translated:function(t){return Math.abs(e(t,"transform").split(",")[4]/t.offsetWidth)||0}};return i}(t),u=function(t){var e=t.util,i=e.createEvent,n=e.clamp,o=e.css,r=e.Deferred,s=e.noop,a=e.Promise,l=e.Transition,u=e.trigger;function c(t,e,n){u(t,i(e,!1,!1,n))}return function(t,e,i,u){var h=u.animation,d=u.easing,f=h.percent,p=h.translate,m=h.show;void 0===m&&(m=s);var g=m(i),v=new r;return{dir:i,show:function(o,r,u){var h=this;void 0===r&&(r=0);var f=u?"linear":d;return o-=Math.round(o*n(r,-1,1)),this.translate(r),c(e,"itemin",{percent:r,duration:o,timing:f,dir:i}),c(t,"itemout",{percent:1-r,duration:o,timing:f,dir:i}),a.all([l.start(e,g[1],o,f),l.start(t,g[0],o,f)]).then(function(){h.reset(),v.resolve()},s),v.promise},stop:function(){return l.stop([e,t])},cancel:function(){l.cancel([e,t])},reset:function(){for(var i in g[0])o([e,t],i,"")},forward:function(i,n){return void 0===n&&(n=this.percent()),l.cancel([e,t]),this.show(i,n,!0)},translate:function(n){this.reset();var r=p(n,i);o(e,r[1]),o(t,r[0]),c(e,"itemtranslatein",{percent:n,dir:i}),c(t,"itemtranslateout",{percent:1-n,dir:i})},percent:function(){return f(t||e,e,i)},getDistance:function(){return t.offsetWidth}}}}(t);t.mixin.slideshow={mixins:[e.slider],props:{animation:String},defaults:{animation:"slide",clsActivated:"uk-transition-active",Animations:l,Transitioner:u},computed:{animation:function(t){var e=t.animation,i=t.Animations;return o(e in i?i[e]:i.slide,{name:e})},transitionOptions:function(){return{animation:this.animation}}},events:{"itemshow itemhide itemshown itemhidden":function(e){var i=e.target;t.update(i)},itemshow:function(){s(this.prevIndex)&&r.flush()},beforeitemshow:function(t){var e=t.target;n(e,this.clsActive)},itemshown:function(t){var e=t.target;n(e,this.clsActivated)},itemhidden:function(t){var e=t.target;a(e,this.clsActive,this.clsActivated)}}}}}function On(t){if(!On.installed){t.use(Mn);var e=t.mixin,i=t.util,n=i.$,o=i.addClass,r=i.ajax,s=i.append,a=i.assign,l=i.attr,u=i.css,c=i.getImage,h=i.html,d=i.index,f=i.on,p=i.pointerDown,m=i.pointerMove,g=i.removeClass,v=i.Transition,w=i.trigger,b=function(t){var e=t.mixin,i=t.util,n=i.assign,o=i.css;return n({},e.slideshow.defaults.Animations,{fade:{show:function(){return[{opacity:0},{opacity:1}]},percent:function(t){return 1-o(t,"opacity")},translate:function(t){return[{opacity:1-t},{opacity:t}]}},scale:{show:function(){return[{opacity:0,transform:Nn(.8)},{opacity:1,transform:Nn(1)}]},percent:function(t){return 1-o(t,"opacity")},translate:function(t){return[{opacity:1-t,transform:Nn(1-.2*t)},{opacity:t,transform:Nn(.8+.2*t)}]}}})}(t);t.component("lightbox-panel",{mixins:[e.container,e.modal,e.togglable,e.slideshow],functional:!0,props:{delayControls:Number,preload:Number,videoAutoplay:Boolean,template:String},defaults:{preload:1,videoAutoplay:!1,delayControls:3e3,items:[],cls:"uk-open",clsPage:"uk-lightbox-page",selList:".uk-lightbox-items",attrItem:"uk-lightbox-item",selClose:".uk-close-large",pauseOnHover:!1,velocity:2,Animations:b,template:'
      '},created:function(){var t=this;this.$mount(s(this.container,this.template)),this.caption=n(".uk-lightbox-caption",this.$el),this.items.forEach(function(){return s(t.list,"
    • ")})},events:[{name:m+" "+p+" keydown",handler:"showControls"},{name:"click",self:!0,delegate:function(){return this.slidesSelector},handler:function(t){t.preventDefault(),this.hide()}},{name:"shown",self:!0,handler:"showControls"},{name:"hide",self:!0,handler:function(){this.hideControls(),g(this.slides,this.clsActive),v.stop(this.slides)}},{name:"keyup",el:document,handler:function(t){if(this.isToggled(this.$el))switch(t.keyCode){case 37:this.show("previous");break;case 39:this.show("next")}}},{name:"beforeitemshow",handler:function(t){this.isToggled()||(this.preventCatch=!0,t.preventDefault(),this.toggleNow(this.$el,!0),this.animation=b.scale,g(t.target,this.clsActive),this.stack.splice(1,0,this.index))}},{name:"itemshow",handler:function(t){var e=t.target,i=d(e),n=this.getItem(i).caption;u(this.caption,"display",n?"":"none"),h(this.caption,n);for(var o=0;o<=this.preload;o++)this.loadItem(this.getIndex(i+o)),this.loadItem(this.getIndex(i-o))}},{name:"itemshown",handler:function(){this.preventCatch=!1}},{name:"itemload",handler:function(t,e){var i=this,o=e.source,s=e.type,a=e.alt;if(this.setItem(e,""),o){var u;if("image"===s||o.match(/\.(jp(e)?g|png|gif|svg)$/i))c(o).then(function(t){return i.setItem(e,''+(a||')},function(){return i.setError(e)});else if("video"===s||o.match(/\.(mp4|webm|ogv)$/i)){var h=n("');l(h,"src",o),f(h,"error",function(){return i.setError(e)}),f(h,"loadedmetadata",function(){l(h,{width:h.videoWidth,height:h.videoHeight}),i.setItem(e,h)})}else if("iframe"===s)this.setItem(e,'');else if(u=o.match(/\/\/.*?youtube(-nocookie)?\.[a-z]+\/watch\?v=([^&\s]+)/)||o.match(/()youtu\.be\/(.*)/)){var d=u[2],p=function(t,n){return void 0===t&&(t=640),void 0===n&&(n=450),i.setItem(e,y("//www.youtube"+(u[1]||"")+".com/embed/"+d,t,n,i.videoAutoplay))};c("//img.youtube.com/vi/"+d+"/maxresdefault.jpg").then(function(t){var e=t.width,i=t.height;120===e&&90===i?c("//img.youtube.com/vi/"+d+"/0.jpg").then(function(t){var e=t.width,i=t.height;return p(e,i)},p):p(e,i)},p)}else(u=o.match(/(\/\/.*?)vimeo\.[a-z]+\/([0-9]+).*?/))&&r("//vimeo.com/api/oembed.json?maxwidth=1920&url="+encodeURI(o),{responseType:"json"}).then(function(t){var n=t.response,o=n.height,r=n.width;return i.setItem(e,y("//player.vimeo.com/video/"+u[2],r,o,i.videoAutoplay))})}}}],methods:{loadItem:function(t){void 0===t&&(t=this.index);var e=this.getItem(t);e.content||w(this.$el,"itemload",[e])},getItem:function(t){return void 0===t&&(t=this.index),this.items[t]||{}},setItem:function(e,i){a(e,{content:i});var n=h(this.slides[this.items.indexOf(e)],i);w(this.$el,"itemloaded",[this,n]),t.update(n)},setError:function(t){this.setItem(t,'')},showControls:function(){clearTimeout(this.controlsTimer),this.controlsTimer=setTimeout(this.hideControls,this.delayControls),o(this.$el,"uk-active","uk-transition-active")},hideControls:function(){g(this.$el,"uk-active","uk-transition-active")}}})}function y(t,e,i,n){return''}}function Pn(t){if(!Pn.installed){var e=t.mixin,i=t.util,n=i.css,o=i.Dimensions,r=i.each,s=i.getImage,a=i.includes,l=i.isNumber,u=i.isUndefined,c=i.toFloat,h=["x","y","bgx","bgy","rotate","scale","color","backgroundColor","borderColor","opacity","blur","hue","grayscale","invert","saturate","sepia","fopacity"];e.parallax={props:h.reduce(function(t,e){return t[e]="list",t},{media:"media"}),defaults:h.reduce(function(t,e){return t[e]=void 0,t},{media:!1}),computed:{props:function(t,e){var i=this;return h.reduce(function(o,r){if(u(t[r]))return o;var s,l,h,d=r.match(/color/i),f=d||"opacity"===r,p=t[r].slice(0);f&&n(e,r,""),p.length<2&&p.unshift(("scale"===r?1:f?n(e,r):0)||0);var m=a(p.join(""),"%")?"%":"px";if(d){var g=e.style.color;p=p.map(function(t){return n(n(e,"color",t),"color").split(/[(),]/g).slice(1,-1).concat(1).slice(0,4).map(function(t){return c(t)})}),e.style.color=g}else p=p.map(c);if(r.match(/^bg/))if(n(e,"background-position-"+r[2],""),l=n(e,"backgroundPosition").split(" ")["x"===r[2]?0:1],i.covers){var v=Math.min.apply(Math,p),w=Math.max.apply(Math,p),b=p.indexOf(v)r){var d=parseFloat(l);d&&(e.props[t].steps=u.map(function(t){return t-(h-r)/(100/d)}))}a=o.cover(i,s)}}),n(this.$el,{backgroundSize:a.width+"px "+a.height+"px",backgroundRepeat:"no-repeat"})}else n(this.$el,{backgroundSize:"",backgroundRepeat:""})},events:["load","resize"]}],methods:{reset:function(){var t=this;r(this.getCss(0),function(e,i){return n(t.$el,i,"")})},getCss:function(t){var e=this.props,i=!1;return Object.keys(e).reduce(function(n,o){var r=e[o],s=r.steps,a=r.unit,l=r.pos,u=f(s,t);switch(o){case"x":case"y":if(i)break;var h=["x","y"].map(function(i){return o===i?u+a:e[i]?f(e[i].steps,t)+e[i].unit:0}),p=h[0],m=h[1];i=n.transform+=" translate3d("+p+", "+m+", 0)";break;case"rotate":n.transform+=" rotate("+u+"deg)";break;case"scale":n.transform+=" scale("+u+")";break;case"bgy":case"bgx":n["background-position-"+o[2]]="calc("+l+" + "+(u+a)+")";break;case"color":case"backgroundColor":case"borderColor":var g=d(s,t),v=g[0],w=g[1],b=g[2];n[o]="rgba("+v.map(function(t,e){return t+=b*(w[e]-t),3===e?c(t):parseInt(t,10)}).join(",")+")";break;case"blur":n.filter+=" blur("+u+"px)";break;case"hue":n.filter+=" hue-rotate("+u+"deg)";break;case"fopacity":n.filter+=" opacity("+u+"%)";break;case"grayscale":case"invert":case"saturate":case"sepia":n.filter+=" "+o+"("+u+"%)";break;default:n[o]=u}return n},{transform:"",filter:""})}}}}function d(t,e){var i=t.length-1,n=Math.min(Math.floor(i*e),i-1),o=t.slice(n,n+2);return o.push(1===e?1:e%(1/i)*i),o}function f(t,e){var i=d(t,e),n=i[0],o=i[1],r=i[2];return(l(n)?n+Math.abs(n-o)*r*(n0?1:0),o,s).catch(a)}},{name:"transitioncanceled transitionend",self:!0,el:function(){return this.item},handler:function(){l.cancel(this.$el)}},{name:"itemtranslatein itemtranslateout",self:!0,el:function(){return this.item},handler:function(t){var e=t.type,i=t.detail,n=i.percent,o=i.dir;l.cancel(this.$el),r(this.$el,this.getCss(c(e,o,n)))}}]};function u(t){return s(t,"in")}function c(t,e,i){return i/=2,u(t)?e<0?1-i:i:e<0?i:1-i}}return Ei.use(function t(e){if(!t.installed){var i=e.util,n=i.$,o=i.empty,r=i.html;e.component("countdown",{mixins:[e.mixin.class],attrs:!0,props:{date:String,clsWrapper:String},defaults:{date:"",clsWrapper:".uk-countdown-%unit%"},computed:{date:function(t){var e=t.date;return Date.parse(e)},days:function(t,e){var i=t.clsWrapper;return n(i.replace("%unit%","days"),e)},hours:function(t,e){var i=t.clsWrapper;return n(i.replace("%unit%","hours"),e)},minutes:function(t,e){var i=t.clsWrapper;return n(i.replace("%unit%","minutes"),e)},seconds:function(t,e){var i=t.clsWrapper;return n(i.replace("%unit%","seconds"),e)},units:function(){var t=this;return["days","hours","minutes","seconds"].filter(function(e){return t[e]})}},connected:function(){this.start()},disconnected:function(){var t=this;this.stop(),this.units.forEach(function(e){return o(t[e])})},events:[{name:"visibilitychange",el:document,handler:function(){document.hidden?this.stop():this.start()}}],update:{write:function(){var t=this,e=function(t){var e=t-Date.now();return{total:e,seconds:e/1e3%60,minutes:e/1e3/60%60,hours:e/1e3/60/60%24,days:e/1e3/60/60/24}}(this.date);e.total<=0&&(this.stop(),e.days=e.hours=e.minutes=e.seconds=0),this.units.forEach(function(i){var n=String(Math.floor(e[i]));n=n.length<2?"0"+n:n;var o=t[i];o.textContent!==n&&((n=n.split("")).length!==o.children.length&&r(o,n.map(function(){return""}).join("")),n.forEach(function(t,e){return o.children[e].textContent=t}))})}},methods:{start:function(){var t=this;this.stop(),this.date&&this.units.length&&(this.$emit(),this.timer=setInterval(function(){return t.$emit()},1e3))},stop:function(){this.timer&&(clearInterval(this.timer),this.timer=null)}}})}}),Ei.use(function t(e){if(!t.installed){var i=e.util,n=i.addClass,o=i.css,r=i.scrolledOver,s=i.sortBy,a=i.toFloat;e.component("grid-parallax",e.components.grid.extend({props:{target:String,translate:Number},defaults:{target:!1,translate:150},computed:{translate:function(t){var e=t.translate;return Math.abs(e)}},init:function(){n(this.$el,"uk-grid")},disconnected:function(){this.reset(),o(this.$el,"marginBottom","")},update:[{read:function(t){var e=t.rows;return{columns:e&&e[0]&&e[0].length||0,rows:e&&e.map(function(t){return s(t,"offsetLeft")})}},write:function(t){var e=t.columns;o(this.$el,"marginBottom",e>1?this.translate+a(o(o(this.$el,"marginBottom",""),"marginBottom")):"")},events:["load","resize"]},{read:function(){return{scrolled:r(this.$el)*this.translate}},write:function(t){var e=t.rows,i=t.columns,n=t.scrolled;if(!e||1===i||!n)return this.reset();e.forEach(function(t){return t.forEach(function(t,e){return o(t,"transform","translateY("+(e%2?n:n/8)+"px)")})})},events:["scroll","load","resize"]}],methods:{reset:function(){o(this.$el.children,"transform","")}}})),e.components.gridParallax.options.update.unshift({read:function(){this.reset()},events:["load","resize"]})}}),Ei.use(function t(e){if(!t.installed){e.use(On);var i=e.util,n=i.$$,o=i.assign,r=i.data,s=i.index,a=e.components.lightboxPanel.options;e.component("lightbox",{attrs:!0,props:o({toggle:String},a.props),defaults:o({toggle:"a"},Object.keys(a.props).reduce(function(t,e){return t[e]=a.defaults[e],t},{})),computed:{toggles:function(t,e){var i=t.toggle;return n(i,e)}},disconnected:function(){this._destroy()},events:[{name:"click",delegate:function(){return this.toggle+":not(.uk-disabled)"},handler:function(t){t.preventDefault(),t.current.blur(),this.show(s(this.toggles,t.current))}}],update:function(t){if(t.toggles=t.toggles||this.toggles,this.panel&&this.animation&&(this.panel.$props.animation=this.animation,this.panel.$emit()),this.panel&&(e=t.toggles,i=this.toggles,e.length!==i.length||!e.every(function(t,e){return t===i[e]}))){var e,i;t.toggles=this.toggles,this._destroy(),this._init()}},methods:{_init:function(){return this.panel=this.panel||e.lightboxPanel(o({},this.$props,{items:this.toggles.reduce(function(t,e){return t.push(["href","caption","type","poster","alt"].reduce(function(t,i){return t["href"===i?"source":i]=r(e,i),t},{})),t},[])}))},_destroy:function(){this.panel&&(this.panel.$destroy(!0),this.panel=null)},show:function(t){return this.panel||this._init(),this.panel.show(t)},hide:function(){return this.panel&&this.panel.hide()}}})}}),Ei.use(function t(e){var i;if(!t.installed){var n=e.util,o=n.append,r=n.apply,s=n.closest,a=n.css,l=n.pointerEnter,u=n.pointerLeave,c=n.remove,h=n.toFloat,d=n.Transition,f=n.trigger,p={};e.component("notification",{functional:!0,args:["message","status"],defaults:{message:"",status:"",timeout:5e3,group:null,pos:"top-center",clsClose:"uk-notification-close",clsMsg:"uk-notification-message"},created:function(){p[this.pos]||(p[this.pos]=o(e.container,'
      '));var t=a(p[this.pos],"display","block");this.$mount(o(t,'
      '+this.message+"
      "))},ready:function(){var t=this,e=h(a(this.$el,"marginBottom"));d.start(a(this.$el,{opacity:0,marginTop:-this.$el.offsetHeight,marginBottom:0}),{opacity:1,marginTop:0,marginBottom:e}).then(function(){t.timeout&&(t.timer=setTimeout(t.close,t.timeout))})},events:(i={click:function(t){s(t.target,'a[href="#"]')&&t.preventDefault(),this.close()}},i[l]=function(){this.timer&&clearTimeout(this.timer)},i[u]=function(){this.timeout&&(this.timer=setTimeout(this.close,this.timeout))},i),methods:{close:function(t){var e=this,i=function(){f(e.$el,"close",[e]),c(e.$el),p[e.pos].children.length||a(p[e.pos],"display","none")};this.timer&&clearTimeout(this.timer),t?i():d.start(this.$el,{opacity:0,marginTop:-this.$el.offsetHeight,marginBottom:0}).then(i)}}}),e.notification.closeAll=function(t,i){r(document.body,function(n){var o=e.getComponent(n,"notification");!o||t&&t!==o.group||o.close(i)})}}}),Ei.use(function t(e){if(!t.installed){e.use(Pn);var i=e.mixin,n=e.util,o=n.clamp,r=n.css,s=n.scrolledOver,a=n.query;e.component("parallax",{mixins:[i.parallax],props:{target:String,viewport:Number,easing:Number},defaults:{target:!1,viewport:1,easing:1},computed:{target:function(t,e){var i=t.target;return i&&a(i,e)||e}},update:[{read:function(t){return{prev:t.percent,percent:(e=s(this.target)/(this.viewport||1),i=this.easing,o(e*(1-(i-i*e))))};var e,i},write:function(t,e){var i=t.prev,n=t.percent,o=t.active;"scroll"!==e.type&&(i=!1),o?i!==n&&r(this.$el,this.getCss(n)):this.reset()},events:["scroll","load","resize"]}]})}}),Ei.use(function t(e){if(!t.installed){e.use(Dn);var i=e.mixin,n=e.util,o=n.$,r=n.$$,s=n.addClass,a=n.css,l=n.data,u=n.includes,c=n.isNumeric,h=n.isUndefined,d=n.offset,f=n.toggleClass,p=n.toFloat,m=function(t){var e=t.util,i=e.assign,n=e.clamp,o=e.createEvent,r=e.css,s=e.Deferred,a=e.includes,l=e.index,u=e.isRtl,c=e.noop,h=e.sortBy,d=e.toNodes,f=e.Transition,p=e.trigger,m=i(function(t,e,i,o){var d=o.center,p=o.easing,w=o.list,b=new s,y=t?m.getLeft(t,w,d):m.getLeft(e,w,d)+e.offsetWidth*i,x=e?m.getLeft(e,w,d):y+t.offsetWidth*i*(u?-1:1);return{dir:i,show:function(e,o,r){void 0===o&&(o=0);var s=r?"linear":p;return e-=Math.round(e*n(o,-1,1)),this.translate(o),t&&this.updateTranslates(),o=t?o:n(o,0,1),g(this.getItemIn(),"itemin",{percent:o,duration:e,timing:s,dir:i}),t&&g(this.getItemIn(!0),"itemout",{percent:1-o,duration:e,timing:s,dir:i}),f.start(w,{transform:_n(-x*(u?-1:1),"px")},e,s).then(b.resolve,c),b.promise},stop:function(){return f.stop(w)},cancel:function(){f.cancel(w)},reset:function(){r(w,"transform","")},forward:function(t,e){return void 0===e&&(e=this.percent()),f.cancel(w),this.show(t,e,!0)},translate:function(e){var o=this.getDistance()*i*(u?-1:1);r(w,"transform",_n(n(o-o*e-x,-m.getWidth(w),w.offsetWidth)*(u?-1:1),"px")),this.updateTranslates(),t&&(e=n(e,-1,1),g(this.getItemIn(),"itemtranslatein",{percent:e,dir:i}),g(this.getItemIn(!0),"itemtranslateout",{percent:1-e,dir:i}))},percent:function(){return Math.abs((r(w,"transform").split(",")[4]*(u?-1:1)+y)/(x-y))},getDistance:function(){return Math.abs(x-y)},getItemIn:function(e){void 0===e&&(e=!1);var n=this.getActives(),o=h(v(w),"offsetLeft"),r=l(o,n[i*(e?-1:1)>0?n.length-1:0]);return~r&&o[r+(t&&!e?i:0)]},getActives:function(){var i=m.getLeft(t||e,w,d);return h(v(w).filter(function(t){var e=m.getElLeft(t,w);return e>=i&&e+t.offsetWidth<=w.offsetWidth+i}),"offsetLeft")},updateTranslates:function(){var t=this.getActives();v(w).forEach(function(i){var n=a(t,i);g(i,"itemtranslate"+(n?"in":"out"),{percent:n?1:0,dir:i.offsetLeft<=e.offsetLeft?1:-1})})}}},{getLeft:function(t,e,i){var n=this.getElLeft(t,e);return i?n-this.center(t,e):Math.min(n,this.getMax(e))},getMax:function(t){return Math.max(0,this.getWidth(t)-t.offsetWidth)},getWidth:function(t){return v(t).reduce(function(t,e){return e.offsetWidth+t},0)},getMaxWidth:function(t){return v(t).reduce(function(t,e){return Math.max(t,e.offsetWidth)},0)},center:function(t,e){return e.offsetWidth/2-t.offsetWidth/2},getElLeft:function(t,e){return(t.offsetLeft+(u?t.offsetWidth-e.offsetWidth:0))*(u?-1:1)}});function g(t,e,i){p(t,o(e,!1,!1,i))}function v(t){return d(t.children)}return m}(e);e.component("slider-parallax",Hn(e,"slider")),e.component("slider",{mixins:[i.class,i.slider,zn(e)],props:{center:Boolean,sets:Boolean},defaults:{center:!1,sets:!1,attrItem:"uk-slider-item",selList:".uk-slider-items",selNav:".uk-slider-nav",clsContainer:"uk-slider-container",Transitioner:m},computed:{avgWidth:function(){return m.getWidth(this.list)/this.length},finite:function(t){var e=t.finite;return e||m.getWidth(this.list)o&&(!e.center&&s>e.maxIndex&&(s=e.maxIndex),!u(t,s))){var l=e.slides[s+1];e.center&&l&&a.widtht.maxIndex))})},events:["load","resize"]},events:{beforeitemshow:function(t){!this.dragging&&this.sets&&this.stack.length<2&&!u(this.sets,this.index)&&(this.index=this.getValidIndex());var e=Math.abs(this.index-this.prevIndex+(this.dir>0&&this.indexthis.prevIndex?(this.maxIndex+1)*this.dir:0));if(!this.dragging&&e>1){for(var i=0;i0?"next":"previous");t.preventDefault()}else this.duration=Bn(this.avgWidth/this.velocity)*((this.dir<0||!this.slides[this.prevIndex]?this.slides[this.index]:this.slides[this.prevIndex]).offsetWidth/this.avgWidth),this.reorder()},itemshow:function(){!h(this.prevIndex)&&s(this._getTransitioner().getItemIn(),this.clsActive)},itemshown:function(){var t=this,e=this._getTransitioner(this.index).getActives();this.slides.forEach(function(i){return f(i,t.clsActive,u(e,i))}),(!this.sets||u(this.sets,p(this.index)))&&this.slides.forEach(function(i){return f(i,t.clsActivated,u(e,i))})}},methods:{reorder:function(){var t=this;if(a(this.slides,"order",""),!this.finite){var e=this.dir>0&&this.slides[this.prevIndex]?this.prevIndex:this.index;if(this.slides.forEach(function(i,n){return a(i,"order",t.dir>0&&n=t.index?-1:"")}),this.center)for(var i=this.slides[e],n=this.list.offsetWidth/2-i.offsetWidth/2,o=0;n>0;){var r=t.getIndex(--o+e,e),s=t.slides[r];a(s,"order",r>e?-2:-1),n-=s.offsetWidth}}},getValidIndex:function(t,e){if(void 0===t&&(t=this.index),void 0===e&&(e=this.prevIndex),t=this.getIndex(t,e),!this.sets)return t;var i;do{if(u(this.sets,t))return t;i=t,t=this.getIndex(t+this.dir,e)}while(t!==i);return t}}})}}),Ei.use(function t(e){if(!t.installed){e.use(Mn);var i=e.mixin,n=e.util.height,o=function(t){var e=t.mixin,i=t.util,n=i.assign,o=i.css,r=n({},e.slideshow.defaults.Animations,{fade:{show:function(){return[{opacity:0,zIndex:0},{zIndex:-1}]},percent:function(t){return 1-o(t,"opacity")},translate:function(t){return[{opacity:1-t,zIndex:0},{zIndex:-1}]}},scale:{show:function(){return[{opacity:0,transform:Nn(1.5),zIndex:0},{zIndex:-1}]},percent:function(t){return 1-o(t,"opacity")},translate:function(t){return[{opacity:1-t,transform:Nn(1+.5*t),zIndex:0},{zIndex:-1}]}},pull:{show:function(t){return t<0?[{transform:_n(30),zIndex:-1},{transform:_n(),zIndex:0}]:[{transform:_n(-100),zIndex:0},{transform:_n(),zIndex:-1}]},percent:function(t,e,i){return i<0?1-r.translated(e):r.translated(t)},translate:function(t,e){return e<0?[{transform:_n(30*t),zIndex:-1},{transform:_n(-100*(1-t)),zIndex:0}]:[{transform:_n(100*-t),zIndex:0},{transform:_n(30*(1-t)),zIndex:-1}]}},push:{show:function(t){return t<0?[{transform:_n(100),zIndex:0},{transform:_n(),zIndex:-1}]:[{transform:_n(-30),zIndex:-1},{transform:_n(),zIndex:0}]},percent:function(t,e,i){return i>0?1-r.translated(e):r.translated(t)},translate:function(t,e){return e<0?[{transform:_n(100*t),zIndex:0},{transform:_n(-30*(1-t)),zIndex:-1}]:[{transform:_n(-30*t),zIndex:-1},{transform:_n(100*(1-t)),zIndex:0}]}}});return r}(e);e.component("slideshow-parallax",Hn(e,"slideshow")),e.component("slideshow",{mixins:[i.class,i.slideshow,zn(e)],props:{ratio:String,minHeight:Boolean,maxHeight:Boolean},defaults:{ratio:"16:9",minHeight:!1,maxHeight:!1,selList:".uk-slideshow-items",attrItem:"uk-slideshow-item",selNav:".uk-slideshow-nav",Animations:o},update:{read:function(){var t=this.ratio.split(":").map(Number),e=t[0],i=t[1];return i=i*this.$el.offsetWidth/e,this.minHeight&&(i=Math.max(this.minHeight,i)),this.maxHeight&&(i=Math.min(this.maxHeight,i)),{height:i}},write:function(t){var e=t.height;n(this.list,Math.floor(e))},events:["load","resize"]}})}}),Ei.use(function t(e){var i;if(!t.installed){var n=e.mixin,o=e.util,r=o.addClass,s=o.after,a=o.assign,l=o.append,u=o.attr,c=o.before,h=o.closest,d=o.css,f=o.height,p=o.fastdom,m=o.getPos,g=o.includes,v=o.index,w=o.isInput,b=o.noop,y=o.offset,x=o.off,k=o.on,$=o.pointerDown,I=o.pointerMove,T=o.pointerUp,E=o.position,C=o.preventClick,S=o.Promise,A=o.remove,_=o.removeClass,N=o.toggleClass,D=o.toNodes,B=o.Transition,M=o.trigger,O=o.within;e.component("sortable",{mixins:[n.class],props:{group:String,animation:Number,threshold:Number,clsItem:String,clsPlaceholder:String,clsDrag:String,clsDragState:String,clsBase:String,clsNoDrag:String,clsEmpty:String,clsCustom:String,handle:String},defaults:{group:!1,animation:150,threshold:5,clsItem:"uk-sortable-item",clsPlaceholder:"uk-sortable-placeholder",clsDrag:"uk-sortable-drag",clsDragState:"uk-drag",clsBase:"uk-sortable",clsNoDrag:"uk-sortable-nodrag",clsEmpty:"uk-sortable-empty",clsCustom:"",handle:!1},init:function(){var t=this;["init","start","move","end"].forEach(function(e){var i=t[e];t[e]=function(e){t.scrollY=window.pageYOffset;var n=m(e),o=n.x,r=n.y;t.pos={x:o,y:r},i(e)}})},events:(i={},i[$]="init",i),update:{write:function(){if(this.clsEmpty&&N(this.$el,this.clsEmpty,!this.$el.children.length),this.drag){y(this.drag,{top:this.pos.y+this.origin.top,left:this.pos.x+this.origin.left});var t,e=y(this.drag).top,i=e+this.drag.offsetHeight;e>0&&ef(window)+this.scrollY&&(t=this.scrollY+5),t&&setTimeout(function(){return window.scrollTo(window.scrollX,t)},5)}}},methods:{init:function(t){var e=t.target,i=t.button,n=t.defaultPrevented,o=D(this.$el.children).filter(function(t){return O(e,t)})[0];!o||w(t.target)||this.handle&&!O(e,this.handle)||i>0||O(e,"."+this.clsNoDrag)||n||(t.preventDefault(),this.touched=[this],this.placeholder=o,this.origin=a({target:e,index:v(o)},this.pos),k(document,I,this.move),k(document,T,this.end),k(window,"scroll",this.scroll),this.threshold||this.start(t))},start:function(t){this.drag=l(e.container,this.placeholder.outerHTML.replace(/^
    • $/i,"div>")),d(this.drag,a({boxSizing:"border-box",width:this.placeholder.offsetWidth,height:this.placeholder.offsetHeight},d(this.placeholder,["paddingLeft","paddingRight","paddingTop","paddingBottom"]))),u(this.drag,"uk-no-boot",""),r(this.drag,this.clsDrag,this.clsCustom),f(this.drag.firstElementChild,f(this.placeholder.firstElementChild));var i=y(this.placeholder),n=i.left,o=i.top;a(this.origin,{left:n-this.pos.x,top:o-this.pos.y}),r(this.placeholder,this.clsPlaceholder),r(this.$el.children,this.clsItem),r(document.documentElement,this.clsDragState),M(this.$el,"start",[this,this.placeholder,this.drag]),this.move(t)},move:function(t){if(this.drag){this.$emit();var e="mousemove"===t.type?t.target:document.elementFromPoint(this.pos.x-document.body.scrollLeft,this.pos.y-document.body.scrollTop),i=P(e),n=P(this.placeholder),o=i!==n;if(i&&!O(e,this.placeholder)&&(!o||i.group&&i.group===n.group)){if(e=i.$el===e.parentNode&&e||D(i.$el.children).filter(function(t){return O(e,t)})[0],o)n.remove(this.placeholder);else if(!e)return;i.insert(this.placeholder,e),g(this.touched,i)||this.touched.push(i)}}else(Math.abs(this.pos.x-this.origin.x)>this.threshold||Math.abs(this.pos.y-this.origin.y)>this.threshold)&&this.start(t)},scroll:function(){var t=window.pageYOffset;t!==this.scrollY&&(this.pos.y+=t-this.scrollY,this.scrollY=t,this.$emit())},end:function(t){if(x(document,I,this.move),x(document,T,this.end),x(window,"scroll",this.scroll),this.drag){C();var e=P(this.placeholder);this===e?this.origin.index!==v(this.placeholder)&&M(this.$el,"moved",[this,this.placeholder]):(M(e.$el,"added",[e,this.placeholder]),M(this.$el,"removed",[this,this.placeholder])),M(this.$el,"stop",[this]),A(this.drag),this.drag=null;var i=this.touched.map(function(t){return t.clsPlaceholder+" "+t.clsItem}).join(" ");this.touched.forEach(function(t){return _(t.$el.children,i)}),_(document.documentElement,this.clsDragState)}else"mouseup"!==t.type&&O(t.target,"a[href]")&&(location.href=h(t.target,"a[href]").href)},insert:function(t,e){var i=this;r(this.$el.children,this.clsItem);var n=function(){e?!O(t,i.$el)||(n=t,o=e,n.parentNode===o.parentNode&&v(n)>v(o))?c(e,t):s(e,t):l(i.$el,t);var n,o};this.animation?this.animate(n):n()},remove:function(t){O(t,this.$el)&&(this.animation?this.animate(function(){return A(t)}):A(t))},animate:function(t){var i=this,n=[],o=D(this.$el.children),r={position:"",width:"",height:"",pointerEvents:"",top:"",left:"",bottom:"",right:""};o.forEach(function(t){n.push(a({position:"absolute",pointerEvents:"none",width:t.offsetWidth,height:t.offsetHeight},E(t)))}),t(),o.forEach(B.cancel),d(this.$el.children,r),e.update(this.$el),p.flush(),d(this.$el,"minHeight",f(this.$el));var s=o.map(function(t){return E(t)});S.all(o.map(function(t,e){return B.start(d(t,n[e]),s[e],i.animation)})).then(function(){d(i.$el,"minHeight",""),d(o,r),e.update(i.$el),p.flush()},b)}}})}function P(t){return t&&(e.getComponent(t,"sortable")||P(t.parentNode))}}),Ei.use(function t(e){var i;if(!t.installed){var n=e.util,o=e.mixin,r=n.append,s=n.attr,a=n.flipPosition,l=n.hasAttr,u=n.includes,c=n.isTouch,h=n.isVisible,d=n.matches,f=n.on,p=n.pointerDown,m=n.pointerEnter,g=n.pointerLeave,v=n.remove,w=n.within,b=[];e.component("tooltip",{attrs:!0,args:"title",mixins:[o.container,o.togglable,o.position],props:{delay:Number,title:String},defaults:{pos:"top",title:"",delay:0,animation:["uk-animation-scale-up"],duration:100,cls:"uk-active",clsPos:"uk-tooltip"},beforeConnect:function(){this._hasTitle=l(this.$el,"title"),s(this.$el,{title:"","aria-expanded":!1})},disconnected:function(){this.hide(),s(this.$el,{title:this._hasTitle?this.title:null,"aria-expanded":null})},methods:{show:function(){var t=this;u(b,this)||(b.forEach(function(t){return t.hide()}),b.push(this),this._unbind=f(document,"click",function(e){return!w(e.target,t.$el)&&t.hide()}),clearTimeout(this.showTimer),this.tooltip=r(this.container,'
      '+this.title+"
      "),s(this.$el,"aria-expanded",!0),this.positionAt(this.tooltip,this.$el),this.origin="y"===this.getAxis()?a(this.dir)+"-"+this.align:this.align+"-"+a(this.dir),this.showTimer=setTimeout(function(){t.toggleElement(t.tooltip,!0),t.hideTimer=setInterval(function(){h(t.$el)||t.hide()},150)},this.delay))},hide:function(){var t=b.indexOf(this);!~t||d(this.$el,"input")&&this.$el===document.activeElement||(b.splice(t,1),clearTimeout(this.showTimer),clearInterval(this.hideTimer),s(this.$el,"aria-expanded",!1),this.toggleElement(this.tooltip,!1),this.tooltip&&v(this.tooltip),this.tooltip=!1,this._unbind())}},events:(i={},i["focus "+m+" "+p]=function(t){t.type===p&&c(t)||this.show()},i.blur="hide",i[g]=function(t){c(t)||this.hide()},i)})}}),Ei.use(function t(e){if(!t.installed){var i=e.util,n=i.addClass,o=i.ajax,r=i.matches,s=i.noop,a=i.on,l=i.removeClass,u=i.trigger;e.component("upload",{props:{allow:String,clsDragover:String,concurrent:Number,maxSize:Number,method:String,mime:String,msgInvalidMime:String,msgInvalidName:String,msgInvalidSize:String,multiple:Boolean,name:String,params:Object,type:String,url:String},defaults:{allow:!1,clsDragover:"uk-dragover",concurrent:1,maxSize:0,method:"POST",mime:!1,msgInvalidMime:"Invalid File Type: %s",msgInvalidName:"Invalid File Name: %s",msgInvalidSize:"Invalid File Size: %s Bytes Max",multiple:!1,name:"files[]",params:{},type:"",url:"",abort:s,beforeAll:s,beforeSend:s,complete:s,completeAll:s,error:s,fail:s,load:s,loadEnd:s,loadStart:s,progress:s},events:{change:function(t){r(t.target,'input[type="file"]')&&(t.preventDefault(),t.target.files&&this.upload(t.target.files),t.target.value="")},drop:function(t){h(t);var e=t.dataTransfer;e&&e.files&&(l(this.$el,this.clsDragover),this.upload(e.files))},dragenter:function(t){h(t)},dragover:function(t){h(t),n(this.$el,this.clsDragover)},dragleave:function(t){h(t),l(this.$el,this.clsDragover)}},methods:{upload:function(t){var e=this;if(t.length){u(this.$el,"upload",[t]);for(var i=0;i/ :]//g'" 74 | }, 75 | { 76 | "label": "Local IP address", 77 | "exec": "ifconfig | grep -E \"([0-9]{1,3}\\.){3}[0-9]{1,3}\" | grep -v 127.0.0.1 | awk '{ print $2 }' | cut -f2 -d: | head -n1" 78 | } 79 | 80 | ] 81 | } 82 | } 83 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "BoardControl", 3 | "version": "0.1.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "accepts": { 8 | "version": "1.2.13", 9 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.2.13.tgz", 10 | "integrity": "sha1-5fHzkoxtlf2WVYw27D2dDeSm7Oo=", 11 | "requires": { 12 | "mime-types": "2.1.18", 13 | "negotiator": "0.5.3" 14 | } 15 | }, 16 | "config": { 17 | "version": "1.30.0", 18 | "resolved": "https://registry.npmjs.org/config/-/config-1.30.0.tgz", 19 | "integrity": "sha1-HWCp81NIoTwXV5jThOgaWhbDum4=", 20 | "requires": { 21 | "json5": "0.4.0", 22 | "os-homedir": "1.0.2" 23 | } 24 | }, 25 | "content-disposition": { 26 | "version": "0.5.0", 27 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.0.tgz", 28 | "integrity": "sha1-QoT+auBjCHRjnkToCkGMKTQTXp4=" 29 | }, 30 | "cookie": { 31 | "version": "0.1.2", 32 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.1.2.tgz", 33 | "integrity": "sha1-cv7D0k5Io0Mgc9kMEmQgBQYQBLE=" 34 | }, 35 | "cookie-signature": { 36 | "version": "1.0.5", 37 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.5.tgz", 38 | "integrity": "sha1-oSLj8VA+yg9TVXlbBxG7I2jUUPk=" 39 | }, 40 | "crc": { 41 | "version": "3.2.1", 42 | "resolved": "https://registry.npmjs.org/crc/-/crc-3.2.1.tgz", 43 | "integrity": "sha1-XZyPt3okXNXsopHl0tAFM0urAII=" 44 | }, 45 | "debug": { 46 | "version": "2.1.3", 47 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.1.3.tgz", 48 | "integrity": "sha1-zoqxte6PvuK/o7Yzyrk9NmtjQY4=", 49 | "requires": { 50 | "ms": "0.7.0" 51 | } 52 | }, 53 | "depd": { 54 | "version": "1.0.1", 55 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.0.1.tgz", 56 | "integrity": "sha1-gK7GTJ1tl+ZcwqnKqTwKpqv3Oqo=" 57 | }, 58 | "destroy": { 59 | "version": "1.0.3", 60 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.3.tgz", 61 | "integrity": "sha1-tDO0ck5x/YVR2YhRdIUcX8N34sk=" 62 | }, 63 | "ee-first": { 64 | "version": "1.1.0", 65 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.0.tgz", 66 | "integrity": "sha1-ag18YiHkkP7v2S7D9EHJzozQl/Q=" 67 | }, 68 | "ejs": { 69 | "version": "2.1.4", 70 | "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.1.4.tgz", 71 | "integrity": "sha1-vQBf8XtiGpbtKWcUsahP2uGykyw=" 72 | }, 73 | "escape-html": { 74 | "version": "1.0.1", 75 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.1.tgz", 76 | "integrity": "sha1-GBoobq05ejmpKFfPsdQwUuNWv/A=" 77 | }, 78 | "etag": { 79 | "version": "1.5.1", 80 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.5.1.tgz", 81 | "integrity": "sha1-VMUN4E7kJpVWKSWsVmWIKRvn6eo=", 82 | "requires": { 83 | "crc": "3.2.1" 84 | } 85 | }, 86 | "express": { 87 | "version": "4.11.2", 88 | "resolved": "https://registry.npmjs.org/express/-/express-4.11.2.tgz", 89 | "integrity": "sha1-jfPVqayEhYXwCgd3YBgj+uzTsUg=", 90 | "requires": { 91 | "accepts": "1.2.13", 92 | "content-disposition": "0.5.0", 93 | "cookie": "0.1.2", 94 | "cookie-signature": "1.0.5", 95 | "debug": "2.1.3", 96 | "depd": "1.0.1", 97 | "escape-html": "1.0.1", 98 | "etag": "1.5.1", 99 | "finalhandler": "0.3.3", 100 | "fresh": "0.2.4", 101 | "media-typer": "0.3.0", 102 | "merge-descriptors": "0.0.2", 103 | "methods": "1.1.2", 104 | "on-finished": "2.2.1", 105 | "parseurl": "1.3.2", 106 | "path-to-regexp": "0.1.3", 107 | "proxy-addr": "1.0.10", 108 | "qs": "2.3.3", 109 | "range-parser": "1.0.3", 110 | "send": "0.11.1", 111 | "serve-static": "1.8.1", 112 | "type-is": "1.5.7", 113 | "utils-merge": "1.0.0", 114 | "vary": "1.0.1" 115 | } 116 | }, 117 | "finalhandler": { 118 | "version": "0.3.3", 119 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-0.3.3.tgz", 120 | "integrity": "sha1-saCaoeamB7NUFmmwm8tyf0YM1CY=", 121 | "requires": { 122 | "debug": "2.1.3", 123 | "escape-html": "1.0.1", 124 | "on-finished": "2.2.1" 125 | } 126 | }, 127 | "forwarded": { 128 | "version": "0.1.2", 129 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", 130 | "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" 131 | }, 132 | "fresh": { 133 | "version": "0.2.4", 134 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.2.4.tgz", 135 | "integrity": "sha1-NYJJkgbJcjcUGQ7ddLRgT+tKYUw=" 136 | }, 137 | "ipaddr.js": { 138 | "version": "1.0.5", 139 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.0.5.tgz", 140 | "integrity": "sha1-X6eM8wG4JceKvDBC2BJyMEnqI8c=" 141 | }, 142 | "json5": { 143 | "version": "0.4.0", 144 | "resolved": "https://registry.npmjs.org/json5/-/json5-0.4.0.tgz", 145 | "integrity": "sha1-BUNS5MTIDIbAkjh31EneF2pzLI0=" 146 | }, 147 | "media-typer": { 148 | "version": "0.3.0", 149 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 150 | "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" 151 | }, 152 | "merge-descriptors": { 153 | "version": "0.0.2", 154 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-0.0.2.tgz", 155 | "integrity": "sha1-w2pSp4FDdRPFcnXzndnTF1FKyMc=" 156 | }, 157 | "methods": { 158 | "version": "1.1.2", 159 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 160 | "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" 161 | }, 162 | "mime": { 163 | "version": "1.2.11", 164 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.2.11.tgz", 165 | "integrity": "sha1-WCA+7Ybjpe8XrtK32evUfwpg3RA=" 166 | }, 167 | "mime-db": { 168 | "version": "1.33.0", 169 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", 170 | "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==" 171 | }, 172 | "mime-types": { 173 | "version": "2.1.18", 174 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", 175 | "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", 176 | "requires": { 177 | "mime-db": "1.33.0" 178 | } 179 | }, 180 | "ms": { 181 | "version": "0.7.0", 182 | "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.0.tgz", 183 | "integrity": "sha1-hlvpTC5zl62KV9pqYzpuLzB5i4M=" 184 | }, 185 | "negotiator": { 186 | "version": "0.5.3", 187 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.5.3.tgz", 188 | "integrity": "sha1-Jp1cR2gQ7JLtvntsLygxY4T5p+g=" 189 | }, 190 | "on-finished": { 191 | "version": "2.2.1", 192 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.2.1.tgz", 193 | "integrity": "sha1-XIXBzDYpn3gCllP2Z/J7a5nrwCk=", 194 | "requires": { 195 | "ee-first": "1.1.0" 196 | } 197 | }, 198 | "os-homedir": { 199 | "version": "1.0.2", 200 | "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", 201 | "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" 202 | }, 203 | "parseurl": { 204 | "version": "1.3.2", 205 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", 206 | "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" 207 | }, 208 | "path-to-regexp": { 209 | "version": "0.1.3", 210 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.3.tgz", 211 | "integrity": "sha1-IbmrgidCed4lsVbqCP0SylG4rss=" 212 | }, 213 | "proxy-addr": { 214 | "version": "1.0.10", 215 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-1.0.10.tgz", 216 | "integrity": "sha1-DUCoL4Afw1VWfS7LZe/j8HfxIcU=", 217 | "requires": { 218 | "forwarded": "0.1.2", 219 | "ipaddr.js": "1.0.5" 220 | } 221 | }, 222 | "qs": { 223 | "version": "2.3.3", 224 | "resolved": "https://registry.npmjs.org/qs/-/qs-2.3.3.tgz", 225 | "integrity": "sha1-6eha2+ddoLvkyOBHaghikPhjtAQ=" 226 | }, 227 | "range-parser": { 228 | "version": "1.0.3", 229 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.0.3.tgz", 230 | "integrity": "sha1-aHKCNTXGkuLCoBA4Jq/YLC4P8XU=" 231 | }, 232 | "send": { 233 | "version": "0.11.1", 234 | "resolved": "https://registry.npmjs.org/send/-/send-0.11.1.tgz", 235 | "integrity": "sha1-G+q/1C+eJwn5kCivMHisErRwktU=", 236 | "requires": { 237 | "debug": "2.1.3", 238 | "depd": "1.0.1", 239 | "destroy": "1.0.3", 240 | "escape-html": "1.0.1", 241 | "etag": "1.5.1", 242 | "fresh": "0.2.4", 243 | "mime": "1.2.11", 244 | "ms": "0.7.0", 245 | "on-finished": "2.2.1", 246 | "range-parser": "1.0.3" 247 | } 248 | }, 249 | "serve-static": { 250 | "version": "1.8.1", 251 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.8.1.tgz", 252 | "integrity": "sha1-CPq9OZmfBQ/DEUQ/RtWIinfs/Hw=", 253 | "requires": { 254 | "escape-html": "1.0.1", 255 | "parseurl": "1.3.2", 256 | "send": "0.11.1", 257 | "utils-merge": "1.0.0" 258 | } 259 | }, 260 | "type-is": { 261 | "version": "1.5.7", 262 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.5.7.tgz", 263 | "integrity": "sha1-uTaKWTzG730GReeLL0xky+zQXpA=", 264 | "requires": { 265 | "media-typer": "0.3.0", 266 | "mime-types": "2.0.14" 267 | }, 268 | "dependencies": { 269 | "mime-db": { 270 | "version": "1.12.0", 271 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.12.0.tgz", 272 | "integrity": "sha1-PQxjGA9FjrENMlqqN9fFiuMS6dc=" 273 | }, 274 | "mime-types": { 275 | "version": "2.0.14", 276 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.0.14.tgz", 277 | "integrity": "sha1-MQ4VnbI+B3+Lsit0jav6SVcUCqY=", 278 | "requires": { 279 | "mime-db": "1.12.0" 280 | } 281 | } 282 | } 283 | }, 284 | "utils-merge": { 285 | "version": "1.0.0", 286 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz", 287 | "integrity": "sha1-ApT7kiu5N1FTVBxPcJYjHyh8ivg=" 288 | }, 289 | "vary": { 290 | "version": "1.0.1", 291 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.0.1.tgz", 292 | "integrity": "sha1-meSYFWaihhGN+yuBc1ffeZM3bRA=" 293 | } 294 | } 295 | } 296 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "boardcontrol", 3 | "version": "0.1.0", 4 | "dependencies": { 5 | "config": "^3.2.4", 6 | "ejs": "^3.0.1", 7 | "express": "^4.17.1" 8 | }, 9 | "author": "lexb2", 10 | "description": "Control and monitor any GNU/Linux system from a Web UI using bash commands to do action or display information." 11 | } 12 | -------------------------------------------------------------------------------- /screenshot/UI_desktop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lexb2/BoardControl/ff22640482c9a8c4b63168f70b76463848f6dce4/screenshot/UI_desktop.png -------------------------------------------------------------------------------- /screenshot/UI_mobile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lexb2/BoardControl/ff22640482c9a8c4b63168f70b76463848f6dce4/screenshot/UI_mobile.png -------------------------------------------------------------------------------- /views/index.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | <%= pageTitle %> 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 |
      35 |
      36 | 37 |
        38 | <%= pageTitle %> 39 |
      40 |
      41 |
      42 | 45 |
      46 |
      47 | 48 |
      49 |
      50 |
      51 |
      52 |
      53 |
      54 | <% links.forEach(function(link, index) { %> 55 | target="_blank" rel=”noopener”<% } %> > 56 | <%= link.label %> 57 | 58 | <% }); %> 59 |
      60 |
      61 |
      62 |
      63 |
      64 | 65 |
      66 |
      67 |
      68 |
      69 |
      70 | <% commands.forEach(function(command, index) { %> 71 | 74 | 75 | <% }); %> 76 |
      77 |
      78 |
      79 |
      80 |
      81 | 82 |
      83 |
      84 |
      85 |
      86 | Success 87 | Error 88 | 89 | 90 | 91 |
      92 |
      93 |
      94 |
      95 |
      96 |
      97 | 98 |
      99 |
      100 |
      101 |
      102 |
      103 |
      104 |
      105 |
      106 |
      107 |
      108 | 109 |
      110 |
      111 | 112 | 115 | 116 | --------------------------------------------------------------------------------