Hate-Speech-Detector / index.html
aaryan24's picture
Update index.html
4f6ed1c verified
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Hate Speech Detection</title>
<style>
body {
font-family: Arial, sans-serif;
background: #f9f9f9;
color: #000;
margin: 0;
padding: 20px;
display: flex;
flex-direction: column;
align-items: center;
}
body.dark-mode {
background: #272626;
color: #fff;
}
h1 {
font-size: 40px;
margin-bottom: 10px;
}
.subtext {
font-size: 16px;
margin-bottom: 40px;
text-align: center;
max-width: 800px;
}
.container {
display: flex;
justify-content: center;
gap: 40px;
width: 100%;
max-width: 1000px;
}
.left-panel, .right-panel {
flex: 1;
display: flex;
flex-direction: column;
}
textarea {
width: 100%;
height: 140px;
padding: 10px;
font-size: 16px;
}
.buttons {
display: flex;
justify-content: space-between;
width: 100%;
margin-top: 10px;
}
.buttons button {
width: 49.5%;
padding: 12px;
font-size: 16px;
border: none;
border-radius: 4px;
cursor: pointer;
}
.submit-btn {
background: #4CAF50;
color: white;
}
.clear-btn {
background: #45a049;
color: white;
}
.share-btn {
width: 100%;
padding: 14px;
font-size: 16px;
background: #007BFF;
color: white;
border: none;
border-radius: 4px;
margin-top: auto;
}
.output {
background: white;
padding: 15px;
border-radius: 8px;
box-shadow: 0 0 10px rgba(0,0,0,0.1);
font-size: 16px;
min-height: 120px;
margin-bottom: 20px;
}
.dark-mode .output {
background: #1e1e1e;
color: #fff;
}
.mode-toggle {
margin-top: 60px;
font-size: 14px;
}
</style>
</head>
<body>
<h1 id="page-title">Hate Speech Detection</h1>
<p class="subtext">
This tool uses 3 models (GloVe-based GRU, facebook/RoBERTa-dynabench-r4 (Transformer), ToxiGen-roberta (Transformer))
to classify hate speech using an ensemble method.
</p>
<div class="container">
<div class="left-panel">
<form id="hs-form">
<textarea id="text-input" placeholder="Enter text here..."></textarea>
<div class="buttons">
<button type="button" class="clear-btn" onclick="clearText()">Clear Text</button>
<button type="submit" class="submit-btn">Submit</button>
</div>
</form>
</div>
<div class="right-panel">
<div class="output" id="output" style="display: none;"></div>
<button class="share-btn" onclick="shareText()">Share via Link</button>
</div>
</div>
<div class="mode-toggle">
<label><input type="checkbox" id="mode-toggle"> Dark Mode</label>
</div>
<script>
const outputDiv = document.getElementById("output");
const pageTitle = document.getElementById("page-title");
document.getElementById("hs-form").addEventListener("submit", async function (e) {
e.preventDefault();
const text = document.getElementById("text-input").value;
const response = await fetch("/predict", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ text: text }),
});
const result = await response.json();
outputDiv.style.display = "block";
outputDiv.innerHTML = `
<strong>Model 1:</strong> ${result.gru_prob}<br>
<strong>Model 2:</strong> ${result.roberta_prob}<br>
<strong>Model 3:</strong> ${result.toxigen_prob}<br>
<strong>Prediction:</strong> ${result.prediction}
`;
});
function clearText() {
document.getElementById("text-input").value = "";
outputDiv.style.display = "none";
outputDiv.innerHTML = "";
}
function shareText() {
const text = document.getElementById("text-input").value;
const shareUrl = `${window.location.href}?text=${encodeURIComponent(text)}`;
navigator.clipboard.writeText(shareUrl);
alert("Sharable link copied to clipboard!");
}
document.getElementById("mode-toggle").addEventListener("change", function () {
document.body.classList.toggle("dark-mode", this.checked);
pageTitle.style.color = this.checked ? "white" : "black";
});
// On load: apply shared text if present
window.onload = function () {
const urlParams = new URLSearchParams(window.location.search);
const sharedText = urlParams.get("text");
if (sharedText) {
document.getElementById("text-input").value = decodeURIComponent(sharedText);
}
};
</script>
</body>
</html>