The "library" version of upload blocker. Import this with @require and use the APIs to standardize blocking uploads in GGn.
Tính đến
Script này sẽ không được không được cài đặt trực tiếp. Nó là một thư viện cho các script khác để bao gồm các chỉ thị meta
// @require https://update.greatest.deepsurf.us/scripts/533781/1576639/GGn%20Upload%20Blocker%20Manager.js
// ==UserScript==
// @name GGn Upload Blocker Manager
// @namespace https://greatest.deepsurf.us/users/1395131
// @version 1.0
// @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';
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 = '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);