mirror of
https://gitlab.com/crafty-controller/crafty-4.git
synced 2024-08-30 18:23:09 +00:00
Merge branch 'enhancement/mobile-app' into 'dev'
Enhancement/mobile app See merge request crafty-controller/crafty-4!576
This commit is contained in:
@ -1,7 +1,7 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
## --- [4.1.0] - 2023/TBD
|
## --- [4.1.0] - 2023/TBD
|
||||||
### New features
|
### New features
|
||||||
TBD
|
- Mobile PWA App (beta) | Ability to add a Crafty icon to your mobile's home screen ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/576))
|
||||||
### Refactor
|
### Refactor
|
||||||
- Frontend Ajax Refactor | Start using API to send Remote Comms to Server ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/565))
|
- Frontend Ajax Refactor | Start using API to send Remote Comms to Server ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/565))
|
||||||
### Bug fixes
|
### Bug fixes
|
||||||
|
@ -50,12 +50,15 @@ class PublicHandler(BaseHandler):
|
|||||||
if page == "login":
|
if page == "login":
|
||||||
template = "public/login.html"
|
template = "public/login.html"
|
||||||
|
|
||||||
elif page == 404:
|
elif page == "404":
|
||||||
template = "public/404.html"
|
template = "public/404.html"
|
||||||
|
|
||||||
elif page == "error":
|
elif page == "error":
|
||||||
template = "public/error.html"
|
template = "public/error.html"
|
||||||
|
|
||||||
|
elif page == "offline":
|
||||||
|
template = "public/offline.html"
|
||||||
|
|
||||||
elif page == "logout":
|
elif page == "logout":
|
||||||
self.clear_cookie("token")
|
self.clear_cookie("token")
|
||||||
# self.clear_cookie("user")
|
# self.clear_cookie("user")
|
||||||
|
@ -11,6 +11,9 @@ except ModuleNotFoundError as e:
|
|||||||
|
|
||||||
class CustomStaticHandler(tornado.web.StaticFileHandler):
|
class CustomStaticHandler(tornado.web.StaticFileHandler):
|
||||||
def validate_absolute_path(self, root: str, absolute_path: str) -> Optional[str]:
|
def validate_absolute_path(self, root: str, absolute_path: str) -> Optional[str]:
|
||||||
|
# This is for the mobile app service worker
|
||||||
|
if self.request.path.find("service-worker.js") != -1:
|
||||||
|
self.set_header("Service-Worker-Allowed", "/")
|
||||||
try:
|
try:
|
||||||
return super().validate_absolute_path(root, absolute_path)
|
return super().validate_absolute_path(root, absolute_path)
|
||||||
except tornado.web.HTTPError as error:
|
except tornado.web.HTTPError as error:
|
||||||
|
40
app/frontend/static/assets/crafty.webmanifest
Normal file
40
app/frontend/static/assets/crafty.webmanifest
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
{
|
||||||
|
"background_color": "#222436",
|
||||||
|
"description": "Crafty Controller is a free and open-source Minecraft launcher and manager that allows users to start and administer Minecraft servers from a user-friendly interface.",
|
||||||
|
"dir": "ltr",
|
||||||
|
"display": "standalone",
|
||||||
|
"name": "Crafty Controller",
|
||||||
|
"orientation": "any",
|
||||||
|
"scope": "/",
|
||||||
|
"short_name": "Crafty",
|
||||||
|
"start_url": "/",
|
||||||
|
"theme_color": "#222436",
|
||||||
|
"categories": ["utilities"],
|
||||||
|
"icons": [
|
||||||
|
{
|
||||||
|
"src": "/static/assets/images/Crafty_4-0_Logo_square.ico",
|
||||||
|
"type": "image/x-icon",
|
||||||
|
"sizes":"128x128"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "/static/assets/images/Crafty_4-0.png",
|
||||||
|
"type": "image/png",
|
||||||
|
"sizes": "144x144",
|
||||||
|
"purpose": "any"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "/static/assets/images/crafty-logo-square-1024.png",
|
||||||
|
"type": "image/png",
|
||||||
|
"sizes": "1024x1024",
|
||||||
|
"purpose": "any"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "/static/assets/images/crafty-logo-square-96.png",
|
||||||
|
"type": "image/png",
|
||||||
|
"sizes": "96x96",
|
||||||
|
"purpose": "any"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"lang": "en",
|
||||||
|
"prefer_related_applications": false
|
||||||
|
}
|
BIN
app/frontend/static/assets/images/Crafty_4-0.png
Normal file
BIN
app/frontend/static/assets/images/Crafty_4-0.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 4.9 KiB |
BIN
app/frontend/static/assets/images/crafty-logo-square-1024.png
Normal file
BIN
app/frontend/static/assets/images/crafty-logo-square-1024.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 424 KiB |
BIN
app/frontend/static/assets/images/crafty-logo-square-96.png
Normal file
BIN
app/frontend/static/assets/images/crafty-logo-square-96.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.8 KiB |
46
app/frontend/static/assets/js/shared/service-worker.js
Normal file
46
app/frontend/static/assets/js/shared/service-worker.js
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
// This is the "Offline page" service worker
|
||||||
|
|
||||||
|
importScripts('https://storage.googleapis.com/workbox-cdn/releases/5.1.2/workbox-sw.js');
|
||||||
|
|
||||||
|
const CACHE = "crafty-controller";
|
||||||
|
|
||||||
|
// TODO: replace the following with the correct offline fallback page i.e.: const offlineFallbackPage = "offline.html";
|
||||||
|
const offlineFallbackPage = "/offline";
|
||||||
|
|
||||||
|
self.addEventListener("message", (event) => {
|
||||||
|
if (event.data && event.data.type === "SKIP_WAITING") {
|
||||||
|
self.skipWaiting();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
self.addEventListener('install', async (event) => {
|
||||||
|
event.waitUntil(
|
||||||
|
caches.open(CACHE)
|
||||||
|
.then((cache) => cache.add(offlineFallbackPage))
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
if (workbox.navigationPreload.isSupported()) {
|
||||||
|
workbox.navigationPreload.enable();
|
||||||
|
}
|
||||||
|
|
||||||
|
self.addEventListener('fetch', (event) => {
|
||||||
|
if (event.request.mode === 'navigate') {
|
||||||
|
event.respondWith((async () => {
|
||||||
|
try {
|
||||||
|
const preloadResp = await event.preloadResponse;
|
||||||
|
|
||||||
|
if (preloadResp) {
|
||||||
|
return preloadResp;
|
||||||
|
}
|
||||||
|
const networkResp = await fetch(event.request);
|
||||||
|
return networkResp;
|
||||||
|
} catch (error) {
|
||||||
|
|
||||||
|
const cache = await caches.open(CACHE);
|
||||||
|
const cachedResp = await cache.match(offlineFallbackPage);
|
||||||
|
return cachedResp;
|
||||||
|
}
|
||||||
|
})());
|
||||||
|
}
|
||||||
|
});
|
@ -19,6 +19,16 @@
|
|||||||
<link rel="stylesheet" href="/static/assets/vendors/css/vendor.bundle.base.css">
|
<link rel="stylesheet" href="/static/assets/vendors/css/vendor.bundle.base.css">
|
||||||
<link rel="stylesheet" href="/static/assets/css/crafty.css">
|
<link rel="stylesheet" href="/static/assets/css/crafty.css">
|
||||||
|
|
||||||
|
<link rel="manifest" href="/static/assets/crafty.webmanifest">
|
||||||
|
<meta name="mobile-web-app-capable" content="yes">
|
||||||
|
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||||
|
<meta name="mobile-web-app-capable" content="yes" />
|
||||||
|
<meta name="apple-mobile-web-app-status-bar-style" content="black">
|
||||||
|
<meta name="apple-mobile-web-app-title" content="Crafty">
|
||||||
|
<link rel="apple-touch-icon" href="../static/assets/images/Crafty_4-0.png">
|
||||||
|
<link rel="shortcut icon" sizes="192x192" href="../static/assets/images/Crafty_4-0.png">
|
||||||
|
|
||||||
|
|
||||||
<!-- endinject -->
|
<!-- endinject -->
|
||||||
|
|
||||||
<!-- Plugin css for this page-->
|
<!-- Plugin css for this page-->
|
||||||
@ -526,6 +536,14 @@
|
|||||||
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
$(document).ready(() => {
|
||||||
|
if ('serviceWorker' in navigator) {
|
||||||
|
navigator.serviceWorker.register('/static/assets/js/shared/service-worker.js', {scope: '/'})
|
||||||
|
.then(function (registration) {
|
||||||
|
console.log('Service Worker Registered');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
{% block js %}
|
{% block js %}
|
||||||
|
@ -14,6 +14,13 @@
|
|||||||
<link rel="stylesheet" href="/static/assets/vendors/css/vendor.bundle.base.css">
|
<link rel="stylesheet" href="/static/assets/vendors/css/vendor.bundle.base.css">
|
||||||
<link rel="stylesheet" href="/static/assets/vendors/fontawesome6/css/all.css">
|
<link rel="stylesheet" href="/static/assets/vendors/fontawesome6/css/all.css">
|
||||||
<link rel="stylesheet" href="/static/assest/css/crafty.css">
|
<link rel="stylesheet" href="/static/assest/css/crafty.css">
|
||||||
|
<link rel="manifest" href="/static/assets/crafty.webmanifest">
|
||||||
|
|
||||||
|
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||||
|
<meta name="mobile-web-app-capable" content="yes" />
|
||||||
|
<meta name="apple-mobile-web-app-status-bar-style" content="black">
|
||||||
|
<meta name="apple-mobile-web-app-title" content="Crafty">
|
||||||
|
<link rel="apple-touch-icon" href="../static/assets/images/Crafty_4-0.png">
|
||||||
<!-- endinject -->
|
<!-- endinject -->
|
||||||
<!-- Plugin css for this page -->
|
<!-- Plugin css for this page -->
|
||||||
<!-- End Plugin css for this page -->
|
<!-- End Plugin css for this page -->
|
||||||
|
@ -12,6 +12,15 @@
|
|||||||
<link rel="stylesheet" href="/static/assets/vendors/ti-icons/css/themify-icons.css">
|
<link rel="stylesheet" href="/static/assets/vendors/ti-icons/css/themify-icons.css">
|
||||||
<link rel="stylesheet" href="/static/assets/vendors/typicons/typicons.css">
|
<link rel="stylesheet" href="/static/assets/vendors/typicons/typicons.css">
|
||||||
<link rel="stylesheet" href="/static/assets/vendors/css/vendor.bundle.base.css">
|
<link rel="stylesheet" href="/static/assets/vendors/css/vendor.bundle.base.css">
|
||||||
|
|
||||||
|
|
||||||
|
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||||
|
<meta name="mobile-web-app-capable" content="yes" />
|
||||||
|
<meta name="apple-mobile-web-app-status-bar-style" content="black">
|
||||||
|
<meta name="apple-mobile-web-app-title" content="Crafty">
|
||||||
|
<link rel="apple-touch-icon" href="../static/assets/images/Crafty_4-0.png">
|
||||||
|
|
||||||
|
|
||||||
<!-- endinject -->
|
<!-- endinject -->
|
||||||
<!-- Plugin css for this page -->
|
<!-- Plugin css for this page -->
|
||||||
<!-- End Plugin css for this page -->
|
<!-- End Plugin css for this page -->
|
||||||
@ -24,7 +33,7 @@
|
|||||||
<style>
|
<style>
|
||||||
.auth.auth-bg-1 {
|
.auth.auth-bg-1 {
|
||||||
background: url("../../static/assets/images/auth/{% raw data['background'] %}"),
|
background: url("../../static/assets/images/auth/{% raw data['background'] %}"),
|
||||||
url("../../static/assets/images/auth/login-1.jpg");
|
url("/static/assets/images/auth/login_1.jpg");
|
||||||
background-size: cover;
|
background-size: cover;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
@ -77,6 +86,21 @@
|
|||||||
<script src="/static/assets/js/shared/settings.js"></script>
|
<script src="/static/assets/js/shared/settings.js"></script>
|
||||||
<script src="/static/assets/js/shared/todolist.js"></script>
|
<script src="/static/assets/js/shared/todolist.js"></script>
|
||||||
<!-- endinject -->
|
<!-- endinject -->
|
||||||
|
<script>
|
||||||
|
$(document).ready(function () {
|
||||||
|
let login_opacity_div = document.getElementById('login_opacity');
|
||||||
|
let opacity = login_opacity_div.getAttribute('data-value');
|
||||||
|
document.getElementById('login-form-background').style.background = 'rgb(34, 36, 55, ' + (opacity / 100) + ')';
|
||||||
|
//Register Service worker for mobile app
|
||||||
|
if ('serviceWorker' in navigator) {
|
||||||
|
navigator.serviceWorker.register('/static/assets/js/shared/service-worker.js', {scope: '/'})
|
||||||
|
.then(function (registration) {
|
||||||
|
console.error('Service Worker Registered');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
</script>
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
@ -12,6 +12,14 @@
|
|||||||
<link rel="stylesheet" href="/static/assets/vendors/ti-icons/css/themify-icons.css">
|
<link rel="stylesheet" href="/static/assets/vendors/ti-icons/css/themify-icons.css">
|
||||||
<link rel="stylesheet" href="/static/assets/vendors/typicons/typicons.css">
|
<link rel="stylesheet" href="/static/assets/vendors/typicons/typicons.css">
|
||||||
<link rel="stylesheet" href="/static/assets/vendors/css/vendor.bundle.base.css">
|
<link rel="stylesheet" href="/static/assets/vendors/css/vendor.bundle.base.css">
|
||||||
|
<link rel="manifest" href="/static/assets/crafty.webmanifest">
|
||||||
|
|
||||||
|
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||||
|
<meta name="mobile-web-app-capable" content="yes" />
|
||||||
|
<meta name="apple-mobile-web-app-status-bar-style" content="black">
|
||||||
|
<meta name="apple-mobile-web-app-title" content="Crafty">
|
||||||
|
<link rel="apple-touch-icon" href="../static/assets/images/Crafty_4-0.png">
|
||||||
|
|
||||||
<!-- endinject -->
|
<!-- endinject -->
|
||||||
<!-- Plugin css for this page -->
|
<!-- Plugin css for this page -->
|
||||||
<!-- End Plugin css for this page -->
|
<!-- End Plugin css for this page -->
|
||||||
@ -24,7 +32,7 @@
|
|||||||
<style>
|
<style>
|
||||||
.auth.auth-bg-1 {
|
.auth.auth-bg-1 {
|
||||||
background: url("../../static/assets/images/auth/{% raw data['background'] %}"),
|
background: url("../../static/assets/images/auth/{% raw data['background'] %}"),
|
||||||
url("../../static/assets/images/auth/login-1.jpg");
|
url("/static/assets/images/auth/login_1.jpg");
|
||||||
background-size: cover;
|
background-size: cover;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
@ -12,6 +12,14 @@
|
|||||||
<link rel="stylesheet" href="/static/assets/vendors/ti-icons/css/themify-icons.css">
|
<link rel="stylesheet" href="/static/assets/vendors/ti-icons/css/themify-icons.css">
|
||||||
<link rel="stylesheet" href="/static/assets/vendors/typicons/typicons.css">
|
<link rel="stylesheet" href="/static/assets/vendors/typicons/typicons.css">
|
||||||
<link rel="stylesheet" href="/static/assets/vendors/css/vendor.bundle.base.css">
|
<link rel="stylesheet" href="/static/assets/vendors/css/vendor.bundle.base.css">
|
||||||
|
<link rel="manifest" href="/static/assets/crafty.webmanifest">
|
||||||
|
|
||||||
|
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||||
|
<meta name="mobile-web-app-capable" content="yes" />
|
||||||
|
<meta name="apple-mobile-web-app-status-bar-style" content="black">
|
||||||
|
<meta name="apple-mobile-web-app-title" content="Crafty">
|
||||||
|
<link rel="apple-touch-icon" href="../static/assets/images/Crafty_4-0.png">
|
||||||
|
|
||||||
<!-- endinject -->
|
<!-- endinject -->
|
||||||
<!-- Plugin css for this page -->
|
<!-- Plugin css for this page -->
|
||||||
<!-- End Plugin css for this page -->
|
<!-- End Plugin css for this page -->
|
||||||
@ -24,7 +32,7 @@
|
|||||||
<style>
|
<style>
|
||||||
.auth.auth-bg-1 {
|
.auth.auth-bg-1 {
|
||||||
background: url("../../static/assets/images/auth/{% raw data['background'] %}"),
|
background: url("../../static/assets/images/auth/{% raw data['background'] %}"),
|
||||||
url("../../static/assets/images/auth/login-1.jpg");
|
url("/static/assets/images/auth/login_1.jpg");
|
||||||
background-size: cover;
|
background-size: cover;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
@ -12,6 +12,13 @@
|
|||||||
<link rel="stylesheet" href="/static/assets/vendors/ti-icons/css/themify-icons.css">
|
<link rel="stylesheet" href="/static/assets/vendors/ti-icons/css/themify-icons.css">
|
||||||
<link rel="stylesheet" href="/static/assets/vendors/typicons/typicons.css">
|
<link rel="stylesheet" href="/static/assets/vendors/typicons/typicons.css">
|
||||||
<link rel="stylesheet" href="/static/assets/vendors/css/vendor.bundle.base.css">
|
<link rel="stylesheet" href="/static/assets/vendors/css/vendor.bundle.base.css">
|
||||||
|
<link rel="manifest" href="/static/assets/crafty.webmanifest">
|
||||||
|
|
||||||
|
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||||
|
<meta name="mobile-web-app-capable" content="yes" />
|
||||||
|
<meta name="apple-mobile-web-app-status-bar-style" content="black">
|
||||||
|
<!-- <meta name="apple-mobile-web-app-title" content="Crafty Controller 4"> -->
|
||||||
|
<link rel="apple-touch-icon" href="../static/assets/images/Crafty_4-0.png">
|
||||||
<!-- endinject -->
|
<!-- endinject -->
|
||||||
<!-- Plugin css for this page -->
|
<!-- Plugin css for this page -->
|
||||||
<!-- End Plugin css for this page -->
|
<!-- End Plugin css for this page -->
|
||||||
@ -24,7 +31,7 @@
|
|||||||
<style>
|
<style>
|
||||||
.auth.auth-bg-1 {
|
.auth.auth-bg-1 {
|
||||||
background: url("../../static/assets/images/auth/{% raw data['background'] %}"),
|
background: url("../../static/assets/images/auth/{% raw data['background'] %}"),
|
||||||
url("../../static/assets/images/auth/login-1.jpg");
|
url("/static/assets/images/auth/login_1.jpg");
|
||||||
background-size: cover;
|
background-size: cover;
|
||||||
background-position: center;
|
background-position: center;
|
||||||
}
|
}
|
||||||
@ -140,7 +147,15 @@
|
|||||||
let login_opacity_div = document.getElementById('login_opacity');
|
let login_opacity_div = document.getElementById('login_opacity');
|
||||||
let opacity = login_opacity_div.getAttribute('data-value');
|
let opacity = login_opacity_div.getAttribute('data-value');
|
||||||
document.getElementById('login-form-background').style.background = 'rgb(34, 36, 55, ' + (opacity / 100) + ')';
|
document.getElementById('login-form-background').style.background = 'rgb(34, 36, 55, ' + (opacity / 100) + ')';
|
||||||
|
//Register Service worker for mobile app
|
||||||
|
if ('serviceWorker' in navigator) {
|
||||||
|
navigator.serviceWorker.register('/static/assets/js/shared/service-worker.js', {scope: '/'})
|
||||||
|
.then(function (registration) {
|
||||||
|
console.error('Service Worker Registered');
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
|
85
app/frontend/templates/public/offline.html
Normal file
85
app/frontend/templates/public/offline.html
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<!-- Required meta tags -->
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||||
|
<title>Crafty Controller</title>
|
||||||
|
<!-- plugins:css -->
|
||||||
|
<link rel="stylesheet" href="/static/assets/vendors/mdi/css/materialdesignicons.min.css">
|
||||||
|
<link rel="stylesheet" href="/static/assets/vendors/flag-icon-css/css/flag-icon.min.css">
|
||||||
|
<link rel="stylesheet" href="/static/assets/vendors/ti-icons/css/themify-icons.css">
|
||||||
|
<link rel="stylesheet" href="/static/assets/vendors/typicons/typicons.css">
|
||||||
|
<link rel="stylesheet" href="/static/assets/vendors/css/vendor.bundle.base.css">
|
||||||
|
<link rel="manifest" href="/static/assets/crafty.webmanifest">
|
||||||
|
|
||||||
|
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||||
|
<meta name="mobile-web-app-capable" content="yes" />
|
||||||
|
<meta name="apple-mobile-web-app-status-bar-style" content="black">
|
||||||
|
<meta name="apple-mobile-web-app-title" content="Crafty">
|
||||||
|
<link rel="apple-touch-icon" href="../static/assets/images/Crafty_4-0.png">
|
||||||
|
|
||||||
|
<!-- endinject -->
|
||||||
|
<!-- Plugin css for this page -->
|
||||||
|
<!-- End Plugin css for this page -->
|
||||||
|
<!-- Layout styles -->
|
||||||
|
<link rel="stylesheet" href="/static/assets/css/dark/style.css">
|
||||||
|
<!-- End Layout styles -->
|
||||||
|
<link rel="shortcut icon" type="image/svg+xml" href="/static/assets/images/logo_small.svg">
|
||||||
|
<link rel="alternate icon" href="/static/assets/images/favicon.png" />
|
||||||
|
</head>
|
||||||
|
<style>
|
||||||
|
.auth.auth-bg-1 {
|
||||||
|
background: url("../../static/assets/images/auth/{% raw data['background'] %}"),
|
||||||
|
url("/static/assets/images/auth/login_1.jpg");
|
||||||
|
background-size: cover;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<body class="dark-theme">
|
||||||
|
<div class="container-scroller">
|
||||||
|
<div class="container-fluid page-body-wrapper full-page-wrapper">
|
||||||
|
<div class="content-wrapper d-flex align-items-center auth auth-bg-1 theme-one">
|
||||||
|
<div class="row w-100">
|
||||||
|
<div class="col-lg-4 mx-auto">
|
||||||
|
|
||||||
|
<div class="auto-form-wrapper">
|
||||||
|
<div class="text-center">
|
||||||
|
<img src="/static/assets/images/logo_long.svg"><br /><br />
|
||||||
|
<div class="col-sm-12 grid-margin stretch-card">
|
||||||
|
<div class="card card-statistics social-card facebook-card card-colored">
|
||||||
|
<div class="card-body">
|
||||||
|
<h4 class="platform-name mb-3 mt-4 font-weight-semibold user-name">{{ translate('offline', 'offline', data['lang']) }}</h4>
|
||||||
|
<h5 class="headline font-weight-medium"></h5>
|
||||||
|
<p class="mb-2 comment font-weight-light">
|
||||||
|
{{ translate('offline', 'pleaseConnect', data['lang']) }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- content-wrapper ends -->
|
||||||
|
</div>
|
||||||
|
<!-- page-body-wrapper ends -->
|
||||||
|
</div>
|
||||||
|
<!-- container-scroller -->
|
||||||
|
<!-- plugins:js -->
|
||||||
|
<script src="/static/assets/vendors/js/vendor.bundle.base.js"></script>
|
||||||
|
<!-- endinject -->
|
||||||
|
<!-- inject:js -->
|
||||||
|
<script src="/static/assets/js/shared/off-canvas.js"></script>
|
||||||
|
<script src="/static/assets/js/shared/hoverable-collapse.js"></script>
|
||||||
|
<script src="/static/assets/js/shared/misc.js"></script>
|
||||||
|
<script src="/static/assets/js/shared/settings.js"></script>
|
||||||
|
<script src="/static/assets/js/shared/todolist.js"></script>
|
||||||
|
<!-- endinject -->
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
@ -10,7 +10,7 @@
|
|||||||
<style>
|
<style>
|
||||||
.auth.auth-bg-1 {
|
.auth.auth-bg-1 {
|
||||||
background: url("../../static/assets/images/auth/{% raw data['background'] %}"),
|
background: url("../../static/assets/images/auth/{% raw data['background'] %}"),
|
||||||
url("../../static/assets/images/auth/login-1.jpg");
|
url("/static/assets/images/auth/login_1.jpg");
|
||||||
background-size: cover;
|
background-size: cover;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
@ -89,7 +89,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<!-- View for Small screen -->
|
<!-- View for Small screen -->
|
||||||
<div class="row justify-content-center align-items-sm-center">
|
<div class="row justify-content-center align-items-sm-center">
|
||||||
<div class="content-wrapper login-modal d-sm-none d-block">
|
<div class="content-wrapper login-modal d-sm-none d-block" style="background-color: var(--dropdown-bg);">
|
||||||
<img src="/static/assets/images/logo_long.png" style='width: 100%;'>
|
<img src="/static/assets/images/logo_long.png" style='width: 100%;'>
|
||||||
<hr />
|
<hr />
|
||||||
{% if data['running'] != 0 %}
|
{% if data['running'] != 0 %}
|
||||||
|
@ -14,6 +14,13 @@
|
|||||||
<link rel="stylesheet" href="/static/assets/vendors/typicons/typicons.css">
|
<link rel="stylesheet" href="/static/assets/vendors/typicons/typicons.css">
|
||||||
<link rel="stylesheet" href="/static/assets/vendors/css/vendor.bundle.base.css">
|
<link rel="stylesheet" href="/static/assets/vendors/css/vendor.bundle.base.css">
|
||||||
<link rel="stylesheet" href="/static/assets/vendors/fontawesome6/css/all.css">
|
<link rel="stylesheet" href="/static/assets/vendors/fontawesome6/css/all.css">
|
||||||
|
<link rel="manifest" href="/static/assets/crafty.webmanifest">
|
||||||
|
|
||||||
|
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||||
|
<meta name="mobile-web-app-capable" content="yes" />
|
||||||
|
<meta name="apple-mobile-web-app-status-bar-style" content="black">
|
||||||
|
<meta name="apple-mobile-web-app-title" content="Crafty">
|
||||||
|
<link rel="apple-touch-icon" href="../static/assets/images/Crafty_4-0.png">
|
||||||
<!-- endinject -->
|
<!-- endinject -->
|
||||||
<!-- Plugin css for this page -->
|
<!-- Plugin css for this page -->
|
||||||
<!-- End Plugin css for this page -->
|
<!-- End Plugin css for this page -->
|
||||||
@ -98,7 +105,7 @@
|
|||||||
usingWebSockets = false;
|
usingWebSockets = false;
|
||||||
}
|
}
|
||||||
// {% else %}
|
// {% else %}
|
||||||
let usingWebSockets = false;
|
usingWebSockets = false;
|
||||||
warn('WebSockets are not supported in Crafty if not using the https protocol')
|
warn('WebSockets are not supported in Crafty if not using the https protocol')
|
||||||
var webSocket;
|
var webSocket;
|
||||||
// {% end%}
|
// {% end%}
|
||||||
@ -106,6 +113,21 @@
|
|||||||
</script>
|
</script>
|
||||||
{% block js %}
|
{% block js %}
|
||||||
<!-- Custom js for this page -->
|
<!-- Custom js for this page -->
|
||||||
|
<script>
|
||||||
|
$(document).ready(function () {
|
||||||
|
let login_opacity_div = document.getElementById('login_opacity');
|
||||||
|
let opacity = login_opacity_div.getAttribute('data-value');
|
||||||
|
document.getElementById('login-form-background').style.background = 'rgb(34, 36, 55, ' + (opacity / 100) + ')';
|
||||||
|
//Register Service worker for mobile app
|
||||||
|
if ('serviceWorker' in navigator) {
|
||||||
|
navigator.serviceWorker.register('/static/assets/js/shared/service-worker.js', {scope: '/'})
|
||||||
|
.then(function (registration) {
|
||||||
|
console.error('Service Worker Registered');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
</script>
|
||||||
<!-- End custom js for this page -->
|
<!-- End custom js for this page -->
|
||||||
{% end %}
|
{% end %}
|
||||||
|
|
||||||
|
@ -210,6 +210,10 @@
|
|||||||
"preparingLogs": " Please wait while we prepare your logs... We`ll send a notification when they`re ready. This may take a while for large deployments.",
|
"preparingLogs": " Please wait while we prepare your logs... We`ll send a notification when they`re ready. This may take a while for large deployments.",
|
||||||
"supportLogs": "Support Logs"
|
"supportLogs": "Support Logs"
|
||||||
},
|
},
|
||||||
|
"offline": {
|
||||||
|
"offline": "Offline",
|
||||||
|
"pleaseConnect": "Please connect to the internet to use Crafty."
|
||||||
|
},
|
||||||
"panelConfig": {
|
"panelConfig": {
|
||||||
"adminControls": "Admin Controls",
|
"adminControls": "Admin Controls",
|
||||||
"allowedServers": "Allowed Servers",
|
"allowedServers": "Allowed Servers",
|
||||||
|
Reference in New Issue
Block a user