fix issues

=> center socials
=> up flash display delay
=> add possibility to close flash
=> fix add file issue
=> add flash code from base to login
=> can remove all external plugins + redirection only if custom page
=> fix custom plugin page link
=> delete plugin modal working
This commit is contained in:
BlasenhauerJ 2022-11-29 17:35:57 +01:00
parent b3d80d7a66
commit ff83b342de
14 changed files with 215 additions and 78 deletions

View File

@ -771,6 +771,30 @@ h6 {
right: -22.5rem;
}
.right-1 {
right: 0.25rem;
}
.top-0\.5 {
top: 0.125rem;
}
.right-8 {
right: 2rem;
}
.top-1 {
top: 0.25rem;
}
.right-7 {
right: 1.75rem;
}
.top-1\.5 {
top: 0.375rem;
}
.z-100 {
z-index: 100;
}
@ -795,6 +819,14 @@ h6 {
z-index: -10;
}
.z-0 {
z-index: 0;
}
.z-10 {
z-index: 10;
}
.z-990 {
z-index: 990;
}
@ -807,18 +839,10 @@ h6 {
z-index: 1020;
}
.z-10 {
z-index: 10;
}
.z-50 {
z-index: 50;
}
.z-0 {
z-index: 0;
}
.order-2 {
order: 2;
}
@ -990,6 +1014,10 @@ h6 {
margin-top: 0.75rem;
}
.ml-2 {
margin-left: 0.5rem;
}
.mt-8 {
margin-top: 2rem;
}
@ -1014,14 +1042,18 @@ h6 {
margin-left: 1.5rem;
}
.ml-2 {
margin-left: 0.5rem;
}
.mb-8 {
margin-bottom: 2rem;
}
.mb-7 {
margin-bottom: 1.75rem;
}
.mt-1 {
margin-top: 0.25rem;
}
.mt-2 {
margin-top: 0.5rem;
}
@ -1050,14 +1082,6 @@ h6 {
margin-top: 1.5rem;
}
.mb-7 {
margin-bottom: 1.75rem;
}
.mt-1 {
margin-top: 0.25rem;
}
.mr-6 {
margin-right: 1.5rem;
}
@ -1146,6 +1170,10 @@ h6 {
height: 12rem;
}
.h-3 {
height: 0.75rem;
}
.h-19 {
height: 4.75rem;
}
@ -1166,10 +1194,6 @@ h6 {
height: 7.5rem;
}
.h-3 {
height: 0.75rem;
}
.h-\[90vh\] {
height: 90vh;
}
@ -1290,6 +1314,10 @@ h6 {
width: 1.25rem;
}
.w-3 {
width: 0.75rem;
}
.w-28 {
width: 7rem;
}
@ -1306,10 +1334,6 @@ h6 {
width: 22.5rem;
}
.w-3 {
width: 0.75rem;
}
.w-80 {
width: 20rem;
}
@ -1424,6 +1448,11 @@ h6 {
transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
}
.translate-x-1 {
--tw-translate-x: 0.25rem;
transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
}
.-translate-x-full {
--tw-translate-x: -100%;
transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
@ -1439,11 +1468,6 @@ h6 {
transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
}
.translate-x-1 {
--tw-translate-x: 0.25rem;
transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
}
.-translate-y-7 {
--tw-translate-y: -1.75rem;
transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
@ -1640,10 +1664,6 @@ h6 {
border-radius: 50%;
}
.rounded-10 {
border-radius: 2.5rem;
}
.rounded-1\.4 {
border-radius: 0.35rem;
}
@ -1652,6 +1672,10 @@ h6 {
border-radius: 0.25rem;
}
.rounded-10 {
border-radius: 2.5rem;
}
.rounded-md {
border-radius: 0.375rem;
}
@ -3366,10 +3390,6 @@ h6 {
grid-column: span 8 / span 8;
}
.lg\:col-span-3 {
grid-column: span 3 / span 3;
}
.lg\:mx-8 {
margin-left: 2rem;
margin-right: 2rem;

View File

@ -73,13 +73,16 @@ class darkMode {
},
body: JSON.stringify({ darkmode: isDark }),
};
const send = await fetch(`${location.href.split("/").slice(0, -1).join("/")}/darkmode`, data);
const send = await fetch(
`${location.href.split("/").slice(0, -1).join("/")}/darkmode`,
data
);
}
}
class FlashMsg {
constructor() {
this.delayBeforeRemove = 5000;
this.delayBeforeRemove = 8000;
this.init();
}
@ -95,6 +98,16 @@ class FlashMsg {
}, this.delayBeforeRemove);
} catch (err) {}
});
window.addEventListener("click", (e) => {
try {
if (e.target.closest("button").hasAttribute("close-flash-message")) {
const closeBtn = e.target.closest("button");
const flashEl = closeBtn.closest("[flash-message]");
flashEl.remove();
}
} catch (err) {}
});
}
}

View File

@ -25,7 +25,6 @@ class FilterSettings {
const settingCount = settings.length;
let hiddenCount = 0;
settings.forEach((setting) => {
console.log(setting);
try {
const title = setting
.querySelector("h5")
@ -96,7 +95,6 @@ class Multiple {
`[${this.prefix}-settings-multiple]`
);
multiples.forEach((container) => {
console.log(container.querySelectorAll(`[setting-container]`));
if (container.querySelectorAll(`[setting-container]`).length <= 0)
container.parentElement
.querySelector("[multiple-handler]")

View File

@ -148,7 +148,6 @@ class Dropdown {
//hide date filter on local
hideFilterOnLocal(type) {
console.log(type);
if (type === "local") {
this.hideInp(`input#from-date`);
this.hideInp(`input#to-date`);
@ -197,7 +196,6 @@ class Filter {
const value = document
.querySelector(`[${this.prefix}-setting-select-text="success"]`)
.textContent.trim();
console.log(value);
this.successValue = value;
//run filter
@ -219,7 +217,6 @@ class Filter {
const value = document
.querySelector(`[${this.prefix}-setting-select-text="reload"]`)
.textContent.trim();
console.log(value);
this.reloadValue = value;
//run filter
@ -330,9 +327,8 @@ class Download {
if (response.status === 200) {
const res = await response.json();
//last update
return console.log(res);
return;
} else {
console.log(`Error: ${response.status}`);
}
return null;
}

View File

@ -149,7 +149,6 @@ class Dropdown {
//hide date filter on local
hideFilterOnLocal(type) {
console.log(type);
if (type === "local") {
this.hideInp(`input#from-date`);
this.hideInp(`input#to-date`);
@ -266,7 +265,6 @@ class FetchLogs {
}
async getLogsFromToDate() {
console.log(this.fromDate, this.toDate);
let response;
if (this.toDate) {
response = await fetch(

View File

@ -147,7 +147,6 @@ class Dropdown {
//hide date filter on local
hideFilterOnLocal(type) {
console.log(type);
if (type === "local") {
this.hideInp(`input#from-date`);
this.hideInp(`input#to-date`);
@ -193,7 +192,6 @@ class Filter {
const btnValue = btn.getAttribute("value");
this.lastType = btnValue;
console.log(this.lastType);
//run filter
this.filter();
}
@ -402,6 +400,62 @@ class Upload {
}
}
class Modal {
constructor(prefix = "plugins") {
this.prefix = prefix;
this.container = document.querySelector(`[${this.prefix}-list]`);
this.modal = document.querySelector(`[${this.prefix}-modal]`);
this.modalNameInp = this.modal.querySelector("input#name");
this.modalTitle = this.modal.querySelector(`[${this.prefix}-modal-title]`);
this.modalTxt = this.modal.querySelector(`[${this.prefix}-modal-text]`);
this.init();
}
init() {
this.container.addEventListener("click", (e) => {
//DELETE HANDLER
try {
if (
e.target.closest("button").getAttribute(`${this.prefix}`) === "delete"
) {
const btnEl = e.target.closest("button");
const name = btnEl.getAttribute("name");
this.setModal(name);
this.showModal();
}
} catch (err) {}
});
this.modal.addEventListener("click", (e) => {
//CLOSE MODAL HANDLER
try {
if (
e.target.closest("button").hasAttribute(`${this.prefix}-modal-close`)
) {
this.hideModal();
}
} catch (err) {}
});
}
setModal(name) {
this.modalNameInp.value = name;
this.modalTitle.textContent = `DELETE ${name}`;
this.modalTxt.textContent = `Are you sure you want to delete ${name}`;
}
showModal() {
this.modal.classList.add("flex");
this.modal.classList.remove("hidden");
}
hideModal() {
this.modal.classList.add("hidden");
this.modal.classList.remove("flex");
}
}
const setDropdown = new Dropdown("plugins");
const setFilter = new Filter("plugins");
const setUpload = new Upload();
const setModal = new Modal("plugins");

View File

@ -319,7 +319,6 @@ class Multiple {
);
//clone it and change name by total - 1 (schema is hidden)
const clone = schema.cloneNode(true);
console.log(clone.getAttribute("services-settings-multiple"));
const name = clone
.getAttribute("services-settings-multiple")
.replace(`SCHEMA`, `${count + 1}`);
@ -519,7 +518,6 @@ class Multiple {
`[${this.prefix}-settings-multiple]`
);
multiples.forEach((container) => {
console.log(container.querySelectorAll(`[setting-container]`));
if (container.querySelectorAll(`[setting-container]`).length <= 0)
container.parentElement
.querySelector("[multiple-handler]")
@ -583,7 +581,6 @@ class FilterSettings {
const settingCount = settings.length;
let hiddenCount = 0;
settings.forEach((setting) => {
console.log(setting);
try {
const title = setting
.querySelector("h5")

View File

@ -325,13 +325,27 @@ class FolderModal {
//add folder
try {
if (e.target.closest("li").hasAttribute(`${this.prefix}-add-folder`)) {
this.setModal("new", this.getPathFromBread(), "folder", "");
this.setModal(
"new",
this.getPathFromBread(),
"folder",
"",
"",
this.getLevelFromBread()
);
}
} catch (err) {}
//add file
try {
if (e.target.closest("li").hasAttribute(`${this.prefix}-add-file`)) {
this.setModal("new", this.getPathFromBread(), "file", "");
this.setModal(
"new",
this.getPathFromBread(),
"file",
"",
"",
this.getLevelFromBread()
);
}
} catch (err) {}
});
@ -444,6 +458,10 @@ class FolderModal {
return `${path}/`;
}
getLevelFromBread() {
const level = this.breadContainer.lastElementChild.getAttribute("level");
return level;
}
//set all needed data from btn action and folder info
setModal(action, path, type, content, name, level) {
//title

View File

@ -34,6 +34,22 @@
flash-message
class="p-4 mb-1 md:mb-3 md:mr-3 z-[1001] flex flex-col fixed bottom-0 right-0 w-full md:w-1/2 max-w-[300px] min-h-20 bg-white rounded-lg dark:brightness-110 hover:scale-102 transition shadow-md break-words dark:bg-slate-850 dark:shadow-dark-xl bg-clip-border"
>
<button
close-flash-message
role="close alert message"
type="button"
class="absolute right-7 top-1.5"
>
<svg
class="cursor-pointer fill-gray-600 dark:fill-gray-300 dark:opacity-80 absolute h-5 w-5"
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 320 512"
>
<path
d="M310.6 150.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L160 210.7 54.6 105.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L114.7 256 9.4 361.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L160 301.3 265.4 406.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L205.3 256 310.6 150.6z"
></path>
</svg>
</button>
{% if category == 'error' %}
<h5 class="text-lg mb-0 text-red-500">Error</h5>
<p class="text-gray-700 dark:text-gray-300 mb-0 text-sm">
@ -50,6 +66,7 @@
<!-- end flash message-->
{% endif %} {% endwith %}
</div>
<!-- info -->
<main
class="absolute xl:pl-75 w-full px-2 sm:px-6 pb-0 pt-20 sm:pt-6 min-h-[91vh] flex flex-col justify-between"

View File

@ -27,7 +27,7 @@
>
<!-- case remote and no match-->
{% elif remote_version and not check_version %}
<span class="font-bold leading-normal text-sm text-yellow-50-500 mx-0.5"
<span class="font-bold leading-normal text-sm text-yellow-500 mx-0.5"
>Update to</span
>{{ remote_version }} {% endif %}
</p>

View File

@ -16,25 +16,45 @@
<link rel="stylesheet" href="css/dashboard.css" />
</head>
<body>
{% if error %} {% with messages = get_flashed_messages(with_categories=true)
%} {% if messages %}
{% with messages = get_flashed_messages(with_categories=true) %} {% if
messages %}
<!-- flash message-->
{% for category, message in messages %}
<div
flash-message
class="p-4 mb-1 md:mb-3 md:mr-3 z-[1001] flex flex-col fixed bottom-0 right-0 w-full md:w-1/2 max-w-screen-sm min-h-20 bg-white rounded-lg dark:brightness-110 hover:scale-102 transition shadow-md break-words dark:bg-slate-850 dark:shadow-dark-xl bg-clip-border"
class="p-4 mb-1 md:mb-3 md:mr-3 z-[1001] flex flex-col fixed bottom-0 right-0 w-full md:w-1/2 max-w-[300px] min-h-20 bg-white rounded-lg dark:brightness-110 hover:scale-102 transition shadow-md break-words dark:bg-slate-850 dark:shadow-dark-xl bg-clip-border"
>
<button
close-flash-message
role="close alert message"
type="button"
class="absolute right-7 top-1.5"
>
<svg
class="cursor-pointer fill-gray-600 dark:fill-gray-300 dark:opacity-80 absolute h-5 w-5"
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 320 512"
>
<path
d="M310.6 150.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L160 210.7 54.6 105.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L114.7 256 9.4 361.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L160 301.3 265.4 406.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L205.3 256 310.6 150.6z"
></path>
</svg>
</button>
{% if category == 'error' %}
<h5 class="text-lg mb-0 text-red-500">Error</h5>
<p class="text-red-500 mb-0 text-sm">{{ message|safe }}</p>
<p class="text-gray-700 dark:text-gray-300 mb-0 text-sm">
{{ message|safe }}
</p>
{% else %}
<h5 class="text-lg mb-0 text-green-500">Success</h5>
<p class="text-green-500 mb-0 text-sm">{{ message|safe }}</p>
<p class="text-gray-700 dark:text-gray-300 mb-0 text-sm">
{{ message|safe }}
</p>
{% endif %}
</div>
{% endfor %}
<!-- end flash message-->
{% endif %} {% endwith %} {%endif %}
{% endif %} {% endwith %}
<!-- end flash message-->
<!--content -->
<main class="grid grid-cols-2 align-middle items-center min-h-screen">

View File

@ -316,7 +316,7 @@
<a
target="_blank"
class="{% if current_endpoint == 'logs' %}font-semibold text-slate-700 dark:bg-primary/50 rounded-lg dark:hover:bg-primary/60 bg-primary/20 hover:bg-primary/30{% else %}dark:hover:bg-primary/20 hover:bg-primary/5 {% endif %} hover:rounded-lg dark:text-white dark:opacity-80 py-1 text-sm ease-nav-brand my-0 mx-2 flex items-center whitespace-nowrap px-4 transition"
href="/plugins?{{plugin['id']}}"
href="{{request.url_root}}/plugins?{{plugin['id']}}"
>
<div
class="mr-2 flex items-center justify-center rounded-lg bg-center stroke-0 text-center p-1 xl:p-1.5"
@ -404,7 +404,7 @@
/></svg
></a>
</li>
<li class="mx-2.5 w-6">
<li class="mx-2.5 w-6 -translate-y-1">
<a href="https://discord.gg/fTf46FmtyD" target="_blank"
><svg
class="translate-y-1 hover:opacity-80"

View File

@ -1,11 +1,11 @@
<!-- modal -->
<div
plugins-modal
class="dark:brightness-110 hidden w-screen h-screen fixed bg-gray-600/50 z-[1001] top-0 left-0 justify-center items-center"
class="dark:brightness-110 w-screen h-screen fixed bg-gray-600/50 z-[1001] top-0 left-0 flex justify-center items-center"
>
<div
plugins-modal-card
class="overflow-y-auto mx-3 ml-2 mr-6 sm:mx-6 lg:mx-8 my-3 px-4 pt-4 pb-8 w-full h-[90vh] flex flex-col break-words bg-white shadow-xl dark:bg-slate-850 dark:shadow-dark-xl rounded-2xl bg-clip-border"
class="overflow-y-auto mx-3 ml-2 mr-6 sm:mx-6 lg:mx-8 my-3 px-4 pt-4 pb-8 w-full max-w-[400px] flex flex-col break-words bg-white shadow-xl dark:bg-slate-850 dark:shadow-dark-xl rounded-2xl bg-clip-border"
>
<div class="w-full flex justify-between mb-2">
<p
@ -30,12 +30,12 @@
<form
plugins-modal-form-delete
class="w-full h-full flex flex-col justify-between"
id="form-delete-server_name"
id="form-delete-plugin"
method="POST"
>
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
<input type="hidden" value="server_name" name="SERVER_NAME" />
<input type="hidden" value="delete" name="operation" />
<input type="hidden" value="name" name="name" id="name" />
<input type="hidden" value="delete" name="operation" id="operation" />
<div>
<p
plugins-modal-text

View File

@ -1,5 +1,7 @@
{% extends "base.html" %} {% block content %}{% set current_endpoint =
url_for(request.endpoint)[1:].split("/")[-1].strip().replace('_', '-') %}
url_for(request.endpoint)[1:].split("/")[-1].strip().replace('_', '-') %} {%
include "plugins-modal.html" %}
<!-- info -->
<div
class="p-4 col-span-12 md:col-span-5 2xl:col-span-4 relative min-w-0 break-words bg-white shadow-xl dark:bg-slate-850 dark:shadow-dark-xl rounded-2xl bg-clip-border"
@ -117,7 +119,7 @@ url_for(request.endpoint)[1:].split("/")[-1].strip().replace('_', '-') %}
<!-- filter -->
<div
{{current_endpoint}}-filter
class="p-4 col-span-12 2xl:col-span-4 relative min-w-0 break-words bg-white shadow-xl dark:bg-slate-850 dark:shadow-dark-xl rounded-2xl bg-clip-border"
class="p-4 col-span-12 md:col-span-6 2xl:col-span-4 relative min-w-0 break-words bg-white shadow-xl dark:bg-slate-850 dark:shadow-dark-xl rounded-2xl bg-clip-border"
>
<h5 class="mb-2 font-bold dark:text-white">FILTER</h5>
<div class="grid grid-cols-12 gap-x-4 gap-y-2">
@ -213,7 +215,7 @@ url_for(request.endpoint)[1:].split("/")[-1].strip().replace('_', '-') %}
<h5 class="col-mb-2 font-bold dark:text-white">LIST</h5>
<div {{current_endpoint}}-list class="grid grid-cols-12 gap-3">
{% for plugin in plugins %} {% if plugin['page'] %}
{% for plugin in plugins %} {% if plugin['external'] %}
<div
{{current_endpoint}}-external="{% if plugin['external'] %} external {%else%} internal {%endif%}"
class="py-3 min-h-12 relative col-span-12 sm:col-span-6 2xl:col-span-4 3xl:col-span-3 p-1 flex justify-between items-center transition rounded bg-gray-100 hover:bg-gray-300 dark:bg-slate-700 dark:hover:bg-slate-800"
@ -225,7 +227,11 @@ url_for(request.endpoint)[1:].split("/")[-1].strip().replace('_', '-') %}
{{plugin['name']}}
</p>
<div class="flex items-center">
<a class="hover:-translate-y-px" href="/plugins?{{plugin['id']}}">
{% if plugin['page']%}
<a
class="hover:-translate-y-px"
href="{{request.url_root}}/plugins?{{plugin['id']}}"
>
<svg
class="h-6 w-6 fill-sky-500 dark dark:brightness-90"
xmlns="http://www.w3.org/2000/svg"
@ -236,6 +242,7 @@ url_for(request.endpoint)[1:].split("/")[-1].strip().replace('_', '-') %}
></path>
</svg>
</a>
{%endif%}
<button
{{current_endpoint}}-action="delete"
name="{{plugin['id']}}"
@ -255,7 +262,6 @@ url_for(request.endpoint)[1:].split("/")[-1].strip().replace('_', '-') %}
</div>
</div>
{% else %}
<div
{{current_endpoint}}-external="{% if plugin['external'] %} external {%else%} internal {%endif%}"
class="py-3 min-h-12 relative col-span-12 sm:col-span-6 2xl:col-span-4 3xl:col-span-3 p-1 flex justify-between items-center transition rounded bg-gray-100 hover:bg-gray-300 dark:bg-slate-700 dark:hover:bg-slate-800"