From fbf2843f5ba4976126fa9b786832a28bcf825fa9 Mon Sep 17 00:00:00 2001 From: Hornwitser Date: Tue, 22 Sep 2020 22:06:03 +0200 Subject: [PATCH 01/12] Remove old web interface --- package.json | 2 - packages/master/master.js | 37 --- packages/master/npm_post_install.js | 106 -------- packages/master/package.json | 6 +- packages/master/src/routes.js | 15 -- packages/master/static/bootstrap.min.css | 12 - packages/master/static/browserconfig.xml | 11 - packages/master/static/favicon.ico | Bin 3262 -> 0 bytes .../static/favicon/android-icon-144x144.png | Bin 22580 -> 0 bytes .../static/favicon/android-icon-192x192.png | Bin 35274 -> 0 bytes .../static/favicon/android-icon-36x36.png | Bin 2852 -> 0 bytes .../static/favicon/android-icon-48x48.png | Bin 4138 -> 0 bytes .../static/favicon/android-icon-72x72.png | Bin 7501 -> 0 bytes .../static/favicon/android-icon-96x96.png | Bin 11822 -> 0 bytes .../static/favicon/apple-icon-114x114.png | Bin 15462 -> 0 bytes .../static/favicon/apple-icon-120x120.png | Bin 16786 -> 0 bytes .../static/favicon/apple-icon-144x144.png | Bin 22580 -> 0 bytes .../static/favicon/apple-icon-152x152.png | Bin 24655 -> 0 bytes .../static/favicon/apple-icon-180x180.png | Bin 32315 -> 0 bytes .../static/favicon/apple-icon-57x57.png | Bin 5300 -> 0 bytes .../static/favicon/apple-icon-60x60.png | Bin 5704 -> 0 bytes .../static/favicon/apple-icon-72x72.png | Bin 7501 -> 0 bytes .../static/favicon/apple-icon-76x76.png | Bin 8201 -> 0 bytes .../static/favicon/apple-icon-precomposed.png | Bin 35848 -> 0 bytes packages/master/static/favicon/apple-icon.png | Bin 35848 -> 0 bytes .../master/static/favicon/browserconfig.xml | 2 - .../master/static/favicon/favicon-16x16.png | Bin 1451 -> 0 bytes .../master/static/favicon/favicon-32x32.png | Bin 2496 -> 0 bytes .../master/static/favicon/favicon-96x96.png | Bin 11822 -> 0 bytes packages/master/static/favicon/favicon.ico | Bin 1150 -> 0 bytes packages/master/static/favicon/manifest.json | 41 --- .../master/static/favicon/ms-icon-144x144.png | Bin 22580 -> 0 bytes .../master/static/favicon/ms-icon-150x150.png | Bin 24075 -> 0 bytes .../master/static/favicon/ms-icon-310x310.png | Bin 76125 -> 0 bytes .../master/static/favicon/ms-icon-70x70.png | Bin 7256 -> 0 bytes packages/master/static/lib/terminal.js | 185 ------------- packages/master/static/lib/utility.js | 9 - packages/master/static/main.js | 218 --------------- packages/master/static/manifest.json | 41 --- packages/master/static/nodeDetails.css | 3 - packages/master/static/nodeDetails.js | 255 ------------------ packages/master/static/settings.js | 35 --- packages/master/static/style.css | 88 ------ plugins/subspace_storage/master.js | 14 - plugins/subspace_storage/routes.js | 6 - plugins/subspace_storage/static/storage.js | 99 ------- plugins/subspace_storage/views/storage.ejs | 41 --- test/integration/clusterio.js | 20 -- test/missing.js | 5 - views/head.ejs | 29 -- views/index.ejs | 17 -- views/nav.ejs | 29 -- views/nodeDetails.ejs | 32 --- views/nodes.ejs | 47 ---- views/settings.ejs | 19 -- views/sidebar.ejs | 1 - 56 files changed, 1 insertion(+), 1424 deletions(-) delete mode 100644 packages/master/npm_post_install.js delete mode 100644 packages/master/src/routes.js delete mode 100644 packages/master/static/bootstrap.min.css delete mode 100644 packages/master/static/browserconfig.xml delete mode 100644 packages/master/static/favicon.ico delete mode 100644 packages/master/static/favicon/android-icon-144x144.png delete mode 100644 packages/master/static/favicon/android-icon-192x192.png delete mode 100644 packages/master/static/favicon/android-icon-36x36.png delete mode 100644 packages/master/static/favicon/android-icon-48x48.png delete mode 100644 packages/master/static/favicon/android-icon-72x72.png delete mode 100644 packages/master/static/favicon/android-icon-96x96.png delete mode 100644 packages/master/static/favicon/apple-icon-114x114.png delete mode 100644 packages/master/static/favicon/apple-icon-120x120.png delete mode 100644 packages/master/static/favicon/apple-icon-144x144.png delete mode 100644 packages/master/static/favicon/apple-icon-152x152.png delete mode 100644 packages/master/static/favicon/apple-icon-180x180.png delete mode 100644 packages/master/static/favicon/apple-icon-57x57.png delete mode 100644 packages/master/static/favicon/apple-icon-60x60.png delete mode 100644 packages/master/static/favicon/apple-icon-72x72.png delete mode 100644 packages/master/static/favicon/apple-icon-76x76.png delete mode 100644 packages/master/static/favicon/apple-icon-precomposed.png delete mode 100644 packages/master/static/favicon/apple-icon.png delete mode 100644 packages/master/static/favicon/browserconfig.xml delete mode 100644 packages/master/static/favicon/favicon-16x16.png delete mode 100644 packages/master/static/favicon/favicon-32x32.png delete mode 100644 packages/master/static/favicon/favicon-96x96.png delete mode 100644 packages/master/static/favicon/favicon.ico delete mode 100644 packages/master/static/favicon/manifest.json delete mode 100644 packages/master/static/favicon/ms-icon-144x144.png delete mode 100644 packages/master/static/favicon/ms-icon-150x150.png delete mode 100644 packages/master/static/favicon/ms-icon-310x310.png delete mode 100644 packages/master/static/favicon/ms-icon-70x70.png delete mode 100644 packages/master/static/lib/terminal.js delete mode 100644 packages/master/static/lib/utility.js delete mode 100644 packages/master/static/main.js delete mode 100644 packages/master/static/manifest.json delete mode 100644 packages/master/static/nodeDetails.css delete mode 100644 packages/master/static/nodeDetails.js delete mode 100644 packages/master/static/settings.js delete mode 100644 packages/master/static/style.css delete mode 100644 plugins/subspace_storage/static/storage.js delete mode 100644 plugins/subspace_storage/views/storage.ejs delete mode 100644 test/missing.js delete mode 100644 views/head.ejs delete mode 100644 views/index.ejs delete mode 100644 views/nav.ejs delete mode 100644 views/nodeDetails.ejs delete mode 100644 views/nodes.ejs delete mode 100644 views/settings.ejs delete mode 100644 views/sidebar.ejs diff --git a/package.json b/package.json index 5eb377f6..efdf2697 100644 --- a/package.json +++ b/package.json @@ -27,13 +27,11 @@ "@clusterio/slave": "file:./packages/slave", "eslint": "^7.2.0", "fs-extra": "^8.1.0", - "html5-validator": "^1.2.1", "jsdoc": "^3.6.3", "jsonwebtoken": "^8.2.1", "jszip": "^3.2.2", "lerna": "^3.22.1", "mocha": "^6.2.0", - "mocha.parallel": "^0.15.5", "nyc": "^14.1.1", "phin": "^3.4.1" } diff --git a/packages/master/master.js b/packages/master/master.js index 26628e5e..980e96ac 100755 --- a/packages/master/master.js +++ b/packages/master/master.js @@ -23,8 +23,6 @@ const path = require("path"); const fs = require("fs-extra"); const jwt = require("jsonwebtoken"); const crypto = require("crypto"); -const moment = require("moment"); -const request = require("request"); const setBlocking = require("set-blocking"); const events = require("events"); const yargs = require("yargs"); @@ -72,23 +70,6 @@ app.use(bodyParser.urlencoded({ app.use(fileUpload()); app.use(compression()); -// dynamic HTML generations with EJS -app.set("view engine", "ejs"); -app.set("views", ["views", "plugins"]); - -// give ejs access to some interesting information -app.use(function(req, res, next){ - let externalAddress = masterConfig.get("master.external_address"); - res.locals.root = externalAddress ? new URL(externalAddress).pathname : "/"; - res.locals.res = res; - res.locals.req = req; - res.locals.masterPlugins = masterPlugins; - res.locals.slaves = db.slaves; - res.locals.moment = moment; - next(); -}); - -require("./src/routes")(app); // Set folder to serve static content from (the website) app.use(express.static(path.join(__dirname, "static"))); app.use(express.static("static")); // Used for data export files @@ -438,24 +419,6 @@ async function shutdown() { } } -// wrap a request in an promise -async function downloadPage(url) { - return new Promise((resolve, reject) => { - request(url, (error, response, body) => { - resolve(body); - }); - }); -} - -app.get("/api/modmeta", async function(req, res) { - endpointHitCounter.labels(req.route.path).inc(); - res.header("Access-Control-Allow-Origin", "*"); - res.setHeader("Content-Type", "application/json"); - let modData = await downloadPage("https://mods.factorio.com/api/mods/" + req.query.modname); - res.send(modData); -}); - - /** * Base class for master server connections * diff --git a/packages/master/npm_post_install.js b/packages/master/npm_post_install.js deleted file mode 100644 index cc23a327..00000000 --- a/packages/master/npm_post_install.js +++ /dev/null @@ -1,106 +0,0 @@ -"use strict"; -var http = require("http"); -var https = require("https"); -var fs = require("fs-extra"); - - -function makeDirectory(path){ - return new Promise((resolve, reject) => { - fs.mkdirp(path, function(err){ - if(err){ - console.error("Unable to mkdirp "+path); - console.error(err); - resolve(false); - } else { - console.log("mkdirp "+path); - resolve(true); - } - }); - }); -} -function download(url, file, callback){ - return new Promise((resolve, reject) => { - let pathArray = file.split("/"); - pathArray.pop(); // remove filename from the end - if(pathArray.length >= 1){ - // this might be an invalid path! - fs.stat(pathArray.join("/"), (err, stat) => { - if(err){ - makeDirectory(pathArray.join("/")).then(() => { - doDownload(url, file, callback); - }); - } else { - doDownload(url, file, callback); - } - }); - } else { - doDownload(url, file, callback); - } - function doDownload(url, file, callback){ - var writeStream = fs.createWriteStream(file); - let protocol = http; - if(url.split(":")[0] == "https") protocol = https; - var request = protocol.get(url, function(response) { - response.pipe(writeStream); - response.on("end", () => { - if(callback && typeof callback == "function") callback(file); - console.log("Downloaded "+file+" from "+url); - resolve(); - }); - }); - } - }); -} - -var directories = [ - "sharedMods", - "instances", -]; -let downloadList = [ - { - url: "https://code.jquery.com/jquery.js", - file: "static/external/jquery.js", - }, - { - url: "https://code.jquery.com/ui/1.12.1/jquery-ui.js", - file: "static/external/jquery-ui.js", - }, - { - url: "https://momentjs.com/downloads/moment.min.js", - file: "static/external/moment.min.js", - }, - { - url: "https://craig.global.ssl.fastly.net/js/mousetrap/mousetrap.min.js", - file: "static/external/mousetrap.min.js", - }, - { - url: "https://fonts.googleapis.com/css?family=Roboto", - file: "static/external/css/Roboto.css", - }, -]; - -// initiate folder creations and downloads -function processMkdirRecursive(callback){ - let item = directories.shift(); - makeDirectory(item).then(() => { - if(directories.length == 0){ - if(callback) callback(); - } else { - processMkdirRecursive(callback); - } - }); -} -function processDownloadRecursive(callback){ - let item = downloadList.shift(); - download(item.url, item.file, item.callback).then(() => { - if(downloadList.length == 0){ - if(callback) callback(); - } else { - processDownloadRecursive(callback); - } - }); -} - -if (module === require.main) { - processMkdirRecursive(processDownloadRecursive); -} diff --git a/packages/master/package.json b/packages/master/package.json index a2062d7f..da109f5c 100644 --- a/packages/master/package.json +++ b/packages/master/package.json @@ -6,8 +6,7 @@ "version": "2.0.0-alpha0", "main": "master.js", "scripts": { - "test": "echo \"Error: no test specified\" && exit 1", - "install": "node npm_post_install" + "test": "echo \"Error: no test specified\" && exit 1" }, "bin": { "clusteriomaster": "./master.js" @@ -23,16 +22,13 @@ "body-parser": "^1.18.2", "compression": "^1.7.2", "cookie-parser": "^1.4.3", - "ejs": "^2.5.7", "express": "^4.16.2", "express-fileupload": "1.2.0", "fs-extra": "^8.1.0", "jsonwebtoken": "^8.2.1", "jszip": "^3.2.2", - "moment": "^2.22.2", "node-factorio-api": "^0.3.8", "node-forge": "^0.10.0", - "request": "^2.83.0", "set-blocking": "^2.0.0", "ws": "^7.2.3", "yargs": "^14.2.0" diff --git a/packages/master/src/routes.js b/packages/master/src/routes.js deleted file mode 100644 index 1b3c7c92..00000000 --- a/packages/master/src/routes.js +++ /dev/null @@ -1,15 +0,0 @@ -"use strict"; -module.exports = function(app) { - app.get("/", function(req, res) { - res.render("index"); - }); - app.get("/nodes", function(req, res) { - res.render("nodes"); - }); - app.get("/settings", function(req, res) { - res.render("settings"); - }); - app.get("/nodeDetails", function(req, res) { - res.render("nodeDetails"); - }); -}; diff --git a/packages/master/static/bootstrap.min.css b/packages/master/static/bootstrap.min.css deleted file mode 100644 index 304d4da3..00000000 --- a/packages/master/static/bootstrap.min.css +++ /dev/null @@ -1,12 +0,0 @@ -/*! - * Bootswatch v4.1.3 - * Homepage: https://bootswatch.com - * Copyright 2012-2018 Thomas Park - * Licensed under MIT - * Based on Bootstrap -*//*! - * Bootstrap v4.1.3 (https://getbootstrap.com/) - * Copyright 2011-2018 The Bootstrap Authors - * Copyright 2011-2018 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#ee5f5b;--orange:#fd7e14;--yellow:#f89406;--green:#62c462;--teal:#20c997;--cyan:#5bc0de;--white:#fff;--gray:#7A8288;--gray-dark:#3A3F44;--primary:#3A3F44;--secondary:#7A8288;--success:#62c462;--info:#5bc0de;--warning:#f89406;--danger:#ee5f5b;--light:#e9ecef;--dark:#272B30;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-family-monospace:SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace}*,*::before,*::after{-webkit-box-sizing:border-box;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,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", "Noto Color Emoji";font-size:0.9375rem;font-weight:400;line-height:1.5;color:#aaa;text-align:left;background-color:#272B30}[tabindex="-1"]:focus{outline:0 !important}hr{-webkit-box-sizing:content-box;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:#fff;text-decoration:none;background-color:transparent;-webkit-text-decoration-skip:objects}a:hover{color:#d9d9d9;text-decoration:underline}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):hover,a:not([href]):not([tabindex]):focus{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}pre,code,kbd,samp{font-family:SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", 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{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:0.75rem;padding-bottom:0.75rem;color:#7A8288;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:0.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"]{-webkit-box-sizing:border-box;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;cursor:pointer}template{display:none}[hidden]{display:none !important}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{margin-bottom:0.5rem;font-family:inherit;font-weight:500;line-height:1.2;color:inherit}h1,.h1{font-size:2.34375rem}h2,.h2{font-size:1.875rem}h3,.h3{font-size:1.640625rem}h4,.h4{font-size:1.40625rem}h5,.h5{font-size:1.171875rem}h6,.h6{font-size:0.9375rem}.lead{font-size:1.171875rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,0.1)}small,.small{font-size:80%;font-weight:400}mark,.mark{padding:0.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:0.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.171875rem}.blockquote-footer{display:block;font-size:80%;color:#7A8288}.blockquote-footer::before{content:"\2014 \00A0"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:0.25rem;background-color:#272B30;border:1px solid #dee2e6;border-radius:0.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:0.5rem;line-height:1}.figure-caption{font-size:90%;color:#7A8288}code{font-size:87.5%;color:#e83e8c;word-break:break-word}a>code{color:inherit}kbd{padding:0.2rem 0.4rem;font-size:87.5%;color:#fff;background-color:#272B30;border-radius:0.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:inherit}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width: 576px){.container{max-width:540px}}@media (min-width: 768px){.container{max-width:720px}}@media (min-width: 992px){.container{max-width:960px}}@media (min-width: 1200px){.container{max-width:1140px}}.container-fluid{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*="col-"]{padding-right:0;padding-left:0}.col-1,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-10,.col-11,.col-12,.col,.col-auto,.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm,.col-sm-auto,.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12,.col-md,.col-md-auto,.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg,.col-lg-auto,.col-xl-1,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl,.col-xl-auto{position:relative;width:100%;min-height:1px;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-1{-webkit-box-flex:0;-ms-flex:0 0 8.3333333333%;flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-2{-webkit-box-flex:0;-ms-flex:0 0 16.6666666667%;flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-webkit-box-flex:0;-ms-flex:0 0 33.3333333333%;flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-5{-webkit-box-flex:0;-ms-flex:0 0 41.6666666667%;flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-webkit-box-flex:0;-ms-flex:0 0 58.3333333333%;flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-8{-webkit-box-flex:0;-ms-flex:0 0 66.6666666667%;flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-webkit-box-flex:0;-ms-flex:0 0 83.3333333333%;flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-11{-webkit-box-flex:0;-ms-flex:0 0 91.6666666667%;flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-1{margin-left:8.3333333333%}.offset-2{margin-left:16.6666666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.3333333333%}.offset-5{margin-left:41.6666666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.3333333333%}.offset-8{margin-left:66.6666666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.3333333333%}.offset-11{margin-left:91.6666666667%}@media (min-width: 576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-sm-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-sm-1{-webkit-box-flex:0;-ms-flex:0 0 8.3333333333%;flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-sm-2{-webkit-box-flex:0;-ms-flex:0 0 16.6666666667%;flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-sm-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-webkit-box-flex:0;-ms-flex:0 0 33.3333333333%;flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-sm-5{-webkit-box-flex:0;-ms-flex:0 0 41.6666666667%;flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-sm-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-webkit-box-flex:0;-ms-flex:0 0 58.3333333333%;flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-sm-8{-webkit-box-flex:0;-ms-flex:0 0 66.6666666667%;flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-sm-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-webkit-box-flex:0;-ms-flex:0 0 83.3333333333%;flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-sm-11{-webkit-box-flex:0;-ms-flex:0 0 91.6666666667%;flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-sm-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-sm-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-sm-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-sm-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-sm-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-sm-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-sm-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-sm-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-sm-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-sm-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-sm-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-sm-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-sm-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-sm-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-sm-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.3333333333%}.offset-sm-2{margin-left:16.6666666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.3333333333%}.offset-sm-5{margin-left:41.6666666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.3333333333%}.offset-sm-8{margin-left:66.6666666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.3333333333%}.offset-sm-11{margin-left:91.6666666667%}}@media (min-width: 768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-md-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-md-1{-webkit-box-flex:0;-ms-flex:0 0 8.3333333333%;flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-md-2{-webkit-box-flex:0;-ms-flex:0 0 16.6666666667%;flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-md-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-webkit-box-flex:0;-ms-flex:0 0 33.3333333333%;flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-md-5{-webkit-box-flex:0;-ms-flex:0 0 41.6666666667%;flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-md-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-webkit-box-flex:0;-ms-flex:0 0 58.3333333333%;flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-md-8{-webkit-box-flex:0;-ms-flex:0 0 66.6666666667%;flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-md-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-webkit-box-flex:0;-ms-flex:0 0 83.3333333333%;flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-md-11{-webkit-box-flex:0;-ms-flex:0 0 91.6666666667%;flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-md-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-md-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-md-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-md-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-md-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-md-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-md-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-md-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-md-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-md-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-md-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-md-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-md-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-md-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-md-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.3333333333%}.offset-md-2{margin-left:16.6666666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.3333333333%}.offset-md-5{margin-left:41.6666666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.3333333333%}.offset-md-8{margin-left:66.6666666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.3333333333%}.offset-md-11{margin-left:91.6666666667%}}@media (min-width: 992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-lg-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-lg-1{-webkit-box-flex:0;-ms-flex:0 0 8.3333333333%;flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-lg-2{-webkit-box-flex:0;-ms-flex:0 0 16.6666666667%;flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-lg-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-webkit-box-flex:0;-ms-flex:0 0 33.3333333333%;flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-lg-5{-webkit-box-flex:0;-ms-flex:0 0 41.6666666667%;flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-lg-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-webkit-box-flex:0;-ms-flex:0 0 58.3333333333%;flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-lg-8{-webkit-box-flex:0;-ms-flex:0 0 66.6666666667%;flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-lg-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-webkit-box-flex:0;-ms-flex:0 0 83.3333333333%;flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-lg-11{-webkit-box-flex:0;-ms-flex:0 0 91.6666666667%;flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-lg-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-lg-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-lg-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-lg-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-lg-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-lg-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-lg-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-lg-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-lg-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-lg-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-lg-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-lg-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-lg-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-lg-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-lg-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.3333333333%}.offset-lg-2{margin-left:16.6666666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.3333333333%}.offset-lg-5{margin-left:41.6666666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.3333333333%}.offset-lg-8{margin-left:66.6666666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.3333333333%}.offset-lg-11{margin-left:91.6666666667%}}@media (min-width: 1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-xl-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-xl-1{-webkit-box-flex:0;-ms-flex:0 0 8.3333333333%;flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-xl-2{-webkit-box-flex:0;-ms-flex:0 0 16.6666666667%;flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-xl-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-webkit-box-flex:0;-ms-flex:0 0 33.3333333333%;flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-xl-5{-webkit-box-flex:0;-ms-flex:0 0 41.6666666667%;flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-xl-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-webkit-box-flex:0;-ms-flex:0 0 58.3333333333%;flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-xl-8{-webkit-box-flex:0;-ms-flex:0 0 66.6666666667%;flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-xl-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-webkit-box-flex:0;-ms-flex:0 0 83.3333333333%;flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-xl-11{-webkit-box-flex:0;-ms-flex:0 0 91.6666666667%;flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-xl-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-xl-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-xl-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-xl-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-xl-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-xl-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-xl-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-xl-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-xl-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-xl-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-xl-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-xl-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-xl-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-xl-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-xl-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.3333333333%}.offset-xl-2{margin-left:16.6666666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.3333333333%}.offset-xl-5{margin-left:41.6666666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.3333333333%}.offset-xl-8{margin-left:66.6666666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.3333333333%}.offset-xl-11{margin-left:91.6666666667%}}.table{width:100%;margin-bottom:1rem;background-color:transparent}.table th,.table td{padding:0.75rem;vertical-align:top;border-top:1px solid rgba(0,0,0,0.6)}.table thead th{vertical-align:bottom;border-bottom:2px solid rgba(0,0,0,0.6)}.table tbody+tbody{border-top:2px solid rgba(0,0,0,0.6)}.table .table{background-color:#272B30}.table-sm th,.table-sm td{padding:0.3rem}.table-bordered{border:1px solid rgba(0,0,0,0.6)}.table-bordered th,.table-bordered td{border:1px solid rgba(0,0,0,0.6)}.table-bordered thead th,.table-bordered thead td{border-bottom-width:2px}.table-borderless th,.table-borderless td,.table-borderless thead th,.table-borderless tbody+tbody{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,0.05)}.table-hover tbody tr:hover{background-color:rgba(255,255,255,0.075)}.table-primary,.table-primary>th,.table-primary>td{background-color:#c8c9cb}.table-hover .table-primary:hover{background-color:#bbbcbf}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#bbbcbf}.table-secondary,.table-secondary>th,.table-secondary>td{background-color:#dadcde}.table-hover .table-secondary:hover{background-color:#cdcfd2}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#cdcfd2}.table-success,.table-success>th,.table-success>td{background-color:#d3eed3}.table-hover .table-success:hover{background-color:#c1e7c1}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#c1e7c1}.table-info,.table-info>th,.table-info>td{background-color:#d1edf6}.table-hover .table-info:hover{background-color:#bce5f2}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#bce5f2}.table-warning,.table-warning>th,.table-warning>td{background-color:#fde1b9}.table-hover .table-warning:hover{background-color:#fcd6a0}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#fcd6a0}.table-danger,.table-danger>th,.table-danger>td{background-color:#fad2d1}.table-hover .table-danger:hover{background-color:#f8bcba}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f8bcba}.table-light,.table-light>th,.table-light>td{background-color:#f9fafb}.table-hover .table-light:hover{background-color:#eaedf1}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#eaedf1}.table-dark,.table-dark>th,.table-dark>td{background-color:#c3c4c5}.table-hover .table-dark:hover{background-color:#b6b7b8}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b6b7b8}.table-active,.table-active>th,.table-active>td{background-color:rgba(255,255,255,0.075)}.table-hover .table-active:hover{background-color:rgba(242,242,242,0.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(242,242,242,0.075)}.table .thead-dark th{color:#fff;background-color:#272B30;border-color:rgba(0,0,0,0.6)}.table .thead-light th{color:#52575C;background-color:#e9ecef;border-color:rgba(0,0,0,0.6)}.table-dark{color:#fff;background-color:#272B30}.table-dark th,.table-dark td,.table-dark thead th{border-color:rgba(0,0,0,0.6)}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,0.05)}.table-dark.table-hover tbody tr:hover{background-color:rgba(255,255,255,0.075)}@media (max-width: 575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-sm>.table-bordered{border:0}}@media (max-width: 767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-md>.table-bordered{border:0}}@media (max-width: 991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-lg>.table-bordered{border:0}}@media (max-width: 1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(2.90625rem + 2px);padding:0.75rem 1rem;font-size:0.9375rem;line-height:1.5;color:#52575C;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:0.25rem;-webkit-transition:border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;transition:border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;transition:border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;transition:border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out}@media screen and (prefers-reduced-motion: reduce){.form-control{-webkit-transition:none;transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#52575C;background-color:#fff;border-color:#757f89;outline:0;-webkit-box-shadow:0 0 0 0.2rem rgba(58,63,68,0.25);box-shadow:0 0 0 0.2rem rgba(58,63,68,0.25)}.form-control::-webkit-input-placeholder{color:#7A8288;opacity:1}.form-control:-ms-input-placeholder{color:#7A8288;opacity:1}.form-control::-ms-input-placeholder{color:#7A8288;opacity:1}.form-control::placeholder{color:#7A8288;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#ccc;opacity:1}select.form-control:focus::-ms-value{color:#52575C;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(0.75rem + 1px);padding-bottom:calc(0.75rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(0.5rem + 1px);padding-bottom:calc(0.5rem + 1px);font-size:1.171875rem;line-height:1.5}.col-form-label-sm{padding-top:calc(0.25rem + 1px);padding-bottom:calc(0.25rem + 1px);font-size:0.8203125rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding-top:0.75rem;padding-bottom:0.75rem;margin-bottom:0;line-height:1.5;color:#aaa;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-sm,.form-control-plaintext.form-control-lg{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.73046875rem + 2px);padding:0.25rem 0.5rem;font-size:0.8203125rem;line-height:1.5;border-radius:0.2rem}.form-control-lg{height:calc(2.7578125rem + 2px);padding:0.5rem 1rem;font-size:1.171875rem;line-height:1.5;border-radius:0.3rem}select.form-control[size],select.form-control[multiple]{height:auto}textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:0.25rem}.form-row{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*="col-"]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:0.3rem;margin-left:-1.25rem}.form-check-input:disabled ~ .form-check-label{color:#7A8288}.form-check-label{margin-bottom:0}.form-check-inline{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:0.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:0.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:0.25rem;font-size:80%;color:#62c462}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:0.25rem 0.5rem;margin-top:.1rem;font-size:0.8203125rem;line-height:1.5;color:#272B30;background-color:rgba(98,196,98,0.9);border-radius:0.25rem}.was-validated .form-control:valid,.form-control.is-valid,.was-validated .custom-select:valid,.custom-select.is-valid{border-color:#62c462}.was-validated .form-control:valid:focus,.form-control.is-valid:focus,.was-validated .custom-select:valid:focus,.custom-select.is-valid:focus{border-color:#62c462;-webkit-box-shadow:0 0 0 0.2rem rgba(98,196,98,0.25);box-shadow:0 0 0 0.2rem rgba(98,196,98,0.25)}.was-validated .form-control:valid ~ .valid-feedback,.was-validated .form-control:valid ~ .valid-tooltip,.form-control.is-valid ~ .valid-feedback,.form-control.is-valid ~ .valid-tooltip,.was-validated .custom-select:valid ~ .valid-feedback,.was-validated .custom-select:valid ~ .valid-tooltip,.custom-select.is-valid ~ .valid-feedback,.custom-select.is-valid ~ .valid-tooltip{display:block}.was-validated .form-control-file:valid ~ .valid-feedback,.was-validated .form-control-file:valid ~ .valid-tooltip,.form-control-file.is-valid ~ .valid-feedback,.form-control-file.is-valid ~ .valid-tooltip{display:block}.was-validated .form-check-input:valid ~ .form-check-label,.form-check-input.is-valid ~ .form-check-label{color:#62c462}.was-validated .form-check-input:valid ~ .valid-feedback,.was-validated .form-check-input:valid ~ .valid-tooltip,.form-check-input.is-valid ~ .valid-feedback,.form-check-input.is-valid ~ .valid-tooltip{display:block}.was-validated .custom-control-input:valid ~ .custom-control-label,.custom-control-input.is-valid ~ .custom-control-label{color:#62c462}.was-validated .custom-control-input:valid ~ .custom-control-label::before,.custom-control-input.is-valid ~ .custom-control-label::before{background-color:#bfe7bf}.was-validated .custom-control-input:valid ~ .valid-feedback,.was-validated .custom-control-input:valid ~ .valid-tooltip,.custom-control-input.is-valid ~ .valid-feedback,.custom-control-input.is-valid ~ .valid-tooltip{display:block}.was-validated .custom-control-input:valid:checked ~ .custom-control-label::before,.custom-control-input.is-valid:checked ~ .custom-control-label::before{background-color:#87d287}.was-validated .custom-control-input:valid:focus ~ .custom-control-label::before,.custom-control-input.is-valid:focus ~ .custom-control-label::before{-webkit-box-shadow:0 0 0 1px #272B30,0 0 0 0.2rem rgba(98,196,98,0.25);box-shadow:0 0 0 1px #272B30,0 0 0 0.2rem rgba(98,196,98,0.25)}.was-validated .custom-file-input:valid ~ .custom-file-label,.custom-file-input.is-valid ~ .custom-file-label{border-color:#62c462}.was-validated .custom-file-input:valid ~ .custom-file-label::after,.custom-file-input.is-valid ~ .custom-file-label::after{border-color:inherit}.was-validated .custom-file-input:valid ~ .valid-feedback,.was-validated .custom-file-input:valid ~ .valid-tooltip,.custom-file-input.is-valid ~ .valid-feedback,.custom-file-input.is-valid ~ .valid-tooltip{display:block}.was-validated .custom-file-input:valid:focus ~ .custom-file-label,.custom-file-input.is-valid:focus ~ .custom-file-label{-webkit-box-shadow:0 0 0 0.2rem rgba(98,196,98,0.25);box-shadow:0 0 0 0.2rem rgba(98,196,98,0.25)}.invalid-feedback{display:none;width:100%;margin-top:0.25rem;font-size:80%;color:#ee5f5b}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:0.25rem 0.5rem;margin-top:.1rem;font-size:0.8203125rem;line-height:1.5;color:#fff;background-color:rgba(238,95,91,0.9);border-radius:0.25rem}.was-validated .form-control:invalid,.form-control.is-invalid,.was-validated .custom-select:invalid,.custom-select.is-invalid{border-color:#ee5f5b}.was-validated .form-control:invalid:focus,.form-control.is-invalid:focus,.was-validated .custom-select:invalid:focus,.custom-select.is-invalid:focus{border-color:#ee5f5b;-webkit-box-shadow:0 0 0 0.2rem rgba(238,95,91,0.25);box-shadow:0 0 0 0.2rem rgba(238,95,91,0.25)}.was-validated .form-control:invalid ~ .invalid-feedback,.was-validated .form-control:invalid ~ .invalid-tooltip,.form-control.is-invalid ~ .invalid-feedback,.form-control.is-invalid ~ .invalid-tooltip,.was-validated .custom-select:invalid ~ .invalid-feedback,.was-validated .custom-select:invalid ~ .invalid-tooltip,.custom-select.is-invalid ~ .invalid-feedback,.custom-select.is-invalid ~ .invalid-tooltip{display:block}.was-validated .form-control-file:invalid ~ .invalid-feedback,.was-validated .form-control-file:invalid ~ .invalid-tooltip,.form-control-file.is-invalid ~ .invalid-feedback,.form-control-file.is-invalid ~ .invalid-tooltip{display:block}.was-validated .form-check-input:invalid ~ .form-check-label,.form-check-input.is-invalid ~ .form-check-label{color:#ee5f5b}.was-validated .form-check-input:invalid ~ .invalid-feedback,.was-validated .form-check-input:invalid ~ .invalid-tooltip,.form-check-input.is-invalid ~ .invalid-feedback,.form-check-input.is-invalid ~ .invalid-tooltip{display:block}.was-validated .custom-control-input:invalid ~ .custom-control-label,.custom-control-input.is-invalid ~ .custom-control-label{color:#ee5f5b}.was-validated .custom-control-input:invalid ~ .custom-control-label::before,.custom-control-input.is-invalid ~ .custom-control-label::before{background-color:#fad0cf}.was-validated .custom-control-input:invalid ~ .invalid-feedback,.was-validated .custom-control-input:invalid ~ .invalid-tooltip,.custom-control-input.is-invalid ~ .invalid-feedback,.custom-control-input.is-invalid ~ .invalid-tooltip{display:block}.was-validated .custom-control-input:invalid:checked ~ .custom-control-label::before,.custom-control-input.is-invalid:checked ~ .custom-control-label::before{background-color:#f38c89}.was-validated .custom-control-input:invalid:focus ~ .custom-control-label::before,.custom-control-input.is-invalid:focus ~ .custom-control-label::before{-webkit-box-shadow:0 0 0 1px #272B30,0 0 0 0.2rem rgba(238,95,91,0.25);box-shadow:0 0 0 1px #272B30,0 0 0 0.2rem rgba(238,95,91,0.25)}.was-validated .custom-file-input:invalid ~ .custom-file-label,.custom-file-input.is-invalid ~ .custom-file-label{border-color:#ee5f5b}.was-validated .custom-file-input:invalid ~ .custom-file-label::after,.custom-file-input.is-invalid ~ .custom-file-label::after{border-color:inherit}.was-validated .custom-file-input:invalid ~ .invalid-feedback,.was-validated .custom-file-input:invalid ~ .invalid-tooltip,.custom-file-input.is-invalid ~ .invalid-feedback,.custom-file-input.is-invalid ~ .invalid-tooltip{display:block}.was-validated .custom-file-input:invalid:focus ~ .custom-file-label,.custom-file-input.is-invalid:focus ~ .custom-file-label{-webkit-box-shadow:0 0 0 0.2rem rgba(238,95,91,0.25);box-shadow:0 0 0 0.2rem rgba(238,95,91,0.25)}.form-inline{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width: 576px){.form-inline label{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .input-group,.form-inline .custom-select{width:auto}.form-inline .form-check{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;margin-top:0;margin-right:0.25rem;margin-left:0}.form-inline .custom-control{-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;text-align:center;white-space:nowrap;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:1px solid transparent;padding:0.75rem 1rem;font-size:0.9375rem;line-height:1.5;border-radius:0.25rem;-webkit-transition:color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;transition:color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;transition:color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;transition:color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out}@media screen and (prefers-reduced-motion: reduce){.btn{-webkit-transition:none;transition:none}}.btn:hover,.btn:focus{text-decoration:none}.btn:focus,.btn.focus{outline:0;-webkit-box-shadow:0 0 0 0.2rem rgba(58,63,68,0.25);box-shadow:0 0 0 0.2rem rgba(58,63,68,0.25)}.btn.disabled,.btn:disabled{opacity:0.65}.btn:not(:disabled):not(.disabled){cursor:pointer}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#3A3F44;border-color:#3A3F44}.btn-primary:hover{color:#fff;background-color:#282c2f;border-color:#232628}.btn-primary:focus,.btn-primary.focus{-webkit-box-shadow:0 0 0 0.2rem rgba(58,63,68,0.5);box-shadow:0 0 0 0.2rem rgba(58,63,68,0.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#3A3F44;border-color:#3A3F44}.btn-primary:not(:disabled):not(.disabled):active,.btn-primary:not(:disabled):not(.disabled).active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#232628;border-color:#1d1f22}.btn-primary:not(:disabled):not(.disabled):active:focus,.btn-primary:not(:disabled):not(.disabled).active:focus,.show>.btn-primary.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 0.2rem rgba(58,63,68,0.5);box-shadow:0 0 0 0.2rem rgba(58,63,68,0.5)}.btn-secondary{color:#fff;background-color:#7A8288;border-color:#7A8288}.btn-secondary:hover{color:#fff;background-color:#686f74;border-color:#62686d}.btn-secondary:focus,.btn-secondary.focus{-webkit-box-shadow:0 0 0 0.2rem rgba(122,130,136,0.5);box-shadow:0 0 0 0.2rem rgba(122,130,136,0.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#7A8288;border-color:#7A8288}.btn-secondary:not(:disabled):not(.disabled):active,.btn-secondary:not(:disabled):not(.disabled).active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#62686d;border-color:#5c6267}.btn-secondary:not(:disabled):not(.disabled):active:focus,.btn-secondary:not(:disabled):not(.disabled).active:focus,.show>.btn-secondary.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 0.2rem rgba(122,130,136,0.5);box-shadow:0 0 0 0.2rem rgba(122,130,136,0.5)}.btn-success{color:#272B30;background-color:#62c462;border-color:#62c462}.btn-success:hover{color:#fff;background-color:#46ba46;border-color:#42b142}.btn-success:focus,.btn-success.focus{-webkit-box-shadow:0 0 0 0.2rem rgba(98,196,98,0.5);box-shadow:0 0 0 0.2rem rgba(98,196,98,0.5)}.btn-success.disabled,.btn-success:disabled{color:#272B30;background-color:#62c462;border-color:#62c462}.btn-success:not(:disabled):not(.disabled):active,.btn-success:not(:disabled):not(.disabled).active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#42b142;border-color:#3fa73f}.btn-success:not(:disabled):not(.disabled):active:focus,.btn-success:not(:disabled):not(.disabled).active:focus,.show>.btn-success.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 0.2rem rgba(98,196,98,0.5);box-shadow:0 0 0 0.2rem rgba(98,196,98,0.5)}.btn-info{color:#272B30;background-color:#5bc0de;border-color:#5bc0de}.btn-info:hover{color:#fff;background-color:#3bb4d8;border-color:#31b0d5}.btn-info:focus,.btn-info.focus{-webkit-box-shadow:0 0 0 0.2rem rgba(91,192,222,0.5);box-shadow:0 0 0 0.2rem rgba(91,192,222,0.5)}.btn-info.disabled,.btn-info:disabled{color:#272B30;background-color:#5bc0de;border-color:#5bc0de}.btn-info:not(:disabled):not(.disabled):active,.btn-info:not(:disabled):not(.disabled).active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#31b0d5;border-color:#2aaacf}.btn-info:not(:disabled):not(.disabled):active:focus,.btn-info:not(:disabled):not(.disabled).active:focus,.show>.btn-info.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 0.2rem rgba(91,192,222,0.5);box-shadow:0 0 0 0.2rem rgba(91,192,222,0.5)}.btn-warning{color:#272B30;background-color:#f89406;border-color:#f89406}.btn-warning:hover{color:#fff;background-color:#d37e05;border-color:#c67605}.btn-warning:focus,.btn-warning.focus{-webkit-box-shadow:0 0 0 0.2rem rgba(248,148,6,0.5);box-shadow:0 0 0 0.2rem rgba(248,148,6,0.5)}.btn-warning.disabled,.btn-warning:disabled{color:#272B30;background-color:#f89406;border-color:#f89406}.btn-warning:not(:disabled):not(.disabled):active,.btn-warning:not(:disabled):not(.disabled).active,.show>.btn-warning.dropdown-toggle{color:#fff;background-color:#c67605;border-color:#ba6f04}.btn-warning:not(:disabled):not(.disabled):active:focus,.btn-warning:not(:disabled):not(.disabled).active:focus,.show>.btn-warning.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 0.2rem rgba(248,148,6,0.5);box-shadow:0 0 0 0.2rem rgba(248,148,6,0.5)}.btn-danger{color:#fff;background-color:#ee5f5b;border-color:#ee5f5b}.btn-danger:hover{color:#fff;background-color:#ea3d38;border-color:#e9322d}.btn-danger:focus,.btn-danger.focus{-webkit-box-shadow:0 0 0 0.2rem rgba(238,95,91,0.5);box-shadow:0 0 0 0.2rem rgba(238,95,91,0.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#ee5f5b;border-color:#ee5f5b}.btn-danger:not(:disabled):not(.disabled):active,.btn-danger:not(:disabled):not(.disabled).active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#e9322d;border-color:#e82721}.btn-danger:not(:disabled):not(.disabled):active:focus,.btn-danger:not(:disabled):not(.disabled).active:focus,.show>.btn-danger.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 0.2rem rgba(238,95,91,0.5);box-shadow:0 0 0 0.2rem rgba(238,95,91,0.5)}.btn-light{color:#272B30;background-color:#e9ecef;border-color:#e9ecef}.btn-light:hover{color:#272B30;background-color:#d3d9df;border-color:#cbd3da}.btn-light:focus,.btn-light.focus{-webkit-box-shadow:0 0 0 0.2rem rgba(233,236,239,0.5);box-shadow:0 0 0 0.2rem rgba(233,236,239,0.5)}.btn-light.disabled,.btn-light:disabled{color:#272B30;background-color:#e9ecef;border-color:#e9ecef}.btn-light:not(:disabled):not(.disabled):active,.btn-light:not(:disabled):not(.disabled).active,.show>.btn-light.dropdown-toggle{color:#272B30;background-color:#cbd3da;border-color:#c4ccd4}.btn-light:not(:disabled):not(.disabled):active:focus,.btn-light:not(:disabled):not(.disabled).active:focus,.show>.btn-light.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 0.2rem rgba(233,236,239,0.5);box-shadow:0 0 0 0.2rem rgba(233,236,239,0.5)}.btn-dark{color:#fff;background-color:#272B30;border-color:#272B30}.btn-dark:hover{color:#fff;background-color:#16181b;border-color:#101214}.btn-dark:focus,.btn-dark.focus{-webkit-box-shadow:0 0 0 0.2rem rgba(39,43,48,0.5);box-shadow:0 0 0 0.2rem rgba(39,43,48,0.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#272B30;border-color:#272B30}.btn-dark:not(:disabled):not(.disabled):active,.btn-dark:not(:disabled):not(.disabled).active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#101214;border-color:#0a0b0d}.btn-dark:not(:disabled):not(.disabled):active:focus,.btn-dark:not(:disabled):not(.disabled).active:focus,.show>.btn-dark.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 0.2rem rgba(39,43,48,0.5);box-shadow:0 0 0 0.2rem rgba(39,43,48,0.5)}.btn-outline-primary{color:#3A3F44;background-color:transparent;background-image:none;border-color:#3A3F44}.btn-outline-primary:hover{color:#fff;background-color:#3A3F44;border-color:#3A3F44}.btn-outline-primary:focus,.btn-outline-primary.focus{-webkit-box-shadow:0 0 0 0.2rem rgba(58,63,68,0.5);box-shadow:0 0 0 0.2rem rgba(58,63,68,0.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#3A3F44;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled):active,.btn-outline-primary:not(:disabled):not(.disabled).active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#3A3F44;border-color:#3A3F44}.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 0.2rem rgba(58,63,68,0.5);box-shadow:0 0 0 0.2rem rgba(58,63,68,0.5)}.btn-outline-secondary{color:#7A8288;background-color:transparent;background-image:none;border-color:#7A8288}.btn-outline-secondary:hover{color:#fff;background-color:#7A8288;border-color:#7A8288}.btn-outline-secondary:focus,.btn-outline-secondary.focus{-webkit-box-shadow:0 0 0 0.2rem rgba(122,130,136,0.5);box-shadow:0 0 0 0.2rem rgba(122,130,136,0.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#7A8288;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled):active,.btn-outline-secondary:not(:disabled):not(.disabled).active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#7A8288;border-color:#7A8288}.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 0.2rem rgba(122,130,136,0.5);box-shadow:0 0 0 0.2rem rgba(122,130,136,0.5)}.btn-outline-success{color:#62c462;background-color:transparent;background-image:none;border-color:#62c462}.btn-outline-success:hover{color:#272B30;background-color:#62c462;border-color:#62c462}.btn-outline-success:focus,.btn-outline-success.focus{-webkit-box-shadow:0 0 0 0.2rem rgba(98,196,98,0.5);box-shadow:0 0 0 0.2rem rgba(98,196,98,0.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#62c462;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled):active,.btn-outline-success:not(:disabled):not(.disabled).active,.show>.btn-outline-success.dropdown-toggle{color:#272B30;background-color:#62c462;border-color:#62c462}.btn-outline-success:not(:disabled):not(.disabled):active:focus,.btn-outline-success:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-success.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 0.2rem rgba(98,196,98,0.5);box-shadow:0 0 0 0.2rem rgba(98,196,98,0.5)}.btn-outline-info{color:#5bc0de;background-color:transparent;background-image:none;border-color:#5bc0de}.btn-outline-info:hover{color:#272B30;background-color:#5bc0de;border-color:#5bc0de}.btn-outline-info:focus,.btn-outline-info.focus{-webkit-box-shadow:0 0 0 0.2rem rgba(91,192,222,0.5);box-shadow:0 0 0 0.2rem rgba(91,192,222,0.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#5bc0de;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled):active,.btn-outline-info:not(:disabled):not(.disabled).active,.show>.btn-outline-info.dropdown-toggle{color:#272B30;background-color:#5bc0de;border-color:#5bc0de}.btn-outline-info:not(:disabled):not(.disabled):active:focus,.btn-outline-info:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-info.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 0.2rem rgba(91,192,222,0.5);box-shadow:0 0 0 0.2rem rgba(91,192,222,0.5)}.btn-outline-warning{color:#f89406;background-color:transparent;background-image:none;border-color:#f89406}.btn-outline-warning:hover{color:#272B30;background-color:#f89406;border-color:#f89406}.btn-outline-warning:focus,.btn-outline-warning.focus{-webkit-box-shadow:0 0 0 0.2rem rgba(248,148,6,0.5);box-shadow:0 0 0 0.2rem rgba(248,148,6,0.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#f89406;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled):active,.btn-outline-warning:not(:disabled):not(.disabled).active,.show>.btn-outline-warning.dropdown-toggle{color:#272B30;background-color:#f89406;border-color:#f89406}.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 0.2rem rgba(248,148,6,0.5);box-shadow:0 0 0 0.2rem rgba(248,148,6,0.5)}.btn-outline-danger{color:#ee5f5b;background-color:transparent;background-image:none;border-color:#ee5f5b}.btn-outline-danger:hover{color:#fff;background-color:#ee5f5b;border-color:#ee5f5b}.btn-outline-danger:focus,.btn-outline-danger.focus{-webkit-box-shadow:0 0 0 0.2rem rgba(238,95,91,0.5);box-shadow:0 0 0 0.2rem rgba(238,95,91,0.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#ee5f5b;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled):active,.btn-outline-danger:not(:disabled):not(.disabled).active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#ee5f5b;border-color:#ee5f5b}.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 0.2rem rgba(238,95,91,0.5);box-shadow:0 0 0 0.2rem rgba(238,95,91,0.5)}.btn-outline-light{color:#e9ecef;background-color:transparent;background-image:none;border-color:#e9ecef}.btn-outline-light:hover{color:#272B30;background-color:#e9ecef;border-color:#e9ecef}.btn-outline-light:focus,.btn-outline-light.focus{-webkit-box-shadow:0 0 0 0.2rem rgba(233,236,239,0.5);box-shadow:0 0 0 0.2rem rgba(233,236,239,0.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#e9ecef;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled):active,.btn-outline-light:not(:disabled):not(.disabled).active,.show>.btn-outline-light.dropdown-toggle{color:#272B30;background-color:#e9ecef;border-color:#e9ecef}.btn-outline-light:not(:disabled):not(.disabled):active:focus,.btn-outline-light:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-light.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 0.2rem rgba(233,236,239,0.5);box-shadow:0 0 0 0.2rem rgba(233,236,239,0.5)}.btn-outline-dark{color:#272B30;background-color:transparent;background-image:none;border-color:#272B30}.btn-outline-dark:hover{color:#fff;background-color:#272B30;border-color:#272B30}.btn-outline-dark:focus,.btn-outline-dark.focus{-webkit-box-shadow:0 0 0 0.2rem rgba(39,43,48,0.5);box-shadow:0 0 0 0.2rem rgba(39,43,48,0.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#272B30;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled):active,.btn-outline-dark:not(:disabled):not(.disabled).active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#272B30;border-color:#272B30}.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 0.2rem rgba(39,43,48,0.5);box-shadow:0 0 0 0.2rem rgba(39,43,48,0.5)}.btn-link{font-weight:400;color:#fff;background-color:transparent}.btn-link:hover{color:#d9d9d9;text-decoration:underline;background-color:transparent;border-color:transparent}.btn-link:focus,.btn-link.focus{text-decoration:underline;border-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link:disabled,.btn-link.disabled{color:#7A8288;pointer-events:none}.btn-lg,.btn-group-lg>.btn{padding:0.5rem 1rem;font-size:1.171875rem;line-height:1.5;border-radius:0.3rem}.btn-sm,.btn-group-sm>.btn{padding:0.25rem 0.5rem;font-size:0.8203125rem;line-height:1.5;border-radius:0.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:0.5rem}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.fade{-webkit-transition:opacity 0.15s linear;transition:opacity 0.15s linear}@media screen and (prefers-reduced-motion: reduce){.fade{-webkit-transition:none;transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition:height 0.35s ease;transition:height 0.35s ease}@media screen and (prefers-reduced-motion: reduce){.collapsing{-webkit-transition:none;transition:none}}.dropup,.dropright,.dropdown,.dropleft{position:relative}.dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:0.255em;vertical-align:0.255em;content:"";border-top:0.3em solid;border-right:0.3em solid transparent;border-bottom:0;border-left:0.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:0.5rem 0;margin:0.125rem 0 0;font-size:0.9375rem;color:#aaa;text-align:left;list-style:none;background-color:#3A3F44;background-clip:padding-box;border:1px solid rgba(0,0,0,0.15);border-radius:0.25rem}.dropdown-menu-right{right:0;left:auto}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:0.125rem}.dropup .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:0.255em;vertical-align:0.255em;content:"";border-top:0;border-right:0.3em solid transparent;border-bottom:0.3em solid;border-left:0.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:0.125rem}.dropright .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:0.255em;vertical-align:0.255em;content:"";border-top:0.3em solid transparent;border-right:0;border-bottom:0.3em solid transparent;border-left:0.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:0.125rem}.dropleft .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:0.255em;vertical-align:0.255em;content:""}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;width:0;height:0;margin-right:0.255em;vertical-align:0.255em;content:"";border-top:0.3em solid transparent;border-right:0.3em solid;border-bottom:0.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-menu[x-placement^="top"],.dropdown-menu[x-placement^="right"],.dropdown-menu[x-placement^="bottom"],.dropdown-menu[x-placement^="left"]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:0.5rem 0;overflow:hidden;border-top:1px solid rgba(0,0,0,0.15)}.dropdown-item{display:block;width:100%;padding:0.25rem 1.5rem;clear:both;font-weight:400;color:#aaa;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:hover,.dropdown-item:focus{color:#fff;text-decoration:none;background-color:#272B30}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#3A3F44}.dropdown-item.disabled,.dropdown-item:disabled{color:#7A8288;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:0.5rem 1.5rem;margin-bottom:0;font-size:0.8203125rem;color:#7A8288;white-space:nowrap}.dropdown-item-text{display:block;padding:0.25rem 1.5rem;color:#aaa}.btn-group,.btn-group-vertical{position:relative;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover{z-index:1}.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn.active{z-index:1}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group,.btn-group-vertical .btn+.btn,.btn-group-vertical .btn+.btn-group,.btn-group-vertical .btn-group+.btn,.btn-group-vertical .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:not(:last-child):not(.dropdown-toggle),.btn-group>.btn-group:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:not(:first-child),.btn-group>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:0.75rem;padding-left:0.75rem}.dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after,.dropright .dropdown-toggle-split::after{margin-left:0}.dropleft .dropdown-toggle-split::before{margin-right:0}.btn-sm+.dropdown-toggle-split,.btn-group-sm>.btn+.dropdown-toggle-split{padding-right:0.375rem;padding-left:0.375rem}.btn-lg+.dropdown-toggle-split,.btn-group-lg>.btn+.dropdown-toggle-split{padding-right:0.75rem;padding-left:0.75rem}.btn-group-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.btn-group-vertical .btn,.btn-group-vertical .btn-group{width:100%}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle),.btn-group-vertical>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:not(:first-child),.btn-group-vertical>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type="radio"],.btn-group-toggle>.btn input[type="checkbox"],.btn-group-toggle>.btn-group>.btn input[type="radio"],.btn-group-toggle>.btn-group>.btn input[type="checkbox"]{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.input-group{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.form-control,.input-group>.custom-select,.input-group>.custom-file{position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;margin-bottom:0}.input-group>.form-control+.form-control,.input-group>.form-control+.custom-select,.input-group>.form-control+.custom-file,.input-group>.custom-select+.form-control,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.custom-file,.input-group>.custom-file+.form-control,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.custom-file{margin-left:-1px}.input-group>.form-control:focus,.input-group>.custom-select:focus,.input-group>.custom-file .custom-file-input:focus ~ .custom-file-label{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.form-control:not(:last-child),.input-group>.custom-select:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.form-control:not(:first-child),.input-group>.custom-select:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-prepend,.input-group-append{display:-webkit-box;display:-ms-flexbox;display:flex}.input-group-prepend .btn,.input-group-append .btn{position:relative;z-index:2}.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.input-group-text,.input-group-append .input-group-text+.btn{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:0.75rem 1rem;margin-bottom:0;font-size:0.9375rem;font-weight:400;line-height:1.5;color:#52575C;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:0.25rem}.input-group-text input[type="radio"],.input-group-text input[type="checkbox"]{margin-top:0}.input-group-lg>.form-control,.input-group-lg>.input-group-prepend>.input-group-text,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-append>.btn{height:calc(2.7578125rem + 2px);padding:0.5rem 1rem;font-size:1.171875rem;line-height:1.5;border-radius:0.3rem}.input-group-sm>.form-control,.input-group-sm>.input-group-prepend>.input-group-text,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-append>.btn{height:calc(1.73046875rem + 2px);padding:0.25rem 0.5rem;font-size:0.8203125rem;line-height:1.5;border-radius:0.2rem}.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text,.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.40625rem;padding-left:1.5rem}.custom-control-inline{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;z-index:-1;opacity:0}.custom-control-input:checked ~ .custom-control-label::before{color:#fff;background-color:#3A3F44}.custom-control-input:focus ~ .custom-control-label::before{-webkit-box-shadow:0 0 0 1px #272B30,0 0 0 0.2rem rgba(58,63,68,0.25);box-shadow:0 0 0 1px #272B30,0 0 0 0.2rem rgba(58,63,68,0.25)}.custom-control-input:active ~ .custom-control-label::before{color:#fff;background-color:#9098a0}.custom-control-input:disabled ~ .custom-control-label{color:#7A8288}.custom-control-input:disabled ~ .custom-control-label::before{background-color:#e9ecef}.custom-control-label{position:relative;margin-bottom:0}.custom-control-label::before{position:absolute;top:0.203125rem;left:-1.5rem;display:block;width:1rem;height:1rem;pointer-events:none;content:"";-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#dee2e6}.custom-control-label::after{position:absolute;top:0.203125rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:"";background-repeat:no-repeat;background-position:center center;background-size:50% 50%}.custom-checkbox .custom-control-label::before{border-radius:0.25rem}.custom-checkbox .custom-control-input:checked ~ .custom-control-label::before{background-color:#3A3F44}.custom-checkbox .custom-control-input:checked ~ .custom-control-label::after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::before{background-color:#3A3F44}.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:disabled:checked ~ .custom-control-label::before{background-color:rgba(58,63,68,0.5)}.custom-checkbox .custom-control-input:disabled:indeterminate ~ .custom-control-label::before{background-color:rgba(58,63,68,0.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked ~ .custom-control-label::before{background-color:#3A3F44}.custom-radio .custom-control-input:checked ~ .custom-control-label::after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E")}.custom-radio .custom-control-input:disabled:checked ~ .custom-control-label::before{background-color:rgba(58,63,68,0.5)}.custom-select{display:inline-block;width:100%;height:calc(2.90625rem + 2px);padding:0.375rem 1.75rem 0.375rem 0.75rem;line-height:1.5;color:#52575C;vertical-align:middle;background:#fff url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%233A3F44' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right 0.75rem center;background-size:8px 10px;border:1px solid #ced4da;border-radius:0.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#757f89;outline:0;-webkit-box-shadow:0 0 0 0.2rem rgba(117,127,137,0.5);box-shadow:0 0 0 0.2rem rgba(117,127,137,0.5)}.custom-select:focus::-ms-value{color:#52575C;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:0.75rem;background-image:none}.custom-select:disabled{color:#7A8288;background-color:#e9ecef}.custom-select::-ms-expand{opacity:0}.custom-select-sm{height:calc(1.73046875rem + 2px);padding-top:0.375rem;padding-bottom:0.375rem;font-size:75%}.custom-select-lg{height:calc(2.7578125rem + 2px);padding-top:0.375rem;padding-bottom:0.375rem;font-size:125%}.custom-file{position:relative;display:inline-block;width:100%;height:calc(2.90625rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(2.90625rem + 2px);margin:0;opacity:0}.custom-file-input:focus ~ .custom-file-label{border-color:#757f89;-webkit-box-shadow:0 0 0 0.2rem rgba(58,63,68,0.25);box-shadow:0 0 0 0.2rem rgba(58,63,68,0.25)}.custom-file-input:focus ~ .custom-file-label::after{border-color:#757f89}.custom-file-input:disabled ~ .custom-file-label{background-color:#ccc}.custom-file-input:lang(en) ~ .custom-file-label::after{content:"Browse"}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(2.90625rem + 2px);padding:0.75rem 1rem;line-height:1.5;color:#52575C;background-color:#fff;border:1px solid #ced4da;border-radius:0.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:2.90625rem;padding:0.75rem 1rem;line-height:1.5;color:#52575C;content:"Browse";background-color:#e9ecef;border-left:1px solid #ced4da;border-radius:0 0.25rem 0.25rem 0}.custom-range{width:100%;padding-left:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-range:focus{outline:none}.custom-range:focus::-webkit-slider-thumb{-webkit-box-shadow:0 0 0 1px #272B30,0 0 0 0.2rem rgba(58,63,68,0.25);box-shadow:0 0 0 1px #272B30,0 0 0 0.2rem rgba(58,63,68,0.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #272B30,0 0 0 0.2rem rgba(58,63,68,0.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #272B30,0 0 0 0.2rem rgba(58,63,68,0.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-0.25rem;background-color:#3A3F44;border:0;border-radius:1rem;-webkit-transition:background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;transition:background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;transition:background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;transition:background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;-webkit-appearance:none;appearance:none}@media screen and (prefers-reduced-motion: reduce){.custom-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#9098a0}.custom-range::-webkit-slider-runnable-track{width:100%;height:0.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#3A3F44;border:0;border-radius:1rem;-webkit-transition:background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;transition:background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;transition:background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;transition:background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;-moz-appearance:none;appearance:none}@media screen and (prefers-reduced-motion: reduce){.custom-range::-moz-range-thumb{-webkit-transition:none;transition:none}}.custom-range::-moz-range-thumb:active{background-color:#9098a0}.custom-range::-moz-range-track{width:100%;height:0.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:0.2rem;margin-left:0.2rem;background-color:#3A3F44;border:0;border-radius:1rem;-webkit-transition:background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;transition:background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;transition:background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;transition:background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;appearance:none}@media screen and (prefers-reduced-motion: reduce){.custom-range::-ms-thumb{-webkit-transition:none;transition:none}}.custom-range::-ms-thumb:active{background-color:#9098a0}.custom-range::-ms-track{width:100%;height:0.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:0.5rem}.custom-range::-ms-fill-lower{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px;background-color:#dee2e6;border-radius:1rem}.custom-control-label::before,.custom-file-label,.custom-select{-webkit-transition:background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;transition:background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;transition:background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;transition:background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out}@media screen and (prefers-reduced-motion: reduce){.custom-control-label::before,.custom-file-label,.custom-select{-webkit-transition:none;transition:none}}.nav{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:0.5rem 1rem}.nav-link:hover,.nav-link:focus{text-decoration:none}.nav-link.disabled{color:#7A8288}.nav-tabs{border-bottom:1px solid rgba(0,0,0,0.6)}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:0.25rem;border-top-right-radius:0.25rem}.nav-tabs .nav-link:hover,.nav-tabs .nav-link:focus{border-color:rgba(0,0,0,0.6)}.nav-tabs .nav-link.disabled{color:#7A8288;background-color:transparent;border-color:transparent}.nav-tabs .nav-link.active,.nav-tabs .nav-item.show .nav-link{color:#fff;background-color:#272B30;border-color:rgba(0,0,0,0.6)}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:0.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#3A3F44}.nav-fill .nav-item{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:0 1rem}.navbar>.container,.navbar>.container-fluid{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:0.32421875rem;padding-bottom:0.32421875rem;margin-right:1rem;font-size:1.171875rem;line-height:inherit;white-space:nowrap}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}.navbar-nav{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:0.5rem;padding-bottom:0.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:0.25rem 0.75rem;font-size:1.171875rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:0.25rem}.navbar-toggler:hover,.navbar-toggler:focus{text-decoration:none}.navbar-toggler:not(:disabled):not(.disabled){cursor:pointer}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat center center;background-size:100% 100%}@media (max-width: 575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{padding-right:0;padding-left:0}}@media (min-width: 576px){.navbar-expand-sm{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:0.5rem;padding-left:0.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:-webkit-box !important;display:-ms-flexbox !important;display:flex !important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width: 767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{padding-right:0;padding-left:0}}@media (min-width: 768px){.navbar-expand-md{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:0.5rem;padding-left:0.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:-webkit-box !important;display:-ms-flexbox !important;display:flex !important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width: 991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{padding-right:0;padding-left:0}}@media (min-width: 992px){.navbar-expand-lg{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:0.5rem;padding-left:0.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:-webkit-box !important;display:-ms-flexbox !important;display:flex !important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width: 1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{padding-right:0;padding-left:0}}@media (min-width: 1200px){.navbar-expand-xl{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:0.5rem;padding-left:0.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:-webkit-box !important;display:-ms-flexbox !important;display:flex !important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:0.5rem;padding-left:0.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:-webkit-box !important;display:-ms-flexbox !important;display:flex !important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand{color:#3A3F44}.navbar-light .navbar-brand:hover,.navbar-light .navbar-brand:focus{color:#3A3F44}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,0.5)}.navbar-light .navbar-nav .nav-link:hover,.navbar-light .navbar-nav .nav-link:focus{color:#3A3F44}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,0.3)}.navbar-light .navbar-nav .show>.nav-link,.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .nav-link.active{color:#3A3F44}.navbar-light .navbar-toggler{color:rgba(0,0,0,0.5);border-color:rgba(0,0,0,0.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-light .navbar-text{color:rgba(0,0,0,0.5)}.navbar-light .navbar-text a{color:#3A3F44}.navbar-light .navbar-text a:hover,.navbar-light .navbar-text a:focus{color:#3A3F44}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:hover,.navbar-dark .navbar-brand:focus{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,0.5)}.navbar-dark .navbar-nav .nav-link:hover,.navbar-dark .navbar-nav .nav-link:focus{color:#fff}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,0.25)}.navbar-dark .navbar-nav .show>.nav-link,.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .nav-link.active{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,0.5);border-color:rgba(255,255,255,0.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-dark .navbar-text{color:rgba(255,255,255,0.5)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:hover,.navbar-dark .navbar-text a:focus{color:#fff}.card{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#32383e;background-clip:border-box;border:1px solid rgba(0,0,0,0.6);border-radius:0.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:0.25rem;border-top-right-radius:0.25rem}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:0.25rem;border-bottom-left-radius:0.25rem}.card-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:1.25rem}.card-title{margin-bottom:0.75rem}.card-subtitle{margin-top:-0.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:0.75rem 1.25rem;margin-bottom:0;background-color:#515960;border-bottom:1px solid rgba(0,0,0,0.6)}.card-header:first-child{border-radius:calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:0.75rem 1.25rem;background-color:#515960;border-top:1px solid rgba(0,0,0,0.6)}.card-footer:last-child{border-radius:0 0 calc(0.25rem - 1px) calc(0.25rem - 1px)}.card-header-tabs{margin-right:-0.625rem;margin-bottom:-0.75rem;margin-left:-0.625rem;border-bottom:0}.card-header-pills{margin-right:-0.625rem;margin-left:-0.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img{width:100%;border-radius:calc(0.25rem - 1px)}.card-img-top{width:100%;border-top-left-radius:calc(0.25rem - 1px);border-top-right-radius:calc(0.25rem - 1px)}.card-img-bottom{width:100%;border-bottom-right-radius:calc(0.25rem - 1px);border-bottom-left-radius:calc(0.25rem - 1px)}.card-deck{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.card-deck .card{margin-bottom:15px}@media (min-width: 576px){.card-deck{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1 0 0%;flex:1 0 0%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.card-group>.card{margin-bottom:15px}@media (min-width: 576px){.card-group{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card{-webkit-box-flex:1;-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:first-child .card-img-top,.card-group>.card:first-child .card-header{border-top-right-radius:0}.card-group>.card:first-child .card-img-bottom,.card-group>.card:first-child .card-footer{border-bottom-right-radius:0}.card-group>.card:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:last-child .card-img-top,.card-group>.card:last-child .card-header{border-top-left-radius:0}.card-group>.card:last-child .card-img-bottom,.card-group>.card:last-child .card-footer{border-bottom-left-radius:0}.card-group>.card:only-child{border-radius:0.25rem}.card-group>.card:only-child .card-img-top,.card-group>.card:only-child .card-header{border-top-left-radius:0.25rem;border-top-right-radius:0.25rem}.card-group>.card:only-child .card-img-bottom,.card-group>.card:only-child .card-footer{border-bottom-right-radius:0.25rem;border-bottom-left-radius:0.25rem}.card-group>.card:not(:first-child):not(:last-child):not(:only-child){border-radius:0}.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-top,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-bottom,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-header,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-footer{border-radius:0}}.card-columns .card{margin-bottom:0.75rem}@media (min-width: 576px){.card-columns{-webkit-column-count:3;column-count:3;-webkit-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion .card:not(:first-of-type):not(:last-of-type){border-bottom:0;border-radius:0}.accordion .card:not(:first-of-type) .card-header:first-child{border-radius:0}.accordion .card:first-of-type{border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion .card:last-of-type{border-top-left-radius:0;border-top-right-radius:0}.breadcrumb{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:0.25rem}.breadcrumb-item+.breadcrumb-item{padding-left:0.5rem}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:0.5rem;color:#7A8288;content:"/"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#999}.pagination{display:-webkit-box;display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:0.25rem}.page-link{position:relative;display:block;padding:0.5rem 0.75rem;margin-left:-1px;line-height:1.25;color:#fff;background-color:transparent;border:1px solid rgba(0,0,0,0.6)}.page-link:hover{z-index:2;color:#fff;text-decoration:none;background-color:transparent;border-color:rgba(0,0,0,0.6)}.page-link:focus{z-index:2;outline:0;-webkit-box-shadow:0 0 0 0.2rem rgba(58,63,68,0.25);box-shadow:0 0 0 0.2rem rgba(58,63,68,0.25)}.page-link:not(:disabled):not(.disabled){cursor:pointer}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:0.25rem;border-bottom-left-radius:0.25rem}.page-item:last-child .page-link{border-top-right-radius:0.25rem;border-bottom-right-radius:0.25rem}.page-item.active .page-link{z-index:1;color:#fff;background-color:transparent;border-color:rgba(0,0,0,0.6)}.page-item.disabled .page-link{color:#7A8288;pointer-events:none;cursor:auto;background-color:transparent;border-color:rgba(0,0,0,0.6)}.pagination-lg .page-link{padding:0.75rem 1.5rem;font-size:1.171875rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:0.3rem;border-bottom-left-radius:0.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:0.3rem;border-bottom-right-radius:0.3rem}.pagination-sm .page-link{padding:0.25rem 0.5rem;font-size:0.8203125rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:0.2rem;border-bottom-left-radius:0.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:0.2rem;border-bottom-right-radius:0.2rem}.badge{display:inline-block;padding:0.25em 0.4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:0.25rem}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:0.6em;padding-left:0.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#3A3F44}.badge-primary[href]:hover,.badge-primary[href]:focus{color:#fff;text-decoration:none;background-color:#232628}.badge-secondary{color:#fff;background-color:#7A8288}.badge-secondary[href]:hover,.badge-secondary[href]:focus{color:#fff;text-decoration:none;background-color:#62686d}.badge-success{color:#272B30;background-color:#62c462}.badge-success[href]:hover,.badge-success[href]:focus{color:#272B30;text-decoration:none;background-color:#42b142}.badge-info{color:#272B30;background-color:#5bc0de}.badge-info[href]:hover,.badge-info[href]:focus{color:#272B30;text-decoration:none;background-color:#31b0d5}.badge-warning{color:#272B30;background-color:#f89406}.badge-warning[href]:hover,.badge-warning[href]:focus{color:#272B30;text-decoration:none;background-color:#c67605}.badge-danger{color:#fff;background-color:#ee5f5b}.badge-danger[href]:hover,.badge-danger[href]:focus{color:#fff;text-decoration:none;background-color:#e9322d}.badge-light{color:#272B30;background-color:#e9ecef}.badge-light[href]:hover,.badge-light[href]:focus{color:#272B30;text-decoration:none;background-color:#cbd3da}.badge-dark{color:#fff;background-color:#272B30}.badge-dark[href]:hover,.badge-dark[href]:focus{color:#fff;text-decoration:none;background-color:#101214}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#1c1e22;border-radius:0.3rem}@media (min-width: 576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:0.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:0.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:3.90625rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:0.75rem 1.25rem;color:inherit}.alert-primary{color:#1e2123;background-color:#d8d9da;border-color:#c8c9cb}.alert-primary hr{border-top-color:#bbbcbf}.alert-primary .alert-link{color:#060708}.alert-secondary{color:#3f4447;background-color:#e4e6e7;border-color:#dadcde}.alert-secondary hr{border-top-color:#cdcfd2}.alert-secondary .alert-link{color:#272a2c}.alert-success{color:#336633;background-color:#e0f3e0;border-color:#d3eed3}.alert-success hr{border-top-color:#c1e7c1}.alert-success .alert-link{color:#224422}.alert-info{color:#2f6473;background-color:#def2f8;border-color:#d1edf6}.alert-info hr{border-top-color:#bce5f2}.alert-info .alert-link{color:#20454f}.alert-warning{color:#814d03;background-color:#feeacd;border-color:#fde1b9}.alert-warning hr{border-top-color:#fcd6a0}.alert-warning .alert-link{color:#4f2f02}.alert-danger{color:#7c312f;background-color:#fcdfde;border-color:#fad2d1}.alert-danger hr{border-top-color:#f8bcba}.alert-danger .alert-link{color:#572221}.alert-light{color:#797b7c;background-color:#fbfbfc;border-color:#f9fafb}.alert-light hr{border-top-color:#eaedf1}.alert-light .alert-link{color:#606162}.alert-dark{color:#141619;background-color:#d4d5d6;border-color:#c3c4c5}.alert-dark hr{border-top-color:#b6b7b8}.alert-dark .alert-link{color:black}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:-webkit-box;display:-ms-flexbox;display:flex;height:1rem;overflow:hidden;font-size:0.703125rem;background-color:#1c1e22;border-radius:0.25rem}.progress-bar{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;color:#7A8288;text-align:center;white-space:nowrap;background-color:#3A3F44;-webkit-transition:width 0.6s ease;transition:width 0.6s ease}@media screen and (prefers-reduced-motion: reduce){.progress-bar{-webkit-transition:none;transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}.media{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.media-body{-webkit-box-flex:1;-ms-flex:1;flex:1}.list-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#fff;text-align:inherit}.list-group-item-action:hover,.list-group-item-action:focus{color:#fff;text-decoration:none;background-color:#3e444c}.list-group-item-action:active{color:#aaa;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:0.75rem 1.25rem;margin-bottom:-1px;background-color:#32383e;border:1px solid rgba(0,0,0,0.6)}.list-group-item:first-child{border-top-left-radius:0.25rem;border-top-right-radius:0.25rem}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:0.25rem;border-bottom-left-radius:0.25rem}.list-group-item:hover,.list-group-item:focus{z-index:1;text-decoration:none}.list-group-item.disabled,.list-group-item:disabled{color:#52575C;background-color:#32383e}.list-group-item.active{z-index:2;color:#fff;background-color:#3e444c;border-color:rgba(0,0,0,0.6)}.list-group-flush .list-group-item{border-right:0;border-left:0;border-radius:0}.list-group-flush:first-child .list-group-item:first-child{border-top:0}.list-group-flush:last-child .list-group-item:last-child{border-bottom:0}.list-group-item-primary{color:#1e2123;background-color:#c8c9cb}.list-group-item-primary.list-group-item-action:hover,.list-group-item-primary.list-group-item-action:focus{color:#1e2123;background-color:#bbbcbf}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#1e2123;border-color:#1e2123}.list-group-item-secondary{color:#3f4447;background-color:#dadcde}.list-group-item-secondary.list-group-item-action:hover,.list-group-item-secondary.list-group-item-action:focus{color:#3f4447;background-color:#cdcfd2}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#3f4447;border-color:#3f4447}.list-group-item-success{color:#336633;background-color:#d3eed3}.list-group-item-success.list-group-item-action:hover,.list-group-item-success.list-group-item-action:focus{color:#336633;background-color:#c1e7c1}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#336633;border-color:#336633}.list-group-item-info{color:#2f6473;background-color:#d1edf6}.list-group-item-info.list-group-item-action:hover,.list-group-item-info.list-group-item-action:focus{color:#2f6473;background-color:#bce5f2}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#2f6473;border-color:#2f6473}.list-group-item-warning{color:#814d03;background-color:#fde1b9}.list-group-item-warning.list-group-item-action:hover,.list-group-item-warning.list-group-item-action:focus{color:#814d03;background-color:#fcd6a0}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#814d03;border-color:#814d03}.list-group-item-danger{color:#7c312f;background-color:#fad2d1}.list-group-item-danger.list-group-item-action:hover,.list-group-item-danger.list-group-item-action:focus{color:#7c312f;background-color:#f8bcba}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#7c312f;border-color:#7c312f}.list-group-item-light{color:#797b7c;background-color:#f9fafb}.list-group-item-light.list-group-item-action:hover,.list-group-item-light.list-group-item-action:focus{color:#797b7c;background-color:#eaedf1}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#797b7c;border-color:#797b7c}.list-group-item-dark{color:#141619;background-color:#c3c4c5}.list-group-item-dark.list-group-item-action:hover,.list-group-item-dark.list-group-item-action:focus{color:#141619;background-color:#b6b7b8}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#141619;border-color:#141619}.close{float:right;font-size:1.40625rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:not(:disabled):not(.disabled){cursor:pointer}.close:not(:disabled):not(.disabled):hover,.close:not(:disabled):not(.disabled):focus{color:#000;text-decoration:none;opacity:.75}button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:0.5rem;pointer-events:none}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform 0.3s ease-out;transition:-webkit-transform 0.3s ease-out;transition:transform 0.3s ease-out;transition:transform 0.3s ease-out, -webkit-transform 0.3s ease-out;-webkit-transform:translate(0, -25%);transform:translate(0, -25%)}@media screen and (prefers-reduced-motion: reduce){.modal.fade .modal-dialog{-webkit-transition:none;transition:none}}.modal.show .modal-dialog{-webkit-transform:translate(0, 0);transform:translate(0, 0)}.modal-dialog-centered{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;min-height:calc(100% - (0.5rem * 2))}.modal-dialog-centered::before{display:block;height:calc(100vh - (0.5rem * 2));content:""}.modal-content{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#32383e;background-clip:padding-box;border:1px solid rgba(0,0,0,0.2);border-radius:0.3rem;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:0.5}.modal-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:1rem;border-bottom:1px solid rgba(0,0,0,0.2);border-top-left-radius:0.3rem;border-top-right-radius:0.3rem}.modal-header .close{padding:1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.modal-footer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;padding:1rem;border-top:1px solid rgba(0,0,0,0.2)}.modal-footer>:not(:first-child){margin-left:.25rem}.modal-footer>:not(:last-child){margin-right:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width: 576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-centered{min-height:calc(100% - (1.75rem * 2))}.modal-dialog-centered::before{height:calc(100vh - (1.75rem * 2))}.modal-sm{max-width:300px}}@media (min-width: 992px){.modal-lg{max-width:800px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:0.8203125rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:0.9}.tooltip .arrow{position:absolute;display:block;width:0.8rem;height:0.4rem}.tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-top,.bs-tooltip-auto[x-placement^="top"]{padding:0.4rem 0}.bs-tooltip-top .arrow,.bs-tooltip-auto[x-placement^="top"] .arrow{bottom:0}.bs-tooltip-top .arrow::before,.bs-tooltip-auto[x-placement^="top"] .arrow::before{top:0;border-width:0.4rem 0.4rem 0;border-top-color:#000}.bs-tooltip-right,.bs-tooltip-auto[x-placement^="right"]{padding:0 0.4rem}.bs-tooltip-right .arrow,.bs-tooltip-auto[x-placement^="right"] .arrow{left:0;width:0.4rem;height:0.8rem}.bs-tooltip-right .arrow::before,.bs-tooltip-auto[x-placement^="right"] .arrow::before{right:0;border-width:0.4rem 0.4rem 0.4rem 0;border-right-color:#000}.bs-tooltip-bottom,.bs-tooltip-auto[x-placement^="bottom"]{padding:0.4rem 0}.bs-tooltip-bottom .arrow,.bs-tooltip-auto[x-placement^="bottom"] .arrow{top:0}.bs-tooltip-bottom .arrow::before,.bs-tooltip-auto[x-placement^="bottom"] .arrow::before{bottom:0;border-width:0 0.4rem 0.4rem;border-bottom-color:#000}.bs-tooltip-left,.bs-tooltip-auto[x-placement^="left"]{padding:0 0.4rem}.bs-tooltip-left .arrow,.bs-tooltip-auto[x-placement^="left"] .arrow{right:0;width:0.4rem;height:0.8rem}.bs-tooltip-left .arrow::before,.bs-tooltip-auto[x-placement^="left"] .arrow::before{left:0;border-width:0.4rem 0 0.4rem 0.4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:0.25rem 0.5rem;color:#fff;text-align:center;background-color:#000;border-radius:0.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:0.8203125rem;word-wrap:break-word;background-color:#32383e;background-clip:padding-box;border:1px solid rgba(0,0,0,0.2);border-radius:0.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:0.5rem;margin:0 0.3rem}.popover .arrow::before,.popover .arrow::after{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-top,.bs-popover-auto[x-placement^="top"]{margin-bottom:0.5rem}.bs-popover-top .arrow,.bs-popover-auto[x-placement^="top"] .arrow{bottom:calc((0.5rem + 1px) * -1)}.bs-popover-top .arrow::before,.bs-popover-auto[x-placement^="top"] .arrow::before,.bs-popover-top .arrow::after,.bs-popover-auto[x-placement^="top"] .arrow::after{border-width:0.5rem 0.5rem 0}.bs-popover-top .arrow::before,.bs-popover-auto[x-placement^="top"] .arrow::before{bottom:0;border-top-color:rgba(0,0,0,0.25)}.bs-popover-top .arrow::after,.bs-popover-auto[x-placement^="top"] .arrow::after{bottom:1px;border-top-color:#32383e}.bs-popover-right,.bs-popover-auto[x-placement^="right"]{margin-left:0.5rem}.bs-popover-right .arrow,.bs-popover-auto[x-placement^="right"] .arrow{left:calc((0.5rem + 1px) * -1);width:0.5rem;height:1rem;margin:0.3rem 0}.bs-popover-right .arrow::before,.bs-popover-auto[x-placement^="right"] .arrow::before,.bs-popover-right .arrow::after,.bs-popover-auto[x-placement^="right"] .arrow::after{border-width:0.5rem 0.5rem 0.5rem 0}.bs-popover-right .arrow::before,.bs-popover-auto[x-placement^="right"] .arrow::before{left:0;border-right-color:rgba(0,0,0,0.25)}.bs-popover-right .arrow::after,.bs-popover-auto[x-placement^="right"] .arrow::after{left:1px;border-right-color:#32383e}.bs-popover-bottom,.bs-popover-auto[x-placement^="bottom"]{margin-top:0.5rem}.bs-popover-bottom .arrow,.bs-popover-auto[x-placement^="bottom"] .arrow{top:calc((0.5rem + 1px) * -1)}.bs-popover-bottom .arrow::before,.bs-popover-auto[x-placement^="bottom"] .arrow::before,.bs-popover-bottom .arrow::after,.bs-popover-auto[x-placement^="bottom"] .arrow::after{border-width:0 0.5rem 0.5rem 0.5rem}.bs-popover-bottom .arrow::before,.bs-popover-auto[x-placement^="bottom"] .arrow::before{top:0;border-bottom-color:rgba(0,0,0,0.25)}.bs-popover-bottom .arrow::after,.bs-popover-auto[x-placement^="bottom"] .arrow::after{top:1px;border-bottom-color:#32383e}.bs-popover-bottom .popover-header::before,.bs-popover-auto[x-placement^="bottom"] .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-0.5rem;content:"";border-bottom:1px solid #2c3036}.bs-popover-left,.bs-popover-auto[x-placement^="left"]{margin-right:0.5rem}.bs-popover-left .arrow,.bs-popover-auto[x-placement^="left"] .arrow{right:calc((0.5rem + 1px) * -1);width:0.5rem;height:1rem;margin:0.3rem 0}.bs-popover-left .arrow::before,.bs-popover-auto[x-placement^="left"] .arrow::before,.bs-popover-left .arrow::after,.bs-popover-auto[x-placement^="left"] .arrow::after{border-width:0.5rem 0 0.5rem 0.5rem}.bs-popover-left .arrow::before,.bs-popover-auto[x-placement^="left"] .arrow::before{right:0;border-left-color:rgba(0,0,0,0.25)}.bs-popover-left .arrow::after,.bs-popover-auto[x-placement^="left"] .arrow::after{right:1px;border-left-color:#32383e}.popover-header{padding:0.5rem 0.75rem;margin-bottom:0;font-size:0.9375rem;color:inherit;background-color:#2c3036;border-bottom:1px solid #202328;border-top-left-radius:calc(0.3rem - 1px);border-top-right-radius:calc(0.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:0.5rem 0.75rem;color:#aaa}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-item{position:relative;display:none;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-item.active,.carousel-item-next,.carousel-item-prev{display:block;-webkit-transition:-webkit-transform 0.6s ease;transition:-webkit-transform 0.6s ease;transition:transform 0.6s ease;transition:transform 0.6s ease, -webkit-transform 0.6s ease}@media screen and (prefers-reduced-motion: reduce){.carousel-item.active,.carousel-item-next,.carousel-item-prev{-webkit-transition:none;transition:none}}.carousel-item-next,.carousel-item-prev{position:absolute;top:0}.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{-webkit-transform:translateX(0);transform:translateX(0)}@supports (-webkit-transform-style: preserve-3d) or (transform-style: preserve-3d){.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0)}}.carousel-item-next,.active.carousel-item-right{-webkit-transform:translateX(100%);transform:translateX(100%)}@supports (-webkit-transform-style: preserve-3d) or (transform-style: preserve-3d){.carousel-item-next,.active.carousel-item-right{-webkit-transform:translate3d(100%, 0, 0);transform:translate3d(100%, 0, 0)}}.carousel-item-prev,.active.carousel-item-left{-webkit-transform:translateX(-100%);transform:translateX(-100%)}@supports (-webkit-transform-style: preserve-3d) or (transform-style: preserve-3d){.carousel-item-prev,.active.carousel-item-left{-webkit-transform:translate3d(-100%, 0, 0);transform:translate3d(-100%, 0, 0)}}.carousel-fade .carousel-item{opacity:0;-webkit-transition-duration:.6s;transition-duration:.6s;-webkit-transition-property:opacity;transition-property:opacity}.carousel-fade .carousel-item.active,.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right{opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{opacity:0}.carousel-fade .carousel-item-next,.carousel-fade .carousel-item-prev,.carousel-fade .carousel-item.active,.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-prev{-webkit-transform:translateX(0);transform:translateX(0)}@supports (-webkit-transform-style: preserve-3d) or (transform-style: preserve-3d){.carousel-fade .carousel-item-next,.carousel-fade .carousel-item-prev,.carousel-fade .carousel-item.active,.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-prev{-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0)}}.carousel-control-prev,.carousel-control-next{position:absolute;top:0;bottom:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:0.5}.carousel-control-prev:hover,.carousel-control-prev:focus,.carousel-control-next:hover,.carousel-control-next:focus{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-prev-icon,.carousel-control-next-icon{display:inline-block;width:20px;height:20px;background:transparent no-repeat center center;background-size:100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E")}.carousel-control-next-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E")}.carousel-indicators{position:absolute;right:0;bottom:10px;left:0;z-index:15;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{position:relative;-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:rgba(255,255,255,0.5)}.carousel-indicators li::before{position:absolute;top:-10px;left:0;display:inline-block;width:100%;height:10px;content:""}.carousel-indicators li::after{position:absolute;bottom:-10px;left:0;display:inline-block;width:100%;height:10px;content:""}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}.align-baseline{vertical-align:baseline !important}.align-top{vertical-align:top !important}.align-middle{vertical-align:middle !important}.align-bottom{vertical-align:bottom !important}.align-text-bottom{vertical-align:text-bottom !important}.align-text-top{vertical-align:text-top !important}.bg-primary{background-color:#3A3F44 !important}a.bg-primary:hover,a.bg-primary:focus,button.bg-primary:hover,button.bg-primary:focus{background-color:#232628 !important}.bg-secondary{background-color:#7A8288 !important}a.bg-secondary:hover,a.bg-secondary:focus,button.bg-secondary:hover,button.bg-secondary:focus{background-color:#62686d !important}.bg-success{background-color:#62c462 !important}a.bg-success:hover,a.bg-success:focus,button.bg-success:hover,button.bg-success:focus{background-color:#42b142 !important}.bg-info{background-color:#5bc0de !important}a.bg-info:hover,a.bg-info:focus,button.bg-info:hover,button.bg-info:focus{background-color:#31b0d5 !important}.bg-warning{background-color:#f89406 !important}a.bg-warning:hover,a.bg-warning:focus,button.bg-warning:hover,button.bg-warning:focus{background-color:#c67605 !important}.bg-danger{background-color:#ee5f5b !important}a.bg-danger:hover,a.bg-danger:focus,button.bg-danger:hover,button.bg-danger:focus{background-color:#e9322d !important}.bg-light{background-color:#e9ecef !important}a.bg-light:hover,a.bg-light:focus,button.bg-light:hover,button.bg-light:focus{background-color:#cbd3da !important}.bg-dark{background-color:#272B30 !important}a.bg-dark:hover,a.bg-dark:focus,button.bg-dark:hover,button.bg-dark:focus{background-color:#101214 !important}.bg-white{background-color:#fff !important}.bg-transparent{background-color:transparent !important}.border{border:1px solid #dee2e6 !important}.border-top{border-top:1px solid #dee2e6 !important}.border-right{border-right:1px solid #dee2e6 !important}.border-bottom{border-bottom:1px solid #dee2e6 !important}.border-left{border-left:1px solid #dee2e6 !important}.border-0{border:0 !important}.border-top-0{border-top:0 !important}.border-right-0{border-right:0 !important}.border-bottom-0{border-bottom:0 !important}.border-left-0{border-left:0 !important}.border-primary{border-color:#3A3F44 !important}.border-secondary{border-color:#7A8288 !important}.border-success{border-color:#62c462 !important}.border-info{border-color:#5bc0de !important}.border-warning{border-color:#f89406 !important}.border-danger{border-color:#ee5f5b !important}.border-light{border-color:#e9ecef !important}.border-dark{border-color:#272B30 !important}.border-white{border-color:#fff !important}.rounded{border-radius:0.25rem !important}.rounded-top{border-top-left-radius:0.25rem !important;border-top-right-radius:0.25rem !important}.rounded-right{border-top-right-radius:0.25rem !important;border-bottom-right-radius:0.25rem !important}.rounded-bottom{border-bottom-right-radius:0.25rem !important;border-bottom-left-radius:0.25rem !important}.rounded-left{border-top-left-radius:0.25rem !important;border-bottom-left-radius:0.25rem !important}.rounded-circle{border-radius:50% !important}.rounded-0{border-radius:0 !important}.clearfix::after{display:block;clear:both;content:""}.d-none{display:none !important}.d-inline{display:inline !important}.d-inline-block{display:inline-block !important}.d-block{display:block !important}.d-table{display:table !important}.d-table-row{display:table-row !important}.d-table-cell{display:table-cell !important}.d-flex{display:-webkit-box !important;display:-ms-flexbox !important;display:flex !important}.d-inline-flex{display:-webkit-inline-box !important;display:-ms-inline-flexbox !important;display:inline-flex !important}@media (min-width: 576px){.d-sm-none{display:none !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-block{display:block !important}.d-sm-table{display:table !important}.d-sm-table-row{display:table-row !important}.d-sm-table-cell{display:table-cell !important}.d-sm-flex{display:-webkit-box !important;display:-ms-flexbox !important;display:flex !important}.d-sm-inline-flex{display:-webkit-inline-box !important;display:-ms-inline-flexbox !important;display:inline-flex !important}}@media (min-width: 768px){.d-md-none{display:none !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-block{display:block !important}.d-md-table{display:table !important}.d-md-table-row{display:table-row !important}.d-md-table-cell{display:table-cell !important}.d-md-flex{display:-webkit-box !important;display:-ms-flexbox !important;display:flex !important}.d-md-inline-flex{display:-webkit-inline-box !important;display:-ms-inline-flexbox !important;display:inline-flex !important}}@media (min-width: 992px){.d-lg-none{display:none !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-block{display:block !important}.d-lg-table{display:table !important}.d-lg-table-row{display:table-row !important}.d-lg-table-cell{display:table-cell !important}.d-lg-flex{display:-webkit-box !important;display:-ms-flexbox !important;display:flex !important}.d-lg-inline-flex{display:-webkit-inline-box !important;display:-ms-inline-flexbox !important;display:inline-flex !important}}@media (min-width: 1200px){.d-xl-none{display:none !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-block{display:block !important}.d-xl-table{display:table !important}.d-xl-table-row{display:table-row !important}.d-xl-table-cell{display:table-cell !important}.d-xl-flex{display:-webkit-box !important;display:-ms-flexbox !important;display:flex !important}.d-xl-inline-flex{display:-webkit-inline-box !important;display:-ms-inline-flexbox !important;display:inline-flex !important}}@media print{.d-print-none{display:none !important}.d-print-inline{display:inline !important}.d-print-inline-block{display:inline-block !important}.d-print-block{display:block !important}.d-print-table{display:table !important}.d-print-table-row{display:table-row !important}.d-print-table-cell{display:table-cell !important}.d-print-flex{display:-webkit-box !important;display:-ms-flexbox !important;display:flex !important}.d-print-inline-flex{display:-webkit-inline-box !important;display:-ms-inline-flexbox !important;display:inline-flex !important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.8571428571%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{-webkit-box-orient:horizontal !important;-webkit-box-direction:normal !important;-ms-flex-direction:row !important;flex-direction:row !important}.flex-column{-webkit-box-orient:vertical !important;-webkit-box-direction:normal !important;-ms-flex-direction:column !important;flex-direction:column !important}.flex-row-reverse{-webkit-box-orient:horizontal !important;-webkit-box-direction:reverse !important;-ms-flex-direction:row-reverse !important;flex-direction:row-reverse !important}.flex-column-reverse{-webkit-box-orient:vertical !important;-webkit-box-direction:reverse !important;-ms-flex-direction:column-reverse !important;flex-direction:column-reverse !important}.flex-wrap{-ms-flex-wrap:wrap !important;flex-wrap:wrap !important}.flex-nowrap{-ms-flex-wrap:nowrap !important;flex-wrap:nowrap !important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse !important;flex-wrap:wrap-reverse !important}.flex-fill{-webkit-box-flex:1 !important;-ms-flex:1 1 auto !important;flex:1 1 auto !important}.flex-grow-0{-webkit-box-flex:0 !important;-ms-flex-positive:0 !important;flex-grow:0 !important}.flex-grow-1{-webkit-box-flex:1 !important;-ms-flex-positive:1 !important;flex-grow:1 !important}.flex-shrink-0{-ms-flex-negative:0 !important;flex-shrink:0 !important}.flex-shrink-1{-ms-flex-negative:1 !important;flex-shrink:1 !important}.justify-content-start{-webkit-box-pack:start !important;-ms-flex-pack:start !important;justify-content:flex-start !important}.justify-content-end{-webkit-box-pack:end !important;-ms-flex-pack:end !important;justify-content:flex-end !important}.justify-content-center{-webkit-box-pack:center !important;-ms-flex-pack:center !important;justify-content:center !important}.justify-content-between{-webkit-box-pack:justify !important;-ms-flex-pack:justify !important;justify-content:space-between !important}.justify-content-around{-ms-flex-pack:distribute !important;justify-content:space-around !important}.align-items-start{-webkit-box-align:start !important;-ms-flex-align:start !important;align-items:flex-start !important}.align-items-end{-webkit-box-align:end !important;-ms-flex-align:end !important;align-items:flex-end !important}.align-items-center{-webkit-box-align:center !important;-ms-flex-align:center !important;align-items:center !important}.align-items-baseline{-webkit-box-align:baseline !important;-ms-flex-align:baseline !important;align-items:baseline !important}.align-items-stretch{-webkit-box-align:stretch !important;-ms-flex-align:stretch !important;align-items:stretch !important}.align-content-start{-ms-flex-line-pack:start !important;align-content:flex-start !important}.align-content-end{-ms-flex-line-pack:end !important;align-content:flex-end !important}.align-content-center{-ms-flex-line-pack:center !important;align-content:center !important}.align-content-between{-ms-flex-line-pack:justify !important;align-content:space-between !important}.align-content-around{-ms-flex-line-pack:distribute !important;align-content:space-around !important}.align-content-stretch{-ms-flex-line-pack:stretch !important;align-content:stretch !important}.align-self-auto{-ms-flex-item-align:auto !important;align-self:auto !important}.align-self-start{-ms-flex-item-align:start !important;align-self:flex-start !important}.align-self-end{-ms-flex-item-align:end !important;align-self:flex-end !important}.align-self-center{-ms-flex-item-align:center !important;align-self:center !important}.align-self-baseline{-ms-flex-item-align:baseline !important;align-self:baseline !important}.align-self-stretch{-ms-flex-item-align:stretch !important;align-self:stretch !important}@media (min-width: 576px){.flex-sm-row{-webkit-box-orient:horizontal !important;-webkit-box-direction:normal !important;-ms-flex-direction:row !important;flex-direction:row !important}.flex-sm-column{-webkit-box-orient:vertical !important;-webkit-box-direction:normal !important;-ms-flex-direction:column !important;flex-direction:column !important}.flex-sm-row-reverse{-webkit-box-orient:horizontal !important;-webkit-box-direction:reverse !important;-ms-flex-direction:row-reverse !important;flex-direction:row-reverse !important}.flex-sm-column-reverse{-webkit-box-orient:vertical !important;-webkit-box-direction:reverse !important;-ms-flex-direction:column-reverse !important;flex-direction:column-reverse !important}.flex-sm-wrap{-ms-flex-wrap:wrap !important;flex-wrap:wrap !important}.flex-sm-nowrap{-ms-flex-wrap:nowrap !important;flex-wrap:nowrap !important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse !important;flex-wrap:wrap-reverse !important}.flex-sm-fill{-webkit-box-flex:1 !important;-ms-flex:1 1 auto !important;flex:1 1 auto !important}.flex-sm-grow-0{-webkit-box-flex:0 !important;-ms-flex-positive:0 !important;flex-grow:0 !important}.flex-sm-grow-1{-webkit-box-flex:1 !important;-ms-flex-positive:1 !important;flex-grow:1 !important}.flex-sm-shrink-0{-ms-flex-negative:0 !important;flex-shrink:0 !important}.flex-sm-shrink-1{-ms-flex-negative:1 !important;flex-shrink:1 !important}.justify-content-sm-start{-webkit-box-pack:start !important;-ms-flex-pack:start !important;justify-content:flex-start !important}.justify-content-sm-end{-webkit-box-pack:end !important;-ms-flex-pack:end !important;justify-content:flex-end !important}.justify-content-sm-center{-webkit-box-pack:center !important;-ms-flex-pack:center !important;justify-content:center !important}.justify-content-sm-between{-webkit-box-pack:justify !important;-ms-flex-pack:justify !important;justify-content:space-between !important}.justify-content-sm-around{-ms-flex-pack:distribute !important;justify-content:space-around !important}.align-items-sm-start{-webkit-box-align:start !important;-ms-flex-align:start !important;align-items:flex-start !important}.align-items-sm-end{-webkit-box-align:end !important;-ms-flex-align:end !important;align-items:flex-end !important}.align-items-sm-center{-webkit-box-align:center !important;-ms-flex-align:center !important;align-items:center !important}.align-items-sm-baseline{-webkit-box-align:baseline !important;-ms-flex-align:baseline !important;align-items:baseline !important}.align-items-sm-stretch{-webkit-box-align:stretch !important;-ms-flex-align:stretch !important;align-items:stretch !important}.align-content-sm-start{-ms-flex-line-pack:start !important;align-content:flex-start !important}.align-content-sm-end{-ms-flex-line-pack:end !important;align-content:flex-end !important}.align-content-sm-center{-ms-flex-line-pack:center !important;align-content:center !important}.align-content-sm-between{-ms-flex-line-pack:justify !important;align-content:space-between !important}.align-content-sm-around{-ms-flex-line-pack:distribute !important;align-content:space-around !important}.align-content-sm-stretch{-ms-flex-line-pack:stretch !important;align-content:stretch !important}.align-self-sm-auto{-ms-flex-item-align:auto !important;align-self:auto !important}.align-self-sm-start{-ms-flex-item-align:start !important;align-self:flex-start !important}.align-self-sm-end{-ms-flex-item-align:end !important;align-self:flex-end !important}.align-self-sm-center{-ms-flex-item-align:center !important;align-self:center !important}.align-self-sm-baseline{-ms-flex-item-align:baseline !important;align-self:baseline !important}.align-self-sm-stretch{-ms-flex-item-align:stretch !important;align-self:stretch !important}}@media (min-width: 768px){.flex-md-row{-webkit-box-orient:horizontal !important;-webkit-box-direction:normal !important;-ms-flex-direction:row !important;flex-direction:row !important}.flex-md-column{-webkit-box-orient:vertical !important;-webkit-box-direction:normal !important;-ms-flex-direction:column !important;flex-direction:column !important}.flex-md-row-reverse{-webkit-box-orient:horizontal !important;-webkit-box-direction:reverse !important;-ms-flex-direction:row-reverse !important;flex-direction:row-reverse !important}.flex-md-column-reverse{-webkit-box-orient:vertical !important;-webkit-box-direction:reverse !important;-ms-flex-direction:column-reverse !important;flex-direction:column-reverse !important}.flex-md-wrap{-ms-flex-wrap:wrap !important;flex-wrap:wrap !important}.flex-md-nowrap{-ms-flex-wrap:nowrap !important;flex-wrap:nowrap !important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse !important;flex-wrap:wrap-reverse !important}.flex-md-fill{-webkit-box-flex:1 !important;-ms-flex:1 1 auto !important;flex:1 1 auto !important}.flex-md-grow-0{-webkit-box-flex:0 !important;-ms-flex-positive:0 !important;flex-grow:0 !important}.flex-md-grow-1{-webkit-box-flex:1 !important;-ms-flex-positive:1 !important;flex-grow:1 !important}.flex-md-shrink-0{-ms-flex-negative:0 !important;flex-shrink:0 !important}.flex-md-shrink-1{-ms-flex-negative:1 !important;flex-shrink:1 !important}.justify-content-md-start{-webkit-box-pack:start !important;-ms-flex-pack:start !important;justify-content:flex-start !important}.justify-content-md-end{-webkit-box-pack:end !important;-ms-flex-pack:end !important;justify-content:flex-end !important}.justify-content-md-center{-webkit-box-pack:center !important;-ms-flex-pack:center !important;justify-content:center !important}.justify-content-md-between{-webkit-box-pack:justify !important;-ms-flex-pack:justify !important;justify-content:space-between !important}.justify-content-md-around{-ms-flex-pack:distribute !important;justify-content:space-around !important}.align-items-md-start{-webkit-box-align:start !important;-ms-flex-align:start !important;align-items:flex-start !important}.align-items-md-end{-webkit-box-align:end !important;-ms-flex-align:end !important;align-items:flex-end !important}.align-items-md-center{-webkit-box-align:center !important;-ms-flex-align:center !important;align-items:center !important}.align-items-md-baseline{-webkit-box-align:baseline !important;-ms-flex-align:baseline !important;align-items:baseline !important}.align-items-md-stretch{-webkit-box-align:stretch !important;-ms-flex-align:stretch !important;align-items:stretch !important}.align-content-md-start{-ms-flex-line-pack:start !important;align-content:flex-start !important}.align-content-md-end{-ms-flex-line-pack:end !important;align-content:flex-end !important}.align-content-md-center{-ms-flex-line-pack:center !important;align-content:center !important}.align-content-md-between{-ms-flex-line-pack:justify !important;align-content:space-between !important}.align-content-md-around{-ms-flex-line-pack:distribute !important;align-content:space-around !important}.align-content-md-stretch{-ms-flex-line-pack:stretch !important;align-content:stretch !important}.align-self-md-auto{-ms-flex-item-align:auto !important;align-self:auto !important}.align-self-md-start{-ms-flex-item-align:start !important;align-self:flex-start !important}.align-self-md-end{-ms-flex-item-align:end !important;align-self:flex-end !important}.align-self-md-center{-ms-flex-item-align:center !important;align-self:center !important}.align-self-md-baseline{-ms-flex-item-align:baseline !important;align-self:baseline !important}.align-self-md-stretch{-ms-flex-item-align:stretch !important;align-self:stretch !important}}@media (min-width: 992px){.flex-lg-row{-webkit-box-orient:horizontal !important;-webkit-box-direction:normal !important;-ms-flex-direction:row !important;flex-direction:row !important}.flex-lg-column{-webkit-box-orient:vertical !important;-webkit-box-direction:normal !important;-ms-flex-direction:column !important;flex-direction:column !important}.flex-lg-row-reverse{-webkit-box-orient:horizontal !important;-webkit-box-direction:reverse !important;-ms-flex-direction:row-reverse !important;flex-direction:row-reverse !important}.flex-lg-column-reverse{-webkit-box-orient:vertical !important;-webkit-box-direction:reverse !important;-ms-flex-direction:column-reverse !important;flex-direction:column-reverse !important}.flex-lg-wrap{-ms-flex-wrap:wrap !important;flex-wrap:wrap !important}.flex-lg-nowrap{-ms-flex-wrap:nowrap !important;flex-wrap:nowrap !important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse !important;flex-wrap:wrap-reverse !important}.flex-lg-fill{-webkit-box-flex:1 !important;-ms-flex:1 1 auto !important;flex:1 1 auto !important}.flex-lg-grow-0{-webkit-box-flex:0 !important;-ms-flex-positive:0 !important;flex-grow:0 !important}.flex-lg-grow-1{-webkit-box-flex:1 !important;-ms-flex-positive:1 !important;flex-grow:1 !important}.flex-lg-shrink-0{-ms-flex-negative:0 !important;flex-shrink:0 !important}.flex-lg-shrink-1{-ms-flex-negative:1 !important;flex-shrink:1 !important}.justify-content-lg-start{-webkit-box-pack:start !important;-ms-flex-pack:start !important;justify-content:flex-start !important}.justify-content-lg-end{-webkit-box-pack:end !important;-ms-flex-pack:end !important;justify-content:flex-end !important}.justify-content-lg-center{-webkit-box-pack:center !important;-ms-flex-pack:center !important;justify-content:center !important}.justify-content-lg-between{-webkit-box-pack:justify !important;-ms-flex-pack:justify !important;justify-content:space-between !important}.justify-content-lg-around{-ms-flex-pack:distribute !important;justify-content:space-around !important}.align-items-lg-start{-webkit-box-align:start !important;-ms-flex-align:start !important;align-items:flex-start !important}.align-items-lg-end{-webkit-box-align:end !important;-ms-flex-align:end !important;align-items:flex-end !important}.align-items-lg-center{-webkit-box-align:center !important;-ms-flex-align:center !important;align-items:center !important}.align-items-lg-baseline{-webkit-box-align:baseline !important;-ms-flex-align:baseline !important;align-items:baseline !important}.align-items-lg-stretch{-webkit-box-align:stretch !important;-ms-flex-align:stretch !important;align-items:stretch !important}.align-content-lg-start{-ms-flex-line-pack:start !important;align-content:flex-start !important}.align-content-lg-end{-ms-flex-line-pack:end !important;align-content:flex-end !important}.align-content-lg-center{-ms-flex-line-pack:center !important;align-content:center !important}.align-content-lg-between{-ms-flex-line-pack:justify !important;align-content:space-between !important}.align-content-lg-around{-ms-flex-line-pack:distribute !important;align-content:space-around !important}.align-content-lg-stretch{-ms-flex-line-pack:stretch !important;align-content:stretch !important}.align-self-lg-auto{-ms-flex-item-align:auto !important;align-self:auto !important}.align-self-lg-start{-ms-flex-item-align:start !important;align-self:flex-start !important}.align-self-lg-end{-ms-flex-item-align:end !important;align-self:flex-end !important}.align-self-lg-center{-ms-flex-item-align:center !important;align-self:center !important}.align-self-lg-baseline{-ms-flex-item-align:baseline !important;align-self:baseline !important}.align-self-lg-stretch{-ms-flex-item-align:stretch !important;align-self:stretch !important}}@media (min-width: 1200px){.flex-xl-row{-webkit-box-orient:horizontal !important;-webkit-box-direction:normal !important;-ms-flex-direction:row !important;flex-direction:row !important}.flex-xl-column{-webkit-box-orient:vertical !important;-webkit-box-direction:normal !important;-ms-flex-direction:column !important;flex-direction:column !important}.flex-xl-row-reverse{-webkit-box-orient:horizontal !important;-webkit-box-direction:reverse !important;-ms-flex-direction:row-reverse !important;flex-direction:row-reverse !important}.flex-xl-column-reverse{-webkit-box-orient:vertical !important;-webkit-box-direction:reverse !important;-ms-flex-direction:column-reverse !important;flex-direction:column-reverse !important}.flex-xl-wrap{-ms-flex-wrap:wrap !important;flex-wrap:wrap !important}.flex-xl-nowrap{-ms-flex-wrap:nowrap !important;flex-wrap:nowrap !important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse !important;flex-wrap:wrap-reverse !important}.flex-xl-fill{-webkit-box-flex:1 !important;-ms-flex:1 1 auto !important;flex:1 1 auto !important}.flex-xl-grow-0{-webkit-box-flex:0 !important;-ms-flex-positive:0 !important;flex-grow:0 !important}.flex-xl-grow-1{-webkit-box-flex:1 !important;-ms-flex-positive:1 !important;flex-grow:1 !important}.flex-xl-shrink-0{-ms-flex-negative:0 !important;flex-shrink:0 !important}.flex-xl-shrink-1{-ms-flex-negative:1 !important;flex-shrink:1 !important}.justify-content-xl-start{-webkit-box-pack:start !important;-ms-flex-pack:start !important;justify-content:flex-start !important}.justify-content-xl-end{-webkit-box-pack:end !important;-ms-flex-pack:end !important;justify-content:flex-end !important}.justify-content-xl-center{-webkit-box-pack:center !important;-ms-flex-pack:center !important;justify-content:center !important}.justify-content-xl-between{-webkit-box-pack:justify !important;-ms-flex-pack:justify !important;justify-content:space-between !important}.justify-content-xl-around{-ms-flex-pack:distribute !important;justify-content:space-around !important}.align-items-xl-start{-webkit-box-align:start !important;-ms-flex-align:start !important;align-items:flex-start !important}.align-items-xl-end{-webkit-box-align:end !important;-ms-flex-align:end !important;align-items:flex-end !important}.align-items-xl-center{-webkit-box-align:center !important;-ms-flex-align:center !important;align-items:center !important}.align-items-xl-baseline{-webkit-box-align:baseline !important;-ms-flex-align:baseline !important;align-items:baseline !important}.align-items-xl-stretch{-webkit-box-align:stretch !important;-ms-flex-align:stretch !important;align-items:stretch !important}.align-content-xl-start{-ms-flex-line-pack:start !important;align-content:flex-start !important}.align-content-xl-end{-ms-flex-line-pack:end !important;align-content:flex-end !important}.align-content-xl-center{-ms-flex-line-pack:center !important;align-content:center !important}.align-content-xl-between{-ms-flex-line-pack:justify !important;align-content:space-between !important}.align-content-xl-around{-ms-flex-line-pack:distribute !important;align-content:space-around !important}.align-content-xl-stretch{-ms-flex-line-pack:stretch !important;align-content:stretch !important}.align-self-xl-auto{-ms-flex-item-align:auto !important;align-self:auto !important}.align-self-xl-start{-ms-flex-item-align:start !important;align-self:flex-start !important}.align-self-xl-end{-ms-flex-item-align:end !important;align-self:flex-end !important}.align-self-xl-center{-ms-flex-item-align:center !important;align-self:center !important}.align-self-xl-baseline{-ms-flex-item-align:baseline !important;align-self:baseline !important}.align-self-xl-stretch{-ms-flex-item-align:stretch !important;align-self:stretch !important}}.float-left{float:left !important}.float-right{float:right !important}.float-none{float:none !important}@media (min-width: 576px){.float-sm-left{float:left !important}.float-sm-right{float:right !important}.float-sm-none{float:none !important}}@media (min-width: 768px){.float-md-left{float:left !important}.float-md-right{float:right !important}.float-md-none{float:none !important}}@media (min-width: 992px){.float-lg-left{float:left !important}.float-lg-right{float:right !important}.float-lg-none{float:none !important}}@media (min-width: 1200px){.float-xl-left{float:left !important}.float-xl-right{float:right !important}.float-xl-none{float:none !important}}.position-static{position:static !important}.position-relative{position:relative !important}.position-absolute{position:absolute !important}.position-fixed{position:fixed !important}.position-sticky{position:-webkit-sticky !important;position:sticky !important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports (position: -webkit-sticky) or (position: sticky){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{-webkit-box-shadow:0 0.125rem 0.25rem rgba(0,0,0,0.075) !important;box-shadow:0 0.125rem 0.25rem rgba(0,0,0,0.075) !important}.shadow{-webkit-box-shadow:0 0.5rem 1rem rgba(0,0,0,0.15) !important;box-shadow:0 0.5rem 1rem rgba(0,0,0,0.15) !important}.shadow-lg{-webkit-box-shadow:0 1rem 3rem rgba(0,0,0,0.175) !important;box-shadow:0 1rem 3rem rgba(0,0,0,0.175) !important}.shadow-none{-webkit-box-shadow:none !important;box-shadow:none !important}.w-25{width:25% !important}.w-50{width:50% !important}.w-75{width:75% !important}.w-100{width:100% !important}.w-auto{width:auto !important}.h-25{height:25% !important}.h-50{height:50% !important}.h-75{height:75% !important}.h-100{height:100% !important}.h-auto{height:auto !important}.mw-100{max-width:100% !important}.mh-100{max-height:100% !important}.m-0{margin:0 !important}.mt-0,.my-0{margin-top:0 !important}.mr-0,.mx-0{margin-right:0 !important}.mb-0,.my-0{margin-bottom:0 !important}.ml-0,.mx-0{margin-left:0 !important}.m-1{margin:0.25rem !important}.mt-1,.my-1{margin-top:0.25rem !important}.mr-1,.mx-1{margin-right:0.25rem !important}.mb-1,.my-1{margin-bottom:0.25rem !important}.ml-1,.mx-1{margin-left:0.25rem !important}.m-2{margin:0.5rem !important}.mt-2,.my-2{margin-top:0.5rem !important}.mr-2,.mx-2{margin-right:0.5rem !important}.mb-2,.my-2{margin-bottom:0.5rem !important}.ml-2,.mx-2{margin-left:0.5rem !important}.m-3{margin:1rem !important}.mt-3,.my-3{margin-top:1rem !important}.mr-3,.mx-3{margin-right:1rem !important}.mb-3,.my-3{margin-bottom:1rem !important}.ml-3,.mx-3{margin-left:1rem !important}.m-4{margin:1.5rem !important}.mt-4,.my-4{margin-top:1.5rem !important}.mr-4,.mx-4{margin-right:1.5rem !important}.mb-4,.my-4{margin-bottom:1.5rem !important}.ml-4,.mx-4{margin-left:1.5rem !important}.m-5{margin:3rem !important}.mt-5,.my-5{margin-top:3rem !important}.mr-5,.mx-5{margin-right:3rem !important}.mb-5,.my-5{margin-bottom:3rem !important}.ml-5,.mx-5{margin-left:3rem !important}.p-0{padding:0 !important}.pt-0,.py-0{padding-top:0 !important}.pr-0,.px-0{padding-right:0 !important}.pb-0,.py-0{padding-bottom:0 !important}.pl-0,.px-0{padding-left:0 !important}.p-1{padding:0.25rem !important}.pt-1,.py-1{padding-top:0.25rem !important}.pr-1,.px-1{padding-right:0.25rem !important}.pb-1,.py-1{padding-bottom:0.25rem !important}.pl-1,.px-1{padding-left:0.25rem !important}.p-2{padding:0.5rem !important}.pt-2,.py-2{padding-top:0.5rem !important}.pr-2,.px-2{padding-right:0.5rem !important}.pb-2,.py-2{padding-bottom:0.5rem !important}.pl-2,.px-2{padding-left:0.5rem !important}.p-3{padding:1rem !important}.pt-3,.py-3{padding-top:1rem !important}.pr-3,.px-3{padding-right:1rem !important}.pb-3,.py-3{padding-bottom:1rem !important}.pl-3,.px-3{padding-left:1rem !important}.p-4{padding:1.5rem !important}.pt-4,.py-4{padding-top:1.5rem !important}.pr-4,.px-4{padding-right:1.5rem !important}.pb-4,.py-4{padding-bottom:1.5rem !important}.pl-4,.px-4{padding-left:1.5rem !important}.p-5{padding:3rem !important}.pt-5,.py-5{padding-top:3rem !important}.pr-5,.px-5{padding-right:3rem !important}.pb-5,.py-5{padding-bottom:3rem !important}.pl-5,.px-5{padding-left:3rem !important}.m-auto{margin:auto !important}.mt-auto,.my-auto{margin-top:auto !important}.mr-auto,.mx-auto{margin-right:auto !important}.mb-auto,.my-auto{margin-bottom:auto !important}.ml-auto,.mx-auto{margin-left:auto !important}@media (min-width: 576px){.m-sm-0{margin:0 !important}.mt-sm-0,.my-sm-0{margin-top:0 !important}.mr-sm-0,.mx-sm-0{margin-right:0 !important}.mb-sm-0,.my-sm-0{margin-bottom:0 !important}.ml-sm-0,.mx-sm-0{margin-left:0 !important}.m-sm-1{margin:0.25rem !important}.mt-sm-1,.my-sm-1{margin-top:0.25rem !important}.mr-sm-1,.mx-sm-1{margin-right:0.25rem !important}.mb-sm-1,.my-sm-1{margin-bottom:0.25rem !important}.ml-sm-1,.mx-sm-1{margin-left:0.25rem !important}.m-sm-2{margin:0.5rem !important}.mt-sm-2,.my-sm-2{margin-top:0.5rem !important}.mr-sm-2,.mx-sm-2{margin-right:0.5rem !important}.mb-sm-2,.my-sm-2{margin-bottom:0.5rem !important}.ml-sm-2,.mx-sm-2{margin-left:0.5rem !important}.m-sm-3{margin:1rem !important}.mt-sm-3,.my-sm-3{margin-top:1rem !important}.mr-sm-3,.mx-sm-3{margin-right:1rem !important}.mb-sm-3,.my-sm-3{margin-bottom:1rem !important}.ml-sm-3,.mx-sm-3{margin-left:1rem !important}.m-sm-4{margin:1.5rem !important}.mt-sm-4,.my-sm-4{margin-top:1.5rem !important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem !important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem !important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem !important}.m-sm-5{margin:3rem !important}.mt-sm-5,.my-sm-5{margin-top:3rem !important}.mr-sm-5,.mx-sm-5{margin-right:3rem !important}.mb-sm-5,.my-sm-5{margin-bottom:3rem !important}.ml-sm-5,.mx-sm-5{margin-left:3rem !important}.p-sm-0{padding:0 !important}.pt-sm-0,.py-sm-0{padding-top:0 !important}.pr-sm-0,.px-sm-0{padding-right:0 !important}.pb-sm-0,.py-sm-0{padding-bottom:0 !important}.pl-sm-0,.px-sm-0{padding-left:0 !important}.p-sm-1{padding:0.25rem !important}.pt-sm-1,.py-sm-1{padding-top:0.25rem !important}.pr-sm-1,.px-sm-1{padding-right:0.25rem !important}.pb-sm-1,.py-sm-1{padding-bottom:0.25rem !important}.pl-sm-1,.px-sm-1{padding-left:0.25rem !important}.p-sm-2{padding:0.5rem !important}.pt-sm-2,.py-sm-2{padding-top:0.5rem !important}.pr-sm-2,.px-sm-2{padding-right:0.5rem !important}.pb-sm-2,.py-sm-2{padding-bottom:0.5rem !important}.pl-sm-2,.px-sm-2{padding-left:0.5rem !important}.p-sm-3{padding:1rem !important}.pt-sm-3,.py-sm-3{padding-top:1rem !important}.pr-sm-3,.px-sm-3{padding-right:1rem !important}.pb-sm-3,.py-sm-3{padding-bottom:1rem !important}.pl-sm-3,.px-sm-3{padding-left:1rem !important}.p-sm-4{padding:1.5rem !important}.pt-sm-4,.py-sm-4{padding-top:1.5rem !important}.pr-sm-4,.px-sm-4{padding-right:1.5rem !important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem !important}.pl-sm-4,.px-sm-4{padding-left:1.5rem !important}.p-sm-5{padding:3rem !important}.pt-sm-5,.py-sm-5{padding-top:3rem !important}.pr-sm-5,.px-sm-5{padding-right:3rem !important}.pb-sm-5,.py-sm-5{padding-bottom:3rem !important}.pl-sm-5,.px-sm-5{padding-left:3rem !important}.m-sm-auto{margin:auto !important}.mt-sm-auto,.my-sm-auto{margin-top:auto !important}.mr-sm-auto,.mx-sm-auto{margin-right:auto !important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto !important}.ml-sm-auto,.mx-sm-auto{margin-left:auto !important}}@media (min-width: 768px){.m-md-0{margin:0 !important}.mt-md-0,.my-md-0{margin-top:0 !important}.mr-md-0,.mx-md-0{margin-right:0 !important}.mb-md-0,.my-md-0{margin-bottom:0 !important}.ml-md-0,.mx-md-0{margin-left:0 !important}.m-md-1{margin:0.25rem !important}.mt-md-1,.my-md-1{margin-top:0.25rem !important}.mr-md-1,.mx-md-1{margin-right:0.25rem !important}.mb-md-1,.my-md-1{margin-bottom:0.25rem !important}.ml-md-1,.mx-md-1{margin-left:0.25rem !important}.m-md-2{margin:0.5rem !important}.mt-md-2,.my-md-2{margin-top:0.5rem !important}.mr-md-2,.mx-md-2{margin-right:0.5rem !important}.mb-md-2,.my-md-2{margin-bottom:0.5rem !important}.ml-md-2,.mx-md-2{margin-left:0.5rem !important}.m-md-3{margin:1rem !important}.mt-md-3,.my-md-3{margin-top:1rem !important}.mr-md-3,.mx-md-3{margin-right:1rem !important}.mb-md-3,.my-md-3{margin-bottom:1rem !important}.ml-md-3,.mx-md-3{margin-left:1rem !important}.m-md-4{margin:1.5rem !important}.mt-md-4,.my-md-4{margin-top:1.5rem !important}.mr-md-4,.mx-md-4{margin-right:1.5rem !important}.mb-md-4,.my-md-4{margin-bottom:1.5rem !important}.ml-md-4,.mx-md-4{margin-left:1.5rem !important}.m-md-5{margin:3rem !important}.mt-md-5,.my-md-5{margin-top:3rem !important}.mr-md-5,.mx-md-5{margin-right:3rem !important}.mb-md-5,.my-md-5{margin-bottom:3rem !important}.ml-md-5,.mx-md-5{margin-left:3rem !important}.p-md-0{padding:0 !important}.pt-md-0,.py-md-0{padding-top:0 !important}.pr-md-0,.px-md-0{padding-right:0 !important}.pb-md-0,.py-md-0{padding-bottom:0 !important}.pl-md-0,.px-md-0{padding-left:0 !important}.p-md-1{padding:0.25rem !important}.pt-md-1,.py-md-1{padding-top:0.25rem !important}.pr-md-1,.px-md-1{padding-right:0.25rem !important}.pb-md-1,.py-md-1{padding-bottom:0.25rem !important}.pl-md-1,.px-md-1{padding-left:0.25rem !important}.p-md-2{padding:0.5rem !important}.pt-md-2,.py-md-2{padding-top:0.5rem !important}.pr-md-2,.px-md-2{padding-right:0.5rem !important}.pb-md-2,.py-md-2{padding-bottom:0.5rem !important}.pl-md-2,.px-md-2{padding-left:0.5rem !important}.p-md-3{padding:1rem !important}.pt-md-3,.py-md-3{padding-top:1rem !important}.pr-md-3,.px-md-3{padding-right:1rem !important}.pb-md-3,.py-md-3{padding-bottom:1rem !important}.pl-md-3,.px-md-3{padding-left:1rem !important}.p-md-4{padding:1.5rem !important}.pt-md-4,.py-md-4{padding-top:1.5rem !important}.pr-md-4,.px-md-4{padding-right:1.5rem !important}.pb-md-4,.py-md-4{padding-bottom:1.5rem !important}.pl-md-4,.px-md-4{padding-left:1.5rem !important}.p-md-5{padding:3rem !important}.pt-md-5,.py-md-5{padding-top:3rem !important}.pr-md-5,.px-md-5{padding-right:3rem !important}.pb-md-5,.py-md-5{padding-bottom:3rem !important}.pl-md-5,.px-md-5{padding-left:3rem !important}.m-md-auto{margin:auto !important}.mt-md-auto,.my-md-auto{margin-top:auto !important}.mr-md-auto,.mx-md-auto{margin-right:auto !important}.mb-md-auto,.my-md-auto{margin-bottom:auto !important}.ml-md-auto,.mx-md-auto{margin-left:auto !important}}@media (min-width: 992px){.m-lg-0{margin:0 !important}.mt-lg-0,.my-lg-0{margin-top:0 !important}.mr-lg-0,.mx-lg-0{margin-right:0 !important}.mb-lg-0,.my-lg-0{margin-bottom:0 !important}.ml-lg-0,.mx-lg-0{margin-left:0 !important}.m-lg-1{margin:0.25rem !important}.mt-lg-1,.my-lg-1{margin-top:0.25rem !important}.mr-lg-1,.mx-lg-1{margin-right:0.25rem !important}.mb-lg-1,.my-lg-1{margin-bottom:0.25rem !important}.ml-lg-1,.mx-lg-1{margin-left:0.25rem !important}.m-lg-2{margin:0.5rem !important}.mt-lg-2,.my-lg-2{margin-top:0.5rem !important}.mr-lg-2,.mx-lg-2{margin-right:0.5rem !important}.mb-lg-2,.my-lg-2{margin-bottom:0.5rem !important}.ml-lg-2,.mx-lg-2{margin-left:0.5rem !important}.m-lg-3{margin:1rem !important}.mt-lg-3,.my-lg-3{margin-top:1rem !important}.mr-lg-3,.mx-lg-3{margin-right:1rem !important}.mb-lg-3,.my-lg-3{margin-bottom:1rem !important}.ml-lg-3,.mx-lg-3{margin-left:1rem !important}.m-lg-4{margin:1.5rem !important}.mt-lg-4,.my-lg-4{margin-top:1.5rem !important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem !important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem !important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem !important}.m-lg-5{margin:3rem !important}.mt-lg-5,.my-lg-5{margin-top:3rem !important}.mr-lg-5,.mx-lg-5{margin-right:3rem !important}.mb-lg-5,.my-lg-5{margin-bottom:3rem !important}.ml-lg-5,.mx-lg-5{margin-left:3rem !important}.p-lg-0{padding:0 !important}.pt-lg-0,.py-lg-0{padding-top:0 !important}.pr-lg-0,.px-lg-0{padding-right:0 !important}.pb-lg-0,.py-lg-0{padding-bottom:0 !important}.pl-lg-0,.px-lg-0{padding-left:0 !important}.p-lg-1{padding:0.25rem !important}.pt-lg-1,.py-lg-1{padding-top:0.25rem !important}.pr-lg-1,.px-lg-1{padding-right:0.25rem !important}.pb-lg-1,.py-lg-1{padding-bottom:0.25rem !important}.pl-lg-1,.px-lg-1{padding-left:0.25rem !important}.p-lg-2{padding:0.5rem !important}.pt-lg-2,.py-lg-2{padding-top:0.5rem !important}.pr-lg-2,.px-lg-2{padding-right:0.5rem !important}.pb-lg-2,.py-lg-2{padding-bottom:0.5rem !important}.pl-lg-2,.px-lg-2{padding-left:0.5rem !important}.p-lg-3{padding:1rem !important}.pt-lg-3,.py-lg-3{padding-top:1rem !important}.pr-lg-3,.px-lg-3{padding-right:1rem !important}.pb-lg-3,.py-lg-3{padding-bottom:1rem !important}.pl-lg-3,.px-lg-3{padding-left:1rem !important}.p-lg-4{padding:1.5rem !important}.pt-lg-4,.py-lg-4{padding-top:1.5rem !important}.pr-lg-4,.px-lg-4{padding-right:1.5rem !important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem !important}.pl-lg-4,.px-lg-4{padding-left:1.5rem !important}.p-lg-5{padding:3rem !important}.pt-lg-5,.py-lg-5{padding-top:3rem !important}.pr-lg-5,.px-lg-5{padding-right:3rem !important}.pb-lg-5,.py-lg-5{padding-bottom:3rem !important}.pl-lg-5,.px-lg-5{padding-left:3rem !important}.m-lg-auto{margin:auto !important}.mt-lg-auto,.my-lg-auto{margin-top:auto !important}.mr-lg-auto,.mx-lg-auto{margin-right:auto !important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto !important}.ml-lg-auto,.mx-lg-auto{margin-left:auto !important}}@media (min-width: 1200px){.m-xl-0{margin:0 !important}.mt-xl-0,.my-xl-0{margin-top:0 !important}.mr-xl-0,.mx-xl-0{margin-right:0 !important}.mb-xl-0,.my-xl-0{margin-bottom:0 !important}.ml-xl-0,.mx-xl-0{margin-left:0 !important}.m-xl-1{margin:0.25rem !important}.mt-xl-1,.my-xl-1{margin-top:0.25rem !important}.mr-xl-1,.mx-xl-1{margin-right:0.25rem !important}.mb-xl-1,.my-xl-1{margin-bottom:0.25rem !important}.ml-xl-1,.mx-xl-1{margin-left:0.25rem !important}.m-xl-2{margin:0.5rem !important}.mt-xl-2,.my-xl-2{margin-top:0.5rem !important}.mr-xl-2,.mx-xl-2{margin-right:0.5rem !important}.mb-xl-2,.my-xl-2{margin-bottom:0.5rem !important}.ml-xl-2,.mx-xl-2{margin-left:0.5rem !important}.m-xl-3{margin:1rem !important}.mt-xl-3,.my-xl-3{margin-top:1rem !important}.mr-xl-3,.mx-xl-3{margin-right:1rem !important}.mb-xl-3,.my-xl-3{margin-bottom:1rem !important}.ml-xl-3,.mx-xl-3{margin-left:1rem !important}.m-xl-4{margin:1.5rem !important}.mt-xl-4,.my-xl-4{margin-top:1.5rem !important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem !important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem !important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem !important}.m-xl-5{margin:3rem !important}.mt-xl-5,.my-xl-5{margin-top:3rem !important}.mr-xl-5,.mx-xl-5{margin-right:3rem !important}.mb-xl-5,.my-xl-5{margin-bottom:3rem !important}.ml-xl-5,.mx-xl-5{margin-left:3rem !important}.p-xl-0{padding:0 !important}.pt-xl-0,.py-xl-0{padding-top:0 !important}.pr-xl-0,.px-xl-0{padding-right:0 !important}.pb-xl-0,.py-xl-0{padding-bottom:0 !important}.pl-xl-0,.px-xl-0{padding-left:0 !important}.p-xl-1{padding:0.25rem !important}.pt-xl-1,.py-xl-1{padding-top:0.25rem !important}.pr-xl-1,.px-xl-1{padding-right:0.25rem !important}.pb-xl-1,.py-xl-1{padding-bottom:0.25rem !important}.pl-xl-1,.px-xl-1{padding-left:0.25rem !important}.p-xl-2{padding:0.5rem !important}.pt-xl-2,.py-xl-2{padding-top:0.5rem !important}.pr-xl-2,.px-xl-2{padding-right:0.5rem !important}.pb-xl-2,.py-xl-2{padding-bottom:0.5rem !important}.pl-xl-2,.px-xl-2{padding-left:0.5rem !important}.p-xl-3{padding:1rem !important}.pt-xl-3,.py-xl-3{padding-top:1rem !important}.pr-xl-3,.px-xl-3{padding-right:1rem !important}.pb-xl-3,.py-xl-3{padding-bottom:1rem !important}.pl-xl-3,.px-xl-3{padding-left:1rem !important}.p-xl-4{padding:1.5rem !important}.pt-xl-4,.py-xl-4{padding-top:1.5rem !important}.pr-xl-4,.px-xl-4{padding-right:1.5rem !important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem !important}.pl-xl-4,.px-xl-4{padding-left:1.5rem !important}.p-xl-5{padding:3rem !important}.pt-xl-5,.py-xl-5{padding-top:3rem !important}.pr-xl-5,.px-xl-5{padding-right:3rem !important}.pb-xl-5,.py-xl-5{padding-bottom:3rem !important}.pl-xl-5,.px-xl-5{padding-left:3rem !important}.m-xl-auto{margin:auto !important}.mt-xl-auto,.my-xl-auto{margin-top:auto !important}.mr-xl-auto,.mx-xl-auto{margin-right:auto !important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto !important}.ml-xl-auto,.mx-xl-auto{margin-left:auto !important}}.text-monospace{font-family:SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace}.text-justify{text-align:justify !important}.text-nowrap{white-space:nowrap !important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left !important}.text-right{text-align:right !important}.text-center{text-align:center !important}@media (min-width: 576px){.text-sm-left{text-align:left !important}.text-sm-right{text-align:right !important}.text-sm-center{text-align:center !important}}@media (min-width: 768px){.text-md-left{text-align:left !important}.text-md-right{text-align:right !important}.text-md-center{text-align:center !important}}@media (min-width: 992px){.text-lg-left{text-align:left !important}.text-lg-right{text-align:right !important}.text-lg-center{text-align:center !important}}@media (min-width: 1200px){.text-xl-left{text-align:left !important}.text-xl-right{text-align:right !important}.text-xl-center{text-align:center !important}}.text-lowercase{text-transform:lowercase !important}.text-uppercase{text-transform:uppercase !important}.text-capitalize{text-transform:capitalize !important}.font-weight-light{font-weight:300 !important}.font-weight-normal{font-weight:400 !important}.font-weight-bold{font-weight:700 !important}.font-italic{font-style:italic !important}.text-white{color:#fff !important}.text-primary{color:#3A3F44 !important}a.text-primary:hover,a.text-primary:focus{color:#232628 !important}.text-secondary{color:#7A8288 !important}a.text-secondary:hover,a.text-secondary:focus{color:#62686d !important}.text-success{color:#62c462 !important}a.text-success:hover,a.text-success:focus{color:#42b142 !important}.text-info{color:#5bc0de !important}a.text-info:hover,a.text-info:focus{color:#31b0d5 !important}.text-warning{color:#f89406 !important}a.text-warning:hover,a.text-warning:focus{color:#c67605 !important}.text-danger{color:#ee5f5b !important}a.text-danger:hover,a.text-danger:focus{color:#e9322d !important}.text-light{color:#e9ecef !important}a.text-light:hover,a.text-light:focus{color:#cbd3da !important}.text-dark{color:#272B30 !important}a.text-dark:hover,a.text-dark:focus{color:#101214 !important}.text-body{color:#aaa !important}.text-muted{color:#7A8288 !important}.text-black-50{color:rgba(0,0,0,0.5) !important}.text-white-50{color:rgba(255,255,255,0.5) !important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.visible{visibility:visible !important}.invisible{visibility:hidden !important}@media print{*,*::before,*::after{text-shadow:none !important;-webkit-box-shadow:none !important;box-shadow:none !important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:" (" attr(title) ")"}pre{white-space:pre-wrap !important}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px !important}.container{min-width:992px !important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse !important}.table td,.table th{background-color:#fff !important}.table-bordered th,.table-bordered td{border:1px solid #dee2e6 !important}.table-dark{color:inherit}.table-dark th,.table-dark td,.table-dark thead th,.table-dark tbody+tbody{border-color:rgba(0,0,0,0.6)}.table .thead-dark th{color:inherit;border-color:rgba(0,0,0,0.6)}}.navbar{border:1px solid rgba(0,0,0,0.6);text-shadow:1px 1px 1px rgba(0,0,0,0.3)}.navbar .container{padding:0}.navbar .navbar-toggler{border-color:rgba(0,0,0,0.6)}.navbar-fixed-top{border-width:0 0 1px 0}.navbar-fixed-bottom{border-width:1px 0 0 0}.navbar .nav-link{padding:1rem;border-left:1px solid rgba(255,255,255,0.1);border-right:1px solid rgba(0,0,0,0.2)}.navbar .nav-link:hover,.navbar .nav-link:focus{background-image:-webkit-gradient(linear, left top, left bottom, from(#101112), color-stop(40%, #17191b), to(#1b1e20));background-image:linear-gradient(#101112, #17191b 40%, #1b1e20);background-repeat:no-repeat;-webkit-filter:none;filter:none;border-left:1px solid rgba(0,0,0,0.2)}.navbar-brand{padding:0.75rem 1rem calc(54px - 0.75rem - 30px);margin-right:0;border-right:1px solid rgba(0,0,0,0.2)}.navbar .nav-item.active .nav-link{background-color:rgba(0,0,0,0.3);border-left:1px solid rgba(0,0,0,0.2)}.navbar-nav .nav-item+.nav-item{margin-left:0}.navbar.bg-light{text-shadow:1px 1px 1px rgba(0,0,0,0.1)}.navbar.bg-light .nav-link:hover,.navbar.bg-light .nav-link:focus{background-image:-webkit-gradient(linear, left top, left bottom, from(#4e5458), color-stop(40%, #565b60), to(#5b6165));background-image:linear-gradient(#4e5458, #565b60 40%, #5b6165);background-repeat:no-repeat;-webkit-filter:none;filter:none;border-left:1px solid rgba(0,0,0,0.2)}@media (max-width: 576px){.navbar-expand-sm .navbar-brand,.navbar-expand-sm .nav-link{border:none !important}}@media (max-width: 768px){.navbar-expand-md .navbar-brand,.navbar-expand-md .nav-link{border:none !important}}@media (max-width: 992px){.navbar-expand-lg .navbar-brand,.navbar-expand-lg .nav-link{border:none !important}}.btn{border-color:rgba(0,0,0,0.6);text-shadow:1px 1px 1px rgba(0,0,0,0.3)}.btn:not([disabled]):not(.disabled).active,.btn.disabled{border-color:rgba(0,0,0,0.6);-webkit-box-shadow:none;box-shadow:none}.btn:hover,.btn:focus,.btn:not([disabled]):not(.disabled):active,.btn:not([disabled]):not(.disabled):active:hover,.btn:not([disabled]):not(.disabled).active:hover{border-color:rgba(0,0,0,0.6)}.btn-primary{background-image:-webkit-gradient(linear, left top, left bottom, from(#484e55), color-stop(60%, #3A3F44), to(#313539));background-image:linear-gradient(#484e55, #3A3F44 60%, #313539);background-repeat:no-repeat;-webkit-filter:none;filter:none}.btn-primary:not([disabled]):not(.disabled):hover,.btn-primary:not([disabled]):not(.disabled):focus,.btn-primary:not([disabled]):not(.disabled):active:hover,.btn-primary:not([disabled]):not(.disabled).active:hover{background-image:-webkit-gradient(linear, left top, left bottom, from(#101112), color-stop(40%, #17191b), to(#1b1e20));background-image:linear-gradient(#101112, #17191b 40%, #1b1e20);background-repeat:no-repeat;-webkit-filter:none;filter:none}.btn-secondary{background-image:-webkit-gradient(linear, left top, left bottom, from(#8a9196), color-stop(60%, #7A8288), to(#70787d));background-image:linear-gradient(#8a9196, #7A8288 60%, #70787d);background-repeat:no-repeat;-webkit-filter:none;filter:none}.btn-secondary:not([disabled]):not(.disabled):hover,.btn-secondary:not([disabled]):not(.disabled):focus,.btn-secondary:not([disabled]):not(.disabled):active,.btn-secondary:not([disabled]):not(.disabled).active{background-image:-webkit-gradient(linear, left top, left bottom, from(#4e5458), color-stop(40%, #565b60), to(#5b6165));background-image:linear-gradient(#4e5458, #565b60 40%, #5b6165);background-repeat:no-repeat;-webkit-filter:none;filter:none}.btn-success{background-image:-webkit-gradient(linear, left top, left bottom, from(#78cc78), color-stop(60%, #62c462), to(#53be53));background-image:linear-gradient(#78cc78, #62c462 60%, #53be53);background-repeat:no-repeat;-webkit-filter:none;filter:none;color:#fff}.btn-success:not([disabled]):not(.disabled):hover,.btn-success:not([disabled]):not(.disabled):focus,.btn-success:not([disabled]):not(.disabled):active,.btn-success:not([disabled]):not(.disabled).active{background-image:-webkit-gradient(linear, left top, left bottom, from(#379337), color-stop(40%, #3b9e3b), to(#3ea63e));background-image:linear-gradient(#379337, #3b9e3b 40%, #3ea63e);background-repeat:no-repeat;-webkit-filter:none;filter:none}.btn-info{background-image:-webkit-gradient(linear, left top, left bottom, from(#74cae3), color-stop(60%, #5bc0de), to(#4ab9db));background-image:linear-gradient(#74cae3, #5bc0de 60%, #4ab9db);background-repeat:no-repeat;-webkit-filter:none;filter:none;color:#fff}.btn-info:not([disabled]):not(.disabled):hover,.btn-info:not([disabled]):not(.disabled):focus,.btn-info:not([disabled]):not(.disabled):active,.btn-info:not([disabled]):not(.disabled).active{background-image:-webkit-gradient(linear, left top, left bottom, from(#2596b8), color-stop(40%, #28a1c5), to(#29a8cd));background-image:linear-gradient(#2596b8, #28a1c5 40%, #29a8cd);background-repeat:no-repeat;-webkit-filter:none;filter:none}.btn-warning{background-image:-webkit-gradient(linear, left top, left bottom, from(#faa123), color-stop(60%, #f89406), to(#e48806));background-image:linear-gradient(#faa123, #f89406 60%, #e48806);background-repeat:no-repeat;-webkit-filter:none;filter:none;color:#fff}.btn-warning:not([disabled]):not(.disabled):hover,.btn-warning:not([disabled]):not(.disabled):focus,.btn-warning:not([disabled]):not(.disabled):active,.btn-warning:not([disabled]):not(.disabled).active{background-image:-webkit-gradient(linear, left top, left bottom, from(#9e5f04), color-stop(40%, #ad6704), to(#b76d04));background-image:linear-gradient(#9e5f04, #ad6704 40%, #b76d04);background-repeat:no-repeat;-webkit-filter:none;filter:none}.btn-danger{background-image:-webkit-gradient(linear, left top, left bottom, from(#f17a77), color-stop(60%, #ee5f5b), to(#ec4d49));background-image:linear-gradient(#f17a77, #ee5f5b 60%, #ec4d49);background-repeat:no-repeat;-webkit-filter:none;filter:none}.btn-danger:not([disabled]):not(.disabled):hover,.btn-danger:not([disabled]):not(.disabled):focus,.btn-danger:not([disabled]):not(.disabled):active,.btn-danger:not([disabled]):not(.disabled).active{background-image:-webkit-gradient(linear, left top, left bottom, from(#d71c16), color-stop(40%, #e51d18), to(#e8241f));background-image:linear-gradient(#d71c16, #e51d18 40%, #e8241f);background-repeat:no-repeat;-webkit-filter:none;filter:none}.btn-link,.btn-link:hover{border-color:transparent}.btn-group .btn.active,.btn-group-vertical .btn.active{border-color:rgba(0,0,0,0.6)}h1,h2,h3,h4,h5,h6{text-shadow:-1px -1px 0 rgba(0,0,0,0.3)}.table-primary,.table-secondary,.table-success,.table-info,.table-warning,.table-danger{color:#fff}.table-primary,.table-primary>th,.table-primary>td{background-color:#3A3F44}.table-secondary,.table-secondary>th,.table-secondary>td{background-color:#7A8288}.table-light,.table-light>th,.table-light>td{background-color:#e9ecef}.table-dark,.table-dark>th,.table-dark>td{background-color:#272B30}.table-success,.table-success>th,.table-success>td{background-color:#62c462}.table-info,.table-info>th,.table-info>td{background-color:#5bc0de}.table-danger,.table-danger>th,.table-danger>td{background-color:#ee5f5b}.table-warning,.table-warning>th,.table-warning>td{background-color:#f89406}.table-active,.table-active>th,.table-active>td{background-color:rgba(255,255,255,0.075)}.table-hover .table-primary:hover,.table-hover .table-primary:hover>th,.table-hover .table-primary:hover>td{background-color:#2e3236}.table-hover .table-secondary:hover,.table-hover .table-secondary:hover>th,.table-hover .table-secondary:hover>td{background-color:#6e757b}.table-hover .table-light:hover,.table-hover .table-light:hover>th,.table-hover .table-light:hover>td{background-color:#dadfe4}.table-hover .table-dark:hover,.table-hover .table-dark:hover>th,.table-hover .table-dark:hover>td{background-color:#1c1e22}.table-hover .table-success:hover,.table-hover .table-success:hover>th,.table-hover .table-success:hover>td{background-color:#4fbd4f}.table-hover .table-info:hover,.table-hover .table-info:hover>th,.table-hover .table-info:hover>td{background-color:#46b8da}.table-hover .table-danger:hover,.table-hover .table-danger:hover>th,.table-hover .table-danger:hover>td{background-color:#ec4844}.table-hover .table-warning:hover,.table-hover .table-warning:hover>th,.table-hover .table-warning:hover>td{background-color:#df8505}.table-hover .table-active:hover,.table-hover .table-active:hover>th,.table-hover .table-active:hover>td{background-color:rgba(255,255,255,0.075)}legend{color:#fff}.input-group-addon{background-image:-webkit-gradient(linear, left top, left bottom, from(#8a9196), color-stop(60%, #7A8288), to(#70787d));background-image:linear-gradient(#8a9196, #7A8288 60%, #70787d);background-repeat:no-repeat;-webkit-filter:none;filter:none;text-shadow:1px 1px 1px rgba(0,0,0,0.3);color:#fff}.nav-tabs .nav-link,.nav-tabs .nav-link:hover{color:#fff}.nav-pills .nav-link{background-image:-webkit-gradient(linear, left top, left bottom, from(#484e55), color-stop(60%, #3A3F44), to(#313539));background-image:linear-gradient(#484e55, #3A3F44 60%, #313539);background-repeat:no-repeat;-webkit-filter:none;filter:none;border:1px solid rgba(0,0,0,0.6);text-shadow:1px 1px 1px rgba(0,0,0,0.3);color:#fff}.nav-pills .nav-link:hover{background-image:-webkit-gradient(linear, left top, left bottom, from(#101112), color-stop(40%, #17191b), to(#1b1e20));background-image:linear-gradient(#101112, #17191b 40%, #1b1e20);background-repeat:no-repeat;-webkit-filter:none;filter:none;border:1px solid rgba(0,0,0,0.6)}.nav-pills .nav-link.active,.nav-pills .nav-link:hover{background-color:transparent;background-image:-webkit-gradient(linear, left top, left bottom, from(#101112), color-stop(40%, #17191b), to(#1b1e20));background-image:linear-gradient(#101112, #17191b 40%, #1b1e20);background-repeat:no-repeat;-webkit-filter:none;filter:none;border:1px solid rgba(0,0,0,0.6)}.nav-pills .nav-link.disabled,.nav-pills .nav-link.disabled:hover{background-image:-webkit-gradient(linear, left top, left bottom, from(#484e55), color-stop(60%, #3A3F44), to(#313539));background-image:linear-gradient(#484e55, #3A3F44 60%, #313539);background-repeat:no-repeat;-webkit-filter:none;filter:none;color:#7A8288}.pagination .page-link{text-shadow:1px 1px 1px rgba(0,0,0,0.3);background-image:-webkit-gradient(linear, left top, left bottom, from(#484e55), color-stop(60%, #3A3F44), to(#313539));background-image:linear-gradient(#484e55, #3A3F44 60%, #313539);background-repeat:no-repeat;-webkit-filter:none;filter:none}.pagination .page-link:hover{background-image:-webkit-gradient(linear, left top, left bottom, from(#101112), color-stop(40%, #17191b), to(#1b1e20));background-image:linear-gradient(#101112, #17191b 40%, #1b1e20);background-repeat:no-repeat;-webkit-filter:none;filter:none;text-decoration:none}.pagination .page-item.active .page-link{background-image:-webkit-gradient(linear, left top, left bottom, from(#101112), color-stop(40%, #17191b), to(#1b1e20));background-image:linear-gradient(#101112, #17191b 40%, #1b1e20);background-repeat:no-repeat;-webkit-filter:none;filter:none}.pagination .page-item.disabled .page-link{background-image:-webkit-gradient(linear, left top, left bottom, from(#484e55), color-stop(60%, #3A3F44), to(#313539));background-image:linear-gradient(#484e55, #3A3F44 60%, #313539);background-repeat:no-repeat;-webkit-filter:none;filter:none}.breadcrumb{border:1px solid rgba(0,0,0,0.6);text-shadow:1px 1px 1px rgba(0,0,0,0.3);background-color:transparent;background-image:-webkit-gradient(linear, left top, left bottom, from(#484e55), color-stop(60%, #3A3F44), to(#313539));background-image:linear-gradient(#484e55, #3A3F44 60%, #313539);background-repeat:no-repeat;-webkit-filter:none;filter:none}.breadcrumb a,.breadcrumb a:hover{color:#fff}.alert .close{color:#000;text-decoration:none}.alert{border:none;color:#fff}.alert a,.alert .alert-link{color:#fff;text-decoration:underline}.alert-primary{background-color:#3A3F44}.alert-secondary{background-color:#7A8288}.alert-success{background-color:#62c462}.alert-info{background-color:#5bc0de}.alert-warning{background-color:#f89406}.alert-danger{background-color:#ee5f5b}.alert-light{background-color:#e9ecef}.alert-dark{background-color:#272B30}.alert-light,.alert-light a:not(.btn),.alert-light .alert-link{color:#272B30}.badge-success,.badge-warning,.badge-info{color:#fff}.jumbotron{border:1px solid rgba(0,0,0,0.6)}.list-group-item:hover{background-color:#1c1e22} diff --git a/packages/master/static/browserconfig.xml b/packages/master/static/browserconfig.xml deleted file mode 100644 index ae389fe5..00000000 --- a/packages/master/static/browserconfig.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - #ffffff - - - \ No newline at end of file diff --git a/packages/master/static/favicon.ico b/packages/master/static/favicon.ico deleted file mode 100644 index b70c1b1c8027e7d3e8ee9a6caa805aa009a8a684..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3262 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 CB;O$b diff --git a/packages/master/static/favicon/android-icon-48x48.png b/packages/master/static/favicon/android-icon-48x48.png deleted file mode 100644 index d81cf14a1fc8fef4a0de2769f9e897f090f4ef53..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4138 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 w)t;yM7jT1J{R>W-2B1-F%iKmY&$ diff --git a/packages/master/static/favicon/android-icon-72x72.png b/packages/master/static/favicon/android-icon-72x72.png deleted file mode 100644 index 4edbbf1a2d42eb9a82f7c6f88ab44a80d24e6dac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7501 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�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 Gp$Py};nvjv diff --git a/packages/master/static/favicon/apple-icon-144x144.png b/packages/master/static/favicon/apple-icon-144x144.png deleted file mode 100644 index f609cbdd81f1398100cacb79965b50b4424de04a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22580 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 diff --git a/packages/master/static/favicon/apple-icon-180x180.png b/packages/master/static/favicon/apple-icon-180x180.png deleted file mode 100644 index 88690ae639f26e0f0c8338a5b0decc30fba4f3ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32315 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 N^3p0&wGt+w{|kuyN@M^4 diff --git a/packages/master/static/favicon/apple-icon-57x57.png b/packages/master/static/favicon/apple-icon-57x57.png deleted file mode 100644 index 2916b5d2eb7b9b1c3bdf05d781457e562847d4e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5300 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 JSd?|te*r?0pBw-H diff --git a/packages/master/static/favicon/apple-icon-60x60.png b/packages/master/static/favicon/apple-icon-60x60.png deleted file mode 100644 index c91c7eb2e77ac35077b30cea04ef024cf2d5ba3f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5704 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 E3qLr52LJ#7 diff --git a/packages/master/static/favicon/apple-icon-72x72.png b/packages/master/static/favicon/apple-icon-72x72.png deleted file mode 100644 index 4edbbf1a2d42eb9a82f7c6f88ab44a80d24e6dac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7501 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�v{CWmpl!Lp+{L``2_uJXv5`oa9#9&{F{MyP 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 E0gf#?_W%F@ diff --git a/packages/master/static/favicon/apple-icon.png b/packages/master/static/favicon/apple-icon.png deleted file mode 100644 index 94de25e377c3dff781dd19c31432cefd1b61eff6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35848 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�v{CWmpl!Lp+{L``2_uJXv5`oa9#9&{F{MyP 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 E0gf#?_W%F@ diff --git a/packages/master/static/favicon/browserconfig.xml b/packages/master/static/favicon/browserconfig.xml deleted file mode 100644 index c5541482..00000000 --- a/packages/master/static/favicon/browserconfig.xml +++ /dev/null @@ -1,2 +0,0 @@ - -#ffffff \ No newline at end of file diff --git a/packages/master/static/favicon/favicon-16x16.png b/packages/master/static/favicon/favicon-16x16.png deleted file mode 100644 index c0b5d01dc70b317bf480e30b4f211f4299f63f2a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1451 zcmZ{i3rtgI6o7yFrig8^w4h}zZK24cy|*o`xAGXZP#6{wYYQ^9rM)c``jFm&z??_` z9}pEpWOEut@ipH==YwU&OifH?vcPoCC5uMq)VVq0V-qs=SC`0^>`%@;Ip=)m@!#`r zC@nEYGiNdZ0MSK-hBBzxVPTNrHzk9$2r7y@&y)wi$<0v{b}F#! zVVMblrepwG+5mV3T`fNY5JCWWWCK9g4*);#$@zs@FmJeYzBwNPLo3oBbY&+@C$|{| zeHQWL2k%UtFi%cutvQK}dHheE8J@Jrlb-a$Hfeos{I1HBJa^2KH9WlxOw9+DwQC7##y`MOHY#Wb#Q)4)C?wYXUjrsPV^nUU$U(GP0A*H z%$;`Sd7Chp&G%;Ux)z9cRwnmXBKuobuUp~e#6$u3kLZ8|!0rn1XYSM;OOkglPwyxe zvboc0u-L6j<<0pCm@v9?Dc0jbnhq3ojk-EV@Xm|oU9EEi+3{Io_BMy6W4^c);UQdV zZN6kvdD@x+Vc%k@?>(V4s9ZN{-+05}JE(8}P}6BiX)P4=Ta&7=naV_tj0OslStc~z zos&?IIzuaFQyC->UL_E4fFXrlrk?4{5*TLBP$#lT6f%!V7RJz%`Al{cjT=p)Q^P2S z7QvyDBwU7s$7C_7vC%XVh0^`L0)|Y~i$|gAA<9a^5995jGC4I{2P@xuYSEn#^b-!dg*$v znJPUue&e?%YizdA&6lIkZ>#3r85_7YetcQw`lk?Gu%4Rqm;EBA2_`K*q%d! zNB5@fCGoa=GonS*N)4K+qDPgNFR8fw-S@ZV&e35P0w@x=aQQ`4T%cRLks(t(R54xQ${K37S?(@04SXFOt-!`k+viRocjc>JTO{VJU z(9oIF4Mcq?^zzw@=L`B7XZZKxVq+O(xS-`VX&;Nr@BRocl0@W}6HYsU>l}4BR6vQK zb23n627;MUREMf`N+bmzFYZiUNU?{WBjLB-p}C{zxW6LYGo sa7>9;X>r_vVGgYpbGq!P2GOe2a+o29^Hmy&)35_5$}ce-)7x7A2C^Ezpa1{> diff --git a/packages/master/static/favicon/favicon-32x32.png b/packages/master/static/favicon/favicon-32x32.png deleted file mode 100644 index 0af5b4b7c3743b214d0289d57f4ee9348beef4bd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2496 zcmZ{ldo+~!AIBd%ax21ap(M7&ri{5YGbWdaOv1X%Xk5!>jFB-i<1!jilqkuj6}hy? z7?){W%O#<9gk>rwmnd=zxzWKDkBu;2muN zAW{baV&VW`1>B1H2mqll0GK)p0JysVpc0%}>tF;nq`XgAS%3;Y%g5`YL6Hr{yD$I% zdSI(0A|9BA0f02}q=gxQ^lZl2Es)T&%VVNp+<1i5i`1BhAj1M-s{Hd1yT)PB{X}$> zMUv|sps2fm_^YtM(TQ7{>rCw;5KW2-9S8|Ig=g%4@|XO5SnYU|k&&QRfUa&48yP*k zFwvQ{iskHAmF!l;7mMSyvmO>#^z@&btNSXEJtW(JeX(i$;!+MzDWRm7XFJ}Vqn=3t zdPf9`8cv5--yWicGCt#SL?nmoS5Hsbl-m;b(IMEn==UM;v^KSe8f_-!iW?5CT@TUa z7OerFv6=fN+0|(flZAUbB3hxc`-mD`hMNG(Q#@vjoN3CiO|@a4gphEnJJKMp@mF=12=6}eDs;K`x1ve;XF)kJ~CP8RdsW$5^eb^Dk%H7 z1BZ!qS@Ab2-S|B}{dj8GqPe`hea*rBh^QWnq1A+K?7G!d`Y(OIou^+%TMk?#Y?`6!dwgf^D`Q zfzPz_r?#FRkD8u{)6??aK6*GghLveCO^EJ~4v6+t%{KMx~0c%9S`DO(A@l9d;(n^W#Noe9P`Zl`p$j)&*R*!_c-shKRdKJigd2n5WE~M5Q4lL_6(JKB z56r%KrGJds+ppcaQEORdJ^s97+u#)6aAxDaaKYwfE4|~;cy^xCZw=EEJy48frp@D( zc8!mUOrA#uA|zC<_9OIqX(D*wcAoMT5%(? zjexb9O_%wTgAr*r`G4iM5w$~hO+LR<$;>;esmS!{sSdp)uzxV|;Q`z|qm=!2v;1&e|fzu=7%JZ#C!>r(o{i97AIvb0*aXBP#=j}U>3Inu)A z?w9q;3~fLw{7_cW zSsggNIA1~Em%egsQvuVm9{QR+^E!WEuPkd>+f(5=!s>|p+=^rvpVOp|TBUxi&)uFg zNbum=uxciMLW-|NxpQ_ADYXI0dHJK;n`;=cZdd)fF2$H%J6#;(@+RHdC7RQEfL&kq z%H{MltY4Z!+>xKum}-5GDaiW4LWx;I=ij96Ye(8nb87Ek17k$oXW{V(>JbV zNt076|I8=sD3H(0a{SfEYMeM&^kavKf>2P8AM4Ixt-m`%)|Zvw#LPxw5+BH|a8ALP z-(P$fx7}&+QWJG~-+(KkE$S(%LZbPze&<(pPa!5mDw%9{^bPd9H;SuiQrz4MQDha< z>*wpZH&!S>#pR^=pQq$P$fLSHu*nwG8Jhz4W_3-_?UN`|gZDiY&{4t3cuP zj_{{h_=A0Tzl!C@ow6BvX|AJ=eaOsL{^h={zjCL;>V}4~LAx72W=*R6)qg*|JI@VO z@R1OtU_BEQzcd}#muo0uzc2S6@ELI<#J>Caw~pJ}A^r}M?%t0BU-E0ckp_mi6d5yM$C`SGa3h4-nH`Dn+a&hJ`&Lk3&MwxLBH6#wfe78Bi&ym@4Q3 z5OZ2o>RA)0!${l^Ug5HY(1=XRvI?u&RE%7g-I!QXiE2tn9RIXG5&WlWGc8F>UoR#Z z=MzE(1wg>ySbaD`A7)5^!*OsV4gos^gW+H>-87}?{~4gseW`w||3Bc|#yt%VoY+cW z(EXUm3p%^Gu-%t~bMCrqhfT@}eaI~gBlNpRNFbEG1hf=p_ zus|A051|ZPodFF2)h$PYe<;lxhqIvjgwn`COdQT0L>T~_vsq{GFXo?29L}FirT8-e zxFKRE5OM`%RKD@~4|AI8%k#sc7EgIM2#c^Fmv!X=!J{Ge3LzZxA4M2mk;8 diff --git a/packages/master/static/favicon/favicon-96x96.png b/packages/master/static/favicon/favicon-96x96.png deleted file mode 100644 index 73aaf88d4c292edc37ccf90bd9a75bf7beeed6ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11822 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 diff --git a/packages/master/static/favicon/manifest.json b/packages/master/static/favicon/manifest.json deleted file mode 100644 index 013d4a6a..00000000 --- a/packages/master/static/favicon/manifest.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "name": "App", - "icons": [ - { - "src": "\/android-icon-36x36.png", - "sizes": "36x36", - "type": "image\/png", - "density": "0.75" - }, - { - "src": "\/android-icon-48x48.png", - "sizes": "48x48", - "type": "image\/png", - "density": "1.0" - }, - { - "src": "\/android-icon-72x72.png", - "sizes": "72x72", - "type": "image\/png", - "density": "1.5" - }, - { - "src": "\/android-icon-96x96.png", - "sizes": "96x96", - "type": "image\/png", - "density": "2.0" - }, - { - "src": "\/android-icon-144x144.png", - "sizes": "144x144", - "type": "image\/png", - "density": "3.0" - }, - { - "src": "\/android-icon-192x192.png", - "sizes": "192x192", - "type": "image\/png", - "density": "4.0" - } - ] -} \ No newline at end of file diff --git a/packages/master/static/favicon/ms-icon-144x144.png b/packages/master/static/favicon/ms-icon-144x144.png deleted file mode 100644 index f609cbdd81f1398100cacb79965b50b4424de04a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22580 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 G$o~a~HCS>0 diff --git a/packages/master/static/favicon/ms-icon-70x70.png b/packages/master/static/favicon/ms-icon-70x70.png deleted file mode 100644 index aca18cbbb0e9b4dbc9c9c0292a331aeb75122fee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7256 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 diff --git a/packages/master/static/lib/terminal.js b/packages/master/static/lib/terminal.js deleted file mode 100644 index 6e5e0864..00000000 --- a/packages/master/static/lib/terminal.js +++ /dev/null @@ -1,185 +0,0 @@ -/*! terminal.js v2.0 | (c) 2014 Erik Österberg | https://github.com/eosterberg/terminaljs */ - -var Terminal = (function () { - // PROMPT_TYPE - var PROMPT_INPUT = 1, PROMPT_PASSWORD = 2, PROMPT_CONFIRM = 3 - - var fireCursorInterval = function (inputField, terminalObj) { - var cursor = terminalObj._cursor - setTimeout(function () { - if (inputField.parentElement && terminalObj._shouldBlinkCursor) { - cursor.style.visibility = cursor.style.visibility === 'visible' ? 'hidden' : 'visible' - fireCursorInterval(inputField, terminalObj) - } else { - cursor.style.visibility = 'visible' - } - }, 500) - } - - var firstPrompt = true; - promptInput = function (terminalObj, message, PROMPT_TYPE, callback) { - var shouldDisplayInput = (PROMPT_TYPE === PROMPT_INPUT) - var inputField = document.createElement('input') - - inputField.style.position = 'absolute' - inputField.style.zIndex = '-100' - inputField.style.outline = 'none' - inputField.style.border = 'none' - inputField.style.opacity = '0' - inputField.style.fontSize = '0.2em' - - terminalObj._inputLine.textContent = '' - terminalObj._input.style.display = 'block' - terminalObj.html.appendChild(inputField) - fireCursorInterval(inputField, terminalObj) - - if (message.length) terminalObj.print(PROMPT_TYPE === PROMPT_CONFIRM ? message + ' (y/n)' : message) - - inputField.onblur = function () { - terminalObj._cursor.style.display = 'none' - } - - inputField.onfocus = function () { - inputField.value = terminalObj._inputLine.textContent - terminalObj._cursor.style.display = 'inline' - } - - terminalObj.html.onclick = function () { - inputField.focus() - } - - inputField.onkeydown = function (e) { - if (e.which === 37 || e.which === 39 || e.which === 38 || e.which === 40 || e.which === 9) { - e.preventDefault() - } else if (shouldDisplayInput && e.which !== 13) { - setTimeout(function () { - terminalObj._inputLine.textContent = inputField.value - }, 1) - } - } - inputField.onkeyup = function (e) { - if (PROMPT_TYPE === PROMPT_CONFIRM || e.which === 13) { - terminalObj._input.style.display = 'none' - var inputValue = inputField.value - if (shouldDisplayInput) terminalObj.print(inputValue) - terminalObj.html.removeChild(inputField) - if (typeof(callback) === 'function') { - if (PROMPT_TYPE === PROMPT_CONFIRM) { - callback(inputValue.toUpperCase()[0] === 'Y' ? true : false) - } else callback(inputValue) - } - } - } - if (firstPrompt) { - firstPrompt = false - setTimeout(function () { inputField.focus() }, 50) - } else { - inputField.focus() - } - } - - var terminalBeep - - var TerminalConstructor = function (id) { - if (!terminalBeep) { - terminalBeep = document.createElement('audio') - var source = '' + source + 'ogg" type="audio/ogg">' - terminalBeep.volume = 0.05 - } - - this.html = document.createElement('div') - this.html.className = 'Terminal' - if (typeof(id) === 'string') { this.html.id = id } - - this._innerWindow = document.createElement('div') - this._output = document.createElement('p') - this._inputLine = document.createElement('span') //the span element where the users input is put - this._cursor = document.createElement('span') - this._input = document.createElement('p') //the full element administering the user input, including cursor - - this._shouldBlinkCursor = true - - this.beep = function () { - terminalBeep.load() - terminalBeep.play() - } - - this.print = function (message) { - var newLine = document.createElement('div') - newLine.textContent = message - this._output.appendChild(newLine) - } - - this.input = function (message, callback) { - promptInput(this, message, PROMPT_INPUT, callback) - } - - this.password = function (message, callback) { - promptInput(this, message, PROMPT_PASSWORD, callback) - } - - this.confirm = function (message, callback) { - promptInput(this, message, PROMPT_CONFIRM, callback) - } - - this.clear = function () { - this._output.innerHTML = '' - } - - this.sleep = function (milliseconds, callback) { - setTimeout(callback, milliseconds) - } - - this.setTextSize = function (size) { - this._output.style.fontSize = size - this._input.style.fontSize = size - } - - this.setTextColor = function (col) { - this.html.style.color = col - this._cursor.style.background = col - } - - this.setBackgroundColor = function (col) { - this.html.style.background = col - } - - this.setWidth = function (width) { - this.html.style.width = width - } - - this.setHeight = function (height) { - this.html.style.height = height - } - - this.blinkingCursor = function (bool) { - bool = bool.toString().toUpperCase() - this._shouldBlinkCursor = (bool === 'TRUE' || bool === '1' || bool === 'YES') - } - - this._input.appendChild(this._inputLine) - this._input.appendChild(this._cursor) - this._innerWindow.appendChild(this._output) - this._innerWindow.appendChild(this._input) - this.html.appendChild(this._innerWindow) - - this.setBackgroundColor('black') - this.setTextColor('white') - this.setTextSize('1em') - this.setWidth('100%') - this.setHeight('100%') - - this.html.style.fontFamily = 'Monaco, Courier' - this.html.style.margin = '0' - this._innerWindow.style.padding = '10px' - this._input.style.margin = '0' - this._output.style.margin = '0' - this._cursor.style.background = 'white' - this._cursor.innerHTML = 'C' //put something in the cursor.. - this._cursor.style.display = 'none' //then hide it - this._input.style.display = 'none' - } - - return TerminalConstructor -}()) \ No newline at end of file diff --git a/packages/master/static/lib/utility.js b/packages/master/static/lib/utility.js deleted file mode 100644 index f9f909ba..00000000 --- a/packages/master/static/lib/utility.js +++ /dev/null @@ -1,9 +0,0 @@ -export function getParameterByName(name, url) { - if(!url) url = window.location.href; - name = name.replace(/[\[\]]/g, "\\$&"); - var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"), - results = regex.exec(url); - if(!results) return null; - if(!results[2]) return ''; - return decodeURIComponent(results[2].replace(/\+/g, " ")); -} diff --git a/packages/master/static/main.js b/packages/master/static/main.js deleted file mode 100644 index 43e8e024..00000000 --- a/packages/master/static/main.js +++ /dev/null @@ -1,218 +0,0 @@ - -(function (){ - ensureSetting("Periodically update storage screen", "boolean", true); -}()) - -function ensureSetting(setting, type, defaultSetting) { - let settings - try { - settings = JSON.parse(localStorage.settings); - } catch (e) { - - } - if(!settings) settings = {}; - if(typeof settings[setting] != type) { - settings[setting] = defaultSetting; - console.log("Fixed setting: " + setting + " | " + defaultSetting) - } - localStorage.settings = JSON.stringify(settings) -} - -// debug tools - -debugTools = { - addItem: function(name, count){ - console.log(`Attempting to add ${count} ${name}`) - postJSON("api/place", { - instanceName: "unknown", - instanceID: "unknown", - unique: "unknown", - name: name, - count: count, - }, function(data){ - console.log(data); - }); - }, - removeItem: function(name, count){ - console.log(`Attempting to remove ${count} ${name}`) - postJSON("api/remove", { - instanceName: "unknown", - instanceID: "unknown", - unique: "unknown", - name: name, - count: count, - }, function(data){ - console.log(data); - }); - } -} - -let cachedInstanceNames = {}; -async function getInstanceName(instanceID){ - let instance = cachedInstanceNames[instanceID]; - if(!instance){ - let slaves = await getJSON("/api/slaves"); - try { - for(id in slaves){ - cachedInstanceNames[id] = slaves[id].instanceName; - } - } catch(e){ - console.log("Error while looking for instance name!"); - console.log(e); - } - return cachedInstanceNames[instanceID] || instanceID; - } else { - return cachedInstanceNames[instanceID]; - } -} -var g = {} -contents = { - "iron-plate":100, - "copper-plate":7312, -} -// nice functions -// hash a string to a hash -function djb2(str){ - var hash = 5381; - for (var i = 0; i < str.length; i++) { - hash = ((hash << 5) + hash) + str.charCodeAt(i); /* hash * 33 + c */ - } - return hash; -} - -// get queryString parameters -function getParameterByName(name, url) { - if (!url) url = window.location.href; - name = name.replace(/[\[\]]/g, "\\$&"); - var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"), - results = regex.exec(url); - if (!results) return null; - if (!results[2]) return ''; - return decodeURIComponent(results[2].replace(/\+/g, " ")); -} - -// callback(err, json) -function getJSON(url, callback) { - return new Promise((resolve, reject) => { - var xhr = new XMLHttpRequest(); - xhr.open('GET', url, true); - xhr.responseType = 'json'; - xhr.onload = function() { - var status = xhr.status; - if (status == 200) { - if(callback) callback(null, xhr.response); - resolve(xhr.response); - } else { - if(callback) callback(status); - reject(status); - } - }; - // triggers if connection is refused - xhr.onerror = function(e){ - if(callback) callback(e); - reject(e); - }; - xhr.send(); - }); -}; -// callback(err, json) -function postJSON(url, data, callback) { - return new Promise((resolve, reject) => { - var xhr = new XMLHttpRequest(); - xhr.open('POST', url, true); - xhr.setRequestHeader('Content-Type', 'application/json; charset=UTF-8'); - xhr.responseType = 'json'; - xhr.onload = function() { - var status = xhr.status; - if (status == 200) { - if(callback) callback(null, xhr.response); - resolve(xhr.response); - } else { - if(callback) callback(status); - reject(status); - } - }; - // triggers if connection is refused - xhr.onerror = function(e){ - if(callback) callback(e); - reject(e); - }; - xhr.send(JSON.stringify(data)); - }); -}; -// return Boolean -function isJSON(string){ - let stringIsJson = false; - let x - try { - x = JSON.parse(string); - } catch (e){ - return false; - } - if(typeof x == "object" || typeof string == "object"){ - stringIsJson = true; - } - return stringIsJson; -} -// hash a string to a color -function hashColor(str) { - var hash = djb2(str); - var r = (hash & 0xFF0000) >> 16; - var g = (hash & 0x00FF00) >> 8; - var b = hash & 0x0000FF; - return "#" + ("0" + r.toString(16)).substr(-2) + ("0" + g.toString(16)).substr(-2) + ("0" + b.toString(16)).substr(-2); -} -// exactly what you would expect it to, returns String -function capitalizeFirstLetter(string) { - return string.charAt(0).toUpperCase() + string.slice(1); -} - -// hide the HTML object passed as argument #1 -function hideThis(object) { - object.style.visibility = "hidden"; -} - -Date.prototype.yyyymmdd = function(time) { // http://stackoverflow.com/questions/3066586/get-string-in-yyyymmdd-format-from-js-date-object - var mm = this.getMonth() + 1; // getMonth() is zero-based - var dd = this.getDate(); - if(mm<10)mm = "0"+mm - if(dd<10)dd = "0"+dd - console.log(this.getFullYear()) - return this.getFullYear()+""+mm+""+dd+ ""; // padding -}; -var date = new Date(); -function replaceAll(target, search, replacement) { - return target.split(search).join(replacement); -}; - -function getItemIconClass(name) { - if (factorioItemMetadata.has(name)) { - return `item-${name}`; - } else { - return "item-unknown-item"; - } -} -window.factorioLocale = new Map(); -$.getJSON(`${root}export/locale.json`, (locale) => { - window.factorioLocale = new Map(locale); -}); -window.factorioItemMetadata = new Map(); -$.getJSON(`${root}export/item-metadata.json`, (itemMetadata) => { - window.factorioItemMetadata = new Map(itemMetadata); - console.log(factorioItemMetadata.get("electronic-circuit")); - let style = document.createElement("style"); - style.type = "text/css"; - document.head.appendChild(style); - - for (let [name, meta] of itemMetadata) { - style.sheet.insertRule([ - `.item-${name} {`, - ` background-image: url("${root}export/item-spritesheet.png");`, - " background-repeat: no-repeat;", - ` background-position: -${meta.x}px -${meta.y}px;`, - ` height: ${meta.size}px;`, - ` width: ${meta.size}px;`, - "}\n", - ].join("")); - } -}); diff --git a/packages/master/static/manifest.json b/packages/master/static/manifest.json deleted file mode 100644 index 013d4a6a..00000000 --- a/packages/master/static/manifest.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "name": "App", - "icons": [ - { - "src": "\/android-icon-36x36.png", - "sizes": "36x36", - "type": "image\/png", - "density": "0.75" - }, - { - "src": "\/android-icon-48x48.png", - "sizes": "48x48", - "type": "image\/png", - "density": "1.0" - }, - { - "src": "\/android-icon-72x72.png", - "sizes": "72x72", - "type": "image\/png", - "density": "1.5" - }, - { - "src": "\/android-icon-96x96.png", - "sizes": "96x96", - "type": "image\/png", - "density": "2.0" - }, - { - "src": "\/android-icon-144x144.png", - "sizes": "144x144", - "type": "image\/png", - "density": "3.0" - }, - { - "src": "\/android-icon-192x192.png", - "sizes": "192x192", - "type": "image\/png", - "density": "4.0" - } - ] -} \ No newline at end of file diff --git a/packages/master/static/nodeDetails.css b/packages/master/static/nodeDetails.css deleted file mode 100644 index 347274ce..00000000 --- a/packages/master/static/nodeDetails.css +++ /dev/null @@ -1,3 +0,0 @@ -#node-stats .breadcrumb-item { - height: auto; -} \ No newline at end of file diff --git a/packages/master/static/nodeDetails.js b/packages/master/static/nodeDetails.js deleted file mode 100644 index fc8ee509..00000000 --- a/packages/master/static/nodeDetails.js +++ /dev/null @@ -1,255 +0,0 @@ -function getParameterByName(name, url) { - if (!url) url = window.location.href; - name = name.replace(/[\[\]]/g, "\\$&"); - var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"), - results = regex.exec(url); - if (!results) return null; - if (!results[2]) return ''; - return decodeURIComponent(results[2].replace(/\+/g, " ")); -} - - - - -/// code below here -// declaring globals -var chartsByID = {}; -// update the online indicator dot -setInterval(function(){ - getJSON("/api/slaves", function(err, slaveData){ - let indicator = document.querySelector("#online-indicator"); - $(indicator).removeClass('fa-signal'); - $(indicator).removeClass('fa-dizzy'); - $(indicator).removeClass('fa-plug'); - if(err){ - // our request threw an error, most likely master is unavailable so we show yellow indicator - indicator.style.color = "yellow"; - $(indicator).addClass('fa-plug'); - indicator.title = "Master server unavailable"; - // compare with Math.floor(x/100000) allows us to check if they are within 10s of each other - } else if(Math.floor(slaveData[getParameterByName("instanceID")].time/100000) === Math.floor(Date.now()/100000)){ - indicator.style.color = "green"; - $(indicator).addClass('fa-signal'); - indicator.title = "Slave is online"; - } else { - indicator.style.color = "red"; - $(indicator).addClass('fa-dizzy'); - indicator.title = "Slave is offline"; - } - }); -}, 1000); - -function regexModDetails(modFileName) { - let m; - let results = []; - const regex = /(.+)_(\d+\.\d+\.\d+)\.zip/gm; - while ((m = regex.exec(modFileName)) !== null) { - // This is necessary to avoid infinite loops with zero-width matches - if (m.index === regex.lastIndex) { - regex.lastIndex++; - } - - // The result can be accessed through the `m`-variable. - m.forEach((match, _) => { - results.push(match); - }); - } - return results -} - -populateSlaveInfo(); -function populateSlaveInfo(){ - let instanceID = getParameterByName("instanceID"); - if(!instanceID){ - throw "We need instanceID! Also, *funny joke* but it doesn't work after I standardized on calling it instanceID"; - } - getJSON("/api/slaves", function(err, slaveData){ - /* - {"-1530507550":{ - "time":"1495475926375", - "rconPort":"8714", - "rconPassword":"hidden", - "serverPort":"14345", - "unique":"-1530507550", - "publicIP":"localhost", - "mods":[ - { - "modName":"clusterio_1.0.0.zip", - "hash":"341feb6c60918c83f7f3a6a14a4a308aef18dda6" - },{ - "modName":"clusterio_1.0.1.zip", - "hash":"aee7a4b67ece19bddf236312fe408a5d4b67248d" - },{ - "modName":"clusterio_1.1.0.zip", - "hash":"18e2f7e402d716e3dd1c1458b7fab2d0bb29eccf" - }], - "playerCount":"0", - "instanceName":"t", - "mac":"44-85-00-D2-7E-D6"} - } - */ - let slave = slaveData[instanceID]; - let HTML = '

-
- - - - diff --git a/test/integration/clusterio.js b/test/integration/clusterio.js index 6daabafa..584164c0 100644 --- a/test/integration/clusterio.js +++ b/test/integration/clusterio.js @@ -2,8 +2,6 @@ const assert = require("assert").strict; const fs = require("fs-extra"); const path = require("path"); -const validateHTML = require("html5-validator"); -const parallel = require("mocha.parallel"); const link = require("@clusterio/lib/link"); @@ -11,24 +9,6 @@ const { slowTest, get, execCtl, sendRcon, getControl, instancesDir } = require(" describe("Integration of Clusterio", function() { - parallel("master web interface", function() { - this.timeout(6000); - - let paths = ["/", "/nodes", "/settings", "/nodeDetails"]; - for (let path of paths) { - it(`sends some HTML when accessing ${path}`, async function() { - let res = await get(path); - let validation = await validateHTML(res.body.toString()); - let filtered = validation.messages.filter(msg => msg.type !== "info"); - assert( - filtered.length === 0, - "there are HTML errors on the page, please fix: "+JSON.stringify(validation.messages, null, 4) - ); - }); - } - }); - - describe("clusterioctl", function() { describe("slave list", function() { it("runs", async function() { diff --git a/test/missing.js b/test/missing.js deleted file mode 100644 index 1c0ba611..00000000 --- a/test/missing.js +++ /dev/null @@ -1,5 +0,0 @@ -// These are libraries that does not have any units test, they are -// required here in order to track coverage for them. - -"use strict"; -require("@clusterio/master/npm_post_install.js"); diff --git a/views/head.ejs b/views/head.ejs deleted file mode 100644 index 913629fb..00000000 --- a/views/head.ejs +++ /dev/null @@ -1,29 +0,0 @@ -Clusterio - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/views/index.ejs b/views/index.ejs deleted file mode 100644 index 3c01a242..00000000 --- a/views/index.ejs +++ /dev/null @@ -1,17 +0,0 @@ - - - <%- include("head") %> - - - -<%- include("nav") %> -
-
- -
-
- diff --git a/views/nav.ejs b/views/nav.ejs deleted file mode 100644 index a6ca3760..00000000 --- a/views/nav.ejs +++ /dev/null @@ -1,29 +0,0 @@ - diff --git a/views/nodeDetails.ejs b/views/nodeDetails.ejs deleted file mode 100644 index 6d6e2c00..00000000 --- a/views/nodeDetails.ejs +++ /dev/null @@ -1,32 +0,0 @@ - - - <%- include("head") %> - - - - - - - <%- include("nav") %> -
-
-
- -
-
-
- -
-
- - -
-
- diff --git a/views/nodes.ejs b/views/nodes.ejs deleted file mode 100644 index cb879213..00000000 --- a/views/nodes.ejs +++ /dev/null @@ -1,47 +0,0 @@ - - - <%- include("head") %> - - - - <%- include("nav") %> -
- -
<% -for (let [id, slave] of locals.slaves) { %> -
- -
    -
  • ID: <%= id %>
  • -
<% - for (let plug of locals.masterPlugins.values()) { - if ( - plug - && plug.ui - && typeof plug.ui.slaveListing == "object" - && Array.isArray(plug.ui.slaveListing) - ) { - let slaveListingEntries = plug.ui.slaveListing; - for (let button of slaveListingEntries) { - if (button.getHtml && typeof button.getHtml == "function") { %> - <% - } - } - } - } %> -
<% -} %> -
-
- - diff --git a/views/settings.ejs b/views/settings.ejs deleted file mode 100644 index 18295ad5..00000000 --- a/views/settings.ejs +++ /dev/null @@ -1,19 +0,0 @@ - - - <%- include("head") %> - - - - - <%- include("nav") %> -
- -
- - diff --git a/views/sidebar.ejs b/views/sidebar.ejs deleted file mode 100644 index 8809c389..00000000 --- a/views/sidebar.ejs +++ /dev/null @@ -1 +0,0 @@ -<%- include("nav") %> From f318f8826bb63c9aceab35b4b2ea319f51bf0cf5 Mon Sep 17 00:00:00 2001 From: Hornwitser Date: Fri, 25 Sep 2020 22:05:14 +0200 Subject: [PATCH 02/12] Adapt config and link library to web Make the config and link libraries compatible with packing for web with webpack. This would fail due to ws not being web compatible and config using a node function not available in the web shim for util. --- packages/lib/config/classes.js | 8 ++--- packages/lib/is_deep_strict_equal.js | 7 ++++ packages/lib/link/connectors.js | 50 ++++++++++++++-------------- packages/lib/package.json | 1 + test/mock.js | 17 ++++++++++ 5 files changed, 54 insertions(+), 29 deletions(-) create mode 100644 packages/lib/is_deep_strict_equal.js diff --git a/packages/lib/config/classes.js b/packages/lib/config/classes.js index 101b8037..1a2cca36 100644 --- a/packages/lib/config/classes.js +++ b/packages/lib/config/classes.js @@ -2,8 +2,8 @@ "use strict"; const events = require("events"); -const util = require("util"); +const isDeepStrictEqual = require("../is_deep_strict_equal"); const { basicType } = require("@clusterio/lib/helpers"); @@ -415,7 +415,7 @@ class ConfigGroup { let prev = this._fields.get(name); this._fields.set(name, value); - if (this._config && !util.isDeepStrictEqual(value, prev)) { + if (this._config && !isDeepStrictEqual(value, prev)) { this._config.emit("fieldChanged", this, name, prev); } } @@ -452,7 +452,7 @@ class ConfigGroup { updated[prop] = value; this._fields.set(name, updated); - if (this._config && !util.isDeepStrictEqual(updated, prev)) { + if (this._config && !isDeepStrictEqual(updated, prev)) { this._config.emit("fieldChanged", this, name, prev); } } @@ -502,7 +502,7 @@ class ConfigGroup { let prev = this._fields.get(name); this._fields.set(name, value); - if (notify && this._config && !util.isDeepStrictEqual(value, prev)) { + if (notify && this._config && !isDeepStrictEqual(value, prev)) { this._config.emit("fieldChanged", this, name, prev); } } diff --git a/packages/lib/is_deep_strict_equal.js b/packages/lib/is_deep_strict_equal.js new file mode 100644 index 00000000..2a66f443 --- /dev/null +++ b/packages/lib/is_deep_strict_equal.js @@ -0,0 +1,7 @@ +"use strict"; +// eslint-disable-next-line no-process-env +if (process.env.APP_ENV === "browser") { + module.exports = require("fast-deep-equal/es6"); +} else { + module.exports = require("util").isDeepStrictEqual; +} diff --git a/packages/lib/link/connectors.js b/packages/lib/link/connectors.js index b18f9844..d3f3fe1f 100644 --- a/packages/lib/link/connectors.js +++ b/packages/lib/link/connectors.js @@ -1,7 +1,7 @@ // Connection adapters for Links "use strict"; const events = require("events"); -const WebSocket = require("ws"); +const WebSocket = require("isomorphic-ws"); const schema = require("@clusterio/lib/schema"); const errors = require("@clusterio/lib/errors"); @@ -236,11 +236,17 @@ class WebSocketClientConnector extends WebSocketBaseConnector { // Open WebSocket to master console.log(`SOCKET | connecting to ${url}`); - this._socket = new WebSocket(url, { - // For now we do not verify TLS certificates since the default setup is - // to create a self-signed certificate. - rejectUnauthorized: false, - }); + // eslint-disable-next-line no-process-env + if (process.env.APP_ENV === "browser") { + this._socket = new WebSocket(url); + + } else { + this._socket = new WebSocket(url, { + // For now we do not verify TLS certificates since the default setup is + // to create a self-signed certificate. + rejectUnauthorized: false, + }); + } this._attachSocketHandlers(); } @@ -277,11 +283,11 @@ class WebSocketClientConnector extends WebSocketBaseConnector { } _attachSocketHandlers() { - this._socket.on("close", (code, reason) => { - console.log(`SOCKET | Close (code: ${code}, reason: ${reason})`); + this._socket.onclose = event => { + console.log(`SOCKET | Close (code: ${event.code}, reason: ${event.reason})`); // Authentication failed - if (code === 4003) { - this.emit("error", new errors.AuthenticationFailed(reason)); + if (event.code === 4003) { + this.emit("error", new errors.AuthenticationFailed(event.reason)); this._state = "closing"; } @@ -303,26 +309,20 @@ class WebSocketClientConnector extends WebSocketBaseConnector { } this.stopHeartbeat(); - }); + }; - this._socket.on("error", err => { + this._socket.onerror = event => { // It's assumed that close is always called by ws - console.error("SOCKET | Error:", err); - }); + console.error("SOCKET | Error:", event); + }; - this._socket.on("open", () => { + this._socket.onopen = () => { console.log("SOCKET | Open"); - }); - this._socket.on("ping", data => { - console.log(`SOCKET | Ping (data: ${data}`); - }); - this._socket.on("pong", data => { - console.log(`SOCKET | Pong (data: ${data}`); - }); + }; // Handle messages - this._socket.on("message", data => { - let message = JSON.parse(data); + this._socket.onmessage = event => { + let message = JSON.parse(event.data); if (this._state === "handshake") { this._processHandshake(message); @@ -341,7 +341,7 @@ class WebSocketClientConnector extends WebSocketBaseConnector { } else { throw new Error(`Received message in unexpected state ${this._state}`); } - }); + }; } _processHandshake(message) { diff --git a/packages/lib/package.json b/packages/lib/package.json index 6936c27c..290ead6f 100644 --- a/packages/lib/package.json +++ b/packages/lib/package.json @@ -13,6 +13,7 @@ "dependencies": { "fs-extra": "^8.1.0", "ini": "^1.3.5", + "isomorphic-ws": "^4.0.1", "jimp": "^0.12.1", "jsonwebtoken": "^8.2.1", "jszip": "^3.2.2", diff --git a/test/mock.js b/test/mock.js index 03e851f9..f24f8708 100644 --- a/test/mock.js +++ b/test/mock.js @@ -18,6 +18,23 @@ class MockSocket { this.events.set(event, fn); } + /* eslint-disable accessor-pairs */ + set onclose(fn) { + this.on("close", (code, reason) => fn({ code, reason })); + } + + set onerror(fn) { + this.on("error", fn); + } + + set onopen(fn) { + this.on("open", fn); + } + + set onmessage(fn) { + this.on("message", (data) => fn({ data })); + } + terminate() { this.terminateCalled = true; } From 2382f4bbdc9432b969426dcc88d96e619d3ccaa7 Mon Sep 17 00:00:00 2001 From: Danielv123 Date: Fri, 25 Sep 2020 22:14:57 +0200 Subject: [PATCH 03/12] Import web interface from clusterio/clusterioWeb Import the source files in use for the web interface, excluding the copied and modified lib/link files. --- packages/master/web/components/data-table.jsx | 293 ++++++++++++ packages/master/web/index.css | 23 + packages/master/web/index.js | 29 ++ packages/master/web/layout/index.jsx | 239 ++++++++++ packages/master/web/pages/dashboard.jsx | 10 + .../master/web/pages/instances/instance.jsx | 436 ++++++++++++++++++ .../web/pages/instances/instancesTable.jsx | 46 ++ .../pages/permissions/permissionsTable.jsx | 30 ++ packages/master/web/pages/roles/role.jsx | 111 +++++ .../master/web/pages/roles/rolesTable.jsx | 43 ++ .../master/web/pages/settings/settings.jsx | 81 ++++ .../master/web/pages/slaves/slavesTable.jsx | 30 ++ packages/master/web/pages/users/user.jsx | 101 ++++ .../master/web/pages/users/usersTable.jsx | 40 ++ packages/master/web/util/notify.jsx | 15 + packages/master/web/util/websocket.jsx | 112 +++++ packages/master/web/util/wslink.jsx | 156 +++++++ 17 files changed, 1795 insertions(+) create mode 100644 packages/master/web/components/data-table.jsx create mode 100644 packages/master/web/index.css create mode 100644 packages/master/web/index.js create mode 100644 packages/master/web/layout/index.jsx create mode 100644 packages/master/web/pages/dashboard.jsx create mode 100644 packages/master/web/pages/instances/instance.jsx create mode 100644 packages/master/web/pages/instances/instancesTable.jsx create mode 100644 packages/master/web/pages/permissions/permissionsTable.jsx create mode 100644 packages/master/web/pages/roles/role.jsx create mode 100644 packages/master/web/pages/roles/rolesTable.jsx create mode 100644 packages/master/web/pages/settings/settings.jsx create mode 100644 packages/master/web/pages/slaves/slavesTable.jsx create mode 100644 packages/master/web/pages/users/user.jsx create mode 100644 packages/master/web/pages/users/usersTable.jsx create mode 100644 packages/master/web/util/notify.jsx create mode 100644 packages/master/web/util/websocket.jsx create mode 100644 packages/master/web/util/wslink.jsx diff --git a/packages/master/web/components/data-table.jsx b/packages/master/web/components/data-table.jsx new file mode 100644 index 00000000..19958ef4 --- /dev/null +++ b/packages/master/web/components/data-table.jsx @@ -0,0 +1,293 @@ +import React, { Component } from "react"; +import { + Collapse, Row, Col, Modal, Table, + Form, + Input, + Button, + Radio, + Select, + Cascader, + DatePicker, + InputNumber, + TreeSelect, + Switch, + Popover +} from "antd"; +import notify from "../util/notify"; +import { PlusOutlined, DeleteOutlined } from "@ant-design/icons"; + +const { Panel } = Collapse; + +/** + * Display data in table. Allows for editing data by clicking rows in the table. + * Basic usage: + * + * DataFunction - String, corresponds to export from util/wslink. Same as ws message name. + * columns - Array of objects, optional, same as . Note the lowercase c + * Editable - Boolean - Allow editing + * AddRecord - Boolean - Allow adding new records + * CustomDataFilterFunction - function(tableData) - Filter tabledata and return results + * RecordIdField - String - By default we assume the column "Id" is a unique identifier for a record. If that isn't the case, supply the column name here + */ +class DataTable extends Component { + constructor(props) { + super(props); + if (!this.props.DataFunction) throw new Error("DataFunction not defined") + this.state = { + pagination: { + pageSize: 100, + current: 1 + }, + filters: this.props.Filters, + sorter: {}, + tableData: [], + showEditModal: false, + record: {}, + } + } + componentDidMount() { + this.getData() + } + getData = async (pagination, filters, sorter) => { + /* + pagination = { + pageSize: 10, // items per page + current: 1, // page number + total: 123, // Total amount of items + } + filters = { + ReportId: 123 + } + sorter = {} + */ + pagination = pagination || this.state.pagination + filters = filters || this.state.filters + sorter = sorter || this.state.sorter + // console.log(pagination, filters, sorter) + + let data = await this.props.DataFunction() + // await fetchApi(this.state.dataUrl, "post", { + // database: this.props.Database, + // table: this.props.Table, + // dataSource: this.props.DataSource, + // pagination: this.props.RecordCount? {...pagination, pageSize: this.props.RecordCount, current: 1}:pagination, + // filters, + // sorter, + // recordIdField: this.props.RecordIdField || "Id", // Sort by this + // }) + console.log(data) + data = data || {} + this.setState({ + tableData: this.props.CustomDataFilterFunction ? this.props.CustomDataFilterFunction(data) : data, + pagination: { ...pagination, ...data.pagination }, + sorter, + filters, + }) + } + showEditModal = (record, index) => { + if (!this.state.showEditModal) + this.setState({ + record: record, + showEditModal: true, + }) + } + hideEditModal = () => { + this.setState({ + showEditModal: false, + inserting: false, + record: {} + }) + } + onEditFinish = async values => { + console.log("Finished editing", values) + + if (this.state.inserting) { // Create new record + var status = {} + await this.props.AddRecord.insert(values) + } else { // Edit existing record, capable of doing sparse updates + var status = {} + await this.props.Editable.insert(values) + } + this.setState({ + showEditModal: false, + inserting: false, + record: {}, + }) + // Force refresh of data + this.getData() + } + deleteRecord = async record => { + delete record.key + // Delete "null" values as they seem to cause deletes to fail silently when the value is null and field type is float + for (let key in record) { + if (record[key] === null) delete record[key] + } + var status = {} + // await fetchApi(`/api/${this.props.Server}/tableData/record`, "delete", { + // database: this.props.Database, + // table: this.props.Table, + // dataSource: this.props.DataSource, + // record, + // }, undefined, true) + + console.log("Deleted record", status) + + if (status.ok) notify("success", status.msg, "success") + if (!status.ok) notify("error", status.msg, "error") + + // Force refresh of data + this.getData() + } + render() { + let tableProps = { + ...this.props.TableProps || {}, + onRow: (record, rowIndex) => { + /* + To allow for extending functionality, we take a TableProps argument from props and pass it through to the Table component. + Since we are also using onRow internaly here, we handle the externally provided events ourselves by passing along the event + object. This way the end user isn't affected by our event handlers. + */ + let externalOnRow = { + ...this.props.TableProps?.onRow?.(record, rowIndex), + } + return { + onClick: event => { + if (event.target.type !== "button") { + console.log("onRow", record, rowIndex) + if (this.props.Editable) this.showEditModal(record, rowIndex) + if (externalOnRow.onClick) externalOnRow.onClick(event) + } + }, + onDoubleClick: event => { + if (externalOnRow.onDoubleClick) externalOnRow.onDoubleClick(event) + }, + onContextMenu: event => { + if (externalOnRow.onContextMenu) externalOnRow.onContextMenu(event) + }, + onMouseEnter: event => { + if (externalOnRow.onMouseEnter) externalOnRow.onMouseEnter(event) + }, + onMouseLeave: event => { + if (externalOnRow.onMouseLeave) externalOnRow.onMouseLeave(event) + }, + } + } + } + let columns = this.props.columns || this.inferColumns(this.state.tableData) + if (this.props.DeleteRecord && !columns.find(x => x.dataIndex === "notInUse")) columns.push({ + // Add delete button on the right + dataIndex: "notInUse", + title: "", + render: (text, record) => { + this.deleteRecord(record) + }} + > + Slett permanent + + } + trigger="click" + > + + + }) + + return <> + + + +
{ + return { + ...x, // Add a 4th parameter to the stock render function with all of our table data + render: x.render ? (...originalParams) => x.render(...originalParams, this.state.tableData) : undefined + } + })} + dataSource={this.state.tableData} + pagination={this.state.pagination.total > 10 ? this.state.pagination : false} + onChange={this.getData} + /> + {this.props.AddRecord && } + + {this.state.inserting ? "Legg til" : "Rediger"} + } + > + {this.state.showEditModal &&
+ { + + ( + (this.state.inserting && this.props.AddRecord?.fields) // Use externally supplied form input fields + || this.props.columns?.filter(x => x.dataIndex !== "notInUse") // Generate input fields from external columns + || this.inferColumns(this.state.tableData)).map(col => { // Generate input fields from autogenerated columns (only works with existing data) + console.log(this.state.record) + return + {col.renderEdit?.(this.state.record[col.dataIndex], this.state.record, undefined /* Non spec compliant, is supposed to be index of record */, this.state.tableData) || } + + }) + } + + + + } +
+ + + } + inferColumns = data => { + // Look at the data and find columns and how to display them. Can be overridden by props.Columns if more customization is needed + let columns = [] + data.forEach(row => { + Object.keys(row).filter(x => x !== "key").forEach(key => { + let existing = columns.find(col => col.key === key) + if (!existing) { + columns.push({ + key: key, + title: key, + dataIndex: key, + }) + } + }) + }) + return columns + } +} + +export default DataTable; diff --git a/packages/master/web/index.css b/packages/master/web/index.css new file mode 100644 index 00000000..ef430c91 --- /dev/null +++ b/packages/master/web/index.css @@ -0,0 +1,23 @@ +body { + margin: 0; + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', + 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', + sans-serif; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +code { + font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', + monospace; +} + + +[data-theme="compact"] p, p { + margin: 0; +} + +.row-links{ + cursor: pointer; +} + diff --git a/packages/master/web/index.js b/packages/master/web/index.js new file mode 100644 index 00000000..9a1c5b9a --- /dev/null +++ b/packages/master/web/index.js @@ -0,0 +1,29 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import './index.css'; +import Layout from './layout' +import * as serviceWorker from './serviceWorker'; +import { BrowserRouter } from 'react-router-dom'; + +import moment from "moment"; +import locale from "moment/locale/nb"; + +moment.updateLocale("nb", locale); +// ReactDOM.render( +// +// +// , +// document.getElementById('root') +// ); + +ReactDOM.render( + + + , + document.getElementById('root') +) + +// If you want your app to work offline and load faster, you can change +// unregister() to register() below. Note this comes with some pitfalls. +// Learn more about service workers: https://bit.ly/CRA-PWA +serviceWorker.unregister(); diff --git a/packages/master/web/layout/index.jsx b/packages/master/web/layout/index.jsx new file mode 100644 index 00000000..c647b216 --- /dev/null +++ b/packages/master/web/layout/index.jsx @@ -0,0 +1,239 @@ +import { + Layout, + Menu, + Avatar, +} from "antd"; +import 'antd/dist/antd.dark.css'; +import { + UnorderedListOutlined, + UserOutlined, + SettingOutlined, + GoldOutlined, + FileTextOutlined, + ScheduleOutlined, +} from "@ant-design/icons"; + +import { withRouter } from "react-router-dom"; +import { BrowserRouter as Router, Route, Link } from "react-router-dom"; + +import React, { Component } from "react"; +import { Helmet } from "react-helmet"; +import { Dashboard } from "../pages/dashboard"; +import { InstancesTable } from "../pages/instances/instancesTable"; +import { SlavesTable } from "../pages/slaves/slavesTable" +import { UsersTable } from "../pages/users/usersTable"; +import { RolesTable } from "../pages/roles/rolesTable"; +import { PermissionsTable } from "../pages/permissions/permissionsTable"; +import { InstanceView } from "../pages/instances/instance"; +import { UserView } from "../pages/users/user"; +import { RoleView } from "../pages/roles/role"; +import { Settings } from "../pages/settings/settings"; + +const { Content, Footer, Sider } = Layout; +const { SubMenu } = Menu; + +class SiteLayout extends Component { + + constructor(props) { + super(props); + const { location } = props; + + // this.history = useHistory(); + + this.onCollapse = this.onCollapse.bind(this); + + this.state = { + collapsed: false, + setcollapsed: false, + tags: [], + setTags: [], + location, + siteSettings: {}, + factoryModel: [] + }; + } + + onCollapse() { + this.setState({ collapsed: !this.state.collapsed }) + } + + titleCase(text) { + return text.substring(0, 1).toUpperCase() + text.substring(1); + } + + replaceParametersInUrl({ endpoint, params }) { + let path = endpoint; + console.log("endpoint", params) + Object.keys(params).forEach(key => { + path = path.replace(":" + key, params[key]) + }) + + return path; + } + + + render() { + return ( + + + + + Clusterio 2.0 + + + {document.location.search !== "?hideExtras" ? ( + +

+
+ {" "} + {this.state.collapsed ? ( + + ) : ( + + )} +
+

+

+ + { + let x = this.state.location.pathname.split("/"); + x.shift(); + return x; + })()} + mode="inline" + > + + Slaves + + + + Instances + + + + Users + + + + Roles + + + + Permissions + + + + Settings + + + +
+ ) : ( + "" + )} + + + + + + + + + + + + + + + +
+ Clusterio 2.0 web interface https://github.com/clusterio +
+
+
+
+ ); + } +} + +export default withRouter(SiteLayout); diff --git a/packages/master/web/pages/dashboard.jsx b/packages/master/web/pages/dashboard.jsx new file mode 100644 index 00000000..059a6d69 --- /dev/null +++ b/packages/master/web/pages/dashboard.jsx @@ -0,0 +1,10 @@ +import React, {Component} from "react" + +export class Dashboard extends Component { + constructor(props){ + super(props) + } + render(){ + return

Dashboard

+ } +} \ No newline at end of file diff --git a/packages/master/web/pages/instances/instance.jsx b/packages/master/web/pages/instances/instance.jsx new file mode 100644 index 00000000..2235deec --- /dev/null +++ b/packages/master/web/pages/instances/instance.jsx @@ -0,0 +1,436 @@ +import React, { Component } from "react" +import { Card, Table, Button, List, Popover, Select, Divider, Input, Form, Col, Row, Checkbox, Space } from "antd" +import { + listSlaves, + listInstances, + startInstance, + stopInstance, + setInstanceOutputSubscriptions, + deleteInstance, + assignInstance, + createSave, + getInstanceConfig, + setInstanceConfigField, + sendRcon, +} from "../../util/wslink" +import DataTable from "../../components/data-table" +import notify from "../../util/notify" +import { DeleteOutlined, EditOutlined, PlusOutlined } from "@ant-design/icons" + +const { Option } = Select + +export class InstanceView extends Component { + constructor(props) { + super(props) + this.state = { + instance: {}, + slaves: [], + logLines: [{ message: "Logviewer. Follows the latest logs if you scroll to the bottom. Does not store logs past the lifetime of this tab" }], + } + } + messagesEndRef = React.createRef() + navigate(url) { + this.props.history.push(url); + } + async componentDidMount() { + let id = this.props.match.params.id + + await this.getData() + + await setInstanceOutputSubscriptions({ + instance_id: Number(id), + }) + window.instanceOutputEventHandler = ({ instance_id, output }) => { + if (instance_id === Number(id)) { + this.setState({ + logLines: [...this.state.logLines, output], + }) + } + // Automatically scroll to bottom on new line. + // this.messagesEndRef.current.scrollIntoView({ behavior: 'smooth' }) + } + } + getData = async () => { + let id = this.props.match.params.id + + let instances = await listInstances() + let slaves = await listSlaves() + + this.setState({ + instance: instances.find(x => x.id === Number(id)), + slaves, + }) + + let config = await getInstanceConfig({ instance_id: Number(id) }) + console.log(config) + this.setState({ + config + }) + } + start = async () => { + this.setState({ + starting: true, + }) + try { + await startInstance({ + instance_id: this.state.instance.id, + save: null, + }) + } catch (e) { + notify("Error starting instance", "error", e.message) + return this.setState({ + starting: false, + }) + } + notify("Instance started") + this.setState({ + starting: false, + }) + this.getData() + } + stop = async () => { + this.setState({ + stopping: true, + }) + try { + await stopInstance({ + instance_id: this.state.instance.id, + }) + } catch (e) { + notify("Error stopping instance", "error", e.message) + return this.setState({ + stopping: false, + }) + } + notify("Instance stopped") + this.setState({ + stopping: false, + }) + this.getData() + } + createSave = async () => { + this.setState({ + creatingSave: true, + }) + try { + await createSave({ + instance_id: this.state.instance.id, + }) + } catch (e) { + notify("Error creating save", "error", e.message) + return this.setState({ + creatingSave: false, + }) + } + notify("Save created", "success") + this.setState({ + creatingSave: false, + }) + } + onConfigEditFinish = async values => { + console.log("Completed config edit with", values) + for (let k in values) { + if (values[k] !== this.getInstanceConfigAsKvObject(this.state.config)[k]) { + let value = values[k] + if (typeof value === "boolean") value = value.toString() + console.log("Setting", k, value) + await setInstanceConfigField({ + instance_id: this.state.instance.id, + field: k, + value: value, + }) + } + } + notify("Set configuration fields", "success") + this.setState({ + editingConfig: false + }) + this.getData() + } + render() { + console.log(this.state) + let { instance, slaves } = this.state + return +

{instance.name}

+

ID: {instance.id}

+

Slave: {slaves?.find(x => x.id === instance.assigned_slave)?.name}

+ {instance.status !== "running" && } + {instance.status !== "stopped" && } + {instance.status !== "running" && } + { + let result = await assignInstance({ instance_id: instance.id, slave_id: newSlaveId }) + notify("Assigned to slave", "success") + this.getData() + }} + > + {this.state.slaves.map(slave => )} + + } + trigger="click" + type={instance.status === "unassigned" ? "primary" : "default"} + > + + + { + await deleteInstance({ instance_id: instance.id }); + notify("Deleted instance " + instance.id, "success") + this.navigate("/instances") + }} + > + Delete this instance permanently + + } + trigger="click" + > + + + +
+ {this.state.logLines.map(item =>

{item.time} {item.level} {item.file}: {item.message}

)} +
+
+ {/* rcon input field */} +
{ + await sendRcon({ instance_id: instance.id, command: values.command }) + }} + > + + + + + {this.state.config && this.renderConfig(this.state.config)} +
+ } + getInstanceConfigAsKvObject(config) { + let object = {} + for (let group of config.serialized_config.groups) { + for (let fieldName in group.fields) { + object[group.name + "." + fieldName] = group.fields[fieldName] + } + } + return object + } + renderConfig(config) { + const layout = { + labelCol: { + span: 6, + }, + wrapperCol: { + span: 14, + }, + }; + const tailLayout = { + wrapperCol: { + offset: 6, + span: 14, + }, + }; + return +
+ {this.state.editingConfig ? + + + + : + + } + + {config && config.serialized_config.groups.map(group => <> +
+ {group.name} + {/* {Object.keys(group.fields).map(field => <> + {field}: + {JSON.stringify(group.fields[field])} +
+ )} */} + {console.log(group)} + {Object.keys(group.fields).map(field => )} + + )} + + + + } +} + +function renderDisplayField(value) { + if (typeof value === "object") { + return JSON.stringify(value) + } + if (typeof value === "boolean") { + return + } + return value.toString() +} +function renderFormField(value) { + if (typeof value === "object") { + return + } + if (typeof value === "boolean") { + return + } + return +} + +class ObjectInput extends Component { + constructor(props) { + super(props) + console.log(this.props) + /* + value: { + auto_pause: false, + tags: ["clusterio"] + }, + id: "factorio.settings", + onChange: f() + */ + this.state = {} + } + onChange(e, key) { + if (e.target.type === "checkbox") { + // if (e.target.checked !== undefined) { + // Its a checkbox, set value to true/false + let value = { ...this.props.value } + value[key] = e.target.checked || false + this.props.onChange(value) + } else if (e.target.type === "text") { + // } else if (e.target.value !== undefined) { + // its probably a text input + let value = { ...this.props.value } + value[key] = e.target.value || "" + this.props.onChange(value) + } + } + render() { + let { value } = this.props + let ret = [] + for (let key in value) { + if (typeof value[key] === "boolean") { + ret.push( this.onChange(e, key)} + > + {key} + + ) + } else if (typeof value[key] === "string") { + ret.push(
{key} this.onChange(e, key)} + />
+ ) + } + } + ret.push( + this.setState({ newInput: e.target.value })} /> + + } + trigger="click" + visible={this.state.addPopoverVisible} + handleVisibleChange={visible => this.setState({ addPopoverVisible: visible })} + > + + ) + return {ret} + } +} +class ConfigFormItem extends Component { + constructor(props) { + super(props) + } + render() { + let { field, group, editingConfig } = this.props + return + {editingConfig ? + renderFormField(group.fields[field]) + : + renderDisplayField(group.fields[field]) + } + + } +} diff --git a/packages/master/web/pages/instances/instancesTable.jsx b/packages/master/web/pages/instances/instancesTable.jsx new file mode 100644 index 00000000..a839e1c2 --- /dev/null +++ b/packages/master/web/pages/instances/instancesTable.jsx @@ -0,0 +1,46 @@ +import React, { Component } from "react" +import { Card, Table } from "antd" +import { listSlaves, listInstances, createInstance } from "../../util/wslink" +import DataTable from "../../components/data-table" +const config = require("../../lib/config") + +export class InstancesTable extends Component { + constructor(props) { + super(props) + } + navigate(url) { + this.props.history.push(url); + } + render() { + return +

Instances

+ { + let instanceConfig = new config.InstanceConfig(); + await instanceConfig.init(); + console.log("Base config", instanceConfig) + instanceConfig.set("instance.name", args.name); + let serialized_config = instanceConfig.serialize(); + let response = await createInstance(serialized_config) + console.log("Created instance", response) + } + }} + DataFunction={listInstances} + TableProps={{ + onRow: (record, rowIndex) => { + return { + onClick: event => { + this.navigate(`/instances/${record.id}/view`) + } + } + } + }} + /> +
+ } +} diff --git a/packages/master/web/pages/permissions/permissionsTable.jsx b/packages/master/web/pages/permissions/permissionsTable.jsx new file mode 100644 index 00000000..17274f58 --- /dev/null +++ b/packages/master/web/pages/permissions/permissionsTable.jsx @@ -0,0 +1,30 @@ +import React, { Component } from "react" +import { Card, Table } from "antd" +import { listSlaves, listInstances, listPermissions } from "../../util/wslink" +import DataTable from "../../components/data-table" + +export class PermissionsTable extends Component { + constructor(props) { + super(props) + } + navigate(url) { + this.props.history.push(url); + } + render() { + return +

Permissions

+ { + return { + onClick: event => { + this.navigate(`/permissions/${record.id}/view`) + } + } + } + }} + /> +
+ } +} diff --git a/packages/master/web/pages/roles/role.jsx b/packages/master/web/pages/roles/role.jsx new file mode 100644 index 00000000..cec23e9b --- /dev/null +++ b/packages/master/web/pages/roles/role.jsx @@ -0,0 +1,111 @@ +import React, { Component } from "react" +import { Card, Table, Button, List, Popover, Select, Divider, Input, Form, Col, Row, Checkbox, Space, Transfer } from "antd" +import { + listSlaves, + listInstances, + startInstance, + stopInstance, + setInstanceOutputSubscriptions, + deleteInstance, + assignInstance, + createSave, + getInstanceConfig, + setInstanceConfigField, + sendRcon, + deleteUser, + listUsers, + listRoles, + setRoles, + listPermissions, + updateRole, +} from "../../util/wslink" +import DataTable from "../../components/data-table" +import notify from "../../util/notify" +import { DeleteOutlined, EditOutlined, PlusOutlined } from "@ant-design/icons" + +const { Option } = Select + +export class RoleView extends Component { + constructor(props) { + super(props) + this.state = { + role: {} + } + } + messagesEndRef = React.createRef() + navigate(url) { + this.props.history.push(url); + } + async componentDidMount() { + await this.getData() + } + getData = async () => { + let id = this.props.match.params.id + + let roles = await listRoles() + let permissions = await listPermissions() + + this.setState({ + role: roles.find(x => x.id === Number(id)), + permissions, + }) + } + handleChange = async targetKeys => { + this.setState({ + role: { + ...this.state.role, + permissions: targetKeys + } + }); + let response = await updateRole({ + ...this.state.role, + permissions: targetKeys, + }) + console.log("Updated user roles", response) + }; + render() { + console.log(this.state) + let { role, permissions } = this.state + return + { + await deleteUser({ role: role.name }) + notify("Deleted role " + role.name, "success") + this.navigate("/roles") + }} + > + Delete this role permanently + + } + trigger="click" + > + + +

{role.name}

+

Assign roles

+ + option.name.toLowerCase().indexOf(inputValue.toLowerCase()) > -1} + targetKeys={role.permissions} + onChange={this.handleChange} + render={item => item.name} + /> +
+ } +} diff --git a/packages/master/web/pages/roles/rolesTable.jsx b/packages/master/web/pages/roles/rolesTable.jsx new file mode 100644 index 00000000..0e796e97 --- /dev/null +++ b/packages/master/web/pages/roles/rolesTable.jsx @@ -0,0 +1,43 @@ +import React, { Component } from "react" +import { Card, Table } from "antd" +import { listSlaves, listInstances, listRoles, createRole } from "../../util/wslink" +import DataTable from "../../components/data-table" + +export class RolesTable extends Component { + constructor(props) { + super(props) + } + navigate(url) { + this.props.history.push(url); + } + render() { + return +

Roles

+ { + let response = await createRole({name: args.name, description: args.description}) + console.log("Created role",response) + } + }} + DataFunction={listRoles} + TableProps={{ + onRow: (record, rowIndex) => { + return { + onClick: event => { + this.navigate(`/roles/${record.id}/view`) + } + } + } + }} + /> +
+ } +} diff --git a/packages/master/web/pages/settings/settings.jsx b/packages/master/web/pages/settings/settings.jsx new file mode 100644 index 00000000..215c3f1a --- /dev/null +++ b/packages/master/web/pages/settings/settings.jsx @@ -0,0 +1,81 @@ +import React, { Component } from "react" +import { Card, Button, Select, Input, Form } from "antd" + +const layout = { + labelCol: { + span: 4, + }, + wrapperCol: { + span: 16, + }, +}; +const tailLayout = { + wrapperCol: { + offset: 4, + span: 16, + }, +}; + +export class Settings extends Component { + constructor(props) { + super(props) + this.state = { + role: {} + } + } + navigate(url) { + this.props.history.push(url); + } + render() { + console.log(this.state) + return +

Web interface settings

+
{ + console.log("Saving settings",values) + for(let key of Object.keys(values)){ + localStorage.setItem(key, values[key].replace("https://", "wss://").replace("http://", "ws://")) + } + // Force refresh to apply changes + document.location = document.location + }} + > + + + + + + + + + + +
+ } +} diff --git a/packages/master/web/pages/slaves/slavesTable.jsx b/packages/master/web/pages/slaves/slavesTable.jsx new file mode 100644 index 00000000..00c0b247 --- /dev/null +++ b/packages/master/web/pages/slaves/slavesTable.jsx @@ -0,0 +1,30 @@ +import React, { Component } from "react" +import { Card, Table } from "antd" +import { listSlaves, listInstances } from "../../util/wslink" +import DataTable from "../../components/data-table" + +export class SlavesTable extends Component { + constructor(props) { + super(props) + } + navigate(url) { + this.props.history.push(url); + } + render() { + return +

Slaves

+ { + return { + onClick: event => { + this.navigate(`/slaves/${record.id}/view`) + } + } + } + }} + /> +
+ } +} diff --git a/packages/master/web/pages/users/user.jsx b/packages/master/web/pages/users/user.jsx new file mode 100644 index 00000000..3c33cba6 --- /dev/null +++ b/packages/master/web/pages/users/user.jsx @@ -0,0 +1,101 @@ +import React, { Component } from "react" +import { Card, Table, Button, List, Popover, Select, Divider, Input, Form, Col, Row, Checkbox, Space, Transfer } from "antd" +import { + listSlaves, + listInstances, + startInstance, + stopInstance, + setInstanceOutputSubscriptions, + deleteInstance, + assignInstance, + createSave, + getInstanceConfig, + setInstanceConfigField, + sendRcon, + deleteUser, + listUsers, + listRoles, + setRoles, +} from "../../util/wslink" +import DataTable from "../../components/data-table" +import notify from "../../util/notify" +import { DeleteOutlined, EditOutlined, PlusOutlined } from "@ant-design/icons" + +const { Option } = Select + +export class UserView extends Component { + constructor(props) { + super(props) + this.state = { + user: {} + } + } + messagesEndRef = React.createRef() + navigate(url) { + this.props.history.push(url); + } + async componentDidMount() { + await this.getData() + } + getData = async () => { + let name = this.props.match.params.id + + let users = await listUsers() + let roles = await listRoles() + + this.setState({ + user: users.find(x => x.name === name), + roles, + }) + } + handleChange = async targetKeys => { + this.setState({ + user: { + ...this.state.user, + roles: targetKeys + } + }); + let response = await setRoles({ + name: this.state.user.name, + roles: targetKeys, + }) + console.log("Updated user roles",response) + }; + render() { + console.log(this.state) + let { user, roles } = this.state + return +

{user.name}

+

Assign roles

+ option.name.toLowerCase().indexOf(inputValue.toLowerCase()) > -1} + targetKeys={user.roles} + onChange={this.handleChange} + render={item => item.name} + /> + { + await deleteUser({ name: user.name }) + notify("Deleted user " + user.name, "success") + this.navigate("/users") + }} + > + Delete this user from the cluster + + } + trigger="click" + > + + +
+ } +} diff --git a/packages/master/web/pages/users/usersTable.jsx b/packages/master/web/pages/users/usersTable.jsx new file mode 100644 index 00000000..572e98cb --- /dev/null +++ b/packages/master/web/pages/users/usersTable.jsx @@ -0,0 +1,40 @@ +import React, { Component } from "react" +import { Card, Table } from "antd" +import { listSlaves, listInstances, listUsers, createUser } from "../../util/wslink" +import DataTable from "../../components/data-table" + +export class UsersTable extends Component { + constructor(props) { + super(props) + } + navigate(url) { + this.props.history.push(url); + } + render() { + return +

Slaves

+ { + let response = await createUser({name: args.name}) + console.log("Created user",response) + } + }} + DataFunction={listUsers} + TableProps={{ + onRow: (record, rowIndex) => { + return { + onClick: event => { + this.navigate(`/users/${record.name}/view`) + } + } + } + }} + /> +
+ } +} diff --git a/packages/master/web/util/notify.jsx b/packages/master/web/util/notify.jsx new file mode 100644 index 00000000..8df6b7c5 --- /dev/null +++ b/packages/master/web/util/notify.jsx @@ -0,0 +1,15 @@ +import { notification } from "antd"; + +/** + * + * @param {string} message + * @param {("info"|"error"|"success"|"warning"|"warn")} type + */ +export default function notify(message, type = "info", description) { + notification[type]({ + message: typeof message === "string" ? message : "ERROR: See console", + description, + placement: "bottomRight", + }); + if (typeof message !== "string") console.error(message) +} diff --git a/packages/master/web/util/websocket.jsx b/packages/master/web/util/websocket.jsx new file mode 100644 index 00000000..7fc47fcc --- /dev/null +++ b/packages/master/web/util/websocket.jsx @@ -0,0 +1,112 @@ +const link = require("./../lib/link"); +const plugin = require("./../lib/plugin"); +const errors = require("./../lib/errors"); +const chalk = require("chalk"); +/** + * Format a parsed Factorio output message with colors + * + * Formats a parsed Factorio output from lib/factorio into a readable + * colorized output using terminal escape codes that can be printed. + * + * @param {Object} output - Factorio server output. + * @returns {string} terminal colorized message. + * @private + */ +function formatOutputColored(output) { + let time = ""; + if (output.format === "seconds") { + time = chalk.yellow(output.time.padStart(8)) + " "; + } else if (output.format === "date") { + time = chalk.yellow(output.time) + " "; + } + + let info = ""; + if (output.type === "log") { + let level = output.level; + if (level === "Info") { + level = chalk.bold.blueBright(level); + } else if (output.level === "Warning") { + level = chalk.bold.yellowBright(level); + } else if (output.level === "Error") { + level = chalk.bold.redBright(level); + } + + info = level + " " + chalk.gray(output.file) + ": "; + + } else if (output.type === "action") { + info = "[" + chalk.yellow(output.action) + "] "; + } + + return time + info + output.message; +} +/** + * Connector for control connection to master server + * @private + */ +class ControlConnector extends link.WebSocketClientConnector { + constructor(url, reconnectDelay, token) { + super(url, reconnectDelay); + this._token = token; + } + + register() { + console.log("SOCKET | registering control"); + this.sendHandshake("register_control", { + token: this._token, + agent: "clusterctl", + version: "2.0.0-alpha", + }); + } +} + +/** + * Handles running the control + * + * Connects to the master server over WebSocket and sends commands to it. + * @static + */ +class Control extends link.Link { + + constructor(connector, controlPlugins) { + super("control", "master", connector); + link.attachAllMessages(this); + + /** + * Mapping of plugin names to their instance for loaded plugins. + * @type {Map} + */ + this.plugins = controlPlugins; + for (let controlPlugin of controlPlugins.values()) { + plugin.attachPluginMessages(this, controlPlugin.info, controlPlugin); + } + } + + async instanceOutputEventHandler(message) { + let { instance_id, output } = message.data; + console.log(formatOutputColored(output)); + window.instanceOutputEventHandler && window.instanceOutputEventHandler({instance_id, output}) + } + + async debugWsMessageEventHandler(message) { + console.log("WS", message.data.direction, message.data.content); + } + + async shutdown() { + this.connector.setTimeout(30); + + try { + await link.messages.prepareDisconnect.send(this); + } catch (err) { + if (!(err instanceof errors.SessionLost)) { + throw err; + } + } + + await this.connector.close(1001, "Control Quit"); + } +} + +export { + ControlConnector, + Control +} diff --git a/packages/master/web/util/wslink.jsx b/packages/master/web/util/wslink.jsx new file mode 100644 index 00000000..4ed1e2e2 --- /dev/null +++ b/packages/master/web/util/wslink.jsx @@ -0,0 +1,156 @@ +import { Control, ControlConnector } from "./../util/websocket" +import * as errors from "./../lib/errors" +import * as link from "./../lib/link" + +let control, controlConnector + +// Create WS connection to master. Used by all components through the interface exported here. +(async () => { + controlConnector = new ControlConnector( + localStorage.getItem("master_url"), + 10, // Reconnect delay + localStorage.getItem("master_token"), + ); + control = new Control(controlConnector, []); + try { + await controlConnector.connect(); + } catch (err) { + console.log(err) + if (err instanceof errors.AuthenticationFailed) { + throw new errors.StartupError(err.message); + } + throw err; + } + let response = await link.messages.listSlaves.send(control); + + // console.log(response.list); + console.log(link.messages) + let data = {} + // for (let key in { + // ...link.messages, + // }) { + // if (link.messages[key].constructor.name === "Request") { + // let resp, error + // try{ + // resp = await link.messages[key].send(control) + // } catch(e){ + // error = e + // } + // data[key] = resp + // data[key].error = error + // } + // } + // console.log(data) +})() + +let listSlaves = createListFunction("listSlaves") +let listInstances = createListFunction("listInstances") +let listUsers = createListFunction("listUsers", "name") +let listRoles = createListFunction("listRoles") +let listPermissions = createListFunction("listPermissions", "name") + +let startInstance = async function ({ instance_id, save = null }) { + return await link.messages.startInstance.send(control, { instance_id, save }) +} +let stopInstance = async function ({ instance_id }) { + return await link.messages.stopInstance.send(control, { instance_id }) +} +let createInstance = async function (serialized_config) { + return await link.messages.createInstance.send(control, { serialized_config }); +} +let deleteInstance = async function ({ instance_id }) { + return await link.messages.deleteInstance.send(control, { instance_id }); +} +let assignInstance = async function ({ instance_id, slave_id }) { + return await link.messages.assignInstanceCommand.send(control, { + instance_id, + slave_id, + }); +} +let createSave = async function ({ instance_id }) { + return await link.messages.createSave.send(control, { instance_id }); +} +let getInstanceConfig = async function ({ instance_id }) { + return await link.messages.getInstanceConfig.send(control, { instance_id }); +} +let setInstanceConfigField = async function ({ instance_id, field, value }) { + return await link.messages.setInstanceConfigField.send(control, { + instance_id, + field, + value: typeof value === "object" ? JSON.stringify(value) : value, + }); +} +let setInstanceConfigProp = async function ({ instance_id, field, prop, value }) { + return await link.messages.setInstanceConfigProp.send(control, { + instance_id, + field, + prop, + value, // JSON Object + }); +} +let sendRcon = async function ({ instance_id, command }) { + return await link.messages.sendRcon.send(control, { instance_id, command }) +} +let setInstanceOutputSubscriptions = async function ({ instance_id }) { + return await link.messages.setInstanceOutputSubscriptions.send(control, { instance_ids: [instance_id] }) +} + +let createUser = async function ({ name }) { + return await link.messages.createUser.send(control, { name }) +} +let deleteUser = async function ({ name }) { + return await link.messages.deleteUser.send(control, { name }) +} +let setRoles = async function ({ name, roles }) { + return await link.messages.updateUserRoles.send(control, { + name, + roles, + }) +} + +let createRole = async function ({ name, description, permissions = [] }) { + return await link.messages.createRole.send(control, { name, description, permissions }) +} +let updateRole = async function ({ id, name, description, permissions }) { + return await link.messages.updateRole.send(control, { + id, name, description, permissions + }) +} + +export { + listSlaves, + listInstances, + listUsers, + createUser, + deleteUser, + listRoles, + setRoles, + createRole, + updateRole, + listPermissions, + startInstance, + stopInstance, + createInstance, + deleteInstance, + assignInstance, + createSave, + getInstanceConfig, + setInstanceConfigField, + setInstanceConfigProp, + sendRcon, + setInstanceOutputSubscriptions, +} + +function createListFunction(name, key) { + return async () => { + return (await link.messages[name].send(control)).list.map(addKey(key || "id")); + } +} +function addKey(key) { + return function (el) { + return { + ...el, + key: el[key] + } + } +} From 701ff87bcd0fe8326c36de3960a955692b23d581 Mon Sep 17 00:00:00 2001 From: Hornwitser Date: Fri, 25 Sep 2020 22:22:33 +0200 Subject: [PATCH 04/12] Implement webpack build for web interface Set up webpack for the master server's web interface and fix the issues from the imported interface source files. The .jsx files in package/master/web are bundled together into package/master/static and served by the master server via express. --- .gitignore | 1 - packages/master/.gitignore | 2 + packages/master/master.js | 14 +++- packages/master/package.json | 20 +++++ packages/master/web/components/data-table.jsx | 46 +++++------- packages/master/web/index.css | 2 + packages/master/web/index.html | 12 +++ packages/master/web/index.js | 29 ------- packages/master/web/index.jsx | 13 ++++ packages/master/web/layout/index.jsx | 28 +------ .../master/web/pages/instances/instance.jsx | 29 +++---- .../web/pages/instances/instancesTable.jsx | 4 +- .../pages/permissions/permissionsTable.jsx | 2 +- packages/master/web/pages/roles/role.jsx | 16 ++-- .../master/web/pages/roles/rolesTable.jsx | 2 +- .../master/web/pages/settings/settings.jsx | 2 +- .../master/web/pages/slaves/slavesTable.jsx | 2 +- packages/master/web/pages/users/user.jsx | 23 ++---- .../master/web/pages/users/usersTable.jsx | 2 +- .../pictures/clusterio_icon.png | Bin .../master/{static => web}/pictures/logo.png | Bin .../{static => web}/pictures/unknown-item.png | Bin packages/master/web/util/websocket.jsx | 60 ++++++--------- packages/master/web/util/wslink.jsx | 30 +------- packages/master/webpack.config.js | 71 ++++++++++++++++++ 25 files changed, 219 insertions(+), 191 deletions(-) create mode 100644 packages/master/.gitignore create mode 100644 packages/master/web/index.html delete mode 100644 packages/master/web/index.js create mode 100644 packages/master/web/index.jsx rename packages/master/{static => web}/pictures/clusterio_icon.png (100%) rename packages/master/{static => web}/pictures/logo.png (100%) rename packages/master/{static => web}/pictures/unknown-item.png (100%) create mode 100644 packages/master/webpack.config.js diff --git a/.gitignore b/.gitignore index 57a52e6f..a2891657 100644 --- a/.gitignore +++ b/.gitignore @@ -41,7 +41,6 @@ Factorio* package-lock.json mod_cache.json static/export -packages/master/static/external saves /temp/ diff --git a/packages/master/.gitignore b/packages/master/.gitignore new file mode 100644 index 00000000..4d2280f9 --- /dev/null +++ b/packages/master/.gitignore @@ -0,0 +1,2 @@ +# Webpack output +static diff --git a/packages/master/master.js b/packages/master/master.js index 980e96ac..164b3c53 100755 --- a/packages/master/master.js +++ b/packages/master/master.js @@ -1553,7 +1553,9 @@ async function startServer() { }) .demandCommand(1, "You need to specify a command to run"); }) - .command("run", "Run master server") + .command("run", "Run master server", yargs => { + yargs.option("dev", { hidden: true, type: "boolean", nargs: 0 }); + }) .demandCommand(1, "You need to specify a command to run") .strict() .argv @@ -1634,6 +1636,16 @@ async function startServer() { // If we get here the command was run + if (args.dev) { + console.log("Development mode enabled"); + const webpack = require("webpack"); + const middleware = require("webpack-dev-middleware"); + const webpackConfig = require("./webpack.config"); + + const compiler = webpack(webpackConfig({})); + app.use(middleware(compiler, {})); + } + let secondSigint = false; process.on("SIGINT", () => { if (secondSigint) { diff --git a/packages/master/package.json b/packages/master/package.json index da109f5c..a18ea824 100644 --- a/packages/master/package.json +++ b/packages/master/package.json @@ -6,6 +6,7 @@ "version": "2.0.0-alpha0", "main": "master.js", "scripts": { + "build": "webpack --env.production", "test": "echo \"Error: no test specified\" && exit 1" }, "bin": { @@ -32,5 +33,24 @@ "set-blocking": "^2.0.0", "ws": "^7.2.3", "yargs": "^14.2.0" + }, + "devDependencies": { + "@ant-design/icons": "^4.2.2", + "@babel/core": "^7.11.6", + "@babel/preset-react": "^7.10.4", + "antd": "^4.6.5", + "babel-loader": "^8.1.0", + "clean-webpack-plugin": "^3.0.0", + "css-loader": "^4.3.0", + "fast-deep-equal": "^3.1.3", + "html-webpack-plugin": "^4.5.0", + "null-loader": "^4.0.0", + "react": "^16.13.1", + "react-dom": "^16.13.1", + "react-router-dom": "^5.2.0", + "style-loader": "^1.2.1", + "webpack": "^4.44.2", + "webpack-cli": "^3.3.12", + "webpack-dev-middleware": "^3.7.2" } } diff --git a/packages/master/web/components/data-table.jsx b/packages/master/web/components/data-table.jsx index 19958ef4..7d2a5718 100644 --- a/packages/master/web/components/data-table.jsx +++ b/packages/master/web/components/data-table.jsx @@ -1,20 +1,9 @@ import React, { Component } from "react"; -import { - Collapse, Row, Col, Modal, Table, - Form, - Input, - Button, - Radio, - Select, - Cascader, - DatePicker, - InputNumber, - TreeSelect, - Switch, - Popover -} from "antd"; +import { Collapse, Row, Col, Modal, Table, Form, Input, Button, Popover } from "antd"; +import PlusOutlined from "@ant-design/icons/PlusOutlined" +import DeleteOutlined from "@ant-design/icons/DeleteOutlined"; + import notify from "../util/notify"; -import { PlusOutlined, DeleteOutlined } from "@ant-design/icons"; const { Panel } = Collapse; @@ -45,10 +34,12 @@ class DataTable extends Component { record: {}, } } + componentDidMount() { this.getData() } - getData = async (pagination, filters, sorter) => { + + async getData(pagination, filters, sorter) { /* pagination = { pageSize: 10, // items per page @@ -84,21 +75,22 @@ class DataTable extends Component { filters, }) } - showEditModal = (record, index) => { + + showEditModal(record, index) { if (!this.state.showEditModal) this.setState({ record: record, showEditModal: true, }) } - hideEditModal = () => { + hideEditModal() { this.setState({ showEditModal: false, inserting: false, record: {} }) } - onEditFinish = async values => { + async onEditFinish(values) { console.log("Finished editing", values) if (this.state.inserting) { // Create new record @@ -116,7 +108,7 @@ class DataTable extends Component { // Force refresh of data this.getData() } - deleteRecord = async record => { + async deleteRecord(record) { delete record.key // Delete "null" values as they seem to cause deletes to fail silently when the value is null and field type is float for (let key in record) { @@ -148,7 +140,7 @@ class DataTable extends Component { object. This way the end user isn't affected by our event handlers. */ let externalOnRow = { - ...this.props.TableProps?.onRow?.(record, rowIndex), + ...(this.props.TableProps && this.props.TableProps.onRow && this.props.TableProps.onRow(record, rowIndex)), } return { onClick: event => { @@ -219,7 +211,7 @@ class DataTable extends Component { })} dataSource={this.state.tableData} pagination={this.state.pagination.total > 10 ? this.state.pagination : false} - onChange={this.getData} + onChange={this.getData.bind(this)} /> {this.props.AddRecord && } {instance.status !== "stopped" && } {instance.status !== "running" && } @@ -283,7 +286,7 @@ export class InstanceView extends Component {
{this.state.editingConfig ? diff --git a/packages/master/web/pages/instances/instancesTable.jsx b/packages/master/web/pages/instances/instancesTable.jsx index a839e1c2..21a86e15 100644 --- a/packages/master/web/pages/instances/instancesTable.jsx +++ b/packages/master/web/pages/instances/instancesTable.jsx @@ -1,8 +1,8 @@ import React, { Component } from "react" -import { Card, Table } from "antd" +import { Card } from "antd" import { listSlaves, listInstances, createInstance } from "../../util/wslink" import DataTable from "../../components/data-table" -const config = require("../../lib/config") +const config = require("@clusterio/lib/config") export class InstancesTable extends Component { constructor(props) { diff --git a/packages/master/web/pages/permissions/permissionsTable.jsx b/packages/master/web/pages/permissions/permissionsTable.jsx index 17274f58..eb63f893 100644 --- a/packages/master/web/pages/permissions/permissionsTable.jsx +++ b/packages/master/web/pages/permissions/permissionsTable.jsx @@ -1,5 +1,5 @@ import React, { Component } from "react" -import { Card, Table } from "antd" +import { Card } from "antd" import { listSlaves, listInstances, listPermissions } from "../../util/wslink" import DataTable from "../../components/data-table" diff --git a/packages/master/web/pages/roles/role.jsx b/packages/master/web/pages/roles/role.jsx index cec23e9b..7634e616 100644 --- a/packages/master/web/pages/roles/role.jsx +++ b/packages/master/web/pages/roles/role.jsx @@ -1,5 +1,8 @@ import React, { Component } from "react" -import { Card, Table, Button, List, Popover, Select, Divider, Input, Form, Col, Row, Checkbox, Space, Transfer } from "antd" + +import { Card, Button, Popover, Select, Transfer } from "antd" +import DeleteOutlined from "@ant-design/icons/DeleteOutlined" + import { listSlaves, listInstances, @@ -21,7 +24,6 @@ import { } from "../../util/wslink" import DataTable from "../../components/data-table" import notify from "../../util/notify" -import { DeleteOutlined, EditOutlined, PlusOutlined } from "@ant-design/icons" const { Option } = Select @@ -31,15 +33,15 @@ export class RoleView extends Component { this.state = { role: {} } + this.messagesEndRef = React.createRef() } - messagesEndRef = React.createRef() navigate(url) { this.props.history.push(url); } async componentDidMount() { await this.getData() } - getData = async () => { + async getData() { let id = this.props.match.params.id let roles = await listRoles() @@ -50,7 +52,7 @@ export class RoleView extends Component { permissions, }) } - handleChange = async targetKeys => { + async handleChange(targetKeys) { this.setState({ role: { ...this.state.role, @@ -62,7 +64,7 @@ export class RoleView extends Component { permissions: targetKeys, }) console.log("Updated user roles", response) - }; + } render() { console.log(this.state) let { role, permissions } = this.state @@ -103,7 +105,7 @@ export class RoleView extends Component { showSearch filterOption={(inputValue, option) => option.name.toLowerCase().indexOf(inputValue.toLowerCase()) > -1} targetKeys={role.permissions} - onChange={this.handleChange} + onChange={this.handleChange.bind(this)} render={item => item.name} /> diff --git a/packages/master/web/pages/roles/rolesTable.jsx b/packages/master/web/pages/roles/rolesTable.jsx index 0e796e97..4e0f0f2a 100644 --- a/packages/master/web/pages/roles/rolesTable.jsx +++ b/packages/master/web/pages/roles/rolesTable.jsx @@ -1,5 +1,5 @@ import React, { Component } from "react" -import { Card, Table } from "antd" +import { Card } from "antd" import { listSlaves, listInstances, listRoles, createRole } from "../../util/wslink" import DataTable from "../../components/data-table" diff --git a/packages/master/web/pages/settings/settings.jsx b/packages/master/web/pages/settings/settings.jsx index 215c3f1a..d4fcf35d 100644 --- a/packages/master/web/pages/settings/settings.jsx +++ b/packages/master/web/pages/settings/settings.jsx @@ -1,5 +1,5 @@ import React, { Component } from "react" -import { Card, Button, Select, Input, Form } from "antd" +import { Card, Button, Input, Form } from "antd" const layout = { labelCol: { diff --git a/packages/master/web/pages/slaves/slavesTable.jsx b/packages/master/web/pages/slaves/slavesTable.jsx index 00c0b247..a2744e55 100644 --- a/packages/master/web/pages/slaves/slavesTable.jsx +++ b/packages/master/web/pages/slaves/slavesTable.jsx @@ -1,5 +1,5 @@ import React, { Component } from "react" -import { Card, Table } from "antd" +import { Card } from "antd"; import { listSlaves, listInstances } from "../../util/wslink" import DataTable from "../../components/data-table" diff --git a/packages/master/web/pages/users/user.jsx b/packages/master/web/pages/users/user.jsx index 3c33cba6..819ecec9 100644 --- a/packages/master/web/pages/users/user.jsx +++ b/packages/master/web/pages/users/user.jsx @@ -1,17 +1,6 @@ import React, { Component } from "react" -import { Card, Table, Button, List, Popover, Select, Divider, Input, Form, Col, Row, Checkbox, Space, Transfer } from "antd" +import { Card, Button, Popover, Select, Transfer } from "antd"; import { - listSlaves, - listInstances, - startInstance, - stopInstance, - setInstanceOutputSubscriptions, - deleteInstance, - assignInstance, - createSave, - getInstanceConfig, - setInstanceConfigField, - sendRcon, deleteUser, listUsers, listRoles, @@ -19,7 +8,7 @@ import { } from "../../util/wslink" import DataTable from "../../components/data-table" import notify from "../../util/notify" -import { DeleteOutlined, EditOutlined, PlusOutlined } from "@ant-design/icons" +import DeleteOutlined from "@ant-design/icons/DeleteOutlined" const { Option } = Select @@ -29,15 +18,15 @@ export class UserView extends Component { this.state = { user: {} } + this.messagesEndRef = React.createRef(); } - messagesEndRef = React.createRef() navigate(url) { this.props.history.push(url); } async componentDidMount() { await this.getData() } - getData = async () => { + async getData() { let name = this.props.match.params.id let users = await listUsers() @@ -48,7 +37,7 @@ export class UserView extends Component { roles, }) } - handleChange = async targetKeys => { + async handleChange(targetKeys) { this.setState({ user: { ...this.state.user, @@ -73,7 +62,7 @@ export class UserView extends Component { showSearch filterOption={(inputValue, option) => option.name.toLowerCase().indexOf(inputValue.toLowerCase()) > -1} targetKeys={user.roles} - onChange={this.handleChange} + onChange={this.handleChange.bind(this)} render={item => item.name} /> } - */ + /** + * Mapping of plugin names to their instance for loaded plugins. + * @type {Map} + */ this.plugins = controlPlugins; for (let controlPlugin of controlPlugins.values()) { plugin.attachPluginMessages(this, controlPlugin.info, controlPlugin); @@ -83,7 +74,7 @@ class Control extends link.Link { async instanceOutputEventHandler(message) { let { instance_id, output } = message.data; - console.log(formatOutputColored(output)); + console.log(formatOutput(output)); window.instanceOutputEventHandler && window.instanceOutputEventHandler({instance_id, output}) } @@ -105,8 +96,3 @@ class Control extends link.Link { await this.connector.close(1001, "Control Quit"); } } - -export { - ControlConnector, - Control -} diff --git a/packages/master/web/util/wslink.jsx b/packages/master/web/util/wslink.jsx index 4ed1e2e2..3ff8e297 100644 --- a/packages/master/web/util/wslink.jsx +++ b/packages/master/web/util/wslink.jsx @@ -1,11 +1,13 @@ import { Control, ControlConnector } from "./../util/websocket" -import * as errors from "./../lib/errors" -import * as link from "./../lib/link" +import * as errors from "@clusterio/lib/errors" +import * as link from "@clusterio/lib/link" +import config from "@clusterio/lib/config" let control, controlConnector // Create WS connection to master. Used by all components through the interface exported here. (async () => { + config.finalizeConfigs(); controlConnector = new ControlConnector( localStorage.getItem("master_url"), 10, // Reconnect delay @@ -16,31 +18,7 @@ let control, controlConnector await controlConnector.connect(); } catch (err) { console.log(err) - if (err instanceof errors.AuthenticationFailed) { - throw new errors.StartupError(err.message); - } - throw err; } - let response = await link.messages.listSlaves.send(control); - - // console.log(response.list); - console.log(link.messages) - let data = {} - // for (let key in { - // ...link.messages, - // }) { - // if (link.messages[key].constructor.name === "Request") { - // let resp, error - // try{ - // resp = await link.messages[key].send(control) - // } catch(e){ - // error = e - // } - // data[key] = resp - // data[key].error = error - // } - // } - // console.log(data) })() let listSlaves = createListFunction("listSlaves") diff --git a/packages/master/webpack.config.js b/packages/master/webpack.config.js new file mode 100644 index 00000000..ebd45171 --- /dev/null +++ b/packages/master/webpack.config.js @@ -0,0 +1,71 @@ +"use strict"; +const path = require("path"); +const webpack = require("webpack"); +const HtmlWebpackPlugin = require("html-webpack-plugin"); +const { CleanWebpackPlugin } = require("clean-webpack-plugin"); + +module.exports = (env = {}) => ({ + entry: "./web/index.jsx", + mode: env.production ? "production" : "development", + devtool: env.production ? "source-map" : "eval-source-map", + devServer: { + contentBase: "./static", + }, + output: { + filename: "bundle.js", + path: path.resolve(__dirname, "static"), + }, + plugins: [ + new CleanWebpackPlugin(), + new webpack.DefinePlugin({ + "process.env.APP_ENV": JSON.stringify("browser"), + }), + new HtmlWebpackPlugin({ + template: "web/index.html", + }), + + // Make sure ant-design icons use the ES variant + new webpack.NormalModuleReplacementPlugin( + /@ant-design\/icons\/[A-Z]/, + function(resource) { + resource.request = resource.request.replace(/@ant-design\/icons/, "$&/es/icons"); + } + ), + ], + module: { + rules: [ + { + test: /node_modules.fs-extra/, + use: "null-loader", + }, + { + test: /\.css$/, + use: [ + "style-loader", + { + loader: "css-loader", + options: { + sourceMap: !env.production, + }, + }, + ], + }, + { + test: /\.jsx$/, + exclude: /node_modules/, + use: { + loader: "babel-loader", + options: { + presets: ["@babel/preset-react"], + }, + }, + }, + ], + }, + resolve: { + extensions: [".js", ".json", ".jsx"], + }, + node: { + "crypto": "empty", + }, +}); From f1f9b4d02017b6383129e3fdb77d91bfa6df5831 Mon Sep 17 00:00:00 2001 From: Hornwitser Date: Sun, 27 Sep 2020 02:25:27 +0200 Subject: [PATCH 05/12] Close webpack middleware on shutdown Call the .close method on the webpack-dev-middleware in order to properly shut it down. --- packages/master/master.js | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/packages/master/master.js b/packages/master/master.js index 164b3c53..53ac5d90 100755 --- a/packages/master/master.js +++ b/packages/master/master.js @@ -36,6 +36,7 @@ let masterConfigPath; let stopAcceptingNewSessions = false; let debugEvents = new events.EventEmitter(); let pluginList = {}; +let devMiddleware; // homebrew modules const generateSSLcert = require("./src/generate_ssl_cert"); @@ -371,6 +372,10 @@ async function shutdown() { stopAcceptingNewSessions = true; + if (devMiddleware) { + await new Promise((resolve, reject) => { devMiddleware.close(resolve); }); + } + let disconnectTasks = []; for (let controlConnection of controlConnections) { controlConnection.connector.setTimeout(masterConfig.get("master.connector_shutdown_timeout")); @@ -1636,14 +1641,16 @@ async function startServer() { // If we get here the command was run + // Start webpack development server if enabled if (args.dev) { - console.log("Development mode enabled"); + console.log("Webpack development mode enabled"); const webpack = require("webpack"); - const middleware = require("webpack-dev-middleware"); + const webpackDevMiddleware = require("webpack-dev-middleware"); const webpackConfig = require("./webpack.config"); const compiler = webpack(webpackConfig({})); - app.use(middleware(compiler, {})); + devMiddleware = webpackDevMiddleware(compiler, {}); + app.use(devMiddleware); } let secondSigint = false; From 392a7655c46e0e5c24c7364570a52f7994c9e8ac Mon Sep 17 00:00:00 2001 From: Hornwitser Date: Mon, 28 Sep 2020 02:57:30 +0200 Subject: [PATCH 06/12] Use property for calculating handler name Replace usage of .constructor.name with a separate property to avoid issue with JavaScript terser mangling the class name during minification for the web build. --- packages/lib/link/messages.js | 4 +++- packages/lib/plugin.js | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/lib/link/messages.js b/packages/lib/link/messages.js index fe16e7e4..9329b232 100644 --- a/packages/lib/link/messages.js +++ b/packages/lib/link/messages.js @@ -66,6 +66,7 @@ class Request extends Message { this.links = links; this.permission = permission || null; this.forwardTo = forwardTo; + this.handlerSuffix = "RequestHandler"; this.requestType = type + "_request"; this.responseType = type + "_response"; @@ -681,6 +682,7 @@ class Event extends Message { this.links = links; this.forwardTo = forwardTo; this.broadcastTo = broadcastTo; + this.handlerSuffix = "EventHandler"; if (forwardTo === "instance") { eventProperties = { @@ -956,7 +958,7 @@ messages.playerEvent = new Event({ */ function attachAllMessages(link) { for (let [name, message] of Object.entries(messages)) { - message.attach(link, link[name + message.constructor.name + "Handler"]); + message.attach(link, link[name + message.handlerSuffix]); } } diff --git a/packages/lib/plugin.js b/packages/lib/plugin.js index 58f7a657..659a5ee0 100644 --- a/packages/lib/plugin.js +++ b/packages/lib/plugin.js @@ -433,7 +433,7 @@ function attachPluginMessages(link, pluginInfo, plugin) { throw new Error(`Type of ${name} message must start with "${pluginInfo.name}:"`); } - let handler = name + messageFormat.constructor.name + "Handler"; + let handler = name + messageFormat.handlerSuffix; if (plugin === null || !plugin[handler]) { messageFormat.attach(link); From 94200433cca38b65c84ad7662989200234249596 Mon Sep 17 00:00:00 2001 From: Hornwitser Date: Mon, 28 Sep 2020 03:31:28 +0200 Subject: [PATCH 07/12] Serve interface on all routes for the interface Add all routes the web interface is served on to the express app and serve the index.html file on. Due to the index html not knowing which path it's hosted under, a path to the root of the web interface is replaced using string substitution from the master server. --- packages/master/master.js | 31 ++++ packages/master/package.json | 1 - packages/master/src/routes.js | 16 ++ packages/master/web/basename.jsx | 6 + packages/master/web/components/App.jsx | 13 ++ packages/master/web/index.html | 4 + packages/master/web/index.jsx | 13 +- packages/master/web/layout/index.jsx | 247 ++++++++++--------------- packages/master/webpack.config.js | 4 - 9 files changed, 173 insertions(+), 162 deletions(-) create mode 100644 packages/master/src/routes.js create mode 100644 packages/master/web/basename.jsx create mode 100644 packages/master/web/components/App.jsx diff --git a/packages/master/master.js b/packages/master/master.js index 53ac5d90..c8efaa2b 100755 --- a/packages/master/master.js +++ b/packages/master/master.js @@ -40,6 +40,7 @@ let devMiddleware; // homebrew modules const generateSSLcert = require("./src/generate_ssl_cert"); +const routes = require("./src/routes"); const database = require("@clusterio/lib/database"); const schema = require("@clusterio/lib/schema"); const link = require("@clusterio/lib/link"); @@ -71,6 +72,26 @@ app.use(bodyParser.urlencoded({ app.use(fileUpload()); app.use(compression()); + +// Servers the web interface with the root path set apropriately. +function serveWeb(route) { + // The depth is is the number of slashes in the route minus one, but due + // to lenient matching on trailing slashes in the route we need to + // compensate if the request path contains a slash but not the route, + // and vice versa. + let routeDepth = (route.match(/\//g) || []).length - 1 - (route.slice(-1) === "/"); + return function(req, res, next) { + let depth = routeDepth + (req.path.slice(-1) === "/"); + let webRoot = "../".repeat(depth) || "./"; + fs.readFile(path.join(__dirname, "web", "index.html"), "utf8").then((content) => { + res.type("text/html"); + res.send(content.replace(/__WEB_ROOT__/g, webRoot)); + }).catch(err => { + next(err); + }); + }; +} + // Set folder to serve static content from (the website) app.use(express.static(path.join(__dirname, "static"))); app.use(express.static("static")); // Used for data export files @@ -1698,6 +1719,16 @@ async function startServer() { }); } + // Add routes for the web interface + for (let route of routes) { + app.get(route, serveWeb(route)); + } + for (let pluginInfo of pluginInfos) { + for (let route of pluginInfo.routes || []) { + app.get(route, serveWeb(route)); + } + } + // Load plugins await pluginManagement(pluginInfos); diff --git a/packages/master/package.json b/packages/master/package.json index a18ea824..2827404d 100644 --- a/packages/master/package.json +++ b/packages/master/package.json @@ -43,7 +43,6 @@ "clean-webpack-plugin": "^3.0.0", "css-loader": "^4.3.0", "fast-deep-equal": "^3.1.3", - "html-webpack-plugin": "^4.5.0", "null-loader": "^4.0.0", "react": "^16.13.1", "react-dom": "^16.13.1", diff --git a/packages/master/src/routes.js b/packages/master/src/routes.js new file mode 100644 index 00000000..7e0ca52a --- /dev/null +++ b/packages/master/src/routes.js @@ -0,0 +1,16 @@ +"use strict"; +// Routes used in the web interface and served by the master server +module.exports = [ + "/", + "/instances", + "/instances/:id/view", + "/slaves", + "/slaves/:id/view", + "/users", + "/users/:id/view", + "/roles", + "/roles/:id/view", + "/permissions", + "/permissions/:id/view", + "/settings", +]; diff --git a/packages/master/web/basename.jsx b/packages/master/web/basename.jsx new file mode 100644 index 00000000..99b8468a --- /dev/null +++ b/packages/master/web/basename.jsx @@ -0,0 +1,6 @@ +// Calculate basedir of application based on current location and +// the provided web_root from master server. +const location = new URL(window.web_root, document.location) +const basename = location.pathname !== "/" ? location.pathname : ""; + +export default basename; diff --git a/packages/master/web/components/App.jsx b/packages/master/web/components/App.jsx new file mode 100644 index 00000000..b1db4c6e --- /dev/null +++ b/packages/master/web/components/App.jsx @@ -0,0 +1,13 @@ +import React from "react"; +import { BrowserRouter } from "react-router-dom"; + +import basename from "../basename"; +import Layout from "../layout"; + +export default function App() { + return ( + + + + ); +} diff --git a/packages/master/web/index.html b/packages/master/web/index.html index 7f77d875..b7a280f7 100644 --- a/packages/master/web/index.html +++ b/packages/master/web/index.html @@ -4,9 +4,13 @@ Clusterio +
+ diff --git a/packages/master/web/index.jsx b/packages/master/web/index.jsx index 5c2828e2..0cb7c8c5 100644 --- a/packages/master/web/index.jsx +++ b/packages/master/web/index.jsx @@ -1,13 +1,8 @@ +import "./index.css" + import React from "react" import ReactDOM from "react-dom" -import { BrowserRouter } from "react-router-dom" -import "./index.css" -import Layout from "./layout" +import App from "./components/App"; -ReactDOM.render( - - - , - document.getElementById('root') -); +ReactDOM.render(, document.getElementById("root")); diff --git a/packages/master/web/layout/index.jsx b/packages/master/web/layout/index.jsx index 58e8b1be..4893ccd9 100644 --- a/packages/master/web/layout/index.jsx +++ b/packages/master/web/layout/index.jsx @@ -1,7 +1,6 @@ import { Layout, Menu } from "antd"; -import { withRouter } from "react-router-dom"; -import { BrowserRouter as Router, Route, Link } from "react-router-dom"; +import { Route, Link, withRouter } from "react-router-dom"; import React, { Component } from "react"; import { Dashboard } from "../pages/dashboard"; @@ -24,8 +23,6 @@ class SiteLayout extends Component { super(props); const { location } = props; - // this.history = useHistory(); - this.state = { collapsed: false, setcollapsed: false, @@ -58,156 +55,110 @@ class SiteLayout extends Component { render() { return ( - - - {document.location.search !== "?hideExtras" ? ( - -

-
- {" "} - {this.state.collapsed ? ( + + {document.location.search !== "?hideExtras" ? ( + +

+
+ {" "} + {this.state.collapsed ? ( + + ) : ( - ) : ( - - )} -
-

-

+ )} +
+

+

- { - let x = this.state.location.pathname.split("/"); - x.shift(); - return x; - })()} - mode="inline" - > - - Slaves - - - - Instances - - - - Users - - - - Roles - - - - Permissions - - - - Settings - - - -
- ) : ( - "" - )} - - { + let x = this.state.location.pathname.split("/"); + x.shift(); + return x; + })()} + mode="inline" > - - - - - - - - - - - - - -
- Clusterio 2.0 web interface https://github.com/clusterio -
-
+ + Slaves + + + + Instances + + + + Users + + + + Roles + + + + Permissions + + + + Settings + + + + + ) : ( + "" + )} + + + + + + + + + + + + + + + +
+ Clusterio 2.0 web interface https://github.com/clusterio +
-
+ ); } } diff --git a/packages/master/webpack.config.js b/packages/master/webpack.config.js index ebd45171..4e2dc702 100644 --- a/packages/master/webpack.config.js +++ b/packages/master/webpack.config.js @@ -1,7 +1,6 @@ "use strict"; const path = require("path"); const webpack = require("webpack"); -const HtmlWebpackPlugin = require("html-webpack-plugin"); const { CleanWebpackPlugin } = require("clean-webpack-plugin"); module.exports = (env = {}) => ({ @@ -20,9 +19,6 @@ module.exports = (env = {}) => ({ new webpack.DefinePlugin({ "process.env.APP_ENV": JSON.stringify("browser"), }), - new HtmlWebpackPlugin({ - template: "web/index.html", - }), // Make sure ant-design icons use the ES variant new webpack.NormalModuleReplacementPlugin( From 8dce1dd0fdfd04f1a938d88c5bdaecfd431edfcd Mon Sep 17 00:00:00 2001 From: Hornwitser Date: Mon, 28 Sep 2020 04:37:53 +0200 Subject: [PATCH 08/12] Fix web interface indents Use project standard of tabs for indents. --- packages/master/web/components/App.jsx | 10 +- packages/master/web/components/data-table.jsx | 460 +++++------ packages/master/web/layout/index.jsx | 266 +++--- packages/master/web/pages/dashboard.jsx | 12 +- .../master/web/pages/instances/instance.jsx | 766 +++++++++--------- .../web/pages/instances/instancesTable.jsx | 76 +- .../pages/permissions/permissionsTable.jsx | 46 +- packages/master/web/pages/roles/role.jsx | 182 ++--- .../master/web/pages/roles/rolesTable.jsx | 72 +- .../master/web/pages/settings/settings.jsx | 140 ++-- .../master/web/pages/slaves/slavesTable.jsx | 46 +- packages/master/web/pages/users/user.jsx | 150 ++-- .../master/web/pages/users/usersTable.jsx | 66 +- packages/master/web/util/notify.jsx | 12 +- packages/master/web/util/websocket.jsx | 80 +- packages/master/web/util/wslink.jsx | 150 ++-- 16 files changed, 1267 insertions(+), 1267 deletions(-) diff --git a/packages/master/web/components/App.jsx b/packages/master/web/components/App.jsx index b1db4c6e..10c155b0 100644 --- a/packages/master/web/components/App.jsx +++ b/packages/master/web/components/App.jsx @@ -5,9 +5,9 @@ import basename from "../basename"; import Layout from "../layout"; export default function App() { - return ( - - - - ); + return ( + + + + ); } diff --git a/packages/master/web/components/data-table.jsx b/packages/master/web/components/data-table.jsx index 7d2a5718..ef2791b5 100644 --- a/packages/master/web/components/data-table.jsx +++ b/packages/master/web/components/data-table.jsx @@ -19,28 +19,28 @@ const { Panel } = Collapse; * RecordIdField - String - By default we assume the column "Id" is a unique identifier for a record. If that isn't the case, supply the column name here */ class DataTable extends Component { - constructor(props) { - super(props); - if (!this.props.DataFunction) throw new Error("DataFunction not defined") - this.state = { - pagination: { - pageSize: 100, - current: 1 - }, - filters: this.props.Filters, - sorter: {}, - tableData: [], - showEditModal: false, - record: {}, - } - } + constructor(props) { + super(props); + if (!this.props.DataFunction) throw new Error("DataFunction not defined") + this.state = { + pagination: { + pageSize: 100, + current: 1 + }, + filters: this.props.Filters, + sorter: {}, + tableData: [], + showEditModal: false, + record: {}, + } + } - componentDidMount() { - this.getData() - } + componentDidMount() { + this.getData() + } - async getData(pagination, filters, sorter) { - /* + async getData(pagination, filters, sorter) { + /* pagination = { pageSize: 10, // items per page current: 1, // page number @@ -51,235 +51,235 @@ class DataTable extends Component { } sorter = {} */ - pagination = pagination || this.state.pagination - filters = filters || this.state.filters - sorter = sorter || this.state.sorter - // console.log(pagination, filters, sorter) + pagination = pagination || this.state.pagination + filters = filters || this.state.filters + sorter = sorter || this.state.sorter + // console.log(pagination, filters, sorter) - let data = await this.props.DataFunction() - // await fetchApi(this.state.dataUrl, "post", { - // database: this.props.Database, - // table: this.props.Table, - // dataSource: this.props.DataSource, - // pagination: this.props.RecordCount? {...pagination, pageSize: this.props.RecordCount, current: 1}:pagination, - // filters, - // sorter, - // recordIdField: this.props.RecordIdField || "Id", // Sort by this - // }) - console.log(data) - data = data || {} - this.setState({ - tableData: this.props.CustomDataFilterFunction ? this.props.CustomDataFilterFunction(data) : data, - pagination: { ...pagination, ...data.pagination }, - sorter, - filters, - }) - } + let data = await this.props.DataFunction() + // await fetchApi(this.state.dataUrl, "post", { + // database: this.props.Database, + // table: this.props.Table, + // dataSource: this.props.DataSource, + // pagination: this.props.RecordCount? {...pagination, pageSize: this.props.RecordCount, current: 1}:pagination, + // filters, + // sorter, + // recordIdField: this.props.RecordIdField || "Id", // Sort by this + // }) + console.log(data) + data = data || {} + this.setState({ + tableData: this.props.CustomDataFilterFunction ? this.props.CustomDataFilterFunction(data) : data, + pagination: { ...pagination, ...data.pagination }, + sorter, + filters, + }) + } - showEditModal(record, index) { - if (!this.state.showEditModal) - this.setState({ - record: record, - showEditModal: true, - }) - } - hideEditModal() { - this.setState({ - showEditModal: false, - inserting: false, - record: {} - }) - } - async onEditFinish(values) { - console.log("Finished editing", values) + showEditModal(record, index) { + if (!this.state.showEditModal) + this.setState({ + record: record, + showEditModal: true, + }) + } + hideEditModal() { + this.setState({ + showEditModal: false, + inserting: false, + record: {} + }) + } + async onEditFinish(values) { + console.log("Finished editing", values) - if (this.state.inserting) { // Create new record - var status = {} - await this.props.AddRecord.insert(values) - } else { // Edit existing record, capable of doing sparse updates - var status = {} - await this.props.Editable.insert(values) - } - this.setState({ - showEditModal: false, - inserting: false, - record: {}, - }) - // Force refresh of data - this.getData() - } - async deleteRecord(record) { - delete record.key - // Delete "null" values as they seem to cause deletes to fail silently when the value is null and field type is float - for (let key in record) { - if (record[key] === null) delete record[key] - } - var status = {} - // await fetchApi(`/api/${this.props.Server}/tableData/record`, "delete", { - // database: this.props.Database, - // table: this.props.Table, - // dataSource: this.props.DataSource, - // record, - // }, undefined, true) + if (this.state.inserting) { // Create new record + var status = {} + await this.props.AddRecord.insert(values) + } else { // Edit existing record, capable of doing sparse updates + var status = {} + await this.props.Editable.insert(values) + } + this.setState({ + showEditModal: false, + inserting: false, + record: {}, + }) + // Force refresh of data + this.getData() + } + async deleteRecord(record) { + delete record.key + // Delete "null" values as they seem to cause deletes to fail silently when the value is null and field type is float + for (let key in record) { + if (record[key] === null) delete record[key] + } + var status = {} + // await fetchApi(`/api/${this.props.Server}/tableData/record`, "delete", { + // database: this.props.Database, + // table: this.props.Table, + // dataSource: this.props.DataSource, + // record, + // }, undefined, true) - console.log("Deleted record", status) + console.log("Deleted record", status) - if (status.ok) notify("success", status.msg, "success") - if (!status.ok) notify("error", status.msg, "error") + if (status.ok) notify("success", status.msg, "success") + if (!status.ok) notify("error", status.msg, "error") - // Force refresh of data - this.getData() - } - render() { - let tableProps = { - ...this.props.TableProps || {}, - onRow: (record, rowIndex) => { - /* + // Force refresh of data + this.getData() + } + render() { + let tableProps = { + ...this.props.TableProps || {}, + onRow: (record, rowIndex) => { + /* To allow for extending functionality, we take a TableProps argument from props and pass it through to the Table component. Since we are also using onRow internaly here, we handle the externally provided events ourselves by passing along the event object. This way the end user isn't affected by our event handlers. */ - let externalOnRow = { - ...(this.props.TableProps && this.props.TableProps.onRow && this.props.TableProps.onRow(record, rowIndex)), - } - return { - onClick: event => { - if (event.target.type !== "button") { - console.log("onRow", record, rowIndex) - if (this.props.Editable) this.showEditModal(record, rowIndex) - if (externalOnRow.onClick) externalOnRow.onClick(event) - } - }, - onDoubleClick: event => { - if (externalOnRow.onDoubleClick) externalOnRow.onDoubleClick(event) - }, - onContextMenu: event => { - if (externalOnRow.onContextMenu) externalOnRow.onContextMenu(event) - }, - onMouseEnter: event => { - if (externalOnRow.onMouseEnter) externalOnRow.onMouseEnter(event) - }, - onMouseLeave: event => { - if (externalOnRow.onMouseLeave) externalOnRow.onMouseLeave(event) - }, - } - } - } - let columns = this.props.columns || this.inferColumns(this.state.tableData) - if (this.props.DeleteRecord && !columns.find(x => x.dataIndex === "notInUse")) columns.push({ - // Add delete button on the right - dataIndex: "notInUse", - title: "", - render: (text, record) => { - this.deleteRecord(record) - }} - > + let externalOnRow = { + ...(this.props.TableProps && this.props.TableProps.onRow && this.props.TableProps.onRow(record, rowIndex)), + } + return { + onClick: event => { + if (event.target.type !== "button") { + console.log("onRow", record, rowIndex) + if (this.props.Editable) this.showEditModal(record, rowIndex) + if (externalOnRow.onClick) externalOnRow.onClick(event) + } + }, + onDoubleClick: event => { + if (externalOnRow.onDoubleClick) externalOnRow.onDoubleClick(event) + }, + onContextMenu: event => { + if (externalOnRow.onContextMenu) externalOnRow.onContextMenu(event) + }, + onMouseEnter: event => { + if (externalOnRow.onMouseEnter) externalOnRow.onMouseEnter(event) + }, + onMouseLeave: event => { + if (externalOnRow.onMouseLeave) externalOnRow.onMouseLeave(event) + }, + } + } + } + let columns = this.props.columns || this.inferColumns(this.state.tableData) + if (this.props.DeleteRecord && !columns.find(x => x.dataIndex === "notInUse")) columns.push({ + // Add delete button on the right + dataIndex: "notInUse", + title: "", + render: (text, record) => { + this.deleteRecord(record) + }} + > Slett permanent - - } - trigger="click" - > - - - }) + + } + trigger="click" + > + + + }) - return <> - -
- -
{ - return { - ...x, // Add a 4th parameter to the stock render function with all of our table data - render: x.render ? (...originalParams) => x.render(...originalParams, this.state.tableData) : undefined - } - })} - dataSource={this.state.tableData} - pagination={this.state.pagination.total > 10 ? this.state.pagination : false} - onChange={this.getData.bind(this)} - /> - {this.props.AddRecord && } - - {this.state.inserting ? "Legg til" : "Rediger"} - } - > - {this.state.showEditModal && - { + +
{ + return { + ...x, // Add a 4th parameter to the stock render function with all of our table data + render: x.render ? (...originalParams) => x.render(...originalParams, this.state.tableData) : undefined + } + })} + dataSource={this.state.tableData} + pagination={this.state.pagination.total > 10 ? this.state.pagination : false} + onChange={this.getData.bind(this)} + /> + {this.props.AddRecord && } + + {this.state.inserting ? "Legg til" : "Rediger"} + } + > + {this.state.showEditModal && + { - ( - (this.state.inserting && this.props.AddRecord && this.props.AddRecord.fields) // Use externally supplied form input fields + ( + (this.state.inserting && this.props.AddRecord && this.props.AddRecord.fields) // Use externally supplied form input fields || this.props.columns.filter && this.props.columns.filter(x => x.dataIndex !== "notInUse") // Generate input fields from external columns || this.inferColumns(this.state.tableData)).map(col => { // Generate input fields from autogenerated columns (only works with existing data) - console.log(this.state.record) - return - {col.renderEdit && col.renderEdit(this.state.record[col.dataIndex], this.state.record, undefined /* Non spec compliant, is supposed to be index of record */, this.state.tableData) || } - - }) - } - - - - } - - - - } - inferColumns(data) { - // Look at the data and find columns and how to display them. Can be overridden by props.Columns if more customization is needed - let columns = [] - data.forEach(row => { - Object.keys(row).filter(x => x !== "key").forEach(key => { - let existing = columns.find(col => col.key === key) - if (!existing) { - columns.push({ - key: key, - title: key, - dataIndex: key, - }) - } - }) - }) - return columns - } + console.log(this.state.record) + return + {col.renderEdit && col.renderEdit(this.state.record[col.dataIndex], this.state.record, undefined /* Non spec compliant, is supposed to be index of record */, this.state.tableData) || } + + }) + } + + + + } + + + + } + inferColumns(data) { + // Look at the data and find columns and how to display them. Can be overridden by props.Columns if more customization is needed + let columns = [] + data.forEach(row => { + Object.keys(row).filter(x => x !== "key").forEach(key => { + let existing = columns.find(col => col.key === key) + if (!existing) { + columns.push({ + key: key, + title: key, + dataIndex: key, + }) + } + }) + }) + return columns + } } export default DataTable; diff --git a/packages/master/web/layout/index.jsx b/packages/master/web/layout/index.jsx index 4893ccd9..5a2900ca 100644 --- a/packages/master/web/layout/index.jsx +++ b/packages/master/web/layout/index.jsx @@ -19,148 +19,148 @@ const { SubMenu } = Menu; class SiteLayout extends Component { - constructor(props) { - super(props); - const { location } = props; + constructor(props) { + super(props); + const { location } = props; - this.state = { - collapsed: false, - setcollapsed: false, - tags: [], - setTags: [], - location, - siteSettings: {}, - factoryModel: [] - }; - } + this.state = { + collapsed: false, + setcollapsed: false, + tags: [], + setTags: [], + location, + siteSettings: {}, + factoryModel: [] + }; + } - onCollapse() { - this.setState({ collapsed: !this.state.collapsed }) - } + onCollapse() { + this.setState({ collapsed: !this.state.collapsed }) + } - titleCase(text) { - return text.substring(0, 1).toUpperCase() + text.substring(1); - } + titleCase(text) { + return text.substring(0, 1).toUpperCase() + text.substring(1); + } - replaceParametersInUrl({ endpoint, params }) { - let path = endpoint; - console.log("endpoint", params) - Object.keys(params).forEach(key => { - path = path.replace(":" + key, params[key]) - }) + replaceParametersInUrl({ endpoint, params }) { + let path = endpoint; + console.log("endpoint", params) + Object.keys(params).forEach(key => { + path = path.replace(":" + key, params[key]) + }) - return path; - } + return path; + } - render() { - return ( - - {document.location.search !== "?hideExtras" ? ( - -

-
- {" "} - {this.state.collapsed ? ( - - ) : ( - - )} -
-

-

+ render() { + return ( + + {document.location.search !== "?hideExtras" ? ( + +

+
+ {" "} + {this.state.collapsed ? ( + + ) : ( + + )} +
+

+

- { - let x = this.state.location.pathname.split("/"); - x.shift(); - return x; - })()} - mode="inline" - > - - Slaves - - - - Instances - - - - Users - - - - Roles - - - - Permissions - - - - Settings - - - -
- ) : ( - "" - )} - - - - - - - - - - - - - - - -
+ { + let x = this.state.location.pathname.split("/"); + x.shift(); + return x; + })()} + mode="inline" + > + + Slaves + + + + Instances + + + + Users + + + + Roles + + + + Permissions + + + + Settings + + + + + ) : ( + "" + )} + + + + + + + + + + + + + + + +
Clusterio 2.0 web interface https://github.com/clusterio -
-
- - ); - } +
+
+
+ ); + } } export default withRouter(SiteLayout); diff --git a/packages/master/web/pages/dashboard.jsx b/packages/master/web/pages/dashboard.jsx index 059a6d69..7fcf6c94 100644 --- a/packages/master/web/pages/dashboard.jsx +++ b/packages/master/web/pages/dashboard.jsx @@ -1,10 +1,10 @@ import React, {Component} from "react" export class Dashboard extends Component { - constructor(props){ - super(props) - } - render(){ - return

Dashboard

- } + constructor(props){ + super(props) + } + render(){ + return

Dashboard

+ } } \ No newline at end of file diff --git a/packages/master/web/pages/instances/instance.jsx b/packages/master/web/pages/instances/instance.jsx index d5d51cb6..81024e50 100644 --- a/packages/master/web/pages/instances/instance.jsx +++ b/packages/master/web/pages/instances/instance.jsx @@ -1,17 +1,17 @@ import React, { Component } from "react" import { Card, Button, Popover, Select, Divider, Input, Form, Col, Row, Checkbox, Space } from "antd" import { - listSlaves, - listInstances, - startInstance, - stopInstance, - setInstanceOutputSubscriptions, - deleteInstance, - assignInstance, - createSave, - getInstanceConfig, - setInstanceConfigField, - sendRcon, + listSlaves, + listInstances, + startInstance, + stopInstance, + setInstanceOutputSubscriptions, + deleteInstance, + assignInstance, + createSave, + getInstanceConfig, + setInstanceConfigField, + sendRcon, } from "../../util/wslink" import DataTable from "../../components/data-table" import notify from "../../util/notify" @@ -22,208 +22,208 @@ import PlusOutlined from "@ant-design/icons/PlusOutlined" const { Option } = Select export class InstanceView extends Component { - constructor(props) { - super(props) - this.state = { - instance: {}, - slaves: [], - logLines: [{ message: "Logviewer. Follows the latest logs if you scroll to the bottom. Does not store logs past the lifetime of this tab" }], - } - this.messagesEndRef = React.createRef() - } - navigate(url) { - this.props.history.push(url); - } - async componentDidMount() { - let id = this.props.match.params.id + constructor(props) { + super(props) + this.state = { + instance: {}, + slaves: [], + logLines: [{ message: "Logviewer. Follows the latest logs if you scroll to the bottom. Does not store logs past the lifetime of this tab" }], + } + this.messagesEndRef = React.createRef() + } + navigate(url) { + this.props.history.push(url); + } + async componentDidMount() { + let id = this.props.match.params.id - await this.getData() + await this.getData() - await setInstanceOutputSubscriptions({ - instance_id: Number(id), - }) - window.instanceOutputEventHandler = ({ instance_id, output }) => { - if (instance_id === Number(id)) { - this.setState({ - logLines: [...this.state.logLines, output], - }) - } - // Automatically scroll to bottom on new line. - // this.messagesEndRef.current.scrollIntoView({ behavior: 'smooth' }) - } - } - async getData() { - let id = this.props.match.params.id + await setInstanceOutputSubscriptions({ + instance_id: Number(id), + }) + window.instanceOutputEventHandler = ({ instance_id, output }) => { + if (instance_id === Number(id)) { + this.setState({ + logLines: [...this.state.logLines, output], + }) + } + // Automatically scroll to bottom on new line. + // this.messagesEndRef.current.scrollIntoView({ behavior: 'smooth' }) + } + } + async getData() { + let id = this.props.match.params.id - let instances = await listInstances() - let slaves = await listSlaves() + let instances = await listInstances() + let slaves = await listSlaves() - this.setState({ - instance: instances.find(x => x.id === Number(id)), - slaves, - }) + this.setState({ + instance: instances.find(x => x.id === Number(id)), + slaves, + }) - let config = await getInstanceConfig({ instance_id: Number(id) }) - console.log(config) - this.setState({ - config - }) - } - async start() { - this.setState({ - starting: true, - }) - try { - await startInstance({ - instance_id: this.state.instance.id, - save: null, - }) - } catch (e) { - notify("Error starting instance", "error", e.message) - return this.setState({ - starting: false, - }) - } - notify("Instance started") - this.setState({ - starting: false, - }) - this.getData() - } - async stop() { - this.setState({ - stopping: true, - }) - try { - await stopInstance({ - instance_id: this.state.instance.id, - }) - } catch (e) { - notify("Error stopping instance", "error", e.message) - return this.setState({ - stopping: false, - }) - } - notify("Instance stopped") - this.setState({ - stopping: false, - }) - this.getData() - } - async createSave() { - this.setState({ - creatingSave: true, - }) - try { - await createSave({ - instance_id: this.state.instance.id, - }) - } catch (e) { - notify("Error creating save", "error", e.message) - return this.setState({ - creatingSave: false, - }) - } - notify("Save created", "success") - this.setState({ - creatingSave: false, - }) - } - async onConfigEditFinish(values) { - console.log("Completed config edit with", values) - for (let k in values) { - if (values[k] !== this.getInstanceConfigAsKvObject(this.state.config)[k]) { - let value = values[k] - if (typeof value === "boolean") value = value.toString() - console.log("Setting", k, value) - await setInstanceConfigField({ - instance_id: this.state.instance.id, - field: k, - value: value, - }) - } - } - notify("Set configuration fields", "success") - this.setState({ - editingConfig: false - }) - this.getData() - } - render() { - console.log(this.state) - let { instance, slaves } = this.state - let slave = slaves && slaves.find(x => x.id === instance.assigned_slave); - return -

{instance.name}

-

ID: {instance.id}

-

Slave: {slave && slave.name}

- {instance.status !== "running" && } - {instance.status !== "stopped" && } + {instance.status !== "stopped" && } - {instance.status !== "running" && } + {instance.status !== "running" && } - { - let result = await assignInstance({ instance_id: instance.id, slave_id: newSlaveId }) - notify("Assigned to slave", "success") - this.getData() - }} - > - {this.state.slaves.map(slave => )} - - } - trigger="click" - type={instance.status === "unassigned" ? "primary" : "default"} - > - } + { + let result = await assignInstance({ instance_id: instance.id, slave_id: newSlaveId }) + notify("Assigned to slave", "success") + this.getData() + }} + > + {this.state.slaves.map(slave => )} + + } + trigger="click" + type={instance.status === "unassigned" ? "primary" : "default"} + > + - - { - await deleteInstance({ instance_id: instance.id }); - notify("Deleted instance " + instance.id, "success") - this.navigate("/instances") - }} - > + + + { + await deleteInstance({ instance_id: instance.id }); + notify("Deleted instance " + instance.id, "success") + this.navigate("/instances") + }} + > Delete this instance permanently - - } - trigger="click" - > - - - -
- {this.state.logLines.map(item =>

{item.time} {item.level} {item.file}: {item.message}

)} -
-
- {/* rcon input field */} -
{ - await sendRcon({ instance_id: instance.id, command: values.command }) - }} - > - - - - - {this.state.config && this.renderConfig(this.state.config)} -
- } - getInstanceConfigAsKvObject(config) { - let object = {} - for (let group of config.serialized_config.groups) { - for (let fieldName in group.fields) { - object[group.name + "." + fieldName] = group.fields[fieldName] - } - } - return object - } - renderConfig(config) { - const layout = { - labelCol: { - span: 6, - }, - wrapperCol: { - span: 14, - }, - }; - const tailLayout = { - wrapperCol: { - offset: 6, - span: 14, - }, - }; - return -
- {this.state.editingConfig ? - - - - : - - } - - {config && config.serialized_config.groups.map(group => <> -
- {group.name} - {/* {Object.keys(group.fields).map(field => <> + + + : + + } + + {config && config.serialized_config.groups.map(group => <> + + {group.name} + {/* {Object.keys(group.fields).map(field => <> {field}: {JSON.stringify(group.fields[field])}
)} */} - {console.log(group)} - {Object.keys(group.fields).map(field => )} - - )} - - - - } + {console.log(group)} + {Object.keys(group.fields).map(field => )} + + )} + + + + } } function renderDisplayField(value) { - if (typeof value === "object") { - return JSON.stringify(value) - } - if (typeof value === "boolean") { - return - } - return value.toString() + if (typeof value === "object") { + return JSON.stringify(value) + } + if (typeof value === "boolean") { + return + } + return value.toString() } function renderFormField(value) { - if (typeof value === "object") { - return - } - if (typeof value === "boolean") { - return - } - return + if (typeof value === "object") { + return + } + if (typeof value === "boolean") { + return + } + return } class ObjectInput extends Component { - constructor(props) { - super(props) - console.log(this.props) - /* + constructor(props) { + super(props) + console.log(this.props) + /* value: { auto_pause: false, tags: ["clusterio"] @@ -351,89 +351,89 @@ class ObjectInput extends Component { id: "factorio.settings", onChange: f() */ - this.state = {} - } - onChange(e, key) { - if (e.target.type === "checkbox") { - // if (e.target.checked !== undefined) { - // Its a checkbox, set value to true/false - let value = { ...this.props.value } - value[key] = e.target.checked || false - this.props.onChange(value) - } else if (e.target.type === "text") { - // } else if (e.target.value !== undefined) { - // its probably a text input - let value = { ...this.props.value } - value[key] = e.target.value || "" - this.props.onChange(value) - } - } - render() { - let { value } = this.props - let ret = [] - for (let key in value) { - if (typeof value[key] === "boolean") { - ret.push( this.onChange(e, key)} - > - {key} - - ) - } else if (typeof value[key] === "string") { - ret.push(
{key} this.onChange(e, key)} - />
- ) - } - } - ret.push( - this.setState({ newInput: e.target.value })} /> - - } - trigger="click" - visible={this.state.addPopoverVisible} - handleVisibleChange={visible => this.setState({ addPopoverVisible: visible })} - > - - ) - return {ret} - } + this.state = {} + } + onChange(e, key) { + if (e.target.type === "checkbox") { + // if (e.target.checked !== undefined) { + // Its a checkbox, set value to true/false + let value = { ...this.props.value } + value[key] = e.target.checked || false + this.props.onChange(value) + } else if (e.target.type === "text") { + // } else if (e.target.value !== undefined) { + // its probably a text input + let value = { ...this.props.value } + value[key] = e.target.value || "" + this.props.onChange(value) + } + } + render() { + let { value } = this.props + let ret = [] + for (let key in value) { + if (typeof value[key] === "boolean") { + ret.push( this.onChange(e, key)} + > + {key} + + ) + } else if (typeof value[key] === "string") { + ret.push(
{key} this.onChange(e, key)} + />
+ ) + } + } + ret.push( + this.setState({ newInput: e.target.value })} /> + + } + trigger="click" + visible={this.state.addPopoverVisible} + handleVisibleChange={visible => this.setState({ addPopoverVisible: visible })} + > + + ) + return {ret} + } } class ConfigFormItem extends Component { - constructor(props) { - super(props) - } - render() { - let { field, group, editingConfig } = this.props - return - {editingConfig ? - renderFormField(group.fields[field]) - : - renderDisplayField(group.fields[field]) - } - - } + constructor(props) { + super(props) + } + render() { + let { field, group, editingConfig } = this.props + return + {editingConfig ? + renderFormField(group.fields[field]) + : + renderDisplayField(group.fields[field]) + } + + } } diff --git a/packages/master/web/pages/instances/instancesTable.jsx b/packages/master/web/pages/instances/instancesTable.jsx index 21a86e15..d73e4f88 100644 --- a/packages/master/web/pages/instances/instancesTable.jsx +++ b/packages/master/web/pages/instances/instancesTable.jsx @@ -5,42 +5,42 @@ import DataTable from "../../components/data-table" const config = require("@clusterio/lib/config") export class InstancesTable extends Component { - constructor(props) { - super(props) - } - navigate(url) { - this.props.history.push(url); - } - render() { - return -

Instances

- { - let instanceConfig = new config.InstanceConfig(); - await instanceConfig.init(); - console.log("Base config", instanceConfig) - instanceConfig.set("instance.name", args.name); - let serialized_config = instanceConfig.serialize(); - let response = await createInstance(serialized_config) - console.log("Created instance", response) - } - }} - DataFunction={listInstances} - TableProps={{ - onRow: (record, rowIndex) => { - return { - onClick: event => { - this.navigate(`/instances/${record.id}/view`) - } - } - } - }} - /> -
- } + constructor(props) { + super(props) + } + navigate(url) { + this.props.history.push(url); + } + render() { + return +

Instances

+ { + let instanceConfig = new config.InstanceConfig(); + await instanceConfig.init(); + console.log("Base config", instanceConfig) + instanceConfig.set("instance.name", args.name); + let serialized_config = instanceConfig.serialize(); + let response = await createInstance(serialized_config) + console.log("Created instance", response) + } + }} + DataFunction={listInstances} + TableProps={{ + onRow: (record, rowIndex) => { + return { + onClick: event => { + this.navigate(`/instances/${record.id}/view`) + } + } + } + }} + /> +
+ } } diff --git a/packages/master/web/pages/permissions/permissionsTable.jsx b/packages/master/web/pages/permissions/permissionsTable.jsx index eb63f893..8bcf995c 100644 --- a/packages/master/web/pages/permissions/permissionsTable.jsx +++ b/packages/master/web/pages/permissions/permissionsTable.jsx @@ -4,27 +4,27 @@ import { listSlaves, listInstances, listPermissions } from "../../util/wslink" import DataTable from "../../components/data-table" export class PermissionsTable extends Component { - constructor(props) { - super(props) - } - navigate(url) { - this.props.history.push(url); - } - render() { - return -

Permissions

- { - return { - onClick: event => { - this.navigate(`/permissions/${record.id}/view`) - } - } - } - }} - /> -
- } + constructor(props) { + super(props) + } + navigate(url) { + this.props.history.push(url); + } + render() { + return +

Permissions

+ { + return { + onClick: event => { + this.navigate(`/permissions/${record.id}/view`) + } + } + } + }} + /> +
+ } } diff --git a/packages/master/web/pages/roles/role.jsx b/packages/master/web/pages/roles/role.jsx index 7634e616..625a25e0 100644 --- a/packages/master/web/pages/roles/role.jsx +++ b/packages/master/web/pages/roles/role.jsx @@ -4,23 +4,23 @@ import { Card, Button, Popover, Select, Transfer } from "antd" import DeleteOutlined from "@ant-design/icons/DeleteOutlined" import { - listSlaves, - listInstances, - startInstance, - stopInstance, - setInstanceOutputSubscriptions, - deleteInstance, - assignInstance, - createSave, - getInstanceConfig, - setInstanceConfigField, - sendRcon, - deleteUser, - listUsers, - listRoles, - setRoles, - listPermissions, - updateRole, + listSlaves, + listInstances, + startInstance, + stopInstance, + setInstanceOutputSubscriptions, + deleteInstance, + assignInstance, + createSave, + getInstanceConfig, + setInstanceConfigField, + sendRcon, + deleteUser, + listUsers, + listRoles, + setRoles, + listPermissions, + updateRole, } from "../../util/wslink" import DataTable from "../../components/data-table" import notify from "../../util/notify" @@ -28,86 +28,86 @@ import notify from "../../util/notify" const { Option } = Select export class RoleView extends Component { - constructor(props) { - super(props) - this.state = { - role: {} - } - this.messagesEndRef = React.createRef() - } - navigate(url) { - this.props.history.push(url); - } - async componentDidMount() { - await this.getData() - } - async getData() { - let id = this.props.match.params.id + constructor(props) { + super(props) + this.state = { + role: {} + } + this.messagesEndRef = React.createRef() + } + navigate(url) { + this.props.history.push(url); + } + async componentDidMount() { + await this.getData() + } + async getData() { + let id = this.props.match.params.id - let roles = await listRoles() - let permissions = await listPermissions() + let roles = await listRoles() + let permissions = await listPermissions() - this.setState({ - role: roles.find(x => x.id === Number(id)), - permissions, - }) - } - async handleChange(targetKeys) { - this.setState({ - role: { - ...this.state.role, - permissions: targetKeys - } - }); - let response = await updateRole({ - ...this.state.role, - permissions: targetKeys, - }) - console.log("Updated user roles", response) - } - render() { - console.log(this.state) - let { role, permissions } = this.state - return - { - await deleteUser({ role: role.name }) - notify("Deleted role " + role.name, "success") - this.navigate("/roles") - }} - > + this.setState({ + role: roles.find(x => x.id === Number(id)), + permissions, + }) + } + async handleChange(targetKeys) { + this.setState({ + role: { + ...this.state.role, + permissions: targetKeys + } + }); + let response = await updateRole({ + ...this.state.role, + permissions: targetKeys, + }) + console.log("Updated user roles", response) + } + render() { + console.log(this.state) + let { role, permissions } = this.state + return + { + await deleteUser({ role: role.name }) + notify("Deleted role " + role.name, "success") + this.navigate("/roles") + }} + > Delete this role permanently - - } - trigger="click" - > - - -

{role.name}

-

Assign roles

- - option.name.toLowerCase().indexOf(inputValue.toLowerCase()) > -1} - targetKeys={role.permissions} - onChange={this.handleChange.bind(this)} - render={item => item.name} - /> -
- } + + option.name.toLowerCase().indexOf(inputValue.toLowerCase()) > -1} + targetKeys={role.permissions} + onChange={this.handleChange.bind(this)} + render={item => item.name} + /> +
+ } } diff --git a/packages/master/web/pages/roles/rolesTable.jsx b/packages/master/web/pages/roles/rolesTable.jsx index 4e0f0f2a..6dd3af92 100644 --- a/packages/master/web/pages/roles/rolesTable.jsx +++ b/packages/master/web/pages/roles/rolesTable.jsx @@ -4,40 +4,40 @@ import { listSlaves, listInstances, listRoles, createRole } from "../../util/wsl import DataTable from "../../components/data-table" export class RolesTable extends Component { - constructor(props) { - super(props) - } - navigate(url) { - this.props.history.push(url); - } - render() { - return -

Roles

- { - let response = await createRole({name: args.name, description: args.description}) - console.log("Created role",response) - } - }} - DataFunction={listRoles} - TableProps={{ - onRow: (record, rowIndex) => { - return { - onClick: event => { - this.navigate(`/roles/${record.id}/view`) - } - } - } - }} - /> -
- } + constructor(props) { + super(props) + } + navigate(url) { + this.props.history.push(url); + } + render() { + return +

Roles

+ { + let response = await createRole({name: args.name, description: args.description}) + console.log("Created role",response) + } + }} + DataFunction={listRoles} + TableProps={{ + onRow: (record, rowIndex) => { + return { + onClick: event => { + this.navigate(`/roles/${record.id}/view`) + } + } + } + }} + /> +
+ } } diff --git a/packages/master/web/pages/settings/settings.jsx b/packages/master/web/pages/settings/settings.jsx index d4fcf35d..e725d01b 100644 --- a/packages/master/web/pages/settings/settings.jsx +++ b/packages/master/web/pages/settings/settings.jsx @@ -2,80 +2,80 @@ import React, { Component } from "react" import { Card, Button, Input, Form } from "antd" const layout = { - labelCol: { - span: 4, - }, - wrapperCol: { - span: 16, - }, + labelCol: { + span: 4, + }, + wrapperCol: { + span: 16, + }, }; const tailLayout = { - wrapperCol: { - offset: 4, - span: 16, - }, + wrapperCol: { + offset: 4, + span: 16, + }, }; export class Settings extends Component { - constructor(props) { - super(props) - this.state = { - role: {} - } - } - navigate(url) { - this.props.history.push(url); - } - render() { - console.log(this.state) - return -

Web interface settings

-
{ - console.log("Saving settings",values) - for(let key of Object.keys(values)){ - localStorage.setItem(key, values[key].replace("https://", "wss://").replace("http://", "ws://")) - } - // Force refresh to apply changes - document.location = document.location - }} - > - - - - - - - - - - -
- } + + + + + } } diff --git a/packages/master/web/pages/slaves/slavesTable.jsx b/packages/master/web/pages/slaves/slavesTable.jsx index a2744e55..f0450be1 100644 --- a/packages/master/web/pages/slaves/slavesTable.jsx +++ b/packages/master/web/pages/slaves/slavesTable.jsx @@ -4,27 +4,27 @@ import { listSlaves, listInstances } from "../../util/wslink" import DataTable from "../../components/data-table" export class SlavesTable extends Component { - constructor(props) { - super(props) - } - navigate(url) { - this.props.history.push(url); - } - render() { - return -

Slaves

- { - return { - onClick: event => { - this.navigate(`/slaves/${record.id}/view`) - } - } - } - }} - /> -
- } + constructor(props) { + super(props) + } + navigate(url) { + this.props.history.push(url); + } + render() { + return +

Slaves

+ { + return { + onClick: event => { + this.navigate(`/slaves/${record.id}/view`) + } + } + } + }} + /> +
+ } } diff --git a/packages/master/web/pages/users/user.jsx b/packages/master/web/pages/users/user.jsx index 819ecec9..9989ab27 100644 --- a/packages/master/web/pages/users/user.jsx +++ b/packages/master/web/pages/users/user.jsx @@ -1,10 +1,10 @@ import React, { Component } from "react" import { Card, Button, Popover, Select, Transfer } from "antd"; import { - deleteUser, - listUsers, - listRoles, - setRoles, + deleteUser, + listUsers, + listRoles, + setRoles, } from "../../util/wslink" import DataTable from "../../components/data-table" import notify from "../../util/notify" @@ -13,78 +13,78 @@ import DeleteOutlined from "@ant-design/icons/DeleteOutlined" const { Option } = Select export class UserView extends Component { - constructor(props) { - super(props) - this.state = { - user: {} - } - this.messagesEndRef = React.createRef(); - } - navigate(url) { - this.props.history.push(url); - } - async componentDidMount() { - await this.getData() - } - async getData() { - let name = this.props.match.params.id + constructor(props) { + super(props) + this.state = { + user: {} + } + this.messagesEndRef = React.createRef(); + } + navigate(url) { + this.props.history.push(url); + } + async componentDidMount() { + await this.getData() + } + async getData() { + let name = this.props.match.params.id - let users = await listUsers() - let roles = await listRoles() + let users = await listUsers() + let roles = await listRoles() - this.setState({ - user: users.find(x => x.name === name), - roles, - }) - } - async handleChange(targetKeys) { - this.setState({ - user: { - ...this.state.user, - roles: targetKeys - } - }); - let response = await setRoles({ - name: this.state.user.name, - roles: targetKeys, - }) - console.log("Updated user roles",response) - }; - render() { - console.log(this.state) - let { user, roles } = this.state - return -

{user.name}

-

Assign roles

- option.name.toLowerCase().indexOf(inputValue.toLowerCase()) > -1} - targetKeys={user.roles} - onChange={this.handleChange.bind(this)} - render={item => item.name} - /> - { - await deleteUser({ name: user.name }) - notify("Deleted user " + user.name, "success") - this.navigate("/users") - }} - > + this.setState({ + user: users.find(x => x.name === name), + roles, + }) + } + async handleChange(targetKeys) { + this.setState({ + user: { + ...this.state.user, + roles: targetKeys + } + }); + let response = await setRoles({ + name: this.state.user.name, + roles: targetKeys, + }) + console.log("Updated user roles",response) + }; + render() { + console.log(this.state) + let { user, roles } = this.state + return +

{user.name}

+

Assign roles

+ option.name.toLowerCase().indexOf(inputValue.toLowerCase()) > -1} + targetKeys={user.roles} + onChange={this.handleChange.bind(this)} + render={item => item.name} + /> + { + await deleteUser({ name: user.name }) + notify("Deleted user " + user.name, "success") + this.navigate("/users") + }} + > Delete this user from the cluster - - } - trigger="click" - > - - -
- } + + } + trigger="click" + > + +
+
+ } } diff --git a/packages/master/web/pages/users/usersTable.jsx b/packages/master/web/pages/users/usersTable.jsx index 7a1a253c..7f22e4a1 100644 --- a/packages/master/web/pages/users/usersTable.jsx +++ b/packages/master/web/pages/users/usersTable.jsx @@ -4,37 +4,37 @@ import { listSlaves, listInstances, listUsers, createUser } from "../../util/wsl import DataTable from "../../components/data-table" export class UsersTable extends Component { - constructor(props) { - super(props) - } - navigate(url) { - this.props.history.push(url); - } - render() { - return -

Slaves

- { - let response = await createUser({name: args.name}) - console.log("Created user",response) - } - }} - DataFunction={listUsers} - TableProps={{ - onRow: (record, rowIndex) => { - return { - onClick: event => { - this.navigate(`/users/${record.name}/view`) - } - } - } - }} - /> -
- } + constructor(props) { + super(props) + } + navigate(url) { + this.props.history.push(url); + } + render() { + return +

Slaves

+ { + let response = await createUser({name: args.name}) + console.log("Created user",response) + } + }} + DataFunction={listUsers} + TableProps={{ + onRow: (record, rowIndex) => { + return { + onClick: event => { + this.navigate(`/users/${record.name}/view`) + } + } + } + }} + /> +
+ } } diff --git a/packages/master/web/util/notify.jsx b/packages/master/web/util/notify.jsx index 8df6b7c5..40801c98 100644 --- a/packages/master/web/util/notify.jsx +++ b/packages/master/web/util/notify.jsx @@ -6,10 +6,10 @@ import { notification } from "antd"; * @param {("info"|"error"|"success"|"warning"|"warn")} type */ export default function notify(message, type = "info", description) { - notification[type]({ - message: typeof message === "string" ? message : "ERROR: See console", - description, - placement: "bottomRight", - }); - if (typeof message !== "string") console.error(message) + notification[type]({ + message: typeof message === "string" ? message : "ERROR: See console", + description, + placement: "bottomRight", + }); + if (typeof message !== "string") console.error(message) } diff --git a/packages/master/web/util/websocket.jsx b/packages/master/web/util/websocket.jsx index a0a2e8e4..08fb435c 100644 --- a/packages/master/web/util/websocket.jsx +++ b/packages/master/web/util/websocket.jsx @@ -36,19 +36,19 @@ function formatOutput(output) { * @private */ export class ControlConnector extends link.WebSocketClientConnector { - constructor(url, reconnectDelay, token) { - super(url, reconnectDelay); - this._token = token; - } + constructor(url, reconnectDelay, token) { + super(url, reconnectDelay); + this._token = token; + } - register() { - console.log("SOCKET | registering control"); - this.sendHandshake("register_control", { - token: this._token, - agent: "web", - version: "2.0.0-alpha", - }); - } + register() { + console.log("SOCKET | registering control"); + this.sendHandshake("register_control", { + token: this._token, + agent: "web", + version: "2.0.0-alpha", + }); + } } /** @@ -58,41 +58,41 @@ export class ControlConnector extends link.WebSocketClientConnector { * @static */ export class Control extends link.Link { - constructor(connector, controlPlugins) { - super("control", "master", connector); - link.attachAllMessages(this); + constructor(connector, controlPlugins) { + super("control", "master", connector); + link.attachAllMessages(this); - /** + /** * Mapping of plugin names to their instance for loaded plugins. * @type {Map} */ - this.plugins = controlPlugins; - for (let controlPlugin of controlPlugins.values()) { - plugin.attachPluginMessages(this, controlPlugin.info, controlPlugin); - } - } + this.plugins = controlPlugins; + for (let controlPlugin of controlPlugins.values()) { + plugin.attachPluginMessages(this, controlPlugin.info, controlPlugin); + } + } - async instanceOutputEventHandler(message) { - let { instance_id, output } = message.data; - console.log(formatOutput(output)); - window.instanceOutputEventHandler && window.instanceOutputEventHandler({instance_id, output}) - } + async instanceOutputEventHandler(message) { + let { instance_id, output } = message.data; + console.log(formatOutput(output)); + window.instanceOutputEventHandler && window.instanceOutputEventHandler({instance_id, output}) + } - async debugWsMessageEventHandler(message) { - console.log("WS", message.data.direction, message.data.content); - } + async debugWsMessageEventHandler(message) { + console.log("WS", message.data.direction, message.data.content); + } - async shutdown() { - this.connector.setTimeout(30); + async shutdown() { + this.connector.setTimeout(30); - try { - await link.messages.prepareDisconnect.send(this); - } catch (err) { - if (!(err instanceof errors.SessionLost)) { - throw err; - } - } + try { + await link.messages.prepareDisconnect.send(this); + } catch (err) { + if (!(err instanceof errors.SessionLost)) { + throw err; + } + } - await this.connector.close(1001, "Control Quit"); - } + await this.connector.close(1001, "Control Quit"); + } } diff --git a/packages/master/web/util/wslink.jsx b/packages/master/web/util/wslink.jsx index 3ff8e297..68b6f820 100644 --- a/packages/master/web/util/wslink.jsx +++ b/packages/master/web/util/wslink.jsx @@ -7,18 +7,18 @@ let control, controlConnector // Create WS connection to master. Used by all components through the interface exported here. (async () => { - config.finalizeConfigs(); - controlConnector = new ControlConnector( - localStorage.getItem("master_url"), - 10, // Reconnect delay - localStorage.getItem("master_token"), - ); - control = new Control(controlConnector, []); - try { - await controlConnector.connect(); - } catch (err) { - console.log(err) - } + config.finalizeConfigs(); + controlConnector = new ControlConnector( + localStorage.getItem("master_url"), + 10, // Reconnect delay + localStorage.getItem("master_token"), + ); + control = new Control(controlConnector, []); + try { + await controlConnector.connect(); + } catch (err) { + console.log(err) + } })() let listSlaves = createListFunction("listSlaves") @@ -28,107 +28,107 @@ let listRoles = createListFunction("listRoles") let listPermissions = createListFunction("listPermissions", "name") let startInstance = async function ({ instance_id, save = null }) { - return await link.messages.startInstance.send(control, { instance_id, save }) + return await link.messages.startInstance.send(control, { instance_id, save }) } let stopInstance = async function ({ instance_id }) { - return await link.messages.stopInstance.send(control, { instance_id }) + return await link.messages.stopInstance.send(control, { instance_id }) } let createInstance = async function (serialized_config) { - return await link.messages.createInstance.send(control, { serialized_config }); + return await link.messages.createInstance.send(control, { serialized_config }); } let deleteInstance = async function ({ instance_id }) { - return await link.messages.deleteInstance.send(control, { instance_id }); + return await link.messages.deleteInstance.send(control, { instance_id }); } let assignInstance = async function ({ instance_id, slave_id }) { - return await link.messages.assignInstanceCommand.send(control, { - instance_id, - slave_id, - }); + return await link.messages.assignInstanceCommand.send(control, { + instance_id, + slave_id, + }); } let createSave = async function ({ instance_id }) { - return await link.messages.createSave.send(control, { instance_id }); + return await link.messages.createSave.send(control, { instance_id }); } let getInstanceConfig = async function ({ instance_id }) { - return await link.messages.getInstanceConfig.send(control, { instance_id }); + return await link.messages.getInstanceConfig.send(control, { instance_id }); } let setInstanceConfigField = async function ({ instance_id, field, value }) { - return await link.messages.setInstanceConfigField.send(control, { - instance_id, - field, - value: typeof value === "object" ? JSON.stringify(value) : value, - }); + return await link.messages.setInstanceConfigField.send(control, { + instance_id, + field, + value: typeof value === "object" ? JSON.stringify(value) : value, + }); } let setInstanceConfigProp = async function ({ instance_id, field, prop, value }) { - return await link.messages.setInstanceConfigProp.send(control, { - instance_id, - field, - prop, - value, // JSON Object - }); + return await link.messages.setInstanceConfigProp.send(control, { + instance_id, + field, + prop, + value, // JSON Object + }); } let sendRcon = async function ({ instance_id, command }) { - return await link.messages.sendRcon.send(control, { instance_id, command }) + return await link.messages.sendRcon.send(control, { instance_id, command }) } let setInstanceOutputSubscriptions = async function ({ instance_id }) { - return await link.messages.setInstanceOutputSubscriptions.send(control, { instance_ids: [instance_id] }) + return await link.messages.setInstanceOutputSubscriptions.send(control, { instance_ids: [instance_id] }) } let createUser = async function ({ name }) { - return await link.messages.createUser.send(control, { name }) + return await link.messages.createUser.send(control, { name }) } let deleteUser = async function ({ name }) { - return await link.messages.deleteUser.send(control, { name }) + return await link.messages.deleteUser.send(control, { name }) } let setRoles = async function ({ name, roles }) { - return await link.messages.updateUserRoles.send(control, { - name, - roles, - }) + return await link.messages.updateUserRoles.send(control, { + name, + roles, + }) } let createRole = async function ({ name, description, permissions = [] }) { - return await link.messages.createRole.send(control, { name, description, permissions }) + return await link.messages.createRole.send(control, { name, description, permissions }) } let updateRole = async function ({ id, name, description, permissions }) { - return await link.messages.updateRole.send(control, { - id, name, description, permissions - }) + return await link.messages.updateRole.send(control, { + id, name, description, permissions + }) } export { - listSlaves, - listInstances, - listUsers, - createUser, - deleteUser, - listRoles, - setRoles, - createRole, - updateRole, - listPermissions, - startInstance, - stopInstance, - createInstance, - deleteInstance, - assignInstance, - createSave, - getInstanceConfig, - setInstanceConfigField, - setInstanceConfigProp, - sendRcon, - setInstanceOutputSubscriptions, + listSlaves, + listInstances, + listUsers, + createUser, + deleteUser, + listRoles, + setRoles, + createRole, + updateRole, + listPermissions, + startInstance, + stopInstance, + createInstance, + deleteInstance, + assignInstance, + createSave, + getInstanceConfig, + setInstanceConfigField, + setInstanceConfigProp, + sendRcon, + setInstanceOutputSubscriptions, } function createListFunction(name, key) { - return async () => { - return (await link.messages[name].send(control)).list.map(addKey(key || "id")); - } + return async () => { + return (await link.messages[name].send(control)).list.map(addKey(key || "id")); + } } function addKey(key) { - return function (el) { - return { - ...el, - key: el[key] - } - } + return function (el) { + return { + ...el, + key: el[key] + } + } } From 03b7d22ba6bbe6fab4727a8760b4c59111ba0d8b Mon Sep 17 00:00:00 2001 From: Hornwitser Date: Mon, 28 Sep 2020 04:40:54 +0200 Subject: [PATCH 09/12] Use consistent semi-colon placment Add semicolons to web interface code to be consistent with project standard. --- packages/master/web/basename.jsx | 2 +- packages/master/web/components/data-table.jsx | 100 +++++----- packages/master/web/index.jsx | 6 +- packages/master/web/layout/index.jsx | 10 +- packages/master/web/pages/dashboard.jsx | 6 +- .../master/web/pages/instances/instance.jsx | 182 +++++++++--------- .../web/pages/instances/instancesTable.jsx | 24 +-- .../pages/permissions/permissionsTable.jsx | 16 +- packages/master/web/pages/roles/role.jsx | 46 ++--- .../master/web/pages/roles/rolesTable.jsx | 20 +- .../master/web/pages/settings/settings.jsx | 18 +- .../master/web/pages/slaves/slavesTable.jsx | 14 +- packages/master/web/pages/users/user.jsx | 42 ++-- .../master/web/pages/users/usersTable.jsx | 20 +- packages/master/web/util/notify.jsx | 2 +- packages/master/web/util/websocket.jsx | 2 +- packages/master/web/util/wslink.jsx | 82 ++++---- 17 files changed, 296 insertions(+), 296 deletions(-) diff --git a/packages/master/web/basename.jsx b/packages/master/web/basename.jsx index 99b8468a..a44e5ff7 100644 --- a/packages/master/web/basename.jsx +++ b/packages/master/web/basename.jsx @@ -1,6 +1,6 @@ // Calculate basedir of application based on current location and // the provided web_root from master server. -const location = new URL(window.web_root, document.location) +const location = new URL(window.web_root, document.location); const basename = location.pathname !== "/" ? location.pathname : ""; export default basename; diff --git a/packages/master/web/components/data-table.jsx b/packages/master/web/components/data-table.jsx index ef2791b5..7c3239cf 100644 --- a/packages/master/web/components/data-table.jsx +++ b/packages/master/web/components/data-table.jsx @@ -1,6 +1,6 @@ import React, { Component } from "react"; import { Collapse, Row, Col, Modal, Table, Form, Input, Button, Popover } from "antd"; -import PlusOutlined from "@ant-design/icons/PlusOutlined" +import PlusOutlined from "@ant-design/icons/PlusOutlined"; import DeleteOutlined from "@ant-design/icons/DeleteOutlined"; import notify from "../util/notify"; @@ -21,7 +21,7 @@ const { Panel } = Collapse; class DataTable extends Component { constructor(props) { super(props); - if (!this.props.DataFunction) throw new Error("DataFunction not defined") + if (!this.props.DataFunction) throw new Error("DataFunction not defined"); this.state = { pagination: { pageSize: 100, @@ -32,11 +32,11 @@ class DataTable extends Component { tableData: [], showEditModal: false, record: {}, - } + }; } componentDidMount() { - this.getData() + this.getData(); } async getData(pagination, filters, sorter) { @@ -51,12 +51,12 @@ class DataTable extends Component { } sorter = {} */ - pagination = pagination || this.state.pagination - filters = filters || this.state.filters - sorter = sorter || this.state.sorter + pagination = pagination || this.state.pagination; + filters = filters || this.state.filters; + sorter = sorter || this.state.sorter; // console.log(pagination, filters, sorter) - let data = await this.props.DataFunction() + let data = await this.props.DataFunction(); // await fetchApi(this.state.dataUrl, "post", { // database: this.props.Database, // table: this.props.Table, @@ -66,14 +66,14 @@ class DataTable extends Component { // sorter, // recordIdField: this.props.RecordIdField || "Id", // Sort by this // }) - console.log(data) - data = data || {} + console.log(data); + data = data || {}; this.setState({ tableData: this.props.CustomDataFilterFunction ? this.props.CustomDataFilterFunction(data) : data, pagination: { ...pagination, ...data.pagination }, sorter, filters, - }) + }); } showEditModal(record, index) { @@ -81,40 +81,40 @@ class DataTable extends Component { this.setState({ record: record, showEditModal: true, - }) + }); } hideEditModal() { this.setState({ showEditModal: false, inserting: false, record: {} - }) + }); } async onEditFinish(values) { - console.log("Finished editing", values) + console.log("Finished editing", values); if (this.state.inserting) { // Create new record - var status = {} - await this.props.AddRecord.insert(values) + var status = {}; + await this.props.AddRecord.insert(values); } else { // Edit existing record, capable of doing sparse updates - var status = {} - await this.props.Editable.insert(values) + var status = {}; + await this.props.Editable.insert(values); } this.setState({ showEditModal: false, inserting: false, record: {}, - }) + }); // Force refresh of data - this.getData() + this.getData(); } async deleteRecord(record) { - delete record.key + delete record.key; // Delete "null" values as they seem to cause deletes to fail silently when the value is null and field type is float for (let key in record) { - if (record[key] === null) delete record[key] + if (record[key] === null) delete record[key]; } - var status = {} + var status = {}; // await fetchApi(`/api/${this.props.Server}/tableData/record`, "delete", { // database: this.props.Database, // table: this.props.Table, @@ -122,13 +122,13 @@ class DataTable extends Component { // record, // }, undefined, true) - console.log("Deleted record", status) + console.log("Deleted record", status); - if (status.ok) notify("success", status.msg, "success") - if (!status.ok) notify("error", status.msg, "error") + if (status.ok) notify("success", status.msg, "success"); + if (!status.ok) notify("error", status.msg, "error"); // Force refresh of data - this.getData() + this.getData(); } render() { let tableProps = { @@ -141,31 +141,31 @@ class DataTable extends Component { */ let externalOnRow = { ...(this.props.TableProps && this.props.TableProps.onRow && this.props.TableProps.onRow(record, rowIndex)), - } + }; return { onClick: event => { if (event.target.type !== "button") { - console.log("onRow", record, rowIndex) - if (this.props.Editable) this.showEditModal(record, rowIndex) - if (externalOnRow.onClick) externalOnRow.onClick(event) + console.log("onRow", record, rowIndex); + if (this.props.Editable) this.showEditModal(record, rowIndex); + if (externalOnRow.onClick) externalOnRow.onClick(event); } }, onDoubleClick: event => { - if (externalOnRow.onDoubleClick) externalOnRow.onDoubleClick(event) + if (externalOnRow.onDoubleClick) externalOnRow.onDoubleClick(event); }, onContextMenu: event => { - if (externalOnRow.onContextMenu) externalOnRow.onContextMenu(event) + if (externalOnRow.onContextMenu) externalOnRow.onContextMenu(event); }, onMouseEnter: event => { - if (externalOnRow.onMouseEnter) externalOnRow.onMouseEnter(event) + if (externalOnRow.onMouseEnter) externalOnRow.onMouseEnter(event); }, onMouseLeave: event => { - if (externalOnRow.onMouseLeave) externalOnRow.onMouseLeave(event) + if (externalOnRow.onMouseLeave) externalOnRow.onMouseLeave(event); }, - } + }; } - } - let columns = this.props.columns || this.inferColumns(this.state.tableData) + }; + let columns = this.props.columns || this.inferColumns(this.state.tableData); if (this.props.DeleteRecord && !columns.find(x => x.dataIndex === "notInUse")) columns.push({ // Add delete button on the right dataIndex: "notInUse", @@ -176,7 +176,7 @@ class DataTable extends Component { type="primary" danger onClick={() => { - this.deleteRecord(record) + this.deleteRecord(record); }} > Slett permanent @@ -188,7 +188,7 @@ class DataTable extends Component { - }) + }); return <> @@ -207,7 +207,7 @@ class DataTable extends Component { return { ...x, // Add a 4th parameter to the stock render function with all of our table data render: x.render ? (...originalParams) => x.render(...originalParams, this.state.tableData) : undefined - } + }; })} dataSource={this.state.tableData} pagination={this.state.pagination.total > 10 ? this.state.pagination : false} @@ -245,12 +245,12 @@ class DataTable extends Component { (this.state.inserting && this.props.AddRecord && this.props.AddRecord.fields) // Use externally supplied form input fields || this.props.columns.filter && this.props.columns.filter(x => x.dataIndex !== "notInUse") // Generate input fields from external columns || this.inferColumns(this.state.tableData)).map(col => { // Generate input fields from autogenerated columns (only works with existing data) - console.log(this.state.record) + console.log(this.state.record); return {col.renderEdit && col.renderEdit(this.state.record[col.dataIndex], this.state.record, undefined /* Non spec compliant, is supposed to be index of record */, this.state.tableData) || } - + ; }) } @@ -261,24 +261,24 @@ class DataTable extends Component { } - + ; } inferColumns(data) { // Look at the data and find columns and how to display them. Can be overridden by props.Columns if more customization is needed - let columns = [] + let columns = []; data.forEach(row => { Object.keys(row).filter(x => x !== "key").forEach(key => { - let existing = columns.find(col => col.key === key) + let existing = columns.find(col => col.key === key); if (!existing) { columns.push({ key: key, title: key, dataIndex: key, - }) + }); } - }) - }) - return columns + }); + }); + return columns; } } diff --git a/packages/master/web/index.jsx b/packages/master/web/index.jsx index 0cb7c8c5..5e08dc22 100644 --- a/packages/master/web/index.jsx +++ b/packages/master/web/index.jsx @@ -1,7 +1,7 @@ -import "./index.css" +import "./index.css"; -import React from "react" -import ReactDOM from "react-dom" +import React from "react"; +import ReactDOM from "react-dom"; import App from "./components/App"; diff --git a/packages/master/web/layout/index.jsx b/packages/master/web/layout/index.jsx index 5a2900ca..6685dae3 100644 --- a/packages/master/web/layout/index.jsx +++ b/packages/master/web/layout/index.jsx @@ -5,7 +5,7 @@ import { Route, Link, withRouter } from "react-router-dom"; import React, { Component } from "react"; import { Dashboard } from "../pages/dashboard"; import { InstancesTable } from "../pages/instances/instancesTable"; -import { SlavesTable } from "../pages/slaves/slavesTable" +import { SlavesTable } from "../pages/slaves/slavesTable"; import { UsersTable } from "../pages/users/usersTable"; import { RolesTable } from "../pages/roles/rolesTable"; import { PermissionsTable } from "../pages/permissions/permissionsTable"; @@ -35,7 +35,7 @@ class SiteLayout extends Component { } onCollapse() { - this.setState({ collapsed: !this.state.collapsed }) + this.setState({ collapsed: !this.state.collapsed }); } titleCase(text) { @@ -44,10 +44,10 @@ class SiteLayout extends Component { replaceParametersInUrl({ endpoint, params }) { let path = endpoint; - console.log("endpoint", params) + console.log("endpoint", params); Object.keys(params).forEach(key => { - path = path.replace(":" + key, params[key]) - }) + path = path.replace(":" + key, params[key]); + }); return path; } diff --git a/packages/master/web/pages/dashboard.jsx b/packages/master/web/pages/dashboard.jsx index 7fcf6c94..7862eca7 100644 --- a/packages/master/web/pages/dashboard.jsx +++ b/packages/master/web/pages/dashboard.jsx @@ -1,10 +1,10 @@ -import React, {Component} from "react" +import React, {Component} from "react"; export class Dashboard extends Component { constructor(props){ - super(props) + super(props); } render(){ - return

Dashboard

+ return

Dashboard

; } } \ No newline at end of file diff --git a/packages/master/web/pages/instances/instance.jsx b/packages/master/web/pages/instances/instance.jsx index 81024e50..83aa6b2b 100644 --- a/packages/master/web/pages/instances/instance.jsx +++ b/packages/master/web/pages/instances/instance.jsx @@ -1,5 +1,5 @@ -import React, { Component } from "react" -import { Card, Button, Popover, Select, Divider, Input, Form, Col, Row, Checkbox, Space } from "antd" +import React, { Component } from "react"; +import { Card, Button, Popover, Select, Divider, Input, Form, Col, Row, Checkbox, Space } from "antd"; import { listSlaves, listInstances, @@ -12,146 +12,146 @@ import { getInstanceConfig, setInstanceConfigField, sendRcon, -} from "../../util/wslink" -import DataTable from "../../components/data-table" -import notify from "../../util/notify" -import DeleteOutlined from "@ant-design/icons/DeleteOutlined" -import EditOutlined from "@ant-design/icons/EditOutlined" -import PlusOutlined from "@ant-design/icons/PlusOutlined" +} from "../../util/wslink"; +import DataTable from "../../components/data-table"; +import notify from "../../util/notify"; +import DeleteOutlined from "@ant-design/icons/DeleteOutlined"; +import EditOutlined from "@ant-design/icons/EditOutlined"; +import PlusOutlined from "@ant-design/icons/PlusOutlined"; -const { Option } = Select +const { Option } = Select; export class InstanceView extends Component { constructor(props) { - super(props) + super(props); this.state = { instance: {}, slaves: [], logLines: [{ message: "Logviewer. Follows the latest logs if you scroll to the bottom. Does not store logs past the lifetime of this tab" }], - } - this.messagesEndRef = React.createRef() + }; + this.messagesEndRef = React.createRef(); } navigate(url) { this.props.history.push(url); } async componentDidMount() { - let id = this.props.match.params.id + let id = this.props.match.params.id; - await this.getData() + await this.getData(); await setInstanceOutputSubscriptions({ instance_id: Number(id), - }) + }); window.instanceOutputEventHandler = ({ instance_id, output }) => { if (instance_id === Number(id)) { this.setState({ logLines: [...this.state.logLines, output], - }) + }); } // Automatically scroll to bottom on new line. // this.messagesEndRef.current.scrollIntoView({ behavior: 'smooth' }) - } + }; } async getData() { - let id = this.props.match.params.id + let id = this.props.match.params.id; - let instances = await listInstances() - let slaves = await listSlaves() + let instances = await listInstances(); + let slaves = await listSlaves(); this.setState({ instance: instances.find(x => x.id === Number(id)), slaves, - }) + }); - let config = await getInstanceConfig({ instance_id: Number(id) }) - console.log(config) + let config = await getInstanceConfig({ instance_id: Number(id) }); + console.log(config); this.setState({ config - }) + }); } async start() { this.setState({ starting: true, - }) + }); try { await startInstance({ instance_id: this.state.instance.id, save: null, - }) + }); } catch (e) { - notify("Error starting instance", "error", e.message) + notify("Error starting instance", "error", e.message); return this.setState({ starting: false, - }) + }); } - notify("Instance started") + notify("Instance started"); this.setState({ starting: false, - }) - this.getData() + }); + this.getData(); } async stop() { this.setState({ stopping: true, - }) + }); try { await stopInstance({ instance_id: this.state.instance.id, - }) + }); } catch (e) { - notify("Error stopping instance", "error", e.message) + notify("Error stopping instance", "error", e.message); return this.setState({ stopping: false, - }) + }); } - notify("Instance stopped") + notify("Instance stopped"); this.setState({ stopping: false, - }) - this.getData() + }); + this.getData(); } async createSave() { this.setState({ creatingSave: true, - }) + }); try { await createSave({ instance_id: this.state.instance.id, - }) + }); } catch (e) { - notify("Error creating save", "error", e.message) + notify("Error creating save", "error", e.message); return this.setState({ creatingSave: false, - }) + }); } - notify("Save created", "success") + notify("Save created", "success"); this.setState({ creatingSave: false, - }) + }); } async onConfigEditFinish(values) { - console.log("Completed config edit with", values) + console.log("Completed config edit with", values); for (let k in values) { if (values[k] !== this.getInstanceConfigAsKvObject(this.state.config)[k]) { - let value = values[k] - if (typeof value === "boolean") value = value.toString() - console.log("Setting", k, value) + let value = values[k]; + if (typeof value === "boolean") value = value.toString(); + console.log("Setting", k, value); await setInstanceConfigField({ instance_id: this.state.instance.id, field: k, value: value, - }) + }); } } - notify("Set configuration fields", "success") + notify("Set configuration fields", "success"); this.setState({ editingConfig: false - }) - this.getData() + }); + this.getData(); } render() { - console.log(this.state) - let { instance, slaves } = this.state + console.log(this.state); + let { instance, slaves } = this.state; let slave = slaves && slaves.find(x => x.id === instance.assigned_slave); return

{instance.name}

@@ -184,9 +184,9 @@ export class InstanceView extends Component { width: "200px" }} onChange={async newSlaveId => { - let result = await assignInstance({ instance_id: instance.id, slave_id: newSlaveId }) - notify("Assigned to slave", "success") - this.getData() + let result = await assignInstance({ instance_id: instance.id, slave_id: newSlaveId }); + notify("Assigned to slave", "success"); + this.getData(); }} > {this.state.slaves.map(slave =>
+ ; } getInstanceConfigAsKvObject(config) { - let object = {} + let object = {}; for (let group of config.serialized_config.groups) { for (let fieldName in group.fields) { - object[group.name + "." + fieldName] = group.fields[fieldName] + object[group.name + "." + fieldName] = group.fields[fieldName]; } } - return object + return object; } renderConfig(config) { const layout = { @@ -316,33 +316,33 @@ export class InstanceView extends Component { )} - + ; } } function renderDisplayField(value) { if (typeof value === "object") { - return JSON.stringify(value) + return JSON.stringify(value); } if (typeof value === "boolean") { - return + return ; } - return value.toString() + return value.toString(); } function renderFormField(value) { if (typeof value === "object") { - return + return ; } if (typeof value === "boolean") { - return + return ; } - return + return ; } class ObjectInput extends Component { constructor(props) { - super(props) - console.log(this.props) + super(props); + console.log(this.props); /* value: { auto_pause: false, @@ -351,26 +351,26 @@ class ObjectInput extends Component { id: "factorio.settings", onChange: f() */ - this.state = {} + this.state = {}; } onChange(e, key) { if (e.target.type === "checkbox") { // if (e.target.checked !== undefined) { // Its a checkbox, set value to true/false - let value = { ...this.props.value } - value[key] = e.target.checked || false - this.props.onChange(value) + let value = { ...this.props.value }; + value[key] = e.target.checked || false; + this.props.onChange(value); } else if (e.target.type === "text") { // } else if (e.target.value !== undefined) { // its probably a text input - let value = { ...this.props.value } - value[key] = e.target.value || "" - this.props.onChange(value) + let value = { ...this.props.value }; + value[key] = e.target.value || ""; + this.props.onChange(value); } } render() { - let { value } = this.props - let ret = [] + let { value } = this.props; + let ret = []; for (let key in value) { if (typeof value[key] === "boolean") { ret.push( {key} - ) + ); } else if (typeof value[key] === "string") { ret.push(
this.onChange(e, key)} />
- ) + ); } } ret.push( this.setState({ newInput: e.target.value })} /> } @@ -414,16 +414,16 @@ class ObjectInput extends Component { > Add property - ) - return {ret} + ); + return {ret}; } } class ConfigFormItem extends Component { constructor(props) { - super(props) + super(props); } render() { - let { field, group, editingConfig } = this.props + let { field, group, editingConfig } = this.props; return + ; } } diff --git a/packages/master/web/pages/instances/instancesTable.jsx b/packages/master/web/pages/instances/instancesTable.jsx index d73e4f88..dbdecdc6 100644 --- a/packages/master/web/pages/instances/instancesTable.jsx +++ b/packages/master/web/pages/instances/instancesTable.jsx @@ -1,12 +1,12 @@ -import React, { Component } from "react" -import { Card } from "antd" -import { listSlaves, listInstances, createInstance } from "../../util/wslink" -import DataTable from "../../components/data-table" -const config = require("@clusterio/lib/config") +import React, { Component } from "react"; +import { Card } from "antd"; +import { listSlaves, listInstances, createInstance } from "../../util/wslink"; +import DataTable from "../../components/data-table"; +const config = require("@clusterio/lib/config"); export class InstancesTable extends Component { constructor(props) { - super(props) + super(props); } navigate(url) { this.props.history.push(url); @@ -23,11 +23,11 @@ export class InstancesTable extends Component { insert: async args => { let instanceConfig = new config.InstanceConfig(); await instanceConfig.init(); - console.log("Base config", instanceConfig) + console.log("Base config", instanceConfig); instanceConfig.set("instance.name", args.name); let serialized_config = instanceConfig.serialize(); - let response = await createInstance(serialized_config) - console.log("Created instance", response) + let response = await createInstance(serialized_config); + console.log("Created instance", response); } }} DataFunction={listInstances} @@ -35,12 +35,12 @@ export class InstancesTable extends Component { onRow: (record, rowIndex) => { return { onClick: event => { - this.navigate(`/instances/${record.id}/view`) + this.navigate(`/instances/${record.id}/view`); } - } + }; } }} /> - + ; } } diff --git a/packages/master/web/pages/permissions/permissionsTable.jsx b/packages/master/web/pages/permissions/permissionsTable.jsx index 8bcf995c..cb24533c 100644 --- a/packages/master/web/pages/permissions/permissionsTable.jsx +++ b/packages/master/web/pages/permissions/permissionsTable.jsx @@ -1,11 +1,11 @@ -import React, { Component } from "react" -import { Card } from "antd" -import { listSlaves, listInstances, listPermissions } from "../../util/wslink" -import DataTable from "../../components/data-table" +import React, { Component } from "react"; +import { Card } from "antd"; +import { listSlaves, listInstances, listPermissions } from "../../util/wslink"; +import DataTable from "../../components/data-table"; export class PermissionsTable extends Component { constructor(props) { - super(props) + super(props); } navigate(url) { this.props.history.push(url); @@ -19,12 +19,12 @@ export class PermissionsTable extends Component { onRow: (record, rowIndex) => { return { onClick: event => { - this.navigate(`/permissions/${record.id}/view`) + this.navigate(`/permissions/${record.id}/view`); } - } + }; } }} /> - + ; } } diff --git a/packages/master/web/pages/roles/role.jsx b/packages/master/web/pages/roles/role.jsx index 625a25e0..b022ff46 100644 --- a/packages/master/web/pages/roles/role.jsx +++ b/packages/master/web/pages/roles/role.jsx @@ -1,7 +1,7 @@ -import React, { Component } from "react" +import React, { Component } from "react"; -import { Card, Button, Popover, Select, Transfer } from "antd" -import DeleteOutlined from "@ant-design/icons/DeleteOutlined" +import { Card, Button, Popover, Select, Transfer } from "antd"; +import DeleteOutlined from "@ant-design/icons/DeleteOutlined"; import { listSlaves, @@ -21,36 +21,36 @@ import { setRoles, listPermissions, updateRole, -} from "../../util/wslink" -import DataTable from "../../components/data-table" -import notify from "../../util/notify" +} from "../../util/wslink"; +import DataTable from "../../components/data-table"; +import notify from "../../util/notify"; -const { Option } = Select +const { Option } = Select; export class RoleView extends Component { constructor(props) { - super(props) + super(props); this.state = { role: {} - } - this.messagesEndRef = React.createRef() + }; + this.messagesEndRef = React.createRef(); } navigate(url) { this.props.history.push(url); } async componentDidMount() { - await this.getData() + await this.getData(); } async getData() { - let id = this.props.match.params.id + let id = this.props.match.params.id; - let roles = await listRoles() - let permissions = await listPermissions() + let roles = await listRoles(); + let permissions = await listPermissions(); this.setState({ role: roles.find(x => x.id === Number(id)), permissions, - }) + }); } async handleChange(targetKeys) { this.setState({ @@ -62,12 +62,12 @@ export class RoleView extends Component { let response = await updateRole({ ...this.state.role, permissions: targetKeys, - }) - console.log("Updated user roles", response) + }); + console.log("Updated user roles", response); } render() { - console.log(this.state) - let { role, permissions } = this.state + console.log(this.state); + let { role, permissions } = this.state; return { - await deleteUser({ role: role.name }) - notify("Deleted role " + role.name, "success") - this.navigate("/roles") + await deleteUser({ role: role.name }); + notify("Deleted role " + role.name, "success"); + this.navigate("/roles"); }} > Delete this role permanently @@ -108,6 +108,6 @@ export class RoleView extends Component { onChange={this.handleChange.bind(this)} render={item => item.name} /> - + ; } } diff --git a/packages/master/web/pages/roles/rolesTable.jsx b/packages/master/web/pages/roles/rolesTable.jsx index 6dd3af92..689ab45d 100644 --- a/packages/master/web/pages/roles/rolesTable.jsx +++ b/packages/master/web/pages/roles/rolesTable.jsx @@ -1,11 +1,11 @@ -import React, { Component } from "react" -import { Card } from "antd" -import { listSlaves, listInstances, listRoles, createRole } from "../../util/wslink" -import DataTable from "../../components/data-table" +import React, { Component } from "react"; +import { Card } from "antd"; +import { listSlaves, listInstances, listRoles, createRole } from "../../util/wslink"; +import DataTable from "../../components/data-table"; export class RolesTable extends Component { constructor(props) { - super(props) + super(props); } navigate(url) { this.props.history.push(url); @@ -23,8 +23,8 @@ export class RolesTable extends Component { title: "Description" }], insert: async args => { - let response = await createRole({name: args.name, description: args.description}) - console.log("Created role",response) + let response = await createRole({name: args.name, description: args.description}); + console.log("Created role",response); } }} DataFunction={listRoles} @@ -32,12 +32,12 @@ export class RolesTable extends Component { onRow: (record, rowIndex) => { return { onClick: event => { - this.navigate(`/roles/${record.id}/view`) + this.navigate(`/roles/${record.id}/view`); } - } + }; } }} /> - + ; } } diff --git a/packages/master/web/pages/settings/settings.jsx b/packages/master/web/pages/settings/settings.jsx index e725d01b..9e42a831 100644 --- a/packages/master/web/pages/settings/settings.jsx +++ b/packages/master/web/pages/settings/settings.jsx @@ -1,5 +1,5 @@ -import React, { Component } from "react" -import { Card, Button, Input, Form } from "antd" +import React, { Component } from "react"; +import { Card, Button, Input, Form } from "antd"; const layout = { labelCol: { @@ -18,16 +18,16 @@ const tailLayout = { export class Settings extends Component { constructor(props) { - super(props) + super(props); this.state = { role: {} - } + }; } navigate(url) { this.props.history.push(url); } render() { - console.log(this.state) + console.log(this.state); return

Web interface settings

{ - console.log("Saving settings",values) + console.log("Saving settings",values); for(let key of Object.keys(values)){ - localStorage.setItem(key, values[key].replace("https://", "wss://").replace("http://", "ws://")) + localStorage.setItem(key, values[key].replace("https://", "wss://").replace("http://", "ws://")); } // Force refresh to apply changes - document.location = document.location + document.location = document.location; }} > -
+ ; } } diff --git a/packages/master/web/pages/slaves/slavesTable.jsx b/packages/master/web/pages/slaves/slavesTable.jsx index f0450be1..38856bf2 100644 --- a/packages/master/web/pages/slaves/slavesTable.jsx +++ b/packages/master/web/pages/slaves/slavesTable.jsx @@ -1,11 +1,11 @@ -import React, { Component } from "react" +import React, { Component } from "react"; import { Card } from "antd"; -import { listSlaves, listInstances } from "../../util/wslink" -import DataTable from "../../components/data-table" +import { listSlaves, listInstances } from "../../util/wslink"; +import DataTable from "../../components/data-table"; export class SlavesTable extends Component { constructor(props) { - super(props) + super(props); } navigate(url) { this.props.history.push(url); @@ -19,12 +19,12 @@ export class SlavesTable extends Component { onRow: (record, rowIndex) => { return { onClick: event => { - this.navigate(`/slaves/${record.id}/view`) + this.navigate(`/slaves/${record.id}/view`); } - } + }; } }} /> - + ; } } diff --git a/packages/master/web/pages/users/user.jsx b/packages/master/web/pages/users/user.jsx index 9989ab27..ad674df7 100644 --- a/packages/master/web/pages/users/user.jsx +++ b/packages/master/web/pages/users/user.jsx @@ -1,41 +1,41 @@ -import React, { Component } from "react" +import React, { Component } from "react"; import { Card, Button, Popover, Select, Transfer } from "antd"; import { deleteUser, listUsers, listRoles, setRoles, -} from "../../util/wslink" -import DataTable from "../../components/data-table" -import notify from "../../util/notify" -import DeleteOutlined from "@ant-design/icons/DeleteOutlined" +} from "../../util/wslink"; +import DataTable from "../../components/data-table"; +import notify from "../../util/notify"; +import DeleteOutlined from "@ant-design/icons/DeleteOutlined"; -const { Option } = Select +const { Option } = Select; export class UserView extends Component { constructor(props) { - super(props) + super(props); this.state = { user: {} - } + }; this.messagesEndRef = React.createRef(); } navigate(url) { this.props.history.push(url); } async componentDidMount() { - await this.getData() + await this.getData(); } async getData() { - let name = this.props.match.params.id + let name = this.props.match.params.id; - let users = await listUsers() - let roles = await listRoles() + let users = await listUsers(); + let roles = await listRoles(); this.setState({ user: users.find(x => x.name === name), roles, - }) + }); } async handleChange(targetKeys) { this.setState({ @@ -47,12 +47,12 @@ export class UserView extends Component { let response = await setRoles({ name: this.state.user.name, roles: targetKeys, - }) - console.log("Updated user roles",response) + }); + console.log("Updated user roles",response); }; render() { - console.log(this.state) - let { user, roles } = this.state + console.log(this.state); + let { user, roles } = this.state; return

{user.name}

Assign roles

@@ -71,9 +71,9 @@ export class UserView extends Component { type="primary" danger onClick={async () => { - await deleteUser({ name: user.name }) - notify("Deleted user " + user.name, "success") - this.navigate("/users") + await deleteUser({ name: user.name }); + notify("Deleted user " + user.name, "success"); + this.navigate("/users"); }} > Delete this user from the cluster @@ -85,6 +85,6 @@ export class UserView extends Component { -
+ ; } } diff --git a/packages/master/web/pages/users/usersTable.jsx b/packages/master/web/pages/users/usersTable.jsx index 7f22e4a1..7a25158a 100644 --- a/packages/master/web/pages/users/usersTable.jsx +++ b/packages/master/web/pages/users/usersTable.jsx @@ -1,11 +1,11 @@ -import React, { Component } from "react" -import { Card } from "antd" -import { listSlaves, listInstances, listUsers, createUser } from "../../util/wslink" -import DataTable from "../../components/data-table" +import React, { Component } from "react"; +import { Card } from "antd"; +import { listSlaves, listInstances, listUsers, createUser } from "../../util/wslink"; +import DataTable from "../../components/data-table"; export class UsersTable extends Component { constructor(props) { - super(props) + super(props); } navigate(url) { this.props.history.push(url); @@ -20,8 +20,8 @@ export class UsersTable extends Component { title: "Name" }], insert: async args => { - let response = await createUser({name: args.name}) - console.log("Created user",response) + let response = await createUser({name: args.name}); + console.log("Created user",response); } }} DataFunction={listUsers} @@ -29,12 +29,12 @@ export class UsersTable extends Component { onRow: (record, rowIndex) => { return { onClick: event => { - this.navigate(`/users/${record.name}/view`) + this.navigate(`/users/${record.name}/view`); } - } + }; } }} /> - + ; } } diff --git a/packages/master/web/util/notify.jsx b/packages/master/web/util/notify.jsx index 40801c98..034f03b1 100644 --- a/packages/master/web/util/notify.jsx +++ b/packages/master/web/util/notify.jsx @@ -11,5 +11,5 @@ export default function notify(message, type = "info", description) { description, placement: "bottomRight", }); - if (typeof message !== "string") console.error(message) + if (typeof message !== "string") console.error(message); } diff --git a/packages/master/web/util/websocket.jsx b/packages/master/web/util/websocket.jsx index 08fb435c..6a05c142 100644 --- a/packages/master/web/util/websocket.jsx +++ b/packages/master/web/util/websocket.jsx @@ -75,7 +75,7 @@ export class Control extends link.Link { async instanceOutputEventHandler(message) { let { instance_id, output } = message.data; console.log(formatOutput(output)); - window.instanceOutputEventHandler && window.instanceOutputEventHandler({instance_id, output}) + window.instanceOutputEventHandler && window.instanceOutputEventHandler({instance_id, output}); } async debugWsMessageEventHandler(message) { diff --git a/packages/master/web/util/wslink.jsx b/packages/master/web/util/wslink.jsx index 68b6f820..97f35561 100644 --- a/packages/master/web/util/wslink.jsx +++ b/packages/master/web/util/wslink.jsx @@ -1,9 +1,9 @@ -import { Control, ControlConnector } from "./../util/websocket" -import * as errors from "@clusterio/lib/errors" -import * as link from "@clusterio/lib/link" -import config from "@clusterio/lib/config" +import { Control, ControlConnector } from "./../util/websocket"; +import * as errors from "@clusterio/lib/errors"; +import * as link from "@clusterio/lib/link"; +import config from "@clusterio/lib/config"; -let control, controlConnector +let control, controlConnector; // Create WS connection to master. Used by all components through the interface exported here. (async () => { @@ -17,47 +17,47 @@ let control, controlConnector try { await controlConnector.connect(); } catch (err) { - console.log(err) + console.log(err); } -})() +})(); -let listSlaves = createListFunction("listSlaves") -let listInstances = createListFunction("listInstances") -let listUsers = createListFunction("listUsers", "name") -let listRoles = createListFunction("listRoles") -let listPermissions = createListFunction("listPermissions", "name") +let listSlaves = createListFunction("listSlaves"); +let listInstances = createListFunction("listInstances"); +let listUsers = createListFunction("listUsers", "name"); +let listRoles = createListFunction("listRoles"); +let listPermissions = createListFunction("listPermissions", "name"); let startInstance = async function ({ instance_id, save = null }) { - return await link.messages.startInstance.send(control, { instance_id, save }) -} + return await link.messages.startInstance.send(control, { instance_id, save }); +}; let stopInstance = async function ({ instance_id }) { - return await link.messages.stopInstance.send(control, { instance_id }) -} + return await link.messages.stopInstance.send(control, { instance_id }); +}; let createInstance = async function (serialized_config) { return await link.messages.createInstance.send(control, { serialized_config }); -} +}; let deleteInstance = async function ({ instance_id }) { return await link.messages.deleteInstance.send(control, { instance_id }); -} +}; let assignInstance = async function ({ instance_id, slave_id }) { return await link.messages.assignInstanceCommand.send(control, { instance_id, slave_id, }); -} +}; let createSave = async function ({ instance_id }) { return await link.messages.createSave.send(control, { instance_id }); -} +}; let getInstanceConfig = async function ({ instance_id }) { return await link.messages.getInstanceConfig.send(control, { instance_id }); -} +}; let setInstanceConfigField = async function ({ instance_id, field, value }) { return await link.messages.setInstanceConfigField.send(control, { instance_id, field, value: typeof value === "object" ? JSON.stringify(value) : value, }); -} +}; let setInstanceConfigProp = async function ({ instance_id, field, prop, value }) { return await link.messages.setInstanceConfigProp.send(control, { instance_id, @@ -65,35 +65,35 @@ let setInstanceConfigProp = async function ({ instance_id, field, prop, value }) prop, value, // JSON Object }); -} +}; let sendRcon = async function ({ instance_id, command }) { - return await link.messages.sendRcon.send(control, { instance_id, command }) -} + return await link.messages.sendRcon.send(control, { instance_id, command }); +}; let setInstanceOutputSubscriptions = async function ({ instance_id }) { - return await link.messages.setInstanceOutputSubscriptions.send(control, { instance_ids: [instance_id] }) -} + return await link.messages.setInstanceOutputSubscriptions.send(control, { instance_ids: [instance_id] }); +}; let createUser = async function ({ name }) { - return await link.messages.createUser.send(control, { name }) -} + return await link.messages.createUser.send(control, { name }); +}; let deleteUser = async function ({ name }) { - return await link.messages.deleteUser.send(control, { name }) -} + return await link.messages.deleteUser.send(control, { name }); +}; let setRoles = async function ({ name, roles }) { return await link.messages.updateUserRoles.send(control, { name, roles, - }) -} + }); +}; let createRole = async function ({ name, description, permissions = [] }) { - return await link.messages.createRole.send(control, { name, description, permissions }) -} + return await link.messages.createRole.send(control, { name, description, permissions }); +}; let updateRole = async function ({ id, name, description, permissions }) { return await link.messages.updateRole.send(control, { id, name, description, permissions - }) -} + }); +}; export { listSlaves, @@ -117,18 +117,18 @@ export { setInstanceConfigProp, sendRcon, setInstanceOutputSubscriptions, -} +}; function createListFunction(name, key) { return async () => { return (await link.messages[name].send(control)).list.map(addKey(key || "id")); - } + }; } function addKey(key) { return function (el) { return { ...el, key: el[key] - } - } + }; + }; } From bccc89fa0beb2e29e5e158a89568e88feb851b42 Mon Sep 17 00:00:00 2001 From: Hornwitser Date: Mon, 28 Sep 2020 05:36:14 +0200 Subject: [PATCH 10/12] Finish linting web interface Fix remaining linter errors detected in web interface code. --- .eslintrc.js | 17 +++- packages/master/web/components/data-table.jsx | 74 ++++++++-------- packages/master/web/layout/index.jsx | 6 +- packages/master/web/pages/dashboard.jsx | 5 +- .../master/web/pages/instances/instance.jsx | 85 +++++++++++-------- .../web/pages/instances/instancesTable.jsx | 20 ++--- .../pages/permissions/permissionsTable.jsx | 16 ++-- packages/master/web/pages/roles/role.jsx | 23 +++-- .../master/web/pages/roles/rolesTable.jsx | 22 ++--- .../master/web/pages/settings/settings.jsx | 12 +-- .../master/web/pages/slaves/slavesTable.jsx | 16 ++-- packages/master/web/pages/users/user.jsx | 13 ++- .../master/web/pages/users/usersTable.jsx | 20 ++--- packages/master/web/util/notify.jsx | 7 +- packages/master/web/util/websocket.jsx | 10 ++- packages/master/web/util/wslink.jsx | 42 ++++----- 16 files changed, 201 insertions(+), 187 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index 8cc36d30..587057d2 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -2,7 +2,6 @@ module.exports = { "env": { "node": true, - "browser": true, "commonjs": true, "es6": true, }, @@ -21,6 +20,18 @@ module.exports = { "no-invalid-this": "off", }, }, + { + "files": ["packages/master/web/**/*.jsx"], + "env": { + "browser": true, + }, + "parserOptions": { + "sourceType": "module", + "ecmaFeatures": { + "jsx": true, + }, + }, + }, ], "rules": { @@ -44,6 +55,8 @@ module.exports = { { "arrays": "always-multiline", "objects": "always-multiline", + "imports": "always-multiline", + "exports": "always-multiline", "functions": "only-multiline", }, ], @@ -229,7 +242,7 @@ module.exports = { "semi": "error", "semi-spacing": "error", "semi-style": "off", - "sort-imports": "error", + "sort-imports": "off", "sort-keys": "off", "sort-vars": "error", "space-before-blocks": "warn", diff --git a/packages/master/web/components/data-table.jsx b/packages/master/web/components/data-table.jsx index 7c3239cf..b43d3b53 100644 --- a/packages/master/web/components/data-table.jsx +++ b/packages/master/web/components/data-table.jsx @@ -10,7 +10,7 @@ const { Panel } = Collapse; /** * Display data in table. Allows for editing data by clicking rows in the table. * Basic usage: - * + * * DataFunction - String, corresponds to export from util/wslink. Same as ws message name. * columns - Array of objects, optional, same as
. Note the lowercase c * Editable - Boolean - Allow editing @@ -25,7 +25,7 @@ class DataTable extends Component { this.state = { pagination: { pageSize: 100, - current: 1 + current: 1, }, filters: this.props.Filters, sorter: {}, @@ -41,16 +41,16 @@ class DataTable extends Component { async getData(pagination, filters, sorter) { /* - pagination = { - pageSize: 10, // items per page - current: 1, // page number - total: 123, // Total amount of items - } - filters = { - ReportId: 123 - } - sorter = {} - */ + pagination = { + pageSize: 10, // items per page + current: 1, // page number + total: 123, // Total amount of items + } + filters = { + ReportId: 123 + } + sorter = {} + */ pagination = pagination || this.state.pagination; filters = filters || this.state.filters; sorter = sorter || this.state.sorter; @@ -77,27 +77,28 @@ class DataTable extends Component { } showEditModal(record, index) { - if (!this.state.showEditModal) + if (!this.state.showEditModal) { this.setState({ record: record, showEditModal: true, }); + } } + hideEditModal() { this.setState({ showEditModal: false, inserting: false, - record: {} + record: {}, }); } + async onEditFinish(values) { console.log("Finished editing", values); if (this.state.inserting) { // Create new record - var status = {}; await this.props.AddRecord.insert(values); } else { // Edit existing record, capable of doing sparse updates - var status = {}; await this.props.Editable.insert(values); } this.setState({ @@ -108,6 +109,7 @@ class DataTable extends Component { // Force refresh of data this.getData(); } + async deleteRecord(record) { delete record.key; // Delete "null" values as they seem to cause deletes to fail silently when the value is null and field type is float @@ -130,15 +132,16 @@ class DataTable extends Component { // Force refresh of data this.getData(); } + render() { let tableProps = { ...this.props.TableProps || {}, onRow: (record, rowIndex) => { /* - To allow for extending functionality, we take a TableProps argument from props and pass it through to the Table component. - Since we are also using onRow internaly here, we handle the externally provided events ourselves by passing along the event - object. This way the end user isn't affected by our event handlers. - */ + To allow for extending functionality, we take a TableProps argument from props and pass it through to the Table component. + Since we are also using onRow internaly here, we handle the externally provided events ourselves by passing along the event + object. This way the end user isn't affected by our event handlers. + */ let externalOnRow = { ...(this.props.TableProps && this.props.TableProps.onRow && this.props.TableProps.onRow(record, rowIndex)), }; @@ -163,7 +166,7 @@ class DataTable extends Component { if (externalOnRow.onMouseLeave) externalOnRow.onMouseLeave(event); }, }; - } + }, }; let columns = this.props.columns || this.inferColumns(this.state.tableData); if (this.props.DeleteRecord && !columns.find(x => x.dataIndex === "notInUse")) columns.push({ @@ -179,7 +182,7 @@ class DataTable extends Component { this.deleteRecord(record); }} > - Slett permanent + Slett permanent } trigger="click" @@ -187,7 +190,7 @@ class DataTable extends Component { - + , }); return <> @@ -195,27 +198,25 @@ class DataTable extends Component {
{ - return { - ...x, // Add a 4th parameter to the stock render function with all of our table data - render: x.render ? (...originalParams) => x.render(...originalParams, this.state.tableData) : undefined - }; - })} + columns={columns.map(x => ({ + ...x, // Add a 4th parameter to the stock render function with all of our table data + render: x.render ? (...originalParams) => x.render(...originalParams, this.state.tableData) : undefined, + }))} dataSource={this.state.tableData} pagination={this.state.pagination.total > 10 ? this.state.pagination : false} onChange={this.getData.bind(this)} /> {this.props.AddRecord && } @@ -243,8 +244,8 @@ class DataTable extends Component { ( (this.state.inserting && this.props.AddRecord && this.props.AddRecord.fields) // Use externally supplied form input fields - || this.props.columns.filter && this.props.columns.filter(x => x.dataIndex !== "notInUse") // Generate input fields from external columns - || this.inferColumns(this.state.tableData)).map(col => { // Generate input fields from autogenerated columns (only works with existing data) + || this.props.columns.filter && this.props.columns.filter(x => x.dataIndex !== "notInUse") // Generate input fields from external columns + || this.inferColumns(this.state.tableData)).map(col => { // Generate input fields from autogenerated columns (only works with existing data) console.log(this.state.record); return {col.renderEdit && col.renderEdit(this.state.record[col.dataIndex], this.state.record, undefined /* Non spec compliant, is supposed to be index of record */, this.state.tableData) || ; } + inferColumns(data) { // Look at the data and find columns and how to display them. Can be overridden by props.Columns if more customization is needed let columns = []; diff --git a/packages/master/web/layout/index.jsx b/packages/master/web/layout/index.jsx index 6685dae3..76f6ce24 100644 --- a/packages/master/web/layout/index.jsx +++ b/packages/master/web/layout/index.jsx @@ -30,7 +30,7 @@ class SiteLayout extends Component { setTags: [], location, siteSettings: {}, - factoryModel: [] + factoryModel: [], }; } @@ -153,9 +153,9 @@ class SiteLayout extends Component {
- Clusterio 2.0 web interface https://github.com/clusterio + Clusterio 2.0 web interface https://github.com/clusterio
diff --git a/packages/master/web/pages/dashboard.jsx b/packages/master/web/pages/dashboard.jsx index 7862eca7..4089dae5 100644 --- a/packages/master/web/pages/dashboard.jsx +++ b/packages/master/web/pages/dashboard.jsx @@ -1,10 +1,7 @@ import React, {Component} from "react"; export class Dashboard extends Component { - constructor(props){ - super(props); - } render(){ return

Dashboard

; } -} \ No newline at end of file +} diff --git a/packages/master/web/pages/instances/instance.jsx b/packages/master/web/pages/instances/instance.jsx index 83aa6b2b..7d85ab16 100644 --- a/packages/master/web/pages/instances/instance.jsx +++ b/packages/master/web/pages/instances/instance.jsx @@ -31,9 +31,11 @@ export class InstanceView extends Component { }; this.messagesEndRef = React.createRef(); } + navigate(url) { this.props.history.push(url); } + async componentDidMount() { let id = this.props.match.params.id; @@ -52,6 +54,7 @@ export class InstanceView extends Component { // this.messagesEndRef.current.scrollIntoView({ behavior: 'smooth' }) }; } + async getData() { let id = this.props.match.params.id; @@ -66,9 +69,10 @@ export class InstanceView extends Component { let config = await getInstanceConfig({ instance_id: Number(id) }); console.log(config); this.setState({ - config + config, }); } + async start() { this.setState({ starting: true, @@ -80,9 +84,10 @@ export class InstanceView extends Component { }); } catch (e) { notify("Error starting instance", "error", e.message); - return this.setState({ + this.setState({ starting: false, }); + return; } notify("Instance started"); this.setState({ @@ -90,6 +95,7 @@ export class InstanceView extends Component { }); this.getData(); } + async stop() { this.setState({ stopping: true, @@ -100,9 +106,10 @@ export class InstanceView extends Component { }); } catch (e) { notify("Error stopping instance", "error", e.message); - return this.setState({ + this.setState({ stopping: false, }); + return; } notify("Instance stopped"); this.setState({ @@ -110,6 +117,7 @@ export class InstanceView extends Component { }); this.getData(); } + async createSave() { this.setState({ creatingSave: true, @@ -120,15 +128,17 @@ export class InstanceView extends Component { }); } catch (e) { notify("Error creating save", "error", e.message); - return this.setState({ + this.setState({ creatingSave: false, }); + return; } notify("Save created", "success"); this.setState({ creatingSave: false, }); } + async onConfigEditFinish(values) { console.log("Completed config edit with", values); for (let k in values) { @@ -145,10 +155,11 @@ export class InstanceView extends Component { } notify("Set configuration fields", "success"); this.setState({ - editingConfig: false + editingConfig: false, }); this.getData(); } + render() { console.log(this.state); let { instance, slaves } = this.state; @@ -162,26 +173,26 @@ export class InstanceView extends Component { type="primary" onClick={this.start.bind(this)} > - Start server + Start server } {instance.status !== "stopped" && } {instance.status !== "running" && } { let result = await assignInstance({ instance_id: instance.id, slave_id: newSlaveId }); @@ -198,7 +209,7 @@ export class InstanceView extends Component { type={instance.status === "unassigned" ? "primary" : "default"} > - Delete this instance permanently + Delete this instance permanently } trigger="click" @@ -224,16 +235,16 @@ export class InstanceView extends Component {
; } + getInstanceConfigAsKvObject(config) { let object = {}; for (let group of config.serialized_config.groups) { - for (let fieldName in group.fields) { + for (let fieldName of Object.keys(group.fields)) { object[group.name + "." + fieldName] = group.fields[fieldName]; } } return object; } + renderConfig(config) { const layout = { labelCol: { @@ -291,7 +304,7 @@ export class InstanceView extends Component { {this.state.editingConfig ? : @@ -306,10 +319,10 @@ export class InstanceView extends Component { // orientation="left" >{group.name} {/* {Object.keys(group.fields).map(field => <> - {field}: - {JSON.stringify(group.fields[field])} -
- )} */} + {field}: + {JSON.stringify(group.fields[field])} +
+ )} */} {console.log(group)} {Object.keys(group.fields).map(field => )} @@ -344,15 +357,16 @@ class ObjectInput extends Component { super(props); console.log(this.props); /* - value: { - auto_pause: false, - tags: ["clusterio"] - }, - id: "factorio.settings", - onChange: f() - */ + value: { + auto_pause: false, + tags: ["clusterio"] + }, + id: "factorio.settings", + onChange: f() + */ this.state = {}; } + onChange(e, key) { if (e.target.type === "checkbox") { // if (e.target.checked !== undefined) { @@ -368,6 +382,7 @@ class ObjectInput extends Component { this.props.onChange(value); } } + render() { let { value } = this.props; let ret = []; @@ -418,10 +433,8 @@ class ObjectInput extends Component { return {ret}; } } + class ConfigFormItem extends Component { - constructor(props) { - super(props); - } render() { let { field, group, editingConfig } = this.props; return

Instances

@@ -18,7 +16,7 @@ export class InstancesTable extends Component { AddRecord={{ fields: [{ dataIndex: "name", - title: "Name" + title: "Name", }], insert: async args => { let instanceConfig = new config.InstanceConfig(); @@ -28,17 +26,15 @@ export class InstancesTable extends Component { let serialized_config = instanceConfig.serialize(); let response = await createInstance(serialized_config); console.log("Created instance", response); - } + }, }} DataFunction={listInstances} TableProps={{ - onRow: (record, rowIndex) => { - return { - onClick: event => { - this.navigate(`/instances/${record.id}/view`); - } - }; - } + onRow: (record, rowIndex) => ({ + onClick: event => { + this.navigate(`/instances/${record.id}/view`); + }, + }), }} /> ; diff --git a/packages/master/web/pages/permissions/permissionsTable.jsx b/packages/master/web/pages/permissions/permissionsTable.jsx index cb24533c..a282b504 100644 --- a/packages/master/web/pages/permissions/permissionsTable.jsx +++ b/packages/master/web/pages/permissions/permissionsTable.jsx @@ -4,25 +4,21 @@ import { listSlaves, listInstances, listPermissions } from "../../util/wslink"; import DataTable from "../../components/data-table"; export class PermissionsTable extends Component { - constructor(props) { - super(props); - } navigate(url) { this.props.history.push(url); } + render() { return

Permissions

{ - return { - onClick: event => { - this.navigate(`/permissions/${record.id}/view`); - } - }; - } + onRow: (record, rowIndex) => ({ + onClick: event => { + this.navigate(`/permissions/${record.id}/view`); + }, + }), }} />
; diff --git a/packages/master/web/pages/roles/role.jsx b/packages/master/web/pages/roles/role.jsx index b022ff46..66e3adc6 100644 --- a/packages/master/web/pages/roles/role.jsx +++ b/packages/master/web/pages/roles/role.jsx @@ -31,16 +31,19 @@ export class RoleView extends Component { constructor(props) { super(props); this.state = { - role: {} + role: {}, }; this.messagesEndRef = React.createRef(); } + navigate(url) { this.props.history.push(url); } + async componentDidMount() { await this.getData(); } + async getData() { let id = this.props.match.params.id; @@ -52,12 +55,13 @@ export class RoleView extends Component { permissions, }); } + async handleChange(targetKeys) { this.setState({ role: { ...this.state.role, - permissions: targetKeys - } + permissions: targetKeys, + }, }); let response = await updateRole({ ...this.state.role, @@ -65,6 +69,7 @@ export class RoleView extends Component { }); console.log("Updated user roles", response); } + render() { console.log(this.state); let { role, permissions } = this.state; @@ -80,7 +85,7 @@ export class RoleView extends Component { this.navigate("/roles"); }} > - Delete this role permanently + Delete this role permanently } trigger="click" @@ -93,11 +98,11 @@ export class RoleView extends Component {

Assign roles

Roles

@@ -17,25 +15,23 @@ export class RolesTable extends Component { AddRecord={{ fields: [{ dataIndex: "name", - title: "Name" + title: "Name", },{ dataIndex: "description", - title: "Description" + title: "Description", }], insert: async args => { let response = await createRole({name: args.name, description: args.description}); console.log("Created role",response); - } + }, }} DataFunction={listRoles} TableProps={{ - onRow: (record, rowIndex) => { - return { - onClick: event => { - this.navigate(`/roles/${record.id}/view`); - } - }; - } + onRow: (record, rowIndex) => ({ + onClick: event => { + this.navigate(`/roles/${record.id}/view`); + }, + }), }} /> ; diff --git a/packages/master/web/pages/settings/settings.jsx b/packages/master/web/pages/settings/settings.jsx index 9e42a831..2b1460b7 100644 --- a/packages/master/web/pages/settings/settings.jsx +++ b/packages/master/web/pages/settings/settings.jsx @@ -20,12 +20,14 @@ export class Settings extends Component { constructor(props) { super(props); this.state = { - role: {} + role: {}, }; } + navigate(url) { this.props.history.push(url); } + render() { console.log(this.state); return @@ -39,7 +41,7 @@ export class Settings extends Component { }} onFinish={values => { console.log("Saving settings",values); - for(let key of Object.keys(values)){ + for (let key of Object.keys(values)){ localStorage.setItem(key, values[key].replace("https://", "wss://").replace("http://", "ws://")); } // Force refresh to apply changes @@ -52,7 +54,7 @@ export class Settings extends Component { rules={[ { required: true, - message: 'Please input master url, ex ws://localhost:8080 or wss://localhost:8443/ . For SSL connections, ensure you have a valid certificate.', + message: "Please input master url, ex ws://localhost:8080 or wss://localhost:8443/ . For SSL connections, ensure you have a valid certificate.", }, ]} > @@ -64,7 +66,7 @@ export class Settings extends Component { rules={[ { required: true, - message: 'Please input your user auth token from config-control.json', + message: "Please input your user auth token from config-control.json", }, ]} > @@ -72,7 +74,7 @@ export class Settings extends Component {
diff --git a/packages/master/web/pages/slaves/slavesTable.jsx b/packages/master/web/pages/slaves/slavesTable.jsx index 38856bf2..c46f3096 100644 --- a/packages/master/web/pages/slaves/slavesTable.jsx +++ b/packages/master/web/pages/slaves/slavesTable.jsx @@ -4,25 +4,21 @@ import { listSlaves, listInstances } from "../../util/wslink"; import DataTable from "../../components/data-table"; export class SlavesTable extends Component { - constructor(props) { - super(props); - } navigate(url) { this.props.history.push(url); } + render() { return

Slaves

{ - return { - onClick: event => { - this.navigate(`/slaves/${record.id}/view`); - } - }; - } + onRow: (record, rowIndex) => ({ + onClick: event => { + this.navigate(`/slaves/${record.id}/view`); + }, + }), }} />
; diff --git a/packages/master/web/pages/users/user.jsx b/packages/master/web/pages/users/user.jsx index ad674df7..40739bdc 100644 --- a/packages/master/web/pages/users/user.jsx +++ b/packages/master/web/pages/users/user.jsx @@ -16,16 +16,19 @@ export class UserView extends Component { constructor(props) { super(props); this.state = { - user: {} + user: {}, }; this.messagesEndRef = React.createRef(); } + navigate(url) { this.props.history.push(url); } + async componentDidMount() { await this.getData(); } + async getData() { let name = this.props.match.params.id; @@ -37,12 +40,13 @@ export class UserView extends Component { roles, }); } + async handleChange(targetKeys) { this.setState({ user: { ...this.state.user, - roles: targetKeys - } + roles: targetKeys, + }, }); let response = await setRoles({ name: this.state.user.name, @@ -50,6 +54,7 @@ export class UserView extends Component { }); console.log("Updated user roles",response); }; + render() { console.log(this.state); let { user, roles } = this.state; @@ -76,7 +81,7 @@ export class UserView extends Component { this.navigate("/users"); }} > - Delete this user from the cluster + Delete this user from the cluster } trigger="click" diff --git a/packages/master/web/pages/users/usersTable.jsx b/packages/master/web/pages/users/usersTable.jsx index 7a25158a..154d70a1 100644 --- a/packages/master/web/pages/users/usersTable.jsx +++ b/packages/master/web/pages/users/usersTable.jsx @@ -4,12 +4,10 @@ import { listSlaves, listInstances, listUsers, createUser } from "../../util/wsl import DataTable from "../../components/data-table"; export class UsersTable extends Component { - constructor(props) { - super(props); - } navigate(url) { this.props.history.push(url); } + render() { return

Slaves

@@ -17,22 +15,20 @@ export class UsersTable extends Component { AddRecord={{ fields: [{ dataIndex: "name", - title: "Name" + title: "Name", }], insert: async args => { let response = await createUser({name: args.name}); console.log("Created user",response); - } + }, }} DataFunction={listUsers} TableProps={{ - onRow: (record, rowIndex) => { - return { - onClick: event => { - this.navigate(`/users/${record.name}/view`); - } - }; - } + onRow: (record, rowIndex) => ({ + onClick: event => { + this.navigate(`/users/${record.name}/view`); + }, + }), }} />
; diff --git a/packages/master/web/util/notify.jsx b/packages/master/web/util/notify.jsx index 034f03b1..11805738 100644 --- a/packages/master/web/util/notify.jsx +++ b/packages/master/web/util/notify.jsx @@ -1,11 +1,6 @@ import { notification } from "antd"; -/** - * - * @param {string} message - * @param {("info"|"error"|"success"|"warning"|"warn")} type - */ -export default function notify(message, type = "info", description) { +export default function notify(message, type = "info", description = undefined) { notification[type]({ message: typeof message === "string" ? message : "ERROR: See console", description, diff --git a/packages/master/web/util/websocket.jsx b/packages/master/web/util/websocket.jsx index 6a05c142..e5daa360 100644 --- a/packages/master/web/util/websocket.jsx +++ b/packages/master/web/util/websocket.jsx @@ -63,9 +63,9 @@ export class Control extends link.Link { link.attachAllMessages(this); /** - * Mapping of plugin names to their instance for loaded plugins. - * @type {Map} - */ + * Mapping of plugin names to their instance for loaded plugins. + * @type {Map} + */ this.plugins = controlPlugins; for (let controlPlugin of controlPlugins.values()) { plugin.attachPluginMessages(this, controlPlugin.info, controlPlugin); @@ -75,7 +75,9 @@ export class Control extends link.Link { async instanceOutputEventHandler(message) { let { instance_id, output } = message.data; console.log(formatOutput(output)); - window.instanceOutputEventHandler && window.instanceOutputEventHandler({instance_id, output}); + if (window.instanceOutputEventHandler) { + window.instanceOutputEventHandler({instance_id, output}); + } } async debugWsMessageEventHandler(message) { diff --git a/packages/master/web/util/wslink.jsx b/packages/master/web/util/wslink.jsx index 97f35561..f3981da5 100644 --- a/packages/master/web/util/wslink.jsx +++ b/packages/master/web/util/wslink.jsx @@ -27,38 +27,38 @@ let listUsers = createListFunction("listUsers", "name"); let listRoles = createListFunction("listRoles"); let listPermissions = createListFunction("listPermissions", "name"); -let startInstance = async function ({ instance_id, save = null }) { +async function startInstance({ instance_id, save = null }) { return await link.messages.startInstance.send(control, { instance_id, save }); }; -let stopInstance = async function ({ instance_id }) { +async function stopInstance({ instance_id }) { return await link.messages.stopInstance.send(control, { instance_id }); }; -let createInstance = async function (serialized_config) { +async function createInstance(serialized_config) { return await link.messages.createInstance.send(control, { serialized_config }); }; -let deleteInstance = async function ({ instance_id }) { +async function deleteInstance({ instance_id }) { return await link.messages.deleteInstance.send(control, { instance_id }); }; -let assignInstance = async function ({ instance_id, slave_id }) { +async function assignInstance({ instance_id, slave_id }) { return await link.messages.assignInstanceCommand.send(control, { instance_id, slave_id, }); }; -let createSave = async function ({ instance_id }) { +async function createSave({ instance_id }) { return await link.messages.createSave.send(control, { instance_id }); }; -let getInstanceConfig = async function ({ instance_id }) { +async function getInstanceConfig({ instance_id }) { return await link.messages.getInstanceConfig.send(control, { instance_id }); }; -let setInstanceConfigField = async function ({ instance_id, field, value }) { +async function setInstanceConfigField({ instance_id, field, value }) { return await link.messages.setInstanceConfigField.send(control, { instance_id, field, value: typeof value === "object" ? JSON.stringify(value) : value, }); }; -let setInstanceConfigProp = async function ({ instance_id, field, prop, value }) { +async function setInstanceConfigProp({ instance_id, field, prop, value }) { return await link.messages.setInstanceConfigProp.send(control, { instance_id, field, @@ -66,32 +66,32 @@ let setInstanceConfigProp = async function ({ instance_id, field, prop, value }) value, // JSON Object }); }; -let sendRcon = async function ({ instance_id, command }) { +async function sendRcon({ instance_id, command }) { return await link.messages.sendRcon.send(control, { instance_id, command }); }; -let setInstanceOutputSubscriptions = async function ({ instance_id }) { +async function setInstanceOutputSubscriptions({ instance_id }) { return await link.messages.setInstanceOutputSubscriptions.send(control, { instance_ids: [instance_id] }); }; -let createUser = async function ({ name }) { +async function createUser({ name }) { return await link.messages.createUser.send(control, { name }); }; -let deleteUser = async function ({ name }) { +async function deleteUser({ name }) { return await link.messages.deleteUser.send(control, { name }); }; -let setRoles = async function ({ name, roles }) { +async function setRoles({ name, roles }) { return await link.messages.updateUserRoles.send(control, { name, roles, }); }; -let createRole = async function ({ name, description, permissions = [] }) { +async function createRole({ name, description, permissions = [] }) { return await link.messages.createRole.send(control, { name, description, permissions }); }; -let updateRole = async function ({ id, name, description, permissions }) { +async function updateRole({ id, name, description, permissions }) { return await link.messages.updateRole.send(control, { - id, name, description, permissions + id, name, description, permissions, }); }; @@ -120,15 +120,15 @@ export { }; function createListFunction(name, key) { - return async () => { - return (await link.messages[name].send(control)).list.map(addKey(key || "id")); - }; + return async () => ( + (await link.messages[name].send(control)).list.map(addKey(key || "id")) + ); } function addKey(key) { return function (el) { return { ...el, - key: el[key] + key: el[key], }; }; } From 86b8775df0d402ac86ca104d5f14b3eec24ad7c3 Mon Sep 17 00:00:00 2001 From: Hornwitser Date: Mon, 28 Sep 2020 05:47:28 +0200 Subject: [PATCH 11/12] Fix modals stuck after web interface import Fix the modals for adding new entries to instances, users, and roles not being closable due to a missing bind of the close method. --- packages/master/web/components/data-table.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/master/web/components/data-table.jsx b/packages/master/web/components/data-table.jsx index b43d3b53..e8b5d4fd 100644 --- a/packages/master/web/components/data-table.jsx +++ b/packages/master/web/components/data-table.jsx @@ -223,7 +223,7 @@ class DataTable extends Component { {this.state.inserting ? "Legg til" : "Rediger"} From dfaf74aac5f4566346c829beb0f577adeea626f4 Mon Sep 17 00:00:00 2001 From: Hornwitser Date: Mon, 28 Sep 2020 05:57:10 +0200 Subject: [PATCH 12/12] Supress webpack asset size warning Set threshold for webpack's asset size warning to 2 MB due to Ant Design being large. --- packages/master/webpack.config.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/master/webpack.config.js b/packages/master/webpack.config.js index 4e2dc702..0232ea94 100644 --- a/packages/master/webpack.config.js +++ b/packages/master/webpack.config.js @@ -14,6 +14,10 @@ module.exports = (env = {}) => ({ filename: "bundle.js", path: path.resolve(__dirname, "static"), }, + performance: { + maxAssetSize: 2**21, + maxEntrypointSize: 2**21, + }, plugins: [ new CleanWebpackPlugin(), new webpack.DefinePlugin({