- // ==UserScript==
- // @name FextraLife Tweaks
- // @description Implements various tweaks to FextraLife wiki(s)
- // @version 1.2
- // @author Magic <magicoflolis@tuta.io>
- // @license MIT
- // @icon https://fextralife.com/wp-content/uploads/2015/07/flswords-152.png
- // @namespace https://github.com/magicoflolis/userscriptrepo/tree/master/FextraLifeTweaks
- // @homepageURL https://github.com/magicoflolis/userscriptrepo/tree/master/FextraLifeTweaks
- // @supportURL https://github.com/magicoflolis/userscriptrepo/issues/new
- // @match https://*.wiki.fextralife.com/*
- // @exclude https://www.wiki.fextralife.com/*
- // @grant none
- // @run-at document-start
- // ==/UserScript==
-
- // Defaults are listed at the end of the user script.
- let Remove_Clutter = true, // Removes some clutter + wider page
- DisableComments = false, // Disables comments
- AutoScroll = true, // Automatically scrolls on page load
- Scroll_Amount = 202, // Scroll amount for "Top" button.
- debug = false;
-
- const fltCSS = `[id^=div-gpt-ad],.ad-banner,#sidebar-wrapper,.wrap>#content-add-a,.section-heading,.collapse-com>#pmalerts,br{content:"" !important;display:none !important;visibility:hidden !important;margin:0px 0px 0px 0px !important;padding:0px 0px 0px 0px !important;width:0px !important;max-width:0px !important;min-width:0px !important;height:0px !important;max-height:0px !important;min-height:0px !important}#cmt-btn,#top-btn{transition:top 100ms ease-in-out 100ms;cursor:pointer;top:100%;font-weight:bold;font-family:inherit;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;height:auto;border-radius:16px;margin:0 3px;line-height:25px;padding:0 20px;text-transform:uppercase;text-align:center;position:fixed;z-index:10000 !important}#cmt-btn{left:1%}#top-btn{right:1%}.collapse-com{cursor:default !important}
- `; // Stylesheet
-
- // Userscript Code
- "use strict";
- const err = (...error)=>{
- console.error("[%cFLT%c] %cERROR", "color: rgb(180, 178, 176);", "", "color: rgb(249, 24, 128);", ...error);
- }, info = (...message)=>{
- if (!debug) {
- return;
- };
- console.info("[%cFLT%c] %cINF", "color: rgb(180, 178, 176);", "", "color: rgb(0, 186, 124);", ...message);
- }, log = (...message)=>{
- if (!debug) {
- return;
- };
- console.log("[%cFLT%c] %cDBG", "color: rgb(180, 178, 176);", "", "color: rgb(255, 212, 0);", ...message);
- }, ael = (elm = document, event, callback)=>{
- return elm.addEventListener(event, callback);
- }, create = (element, type, cname, iname, value)=>{
- let el = document.createElement(element);
- type !== "none" ? el.type = type : false;
- cname ? el.className = cname : false;
- iname ? el.id = iname : false;
- value ? el.value = value : false;
- return el;
- }, loadCSS = (css, name = "common")=>{
- info("injecting CSS");
- document.head.insertAdjacentHTML('beforeend', `<style id="flt-${name}">${css}</style>`);
- },
- query = async (element)=>{
- while(document.querySelector(element) === null){
- await new Promise((resolve)=>requestAnimationFrame(resolve)
- );
- }
- return document.querySelector(element);
- }, qs = (element)=>{
- return document.querySelector(element);
- }, qsA = (element)=>{
- return document.querySelectorAll(element);
- }, cmt_btn = create("input", "button", "btn btn-default btn-xs", "cmt-btn", "Comments"), top_btn = create("input", "button", "btn btn-default btn-xs", "top-btn", "Top"), main = ()=>{
- try {
- info("Running script");
- loadCSS(fltCSS);
- query("#wrapper").then((wrapper)=>{
- if (Remove_Clutter) {
- info("Removing clutter");
- wrapper.setAttribute("style", "padding-left: 0px !important");
- qsA("ul").forEach((item, i)=>{
- qsA("ul")[i].setAttribute("style", "max-width: 100% !important");
- });
- };
- query("button#btnPostCommentu").then((dw)=>{
- if (DisableComments) {
- info("Hiding comments");
- qs(".discussion-wrapper").setAttribute("style", 'display: none !important');
- } else {
- ael(cmt_btn, "click", ()=>{
- return dw.scrollIntoView();
- });
- };
- });
- ael(top_btn, "click", ()=>{
- return wrapper.scrollIntoView();
- });
- info("injecting buttons...");
- wrapper.append(top_btn, cmt_btn);
- AutoScroll ? qs("#page-content-wrapper").scrollIntoView() : false;
- ael(document, "scroll", ()=>{
- return document.documentElement.scrollTop > Scroll_Amount ? (top_btn.setAttribute("style", 'top: 90% !important'), !DisableComments ? cmt_btn.setAttribute("style", 'top: 90% !important') : false) : (top_btn.setAttribute("style", 'top: 100% !important'), !DisableComments ? cmt_btn.setAttribute("style", 'top: 100% !important') : false);
- });
- info("Done!");
- });
- } catch (e) {
- error(e);
- };
- };
- ael(window, "load", main);
-
-
- /**
- * Defaults:
- *
- * Remove_Clutter = true // Removes some clutter + wider page
- * DisableComments = false,
- * AutoScroll = true,
- * Scroll_Amount = 202 // Set to 0 disables auto scroll AND "Top" button
- */