mirror of
https://github.com/miniflux/v2.git
synced 2025-08-01 17:38:37 +00:00
Refactor confirmation handler
This commit is contained in:
parent
2b6e17c1ef
commit
99149d9f2a
9 changed files with 88 additions and 135 deletions
|
@ -99,10 +99,10 @@ function markPageAsRead() {
|
|||
updateEntriesStatus(entryIDs, "read", () => {
|
||||
// Make sure the Ajax request reach the server before we reload the page.
|
||||
|
||||
let element = document.querySelector("a[data-mark-page-as-read]");
|
||||
let element = document.querySelector("a[data-action=markPageAsRead]");
|
||||
let showOnlyUnread = false;
|
||||
if (element) {
|
||||
showOnlyUnread = element.dataset.showOnlyUnread;
|
||||
showOnlyUnread = element.dataset.showOnlyUnread || false;
|
||||
}
|
||||
|
||||
if (showOnlyUnread) {
|
||||
|
@ -462,3 +462,43 @@ function flipElementState(element) {
|
|||
element.parentNode.appendChild(labelElement);
|
||||
element.parentNode.removeChild(element);
|
||||
}
|
||||
|
||||
function handleConfirmationMessage(linkElement, callback) {
|
||||
linkElement.style.display = "none";
|
||||
|
||||
let containerElement = linkElement.parentNode;
|
||||
let questionElement = document.createElement("span");
|
||||
|
||||
let yesElement = document.createElement("a");
|
||||
yesElement.href = "#";
|
||||
yesElement.appendChild(document.createTextNode(linkElement.dataset.labelYes));
|
||||
yesElement.onclick = (event) => {
|
||||
event.preventDefault();
|
||||
|
||||
let loadingElement = document.createElement("span");
|
||||
loadingElement.className = "loading";
|
||||
loadingElement.appendChild(document.createTextNode(linkElement.dataset.labelLoading));
|
||||
|
||||
questionElement.remove();
|
||||
containerElement.appendChild(loadingElement);
|
||||
|
||||
callback(linkElement.dataset.url, linkElement.dataset.redirectUrl);
|
||||
};
|
||||
|
||||
let noElement = document.createElement("a");
|
||||
noElement.href = "#";
|
||||
noElement.appendChild(document.createTextNode(linkElement.dataset.labelNo));
|
||||
noElement.onclick = (event) => {
|
||||
event.preventDefault();
|
||||
linkElement.style.display = "inline";
|
||||
questionElement.remove();
|
||||
};
|
||||
|
||||
questionElement.className = "confirm";
|
||||
questionElement.appendChild(document.createTextNode(linkElement.dataset.labelQuestion + " "));
|
||||
questionElement.appendChild(yesElement);
|
||||
questionElement.appendChild(document.createTextNode(", "));
|
||||
questionElement.appendChild(noElement);
|
||||
|
||||
containerElement.appendChild(questionElement);
|
||||
}
|
||||
|
|
18
ui/static/js/bootstrap.js
vendored
18
ui/static/js/bootstrap.js
vendored
|
@ -38,7 +38,7 @@ document.addEventListener("DOMContentLoaded", function () {
|
|||
onClick("a[data-toggle-bookmark]", () => handleBookmark());
|
||||
onClick("a[data-fetch-content-entry]", () => handleFetchOriginalContent());
|
||||
onClick("a[data-action=search]", (event) => setFocusToSearchInput(event));
|
||||
onClick("a[data-on-click=markPageAsRead]", () => markPageAsRead());
|
||||
onClick("a[data-action=markPageAsRead]", () => handleConfirmationMessage(event.target, () => markPageAsRead()));
|
||||
|
||||
onClick("a[data-toggle-status]", (event) => {
|
||||
let currentItem = DomHelper.findParent(event.target, "entry");
|
||||
|
@ -51,9 +51,19 @@ document.addEventListener("DOMContentLoaded", function () {
|
|||
}
|
||||
});
|
||||
|
||||
onClick("a[data-confirm]", (event) => {
|
||||
(new ConfirmHandler()).handle(event);
|
||||
});
|
||||
onClick("a[data-confirm]", (event) => handleConfirmationMessage(event.target, (url, redirectURL) => {
|
||||
let request = new RequestBuilder(url);
|
||||
|
||||
request.withCallback(() => {
|
||||
if (redirectURL) {
|
||||
window.location.href = redirectURL;
|
||||
} else {
|
||||
window.location.reload();
|
||||
}
|
||||
});
|
||||
|
||||
request.execute();
|
||||
}));
|
||||
|
||||
onClick("a[data-link-state=flip]", (event) => {
|
||||
flipElementState(event.target);
|
||||
|
|
|
@ -1,59 +0,0 @@
|
|||
class ConfirmHandler {
|
||||
executeRequest(url, redirectURL) {
|
||||
let request = new RequestBuilder(url);
|
||||
|
||||
request.withCallback(() => {
|
||||
if (redirectURL) {
|
||||
window.location.href = redirectURL;
|
||||
} else {
|
||||
window.location.reload();
|
||||
}
|
||||
});
|
||||
|
||||
request.execute();
|
||||
}
|
||||
|
||||
handle(event) {
|
||||
let questionElement = document.createElement("span");
|
||||
let linkElement = event.target;
|
||||
let containerElement = linkElement.parentNode;
|
||||
linkElement.style.display = "none";
|
||||
|
||||
let yesElement = document.createElement("a");
|
||||
yesElement.href = "#";
|
||||
yesElement.appendChild(document.createTextNode(linkElement.dataset.labelYes));
|
||||
yesElement.onclick = (event) => {
|
||||
event.preventDefault();
|
||||
|
||||
let loadingElement = document.createElement("span");
|
||||
loadingElement.className = "loading";
|
||||
loadingElement.appendChild(document.createTextNode(linkElement.dataset.labelLoading));
|
||||
|
||||
questionElement.remove();
|
||||
containerElement.appendChild(loadingElement);
|
||||
|
||||
if (linkElement.dataset.markPageAsRead) {
|
||||
markPageAsRead(event.target.dataset.showOnlyUnread || false);
|
||||
} else {
|
||||
this.executeRequest(linkElement.dataset.url, linkElement.dataset.redirectUrl);
|
||||
}
|
||||
};
|
||||
|
||||
let noElement = document.createElement("a");
|
||||
noElement.href = "#";
|
||||
noElement.appendChild(document.createTextNode(linkElement.dataset.labelNo));
|
||||
noElement.onclick = (event) => {
|
||||
event.preventDefault();
|
||||
linkElement.style.display = "inline";
|
||||
questionElement.remove();
|
||||
};
|
||||
|
||||
questionElement.className = "confirm";
|
||||
questionElement.appendChild(document.createTextNode(linkElement.dataset.labelQuestion + " "));
|
||||
questionElement.appendChild(yesElement);
|
||||
questionElement.appendChild(document.createTextNode(", "));
|
||||
questionElement.appendChild(noElement);
|
||||
|
||||
containerElement.appendChild(questionElement);
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue