Furaffinity-Prototype-Extensions

Library to hold common prototype extensions for your Furaffinity Script

이 스크립트는 직접 설치하는 용도가 아닙니다. 다른 스크립트에서 메타 지시문 // @require https://update.greasyfork.org/scripts/525666/1760940/Furaffinity-Prototype-Extensions.js을(를) 사용하여 포함하는 라이브러리입니다.

이 스크립트를 설치하려면 Tampermonkey, Greasemonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey와 같은 확장 프로그램을 설치해야 합니다.

이 스크립트를 설치하려면 Tampermonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey 또는 Userscripts와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 유저 스크립트 관리자 확장 프로그램이 필요합니다.

(이미 유저 스크립트 관리자가 설치되어 있습니다. 설치를 진행합니다!)

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

(이미 유저 스타일 관리자가 설치되어 있습니다. 설치를 진행합니다!)

// ==UserScript==
// @name        Furaffinity-Prototype-Extensions
// @namespace   Violentmonkey Scripts
// @grant       GM_info
// @version     1.0.3
// @author      Midori Dragon
// @description Library to hold common prototype extensions for your Furaffinity Script
// @icon        https://www.furaffinity.net/themes/beta/img/banners/fa_logo.png
// @license     MIT
// @homepageURL https://greasyfork.org/scripts/525666-furaffinity-prototype-extensions
// @supportURL  https://greasyfork.org/scripts/525666-furaffinity-prototype-extensions/feedback
// ==/UserScript==
// jshint esversion: 11
(function () {
    'use strict';

    Node.prototype.insertBeforeThis = function (newNode) {
        this.parentNode?.insertBefore(newNode, this);
    };
    Node.prototype.insertAfterThis = function (newNode) {
        this.parentNode?.insertBefore(newNode, this.nextSibling);
    };
    Node.prototype.getIndexOfThis = function () {
        if (this.parentNode == null) {
            return -1;
        }
        const childrenArray = Array.from(this.parentNode.children);
        return childrenArray.indexOf(this);
    };
    Node.prototype.readdToDom = function () {
        const clone = this.cloneNode(false);
        this.parentNode?.replaceChild(clone, this);
        return clone;
    };

    String.prototype.trimEnd = function (toTrim) {
        if (toTrim == null) {
            return '';
        }
        if (toTrim === '' || this === '') {
            return this.toString();
        }
        let result = this.toString();
        while (result.endsWith(toTrim)) {
            result = result.slice(0, -toTrim.length);
        }
        return result;
    };
    String.prototype.trimStart = function (toTrim) {
        if (toTrim == null) {
            return '';
        }
        if (toTrim === '' || this === '') {
            return this.toString();
        }
        let result = this.toString();
        while (result.startsWith(toTrim)) {
            result = result.slice(toTrim.length);
        }
        return result;
    };

})();