Skip to content

Commit 83f9025

Browse files
authored
Merge pull request #4 from Elariondakta/dev
Dev
2 parents f95ded4 + 164f753 commit 83f9025

18 files changed

+7220
-12175
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "automate",
3-
"version": "1.2.0",
3+
"version": "2.3.0",
44
"private": true,
55
"scripts": {
66
"start": "node app.js"

public/js/viewDashboard.js

Lines changed: 97 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,9 @@ class VueDashboard {
2828
this.removeCron_modalConfirm = document.querySelector("#remove_modal .modal-confirm");
2929
this.removeCronModal = M.Modal.init(document.querySelector("#remove_modal"));
3030

31+
this.optionsModal = M.Modal.init(document.querySelector("#options_modal"));
32+
this.editMessageModal = M.Modal.init(document.querySelector("#editMessage"));
33+
3134
this.tableLines = document.querySelectorAll("tbody tr");
3235
this.guild_id = new URLSearchParams(location.search).get("id");
3336

@@ -68,6 +71,7 @@ class VueDashboard {
6871
}
6972

7073
addEventListener() {
74+
this.tableLines = document.querySelectorAll("tbody tr");
7175
document.querySelector(".schedule-add-btn").addEventListener("click", () => this.addCronModal.open());
7276
document.querySelector(".timer-add-btn").addEventListener("click", () => this.addTimerModal.open());
7377
document.querySelector(".guild-timezone").addEventListener("click", () => this.timezoneModal.open());
@@ -79,11 +83,18 @@ class VueDashboard {
7983
document.querySelectorAll(".user_el").forEach(el => el.addEventListener("click", () => this.onUserClick(el)));
8084
document.querySelectorAll(".channel_el").forEach(el => el.addEventListener("click", () => this.onChannelClick(el)));
8185
document.querySelector("#setTimezone .modal-confirm").addEventListener("click", () => this.onConfirmSetTimer());
86+
document.querySelector("#options_modal .delete").addEventListener("click", () => this.onRemoveEl());
87+
document.querySelector("#options_modal .edit").addEventListener("click", () => this.onOpenEdit());
88+
document.querySelector("#editMessage .modal-confirm").addEventListener("click", () => this.onConfirmUpdateMessage());
8289
this.eachSelect.addEventListener("change", () => this.onChangeEachSelect());
8390
this.addCron_modalConfirm.addEventListener("click", () => this.onConfirmAddCron());
8491
this.addTimer_modalConfirm.addEventListener("click", () => this.onConfirmAddTimer());
8592

86-
this.tableLines.forEach(el => el.addEventListener("click", () => this.onTableLineCLick(el)));
93+
this.tableLines.forEach(el => {
94+
el.addEventListener("click", () => this.onElClick(el));
95+
el.querySelector(".edit").addEventListener("click", () => this.onOpenEdit(el));
96+
el.querySelector(".delete").addEventListener("click", () => this.onRemoveEl(el));
97+
});
8798
this.removeCron_modalConfirm.addEventListener("click", () => this.onConfirmRemoveCron());
8899
}
89100

@@ -371,11 +382,22 @@ class VueDashboard {
371382
} else response.text().then((responseText) => {
372383
let name;
373384
document.channels.forEach(element => {if(element.id == channel_id) name = element.name;});
374-
document.querySelector("tbody").insertAdjacentHTML("afterbegin", '<tr id="'+responseText+'" channel_id="'+channel_id+'"><td>'+desc+'</td><td>#'+name+'</td><td>'+content+'<i class="material-icons">delete</i></td></tr>');
375-
document.getElementById(responseText).addEventListener("click", () => {
376-
self.removeCronModal.open();
377-
self.idToRemove = responseText;
378-
});
385+
document.querySelector("tbody").insertAdjacentHTML("afterbegin", `
386+
<tr id="${responseText}" channel_id="${channel_id}">
387+
<td>${desc}</td>
388+
<td>#${name}</td>
389+
<td class="message">
390+
<div>
391+
<p class="description">${content}</p>
392+
<div class="options">
393+
<i class="material-icons waves-effect edit">edit</i>
394+
<span class="divider"></span>
395+
<i class="material-icons waves-effect delete">delete</i>
396+
</div>
397+
</div>
398+
</td>
399+
</tr>`);
400+
this.addEventListener();
379401
this.form.reset();
380402
M.toast({html: "This message has successfully been set"}, 5000);
381403
});
@@ -432,24 +454,51 @@ class VueDashboard {
432454
} else response.text().then((responseText) => {
433455
let name;
434456
document.channels.forEach(element => {if(element.id == channel_id) name = element.name;});
435-
document.querySelector("tbody").insertAdjacentHTML("afterbegin", '<tr id="'+responseText+'" channel_id="'+channel_id+'"><td>'+desc+'</td><td>#'+name+'</td><td>'+content+'<i class="material-icons">delete</i></td></tr>');
436-
document.getElementById(responseText).addEventListener("click", () => {
437-
self.removeCronModal.open();
438-
self.idToRemove = responseText;
439-
});
457+
document.querySelector("tbody").insertAdjacentHTML("afterbegin", `
458+
<tr id="${responseText}" channel_id="${channel_id}">
459+
<td>${desc}</td>
460+
<td>#${name}</td>
461+
<td class="message">
462+
<div>
463+
<p class="description">${content}</p>
464+
<div class="options">
465+
<i class="material-icons waves-effect edit">edit</i>
466+
<span class="divider"></span>
467+
<i class="material-icons waves-effect delete">delete</i>
468+
</div>
469+
</div>
470+
</td>
471+
</tr>`);
472+
this.addEventListener();
440473
//Suppression du message automatiquement si la date est dépassée.
441474
setTimeout(() => {document.getElementById(responseText).remove();}, timestamp*60*1000 - Date.now());
442475
this.formTimer.reset();
443476
M.toast({html: "This message has successfully been set"}, 5000);
444477
});
445478
this.addTimerModal.close();
446-
});
479+
});
447480
}
448-
449-
onTableLineCLick(el) {
450-
this.idToRemove = el.getAttribute("id");
481+
onRemoveEl(el) {
482+
if (el)
483+
this.idToRemove = el.getAttribute("id");
484+
this.optionsModal.close();
451485
this.removeCronModal.open();
452486
}
487+
onElClick(el) {
488+
if (window.innerWidth < 1000) {
489+
this.idToRemove = el.getAttribute("id");
490+
this.optionsModal.open();
491+
}
492+
}
493+
onOpenEdit(el) {
494+
if (el)
495+
this.idToRemove = el.getAttribute("id");
496+
document.querySelector("#contentEdit").textContent = document.getElementById(this.idToRemove).querySelector(".description").innerText;
497+
M.textareaAutoResize(document.querySelector("#contentEdit"));
498+
M.updateTextFields();
499+
this.optionsModal.close();
500+
this.editMessageModal.open();
501+
}
453502
onConfirmRemoveCron() {
454503
fetch(`/ajax/remove_message?id=${this.idToRemove}&guild_id=${this.guild_id}`).then((response) => {
455504
if (response.status != 200) {
@@ -475,6 +524,39 @@ class VueDashboard {
475524
document.querySelector(".guild-timezone h5").textContent = "Timezone : " + timezone;
476525
this.timezoneModal.close();
477526
}
527+
async onConfirmUpdateMessage() {
528+
const message = document.querySelector("#contentEdit").value;
529+
const formData = new FormData();
530+
531+
let sysContent = message;
532+
document.channels.forEach(el => {
533+
sysContent = sysContent.replace("#"+el.name, "<#"+el.id+">");
534+
});
535+
document.users.forEach(el => {
536+
const name = el.nickname || el.username;
537+
sysContent = sysContent.replace("@"+name, "<@"+el.id+">");
538+
});
539+
document.roles.forEach(el => {
540+
sysContent = sysContent.replace("@"+el.username, "<@&"+el.id+">");
541+
});
542+
543+
formData.append("content", message);
544+
formData.append("msg_id", this.idToRemove);
545+
formData.append("guild_id", this.guild_id);
546+
formData.append("sys_content", sysContent);
547+
const req = await fetch("/ajax/set_message", {
548+
body: formData,
549+
method: "POST"
550+
});
551+
if (req.status != 200) {
552+
console.log("Error : ", req.status, " ", req.statusText);
553+
M.toast({html: "Error : Impossible to set this message"}, 5000);
554+
return;
555+
}
556+
this.editMessageModal.close();
557+
M.toast({html: "Message updated !"});
558+
document.getElementById(this.idToRemove).querySelector(".description").textContent = message;
559+
}
478560
}
479561

480562
window.addEventListener("DOMContentLoaded", e => new VueDashboard());

0 commit comments

Comments
 (0)