Added frontend
This commit is contained in:
parent
b90fbdf668
commit
cf0ffc9126
5
frontend/Dockerfile
Normal file
5
frontend/Dockerfile
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
FROM nginx:latest
|
||||||
|
|
||||||
|
COPY ./index.html /usr/share/nginx/html/index.html
|
||||||
|
COPY ./index.css /usr/share/nginx/html/index.css
|
||||||
|
COPY ./index.js /usr/share/nginx/html/index.js
|
131
frontend/index.css
Normal file
131
frontend/index.css
Normal file
@ -0,0 +1,131 @@
|
|||||||
|
html,
|
||||||
|
body {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
background-color: rgb(11, 13, 19);
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
margin: 1em;
|
||||||
|
width: calc(100% - 2em);
|
||||||
|
height: calc(100% - 2em);
|
||||||
|
}
|
||||||
|
.container {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content {
|
||||||
|
width: calc(50% - 70px);
|
||||||
|
padding: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
textarea {
|
||||||
|
width: 100%;
|
||||||
|
height: 40%;
|
||||||
|
resize: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#translateicon {
|
||||||
|
width: fit-content;
|
||||||
|
color: white;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* CSS für den HTML-Select */
|
||||||
|
select {
|
||||||
|
/* Setze die Größe und Positionierung des Select-Elements */
|
||||||
|
position: relative;
|
||||||
|
width: 100%;
|
||||||
|
height: 40px;
|
||||||
|
border: none;
|
||||||
|
border-radius: 5px;
|
||||||
|
padding: 10px 20px;
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: 500;
|
||||||
|
background-color: #333;
|
||||||
|
color: #ffffff;
|
||||||
|
-webkit-appearance: none;
|
||||||
|
-moz-appearance: none;
|
||||||
|
appearance: none;
|
||||||
|
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='25' height='25' viewBox='0 0 16 16'%3E%3Cpath fill='%23cccccc' d='M5.5 7l2.5 2.5L10.5 7z'/%3E%3C/svg%3E");
|
||||||
|
background-position: right 10px center;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
cursor: pointer;
|
||||||
|
transition: all 0.2s ease-in-out;
|
||||||
|
}
|
||||||
|
|
||||||
|
select:hover {
|
||||||
|
background-color: #444;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Setze den aktiven Stil */
|
||||||
|
select:focus {
|
||||||
|
outline: none;
|
||||||
|
background-color: #333;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Ändere die Farbe der ausgewählten Option */
|
||||||
|
select option:checked {
|
||||||
|
background-color: #007bff;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Ändere den Stil des Dropdown-Menüs */
|
||||||
|
select::-ms-expand {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
select option {
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: 400;
|
||||||
|
background-color: #333;
|
||||||
|
color: #f5f5f5;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* CSS für den HTML-Textarea */
|
||||||
|
textarea {
|
||||||
|
/* Setze die Größe und Positionierung des Textarea-Elements */
|
||||||
|
border: none;
|
||||||
|
border-radius: 5px;
|
||||||
|
margin-top: 0.2em;
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: 400;
|
||||||
|
line-height: 1.5;
|
||||||
|
background-color: #333;
|
||||||
|
color: #f5f5f5;
|
||||||
|
/* Setze den Hover-Stil */
|
||||||
|
transition: all 0.2s ease-in-out;
|
||||||
|
width: calc(100% - 5px);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Setze den aktiven Stil */
|
||||||
|
textarea:focus {
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
textarea:hover {
|
||||||
|
background-color: #444;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Ändere den Stil der Scrollbar */
|
||||||
|
textarea::-webkit-scrollbar {
|
||||||
|
width: 8px;
|
||||||
|
height: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
textarea::-webkit-scrollbar-track {
|
||||||
|
background-color: #f5f5f5;
|
||||||
|
}
|
||||||
|
|
||||||
|
textarea::-webkit-scrollbar-thumb {
|
||||||
|
background-color: #ccc;
|
||||||
|
border-radius: 10px;
|
||||||
|
}
|
34
frontend/index.html
Normal file
34
frontend/index.html
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<link rel="stylesheet" href="index.css">
|
||||||
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
|
||||||
|
<script src="index.js"></script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body onload="fillDropDowns()">
|
||||||
|
<header>
|
||||||
|
<h1>Translator</h1>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<main>
|
||||||
|
<div class="container">
|
||||||
|
<div class="content">
|
||||||
|
<select id="requested_text_language"></select>
|
||||||
|
<textarea name="requested_text" id="requested_text" rows="15" autofocus
|
||||||
|
placeholder="Text eingeben oder einfügen"></textarea>
|
||||||
|
</div>
|
||||||
|
<div id="translateicon" onclick="translate()">
|
||||||
|
<i class="fa fa-arrow-right fa-5x"></i>
|
||||||
|
</div>
|
||||||
|
<div class="content">
|
||||||
|
<select id="received_text_language"></select>
|
||||||
|
<textarea name="received_text" id="received_text" rows="15" disabled="true"></textarea>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
|
<footer></footer>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
493
frontend/index.js
Normal file
493
frontend/index.js
Normal file
@ -0,0 +1,493 @@
|
|||||||
|
const languages = [
|
||||||
|
{
|
||||||
|
"language": "Afrikaans",
|
||||||
|
"code": "af"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Albanian",
|
||||||
|
"code": "sq"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Amharic",
|
||||||
|
"code": "am"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Arabic",
|
||||||
|
"code": "ar"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Armenian",
|
||||||
|
"code": "hy"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Assamese",
|
||||||
|
"code": "as"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Azerbaijani (Latin)",
|
||||||
|
"code": "az"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Bangla",
|
||||||
|
"code": "bn"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Bashkir",
|
||||||
|
"code": "ba"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Basque",
|
||||||
|
"code": "eu"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Bosnian (Latin)",
|
||||||
|
"code": "bs"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Bulgarian",
|
||||||
|
"code": "bg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Cantonese (Traditional)",
|
||||||
|
"code": "yue"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Catalan",
|
||||||
|
"code": "ca"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Chinese (Literary)",
|
||||||
|
"code": "lzh"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Chinese Simplified",
|
||||||
|
"code": "zh-Hans"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Chinese Traditional",
|
||||||
|
"code": "zh-Hant"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Croatian",
|
||||||
|
"code": "hr"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Czech",
|
||||||
|
"code": "cs"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Danish",
|
||||||
|
"code": "da"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Dari",
|
||||||
|
"code": "prs"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Divehi",
|
||||||
|
"code": "dv"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Dutch",
|
||||||
|
"code": "nl"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "English",
|
||||||
|
"code": "en"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Estonian",
|
||||||
|
"code": "et"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Faroese",
|
||||||
|
"code": "fo"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Fijian",
|
||||||
|
"code": "fj"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Filipino",
|
||||||
|
"code": "fil"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Finnish",
|
||||||
|
"code": "fi"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "French",
|
||||||
|
"code": "fr"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "French (Canada)",
|
||||||
|
"code": "fr-ca"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Galician",
|
||||||
|
"code": "gl"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Georgian",
|
||||||
|
"code": "ka"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "German",
|
||||||
|
"code": "de"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Greek",
|
||||||
|
"code": "el"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Gujarati",
|
||||||
|
"code": "gu"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Haitian Creole",
|
||||||
|
"code": "ht"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Hebrew",
|
||||||
|
"code": "he"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Hindi",
|
||||||
|
"code": "hi"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Hmong Daw (Latin)",
|
||||||
|
"code": "mww"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Hungarian",
|
||||||
|
"code": "hu"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Icelandic",
|
||||||
|
"code": "is"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Indonesian",
|
||||||
|
"code": "id"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Inuinnaqtun",
|
||||||
|
"code": "ikt"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Inuktitut",
|
||||||
|
"code": "iu"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Inuktitut (Latin)",
|
||||||
|
"code": "iu-Latn"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Irish",
|
||||||
|
"code": "ga"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Italian",
|
||||||
|
"code": "it"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Japanese",
|
||||||
|
"code": "ja"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Kannada",
|
||||||
|
"code": "kn"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Kazakh",
|
||||||
|
"code": "kk"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Khmer",
|
||||||
|
"code": "km"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Klingon",
|
||||||
|
"code": "tlh-Latn"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Klingon (plqaD)",
|
||||||
|
"code": "tlh-Piqd"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Korean",
|
||||||
|
"code": "ko"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Kurdish (Central)",
|
||||||
|
"code": "ku"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Kurdish (Northern)",
|
||||||
|
"code": "kmr"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Kyrgyz (Cyrillic)",
|
||||||
|
"code": "ky"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Lao",
|
||||||
|
"code": "lo"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Latvian",
|
||||||
|
"code": "lv"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Lithuanian",
|
||||||
|
"code": "lt"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Macedonian",
|
||||||
|
"code": "mk"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Malagasy",
|
||||||
|
"code": "mg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Malay (Latin)",
|
||||||
|
"code": "ms"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Malayalam",
|
||||||
|
"code": "ml"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Maltese",
|
||||||
|
"code": "mt"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Maori",
|
||||||
|
"code": "mi"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Marathi",
|
||||||
|
"code": "mr"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Mongolian (Cyrillic)",
|
||||||
|
"code": "mn-Cyrl"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Mongolian (Traditional)",
|
||||||
|
"code": "mn-Mong"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Myanmar",
|
||||||
|
"code": "my"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Nepali",
|
||||||
|
"code": "ne"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Norwegian",
|
||||||
|
"code": "nb"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Odia",
|
||||||
|
"code": "or"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Pashto",
|
||||||
|
"code": "ps"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Persian",
|
||||||
|
"code": "fa"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Polish",
|
||||||
|
"code": "pl"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Portuguese (Brazil)",
|
||||||
|
"code": "pt"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Portuguese (Portugal)",
|
||||||
|
"code": "pt-pt"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Punjabi",
|
||||||
|
"code": "pa"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Queretaro Otomi",
|
||||||
|
"code": "otq"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Romanian",
|
||||||
|
"code": "ro"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Russian",
|
||||||
|
"code": "ru"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Samoan (Latin)",
|
||||||
|
"code": "sm"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Serbian (Cyrillic)",
|
||||||
|
"code": "sr-Cyrl"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Serbian (Latin)",
|
||||||
|
"code": "sr-Latn"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Slovak",
|
||||||
|
"code": "sk"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Slovenian",
|
||||||
|
"code": "sl"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Somali (Arabic)",
|
||||||
|
"code": "so"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Spanish",
|
||||||
|
"code": "es"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Swahili (Latin)",
|
||||||
|
"code": "sw"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Swedish",
|
||||||
|
"code": "sv"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Tahitian",
|
||||||
|
"code": "ty"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Tamil",
|
||||||
|
"code": "ta"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Tatar (Latin)",
|
||||||
|
"code": "tt"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Telugu",
|
||||||
|
"code": "te"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Thai",
|
||||||
|
"code": "th"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Tibetan",
|
||||||
|
"code": "bo"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Tigrinya",
|
||||||
|
"code": "ti"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Tongan",
|
||||||
|
"code": "to"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Turkish",
|
||||||
|
"code": "tr"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Turkmen (Latin)",
|
||||||
|
"code": "tk"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Ukrainian",
|
||||||
|
"code": "uk"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Upper Sorbian",
|
||||||
|
"code": "hsb"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Urdu",
|
||||||
|
"code": "ur"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Uyghur (Arabic)",
|
||||||
|
"code": "ug"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Uzbek (Latin",
|
||||||
|
"code": "uz"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Vietnamese",
|
||||||
|
"code": "vi"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Welsh",
|
||||||
|
"code": "cy"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Yucatec Maya",
|
||||||
|
"code": "yua"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"language": "Zulu",
|
||||||
|
"code": "zu"
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
|
||||||
|
function fillDropDowns() {
|
||||||
|
var dropdown1 = document.getElementById("requested_text_language");
|
||||||
|
var dropdown2 = document.getElementById("received_text_language");
|
||||||
|
|
||||||
|
for (var i = 0; i < languages.length; i++) {
|
||||||
|
var option = document.createElement("option");
|
||||||
|
option.text = languages[i].language;
|
||||||
|
option.value = languages[i].code;
|
||||||
|
dropdown1.add(option);
|
||||||
|
|
||||||
|
var option = document.createElement("option");
|
||||||
|
option.text = languages[i].language;
|
||||||
|
option.value = languages[i].code;
|
||||||
|
dropdown2.add(option);
|
||||||
|
|
||||||
|
if(languages[i].code == "de") {
|
||||||
|
dropdown1.value = "de"
|
||||||
|
}
|
||||||
|
|
||||||
|
if(languages[i].code == "en") {
|
||||||
|
dropdown2.value = "en"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function translate() {
|
||||||
|
var requestedText = document.getElementById("requested_text").value
|
||||||
|
|
||||||
|
var data = {
|
||||||
|
"requested_text": requestedText,
|
||||||
|
"language_from": document.getElementById("requested_text_language").value,
|
||||||
|
"language_to": document.getElementById("received_text_language").value
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
var xhttp = new XMLHttpRequest();
|
||||||
|
xhttp.onreadystatechange = function() {
|
||||||
|
if (this.readyState == 4 && this.status == 200) {
|
||||||
|
document.getElementById("received_text").value = JSON.parse(xhttp.responseText).response_text
|
||||||
|
}
|
||||||
|
};
|
||||||
|
xhttp.open("POST", "http://127.0.0.1:5000/translate", true);
|
||||||
|
xhttp.setRequestHeader("Content-Type", "application/json");
|
||||||
|
xhttp.send(JSON.stringify(data));
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user