web UPDATED
This commit is contained in:
parent
842f703a05
commit
179861a133
@ -19,10 +19,12 @@ class SSH(object):
|
|||||||
if device in self.devices:
|
if device in self.devices:
|
||||||
ip = self.devices[device]['ip']
|
ip = self.devices[device]['ip']
|
||||||
user = self.devices[device]['user']
|
user = self.devices[device]['user']
|
||||||
|
print(ip)
|
||||||
|
print(user)
|
||||||
try:
|
try:
|
||||||
client = SSHClient()
|
client = SSHClient()
|
||||||
client.load_system_host_keys()
|
client.load_system_host_keys()
|
||||||
client.connect(ip = ip, user = user)
|
client.connect(ip = "192.168.178.81", user = "root")
|
||||||
except:
|
except:
|
||||||
print("Server nicht erreichbar")
|
print("Server nicht erreichbar")
|
||||||
finally:
|
finally:
|
||||||
|
23
www/css/4-col-portfolio.css
Executable file
23
www/css/4-col-portfolio.css
Executable file
@ -0,0 +1,23 @@
|
|||||||
|
/*!
|
||||||
|
* Start Bootstrap - 4 Col Portfolio (https://startbootstrap.com/template-overviews/4-col-portfolio)
|
||||||
|
* Copyright 2013-2017 Start Bootstrap
|
||||||
|
* Licensed under MIT (https://github.com/BlackrockDigital/startbootstrap-4-col-portfolio/blob/master/LICENSE)
|
||||||
|
*/
|
||||||
|
|
||||||
|
body {
|
||||||
|
padding-top: 54px;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (min-width: 992px) {
|
||||||
|
body {
|
||||||
|
padding-top: 56px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.portfolio-item {
|
||||||
|
margin-bottom: 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pagination {
|
||||||
|
margin-bottom: 30px;
|
||||||
|
}
|
73
www/index.html
Normal file → Executable file
73
www/index.html
Normal file → Executable file
@ -1,36 +1,59 @@
|
|||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="en">
|
<html lang="de">
|
||||||
<head>
|
|
||||||
<!-- Theme Made By www.w3schools.com - No Copyright -->
|
|
||||||
<title>HomeControl</title>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
||||||
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css">
|
|
||||||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
|
|
||||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js"></script>
|
|
||||||
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"></script>
|
|
||||||
<script src="js/cm.js"></script>
|
|
||||||
<link href="css/main.css" rel="stylesheet">
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
|
|
||||||
<!-- Navbar -->
|
<head>
|
||||||
<nav class="navbar navbar-expand-sm bg-light navbar-light">
|
|
||||||
<ul id="navbarBtn" class="navbar-nav">
|
<meta charset="utf-8">
|
||||||
<li class="navbar-brand">HomeControl</li>
|
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||||
<!--<li id="pageDevices" class="nav-item active"><a class="nav-link">Geräte</a></li>-->
|
<meta name="description" content="">
|
||||||
<li><button id="pageDevices" type="button" class="btn btn-outline-light text-dark active">Geräte</button></li>
|
<meta name="author" content="">
|
||||||
<li><button id="pageSettings" type="button" class="btn btn-outline-light text-dark">Einstellungen</button></li>
|
|
||||||
|
<title>HomeControl</title>
|
||||||
|
|
||||||
|
<!-- Bootstrap core CSS -->
|
||||||
|
<link href="vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet">
|
||||||
|
|
||||||
|
<!-- Custom styles for this template -->
|
||||||
|
<link href="css/4-col-portfolio.css" rel="stylesheet">
|
||||||
|
<script src="vendor/jquery/jquery.min.js"></script>
|
||||||
|
<script src="vendor/bootstrap/js/bootstrap.bundle.min.js"></script>
|
||||||
|
<script src="js/engine.js"></script>
|
||||||
|
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<!-- Navigation -->
|
||||||
|
<nav class="navbar navbar-expand-lg navbar-dark bg-dark fixed-top">
|
||||||
|
<div class="container">
|
||||||
|
<a class="navbar-brand" href="">HomeControl</a>
|
||||||
|
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarResponsive" aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation">
|
||||||
|
<span class="navbar-toggler-icon"></span>
|
||||||
|
</button>
|
||||||
|
<div class="collapse navbar-collapse" id="navbarResponsive">
|
||||||
|
<ul id="menuBtn" class="navbar-nav ml-auto">
|
||||||
|
<li class="nav-item">
|
||||||
|
<a id ="pageDevices" class="nav-link active" href="#">Geräte</a>
|
||||||
|
</li>
|
||||||
|
<li class="nav-item">
|
||||||
|
<a id="pageSettings" class="nav-link" href="#">Einstellungen</a>
|
||||||
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
<div class="content" id="content">
|
<div class="rendered container"></div>
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
<!-- Footer -->
|
<!-- Footer -->
|
||||||
<footer class="container-fluid bg-4 text-center">
|
<footer class="py-5 bg-dark">
|
||||||
|
<div class="container">
|
||||||
|
<p class="m-0 text-center text-white">Copyright © darthsandmann 2018</p>
|
||||||
|
</div>
|
||||||
|
<!-- /.container -->
|
||||||
</footer>
|
</footer>
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
||||||
|
241
www/js/engine.js
Normal file
241
www/js/engine.js
Normal file
@ -0,0 +1,241 @@
|
|||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// Engine - Hauptfunktion
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
var config = {}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------------//
|
||||||
|
function bodyDataAction ()
|
||||||
|
//-----------------------------------------------------------------------------------//
|
||||||
|
{
|
||||||
|
var menuButtons = document.getElementById("menuBtn").
|
||||||
|
getElementsByTagName("A");
|
||||||
|
for (var i = 0; i < menuButtons.length; i++) {
|
||||||
|
menuButtons[i].onclick = function(evt) {
|
||||||
|
console.log("Menu");
|
||||||
|
var res = evt.target.id;
|
||||||
|
menu(res);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
var contentButtons = document.getElementsByTagName("button");
|
||||||
|
for (var i = 0; i < contentButtons.length; i++) {
|
||||||
|
contentButtons[i].onclick = function(evt) {
|
||||||
|
console.log("Button");
|
||||||
|
var res = evt.target.id;
|
||||||
|
menu('switchRequest', res);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------------//
|
||||||
|
function menu (message, request=null)
|
||||||
|
//-----------------------------------------------------------------------------------//
|
||||||
|
{
|
||||||
|
var selectedId = $(".selected").attr('id');
|
||||||
|
switch (message)
|
||||||
|
{
|
||||||
|
case 'pageDevices':
|
||||||
|
console.log( "pageDevices")
|
||||||
|
$( ".rendered" ).empty();
|
||||||
|
generateDevices();
|
||||||
|
document.getElementById('pageDevices').className = "nav-link active";
|
||||||
|
document.getElementById('pageSettings').className = "nav-link";
|
||||||
|
break;
|
||||||
|
case 'pageSettings':
|
||||||
|
console.log( "pageSettings")
|
||||||
|
$( ".rendered" ).empty();
|
||||||
|
document.getElementById('pageDevices').className = "nav-link";
|
||||||
|
document.getElementById('pageSettings').className = "nav-link active";
|
||||||
|
break;
|
||||||
|
case 'switchRequest':
|
||||||
|
console.log( request )
|
||||||
|
switchRequest(request);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
alert ('[Engine] Unbekannte Anfrage: ' + message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------------//
|
||||||
|
function switchRequest (request)
|
||||||
|
//-----------------------------------------------------------------------------------//
|
||||||
|
{
|
||||||
|
var req = request.split(".");
|
||||||
|
switch (req[0])
|
||||||
|
{
|
||||||
|
case 'yeelight':
|
||||||
|
var bulb = req[1]
|
||||||
|
var type = req[2]
|
||||||
|
var value = req[3]
|
||||||
|
var cmd = {};
|
||||||
|
cmd[bulb] = {};
|
||||||
|
cmd[bulb][type] = value;
|
||||||
|
postYeelight(cmd);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
alert ('[POST] Unbekannte Anfrage: ' + req[0]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------------//
|
||||||
|
function generateYeelightBulbs ( data , type)
|
||||||
|
//-----------------------------------------------------------------------------------//
|
||||||
|
{
|
||||||
|
$( ".rendered" ).append($('<div class="yeelight'+type+' container-fluid text-center bg-grey">'));
|
||||||
|
$( ".yeelight"+type ).append($("<h3></h3>").text("Yeelight " + type));
|
||||||
|
$( ".yeelight"+type ).append($('<div class="yeelight'+type+'row row text-center">'));
|
||||||
|
for (bulb in data)
|
||||||
|
{
|
||||||
|
$( ".yeelight"+type+"row" ).append($('<div class="'+ bulb + 'col col-sm-3 bg-grey">'));
|
||||||
|
$( "." + bulb + "col" ).append($("<p></p>").text(bulb));
|
||||||
|
$( "." + bulb + "col" ).append($('<div class="' + bulb + 'btn btn-group">'));
|
||||||
|
var configBulb = data[bulb]['config']
|
||||||
|
for (setting in configBulb)
|
||||||
|
{
|
||||||
|
if (configBulb[setting]['state'] == "switch")
|
||||||
|
{
|
||||||
|
var command = "on";
|
||||||
|
$( "." + bulb + "btn" ).append($('<button '+
|
||||||
|
'id="yeelight.'+bulb+'.'+setting+'.on" ' +
|
||||||
|
'type="button" class="' + bulb + 'btnAn btn btn-primary">An</button>'));
|
||||||
|
var buttonOn = document.getElementById('yeelight.'+bulb+'.'+setting+'.on');
|
||||||
|
buttonOn.onclick = function(evt) {
|
||||||
|
var res = evt.target.id;
|
||||||
|
menu('switchRequest', res);}
|
||||||
|
var command = "off";
|
||||||
|
$( "." + bulb + "btn" ).append($('<button '+
|
||||||
|
'id="yeelight.'+bulb+'.'+setting+'.off" ' +
|
||||||
|
'type="button" class="' + bulb + 'btnAn btn btn-primary">Aus</button>'));
|
||||||
|
var buttonOff = document.getElementById('yeelight.'+bulb+'.'+setting+'.off');
|
||||||
|
buttonOff.onclick = function(evt) {
|
||||||
|
var res = evt.target.id;
|
||||||
|
menu('switchRequest', res);}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------------//
|
||||||
|
function renderYeelightGroups ( data )
|
||||||
|
//-----------------------------------------------------------------------------------//
|
||||||
|
{
|
||||||
|
$( ".rendered" ).append('<h1 class="grp my-4">Yeelight<small>Gruppen</small></h1>');
|
||||||
|
$( ".rendered" ).append('<div class="rowGrp row">');
|
||||||
|
for(group in data)
|
||||||
|
{
|
||||||
|
var devicesString = ""
|
||||||
|
for (device in data[group]['devices'])
|
||||||
|
{
|
||||||
|
if(devicesString == "")
|
||||||
|
{
|
||||||
|
devicesString = device;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
devicesString = devicesString + ', ' + device;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$( ".rowGrp" ).append(' <div class="col-lg-3 col-md-4 col-sm-6 portfolio-item">'+
|
||||||
|
'<div class="card h-100">'+
|
||||||
|
'<div class="card-body">'+
|
||||||
|
'<h4 class="card-title">'+
|
||||||
|
'<a href="#">'+ group + '</a>'+
|
||||||
|
'</h4>'+
|
||||||
|
'<div class="card-text">'+
|
||||||
|
'<div class="btn-group">'+
|
||||||
|
'<button id="yeelight.'+group+'.power.on" type="button" class="btn btn-primary">An</button>'+
|
||||||
|
'<button id="yeelight.'+group+'.power.off" type="button" class="btn btn-primary">Aus</button>'+
|
||||||
|
'</div>'+
|
||||||
|
'</div>'+
|
||||||
|
'<p class="card-text"></p>'+
|
||||||
|
'<p class="card-text"></p>'+
|
||||||
|
'<h5 class="card-title">'+
|
||||||
|
'<a href="#">Geräte</a>'+
|
||||||
|
'</h5>'+
|
||||||
|
'<p class="card-text">'+devicesString+'</p>'+
|
||||||
|
'</div>'+
|
||||||
|
'</div>');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------------//
|
||||||
|
function loadYeelightGroups ( data )
|
||||||
|
//-----------------------------------------------------------------------------------//
|
||||||
|
{
|
||||||
|
var groups = {}
|
||||||
|
for (bulb in data)
|
||||||
|
{
|
||||||
|
for (group in data[bulb]['groups'])
|
||||||
|
{
|
||||||
|
if (group in groups)
|
||||||
|
{
|
||||||
|
groups[group]['devices'][bulb] = "";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
groups[group] = {};
|
||||||
|
groups[group] = data[bulb];
|
||||||
|
groups[group]['devices'] = {};
|
||||||
|
groups[group]['devices'][bulb] = "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return groups;
|
||||||
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------------//
|
||||||
|
function generateDevices ( )
|
||||||
|
//-----------------------------------------------------------------------------------//
|
||||||
|
{
|
||||||
|
for (module in config)
|
||||||
|
{
|
||||||
|
if(module.localeCompare("yeelight") == 0)
|
||||||
|
{
|
||||||
|
yeelightGroups = loadYeelightGroups(config[module]);
|
||||||
|
renderYeelightGroups(yeelightGroups);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
bodyDataAction();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------------//
|
||||||
|
function getConfig ( )
|
||||||
|
//-----------------------------------------------------------------------------------//
|
||||||
|
{
|
||||||
|
$.ajax('/rest/config', {
|
||||||
|
type : 'GET',
|
||||||
|
dataType: "json",
|
||||||
|
success : function(data) {
|
||||||
|
config = data;
|
||||||
|
bodyDataAction();
|
||||||
|
menu("pageDevices");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------------//
|
||||||
|
function postYeelight ( cmd )
|
||||||
|
//-----------------------------------------------------------------------------------//
|
||||||
|
{
|
||||||
|
$.ajax('/rest/yeelight', {
|
||||||
|
type : 'POST',
|
||||||
|
dataType: "json",
|
||||||
|
contentType: 'application/json',
|
||||||
|
data : JSON.stringify(cmd),
|
||||||
|
success : function(data) {
|
||||||
|
console.log(data);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------------//
|
||||||
|
$(function() {
|
||||||
|
console.log("ONLOAD");
|
||||||
|
|
||||||
|
getConfig();
|
||||||
|
|
||||||
|
console.log("Engine LOADED");
|
||||||
|
});
|
||||||
|
//-----------------------------------------------------------------------------------//
|
21
www/static/devices/contentColumn.html
Normal file
21
www/static/devices/contentColumn.html
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
<div class="col-lg-3 col-md-4 col-sm-6 portfolio-item">
|
||||||
|
<div class="card h-100">
|
||||||
|
<div class="card-body">
|
||||||
|
<h4 class="card-title">
|
||||||
|
<a href="#">__NAME__</a>
|
||||||
|
</h4>
|
||||||
|
<div class="card-text">
|
||||||
|
<div class="btn-group">
|
||||||
|
<button type="button" class="btn btn-primary">An</button>
|
||||||
|
<button type="button" class="btn btn-primary">Aus</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<p class="card-text"></p>
|
||||||
|
<p class="card-text"></p>
|
||||||
|
<h5 class="card-title">
|
||||||
|
<a href="#">Geräte</a>
|
||||||
|
</h5>
|
||||||
|
<p class="card-text">__GERAETE__</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
3
www/static/devices/contentHeading.html
Normal file
3
www/static/devices/contentHeading.html
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
<h1 class="my-4">__DEVICE__
|
||||||
|
<small>__SUBDEVICE__</small>
|
||||||
|
</h1>
|
30
www/static/devices/contentPages.html
Normal file
30
www/static/devices/contentPages.html
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
<!-- Page Content -->
|
||||||
|
<div class="container">
|
||||||
|
|
||||||
|
<!-- Pagination -->
|
||||||
|
<ul class="pagination justify-content-center">
|
||||||
|
<li class="page-item">
|
||||||
|
<a class="page-link" href="#" aria-label="Previous">
|
||||||
|
<span aria-hidden="true">«</span>
|
||||||
|
<span class="sr-only">Previous</span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li class="page-item">
|
||||||
|
<a class="page-link" href="#">1</a>
|
||||||
|
</li>
|
||||||
|
<li class="page-item">
|
||||||
|
<a class="page-link" href="#">2</a>
|
||||||
|
</li>
|
||||||
|
<li class="page-item">
|
||||||
|
<a class="page-link" href="#">3</a>
|
||||||
|
</li>
|
||||||
|
<li class="page-item">
|
||||||
|
<a class="page-link" href="#" aria-label="Next">
|
||||||
|
<span aria-hidden="true">»</span>
|
||||||
|
<span class="sr-only">Next</span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<!-- /.container -->
|
1
www/static/devices/contentRowBegin.html
Normal file
1
www/static/devices/contentRowBegin.html
Normal file
@ -0,0 +1 @@
|
|||||||
|
<div class="row"></div>
|
1
www/static/devices/contentRowEnd.html
Normal file
1
www/static/devices/contentRowEnd.html
Normal file
@ -0,0 +1 @@
|
|||||||
|
</div>
|
36
www/test/index.html
Normal file
36
www/test/index.html
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<!-- Theme Made By www.w3schools.com - No Copyright -->
|
||||||
|
<title>HomeControl</title>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css">
|
||||||
|
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
|
||||||
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js"></script>
|
||||||
|
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"></script>
|
||||||
|
<script src="js/cm.js"></script>
|
||||||
|
<link href="css/main.css" rel="stylesheet">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<!-- Navbar -->
|
||||||
|
<nav class="navbar navbar-expand-sm bg-light navbar-light">
|
||||||
|
<ul id="navbarBtn" class="navbar-nav">
|
||||||
|
<li class="navbar-brand">HomeControl</li>
|
||||||
|
<!--<li id="pageDevices" class="nav-item active"><a class="nav-link">Geräte</a></li>-->
|
||||||
|
<li><button id="pageDevices" type="button" class="btn btn-outline-light text-dark active">Geräte</button></li>
|
||||||
|
<li><button id="pageSettings" type="button" class="btn btn-outline-light text-dark">Einstellungen</button></li>
|
||||||
|
</ul>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<div class="content" id="content">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Footer -->
|
||||||
|
<footer class="container-fluid bg-4 text-center">
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
1567
www/vendor/bootstrap/css/bootstrap-grid.css
vendored
Executable file
1567
www/vendor/bootstrap/css/bootstrap-grid.css
vendored
Executable file
File diff suppressed because it is too large
Load Diff
7
www/vendor/bootstrap/css/bootstrap-grid.min.css
vendored
Executable file
7
www/vendor/bootstrap/css/bootstrap-grid.min.css
vendored
Executable file
File diff suppressed because one or more lines are too long
342
www/vendor/bootstrap/css/bootstrap-reboot.css
vendored
Executable file
342
www/vendor/bootstrap/css/bootstrap-reboot.css
vendored
Executable file
@ -0,0 +1,342 @@
|
|||||||
|
/*!
|
||||||
|
* Bootstrap Reboot v4.0.0-beta.2 (https://getbootstrap.com)
|
||||||
|
* Copyright 2011-2017 The Bootstrap Authors
|
||||||
|
* Copyright 2011-2017 Twitter, Inc.
|
||||||
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||||
|
* Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)
|
||||||
|
*/
|
||||||
|
*,
|
||||||
|
*::before,
|
||||||
|
*::after {
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
html {
|
||||||
|
font-family: sans-serif;
|
||||||
|
line-height: 1.15;
|
||||||
|
-webkit-text-size-adjust: 100%;
|
||||||
|
-ms-text-size-adjust: 100%;
|
||||||
|
-ms-overflow-style: scrollbar;
|
||||||
|
-webkit-tap-highlight-color: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
@-ms-viewport {
|
||||||
|
width: device-width;
|
||||||
|
}
|
||||||
|
|
||||||
|
article, aside, dialog, figcaption, figure, footer, header, hgroup, main, nav, section {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
margin: 0;
|
||||||
|
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
|
||||||
|
font-size: 1rem;
|
||||||
|
font-weight: 400;
|
||||||
|
line-height: 1.5;
|
||||||
|
color: #212529;
|
||||||
|
text-align: left;
|
||||||
|
background-color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
[tabindex="-1"]:focus {
|
||||||
|
outline: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
hr {
|
||||||
|
box-sizing: content-box;
|
||||||
|
height: 0;
|
||||||
|
overflow: visible;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1, h2, h3, h4, h5, h6 {
|
||||||
|
margin-top: 0;
|
||||||
|
margin-bottom: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
p {
|
||||||
|
margin-top: 0;
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
abbr[title],
|
||||||
|
abbr[data-original-title] {
|
||||||
|
text-decoration: underline;
|
||||||
|
-webkit-text-decoration: underline dotted;
|
||||||
|
text-decoration: underline dotted;
|
||||||
|
cursor: help;
|
||||||
|
border-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
address {
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
font-style: normal;
|
||||||
|
line-height: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
ol,
|
||||||
|
ul,
|
||||||
|
dl {
|
||||||
|
margin-top: 0;
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
ol ol,
|
||||||
|
ul ul,
|
||||||
|
ol ul,
|
||||||
|
ul ol {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
dt {
|
||||||
|
font-weight: 700;
|
||||||
|
}
|
||||||
|
|
||||||
|
dd {
|
||||||
|
margin-bottom: .5rem;
|
||||||
|
margin-left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
blockquote {
|
||||||
|
margin: 0 0 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
dfn {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
b,
|
||||||
|
strong {
|
||||||
|
font-weight: bolder;
|
||||||
|
}
|
||||||
|
|
||||||
|
small {
|
||||||
|
font-size: 80%;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub,
|
||||||
|
sup {
|
||||||
|
position: relative;
|
||||||
|
font-size: 75%;
|
||||||
|
line-height: 0;
|
||||||
|
vertical-align: baseline;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub {
|
||||||
|
bottom: -.25em;
|
||||||
|
}
|
||||||
|
|
||||||
|
sup {
|
||||||
|
top: -.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: #007bff;
|
||||||
|
text-decoration: none;
|
||||||
|
background-color: transparent;
|
||||||
|
-webkit-text-decoration-skip: objects;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:hover {
|
||||||
|
color: #0056b3;
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:not([href]):not([tabindex]) {
|
||||||
|
color: inherit;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:not([href]):not([tabindex]):focus, a:not([href]):not([tabindex]):hover {
|
||||||
|
color: inherit;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:not([href]):not([tabindex]):focus {
|
||||||
|
outline: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre,
|
||||||
|
code,
|
||||||
|
kbd,
|
||||||
|
samp {
|
||||||
|
font-family: monospace, monospace;
|
||||||
|
font-size: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre {
|
||||||
|
margin-top: 0;
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
overflow: auto;
|
||||||
|
-ms-overflow-style: scrollbar;
|
||||||
|
}
|
||||||
|
|
||||||
|
figure {
|
||||||
|
margin: 0 0 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
img {
|
||||||
|
vertical-align: middle;
|
||||||
|
border-style: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
svg:not(:root) {
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
a,
|
||||||
|
area,
|
||||||
|
button,
|
||||||
|
[role="button"],
|
||||||
|
input:not([type="range"]),
|
||||||
|
label,
|
||||||
|
select,
|
||||||
|
summary,
|
||||||
|
textarea {
|
||||||
|
-ms-touch-action: manipulation;
|
||||||
|
touch-action: manipulation;
|
||||||
|
}
|
||||||
|
|
||||||
|
table {
|
||||||
|
border-collapse: collapse;
|
||||||
|
}
|
||||||
|
|
||||||
|
caption {
|
||||||
|
padding-top: 0.75rem;
|
||||||
|
padding-bottom: 0.75rem;
|
||||||
|
color: #868e96;
|
||||||
|
text-align: left;
|
||||||
|
caption-side: bottom;
|
||||||
|
}
|
||||||
|
|
||||||
|
th {
|
||||||
|
text-align: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
label {
|
||||||
|
display: inline-block;
|
||||||
|
margin-bottom: .5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
button {
|
||||||
|
border-radius: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
button:focus {
|
||||||
|
outline: 1px dotted;
|
||||||
|
outline: 5px auto -webkit-focus-ring-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
input,
|
||||||
|
button,
|
||||||
|
select,
|
||||||
|
optgroup,
|
||||||
|
textarea {
|
||||||
|
margin: 0;
|
||||||
|
font-family: inherit;
|
||||||
|
font-size: inherit;
|
||||||
|
line-height: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
button,
|
||||||
|
input {
|
||||||
|
overflow: visible;
|
||||||
|
}
|
||||||
|
|
||||||
|
button,
|
||||||
|
select {
|
||||||
|
text-transform: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
button,
|
||||||
|
html [type="button"],
|
||||||
|
[type="reset"],
|
||||||
|
[type="submit"] {
|
||||||
|
-webkit-appearance: button;
|
||||||
|
}
|
||||||
|
|
||||||
|
button::-moz-focus-inner,
|
||||||
|
[type="button"]::-moz-focus-inner,
|
||||||
|
[type="reset"]::-moz-focus-inner,
|
||||||
|
[type="submit"]::-moz-focus-inner {
|
||||||
|
padding: 0;
|
||||||
|
border-style: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type="radio"],
|
||||||
|
input[type="checkbox"] {
|
||||||
|
box-sizing: border-box;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type="date"],
|
||||||
|
input[type="time"],
|
||||||
|
input[type="datetime-local"],
|
||||||
|
input[type="month"] {
|
||||||
|
-webkit-appearance: listbox;
|
||||||
|
}
|
||||||
|
|
||||||
|
textarea {
|
||||||
|
overflow: auto;
|
||||||
|
resize: vertical;
|
||||||
|
}
|
||||||
|
|
||||||
|
fieldset {
|
||||||
|
min-width: 0;
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
border: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
legend {
|
||||||
|
display: block;
|
||||||
|
width: 100%;
|
||||||
|
max-width: 100%;
|
||||||
|
padding: 0;
|
||||||
|
margin-bottom: .5rem;
|
||||||
|
font-size: 1.5rem;
|
||||||
|
line-height: inherit;
|
||||||
|
color: inherit;
|
||||||
|
white-space: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
progress {
|
||||||
|
vertical-align: baseline;
|
||||||
|
}
|
||||||
|
|
||||||
|
[type="number"]::-webkit-inner-spin-button,
|
||||||
|
[type="number"]::-webkit-outer-spin-button {
|
||||||
|
height: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
[type="search"] {
|
||||||
|
outline-offset: -2px;
|
||||||
|
-webkit-appearance: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
[type="search"]::-webkit-search-cancel-button,
|
||||||
|
[type="search"]::-webkit-search-decoration {
|
||||||
|
-webkit-appearance: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
::-webkit-file-upload-button {
|
||||||
|
font: inherit;
|
||||||
|
-webkit-appearance: button;
|
||||||
|
}
|
||||||
|
|
||||||
|
output {
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
summary {
|
||||||
|
display: list-item;
|
||||||
|
}
|
||||||
|
|
||||||
|
template {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
[hidden] {
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
/*# sourceMappingURL=bootstrap-reboot.css.map */
|
8
www/vendor/bootstrap/css/bootstrap-reboot.min.css
vendored
Executable file
8
www/vendor/bootstrap/css/bootstrap-reboot.min.css
vendored
Executable file
@ -0,0 +1,8 @@
|
|||||||
|
/*!
|
||||||
|
* Bootstrap Reboot v4.0.0-beta.2 (https://getbootstrap.com)
|
||||||
|
* Copyright 2011-2017 The Bootstrap Authors
|
||||||
|
* Copyright 2011-2017 Twitter, Inc.
|
||||||
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||||
|
* Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)
|
||||||
|
*/*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:transparent}@-ms-viewport{width:device-width}article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus{outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}dfn{font-style:italic}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent;-webkit-text-decoration-skip:objects}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg:not(:root){overflow:hidden}[role=button],a,area,button,input:not([type=range]),label,select,summary,textarea{-ms-touch-action:manipulation;touch-action:manipulation}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#868e96;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item}template{display:none}[hidden]{display:none!important}
|
||||||
|
/*# sourceMappingURL=bootstrap-reboot.min.css.map */
|
8975
www/vendor/bootstrap/css/bootstrap.css
vendored
Executable file
8975
www/vendor/bootstrap/css/bootstrap.css
vendored
Executable file
File diff suppressed because it is too large
Load Diff
1
www/vendor/bootstrap/css/bootstrap.css.map
vendored
Executable file
1
www/vendor/bootstrap/css/bootstrap.css.map
vendored
Executable file
File diff suppressed because one or more lines are too long
7
www/vendor/bootstrap/css/bootstrap.min.css
vendored
Executable file
7
www/vendor/bootstrap/css/bootstrap.min.css
vendored
Executable file
File diff suppressed because one or more lines are too long
1
www/vendor/bootstrap/css/bootstrap.min.css.map
vendored
Executable file
1
www/vendor/bootstrap/css/bootstrap.min.css.map
vendored
Executable file
File diff suppressed because one or more lines are too long
6328
www/vendor/bootstrap/js/bootstrap.bundle.js
vendored
Executable file
6328
www/vendor/bootstrap/js/bootstrap.bundle.js
vendored
Executable file
File diff suppressed because it is too large
Load Diff
1
www/vendor/bootstrap/js/bootstrap.bundle.js.map
vendored
Executable file
1
www/vendor/bootstrap/js/bootstrap.bundle.js.map
vendored
Executable file
File diff suppressed because one or more lines are too long
7
www/vendor/bootstrap/js/bootstrap.bundle.min.js
vendored
Executable file
7
www/vendor/bootstrap/js/bootstrap.bundle.min.js
vendored
Executable file
File diff suppressed because one or more lines are too long
1
www/vendor/bootstrap/js/bootstrap.bundle.min.js.map
vendored
Executable file
1
www/vendor/bootstrap/js/bootstrap.bundle.min.js.map
vendored
Executable file
File diff suppressed because one or more lines are too long
3894
www/vendor/bootstrap/js/bootstrap.js
vendored
Executable file
3894
www/vendor/bootstrap/js/bootstrap.js
vendored
Executable file
File diff suppressed because it is too large
Load Diff
1
www/vendor/bootstrap/js/bootstrap.js.map
vendored
Executable file
1
www/vendor/bootstrap/js/bootstrap.js.map
vendored
Executable file
File diff suppressed because one or more lines are too long
7
www/vendor/bootstrap/js/bootstrap.min.js
vendored
Executable file
7
www/vendor/bootstrap/js/bootstrap.min.js
vendored
Executable file
File diff suppressed because one or more lines are too long
1
www/vendor/bootstrap/js/bootstrap.min.js.map
vendored
Executable file
1
www/vendor/bootstrap/js/bootstrap.min.js.map
vendored
Executable file
File diff suppressed because one or more lines are too long
10364
www/vendor/jquery/jquery.js
vendored
Executable file
10364
www/vendor/jquery/jquery.js
vendored
Executable file
File diff suppressed because it is too large
Load Diff
2
www/vendor/jquery/jquery.min.js
vendored
Executable file
2
www/vendor/jquery/jquery.min.js
vendored
Executable file
File diff suppressed because one or more lines are too long
1
www/vendor/jquery/jquery.min.map
vendored
Executable file
1
www/vendor/jquery/jquery.min.map
vendored
Executable file
File diff suppressed because one or more lines are too long
8269
www/vendor/jquery/jquery.slim.js
vendored
Executable file
8269
www/vendor/jquery/jquery.slim.js
vendored
Executable file
File diff suppressed because it is too large
Load Diff
2
www/vendor/jquery/jquery.slim.min.js
vendored
Executable file
2
www/vendor/jquery/jquery.slim.min.js
vendored
Executable file
File diff suppressed because one or more lines are too long
1
www/vendor/jquery/jquery.slim.min.map
vendored
Executable file
1
www/vendor/jquery/jquery.slim.min.map
vendored
Executable file
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user