Add code for creating buttions with confirmation prompts.
This commit is contained in:
parent
949f7177de
commit
fd6943fce1
1 changed files with 91 additions and 0 deletions
|
@ -146,3 +146,94 @@ function normalize_tagname(tagname)
|
|||
tagname = tagname.replace(new RegExp("-", 'g'), "_");
|
||||
return tagname;
|
||||
}
|
||||
|
||||
common.init_button_with_confirm =
|
||||
function init_button_with_confirm()
|
||||
{
|
||||
/*
|
||||
To create a button that requires confirmation, simply assign it the class
|
||||
"button_with_confirm" and give it a data-onclick that would normally
|
||||
be the onclick. The rest is taken care of automatically.
|
||||
|
||||
Optional:
|
||||
data-prompt, otherwise "Are you sure?".
|
||||
data-prompt-class
|
||||
|
||||
data-confirm, otherwise inherits the original button's text.
|
||||
data-confirm-class
|
||||
|
||||
data-cancel, otherwise "Cancel".
|
||||
data-cancel-class
|
||||
*/
|
||||
var buttons = document.getElementsByClassName("button_with_confirm");
|
||||
for (var index = 0; index < buttons.length; index += 1)
|
||||
{
|
||||
var button = buttons[index];
|
||||
var holder = document.createElement("span");
|
||||
holder.classList.add("confirm_holder");
|
||||
button.parentElement.insertBefore(holder, button);
|
||||
button.parentElement.removeChild(button);
|
||||
|
||||
var holder_stage1 = document.createElement("span");
|
||||
holder_stage1.classList.add("confirm_holder_stage1");
|
||||
holder_stage1.appendChild(button);
|
||||
holder.appendChild(holder_stage1);
|
||||
|
||||
var holder_stage2 = document.createElement("span");
|
||||
holder_stage2.classList.add("confirm_holder_stage2");
|
||||
holder_stage2.classList.add("hidden");
|
||||
holder.appendChild(holder_stage2);
|
||||
|
||||
var span_prompt = document.createElement("span");
|
||||
span_prompt.innerText = (button.dataset.prompt || "Are you sure?") + " ";
|
||||
span_prompt.className = button.dataset.promptClass || "";
|
||||
holder_stage2.appendChild(span_prompt)
|
||||
delete button.dataset.prompt;
|
||||
delete button.dataset.promptClass;
|
||||
|
||||
var button_confirm = document.createElement("button");
|
||||
button_confirm.innerText = button.dataset.confirm || button.innerText;
|
||||
button_confirm.className = button.dataset.confirmClass || "";
|
||||
holder_stage2.appendChild(button_confirm);
|
||||
delete button.dataset.confirm;
|
||||
delete button.dataset.confirmClass;
|
||||
|
||||
var button_cancel = document.createElement("button");
|
||||
button_cancel.innerText = button.dataset.cancel || "Cancel";
|
||||
button_cancel.className = button.dataset.cancelClass || "";
|
||||
holder_stage2.appendChild(button_cancel);
|
||||
delete button.dataset.cancel;
|
||||
delete button.dataset.cancelClass;
|
||||
|
||||
// If this is stupid, let me know.
|
||||
var confirm_onclick = button.dataset.onclick + `
|
||||
;
|
||||
var holder = event.target.parentElement.parentElement;
|
||||
holder.getElementsByClassName("confirm_holder_stage1")[0].classList.remove("hidden");
|
||||
holder.getElementsByClassName("confirm_holder_stage2")[0].classList.add("hidden");
|
||||
`
|
||||
button_confirm.setAttribute("onclick", confirm_onclick);
|
||||
button.removeAttribute("onclick");
|
||||
button.onclick = function(event)
|
||||
{
|
||||
var holder = event.target.parentElement.parentElement;
|
||||
holder.getElementsByClassName("confirm_holder_stage1")[0].classList.add("hidden");
|
||||
holder.getElementsByClassName("confirm_holder_stage2")[0].classList.remove("hidden");
|
||||
}
|
||||
|
||||
button_cancel.onclick = function(event)
|
||||
{
|
||||
var holder = event.target.parentElement.parentElement;
|
||||
holder.getElementsByClassName("confirm_holder_stage1")[0].classList.remove("hidden");
|
||||
holder.getElementsByClassName("confirm_holder_stage2")[0].classList.add("hidden");
|
||||
}
|
||||
delete button.dataset.onclick;
|
||||
}
|
||||
}
|
||||
|
||||
common.on_pageload =
|
||||
function on_pageload()
|
||||
{
|
||||
common.init_button_with_confirm();
|
||||
}
|
||||
document.addEventListener("DOMContentLoaded", common.on_pageload);
|
||||
|
|
Loading…
Reference in a new issue