Invitations redesign
This commit is contained in:
parent
5219414b10
commit
50a77ac5fa
|
@ -206,4 +206,16 @@ tr.deleted {
|
||||||
tr.deleted {
|
tr.deleted {
|
||||||
background: repeating-linear-gradient(-45deg, transparent 0 2rem, var(--bulma-danger-05) 2rem 4rem);
|
background: repeating-linear-gradient(-45deg, transparent 0 2rem, var(--bulma-danger-05) 2rem 4rem);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.modal-card-title {
|
||||||
|
width: 100%
|
||||||
|
}
|
||||||
|
|
||||||
|
.modal-card-title p {
|
||||||
|
width: 95%
|
||||||
|
}
|
||||||
|
|
||||||
|
.files-list {
|
||||||
|
list-style: disc;
|
||||||
}
|
}
|
|
@ -1,5 +1,5 @@
|
||||||
import { filesize } from "~/lib/filesize.esm.min.js";
|
import { filesize } from "~/lib/filesize.esm.min.js";
|
||||||
import { addToast, hideNode, showNode } from "~/lib/utils.js";
|
import { addToast, formatDate, hideNode, showNode } from "~/lib/utils.js";
|
||||||
|
|
||||||
const updateButtonsStatus = () => {
|
const updateButtonsStatus = () => {
|
||||||
const targetSelectionDOM = document.querySelectorAll(".target-selection");
|
const targetSelectionDOM = document.querySelectorAll(".target-selection");
|
||||||
|
@ -159,7 +159,9 @@ const toggleVisibility = () => {
|
||||||
if (t.show) {
|
if (t.show) {
|
||||||
itemDOM.setAttribute("data-visibility", "shown");
|
itemDOM.setAttribute("data-visibility", "shown");
|
||||||
showNode(itemDOM);
|
showNode(itemDOM);
|
||||||
itemDOM.querySelector(".selection .icon").classList.add("is-hidden");
|
itemDOM
|
||||||
|
.querySelector(".selection .icon")
|
||||||
|
.classList.add("is-hidden");
|
||||||
} else {
|
} else {
|
||||||
itemDOM.setAttribute("data-visibility", "hidden");
|
itemDOM.setAttribute("data-visibility", "hidden");
|
||||||
|
|
||||||
|
@ -170,7 +172,9 @@ const toggleVisibility = () => {
|
||||||
hideNode(itemDOM);
|
hideNode(itemDOM);
|
||||||
}
|
}
|
||||||
|
|
||||||
itemDOM.querySelector(".selection .icon").classList.remove("is-hidden")
|
itemDOM
|
||||||
|
.querySelector(".selection .icon")
|
||||||
|
.classList.remove("is-hidden");
|
||||||
}
|
}
|
||||||
|
|
||||||
itemDOM.querySelector(".selection input").click();
|
itemDOM.querySelector(".selection input").click();
|
||||||
|
@ -194,18 +198,20 @@ const getTokensBody = () => {
|
||||||
return tokens;
|
return tokens;
|
||||||
};
|
};
|
||||||
|
|
||||||
const fillModal = (event) => {
|
const fillModal = (buttonDOM) => {
|
||||||
const buttonDOM = event.target;
|
const modalDOM = document.getElementById("modal-files-list");
|
||||||
const modalDOM = document.querySelector(".modal.files-info");
|
|
||||||
|
|
||||||
// Cleanup the modal
|
// Cleanup the modal
|
||||||
modalDOM.querySelector(".files-list").replaceChildren();
|
modalDOM.querySelector(".files-list").replaceChildren();
|
||||||
|
|
||||||
modalDOM.querySelector("h1").innerText = i18n.listFiles
|
modalDOM.querySelector("header .modal-card-title p").innerText =
|
||||||
.replace("XX1", buttonDOM.dataset.token)
|
i18n.listFiles
|
||||||
.replace("XX2", buttonDOM.dataset.guest);
|
.replace("XX1", buttonDOM.dataset.token)
|
||||||
|
.replace("XX2", buttonDOM.dataset.guest);
|
||||||
|
|
||||||
const files = JSON.parse(buttonDOM.dataset.files) || [];
|
const files = buttonDOM.dataset.files
|
||||||
|
? JSON.parse(buttonDOM.dataset.files)
|
||||||
|
: [];
|
||||||
const itemList = new DocumentFragment();
|
const itemList = new DocumentFragment();
|
||||||
|
|
||||||
files.forEach((file) => {
|
files.forEach((file) => {
|
||||||
|
@ -213,15 +219,15 @@ const fillModal = (event) => {
|
||||||
"XXX",
|
"XXX",
|
||||||
formatDate(file.delay * 86400 + file.created_at)
|
formatDate(file.delay * 86400 + file.created_at)
|
||||||
);
|
);
|
||||||
const item = modalDOM
|
const item = document.querySelector("template#item").content.cloneNode(true)
|
||||||
.querySelector("template#item")
|
.children[0];
|
||||||
.content.cloneNode(true);
|
|
||||||
|
|
||||||
|
console.debug(file.name);
|
||||||
item.querySelector(".file-link").href = file.url;
|
item.querySelector(".file-link").href = file.url;
|
||||||
item.querySelector(".file-link").value = file.name;
|
item.querySelector(".file-link").innerText = file.name;
|
||||||
item.querySelector(".file-size").innerText = `${filesize(
|
item.querySelector(".file-size").innerText = `(${filesize(
|
||||||
file.size
|
file.size
|
||||||
)}, ${expires}`;
|
)}, ${expires})`;
|
||||||
|
|
||||||
itemList.appendChild(item);
|
itemList.appendChild(item);
|
||||||
});
|
});
|
||||||
|
@ -230,18 +236,13 @@ const fillModal = (event) => {
|
||||||
};
|
};
|
||||||
|
|
||||||
document.addEventListener("DOMContentLoaded", () => {
|
document.addEventListener("DOMContentLoaded", () => {
|
||||||
document.querySelectorAll(".modal-button.action-files-info").forEach(
|
document
|
||||||
(button) =>
|
.querySelectorAll(".js-modal-trigger.action-files-info")
|
||||||
(button.onclick = (event) => {
|
.forEach((node) => {
|
||||||
fillModal(event);
|
node.addEventListener("click", () => {
|
||||||
|
fillModal(node);
|
||||||
document.querySelector(".modal.files-info").showModal();
|
});
|
||||||
})
|
});
|
||||||
);
|
|
||||||
|
|
||||||
document.querySelector(".close-modal").onclick = () => {
|
|
||||||
document.querySelector(".modal").close();
|
|
||||||
};
|
|
||||||
|
|
||||||
document
|
document
|
||||||
.querySelectorAll(".selection input")
|
.querySelectorAll(".selection input")
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
<div class="message is-info">
|
<div class="message is-info">
|
||||||
<div class="message-body">
|
<div class="message-body">
|
||||||
<p>
|
<p>
|
||||||
<%= l('Rows in purple mean that the invitations have expired.') %>
|
<%= l('Hatched lines mean that the invitations have expired.') %>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -60,48 +60,32 @@
|
||||||
<td class="actions is-vcentered">
|
<td class="actions is-vcentered">
|
||||||
% if ($e->files) {
|
% if ($e->files) {
|
||||||
<a
|
<a
|
||||||
class="button modal-button action-files-info"
|
class="js-modal-trigger button action-files-info is-primary"
|
||||||
href="#files-info"
|
href="#files-info"
|
||||||
data-files='<%= $e->files %>'
|
data-files="<%= $e->files %>"
|
||||||
data-token="<%= $e->token %>"
|
data-token="<%= $e->token %>"
|
||||||
data-guest="<%= $e->guest_mail %>"
|
data-guest="<%= $e->guest_mail %>"
|
||||||
|
data-target="modal-files-list"
|
||||||
>
|
>
|
||||||
<%= l('Files') %>
|
<%= l('Files') %>
|
||||||
</a>
|
</a>
|
||||||
% }
|
% }
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
% });
|
% });
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<dialog class="modal files-info">
|
|
||||||
<section>
|
|
||||||
<header>
|
|
||||||
<h1><%= l('Files sent in invitation XX1 by XX2') %></h1>
|
|
||||||
</header>
|
|
||||||
|
|
||||||
<div class="content">
|
|
||||||
<ul class="files-list"></ul>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<footer class="actions">
|
|
||||||
<button autofocus class="button close-modal"><%= l('Close') %></button>
|
|
||||||
</footer>
|
|
||||||
</section>
|
|
||||||
</dialog>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div id="modal-files-list" class="modal files-info">
|
||||||
<div id="modal-language-selector" class="modal files-info">
|
|
||||||
<div class="modal-background"></div>
|
<div class="modal-background"></div>
|
||||||
<div class="modal-card">
|
<div class="modal-card">
|
||||||
<header class="modal-card-head is-shadowless">
|
<header class="modal-card-head is-shadowless">
|
||||||
<p class="modal-card-title">
|
<div class="modal-card-title">
|
||||||
<%= l('Files sent in invitation XX1 by XX2') %>
|
<p class="is-inline-block wb-word"><%= l('Files sent in invitation XX1 by XX2') %></p>
|
||||||
<button class="delete is-pulled-right" aria-label="close"></button>
|
<button class="delete is-pulled-right" aria-label="close"></button>
|
||||||
</p>
|
</div>
|
||||||
</header>
|
</header>
|
||||||
|
|
||||||
<section class="modal-card-body">
|
<section class="modal-card-body">
|
||||||
|
|
Loading…
Reference in New Issue