🏠 Home 

Greasy Fork is available in English.

Furaffinity-Custom-Pages

Library to create Custom pages on Furaffinitiy

สคริปต์นี้ไม่ควรถูกติดตั้งโดยตรง มันเป็นคลังสำหรับสคริปต์อื่น ๆ เพื่อบรรจุด้วยคำสั่งเมทา // @require https://update.greasyfork.org/scripts/476762/1549463/Furaffinity-Custom-Pages.js

// ==UserScript==
// @name        Furaffinity-Custom-Pages
// @namespace   Violentmonkey Scripts
// @grant       none
// @version     1.2.2
// @author      Midori Dragon
// @description Library to create Custom pages on Furaffinitiy
// @icon        https://www.furaffinity.net/themes/beta/img/banners/fa_logo.png
// @license     MIT
// @homepageURL https://greasyfork.org/scripts/476762-furaffinity-custom-settings
// @supportURL  https://greasyfork.org/scripts/476762-furaffinity-custom-settings/feedback
// ==/UserScript==
// jshint esversion: 8
(() => {
"use strict";
var LogLevel;
!function(LogLevel) {
LogLevel[LogLevel.Error = 1] = "Error";
LogLevel[LogLevel.Warning = 2] = "Warning";
LogLevel[LogLevel.Info = 3] = "Info";
}(LogLevel || (LogLevel = {}));
class Logger {
static log(logLevel = LogLevel.Warning, ...args) {
if (null == window.__FF_GLOBAL_LOG_LEVEL__) window.__FF_GLOBAL_LOG_LEVEL__ = LogLevel.Error;
if (!(logLevel > window.__FF_GLOBAL_LOG_LEVEL__)) switch (logLevel) {
case LogLevel.Error:
console.error(...args);
break;
case LogLevel.Warning:
console.warn(...args);
break;
case LogLevel.Info:
console.log(...args);
}
}
static setLogLevel(logLevel) {
window.__FF_GLOBAL_LOG_LEVEL__ = logLevel;
}
static logError(...args) {
Logger.log(LogLevel.Error, ...args);
}
static logWarning(...args) {
Logger.log(LogLevel.Warning, ...args);
}
static logInfo(...args) {
Logger.log(LogLevel.Info, ...args);
}
}
function extractParameter(url, parameterName) {
const parts = url.split("?");
if (parts.length > 1) {
const params = parts[parts.length - 1].split("&");
for (const param of params) {
const [key, value] = param.split("=");
if (key === parameterName) return {
key,
value: decodeURIComponent(value)
};
}
}
}
class CustomData {
constructor(document) {
this.document = document;
}
removeDocumentSiteContent() {
const siteContent = this.document.getElementById("site-content");
if (null != siteContent) siteContent.remove();
return siteContent;
}
}
class CustomPage extends EventTarget {
constructor(pageUrl, parameterName = "") {
super();
Object.setPrototypeOf(this, CustomPage.prototype);
this.pageUrl = pageUrl;
this.parameterName = parameterName;
CustomPage.customPages.push(this);
if ("" !== parameterName) Logger.logInfo(`New CustomPage at '${pageUrl}'='${parameterName}'`); else Logger.logInfo(`New CustomPage at '${pageUrl}'`);
}
get isOpen() {
const url = window.location.toString();
if (!url.includes(this.pageUrl)) return false; else if ("" === this.parameterName) return true;
const parameter = extractParameter(url, this.parameterName), isOpen = (null == parameter ? void 0 : parameter.key) === this.parameterName;
if (isOpen) Logger.logInfo(`CustomPage '${this.pageUrl}'='${this.parameterName}' is open`);
return isOpen;
}
get parameterValue() {
const parameter = extractParameter(window.location.toString(), this.parameterName);
return null == parameter ? void 0 : parameter.value;
}
get onOpen() {
return this._onOpen;
}
set onOpen(handler) {
this._onOpen = handler;
}
static checkAllPages() {
CustomPage.customPages.forEach((page => page.checkPageOpened()));
}
checkPageOpened() {
if (this.isOpen) this.pageOpened(this.parameterValue, document);
}
pageOpened(parameterValue, openedPage) {
const customData = new CustomData(openedPage);
customData.parameterValue = parameterValue;
const event = new CustomEvent("onOpen", {
detail: customData
});
this.dispatchEvent(event);
}
invokeOpen(doc, parameterValue) {
var _a;
const customData = new CustomData(doc);
customData.parameterValue = parameterValue;
null === (_a = this._onOpen) || void 0 === _a || _a.call(this, customData);
this.dispatchEvent(new CustomEvent("open", {
detail: customData
}));
}
}
CustomPage.customPages = [];
Object.defineProperties(window, {
FACustomPage: {
get: () => CustomPage
}
});
})();