mirror of
				https://github.com/ae-utbm/sith.git
				synced 2025-11-04 02:53:06 +00:00 
			
		
		
		
	Apply all biomejs fixes
This commit is contained in:
		@@ -13,13 +13,11 @@ $(() => {
 | 
			
		||||
        bottom: "5%",
 | 
			
		||||
      });
 | 
			
		||||
      target.css("height", "300px");
 | 
			
		||||
      console.log(target);
 | 
			
		||||
    },
 | 
			
		||||
    buttons: [
 | 
			
		||||
      {
 | 
			
		||||
        text: "Choose",
 | 
			
		||||
        click: function () {
 | 
			
		||||
          console.log($("#file_id"));
 | 
			
		||||
          $(`input[name=${$(this).attr("name")}]`).attr(
 | 
			
		||||
            "value",
 | 
			
		||||
            $("#file_id").attr("value"),
 | 
			
		||||
@@ -34,7 +32,6 @@ $(() => {
 | 
			
		||||
    .button()
 | 
			
		||||
    .on("click", function () {
 | 
			
		||||
      const popup = popups.filter(`[name=${$(this).attr("name")}]`);
 | 
			
		||||
      console.log(popup);
 | 
			
		||||
      popup.html(
 | 
			
		||||
        '<iframe src="/file/popup" width="100%" height="95%"></iframe><div id="file_id" value="null" />',
 | 
			
		||||
      );
 | 
			
		||||
@@ -45,6 +42,7 @@ $(() => {
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
// biome-ignore lint/correctness/noUnusedVariables: used in other scripts
 | 
			
		||||
function createQuickNotif(msg) {
 | 
			
		||||
  const el = document.createElement("li");
 | 
			
		||||
  el.textContent = msg;
 | 
			
		||||
@@ -52,6 +50,7 @@ function createQuickNotif(msg) {
 | 
			
		||||
  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) {
 | 
			
		||||
@@ -59,7 +58,8 @@ function deleteQuickNotifs() {
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function display_notif() {
 | 
			
		||||
// biome-ignore lint/correctness/noUnusedVariables: used in other scripts
 | 
			
		||||
function displayNotif() {
 | 
			
		||||
  $("#header_notif").toggle().parent().toggleClass("white");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -69,10 +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();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// biome-ignore lint/correctness/noUnusedVariables: used in other scripts
 | 
			
		||||
const initialUrlParams = new URLSearchParams(window.location.search);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -80,8 +83,11 @@ const initialUrlParams = new URLSearchParams(window.location.search);
 | 
			
		||||
 * @enum {number}
 | 
			
		||||
 */
 | 
			
		||||
const History = {
 | 
			
		||||
  // 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,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
@@ -91,7 +97,8 @@ const History = {
 | 
			
		||||
 * @param {History} action
 | 
			
		||||
 * @param {URL | null} url
 | 
			
		||||
 */
 | 
			
		||||
function update_query_string(key, value, action = History.REPLACE, url = null) {
 | 
			
		||||
// 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);
 | 
			
		||||
@@ -125,24 +132,25 @@ function update_query_string(key, value, action = History.REPLACE, url = null) {
 | 
			
		||||
 * @param {string} url The paginated endpoint to fetch
 | 
			
		||||
 * @return {Promise<Object[]>}
 | 
			
		||||
 */
 | 
			
		||||
async function fetch_paginated(url) {
 | 
			
		||||
  const max_per_page = 199;
 | 
			
		||||
  const paginated_url = new URL(url, document.location.origin);
 | 
			
		||||
  paginated_url.searchParams.set("page_size", max_per_page.toString());
 | 
			
		||||
  paginated_url.searchParams.set("page", "1");
 | 
			
		||||
// biome-ignore lint/correctness/noUnusedVariables: used in other scripts
 | 
			
		||||
async function fetchPaginated(url) {
 | 
			
		||||
  const maxPerPage = 199;
 | 
			
		||||
  const paginatedUrl = new URL(url, document.location.origin);
 | 
			
		||||
  paginatedUrl.searchParams.set("page_size", maxPerPage.toString());
 | 
			
		||||
  paginatedUrl.searchParams.set("page", "1");
 | 
			
		||||
 | 
			
		||||
  const first_page = await (await fetch(paginated_url)).json();
 | 
			
		||||
  const results = first_page.results;
 | 
			
		||||
  const firstPage = await (await fetch(paginatedUrl)).json();
 | 
			
		||||
  const results = firstPage.results;
 | 
			
		||||
 | 
			
		||||
  const nb_pictures = first_page.count;
 | 
			
		||||
  const nb_pages = Math.ceil(nb_pictures / max_per_page);
 | 
			
		||||
  const nbPictures = firstPage.count;
 | 
			
		||||
  const nbPages = Math.ceil(nbPictures / maxPerPage);
 | 
			
		||||
 | 
			
		||||
  if (nb_pages > 1) {
 | 
			
		||||
  if (nbPages > 1) {
 | 
			
		||||
    const promises = [];
 | 
			
		||||
    for (let i = 2; i <= nb_pages; i++) {
 | 
			
		||||
      paginated_url.searchParams.set("page", i.toString());
 | 
			
		||||
    for (let i = 2; i <= nbPages; i++) {
 | 
			
		||||
      paginatedUrl.searchParams.set("page", i.toString());
 | 
			
		||||
      promises.push(
 | 
			
		||||
        fetch(paginated_url).then((res) => res.json().then((json) => json.results)),
 | 
			
		||||
        fetch(paginatedUrl).then((res) => res.json().then((json) => json.results)),
 | 
			
		||||
      );
 | 
			
		||||
    }
 | 
			
		||||
    results.push(...(await Promise.all(promises)).flat());
 | 
			
		||||
 
 | 
			
		||||
@@ -15,7 +15,7 @@
 | 
			
		||||
 * ];
 | 
			
		||||
 * document.addEventListener("DOMContentLoaded", () => sithSelect2({
 | 
			
		||||
 *   element: document.getElementById("select2-input"),
 | 
			
		||||
 *   data_source: local_data_source(data)
 | 
			
		||||
 *   dataSource: localDataSource(data)
 | 
			
		||||
 * }));
 | 
			
		||||
 * ```
 | 
			
		||||
 *
 | 
			
		||||
@@ -29,7 +29,7 @@
 | 
			
		||||
 * ];
 | 
			
		||||
 * document.addEventListener("DOMContentLoaded", () => sithSelect2({
 | 
			
		||||
 *   element: document.getElementById("select2-input"),
 | 
			
		||||
 *   data_source: local_data_source(data, {
 | 
			
		||||
 *   dataSource: localDataSource(data, {
 | 
			
		||||
 *     excluded: () => data.filter((i) => i.text === "to exclude").map((i) => parseInt(i))
 | 
			
		||||
 *   })
 | 
			
		||||
 * }));
 | 
			
		||||
@@ -38,15 +38,15 @@
 | 
			
		||||
 * # Remote data source
 | 
			
		||||
 *
 | 
			
		||||
 * Select2 with remote data sources are similar to those with local
 | 
			
		||||
 * data, but with some more parameters, like `result_converter`,
 | 
			
		||||
 * data, but with some more parameters, like `resultConverter`,
 | 
			
		||||
 * which takes a callback that must return a `Select2Object`.
 | 
			
		||||
 *
 | 
			
		||||
 * ```js
 | 
			
		||||
 * document.addEventListener("DOMContentLoaded", () => sithSelect2({
 | 
			
		||||
 *   element: document.getElementById("select2-input"),
 | 
			
		||||
 *   data_source: remote_data_source("/api/user/search", {
 | 
			
		||||
 *   dataSource: remoteDataSource("/api/user/search", {
 | 
			
		||||
 *     excluded: () => [1, 2],  // exclude users 1 and 2 from the search
 | 
			
		||||
 *     result_converter: (user) => Object({id: user.id, text: user.first_name})
 | 
			
		||||
 *     resultConverter: (user) => Object({id: user.id, text: user.firstName})
 | 
			
		||||
 *   })
 | 
			
		||||
 * }));
 | 
			
		||||
 * ```
 | 
			
		||||
@@ -62,8 +62,8 @@
 | 
			
		||||
 * ```js
 | 
			
		||||
 * document.addEventListener("DOMContentLoaded", () => sithSelect2({
 | 
			
		||||
 *   element: document.getElementById("select2-input"),
 | 
			
		||||
 *   data_source: remote_data_source("/api/user/search", {
 | 
			
		||||
 *     result_converter: (user) => Object({id: user.id, text: user.first_name}),
 | 
			
		||||
 *   dataSource: remoteDataSource("/api/user/search", {
 | 
			
		||||
 *     resultConverter: (user) => Object({id: user.id, text: user.firstName}),
 | 
			
		||||
 *     overrides: {
 | 
			
		||||
 *      delay: 500
 | 
			
		||||
 *     }
 | 
			
		||||
@@ -85,15 +85,15 @@
 | 
			
		||||
 *
 | 
			
		||||
 * Sometimes, you would like to display an image besides
 | 
			
		||||
 * the text on the select items.
 | 
			
		||||
 * In this case, fill the `picture_getter` option :
 | 
			
		||||
 * In this case, fill the `pictureGetter` option :
 | 
			
		||||
 *
 | 
			
		||||
 * ```js
 | 
			
		||||
 * document.addEventListener("DOMContentLoaded", () => sithSelect2({
 | 
			
		||||
 *   element: document.getElementById("select2-input"),
 | 
			
		||||
 *   data_source: remote_data_source("/api/user/search", {
 | 
			
		||||
 *     result_converter: (user) => Object({id: user.id, text: user.first_name})
 | 
			
		||||
 *   dataSource: remoteDataSource("/api/user/search", {
 | 
			
		||||
 *     resultConverter: (user) => Object({id: user.id, text: user.firstName})
 | 
			
		||||
 *   })
 | 
			
		||||
 *   picture_getter: (user) => user.profile_pict,
 | 
			
		||||
 *   pictureGetter: (user) => user.profilePict,
 | 
			
		||||
 * }));
 | 
			
		||||
 * ```
 | 
			
		||||
 *
 | 
			
		||||
@@ -105,8 +105,8 @@
 | 
			
		||||
 * <body>
 | 
			
		||||
 *   <div x-data="select2_test">
 | 
			
		||||
 *     <select x-ref="search" x-ref="select"></select>
 | 
			
		||||
 *     <p x-text="current_selection.id"></p>
 | 
			
		||||
 *     <p x-text="current_selection.text"></p>
 | 
			
		||||
 *     <p x-text="currentSelection.id"></p>
 | 
			
		||||
 *     <p x-text="currentSelection.text"></p>
 | 
			
		||||
 *   </div>
 | 
			
		||||
 * </body>
 | 
			
		||||
 *
 | 
			
		||||
@@ -114,20 +114,20 @@
 | 
			
		||||
 * document.addEventListener("alpine:init", () => {
 | 
			
		||||
 *   Alpine.data("select2_test", () => ({
 | 
			
		||||
 *     selector: undefined,
 | 
			
		||||
 *     current_select: {id: "", text: ""},
 | 
			
		||||
 *     currentSelect: {id: "", text: ""},
 | 
			
		||||
 *
 | 
			
		||||
 *     init() {
 | 
			
		||||
 *       this.selector = sithSelect2({
 | 
			
		||||
 *         element: $(this.$refs.select),
 | 
			
		||||
 *         data_source: local_data_source(
 | 
			
		||||
 *         dataSource: localDataSource(
 | 
			
		||||
 *           [{id: 1, text: "foo"}, {id: 2, text: "bar"}]
 | 
			
		||||
 *         ),
 | 
			
		||||
 *       });
 | 
			
		||||
 *       this.selector.on("select2:select", (event) => {
 | 
			
		||||
 *         // select2 => Alpine signals here
 | 
			
		||||
 *         this.current_select = this.selector.select2("data")
 | 
			
		||||
 *         this.currentSelect = this.selector.select2("data")
 | 
			
		||||
 *       });
 | 
			
		||||
 *       this.$watch("current_selected" (value) => {
 | 
			
		||||
 *       this.$watch("currentSelected" (value) => {
 | 
			
		||||
 *          // Alpine => select2 signals here
 | 
			
		||||
 *       });
 | 
			
		||||
 *     },
 | 
			
		||||
@@ -145,10 +145,10 @@
 | 
			
		||||
/**
 | 
			
		||||
 * @typedef Select2Options
 | 
			
		||||
 * @property {Element} element
 | 
			
		||||
 * @property {Object} data_source
 | 
			
		||||
 *      the data source, built with `local_data_source` or `remote_data_source`
 | 
			
		||||
 * @property {Object} dataSource
 | 
			
		||||
 *      the data source, built with `localDataSource` or `remoteDataSource`
 | 
			
		||||
 * @property {number[]} excluded A list of ids to exclude from search
 | 
			
		||||
 * @property {undefined | function(Object): string} picture_getter
 | 
			
		||||
 * @property {undefined | function(Object): string} pictureGetter
 | 
			
		||||
 *      A callback to get the picture field from the API response
 | 
			
		||||
 * @property {Object | undefined} overrides
 | 
			
		||||
 *      Any other select2 parameter to apply on the config
 | 
			
		||||
@@ -157,13 +157,14 @@
 | 
			
		||||
/**
 | 
			
		||||
 * @param {Select2Options} options
 | 
			
		||||
 */
 | 
			
		||||
// biome-ignore lint/correctness/noUnusedVariables: used in other scripts
 | 
			
		||||
function sithSelect2(options) {
 | 
			
		||||
  const elem = $(options.element);
 | 
			
		||||
  return elem.select2({
 | 
			
		||||
    theme: elem[0].multiple ? "classic" : "default",
 | 
			
		||||
    minimumInputLength: 2,
 | 
			
		||||
    templateResult: select_item_builder(options.picture_getter),
 | 
			
		||||
    ...options.data_source,
 | 
			
		||||
    templateResult: selectItemBuilder(options.pictureGetter),
 | 
			
		||||
    ...options.dataSource,
 | 
			
		||||
    ...(options.overrides || {}),
 | 
			
		||||
  });
 | 
			
		||||
}
 | 
			
		||||
@@ -179,7 +180,8 @@ function sithSelect2(options) {
 | 
			
		||||
 * @param {Select2Object[]} source The array containing the data
 | 
			
		||||
 * @param {RemoteSourceOptions} options
 | 
			
		||||
 */
 | 
			
		||||
function local_data_source(source, options) {
 | 
			
		||||
// biome-ignore lint/correctness/noUnusedVariables: used in other scripts
 | 
			
		||||
function localDataSource(source, options) {
 | 
			
		||||
  if (options.excluded) {
 | 
			
		||||
    const ids = options.excluded();
 | 
			
		||||
    return { data: source.filter((i) => !ids.includes(i.id)) };
 | 
			
		||||
@@ -191,7 +193,7 @@ function local_data_source(source, options) {
 | 
			
		||||
 * @typedef RemoteSourceOptions
 | 
			
		||||
 * @property {undefined | function(): number[]} excluded
 | 
			
		||||
 *     A callback to the ids to exclude from the search
 | 
			
		||||
 * @property {undefined | function(): Select2Object} result_converter
 | 
			
		||||
 * @property {undefined | function(): Select2Object} resultConverter
 | 
			
		||||
 *     A converter for a value coming from the remote api
 | 
			
		||||
 * @property {undefined | Object} overrides
 | 
			
		||||
 *     Any other select2 parameter to apply on the config
 | 
			
		||||
@@ -202,7 +204,9 @@ function local_data_source(source, options) {
 | 
			
		||||
 * @param {string} source The url of the endpoint
 | 
			
		||||
 * @param {RemoteSourceOptions} options
 | 
			
		||||
 */
 | 
			
		||||
function remote_data_source(source, options) {
 | 
			
		||||
 | 
			
		||||
// biome-ignore lint/correctness/noUnusedVariables: used in other scripts
 | 
			
		||||
function remoteDataSource(source, options) {
 | 
			
		||||
  jQuery.ajaxSettings.traditional = true;
 | 
			
		||||
  const params = {
 | 
			
		||||
    url: source,
 | 
			
		||||
@@ -219,9 +223,9 @@ function remote_data_source(source, options) {
 | 
			
		||||
      };
 | 
			
		||||
    },
 | 
			
		||||
  };
 | 
			
		||||
  if (options.result_converter) {
 | 
			
		||||
  if (options.resultConverter) {
 | 
			
		||||
    params.processResults = (data) => ({
 | 
			
		||||
      results: data.results.map(options.result_converter),
 | 
			
		||||
      results: data.results.map(options.resultConverter),
 | 
			
		||||
    });
 | 
			
		||||
  }
 | 
			
		||||
  if (options.overrides) {
 | 
			
		||||
@@ -230,7 +234,8 @@ function remote_data_source(source, options) {
 | 
			
		||||
  return { ajax: params };
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function item_formatter(user) {
 | 
			
		||||
// biome-ignore lint/correctness/noUnusedVariables: used in other scripts
 | 
			
		||||
function itemFormatter(user) {
 | 
			
		||||
  if (user.loading) {
 | 
			
		||||
    return user.text;
 | 
			
		||||
  }
 | 
			
		||||
@@ -238,22 +243,22 @@ function item_formatter(user) {
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Build a function to display the results
 | 
			
		||||
 * @param {null | function(Object):string} picture_getter
 | 
			
		||||
 * @param {null | function(Object):string} pictureGetter
 | 
			
		||||
 * @return {function(string): jQuery|HTMLElement}
 | 
			
		||||
 */
 | 
			
		||||
function select_item_builder(picture_getter) {
 | 
			
		||||
function selectItemBuilder(pictureGetter) {
 | 
			
		||||
  return (item) => {
 | 
			
		||||
    const picture = typeof picture_getter === "function" ? picture_getter(item) : null;
 | 
			
		||||
    const img_html = picture
 | 
			
		||||
    const picture = typeof pictureGetter === "function" ? pictureGetter(item) : null;
 | 
			
		||||
    const imgHtml = picture
 | 
			
		||||
      ? `<img 
 | 
			
		||||
          src="${picture_getter(item)}" 
 | 
			
		||||
          src="${pictureGetter(item)}" 
 | 
			
		||||
          alt="${item.text}" 
 | 
			
		||||
          onerror="this.src = '/static/core/img/unknown.jpg'" 
 | 
			
		||||
        />`
 | 
			
		||||
      : "";
 | 
			
		||||
 | 
			
		||||
    return $(`<div class="select-item">
 | 
			
		||||
        ${img_html}
 | 
			
		||||
        ${imgHtml}
 | 
			
		||||
         <span class="select-item-text">${item.text}</span>
 | 
			
		||||
         </div>`);
 | 
			
		||||
  };
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user