From 65db2dea5a8d0540e9d182cb13b394aa0ef49dcf Mon Sep 17 00:00:00 2001 From: Herwin Bozet Date: Tue, 25 Feb 2025 23:53:43 +0100 Subject: [PATCH] Implemented file drop inputs, Preparing more tools Update app.py, excel-password-remover.yml, and 30 more files... --- app.py | 2 + data/applets/excel-password-remover.yml | 8 ++ data/applets/png-chunk-analyser.yml | 8 ++ data/applets/png-optimizer.yml | 8 ++ data/strings/en/commons.yml | 16 ++++ data/strings/en/contact.yml | 3 +- data/strings/en/excel-password-remover.yml | 9 ++ data/strings/fr/commons.yml | 16 ++++ data/strings/fr/contact.yml | 3 +- data/tools/excel-password-remover.yml | 31 ++++++ data/tools/png-chunk-analyser.yml | 31 ++++++ data/tools/png-optimizer.yml | 31 ++++++ .../excel-password-remover.css | 0 .../excel-password-remover.mjs | 36 +++++++ .../png-chunk-analyser/png-chunk-analyser.css | 0 .../png-chunk-analyser/png-chunk-analyser.mjs | 0 .../applets/png-optimizer/png-optimizer.css | 0 .../applets/png-optimizer/png-optimizer.mjs | 0 static/resources/NibblePoker/css/extra.css | 15 +++ .../resources/NibblePoker/js/nibblepoker.mjs | 94 ++++++++++++++++++- .../applets/excel-password-remover.jinja | 22 +++++ templates/applets/png-chunk-analyser.jinja | 5 + templates/applets/png-optimizer.jinja | 0 templates/base_www.jinja | 2 + templates/elements/button.jinja | 4 +- templates/elements/code.jinja | 6 +- templates/elements/file-input.jinja | 58 ++++++++++++ templates/pages/contact.jinja | 7 +- templates/tools/excel-password-remover.jinja | 1 - website/renderers/button.py | 5 +- website/renderers/code.py | 11 --- website/renderers/file_input.py | 14 ++- 32 files changed, 422 insertions(+), 24 deletions(-) create mode 100644 data/applets/excel-password-remover.yml create mode 100644 data/applets/png-chunk-analyser.yml create mode 100644 data/applets/png-optimizer.yml create mode 100644 data/tools/excel-password-remover.yml create mode 100644 data/tools/png-chunk-analyser.yml create mode 100644 data/tools/png-optimizer.yml create mode 100644 static/resources/NibblePoker/applets/excel-password-remover/excel-password-remover.css create mode 100644 static/resources/NibblePoker/applets/excel-password-remover/excel-password-remover.mjs create mode 100644 static/resources/NibblePoker/applets/png-chunk-analyser/png-chunk-analyser.css create mode 100644 static/resources/NibblePoker/applets/png-chunk-analyser/png-chunk-analyser.mjs create mode 100644 static/resources/NibblePoker/applets/png-optimizer/png-optimizer.css create mode 100644 static/resources/NibblePoker/applets/png-optimizer/png-optimizer.mjs create mode 100644 static/resources/NibblePoker/css/extra.css create mode 100644 templates/applets/excel-password-remover.jinja create mode 100644 templates/applets/png-chunk-analyser.jinja create mode 100644 templates/applets/png-optimizer.jinja create mode 100644 templates/elements/file-input.jinja delete mode 100644 templates/tools/excel-password-remover.jinja diff --git a/app.py b/app.py index f5bf86f..652c057 100644 --- a/app.py +++ b/app.py @@ -15,6 +15,7 @@ from website.l10n.utils import get_user_lang, localize, reload_strings, l10n_url from website.renderers.applet import render_applet_scripts, render_applet_head from website.renderers.button import render_button from website.renderers.code import render_code_block +from website.renderers.file_input import render_file_input from website.renderers.headings import render_heading, render_h2, render_h1, render_h3, render_h4 from website.renderers.paragraph import render_paragraph from website.renderers.lists import render_list_ul @@ -126,6 +127,7 @@ def inject_processors(): render_applet_scripts=render_applet_scripts, render_applet_head=render_applet_head, render_code_block=render_code_block, + render_file_input=render_file_input, # Commons url_for=url_for, diff --git a/data/applets/excel-password-remover.yml b/data/applets/excel-password-remover.yml new file mode 100644 index 0000000..730ecd7 --- /dev/null +++ b/data/applets/excel-password-remover.yml @@ -0,0 +1,8 @@ + +applets: + - id: "excel-password-remover" + resources: + scripts: + - "excel-password-remover.mjs" + stylesheets: + - "excel-password-remover.css" diff --git a/data/applets/png-chunk-analyser.yml b/data/applets/png-chunk-analyser.yml new file mode 100644 index 0000000..0a86b17 --- /dev/null +++ b/data/applets/png-chunk-analyser.yml @@ -0,0 +1,8 @@ + +applets: + - id: "png-chunk-analyser" + resources: + scripts: + - "png-chunk-analyser.mjs" + stylesheets: + - "png-chunk-analyser.css" diff --git a/data/applets/png-optimizer.yml b/data/applets/png-optimizer.yml new file mode 100644 index 0000000..68c4fe2 --- /dev/null +++ b/data/applets/png-optimizer.yml @@ -0,0 +1,8 @@ + +applets: + - id: "png-optimizer" + resources: + scripts: + - "png-optimizer.mjs" + stylesheets: + - "png-optimizer.css" diff --git a/data/strings/en/commons.yml b/data/strings/en/commons.yml index 110f919..6904fdf 100644 --- a/data/strings/en/commons.yml +++ b/data/strings/en/commons.yml @@ -9,6 +9,8 @@ na: N/A yes: Yes no: No +accept: Accept + width: Width height: Height width.min: Minimum width @@ -59,3 +61,17 @@ none.ms: None none.mp: None none.fs: None none.fp: None + +eula.short: EULA +eula.long: End-user license agreement (EULA) + +dont.ask.again: "Don't ask again" + +file.drop.upload: "Choose file(s)" +file.drop.clear: "Clear selection" +file.drop.label.single: "Choose or drop a file:" +file.drop.label.multiple: "Choose or drop files:" +file.drop.select.single: "Drop your file here" +file.drop.select.multiple: "Drop your files here" +file.drop.selected.single: "You selected 1 file" +file.drop.selected.multiple: "You selected ??? files" diff --git a/data/strings/en/contact.yml b/data/strings/en/contact.yml index 61b8923..21bde34 100644 --- a/data/strings/en/contact.yml +++ b/data/strings/en/contact.yml @@ -9,7 +9,8 @@ og.description: 'TODO: description' header.title: Contact email.title: Email -email.compose: Send an email to herwin.bozet@gmail.com +email.compose.gmail: Send an email to herwin.bozet@gmail.com +email.compose.nibblepoker: Send an email to herwin.bozet@nibblepoker.lu twitter.title: Twitter twitter.compose: Compose DM to @NibblePoker on Twitter diff --git a/data/strings/en/excel-password-remover.yml b/data/strings/en/excel-password-remover.yml index 3818fdb..1543671 100644 --- a/data/strings/en/excel-password-remover.yml +++ b/data/strings/en/excel-password-remover.yml @@ -35,3 +35,12 @@ usage.p1: >- demo.title: Demonstration video links.title: Links content.link.demo: Demo hosted on GitHub + + +eula.1: "This tool is for use only with files you have permission to unlock.
+If you don’t have authorization, contact the appropriate authority.
+You are responsible for how you use this tool." +eula.2: "No data is sent online, as everything happens in your browser with JavaScript.
+However, do not use this tool for sensitive files unless you have permission from the relevant authorities to avoid legal issues." +eula.3: "The tool doesn't reveal the original password, as it’s secure and not stored in plain text; it simply removes it." +eula.4: "By using this tool, you accept full responsibility, and it is provided “as is”, without any warranty." diff --git a/data/strings/fr/commons.yml b/data/strings/fr/commons.yml index 9fae486..3a5b085 100644 --- a/data/strings/fr/commons.yml +++ b/data/strings/fr/commons.yml @@ -9,6 +9,8 @@ na: Non-applicable yes: Oui no: Non +accept: Accepter + width: Largeur height: Hauteur width.min: Largeur minimale @@ -59,3 +61,17 @@ none.ms: Aucun none.mp: Aucuns none.fs: Aucune none.fp: Aucunes + +eula.short: CLUF +eula.long: Contrat de licence utilisateur final (CLUF) + +dont.ask.again: "Ne plus demander" + +file.drop.upload: "Ajouter fichier(s)" +file.drop.clear: "Vider la séléction" +file.drop.label.single: "Choisissez ou déposez un fichier:" +file.drop.label.multiple: "Choisissez ou déposez des fichiers:" +file.drop.select.single: "Déposez votre fichier ici" +file.drop.select.multiple: "Déposez vos fichiers ici" +file.drop.selected.single: "Vous avez séléctionné 1 fichier" +file.drop.selected.multiple: "Vous avez séléctionné ??? fichiers" diff --git a/data/strings/fr/contact.yml b/data/strings/fr/contact.yml index 9f00b82..35e60f6 100644 --- a/data/strings/fr/contact.yml +++ b/data/strings/fr/contact.yml @@ -9,7 +9,8 @@ og.description: 'TODO: description' header.title: Contact email.title: Courriel -email.compose: Envoyer un courriel à herwin.bozet@gmail.com +email.compose.gmail: Envoyer un courriel à herwin.bozet@gmail.com +email.compose.nibblepoker: Envoyer un courriel à herwin.bozet@nibblepoker.lu twitter.title: Twitter twitter.compose: Composer un message privé pour @NibblePoker sur Twitter diff --git a/data/tools/excel-password-remover.yml b/data/tools/excel-password-remover.yml new file mode 100644 index 0000000..829619d --- /dev/null +++ b/data/tools/excel-password-remover.yml @@ -0,0 +1,31 @@ + +tools: + - id: "excel-password-remover" + applet_id: "excel-password-remover" + metadata: + head: + title_key: "meta.title" + description_key: "meta.description" + opengraph: + title_key: "meta.title" + description_key: "meta.description" + type: null + url: null + image_url: "/resources/NibblePoker/images/tools/excel-password-remover/excel-password-remover.png" + image_type: null + twitter: + title_key: "meta.title" + description_key: "meta.description" + index: + priority: 100 + enable: true + title_key: "meta.title" + preamble_key: "meta.description" + image_url: "/resources/NibblePoker/images/tools/excel-password-remover/excel-password-remover.png" + image_alt_key: "" + general: + icon: "fab fa-python" + title_key: "meta.title" + subtitle_key: "article.subtitle" + tags: + - "undefined" diff --git a/data/tools/png-chunk-analyser.yml b/data/tools/png-chunk-analyser.yml new file mode 100644 index 0000000..80ab83f --- /dev/null +++ b/data/tools/png-chunk-analyser.yml @@ -0,0 +1,31 @@ + +tools: + - id: "png-chunk-analyser" + applet_id: "png-chunk-analyser" + metadata: + head: + title_key: "meta.title" + description_key: "meta.description" + opengraph: + title_key: "meta.title" + description_key: "meta.description" + type: null + url: null + image_url: "/resources/NibblePoker/images/tools/excel-password-remover/excel-password-remover.png" + image_type: null + twitter: + title_key: "meta.title" + description_key: "meta.description" + index: + priority: 100 + enable: true + title_key: "meta.title" + preamble_key: "meta.description" + image_url: "/resources/NibblePoker/images/tools/excel-password-remover/excel-password-remover.png" + image_alt_key: "" + general: + icon: "fab fa-python" + title_key: "meta.title" + subtitle_key: "article.subtitle" + tags: + - "undefined" diff --git a/data/tools/png-optimizer.yml b/data/tools/png-optimizer.yml new file mode 100644 index 0000000..112a589 --- /dev/null +++ b/data/tools/png-optimizer.yml @@ -0,0 +1,31 @@ + +tools: + - id: "png-optimizer" + applet_id: "png-optimizer" + metadata: + head: + title_key: "meta.title" + description_key: "meta.description" + opengraph: + title_key: "meta.title" + description_key: "meta.description" + type: null + url: null + image_url: "/resources/NibblePoker/images/tools/excel-password-remover/excel-password-remover.png" + image_type: null + twitter: + title_key: "meta.title" + description_key: "meta.description" + index: + priority: 100 + enable: true + title_key: "meta.title" + preamble_key: "meta.description" + image_url: "/resources/NibblePoker/images/tools/excel-password-remover/excel-password-remover.png" + image_alt_key: "" + general: + icon: "fab fa-python" + title_key: "meta.title" + subtitle_key: "article.subtitle" + tags: + - "undefined" diff --git a/static/resources/NibblePoker/applets/excel-password-remover/excel-password-remover.css b/static/resources/NibblePoker/applets/excel-password-remover/excel-password-remover.css new file mode 100644 index 0000000..e69de29 diff --git a/static/resources/NibblePoker/applets/excel-password-remover/excel-password-remover.mjs b/static/resources/NibblePoker/applets/excel-password-remover/excel-password-remover.mjs new file mode 100644 index 0000000..80bd0b9 --- /dev/null +++ b/static/resources/NibblePoker/applets/excel-password-remover/excel-password-remover.mjs @@ -0,0 +1,36 @@ + +const excelFileRegex = /^.*\.xls[xm]$/gi; +const excelWorksheetRegex = /^xl\/worksheets\/.*.xml$/gi; + +var outputZip; +var outputZipFilename = "default-filename.error.zip"; +var filesTotalCount = 0; +var filesProcessedCount = 0; +var passwordsRemoved = 0; + +// Tool-centric stuff +{ + /** @type {string} */ + const appletId = "excel-password-remover"; + + ///** @type {HTMLElement} */ + //const eEulaContainer = document.querySelector(`#${appletId}-eula`); + ///** @type {HTMLInputElement} */ + //const eEulaDontAskAgainOption = document.querySelector(`input#${appletId}-eula-remember`); + ///** @type {HTMLButtonElement} */ + //const eEulaAcceptButton = document.querySelector(`button#${appletId}-eula-accept`); + + /*function acceptTerms() { + document.getElementById("warning").hidden = true; + document.getElementById("file-select").hidden = false; + }*/ + + window.onload = function () { + /*console.log(eEulaContainer); + console.log(eEulaDontAskAgainOption); + console.log(eEulaAcceptButton); + eEulaAcceptButton.addEventListener("click", function() { + eEulaContainer.hidden = true; + });*/ + } +} diff --git a/static/resources/NibblePoker/applets/png-chunk-analyser/png-chunk-analyser.css b/static/resources/NibblePoker/applets/png-chunk-analyser/png-chunk-analyser.css new file mode 100644 index 0000000..e69de29 diff --git a/static/resources/NibblePoker/applets/png-chunk-analyser/png-chunk-analyser.mjs b/static/resources/NibblePoker/applets/png-chunk-analyser/png-chunk-analyser.mjs new file mode 100644 index 0000000..e69de29 diff --git a/static/resources/NibblePoker/applets/png-optimizer/png-optimizer.css b/static/resources/NibblePoker/applets/png-optimizer/png-optimizer.css new file mode 100644 index 0000000..e69de29 diff --git a/static/resources/NibblePoker/applets/png-optimizer/png-optimizer.mjs b/static/resources/NibblePoker/applets/png-optimizer/png-optimizer.mjs new file mode 100644 index 0000000..e69de29 diff --git a/static/resources/NibblePoker/css/extra.css b/static/resources/NibblePoker/css/extra.css new file mode 100644 index 0000000..c1abcd1 --- /dev/null +++ b/static/resources/NibblePoker/css/extra.css @@ -0,0 +1,15 @@ +.np-file-input-drop-container { + position: relative; +} + +.np-file-drop-text { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); +} + +input[type=file].np-file-input-drop { + opacity: 0; + cursor: pointer; +} diff --git a/static/resources/NibblePoker/js/nibblepoker.mjs b/static/resources/NibblePoker/js/nibblepoker.mjs index a5648eb..13ebe2b 100644 --- a/static/resources/NibblePoker/js/nibblepoker.mjs +++ b/static/resources/NibblePoker/js/nibblepoker.mjs @@ -1,6 +1,11 @@ +// NibblePoker - Mandatory Scripts +// Author: Herwin Bozet (@NibblePoker) +// License: Public Domain (This code) +// Remark: This modules contains all the scripts that are globally required on this website + import {fadeIn} from "./nibblepoker-ui" -class CpuArchitecture { +/*class CpuArchitecture { constructor(id, name) { this.id = id; this.name = name; @@ -29,7 +34,7 @@ function getCpuArchitecture(userAgent = navigator.userAgent) { return CpuArchitectures.RiscV; } return CpuArchitectures.Unknown; -} +}*/ let isSidebarVisible = true; let eContentModal = document.getElementById("modal-content"); @@ -72,9 +77,92 @@ document.addEventListener("DOMContentLoaded", () => { // TODO: Autodetect mobile screens, close it, and add classes to make it over the rest with dark modal bkgd. // Printing the detected CPU architecture - const detectedCpuArch= getCpuArchitecture(); + /*const detectedCpuArch= getCpuArchitecture(); let cpuArchPrintouts = document.querySelectorAll(".data-cpu-arch"); cpuArchPrintouts.forEach(element => { element.textContent = detectedCpuArch.name; + });*/ + + // Setting up the file drop inputs + document.querySelectorAll(".np-file-input-root-container").forEach(eRootContainer => { + //console.log(eRootContainer); + + /** @type {HTMLInputElement} */ + const eFileDropInput = eRootContainer.querySelector("input[type=file]"); + if(eFileDropInput == null) { + return; + } + + /** @type {string} */ + const inputId = eFileDropInput.getAttribute("id"); + //console.log(inputId); + + /** @type {HTMLElement} */ + const eFileDropTextEmpty = eRootContainer.querySelector(`#${inputId}-text-drop`); + + /** @type {HTMLElement} */ + const eFileDropTextSingle = eRootContainer.querySelector(`#${inputId}-text-file-single`); + + /** @type {HTMLElement} */ + const eFileDropTextMultiple = eRootContainer.querySelector(`#${inputId}-text-file-multiple`); + + /** @type {HTMLButtonElement} */ + const eFileDropAddButton = eRootContainer.querySelector(`button#${inputId}-add`); + + /** @type {HTMLButtonElement} */ + const eFileDropClearButton = eRootContainer.querySelector(`button#${inputId}-reset`); + + /** @type {NodeListOf} */ + const eFileDropSelectionCounts = eRootContainer.querySelectorAll(`.np-file-drop-count`); + + if(eFileDropAddButton !== null) { + eFileDropAddButton.addEventListener("click", function() { + eFileDropInput.click(); + }); + } + + if(eFileDropClearButton !== null) { + eFileDropClearButton.addEventListener("click", function() { + eFileDropInput.value = ''; + if(eFileDropTextSingle !== null) { + eFileDropTextSingle.hidden = true; + } + if(eFileDropTextMultiple !== null) { + eFileDropTextMultiple.hidden = true; + } + if(eFileDropTextEmpty !== null) { + eFileDropTextEmpty.hidden = false; + } + }); + } + + eFileDropInput.addEventListener('change', function(e) { + let fileCount = e.target.files.length; + + if(fileCount === 1 && eFileDropTextSingle !== null) { + if(eFileDropTextEmpty !== null) { + eFileDropTextEmpty.hidden = true; + } + if(eFileDropTextMultiple !== null) { + eFileDropTextMultiple.hidden = true; + } + eFileDropTextSingle.hidden = false; + } + + if(fileCount >= 1 && eFileDropTextMultiple !== null) { + if(eFileDropTextEmpty !== null) { + eFileDropTextEmpty.hidden = true; + } + if(eFileDropTextSingle !== null) { + eFileDropTextSingle.hidden = true; + } + + eFileDropSelectionCounts.forEach(eFileDropSelectionCount => { + eFileDropSelectionCount.innerText = `${fileCount}`; + }); + + eFileDropTextMultiple.hidden = false; + } + }); }); }); diff --git a/templates/applets/excel-password-remover.jinja b/templates/applets/excel-password-remover.jinja new file mode 100644 index 0000000..5b7beaf --- /dev/null +++ b/templates/applets/excel-password-remover.jinja @@ -0,0 +1,22 @@ +
+ {{ render_h2(l10n("eula.long", "commons", user_lang)) }} + {{ render_paragraph(l10n("eula.1", applet_data.id, user_lang)) }} + {{ render_paragraph(l10n("eula.2", applet_data.id, user_lang)) }} + {{ render_paragraph(l10n("eula.3", applet_data.id, user_lang)) }} + {{ render_paragraph(l10n("eula.4", applet_data.id, user_lang)) }} +
+ +
+ {{ render_h2(l10n("file.selection.title", applet_data.id, user_lang)) }} +

123

+
+ +
+ {{ render_h2(l10n("details.title", applet_data.id, user_lang)) }} +

123

+
+ +
+ {{ render_h2(l10n("licenses.title", applet_data.id, user_lang)) }} +

123

+
diff --git a/templates/applets/png-chunk-analyser.jinja b/templates/applets/png-chunk-analyser.jinja new file mode 100644 index 0000000..127233e --- /dev/null +++ b/templates/applets/png-chunk-analyser.jinja @@ -0,0 +1,5 @@ + +{{ render_h2(l10n("upload.title", "commons", user_lang)) }} + +{{ render_file_input("test-input", true, None, true, true) }} + diff --git a/templates/applets/png-optimizer.jinja b/templates/applets/png-optimizer.jinja new file mode 100644 index 0000000..e69de29 diff --git a/templates/base_www.jinja b/templates/base_www.jinja index ad720e2..aab9e6c 100644 --- a/templates/base_www.jinja +++ b/templates/base_www.jinja @@ -23,6 +23,8 @@ + + {% block extra_stylesheets %}{% endblock %} diff --git a/templates/elements/button.jinja b/templates/elements/button.jinja index cf3a2e7..9965b0d 100644 --- a/templates/elements/button.jinja +++ b/templates/elements/button.jinja @@ -1,4 +1,6 @@ - \ No newline at end of file diff --git a/templates/elements/code.jinja b/templates/elements/code.jinja index 2bbe724..702f3b1 100644 --- a/templates/elements/code.jinja +++ b/templates/elements/code.jinja @@ -1,4 +1,8 @@ - +{% if code_language is none %} + +{% else %} + +{% endif %} {% for code_line in code_lines %} {{ code_line }}
{% endfor %} diff --git a/templates/elements/file-input.jinja b/templates/elements/file-input.jinja new file mode 100644 index 0000000..081241a --- /dev/null +++ b/templates/elements/file-input.jinja @@ -0,0 +1,58 @@ +
+ {% if file_upload_button %} + + {% endif %} + + {% if file_clear_button %} + + {% endif %} + + {% if file_upload_button or file_clear_button %} +
+ {% endif %} + +
+

+ {% if file_multiple %} + {{ l10n("file.drop.select.multiple", "commons", user_lang) }} + {% else %} + {{ l10n("file.drop.select.single", "commons", user_lang) }} + {% endif %} +

+ + + + + + + + +
+
diff --git a/templates/pages/contact.jinja b/templates/pages/contact.jinja index e834bf5..a909439 100644 --- a/templates/pages/contact.jinja +++ b/templates/pages/contact.jinja @@ -10,10 +10,15 @@ {% block main_content %} {{ render_h1(l10n("email.title", "contact", user_lang), "fad fa-mail-bulk", "herwin.bozet@gmail.com") }}

+ + + +

+ {{ render_h1(l10n("twitter.title", "contact", user_lang), "fab fa-twitter", "@NibblePoker") }}

diff --git a/templates/tools/excel-password-remover.jinja b/templates/tools/excel-password-remover.jinja deleted file mode 100644 index 8700cf6..0000000 --- a/templates/tools/excel-password-remover.jinja +++ /dev/null @@ -1 +0,0 @@ -{% extends "tools/_tool.jinja" %} diff --git a/website/renderers/button.py b/website/renderers/button.py index 2c21545..9e522e9 100644 --- a/website/renderers/button.py +++ b/website/renderers/button.py @@ -1,10 +1,11 @@ from flask import render_template -def render_button(inner_html: str, disabled: bool = False) -> str: +def render_button(inner_html: str, disabled: bool = False, id: str = None) -> str: return render_template( "elements/button.jinja", button_inner_html=inner_html, button_disabled=disabled, - button_extra_classes="" + button_extra_classes="", + button_id=id, ) diff --git a/website/renderers/code.py b/website/renderers/code.py index 85ae3a6..3d9b08b 100644 --- a/website/renderers/code.py +++ b/website/renderers/code.py @@ -1,5 +1,4 @@ import html -import re from typing import Optional from flask import render_template @@ -19,13 +18,3 @@ def render_code_block(code_lines: list[str], language: Optional[str] = None): code_lines=_code_lines, code_language=language, ) - - # return re.sub('>\s*\s*', "", - # render_template( - # "elements/code.jinja", - # code_lines=_code_lines, - # code_language=language, - # ) - # ) - # ) diff --git a/website/renderers/file_input.py b/website/renderers/file_input.py index b9ea0aa..a8990da 100644 --- a/website/renderers/file_input.py +++ b/website/renderers/file_input.py @@ -1,3 +1,13 @@ +from flask import render_template -def render_file_input() -> str: - return "" + +def render_file_input(input_id: str, multiple: bool, accept: str = None, + upload_button: bool = False, clear_button: bool = False) -> str: + return render_template( + "elements/file-input.jinja", + file_input_id=input_id, + file_multiple=multiple, + file_accept=accept, + file_upload_button=upload_button, + file_clear_button=clear_button, + )