Advertisement
nnuu

Better flags on /mlp/

May 8th, 2021 (edited)
44
1
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // ==UserScript==
  2. // @name        Better flags on /mlp/
  3. // @namespace   https://boards.4channel.org/mlp/
  4. // @description Improved flag selector for /mlp/ (requires 4chan X)
  5. // @version     1.1
  6. // @author      Anonymous
  7. // @icon        https://s.4cdn.org/image/flags/mlp/anf.gif
  8. // @downloadURL https://gist.github.com/nnuudev/6c4376687572f8627e1e10c5a5323497/raw/Better%2520flags.user.js
  9. // @match       https://boards.4channel.org/mlp/*
  10. // @run-at      document-start
  11. // @grant       GM_addStyle
  12. // ==/UserScript==
  13.  
  14. (function() {
  15.     'use strict';
  16.  
  17.     GM_addStyle(`
  18.         #qr > form > .flagSelector {
  19.             width: calc(75% - 18px);
  20.         }
  21.         #flagSelectorViewer:hover {
  22.             background: none;
  23.         }
  24.         #flagSelectorViewer:hover::before {
  25.             color: #5f89ac;
  26.             font-family: FontAwesome;
  27.             display: inline-block;
  28.             font-size: 13px;
  29.             vertical-align: top;
  30.             margin: 0 0 0 2px;
  31.             content: "\\f057";
  32.         }
  33.         #flagSelectorViewer.bfl-0 {
  34.             background: none;
  35.             pointer-events: none;
  36.         }
  37.         #flagSelectorViewer.bfl-0::before {
  38.             color: #5f89ac;
  39.             font-family: FontAwesome;
  40.             display: inline-block;
  41.             font-size: 13px;
  42.             vertical-align: top;
  43.             margin: 0 0 0 1px;
  44.             content: "\\f024";
  45.         }
  46.     `);
  47.  
  48.     let preferredOrder = ["0","AJ","FL","PI","RD","RAR","TWI","4CC","AN","ANF","APB","AU","BS","BP","BM","BB","CL","CHE","CB","CO","CG","DD","DAY","DER","DT","DIS","FAU","FLE","GI","LI","LT","LY","MA","MAU","MIN","NI","NUR","OCT","PAR","PM","PC","PCE","PLU","QC","RLU","S1L","SCO","SHI","SIL","SP","SPI","STA","STL","SUN","SWB","TS","TX","VS","ZE","HT","IZ","PP","SPT","SS","ZS","TFA","TFO","TFP","TP","TFS","TFT","TFV","ADA","AB","SON","SUS","EQA","EQF","EQP","EQR","ERA","EQS","EQT","EQI"];
  49.     let observedNodeAttribute = "flagselector-observer";
  50.     let flagSelector = null;
  51.  
  52.     function onMutationCallback(mutationRecordArray) {
  53.         flagSelector = document.querySelector("#qr > form > .flagSelector");
  54.         if (flagSelector != null && flagSelector.getAttribute(observedNodeAttribute) == null) {
  55.             flagSelector.setAttribute(observedNodeAttribute, 1);
  56.             let optionNodes = Array.from(flagSelector.children);
  57.             optionNodes.sort((a, b) => preferredOrder.indexOf(a.value) - preferredOrder.indexOf(b.value));
  58.             optionNodes.forEach((option) => flagSelector.appendChild(option));
  59.             flagSelector.firstChild.label = "No flag";
  60.             flagSelector.insertAdjacentHTML("beforebegin", `<span id="flagSelectorViewer" title="Remove flag" style="margin-bottom: -2px;margin-right: 2px;" class="bfl bfl-0"></span>`);
  61.             document.querySelector("#flagSelectorViewer").addEventListener("click", (ev) => { flagSelector.selectedIndex=0; flagSelector.dispatchEvent(new Event('change')); });
  62.             flagSelector.addEventListener('change', onSelectChange);
  63.             setTimeout(onSelectChange, 100);
  64.         }
  65.     }
  66.  
  67.     function onSelectChange() {
  68.         document.querySelector("#flagSelectorViewer").className = "bfl bfl-" + flagSelector.value.toLowerCase();
  69.     }
  70.  
  71.     let mutationObserver = new MutationObserver(onMutationCallback);
  72.     mutationObserver.observe(document.documentElement, {childList: true, subtree: true});
  73.  
  74. })();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement