Files
fnx_web/res/include/script/file_viewer/AbuseReportWindow.js

81 lines
2.3 KiB
JavaScript

function AbuseReportWindow(viewer) {
this.viewer = viewer
this.visible = false
this.modal = new Modal(
document.getElementById("file_viewer"),
() => { this.toggle() },
"Report abuse", "650px", "auto",
)
this.btnReportAbuse = document.getElementById("btn_report_abuse")
this.btnReportAbuse.addEventListener("click", () => { this.toggle() })
let clone = document.getElementById("tpl_report_abuse_popup").content.cloneNode(true)
this.form = clone.querySelector(".abuse_type_form")
// this.emailField = clone.querySelector(".abuse_email_field")
this.notification = clone.querySelector(".abuse_report_notification")
this.modal.setBody(clone)
this.form.addEventListener("submit", e => { this.submit(e) })
}
AbuseReportWindow.prototype.toggle = function () {
if (this.visible) {
this.modal.close()
this.btnReportAbuse.classList.remove("button_highlight")
this.visible = false
} else {
this.modal.open()
this.btnReportAbuse.classList.add("button_highlight")
this.visible = true
}
}
AbuseReportWindow.prototype.notify = function (success, content) {
this.notification.style.display = ""
this.notification.classList = "abuse_report_notification " + (success ? "highlight_green" : "highlight_red")
this.notification.innerHTML = content
}
AbuseReportWindow.prototype.submit = async function (e) {
e.preventDefault()
let abuseType = ""
this.form.querySelectorAll('[name="abuse_type"]').forEach(elem => {
if (elem.checked) {
abuseType = elem.value
}
})
if (abuseType === "") {
this.notify(false, "Please select an abuse type")
return
}
const form = new FormData()
form.append("type", abuseType)
// form.append("email", this.emailField.value)
try {
const resp = await fetch(
this.viewer.file.get_href + "/report_abuse",
{ method: "POST", body: form }
);
if (resp.status >= 400) {
let json = await resp.json()
if (json.value === "resource_already_exists") {
throw "You have already reported this file"
} else if (json.value === "file_already_blocked") {
throw "This file has already been blocked"
} else if (json.value === "multiple_errors") {
throw json.errors[0].message
}
throw json.message
}
this.notify(true, "Report has been sent")
} catch (err) {
this.notify(false, "Failed to send report: " + err)
}
}