81 lines
2.3 KiB
JavaScript
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)
|
|
}
|
|
}
|