🏠

Greasy Fork is available in English.

Special User Titles API

An API for adding custom titles to certain users.

此脚本不应直接安装,它是一个供其他脚本使用的外部库。如果您需要使用该库,请在脚本元属性加入:// @require https://update.greasyfork.org/scripts/5856/110590/Special%20User%20Titles%20API.js

提问、发表评价,或者 举报这个脚本
// ==UserScript==
// @name        Special User Titles API
// @author      Sollace
// @namespace   fimfiction-sollace
// @version     1.2.4
// @include     http://www.fimfiction.net/*
// @include     https://www.fimfiction.net/*
// @grant       none
// ==/UserScript==
function RunScript(func, mustCall, params) {
if (!document.body) {
var _ready = document.onready;
document.onready = function() {
RunScript(func, mustCall, params);
if (typeof _ready === 'function') {
_ready.apply(this, arguments);
}
}
} else {
var scr = document.createElement('SCRIPT');
if (mustCall) {
if (params) {
var pars = [];
for (var i = 2; i < arguments.length; i++) {
pars.push(arguments[i]);
}
scr.innerHTML = '(' + func.toString() + ').apply(this, ' + JSON.stringify(pars) + ');';
} else {
scr.innerHTML = '(' + func.toString() + ')();';
}
} else {
scr.innerHTML = func.toString();
}
document.body.appendChild(scr);
scr.parentNode.removeChild(scr);
}
};
RunScript.toString = (function() {
var result = function toString() {
return 'function ' + this.name + '() {\n  [native code]\n}';
}
result.toString = result;
return result;
})();
RunScript.build = function(functionText) {
return {
run: function(mustCall) {
if (!document.body) {
var me = this;
var _ready = document.onready;
document.onready = function() {
me.run(mustCall);
if (typeof _ready === 'function') {
_ready.apply(this, arguments);
}
}
} else {
var scr = document.createElement('SCRIPT');
if (mustCall) {
scr.innerHTML = '(' + functionText + ')();';
} else {
scr.innerHTML = functionText;
}
document.body.appendChild(scr);
scr.parentNode.removeChild(scr);
}
}
}
};
(function (win) {
var ver = 1.21;
var startup =
(typeof (SpecialTitles) === 'undefined') && (typeof (win.SpecialTitles) === 'undefined') &&
(win == window || (typeof (window.SpecialTitles) === 'undefined'));
var scriptBody = function(ver, startup) {
function STs(load) {
var _registeredTitles = load != null ? load.registeredTitles() : {};
loadIn({
"FimFiction Modder": [138711, 10539, 27165],
"Emote Contributor": [129122]
});
function loadIn(b) {
for (var i in b) {
if (_registeredTitles[i] == null) {
_registeredTitles[i] = b[i];
} else {
for (var j = 0; j < b[i].length; j++) {
if ((function () {
for (var k = 0; k < _registeredTitles[i].length; k++) {
if (b[i][j] == _registeredTitles[i][k]) return true;
}
return false;
})()) {
_registeredTitles[i].push(b[i][j]);
}
}
}
}
}
this.version = function () {
return ver;
};
this.registeredTitles = function (v) {
if (typeof v === 'string') {
v = JSON.parse(v);
}
if (v != null) {
_registeredTitles = v;
}
return _registeredTitles;
}
}
STs.prototype.setUpSpecialTitles = function () {
for (var i in this.registeredTitles()) {
this.setSpecialTitle(this.registeredTitles()[i], i);
}
};
STs.prototype.setSpecialTitle = function (userIds, title) {
for (var i = 0; i < userIds.length; i++) {
$(this.avatarSelector(userIds[i])).each(function (item) {
var prev = $(this.parentNode.previousSibling);
if (prev.length && !prev.hasClass('author-badge')) {
$(this.parentNode).before("<div class=\"author-badge\" >" + title + "</div>");
}
});
}
};
STs.prototype.avatarSelector = function(userId) {
return ".author > .avatar > img[src*='" + userId + "'], .author > .avatar > img[data-src*='" + userId + "']";
}
STs.prototype.registerUserTitle = function (user, title) {
if (typeof user != 'number') return;
if (this.registeredTitles()[title] == null) {
this.registeredTitles()[title] = [];
}
for (var i = 0; i < this.registeredTitles()[title].length; i++) {
if (this.registeredTitles()[title][i] == user) return;
}
this.registeredTitles()[title].push(user);
};
if (typeof (window.SpecialTitles) !== 'undefined') {
if (window.SpecialTitles.version() < ver) {
window.SpecialTitles = new STs(window.SpecialTitles);
}
} else {
window.SpecialTitles = new STs();
}
if (startup) {
window.SpecialTitles.setUpSpecialTitles();
setTimeout(function () {
try {
window.SpecialTitles.setUpSpecialTitles();
} catch (e) {
alert('Error in ticking win.SpecialTitles.setUpSpecialTitles()\n' + e);
}
}, 500);
}
}
if (win != window) {
RunScript(scriptBody, true, ver, startup);
window.SpecialTitles = {
version: function () {
return win.SpecialTitles.version();
},
registeredTitles: function (v) {
return win.SpecialTitles.registeredTitles(JSON.stringify(v));
},
setSpecialTitle: function (userIds, title) {
RunScript.build('function() {SpecialTitles.setSpecialTitle(' + JSON.stringify(userIds) + ',"' + title + '");}').run(true);
},
setUpSpecialTitles: function () {
RunScript.build('function() {SpecialTitles.setUpSpecialTitles();}').run(true);
},
registerUserTitle: function (user, title) {
RunScript.build('function(user, title) {SpecialTitles.registerUserTitle("' + user + '","' + title + '");}').run(true);
}
};
} else {
scriptBody();
}
})(typeof (unsafeWindow) !== 'undefined' && unsafeWindow != window ? unsafeWindow : window);