Implemented file drop inputs, Preparing more tools
Update app.py, excel-password-remover.yml, and 30 more files...
This commit is contained in:
2
app.py
2
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.applet import render_applet_scripts, render_applet_head
|
||||||
from website.renderers.button import render_button
|
from website.renderers.button import render_button
|
||||||
from website.renderers.code import render_code_block
|
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.headings import render_heading, render_h2, render_h1, render_h3, render_h4
|
||||||
from website.renderers.paragraph import render_paragraph
|
from website.renderers.paragraph import render_paragraph
|
||||||
from website.renderers.lists import render_list_ul
|
from website.renderers.lists import render_list_ul
|
||||||
@@ -126,6 +127,7 @@ def inject_processors():
|
|||||||
render_applet_scripts=render_applet_scripts,
|
render_applet_scripts=render_applet_scripts,
|
||||||
render_applet_head=render_applet_head,
|
render_applet_head=render_applet_head,
|
||||||
render_code_block=render_code_block,
|
render_code_block=render_code_block,
|
||||||
|
render_file_input=render_file_input,
|
||||||
|
|
||||||
# Commons
|
# Commons
|
||||||
url_for=url_for,
|
url_for=url_for,
|
||||||
|
8
data/applets/excel-password-remover.yml
Normal file
8
data/applets/excel-password-remover.yml
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
|
||||||
|
applets:
|
||||||
|
- id: "excel-password-remover"
|
||||||
|
resources:
|
||||||
|
scripts:
|
||||||
|
- "excel-password-remover.mjs"
|
||||||
|
stylesheets:
|
||||||
|
- "excel-password-remover.css"
|
8
data/applets/png-chunk-analyser.yml
Normal file
8
data/applets/png-chunk-analyser.yml
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
|
||||||
|
applets:
|
||||||
|
- id: "png-chunk-analyser"
|
||||||
|
resources:
|
||||||
|
scripts:
|
||||||
|
- "png-chunk-analyser.mjs"
|
||||||
|
stylesheets:
|
||||||
|
- "png-chunk-analyser.css"
|
8
data/applets/png-optimizer.yml
Normal file
8
data/applets/png-optimizer.yml
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
|
||||||
|
applets:
|
||||||
|
- id: "png-optimizer"
|
||||||
|
resources:
|
||||||
|
scripts:
|
||||||
|
- "png-optimizer.mjs"
|
||||||
|
stylesheets:
|
||||||
|
- "png-optimizer.css"
|
@@ -9,6 +9,8 @@ na: N/A
|
|||||||
yes: Yes
|
yes: Yes
|
||||||
no: No
|
no: No
|
||||||
|
|
||||||
|
accept: Accept
|
||||||
|
|
||||||
width: Width
|
width: Width
|
||||||
height: Height
|
height: Height
|
||||||
width.min: Minimum width
|
width.min: Minimum width
|
||||||
@@ -59,3 +61,17 @@ none.ms: None
|
|||||||
none.mp: None
|
none.mp: None
|
||||||
none.fs: None
|
none.fs: None
|
||||||
none.fp: 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 <span class=\"np-file-drop-count\">???</span> files"
|
||||||
|
@@ -9,7 +9,8 @@ og.description: 'TODO: description'
|
|||||||
header.title: Contact
|
header.title: Contact
|
||||||
|
|
||||||
email.title: Email
|
email.title: Email
|
||||||
email.compose: Send an email to <i>herwin.bozet@gmail.com</i>
|
email.compose.gmail: Send an email to <i>herwin.bozet@gmail.com</i>
|
||||||
|
email.compose.nibblepoker: Send an email to <i>herwin.bozet@nibblepoker.lu</i>
|
||||||
|
|
||||||
twitter.title: Twitter
|
twitter.title: Twitter
|
||||||
twitter.compose: Compose DM to @NibblePoker on Twitter
|
twitter.compose: Compose DM to @NibblePoker on Twitter
|
||||||
|
@@ -35,3 +35,12 @@ usage.p1: >-
|
|||||||
demo.title: Demonstration video
|
demo.title: Demonstration video
|
||||||
links.title: Links
|
links.title: Links
|
||||||
content.link.demo: Demo hosted on GitHub
|
content.link.demo: Demo hosted on GitHub
|
||||||
|
|
||||||
|
|
||||||
|
eula.1: "This tool is for use only with files you have permission to unlock.<br>
|
||||||
|
If you don’t have authorization, contact the appropriate authority.<br>
|
||||||
|
You are responsible for how you use this tool."
|
||||||
|
eula.2: "No data is sent online, as everything happens in your browser with JavaScript.<br>
|
||||||
|
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."
|
||||||
|
@@ -9,6 +9,8 @@ na: Non-applicable
|
|||||||
yes: Oui
|
yes: Oui
|
||||||
no: Non
|
no: Non
|
||||||
|
|
||||||
|
accept: Accepter
|
||||||
|
|
||||||
width: Largeur
|
width: Largeur
|
||||||
height: Hauteur
|
height: Hauteur
|
||||||
width.min: Largeur minimale
|
width.min: Largeur minimale
|
||||||
@@ -59,3 +61,17 @@ none.ms: Aucun
|
|||||||
none.mp: Aucuns
|
none.mp: Aucuns
|
||||||
none.fs: Aucune
|
none.fs: Aucune
|
||||||
none.fp: Aucunes
|
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é <span class=\"np-file-drop-count\">???</span> fichiers"
|
||||||
|
@@ -9,7 +9,8 @@ og.description: 'TODO: description'
|
|||||||
header.title: Contact
|
header.title: Contact
|
||||||
|
|
||||||
email.title: Courriel
|
email.title: Courriel
|
||||||
email.compose: Envoyer un courriel à <i>herwin.bozet@gmail.com</i>
|
email.compose.gmail: Envoyer un courriel à <i>herwin.bozet@gmail.com</i>
|
||||||
|
email.compose.nibblepoker: Envoyer un courriel à <i>herwin.bozet@nibblepoker.lu</i>
|
||||||
|
|
||||||
twitter.title: Twitter
|
twitter.title: Twitter
|
||||||
twitter.compose: Composer un message privé pour @NibblePoker sur Twitter
|
twitter.compose: Composer un message privé pour @NibblePoker sur Twitter
|
||||||
|
31
data/tools/excel-password-remover.yml
Normal file
31
data/tools/excel-password-remover.yml
Normal file
@@ -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"
|
31
data/tools/png-chunk-analyser.yml
Normal file
31
data/tools/png-chunk-analyser.yml
Normal file
@@ -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"
|
31
data/tools/png-optimizer.yml
Normal file
31
data/tools/png-optimizer.yml
Normal file
@@ -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"
|
@@ -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;
|
||||||
|
});*/
|
||||||
|
}
|
||||||
|
}
|
15
static/resources/NibblePoker/css/extra.css
Normal file
15
static/resources/NibblePoker/css/extra.css
Normal file
@@ -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;
|
||||||
|
}
|
@@ -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"
|
import {fadeIn} from "./nibblepoker-ui"
|
||||||
|
|
||||||
class CpuArchitecture {
|
/*class CpuArchitecture {
|
||||||
constructor(id, name) {
|
constructor(id, name) {
|
||||||
this.id = id;
|
this.id = id;
|
||||||
this.name = name;
|
this.name = name;
|
||||||
@@ -29,7 +34,7 @@ function getCpuArchitecture(userAgent = navigator.userAgent) {
|
|||||||
return CpuArchitectures.RiscV;
|
return CpuArchitectures.RiscV;
|
||||||
}
|
}
|
||||||
return CpuArchitectures.Unknown;
|
return CpuArchitectures.Unknown;
|
||||||
}
|
}*/
|
||||||
|
|
||||||
let isSidebarVisible = true;
|
let isSidebarVisible = true;
|
||||||
let eContentModal = document.getElementById("modal-content");
|
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.
|
// TODO: Autodetect mobile screens, close it, and add classes to make it over the rest with dark modal bkgd.
|
||||||
|
|
||||||
// Printing the detected CPU architecture
|
// Printing the detected CPU architecture
|
||||||
const detectedCpuArch= getCpuArchitecture();
|
/*const detectedCpuArch= getCpuArchitecture();
|
||||||
let cpuArchPrintouts = document.querySelectorAll(".data-cpu-arch");
|
let cpuArchPrintouts = document.querySelectorAll(".data-cpu-arch");
|
||||||
cpuArchPrintouts.forEach(element => {
|
cpuArchPrintouts.forEach(element => {
|
||||||
element.textContent = detectedCpuArch.name;
|
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<HTMLElement>} */
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
22
templates/applets/excel-password-remover.jinja
Normal file
22
templates/applets/excel-password-remover.jinja
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
<section id="{{ applet_data.id }}-eula">
|
||||||
|
{{ 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)) }}
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section id="{{ applet_data.id }}-input">
|
||||||
|
{{ render_h2(l10n("file.selection.title", applet_data.id, user_lang)) }}
|
||||||
|
<p>123</p>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section id="{{ applet_data.id }}-details">
|
||||||
|
{{ render_h2(l10n("details.title", applet_data.id, user_lang)) }}
|
||||||
|
<p>123</p>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section id="{{ applet_data.id }}-licenses">
|
||||||
|
{{ render_h2(l10n("licenses.title", applet_data.id, user_lang)) }}
|
||||||
|
<p>123</p>
|
||||||
|
</section>
|
5
templates/applets/png-chunk-analyser.jinja
Normal file
5
templates/applets/png-chunk-analyser.jinja
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
|
||||||
|
{{ render_h2(l10n("upload.title", "commons", user_lang)) }}
|
||||||
|
|
||||||
|
{{ render_file_input("test-input", true, None, true, true) }}
|
||||||
|
|
0
templates/applets/png-optimizer.jinja
Normal file
0
templates/applets/png-optimizer.jinja
Normal file
@@ -23,6 +23,8 @@
|
|||||||
<link rel="stylesheet" href="https://cdn.nibblepoker.{{ domain_tld }}/NibblePoker/IndevCSS/nibblepoker.min.css">
|
<link rel="stylesheet" href="https://cdn.nibblepoker.{{ domain_tld }}/NibblePoker/IndevCSS/nibblepoker.min.css">
|
||||||
<link rel="stylesheet" href="https://cdn.nibblepoker.{{ domain_tld }}/Quantum/Quantum.min.css">
|
<link rel="stylesheet" href="https://cdn.nibblepoker.{{ domain_tld }}/Quantum/Quantum.min.css">
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="{{ url_for("static", filename="resources/NibblePoker/css/extra.css") }}">
|
||||||
|
|
||||||
{% block extra_stylesheets %}{% endblock %}
|
{% block extra_stylesheets %}{% endblock %}
|
||||||
|
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
|
@@ -1,4 +1,6 @@
|
|||||||
<button class="p-mxs r-s border b-light t-nowrap {{ button_extra_classes }}"
|
<button
|
||||||
|
{% if button_id is not none %}id="{{ button_id }}" {% endif %}
|
||||||
|
class="p-mxs r-s border b-light t-nowrap {{ button_extra_classes }}"
|
||||||
{% if button_disabled %}disabled{% endif %}>
|
{% if button_disabled %}disabled{% endif %}>
|
||||||
{{ button_inner_html }}
|
{{ button_inner_html }}
|
||||||
</button>
|
</button>
|
@@ -1,4 +1,8 @@
|
|||||||
<code class="code ox-auto w-full d-inline-block position-relative language-{{ code_language }}">
|
{% if code_language is none %}
|
||||||
|
<code class="code ox-auto w-full d-inline-block position-relative">
|
||||||
|
{% else %}
|
||||||
|
<code class="code ox-auto w-full d-inline-block position-relative language-{{ code_language }}">
|
||||||
|
{% endif %}
|
||||||
{% for code_line in code_lines %}
|
{% for code_line in code_lines %}
|
||||||
<span class="code-line t-nowrap">{{ code_line }}</span><br>
|
<span class="code-line t-nowrap">{{ code_line }}</span><br>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
58
templates/elements/file-input.jinja
Normal file
58
templates/elements/file-input.jinja
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
<div class="np-file-input-root-container">
|
||||||
|
{% if file_upload_button %}
|
||||||
|
<button id="{{ file_input_id }}-add" class="p-xs r-s border btn-primary">
|
||||||
|
<i class="fa-duotone fa-solid fa-cloud-arrow-up mr-xs"></i>
|
||||||
|
{{ l10n("file.drop.upload", "commons", user_lang) }}
|
||||||
|
</button>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if file_clear_button %}
|
||||||
|
<button id="{{ file_input_id }}-reset" class="p-xs r-s border btn-warning">
|
||||||
|
{{ l10n("file.drop.clear", "commons", user_lang) }}
|
||||||
|
</button>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if file_upload_button or file_clear_button %}
|
||||||
|
<br>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
<div class="np-file-input-drop-container border r-s bkgd-blank">
|
||||||
|
<p class="np-file-drop-text"
|
||||||
|
id="{{ file_input_id }}-text-drop">
|
||||||
|
{% if file_multiple %}
|
||||||
|
{{ l10n("file.drop.select.multiple", "commons", user_lang) }}
|
||||||
|
{% else %}
|
||||||
|
{{ l10n("file.drop.select.single", "commons", user_lang) }}
|
||||||
|
{% endif %}
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p class="np-file-drop-text"
|
||||||
|
id="{{ file_input_id }}-text-file-single"
|
||||||
|
hidden>
|
||||||
|
{{ l10n("file.drop.selected.single", "commons", user_lang) }}
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p class="np-file-drop-text"
|
||||||
|
id="{{ file_input_id }}-text-file-multiple"
|
||||||
|
hidden>
|
||||||
|
{{ l10n("file.drop.selected.multiple", "commons", user_lang) }}
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<label for="{{ file_input_id }}"
|
||||||
|
hidden>
|
||||||
|
{% if file_multiple %}
|
||||||
|
{{ l10n("file.drop.label.multiple", "commons", user_lang) }}
|
||||||
|
{% else %}
|
||||||
|
{{ l10n("file.drop.label.single", "commons", user_lang) }}
|
||||||
|
{% endif %}
|
||||||
|
</label>
|
||||||
|
|
||||||
|
<input type="file"
|
||||||
|
id="{{ file_input_id }}"
|
||||||
|
name="{{ file_input_id }}"
|
||||||
|
{% if file_accept is not none %}accept="{{ file_accept }}"{% endif %}
|
||||||
|
class="np-file-input-drop w-full p-l"
|
||||||
|
{% if file_multiple %}multiple{% endif %}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
@@ -10,10 +10,15 @@
|
|||||||
{% block main_content %}
|
{% block main_content %}
|
||||||
{{ render_h1(l10n("email.title", "contact", user_lang), "fad fa-mail-bulk", "herwin.bozet@gmail.com") }}
|
{{ render_h1(l10n("email.title", "contact", user_lang), "fad fa-mail-bulk", "herwin.bozet@gmail.com") }}
|
||||||
<p class="m-s">
|
<p class="m-s">
|
||||||
|
<a href="mailto:Herwin Bozet<herwin.bozet@nibblepoker.lu>?subject=Contact%20via%20NibblePoker.lu" class="a-hidden button-link">
|
||||||
|
<button class="p-xs r-s border b-light success"><i class="fad fa-external-link-alt mr-xs"></i>{{ l10n("email.compose.nibblepoker", "contact", user_lang) }}</button>
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
<!--<p class="m-s">
|
||||||
<a href="mailto:Herwin Bozet<herwin.bozet@gmail.com>?subject=Contact%20via%20NibblePoker.lu" class="a-hidden button-link">
|
<a href="mailto:Herwin Bozet<herwin.bozet@gmail.com>?subject=Contact%20via%20NibblePoker.lu" class="a-hidden button-link">
|
||||||
<button class="p-xs r-s border b-light success"><i class="fad fa-external-link-alt mr-xs"></i>{{ l10n("email.compose", "contact", user_lang) }}</button>
|
<button class="p-xs r-s border b-light success"><i class="fad fa-external-link-alt mr-xs"></i>{{ l10n("email.compose", "contact", user_lang) }}</button>
|
||||||
</a>
|
</a>
|
||||||
</p>
|
</p>-->
|
||||||
|
|
||||||
{{ render_h1(l10n("twitter.title", "contact", user_lang), "fab fa-twitter", "@NibblePoker") }}
|
{{ render_h1(l10n("twitter.title", "contact", user_lang), "fab fa-twitter", "@NibblePoker") }}
|
||||||
<p class="m-s">
|
<p class="m-s">
|
||||||
|
@@ -1 +0,0 @@
|
|||||||
{% extends "tools/_tool.jinja" %}
|
|
@@ -1,10 +1,11 @@
|
|||||||
from flask import render_template
|
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(
|
return render_template(
|
||||||
"elements/button.jinja",
|
"elements/button.jinja",
|
||||||
button_inner_html=inner_html,
|
button_inner_html=inner_html,
|
||||||
button_disabled=disabled,
|
button_disabled=disabled,
|
||||||
button_extra_classes=""
|
button_extra_classes="",
|
||||||
|
button_id=id,
|
||||||
)
|
)
|
||||||
|
@@ -1,5 +1,4 @@
|
|||||||
import html
|
import html
|
||||||
import re
|
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
|
||||||
from flask import render_template
|
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_lines=_code_lines,
|
||||||
code_language=language,
|
code_language=language,
|
||||||
)
|
)
|
||||||
|
|
||||||
# return re.sub('>\s*<span', "><span",
|
|
||||||
# re.sub('<br>\s*</code>', "</code>",
|
|
||||||
# render_template(
|
|
||||||
# "elements/code.jinja",
|
|
||||||
# code_lines=_code_lines,
|
|
||||||
# code_language=language,
|
|
||||||
# )
|
|
||||||
# )
|
|
||||||
# )
|
|
||||||
|
@@ -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,
|
||||||
|
)
|
||||||
|
Reference in New Issue
Block a user