File size: 1,801 Bytes
6aae67a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
/** @format */

const DialogManager = {
  createDialog(type, message) {
    const dialog = document.createElement("div");
    const overlay = document.createElement("div");
    // .confirm-dialog,
    // .alert-dialog
    dialog.className = `${type}-dialog`;
    dialog.classList.add("inv");
    overlay.className = "overlay";
    dialog.innerHTML = `
          <h4>${message}</h4>
          <div class="buttons inv">
            <button class="ok inv">OK</button>
            ${type === "confirm" ? '<button class="cancel inv">Annulla</button>' : ""}
          </div>
        `;
    [dialog, overlay].forEach((el) => {
      el.classList.add("show");
      document.body.appendChild(el);
    });
    return { dialog, overlay };
  },

  closeDialog(dialog, overlay) {
    [dialog, overlay].forEach((el) => {
      el.classList.remove("show");
      setTimeout(() => el.remove(), 300);
    });
  },

  showDialog(type, message) {
    return new Promise((resolve) => {
      const { dialog, overlay } = this.createDialog(type, message);
      dialog.querySelector(".ok").onclick = () => {
        this.closeDialog(dialog, overlay);
        resolve(type === "confirm");
      };
      if (type === "confirm") {
        dialog.querySelector(".cancel").onclick = () => {
          this.closeDialog(dialog, overlay);
          resolve(false);
        };
      }
    });
  },
};

// Salviamo i riferimenti alle funzioni native
const nativeAlert = window.alert;
const nativeConfirm = window.confirm;

// Sovrascriviamo alert
window.alert = function (message) {
  if (message instanceof Error) {
    message = message.message;
  }
  return DialogManager.showDialog("alert", message);
};

// Sovrascriviamo confirm
window.confirm = function (message) {
  return DialogManager.showDialog("confirm", message);
};