您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
The "library" version of upload blocker. Import this with @require and use the APIs to standardize blocking uploads in GGn.
此脚本不应直接安装。它是供其他脚本使用的外部库,要使用该库请加入元指令 // @require https://update.cn-greasyfork.org/scripts/533781/1578387/GGn%20Upload%20Blocker%20Manager.js
- // ==UserScript==
- // @name GGn Upload Blocker Manager
- // @namespace https://greasyfork.org/users/1395131
- // @version 1.1
- // @author SleepingGiant
- // @description The "library" version of upload blocker. Import this with @require and use the APIs to standardize blocking uploads in GGn.
- // @match https://gazellegames.net/*
- // @grant none
- // ==/UserScript==
- // @export UploadBlockerManager
- (function (global) {
- 'use strict';
- const reasonListId = 'ggn-block-reasons';
- class UploadBlockerManager {
- constructor(submitButton) {
- this.submitButton = submitButton;
- this.originalText = submitButton.value;
- this.reasonContainer = this._ensureReasonList();
- }
- _ensureReasonList() {
- let ul = document.getElementById(reasonListId);
- if (!ul) {
- ul = document.createElement('ul');
- ul.id = reasonListId;
- ul.style.marginTop = '0.5em';
- ul.style.color = 'red';
- ul.style.listStyleType = 'none';
- this.submitButton.parentNode.insertBefore(ul, this.submitButton.nextSibling);
- }
- return ul;
- }
- addReason(text) {
- if (!this._hasReason(text)) {
- const li = document.createElement('li');
- li.textContent = text;
- this.reasonContainer.appendChild(li);
- }
- this._updateButtonState();
- }
- removeReason(text) {
- for (const li of Array.from(this.reasonContainer.children)) {
- if (li.textContent === text) {
- li.remove();
- break;
- }
- }
- this._updateButtonState();
- }
- _hasReason(text) {
- return Array.from(this.reasonContainer.children)
- .some(li => li.textContent === text);
- }
- _updateButtonState() {
- const hasBlockers = this.reasonContainer.children.length > 0;
- const override = document.querySelector('#upload-blocker-override')?.checked;
- if (hasBlockers && !override) {
- this.submitButton.disabled = true;
- this.submitButton.style.opacity = '0.5';
- this.submitButton.style.pointerEvents = 'none';
- this.submitButton.value = 'Uploading Blocked';
- } else {
- this.submitButton.disabled = false;
- this.submitButton.style.opacity = '1';
- this.submitButton.style.pointerEvents = 'auto';
- this.submitButton.value = this.originalText;
- }
- }
- attachOverrideCheckbox() {
- if (!document.getElementById('upload-blocker-override')) {
- const cb = document.createElement('input');
- cb.type = 'checkbox';
- cb.id = 'upload-blocker-override';
- cb.style.marginLeft = '0.5em';
- cb.addEventListener('change', () => this._updateButtonState());
- const label = document.createElement('label');
- label.htmlFor = cb.id;
- label.textContent = ' Override blockers';
- label.style.marginLeft = '0.25em';
- this.submitButton.parentNode.insertBefore(cb, this.submitButton.nextSibling);
- this.submitButton.parentNode.insertBefore(label, cb.nextSibling);
- }
- }
- }
- // Export into global so other scripts can import it
- global.UploadBlockerManager = UploadBlockerManager;
- })(window);