diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index c844b4f8..9806a20a 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -8,6 +8,11 @@ repos:
args: ["--fix", "--silent"]
# Run the formatter.
- id: ruff-format
+ - repo: https://github.com/biomejs/pre-commit
+ rev: "v0.1.0" # Use the sha / tag you want to point at
+ hooks:
+ - id: biome-check
+ additional_dependencies: ["@biomejs/biome@1.9.3"]
- repo: https://github.com/rtts/djhtml
rev: 3.0.6
hooks:
diff --git a/README.md b/README.md
index 15840f07..ba594fec 100644
--- a/README.md
+++ b/README.md
@@ -5,6 +5,7 @@
[![CI status](https://github.com/ae-utbm/sith/actions/workflows/ci.yml/badge.svg)](#)
[![Docs status](https://github.com/ae-utbm/sith/actions/workflows/deploy_docs.yml/badge.svg)](https://ae-utbm.github.io/sith)
[![Built with Material for MkDocs](https://img.shields.io/badge/Material_for_MkDocs-526CFE?style=default&logo=MaterialForMkDocs&logoColor=white)](https://squidfunk.github.io/mkdocs-material/)
+[![Checked with Biome](https://img.shields.io/badge/Checked_with-Biome-60a5fa?style=flat&logo=biome)](https://biomejs.dev)
[![discord](https://img.shields.io/discord/971448179075731476?label=discord&logo=discord&style=default)](https://discord.gg/xk9wfpsufm)
### This is the source code of the UTBM's student association available at [https://ae.utbm.fr/](https://ae.utbm.fr/).
diff --git a/babel.config.json b/babel.config.json
index ae719f31..623ee01c 100644
--- a/babel.config.json
+++ b/babel.config.json
@@ -12,4 +12,4 @@
}
]
]
-}
\ No newline at end of file
+}
diff --git a/biome.json b/biome.json
new file mode 100644
index 00000000..fdfe712a
--- /dev/null
+++ b/biome.json
@@ -0,0 +1,29 @@
+{
+ "$schema": "./node_modules/@biomejs/biome/configuration_schema.json",
+ "vcs": {
+ "enabled": true,
+ "clientKind": "git",
+ "useIgnoreFile": true
+ },
+ "files": {
+ "ignoreUnknown": false,
+ "ignore": ["core/static/vendored", "*.min.*", "staticfiles/generated"]
+ },
+ "formatter": {
+ "enabled": true,
+ "indentStyle": "space",
+ "lineWidth": 88
+ },
+ "organizeImports": {
+ "enabled": true
+ },
+ "linter": {
+ "enabled": true,
+ "rules": {
+ "all": true
+ }
+ },
+ "javascript": {
+ "globals": ["Alpine", "$", "jQuery", "gettext", "interpolate"]
+ }
+}
diff --git a/com/static/com/js/poster_list.js b/com/static/com/js/poster_list.js
index 9d4090e9..8ffb97c4 100644
--- a/com/static/com/js/poster_list.js
+++ b/com/static/com/js/poster_list.js
@@ -1,24 +1,23 @@
-$(document).ready(function(){
+$(document).ready(() => {
+ $("#poster_list #view").click(() => {
+ $("#view").removeClass("active");
+ });
- $("#poster_list #view").click(function(e){
- $("#view").removeClass("active");
- });
+ $("#poster_list .poster .image").click((e) => {
+ let el = $(e.target);
+ if (el.hasClass("image")) {
+ el = el.find("img");
+ }
+ $("#poster_list #view #placeholder").html(el.clone());
- $("#poster_list .poster .image").click(function(e){
-
- el = $(e.target);
- if(el.hasClass("image"))
- el = el.find("img")
- $("#poster_list #view #placeholder").html(el.clone());
-
- $("#view").addClass("active");
- });
-
- $(document).keyup(function(e) {
- if (e.keyCode == 27) { // escape key maps to keycode `27`
- e.preventDefault();
- $("#view").removeClass("active");
- }
- });
+ $("#view").addClass("active");
+ });
+ $(document).keyup((e) => {
+ if (e.keyCode === 27) {
+ // escape key maps to keycode `27`
+ e.preventDefault();
+ $("#view").removeClass("active");
+ }
+ });
});
diff --git a/com/static/com/js/slideshow.js b/com/static/com/js/slideshow.js
index 74ac9765..952af8b8 100644
--- a/com/static/com/js/slideshow.js
+++ b/com/static/com/js/slideshow.js
@@ -1,118 +1,98 @@
-$(document).ready(function(){
+$(document).ready(() => {
+ const transitionTime = 1000;
- transition_time = 1000;
+ let i = 0;
+ const max = $("#slideshow .slide").length;
- i = 0;
- max = $("#slideshow .slide").length;
-
- next_trigger = 0
-
- function enterFullscreen() {
- element = document.getElementById("slideshow");
- $(element).addClass("fullscreen");
- if(element.requestFullscreen) {
- element.requestFullscreen();
- } else if(element.mozRequestFullScreen) {
- element.mozRequestFullScreen();
- } else if(element.webkitRequestFullscreen) {
- element.webkitRequestFullscreen();
- } else if(element.msRequestFullscreen) {
- element.msRequestFullscreen();
- }
+ function enterFullscreen() {
+ const element = document.getElementById("slideshow");
+ $(element).addClass("fullscreen");
+ if (element.requestFullscreen) {
+ element.requestFullscreen();
+ } else if (element.mozRequestFullScreen) {
+ element.mozRequestFullScreen();
+ } else if (element.webkitRequestFullscreen) {
+ element.webkitRequestFullscreen();
+ } else if (element.msRequestFullscreen) {
+ element.msRequestFullscreen();
}
+ }
- function exitFullscreen() {
- element = document.getElementById("slideshow");
- $(element).removeClass("fullscreen");
- if (document.exitFullscreen) {
- document.exitFullscreen();
- } else if (document.webkitExitFullscreen) {
- document.webkitExitFullscreen();
- } else if (document.mozCancelFullScreen) {
- document.mozCancelFullScreen();
- } else if (document.msExitFullscreen) {
- document.msExitFullscreen();
- }
+ function exitFullscreen() {
+ const element = document.getElementById("slideshow");
+ $(element).removeClass("fullscreen");
+ if (document.exitFullscreen) {
+ document.exitFullscreen();
+ } else if (document.webkitExitFullscreen) {
+ document.webkitExitFullscreen();
+ } else if (document.mozCancelFullScreen) {
+ document.mozCancelFullScreen();
+ } else if (document.msExitFullscreen) {
+ document.msExitFullscreen();
}
+ }
- function init_progress_bar()
- {
+ function initProgressBar() {
+ $("#slideshow #progress_bar").css("transition", "none");
+ $("#slideshow #progress_bar").removeClass("progress");
+ $("#slideshow #progress_bar").addClass("init");
+ }
- $("#slideshow #progress_bar").css("transition", "none");
- $("#slideshow #progress_bar").removeClass("progress");
- $("#slideshow #progress_bar").addClass("init");
+ function startProgressBar(displayTime) {
+ $("#slideshow #progress_bar").removeClass("init");
+ $("#slideshow #progress_bar").addClass("progress");
+ $("#slideshow #progress_bar").css("transition", `width ${displayTime}s linear`);
+ }
+ function next() {
+ initProgressBar();
+ const slide = $($("#slideshow .slide").get(i % max));
+ slide.removeClass("center");
+ slide.addClass("left");
+
+ const nextSlide = $($("#slideshow .slide").get((i + 1) % max));
+ nextSlide.removeClass("right");
+ nextSlide.addClass("center");
+ const displayTime = nextSlide.attr("display_time") || 2;
+
+ $("#slideshow .bullet").removeClass("active");
+ const bullet = $("#slideshow .bullet")[(i + 1) % max];
+ $(bullet).addClass("active");
+
+ i = (i + 1) % max;
+
+ setTimeout(() => {
+ const othersLeft = $("#slideshow .slide.left");
+ othersLeft.removeClass("left");
+ othersLeft.addClass("right");
+
+ startProgressBar(displayTime);
+ setTimeout(next, displayTime * 1000);
+ }, transitionTime);
+ }
+
+ const displayTime = $("#slideshow .center").attr("display_time");
+ initProgressBar();
+ setTimeout(() => {
+ if (max > 1) {
+ startProgressBar(displayTime);
+ setTimeout(next, displayTime * 1000);
}
+ }, 10);
- function start_progress_bar(display_time)
- {
-
- $("#slideshow #progress_bar").removeClass("init");
- $("#slideshow #progress_bar").addClass("progress");
- $("#slideshow #progress_bar").css("transition", "width " + display_time + "s linear")
-
+ $("#slideshow").click(() => {
+ if ($("#slideshow").hasClass("fullscreen")) {
+ exitFullscreen();
+ } else {
+ enterFullscreen();
}
+ });
- function next()
- {
-
- init_progress_bar();
- slide = $($("#slideshow .slide").get(i % max));
- slide.removeClass("center");
- slide.addClass("left");
-
- next_slide = $($("#slideshow .slide").get((i + 1) % max));
- next_slide.removeClass("right");
- next_slide.addClass("center");
- display_time = next_slide.attr("display_time") || 2;
-
- $("#slideshow .bullet").removeClass("active");
- bullet = $("#slideshow .bullet")[(i + 1) % max];
- $(bullet).addClass("active");
-
- i = (i + 1) % max;
-
- setTimeout(function(){
-
- others_left = $("#slideshow .slide.left");
- others_left.removeClass("left");
- others_left.addClass("right");
-
- start_progress_bar(display_time);
- next_trigger = setTimeout(next, display_time * 1000);
-
- }, transition_time);
-
+ $(document).keyup((e) => {
+ if (e.keyCode === 27) {
+ // escape key maps to keycode `27`
+ e.preventDefault();
+ exitFullscreen();
}
-
-
- display_time = $("#slideshow .center").attr("display_time");
- init_progress_bar();
- setTimeout(function(){
- if(max > 1){
- start_progress_bar(display_time);
- setTimeout(next, display_time * 1000);
- }
- }, 10);
-
-
- $("#slideshow").click(function(e){
- if(!$("#slideshow").hasClass("fullscreen"))
- {
- console.log("Entering fullscreen ...");
- enterFullscreen();
- }else{
- console.log("Exiting fullscreen ...");
- exitFullscreen();
- }
- });
-
- $(document).keyup(function(e) {
- if (e.keyCode == 27) { // escape key maps to keycode `27`
- e.preventDefault();
- console.log("Exiting fullscreen ...");
- exitFullscreen();
- }
- });
-
+ });
});
diff --git a/com/templates/com/poster_list.jinja b/com/templates/com/poster_list.jinja
index 9ff3add4..8c4f5cd1 100644
--- a/com/templates/com/poster_list.jinja
+++ b/com/templates/com/poster_list.jinja
@@ -27,7 +27,7 @@
- {% if poster_list.count() == 0 %}
+ {% if poster_list.count() == 0 %}
{% trans %}No posters{% endtrans %}
{% else %}
diff --git a/core/fixtures/groups.json b/core/fixtures/groups.json
index 8f385d40..91759cce 100644
--- a/core/fixtures/groups.json
+++ b/core/fixtures/groups.json
@@ -1 +1,14 @@
-[{"pk": 1, "fields": {"permissions": [1, 2, 3, 7, 8, 9, 4, 5, 6, 10, 11, 12, 19, 20, 21, 22, 25, 23, 24, 16, 17, 18, 13, 14, 15]}, "model": "core.group"}, {"pk": 2, "fields": {"permissions": [25]}, "model": "core.group"}, {"pk": 3, "fields": {"permissions": []}, "model": "core.group"}]
\ No newline at end of file
+[
+ {
+ "pk": 1,
+ "fields": {
+ "permissions": [
+ 1, 2, 3, 7, 8, 9, 4, 5, 6, 10, 11, 12, 19, 20, 21, 22, 25, 23, 24, 16, 17, 18,
+ 13, 14, 15
+ ]
+ },
+ "model": "core.group"
+ },
+ { "pk": 2, "fields": { "permissions": [25] }, "model": "core.group" },
+ { "pk": 3, "fields": { "permissions": [] }, "model": "core.group" }
+]
diff --git a/core/fixtures/pages.json b/core/fixtures/pages.json
index aecf84ee..2960a792 100644
--- a/core/fixtures/pages.json
+++ b/core/fixtures/pages.json
@@ -1 +1,74 @@
-[{"pk": 1, "model": "core.page", "fields": {"full_name": "guy2", "owner_group": 1, "parent": null, "edit_groups": [], "name": "guy2", "view_groups": []}}, {"pk": 2, "model": "core.page", "fields": {"full_name": "guy2/bibou", "owner_group": 1, "parent": 1, "edit_group": [], "name": "bibou", "view_group": []}}, {"pk": 3, "model": "core.page", "fields": {"full_name": "guy2/bibou/troll", "owner_group": 1, "parent": 2, "edit_group": [], "name": "troll", "view_group": []}}, {"pk": 4, "model": "core.page", "fields": {"full_name": "guy", "owner_group": 1, "parent": null, "edit_group": [1], "name": "guy", "view_group": [1]}}, {"pk": 5, "model": "core.page", "fields": {"full_name": "bibou", "owner_group": 3, "parent": null, "edit_group": [1], "name": "bibou", "view_group": []}}, {"pk": 6, "model": "core.page", "fields": {"full_name": "guy2/guy", "owner_group": 1, "parent": 1, "edit_group": [], "name": "guy", "view_group": []}}]
\ No newline at end of file
+[
+ {
+ "pk": 1,
+ "model": "core.page",
+ "fields": {
+ "full_name": "guy2",
+ "owner_group": 1,
+ "parent": null,
+ "edit_groups": [],
+ "name": "guy2",
+ "view_groups": []
+ }
+ },
+ {
+ "pk": 2,
+ "model": "core.page",
+ "fields": {
+ "full_name": "guy2/bibou",
+ "owner_group": 1,
+ "parent": 1,
+ "edit_group": [],
+ "name": "bibou",
+ "view_group": []
+ }
+ },
+ {
+ "pk": 3,
+ "model": "core.page",
+ "fields": {
+ "full_name": "guy2/bibou/troll",
+ "owner_group": 1,
+ "parent": 2,
+ "edit_group": [],
+ "name": "troll",
+ "view_group": []
+ }
+ },
+ {
+ "pk": 4,
+ "model": "core.page",
+ "fields": {
+ "full_name": "guy",
+ "owner_group": 1,
+ "parent": null,
+ "edit_group": [1],
+ "name": "guy",
+ "view_group": [1]
+ }
+ },
+ {
+ "pk": 5,
+ "model": "core.page",
+ "fields": {
+ "full_name": "bibou",
+ "owner_group": 3,
+ "parent": null,
+ "edit_group": [1],
+ "name": "bibou",
+ "view_group": []
+ }
+ },
+ {
+ "pk": 6,
+ "model": "core.page",
+ "fields": {
+ "full_name": "guy2/guy",
+ "owner_group": 1,
+ "parent": 1,
+ "edit_group": [],
+ "name": "guy",
+ "view_group": []
+ }
+ }
+]
diff --git a/core/fixtures/users.json b/core/fixtures/users.json
index e966e7eb..137258c0 100644
--- a/core/fixtures/users.json
+++ b/core/fixtures/users.json
@@ -1 +1,42 @@
-[{"model": "core.user", "pk": 1, "fields": {"first_name": "Ro", "date_joined": "2015-11-19T16:05:51.764Z", "groups": [], "password": "pbkdf2_sha256$20000$MDukCN5X8Bof$rYdhppKiusj+W/1Rxpy0yuYsEyWocESEjtRsopkOc5c=", "last_name": "Ot", "nick_name": "", "username": "root", "user_permissions": [], "email": "bibou@git.an", "last_login": "2015-11-26T16:28:36.464Z", "date_of_birth": "1969-12-31T23:00:00Z", "is_superuser": true, "is_active": true, "is_staff": true}}, {"model": "core.user", "pk": 2, "fields": {"first_name": "Skia", "date_joined": "2015-11-19T16:06:29.556Z", "groups": [3], "password": "pbkdf2_sha256$20000$UK9a29p5bBEh$Jzv7xs0W9njJZiXfIdYXDydim/3YHs6awKwDmN7gSAc=", "last_name": "Kia", "nick_name": "", "username": "skia", "user_permissions": [], "email": "plop@libskia.so", "last_login": "2015-11-26T16:37:01.671Z", "date_of_birth": "1969-12-31T23:00:00Z", "is_superuser": false, "is_active": true, "is_staff": false}}]
\ No newline at end of file
+[
+ {
+ "model": "core.user",
+ "pk": 1,
+ "fields": {
+ "first_name": "Ro",
+ "date_joined": "2015-11-19T16:05:51.764Z",
+ "groups": [],
+ "password": "pbkdf2_sha256$20000$MDukCN5X8Bof$rYdhppKiusj+W/1Rxpy0yuYsEyWocESEjtRsopkOc5c=",
+ "last_name": "Ot",
+ "nick_name": "",
+ "username": "root",
+ "user_permissions": [],
+ "email": "bibou@git.an",
+ "last_login": "2015-11-26T16:28:36.464Z",
+ "date_of_birth": "1969-12-31T23:00:00Z",
+ "is_superuser": true,
+ "is_active": true,
+ "is_staff": true
+ }
+ },
+ {
+ "model": "core.user",
+ "pk": 2,
+ "fields": {
+ "first_name": "Skia",
+ "date_joined": "2015-11-19T16:06:29.556Z",
+ "groups": [3],
+ "password": "pbkdf2_sha256$20000$UK9a29p5bBEh$Jzv7xs0W9njJZiXfIdYXDydim/3YHs6awKwDmN7gSAc=",
+ "last_name": "Kia",
+ "nick_name": "",
+ "username": "skia",
+ "user_permissions": [],
+ "email": "plop@libskia.so",
+ "last_login": "2015-11-26T16:37:01.671Z",
+ "date_of_birth": "1969-12-31T23:00:00Z",
+ "is_superuser": false,
+ "is_active": true,
+ "is_staff": false
+ }
+ }
+]
diff --git a/core/static/core/base.css b/core/static/core/base.css
index 4358917e..e8e7e9ac 100644
--- a/core/static/core/base.css
+++ b/core/static/core/base.css
@@ -1,45 +1,124 @@
/*--------------------------------RESET--------------------------------*/
/*--------------------------------RESET--------------------------------*/
-html, body, div, span, applet, object, iframe,
-h1, h2, h3, h4, h5, h6, p, blockquote, pre,
-a, abbr, acronym, address, big, cite, code,
-del, dfn, em, img, ins, kbd, q, s, samp,
-small, strike, sub, sup, tt, var,
-b, u, i, center,
-dl, dt, dd, ol, ul, li,
-fieldset, form, label, legend,
-table, caption, tbody, tfoot, thead, tr, th, td,
-article, aside, canvas, details, embed,
-figure, figcaption, footer, header, hgroup,
-menu, nav, output, ruby, section, summary,
-time, mark, audio, video {
- margin: 0;
- padding: 0;
- border: 0;
- font-size: 100%;
- font: inherit;
- vertical-align: baseline;
+html,
+body,
+div,
+span,
+applet,
+object,
+iframe,
+h1,
+h2,
+h3,
+h4,
+h5,
+h6,
+p,
+blockquote,
+pre,
+a,
+abbr,
+acronym,
+address,
+big,
+cite,
+code,
+del,
+dfn,
+em,
+img,
+ins,
+kbd,
+q,
+s,
+samp,
+small,
+strike,
+sub,
+sup,
+tt,
+var,
+b,
+u,
+i,
+center,
+dl,
+dt,
+dd,
+ol,
+ul,
+li,
+fieldset,
+form,
+label,
+legend,
+table,
+caption,
+tbody,
+tfoot,
+thead,
+tr,
+th,
+td,
+article,
+aside,
+canvas,
+details,
+embed,
+figure,
+figcaption,
+footer,
+header,
+hgroup,
+menu,
+nav,
+output,
+ruby,
+section,
+summary,
+time,
+mark,
+audio,
+video {
+ margin: 0;
+ padding: 0;
+ border: 0;
+ font-size: 100%;
+ vertical-align: baseline;
}
/* HTML5 display-role reset for older browsers */
-article, aside, details, figcaption, figure,
-footer, header, hgroup, menu, nav, section {
- display: block;
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+menu,
+nav,
+section {
+ display: block;
}
body {
- line-height: 1;
+ line-height: 1;
}
-ol, ul {
- /* list-style: none;*/
+ol,
+ul {
+ /* list-style: none;*/
}
-blockquote, q {
- quotes: none;
+blockquote,
+q {
+ quotes: none;
}
-blockquote:before, blockquote:after,
-q:before, q:after {
- content: '';
- content: none;
+blockquote:before,
+blockquote:after,
+q:before,
+q:after {
+ content: "";
+ content: none;
}
table {
- border-collapse: collapse;
- border-spacing: 0;
+ border-collapse: collapse;
+ border-spacing: 0;
}
diff --git a/core/static/core/js/script.js b/core/static/core/js/script.js
index c3319c00..592164a9 100644
--- a/core/static/core/js/script.js
+++ b/core/static/core/js/script.js
@@ -1,59 +1,66 @@
-$( function() {
- buttons = $(".choose_file_button");
- popups = $(".choose_file_widget");
- popups.dialog({
- autoOpen: false,
- modal: true,
- width: "90%",
- create: function (event) {
- target = $(event.target);
- target.parent().css({
- 'position': 'fixed',
- 'top': '5%',
- 'bottom': '5%',
- });
- target.css("height", "300px");
- console.log(target);
+$(() => {
+ // const buttons = $('.choose_file_button')
+ const popups = $(".choose_file_widget");
+ popups.dialog({
+ autoOpen: false,
+ modal: true,
+ width: "90%",
+ create: (event) => {
+ const target = $(event.target);
+ target.parent().css({
+ position: "fixed",
+ top: "5%",
+ bottom: "5%",
+ });
+ target.css("height", "300px");
+ },
+ buttons: [
+ {
+ text: "Choose",
+ click: function () {
+ $(`input[name=${$(this).attr("name")}]`).attr(
+ "value",
+ $("#file_id").attr("value"),
+ );
+ $(this).dialog("close");
},
- buttons: [
- {
- text: "Choose",
- click: function() {
- console.log($("#file_id"));
- $("input[name="+$(this).attr('name')+"]").attr('value', $("#file_id").attr('value'));
- $( this ).dialog( "close" );
- },
- disabled: true,
- }
- ],
+ disabled: true,
+ },
+ ],
+ });
+ $(".choose_file_button")
+ .button()
+ .on("click", function () {
+ const popup = popups.filter(`[name=${$(this).attr("name")}]`);
+ popup.html(
+ '
',
+ );
+ popup.dialog({ title: $(this).text() }).dialog("open");
});
- $( ".choose_file_button" ).button().on( "click", function() {
- popup = popups.filter("[name="+$(this).attr('name')+"]");
- console.log(popup);
- popup.html('
');
- popup.dialog({title: $(this).text()}).dialog( "open" );
- });
- $("#quick_notif li").click(function () {
- $(this).hide();
- })
+ $("#quick_notif li").click(function () {
+ $(this).hide();
+ });
});
+// biome-ignore lint/correctness/noUnusedVariables: used in other scripts
function createQuickNotif(msg) {
- const el = document.createElement('li')
- el.textContent = msg
- el.addEventListener('click', () => el.parentNode.removeChild(el))
- document.getElementById('quick_notif').appendChild(el)
+ const el = document.createElement("li");
+ el.textContent = msg;
+ el.addEventListener("click", () => el.parentNode.removeChild(el));
+ document.getElementById("quick_notif").appendChild(el);
}
+// biome-ignore lint/correctness/noUnusedVariables: used in other scripts
function deleteQuickNotifs() {
- const el = document.getElementById('quick_notif')
- while (el.firstChild) {
- el.removeChild(el.firstChild)
- }
+ const el = document.getElementById("quick_notif");
+ while (el.firstChild) {
+ el.removeChild(el.firstChild);
+ }
}
-function display_notif() {
- $('#header_notif').toggle().parent().toggleClass("white");
+// biome-ignore lint/correctness/noUnusedVariables: used in other scripts
+function displayNotif() {
+ $("#header_notif").toggle().parent().toggleClass("white");
}
// You can't get the csrf token from the template in a widget
@@ -62,11 +69,13 @@ function display_notif() {
// Sadly, getting the cookie is not possible with CSRF_COOKIE_HTTPONLY or CSRF_USE_SESSIONS is True
// So, the true workaround is to get the token from the dom
// https://docs.djangoproject.com/en/2.0/ref/csrf/#acquiring-the-token-if-csrf-use-sessions-is-true
+// biome-ignore lint/style/useNamingConvention: can't find it used anywhere but I will not play with the devil
+// biome-ignore lint/correctness/noUnusedVariables: used in other scripts
function getCSRFToken() {
- return $("[name=csrfmiddlewaretoken]").val();
+ return $("[name=csrfmiddlewaretoken]").val();
}
-
+// biome-ignore lint/correctness/noUnusedVariables: used in other scripts
const initialUrlParams = new URLSearchParams(window.location.search);
/**
@@ -74,9 +83,12 @@ const initialUrlParams = new URLSearchParams(window.location.search);
* @enum {number}
*/
const History = {
- NONE: 0,
- PUSH: 1,
- REPLACE: 2,
+ // biome-ignore lint/style/useNamingConvention: this feels more like an enum
+ NONE: 0,
+ // biome-ignore lint/style/useNamingConvention: this feels more like an enum
+ PUSH: 1,
+ // biome-ignore lint/style/useNamingConvention: this feels more like an enum
+ REPLACE: 2,
};
/**
@@ -85,27 +97,31 @@ const History = {
* @param {History} action
* @param {URL | null} url
*/
-function update_query_string(key, value, action = History.REPLACE, url = null) {
- if (!url){
- url = new URL(window.location.href);
- }
- if (value === undefined || value === null || value === "") {
- // If the value is null, undefined or empty => delete it
- url.searchParams.delete(key)
- } else if (Array.isArray(value)) {
- url.searchParams.delete(key)
- value.forEach((v) => url.searchParams.append(key, v))
- } else {
- url.searchParams.set(key, value);
+// biome-ignore lint/correctness/noUnusedVariables: used in other scripts
+function updateQueryString(key, value, action = History.REPLACE, url = null) {
+ let ret = url;
+ if (!ret) {
+ ret = new URL(window.location.href);
+ }
+ if (value === undefined || value === null || value === "") {
+ // If the value is null, undefined or empty => delete it
+ ret.searchParams.delete(key);
+ } else if (Array.isArray(value)) {
+ ret.searchParams.delete(key);
+ for (const v of value) {
+ ret.searchParams.append(key, v);
}
+ } else {
+ ret.searchParams.set(key, value);
+ }
- if (action === History.PUSH) {
- history.pushState(null, "", url.toString());
- } else if (action === History.REPLACE) {
- history.replaceState(null, "", url.toString());
- }
+ if (action === History.PUSH) {
+ window.history.pushState(null, "", ret.toString());
+ } else if (action === History.REPLACE) {
+ window.history.replaceState(null, "", ret.toString());
+ }
- return url;
+ return ret;
}
// TODO : If one day a test workflow is made for JS in this project
@@ -116,27 +132,28 @@ function update_query_string(key, value, action = History.REPLACE, url = null) {
* @param {string} url The paginated endpoint to fetch
* @return {Promise