Added licenses to Excel Password Remover, Filed file input on standalone, Added auto-clear to file input
Update excel-password-remover.yml, excel-password-remover.yml, and 3 more files...
This commit is contained in:
@@ -1,58 +1,43 @@
|
|||||||
# EN - Excel Password Remover
|
# EN - Excel Password Remover
|
||||||
|
|
||||||
meta.title: Excel Password Remover
|
meta:
|
||||||
meta.description: >-
|
title: Excel Password Remover
|
||||||
Small web application from which you can easily remove a password from an Excel
|
description: >-
|
||||||
worksheet. It works by leaving the task of editing the XML files on an Excel
|
Small web application from which you can easily remove a password from an Excel
|
||||||
document to your browser instead to keep everything local.
|
worksheet. It works by leaving the task of editing the XML files on an Excel
|
||||||
meta.description.light: >-
|
document to your browser instead to keep everything local.
|
||||||
Small web application from which you can easily remove a password from an Excel
|
description.light: >-
|
||||||
worksheet directly in your browser.
|
Small web application from which you can easily remove a password from an Excel
|
||||||
|
worksheet directly in your browser.
|
||||||
|
|
||||||
#article.subtitle: >-
|
eula:
|
||||||
# <a
|
1: "This tool should only be used with files you have the express permission to unlock."
|
||||||
# href="https://github.com/aziascreations/Excel-Worksheet-Password-Remover"><i
|
2: "All password removal is done locally in your browser, and <span class='t-bold'>no data is sent online</span>.<br>
|
||||||
# class="fab fa-github"></i> View on GitHub</a>
|
|
||||||
#intro.title: Introduction
|
|
||||||
#intro.p1: >-
|
|
||||||
# This project aims to simplify the removal of passwords on Excel's Worksheet by
|
|
||||||
# leaving the task of editing the XML files on an Excel document to your
|
|
||||||
# browser.
|
|
||||||
#working.title: Security & Internal workings
|
|
||||||
#working.p1: >-
|
|
||||||
# In terms of security, your browser handles all the data without sending any of
|
|
||||||
# it to a central server like many web apps do.<br>This makes it, and your data,
|
|
||||||
# as safe as your browser can be since it is the only potential point of failure
|
|
||||||
# here.
|
|
||||||
#working.p2: >-
|
|
||||||
# As for the internal workings, the only thing this tool does is extract the
|
|
||||||
# content of the <code>.xlsx</code> file you gave it and removes the passwords
|
|
||||||
# on any worksheets and makes a new file with all the changes.<br>Once all of
|
|
||||||
# that is done, the file is downloaded via a <a
|
|
||||||
# href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URLs">data
|
|
||||||
# URL</a>.
|
|
||||||
#usage.title: Usage
|
|
||||||
#usage.p1: >-
|
|
||||||
# To use this tool you can either visit "<a
|
|
||||||
# href="https://aziascreations.github.io/Excel-Worksheet-Password-Remover">aziascreations.github.io/Excel-Worksheet-Password-Remover</a>"
|
|
||||||
# or download the repository and host the web page yourself.
|
|
||||||
#demo.title: Demonstration video
|
|
||||||
#links.title: Links
|
|
||||||
#content.link.demo: Demo hosted on GitHub
|
|
||||||
|
|
||||||
|
|
||||||
eula.1: "This tool should only be used with files you have the express permission to unlock."
|
|
||||||
eula.2: "All password removal is done locally in your browser, and <span class='t-bold'>no data is sent online</span>.<br>
|
|
||||||
The original password cannot be revealed as it’s secure by design and not stored in plain text; it simply gets removed."
|
The original password cannot be revealed as it’s secure by design and not stored in plain text; it simply gets removed."
|
||||||
eula.3: "By using this tool, you accept full responsibility, and that it is provided “as is” without any warranty."
|
3: "By using this tool, you accept full responsibility, and that it is provided “as is” without any warranty."
|
||||||
|
|
||||||
file.selection.title: "File Selection"
|
file:
|
||||||
file.selection.1: "Drop your excel file(s) here or click on the buttons."
|
selection:
|
||||||
|
title: "File Selection"
|
||||||
|
1: "Drop your excel file(s) here or click on the buttons."
|
||||||
|
|
||||||
details.title : "Result(s)"
|
details:
|
||||||
details.empty.1 : "Your Excel files with their password removed will end up here."
|
title : "Result(s)"
|
||||||
|
empty:
|
||||||
|
1 : "Your Excel files with their password removed will end up here."
|
||||||
|
|
||||||
result.success.count: "Removed <span id=\"tmpl-success-password-count\">???</span> password(s)"
|
result:
|
||||||
result.warning.extension: "The file doesn't appear to be an Excel Worksheet !"
|
success:
|
||||||
result.warning.password: "The Excel Worksheet didn't contain any password !"
|
count: "Removed <span id=\"tmpl-success-password-count\">???</span> password(s)"
|
||||||
result.error.jszip: "JSZip was unable to open the file !"
|
warning:
|
||||||
|
extension: "The file doesn't appear to be an Excel Worksheet !"
|
||||||
|
password: "The Excel Worksheet didn't contain any password !"
|
||||||
|
error:
|
||||||
|
jszip: "JSZip was unable to open the file !"
|
||||||
|
|
||||||
|
license:
|
||||||
|
title: "Licenses"
|
||||||
|
text:
|
||||||
|
1: "This tool uses the <a href=\"https://stuk.github.io/jszip/\">JSZip</a>
|
||||||
|
library, which is licensed under the <a href=\"https://github.com/Stuk/jszip/blob/main/LICENSE.markdown\">MIT license</a>."
|
||||||
|
2: "The rest of this tool's code is released in the <a href=\"https://github.com/aziascreations/Web-NibblePoker\">public domain</a>."
|
||||||
|
@@ -1,53 +1,44 @@
|
|||||||
# FR - Excel Password Remover
|
# FR - Excel Password Remover
|
||||||
|
|
||||||
meta.title: Excel Password Remover
|
meta:
|
||||||
meta.description: >-
|
title: Excel Password Remover
|
||||||
Petite application web qui permet de facilement retirer le mot de passe d'une
|
description: >-
|
||||||
feuille de calcul Excel depuis votre navigateur web sans avoir à uploader le
|
Petite application web qui permet de facilement retirer le mot de passe d'une
|
||||||
fichier sur internet. Cette application laisse votre navigateur modifier les
|
feuille de calcul Excel depuis votre navigateur web sans avoir à uploader le
|
||||||
fichiers XML du fichier Excel afin de tout garder en local.
|
fichier sur internet. Cette application laisse votre navigateur modifier les
|
||||||
meta.description.light: >-
|
fichiers XML du fichier Excel afin de tout garder en local.
|
||||||
Application web qui permet de facilement retirer le mot de passe d'un ficher Excel depuis
|
description.light: >-
|
||||||
votre navigateur web sans avoir à uploader le fichier sur internet.
|
Application web qui permet de facilement retirer le mot de passe d'un ficher Excel depuis
|
||||||
|
votre navigateur web sans avoir à uploader le fichier sur internet.
|
||||||
|
|
||||||
#article.subtitle: >-
|
eula:
|
||||||
# <a
|
1: "Cet outil ne doit être utilisé qu'avec des fichiers pour lesquels vous avez l'autorisation de les déverrouiller."
|
||||||
# href="https://github.com/aziascreations/Excel-Worksheet-Password-Remover"><i
|
2: "Toute suppression de mot de passe se fait localement dans votre navigateur, et <span class='t-bold'>aucune donnée n'est envoyée via Internet</span>.<br>
|
||||||
# class="fab fa-github"></i> Voir sur GitHub</a>
|
|
||||||
#intro.title: Introduction
|
|
||||||
#intro.p1: >-
|
|
||||||
# Ce projet vise à simplifier le processus de suppression des mots de passes sur
|
|
||||||
# les "worksheet" d'Excel en laissant votre navigateur web s'en charger.
|
|
||||||
#working.title: Sécurité & Fonctionnement
|
|
||||||
#working.p1: >-
|
|
||||||
# Cet outil charge le ficher que vous lui donnez en mémoire et travaille
|
|
||||||
# directement dessus dans le navigateur web sans utiliser un serveur central,
|
|
||||||
# vos données restent donc entièrement sur votre machine.
|
|
||||||
#working.p2: >-
|
|
||||||
# Par sécurité, nous vous demandons quand même de n'utiliser cet outil qu'avec
|
|
||||||
# des fichiers pour lesquels vous avez été explicitement autorisés à enlever le
|
|
||||||
# mot de passe.
|
|
||||||
#usage.title: Utilisation
|
|
||||||
#usage.p1: >-
|
|
||||||
# Vous pouvez utiliser cet outil en allant sur "<a
|
|
||||||
# href="https://aziascreations.github.io/Excel-Worksheet-Password-Remover">aziascreations.github.io/Excel-Worksheet-Password-Remover</a>"
|
|
||||||
# ou en téléchargeant le dépôt et en hébergeant la page web vous-même.
|
|
||||||
#demo.title: Vidéo de démonstration
|
|
||||||
#links.title: Liens
|
|
||||||
#content.link.demo: Démo hébergée sur GitHub
|
|
||||||
|
|
||||||
eula.1 : "Cet outil ne doit être utilisé qu'avec des fichiers pour lesquels vous avez l'autorisation de les déverrouiller."
|
|
||||||
eula.2 : "Toute suppression de mot de passe se fait localement dans votre navigateur, et <span class='t-bold'>aucune donnée n'est envoyée via Internet</span>.<br>
|
|
||||||
Le mot de passe original ne peut pas être révélé car il est sécurisé par Excel et n'est pas stocké en texte clair ; il est simplement supprimé."
|
Le mot de passe original ne peut pas être révélé car il est sécurisé par Excel et n'est pas stocké en texte clair ; il est simplement supprimé."
|
||||||
eula.3 : "En utilisant cet outil, vous acceptez l'entière responsabilité de vos action, et le fait qu'il est fourni “tel quel” sans aucune garantie."
|
3: "En utilisant cet outil, vous acceptez l'entière responsabilité de vos action, et le fait qu'il est fourni “tel quel” sans aucune garantie."
|
||||||
|
|
||||||
file.selection.title : "Sélection de fichier(s)"
|
file:
|
||||||
file.selection.1 : "Déposez vos fichiers Excel ici ou cliquez sur les boutons."
|
selection:
|
||||||
|
title: "Sélection de fichier(s)"
|
||||||
|
1: "Déposez vos fichiers Excel ici ou cliquez sur les boutons."
|
||||||
|
|
||||||
details.title: "Résultat(s)"
|
details:
|
||||||
details.empty.1 : "Vos fichiers Excel sans leurs mots de passe finiront ici."
|
title: "Résultat(s)"
|
||||||
|
empty:
|
||||||
|
1: "Vos fichiers Excel sans leurs mots de passe finiront ici."
|
||||||
|
|
||||||
result.success.count: "Mot de passe(s) supprimé(s) : <span id=\"tmpl-success-password-count\">???</span>"
|
result:
|
||||||
result.warning.extension: "Le fichier ne semble pas être une feuille de calcul Excel !"
|
success:
|
||||||
result.warning.password: "La feuille de calcul Excel ne contenait aucun mot de passe !"
|
count: "Mot de passe(s) supprimé(s) : <span id=\"tmpl-success-password-count\">???</span>"
|
||||||
result.error.jszip: "JSZip n'a pas pu ouvrir le fichier !"
|
warning:
|
||||||
|
extension: "Le fichier ne semble pas être une feuille de calcul Excel !"
|
||||||
|
password: "La feuille de calcul Excel ne contenait aucun mot de passe !"
|
||||||
|
error:
|
||||||
|
jszip: "JSZip n'a pas pu ouvrir le fichier !"
|
||||||
|
|
||||||
|
license:
|
||||||
|
title: "Licences"
|
||||||
|
text:
|
||||||
|
1: "Cet outil utilise la bibliothèque <a href=\"https://stuk.github.io/jszip/\">JSZip</a>,
|
||||||
|
qui est distribuée sous licence <a href=\"https://github.com/Stuk/jszip/blob/main/LICENSE.markdown\">MIT</a>."
|
||||||
|
2: "Le reste du code de cet outil est placé dans le <a href=\"https://github.com/aziascreations/Web-NibblePoker\">domaine public</a>."
|
||||||
|
@@ -48,7 +48,6 @@ export function initCore() {
|
|||||||
|
|
||||||
// Setting up the file drop inputs
|
// Setting up the file drop inputs
|
||||||
document.querySelectorAll(".np-file-input-drop-container").forEach(eRootContainer => {
|
document.querySelectorAll(".np-file-input-drop-container").forEach(eRootContainer => {
|
||||||
//console.log(eRootContainer);
|
|
||||||
|
|
||||||
/** @type {HTMLInputElement} */
|
/** @type {HTMLInputElement} */
|
||||||
const eFileDropInput = eRootContainer.querySelector("input[type=file]");
|
const eFileDropInput = eRootContainer.querySelector("input[type=file]");
|
||||||
@@ -58,7 +57,6 @@ export function initCore() {
|
|||||||
|
|
||||||
/** @type {string} */
|
/** @type {string} */
|
||||||
const inputId = eFileDropInput.getAttribute("id");
|
const inputId = eFileDropInput.getAttribute("id");
|
||||||
//console.log(inputId);
|
|
||||||
|
|
||||||
/** @type {HTMLElement} */
|
/** @type {HTMLElement} */
|
||||||
const eFileDropTextEmpty = eRootContainer.querySelector(`#${inputId}-text-drop`);
|
const eFileDropTextEmpty = eRootContainer.querySelector(`#${inputId}-text-drop`);
|
||||||
@@ -78,24 +76,29 @@ export function initCore() {
|
|||||||
/** @type {NodeListOf<HTMLElement>} */
|
/** @type {NodeListOf<HTMLElement>} */
|
||||||
const eFileDropSelectionCounts = eRootContainer.querySelectorAll(`.np-file-drop-count`);
|
const eFileDropSelectionCounts = eRootContainer.querySelectorAll(`.np-file-drop-count`);
|
||||||
|
|
||||||
|
function handleFileDropClear() {
|
||||||
|
eFileDropInput.value = '';
|
||||||
|
if(eFileDropTextSingle !== null) {
|
||||||
|
eFileDropTextSingle.hidden = true;
|
||||||
|
}
|
||||||
|
if(eFileDropTextMultiple !== null) {
|
||||||
|
eFileDropTextMultiple.hidden = true;
|
||||||
|
}
|
||||||
|
if(eFileDropTextEmpty !== null) {
|
||||||
|
eFileDropTextEmpty.hidden = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if(eFileDropAddButton !== null) {
|
if(eFileDropAddButton !== null) {
|
||||||
eFileDropAddButton.addEventListener("click", function() {
|
eFileDropAddButton.addEventListener("click", function() {
|
||||||
|
handleFileDropClear();
|
||||||
eFileDropInput.click();
|
eFileDropInput.click();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if(eFileDropClearButton !== null) {
|
if(eFileDropClearButton !== null) {
|
||||||
eFileDropClearButton.addEventListener("click", function() {
|
eFileDropClearButton.addEventListener("click", function() {
|
||||||
eFileDropInput.value = '';
|
handleFileDropClear();
|
||||||
if(eFileDropTextSingle !== null) {
|
|
||||||
eFileDropTextSingle.hidden = true;
|
|
||||||
}
|
|
||||||
if(eFileDropTextMultiple !== null) {
|
|
||||||
eFileDropTextMultiple.hidden = true;
|
|
||||||
}
|
|
||||||
if(eFileDropTextEmpty !== null) {
|
|
||||||
eFileDropTextEmpty.hidden = false;
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -27,14 +27,23 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="{{ applet_data.id }}-details-populated" hidden>
|
<div id="{{ applet_data.id }}-details-populated" hidden>
|
||||||
{{ render_button(
|
{% if is_standalone %}
|
||||||
|
{{ render_button(
|
||||||
|
l10n("download.action.all", "commons", user_lang),
|
||||||
|
false, applet_data.id + "-files-download-all", "bkgd-green") }}
|
||||||
|
{{ render_button(
|
||||||
|
l10n("clear.all.files", "commons", user_lang),
|
||||||
|
false, applet_data.id + "-files-clear", "bkgd-orange") }}
|
||||||
|
{% else %}
|
||||||
|
{{ render_button(
|
||||||
"<i class=\"fa-duotone fa-solid fa-floppy-disks mr-xs\"></i>" +
|
"<i class=\"fa-duotone fa-solid fa-floppy-disks mr-xs\"></i>" +
|
||||||
l10n("download.action.all", "commons", user_lang),
|
l10n("download.action.all", "commons", user_lang),
|
||||||
false, applet_data.id + "-files-download-all", "bkgd-green") }}
|
false, applet_data.id + "-files-download-all", "bkgd-green") }}
|
||||||
{{ render_button(
|
{{ render_button(
|
||||||
"<i class=\"fa-duotone fa-solid fa-trash mr-xs\"></i>" +
|
"<i class=\"fa-duotone fa-solid fa-trash mr-xs\"></i>" +
|
||||||
l10n("clear.all.files", "commons", user_lang),
|
l10n("clear.all.files", "commons", user_lang),
|
||||||
false, applet_data.id + "-files-clear", "bkgd-orange") }}
|
false, applet_data.id + "-files-clear", "bkgd-orange") }}
|
||||||
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="{{ applet_data.id }}-result-container" class="mt-s"></div>
|
<div id="{{ applet_data.id }}-result-container" class="mt-s"></div>
|
||||||
@@ -46,13 +55,21 @@
|
|||||||
<table class="table-p-xxs table-v-center">
|
<table class="table-p-xxs table-v-center">
|
||||||
<tr>
|
<tr>
|
||||||
<td rowspan="2" class="br bkgd-green bkgd-grid30 rl-l">
|
<td rowspan="2" class="br bkgd-green bkgd-grid30 rl-l">
|
||||||
<i class="fa-duotone fa-solid fa-circle-check mx-s"></i>
|
{% if is_standalone %}
|
||||||
|
<span class="mx-xxs">✅</span>
|
||||||
|
{% else %}
|
||||||
|
<i class="fa-duotone fa-solid fa-circle-check mx-s"></i>
|
||||||
|
{% endif %}
|
||||||
</td>
|
</td>
|
||||||
<td class="w-full t-bold">
|
<td class="w-full t-bold">
|
||||||
<span id="tmpl-success-filename">PlaceholderSuccessName.xlsx</span>
|
<span id="tmpl-success-filename">PlaceholderSuccessName.xlsx</span>
|
||||||
</td>
|
</td>
|
||||||
<td rowspan="2" class="bl bkgd-blue bkgd-grid30 rr-l">
|
<td rowspan="2" class="bl bkgd-blue bkgd-grid30 rr-l">
|
||||||
<i class="fa-duotone fa-download mx-s"></i>
|
{% if is_standalone %}
|
||||||
|
<span class="mx-xxs">💾</span>
|
||||||
|
{% else %}
|
||||||
|
<i class="fa-duotone fa-download mx-s"></i>
|
||||||
|
{% endif %}
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="t-italic">
|
<tr class="t-italic">
|
||||||
@@ -67,7 +84,11 @@
|
|||||||
<table class="table-p-xxs table-v-center">
|
<table class="table-p-xxs table-v-center">
|
||||||
<tr>
|
<tr>
|
||||||
<td rowspan="2" class="br bkgd-orange bkgd-grid30 rl-l">
|
<td rowspan="2" class="br bkgd-orange bkgd-grid30 rl-l">
|
||||||
<i class="fa-duotone fa-solid fa-triangle-exclamation mx-s"></i>
|
{% if is_standalone %}
|
||||||
|
<span class="mx-xxs">⚠️</span>
|
||||||
|
{% else %}
|
||||||
|
<i class="fa-duotone fa-solid fa-triangle-exclamation mx-s"></i>
|
||||||
|
{% endif %}
|
||||||
</td>
|
</td>
|
||||||
<td class="w-full t-bold">
|
<td class="w-full t-bold">
|
||||||
<span id="tmpl-warning-filename">PlaceholderWarningName.xlsx</span>
|
<span id="tmpl-warning-filename">PlaceholderWarningName.xlsx</span>
|
||||||
@@ -92,7 +113,11 @@
|
|||||||
<table class="table-p-xxs table-v-center">
|
<table class="table-p-xxs table-v-center">
|
||||||
<tr>
|
<tr>
|
||||||
<td rowspan="2" class="br bkgd-red bkgd-grid30 rl-l">
|
<td rowspan="2" class="br bkgd-red bkgd-grid30 rl-l">
|
||||||
<i class="fa-duotone fa-solid fa-hexagon-exclamation mx-s"></i>
|
{% if is_standalone %}
|
||||||
|
<span class="mx-xxs">❌</span>
|
||||||
|
{% else %}
|
||||||
|
<i class="fa-duotone fa-solid fa-hexagon-exclamation mx-s"></i>
|
||||||
|
{% endif %}
|
||||||
</td>
|
</td>
|
||||||
<td class="w-full t-bold">
|
<td class="w-full t-bold">
|
||||||
<span id="tmpl-error-filename">PlaceholderErrorName.xlsx</span>
|
<span id="tmpl-error-filename">PlaceholderErrorName.xlsx</span>
|
||||||
@@ -110,8 +135,13 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
{% if is_standalone %}
|
{% if is_standalone %}
|
||||||
<section id="{{ applet_data.id }}-licenses">
|
<section id="{{ applet_data.id }}-licenses" class="mt-l mt-0-if-first">
|
||||||
{{ render_h2(l10n("licenses.title", applet_data.id, user_lang)) }}
|
{{ render_h2(l10n("license.title", applet_data.id, user_lang)) }}
|
||||||
<p>123</p>
|
|
||||||
|
<div class="content-spacer">
|
||||||
|
{{ render_paragraph(
|
||||||
|
l10n("license.text.1", applet_data.id, user_lang) + "<br>" + l10n("license.text.2", applet_data.id, user_lang)
|
||||||
|
) }}
|
||||||
|
</div>
|
||||||
</section>
|
</section>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
@@ -23,7 +23,10 @@
|
|||||||
<div class="np-file-drop-buttons pb-s">
|
<div class="np-file-drop-buttons pb-s">
|
||||||
{% if file_upload_button %}
|
{% if file_upload_button %}
|
||||||
<button id="{{ file_input_id }}-add" class="p-xs r-s border btn-primary np-file-drop-button">
|
<button id="{{ file_input_id }}-add" class="p-xs r-s border btn-primary np-file-drop-button">
|
||||||
<i class="fa-duotone fa-solid fa-cloud-arrow-up mr-xxs"></i>
|
{% if not is_standalone %}
|
||||||
|
<i class="fa-duotone fa-solid fa-cloud-arrow-up mr-xxs"></i>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
{% if file_multiple %}
|
{% if file_multiple %}
|
||||||
{{ l10n("file.drop.upload.multiple", "commons", user_lang) }}
|
{{ l10n("file.drop.upload.multiple", "commons", user_lang) }}
|
||||||
{% else %}
|
{% else %}
|
||||||
@@ -34,7 +37,11 @@
|
|||||||
|
|
||||||
{% if file_clear_button %}
|
{% if file_clear_button %}
|
||||||
<button id="{{ file_input_id }}-reset" class="p-xs r-s border btn-warning np-file-drop-button">
|
<button id="{{ file_input_id }}-reset" class="p-xs r-s border btn-warning np-file-drop-button">
|
||||||
{{ "<i class=\"fa-duotone fa-solid fa-trash mr-xs\"></i>" + l10n("file.drop.clear", "commons", user_lang) }}
|
{% if not is_standalone %}
|
||||||
|
<i class="fa-duotone fa-solid fa-trash mr-xs"></i>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{{ l10n("file.drop.clear", "commons", user_lang) }}
|
||||||
</button>
|
</button>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
|
Reference in New Issue
Block a user