Advertisement
perkelton

Subscription side panel

Jun 21st, 2023
161
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
JavaScript 3.79 KB | Source Code | 0 0
  1. function addSubscriptionsSidePanel() {
  2.     GM_addStyle(`
  3.     #middle > .kbin-container {
  4.         grid-template-areas: "magazine-panel main sidebar";
  5.         grid-template-columns: 1fr 3fr 1fr;
  6.     }
  7.  
  8.     #magazine-panel {
  9.         background-color: var(--kbin-section-bg);
  10.         border: var(--kbin-options-border);
  11.         color: var(--kbin-section-text-color);
  12.         margin-bottom: .5rem;
  13.         padding: 2rem 1rem;
  14.         border-radius: 0 0 .5rem .5rem !important;
  15.         height: fit-content;
  16.         font-size: 0.8em;
  17.     }
  18.  
  19.     #magazine-panel h3 {
  20.         border-bottom: var(--kbin-sidebar-header-border);
  21.         color: var(--kbin-sidebar-header-text-color);
  22.         font-size: .8rem;
  23.         margin: 0 0 1rem;
  24.         text-transform: uppercase;
  25.     }
  26.  
  27.     #magazine-panel ul {
  28.         list-style: none;
  29.         line-height: 2.5em;
  30.         padding-inline: 0;
  31.     }
  32.  
  33.     #magazine-panel ul li a img {
  34.         height: 1em;
  35.         margin-right: 0.4em;
  36.     }
  37.  
  38.     #magazine-panel ul li a .padder {
  39.         width: 1.4em;
  40.         display: inline-block;
  41.     }
  42.  
  43.     #subscription-panel-spinner {
  44.         text-align: center;
  45.         font-size: 2em;
  46.     }
  47.     `);
  48.  
  49.     /** Create the subscription panel */
  50.     let kbinContainer = document.querySelector("#middle > .kbin-container");
  51.     let magazinePanel = document.createElement("aside");
  52.     let magazinePanelUl = document.createElement("ul");
  53.     let title = document.createElement("h3");
  54.     magazinePanel.id = "magazine-panel";
  55.     title.innerHTML = "Subscriptions";
  56.     magazinePanel.appendChild(title);
  57.     kbinContainer.appendChild(magazinePanel);
  58.     magazinePanel.appendChild(magazinePanelUl);
  59.  
  60.     /** Add spinner */
  61.     let spinner = document.createElement("div");
  62.     spinner.id = "subscription-panel-spinner";
  63.     spinner.innerHTML = '<i class="fa-solid fa-spinner fa-spin"></i>';
  64.     magazinePanel.appendChild(spinner);
  65.  
  66.     /** Fetch subscription page */
  67.     const xhr = new XMLHttpRequest();
  68.     xhr.open("GET", "/settings/subscriptions/magazines", true);
  69.     xhr.onreadystatechange = function () {
  70.         if (this.readyState === 4) {
  71.             spinner.remove();
  72.             if (this.status === 200) {
  73.                 /** Parse the page */
  74.                 let dom = new DOMParser().parseFromString(this.responseText, 'text/html');
  75.                 let magazines = dom.querySelectorAll(".section.magazines.magazines-columns ul>li");
  76.  
  77.                 /** Find subscriptions */
  78.                 magazines.forEach((el) => {
  79.                     let magA = el.querySelector("a")
  80.                     let mag = {};
  81.                     mag.name = magA.innerHTML;
  82.                     mag.url = magA.href;
  83.                     mag.img = el.querySelector("figure img")?.src;
  84.  
  85.                     /** Create the item dom element */
  86.                     let li = document.createElement("li");
  87.                     let a = document.createElement("a");
  88.                     a.href = mag.url;
  89.                     if (mag.img) {
  90.                         let img = document.createElement("img");
  91.                         img.src = mag.img;
  92.                         a.appendChild(img);
  93.                     } else {
  94.                         /** Add some padding when there is no magazine image */
  95.                         let span = document.createElement("span");
  96.                         span.className = "padder";
  97.                         a.appendChild(span);
  98.                     }
  99.                     a.appendChild(document.createTextNode(mag.name));
  100.                     li.appendChild(a);
  101.                     magazinePanelUl.appendChild(li);
  102.                 });
  103.             } else {
  104.                 magazinePanel.appendChild(document.createTextNode("Failed to load subscriptions"));
  105.             }
  106.         }
  107.     };
  108.     xhr.send();
  109. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement