Séparation sujets

Separe le RP du HRP dans la section 'Derniers Sujets'.

// ==UserScript==
// @name        Séparation sujets
// @namespace   Dreadcast
// @match       https://www.dreadcast.net/Forum
// @match       https://www.dreadcast.net/Forum#
// @match       https://www.dreadcast.net/FAQ
// @match       https://www.dreadcast.net/FAQ#
// @match       https://www.dreadcast.net/Forum/*
// @match       https://www.dreadcast.net/FAQ/*
// @version     2.2.5
// @author      Aversiste, MockingJay, Odul, Pelagia
// @description Separe le RP du HRP dans la section 'Derniers Sujets'.
// @license     http://creativecommons.org/licenses/by-nc-nd/4.0/
// @require     https://update.greasyfork.org/scripts/507382/Dreadcast%20Development%20Kit.user.js
// @grant       GM_setValue
// @grant       GM_getValue
// ==/UserScript==

(() => {
  const DATA_TAG = 'ss_data';
  let data;

  const initPersistence = () => {
    // Init persistent memory if needed.
    DC.LocalMemory.init(DATA_TAG, {
      hrp: 'on',
      rp: 'on',
      ecoreb: 'on',
      polreb: 'on',
      ecoimp: 'on',
      polimp: 'on',
      annonces: 'on',
    });

    // Load the current settings.
    data = DC.LocalMemory.get(DATA_TAG);
  };

  const isOnOrOff = (node, id) => {
    if (data[id] === 'on') {
      $('span.symbol:first', node).css('display', 'inline');
      $('span.symbol:last', node).css('display', 'none');
      $('ul', node).css('display', 'block');
    } else {
      $('span.symbol:first', node).css('display', 'none');
      $('span.symbol:last', node).css('display', 'inline');
      $('ul', node).css('display', 'none');
    }
  };

  const addClickEvent = (node, id) => {
    $('h3', node).bind('click', () => {
      data[id] =
        $('.symbol:first', node).css('display') === 'none' ? 'off' : 'on';
      DC.LocalMemory.set(DATA_TAG, data);
    });
  };

  const sortSection = (node, filter) => {
    $('li', node).each((i, el) => {
      var category = parseInt(
        $('a', el).attr('class').split(' ')[0].substring(2),
        10,
      ); //En déduit la catégorie forum
      if (!filter.includes(category)) {
        el.remove();
      }
    });
  };

  const createSectionNode = (orig, id, name, filter) => {
    var $node = orig.clone(true);
    $node.attr('id', id);
    sortSection($node, filter);
    $('h3.link span:last-child', $node).text(
      name + ` (${$('li', $node).length})`,
    );
    isOnOrOff($node, id);
    $('#menu_droite').prepend($node);
    addClickEvent($node, id);
  };

  //****************
  //***DEBUT MAIN***
  //****************
  $(document).ready(() => {
    initPersistence();

    var origList = $('#list_derniers_sujets'); // Récupération du div des derniers sujets

    const sections = [
      {
        id: 'hrp',
        name: 'Derniers Sujets HRP',
        categories: [3, 4, 7, 8, 9, 10],
      },
      { id: 'rp', name: 'Derniers Sujets RP', categories: [12, 13, 14, 15] },
      { id: 'ecoreb', name: 'Matrice Rebelle', categories: [20] },
      { id: 'polreb', name: 'Politique Rebelle', categories: [19] },
      { id: 'ecoimp', name: 'Matrice Impériale', categories: [18] },
      { id: 'polimp', name: 'Politique Impériale', categories: [17] },
      { id: 'annonces', name: 'Annonces Officielles', categories: [2, 5] },
    ];

    //Clonage et tri des nouvelles catégories. Dans l'ordre inversé, car utilisation de prepend.
    sections.forEach(($section) => {
      createSectionNode(
        origList,
        $section.id,
        $section.name,
        $section.categories,
      );
    });

    origList.remove(); //Enlever la liste originale une fois le tri effectué.

    //Ne pas afficher une catégorie si elle est vide
    $('#menu_droite > div > ul').each(function () {
      if ($(this).text().trim() === '') {
        $(this).parent().css('display', 'none');
      }
    });
  });
})();