2022-06-05 00:48:29 +08:00
|
|
|
import {genUUID} from "../util/genID";
|
2022-06-05 14:01:51 +08:00
|
|
|
import {Constants} from "../constants";
|
2022-05-26 15:18:53 +08:00
|
|
|
|
2022-06-05 00:48:29 +08:00
|
|
|
export const initMessage = () => {
|
2022-06-05 00:49:57 +08:00
|
|
|
const messageElement = document.getElementById("message");
|
2022-06-05 00:48:29 +08:00
|
|
|
messageElement.innerHTML = `<div class="fn__flex-1"></div>
|
2022-10-24 22:42:27 +08:00
|
|
|
<button class="b3-button--cancel b3-button b3-tooltips b3-tooltips__w" aria-label="${window.siyuan.languages.clearMessage}"><svg style="margin-right: 0"><use xlink:href="#iconSelect"></use></svg></button>`;
|
2022-06-05 00:48:29 +08:00
|
|
|
messageElement.addEventListener("click", (event) => {
|
2022-06-05 00:49:57 +08:00
|
|
|
let target = event.target as HTMLElement;
|
2022-06-05 00:48:29 +08:00
|
|
|
while (target && !target.isEqualNode(messageElement)) {
|
|
|
|
|
if (target.classList.contains("b3-snackbar__close")) {
|
2022-06-05 00:49:57 +08:00
|
|
|
hideMessage(target.parentElement.getAttribute("data-id"));
|
2022-06-05 00:48:29 +08:00
|
|
|
event.preventDefault();
|
|
|
|
|
break;
|
|
|
|
|
} else if (target.isSameNode(messageElement.lastElementChild)) {
|
2022-06-05 11:59:51 +08:00
|
|
|
target.parentElement.classList.remove("b3-snackbars--show");
|
2022-06-05 14:01:51 +08:00
|
|
|
setTimeout(() => {
|
|
|
|
|
target.parentElement.firstElementChild.innerHTML = "";
|
|
|
|
|
}, Constants.TIMEOUT_INPUT);
|
2022-06-05 00:48:29 +08:00
|
|
|
event.preventDefault();
|
|
|
|
|
break;
|
2023-06-29 01:06:28 +08:00
|
|
|
} else if (target.tagName === "A" || target.tagName === "BUTTON") {
|
|
|
|
|
break;
|
|
|
|
|
} else if (target.classList.contains("b3-snackbar")) {
|
2024-05-09 16:55:36 +08:00
|
|
|
if (getSelection().rangeCount === 0 || !getSelection().getRangeAt(0).toString()) {
|
|
|
|
|
hideMessage(target.getAttribute("data-id"));
|
|
|
|
|
}
|
2023-06-29 01:06:28 +08:00
|
|
|
event.preventDefault();
|
|
|
|
|
event.stopPropagation();
|
|
|
|
|
break;
|
2022-06-05 00:48:29 +08:00
|
|
|
}
|
|
|
|
|
target = target.parentElement;
|
|
|
|
|
}
|
2022-06-05 00:49:57 +08:00
|
|
|
});
|
2024-09-16 12:17:45 +08:00
|
|
|
const tempMessageElement = document.getElementById("tempMessage");
|
2024-09-14 17:46:39 +08:00
|
|
|
if (tempMessageElement) {
|
|
|
|
|
showMessage(tempMessageElement.innerHTML);
|
|
|
|
|
tempMessageElement.remove();
|
|
|
|
|
}
|
2022-06-05 00:49:57 +08:00
|
|
|
};
|
2022-05-26 15:18:53 +08:00
|
|
|
|
2022-06-07 15:01:40 +08:00
|
|
|
// type: info/error; timeout: 0 手动关闭;-1 用不关闭
|
2022-06-05 11:14:18 +08:00
|
|
|
export const showMessage = (message: string, timeout = 6000, type = "info", messageId?: string) => {
|
2022-06-06 22:26:01 +08:00
|
|
|
const messagesElement = document.getElementById("message").firstElementChild;
|
2023-09-20 10:08:35 +08:00
|
|
|
if (!messagesElement) {
|
2024-09-14 17:46:39 +08:00
|
|
|
document.body.insertAdjacentHTML("beforeend", `<div style="top: 10px;
|
|
|
|
|
position: fixed;
|
|
|
|
|
z-index: 100;
|
|
|
|
|
background: white;
|
|
|
|
|
padding: 10px;
|
|
|
|
|
border-radius: 5px;
|
|
|
|
|
right: 10px;
|
|
|
|
|
border: 1px solid #e0e0e0;" id='tempMessage'>${message}</div>`);
|
|
|
|
|
return;
|
2023-09-20 10:08:35 +08:00
|
|
|
}
|
|
|
|
|
const id = messageId || genUUID();
|
2022-06-07 15:01:40 +08:00
|
|
|
const existElement = messagesElement.querySelector(`.b3-snackbar[data-id="${id}"]`);
|
2023-09-20 10:08:35 +08:00
|
|
|
const messageVersion = message + (type === "error" ? " v" + Constants.SIYUAN_VERSION : "");
|
2022-06-06 22:26:01 +08:00
|
|
|
if (existElement) {
|
2022-06-06 23:04:56 +08:00
|
|
|
window.clearTimeout(parseInt(existElement.getAttribute("data-timeoutid")));
|
2024-05-12 23:37:31 +08:00
|
|
|
existElement.innerHTML = `<div data-type="textMenu" class="b3-snackbar__content${timeout === 0 ? " b3-snackbar__content--close" : ""}">${messageVersion}</div>${timeout === 0 ? '<svg class="b3-snackbar__close"><use xlink:href="#iconCloseRound"></use></svg>' : ""}`;
|
2022-06-07 10:59:31 +08:00
|
|
|
if (type === "error") {
|
2022-06-07 15:01:40 +08:00
|
|
|
existElement.classList.add("b3-snackbar--error");
|
2022-06-07 10:59:31 +08:00
|
|
|
} else {
|
2022-06-07 15:01:40 +08:00
|
|
|
existElement.classList.remove("b3-snackbar--error");
|
2022-06-07 10:59:31 +08:00
|
|
|
}
|
2022-06-06 23:04:56 +08:00
|
|
|
if (timeout > 0) {
|
|
|
|
|
const timeoutId = window.setTimeout(() => {
|
|
|
|
|
hideMessage(id);
|
|
|
|
|
}, timeout);
|
|
|
|
|
existElement.setAttribute("data-timeoutid", timeoutId.toString());
|
|
|
|
|
}
|
2022-06-06 22:26:01 +08:00
|
|
|
return;
|
|
|
|
|
}
|
2024-05-12 23:37:31 +08:00
|
|
|
let messageHTML = `<div data-id="${id}" class="b3-snackbar--hide b3-snackbar${type === "error" ? " b3-snackbar--error" : ""}"><div data-type="textMenu" class="b3-snackbar__content${timeout === 0 ? " b3-snackbar__content--close" : ""}">${messageVersion}</div>`;
|
2022-05-26 15:18:53 +08:00
|
|
|
if (timeout === 0) {
|
2023-03-24 10:01:48 +08:00
|
|
|
messageHTML += '<svg class="b3-snackbar__close"><use xlink:href="#iconCloseRound"></use></svg>';
|
2022-06-05 00:48:29 +08:00
|
|
|
} else if (timeout !== -1) { // -1 时需等待请求完成后手动关闭
|
2022-06-06 23:04:56 +08:00
|
|
|
const timeoutId = window.setTimeout(() => {
|
2022-06-05 00:48:29 +08:00
|
|
|
hideMessage(id);
|
|
|
|
|
}, timeout);
|
2022-06-07 10:59:31 +08:00
|
|
|
messageHTML = messageHTML.replace("<div data-id", `<div data-timeoutid="${timeoutId}" data-id`);
|
2022-05-26 15:18:53 +08:00
|
|
|
}
|
2022-10-29 01:30:35 +08:00
|
|
|
messagesElement.parentElement.classList.add("b3-snackbars--show");
|
2024-05-12 23:37:31 +08:00
|
|
|
messagesElement.parentElement.style.zIndex = (++window.siyuan.zIndex).toString();
|
2022-06-05 00:48:29 +08:00
|
|
|
messagesElement.insertAdjacentHTML("afterbegin", messageHTML + "</div>");
|
2022-06-05 14:01:51 +08:00
|
|
|
setTimeout(() => {
|
|
|
|
|
messagesElement.querySelectorAll(".b3-snackbar--hide").forEach(item => {
|
|
|
|
|
item.classList.remove("b3-snackbar--hide");
|
|
|
|
|
});
|
|
|
|
|
});
|
2022-06-05 11:14:18 +08:00
|
|
|
if (messagesElement.firstElementChild.nextElementSibling &&
|
|
|
|
|
messagesElement.firstElementChild.nextElementSibling.innerHTML === messagesElement.firstElementChild.innerHTML) {
|
|
|
|
|
messagesElement.firstElementChild.nextElementSibling.remove();
|
|
|
|
|
}
|
2022-06-05 11:59:51 +08:00
|
|
|
messagesElement.scrollTo({
|
|
|
|
|
top: 0,
|
|
|
|
|
behavior: "smooth"
|
|
|
|
|
});
|
2022-06-05 00:48:29 +08:00
|
|
|
return id;
|
2022-05-26 15:18:53 +08:00
|
|
|
};
|
|
|
|
|
|
2022-09-09 10:10:38 +08:00
|
|
|
export const hideMessage = (id?: string) => {
|
2022-06-05 00:49:57 +08:00
|
|
|
const messagesElement = document.getElementById("message").firstElementChild;
|
2023-07-05 19:18:52 +08:00
|
|
|
if (!messagesElement) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
2022-09-09 10:10:38 +08:00
|
|
|
if (id) {
|
|
|
|
|
const messageElement = messagesElement.querySelector(`[data-id="${id}"]`);
|
|
|
|
|
if (messageElement) {
|
|
|
|
|
messageElement.classList.add("b3-snackbar--hide");
|
2024-09-09 23:33:55 +08:00
|
|
|
window.clearTimeout(parseInt(messageElement.getAttribute("data-timeoutid")));
|
2022-09-09 10:10:38 +08:00
|
|
|
setTimeout(() => {
|
|
|
|
|
messageElement.remove();
|
2022-10-29 01:30:35 +08:00
|
|
|
if (messagesElement.childElementCount === 0) {
|
2024-09-10 00:09:51 +08:00
|
|
|
messagesElement.parentElement.classList.remove("b3-snackbars--show");
|
|
|
|
|
messagesElement.innerHTML = "";
|
2022-10-29 01:30:35 +08:00
|
|
|
}
|
2022-09-09 10:10:38 +08:00
|
|
|
}, Constants.TIMEOUT_INPUT);
|
|
|
|
|
}
|
2022-10-30 00:16:48 +08:00
|
|
|
let hasShowItem = false;
|
2022-10-29 01:30:35 +08:00
|
|
|
Array.from(messagesElement.children).find(item => {
|
|
|
|
|
if (!item.classList.contains("b3-snackbar--hide")) {
|
2022-10-30 00:16:48 +08:00
|
|
|
hasShowItem = true;
|
2022-10-29 01:30:35 +08:00
|
|
|
return true;
|
|
|
|
|
}
|
2022-10-30 00:16:48 +08:00
|
|
|
});
|
2022-10-29 01:30:35 +08:00
|
|
|
if (hasShowItem) {
|
|
|
|
|
messagesElement.parentElement.classList.add("b3-snackbars--show");
|
|
|
|
|
} else {
|
2022-09-09 10:10:38 +08:00
|
|
|
messagesElement.parentElement.classList.remove("b3-snackbars--show");
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
messagesElement.parentElement.classList.remove("b3-snackbars--show");
|
2022-06-05 11:59:51 +08:00
|
|
|
setTimeout(() => {
|
2022-09-09 10:10:38 +08:00
|
|
|
messagesElement.innerHTML = "";
|
2022-06-05 14:01:51 +08:00
|
|
|
}, Constants.TIMEOUT_INPUT);
|
2022-06-09 10:57:27 +08:00
|
|
|
}
|
2022-05-26 15:18:53 +08:00
|
|
|
};
|