增加页面顶部底部按钮和一键下种按钮
Version vom
Dieses Skript sollte nicht direkt installiert werden. Es handelt sich hier um eine Bibliothek für andere Skripte, welche über folgenden Befehl in den Metadaten eines Skriptes eingebunden wird // @require https://update.sleazyfork.org/scripts/476583/1299760/commonlib.js
// ==UserScript==
// @name commonlib
// @namespace websiteEnhancement
// @author jimmly
// @version 2023.9.29
// @description 增加页面顶部底部按钮和一键下种按钮
// @create 2023-9-21
// @include *
// @grant GM_getValue
// @grant GM_setValue
// @grant GM.getValue
// @grant GM.setValue
// @license MIT
// @run-at document-idle
// ==/UserScript==
async function withJQuery(callback, safe,unsafeWindow) {
if (typeof jQuery == "undefined") {
let script = document.createElement("script")
script.type = "text/javascript"
script.src = "https://code.jquery.com/jquery-3.7.1.js"
if (safe) {
let cb = document.createElement("script")
cb.type = "text/javascript"
cb.textContent = "jQuery.noConflict();(" + callback.toString() + ")(jQuery, window);"
script.addEventListener("load", function () {
document.head.appendChild(cb)
})
} else {
let dollar = undefined
if (typeof $ != "undefined") dollar = $
script.addEventListener("load", function () {
jQuery.noConflict()
$ = dollar
callback(jQuery, window)
})
}
document.head.appendChild(script)
} else {
setTimeout(function () {
//Firefox supports
callback(jQuery, typeof unsafeWindow === "undefined" ? window : unsafeWindow)
}, 30)
}
}
//addStyle
async function addStyle(css) {
var s = document.createElement('style');
s.appendChild(document.createTextNode(css));
document.getElementsByTagName('head')[0].appendChild(s);
}
//createSuperLabel 创建超链接,不会被拦截
async function createSuperLabel(url, id, download) {
if (!id)
id = url;
// 防止反复添加
if (!document.getElementById(id) && !localStorage[id]) {
let tmpLink = document.createElement("a");
localStorage[id] = true
if (download)
tmpLink.download = download;
tmpLink.setAttribute("href", url);
tmpLink.setAttribute("target", "_blank");
tmpLink.setAttribute("id", id);
document.body.appendChild(tmpLink);
tmpLink.click();
return true
}
return false;
}
async function unique(arr) {
let obj = {};
return arr.filter(function (item, index, arr) {
return obj.hasOwnProperty(typeof item + item) ? false : (obj[typeof item + item] = true)
})
}
///ignore \r \t \n space and caseinsitive
function a_Contains_b(a, b) {
a = a.replace(/(\r\n|\n|\r|\t| )/gm, "").toLowerCase();
b = b.replace(/(\r\n|\n|\r|\t| )/gm, "").toLowerCase();
if (!!a && !!b && a.indexOf(b) > -1) {
return true;
}
return false;
}
async function autoFind(funcIsRun, cmgId, selector, funcText, $, elBindOpen,unsafeWindow) {
new Promise(resovle => resovle(new GM_config({
id: `GM_config_${cmgId}`,
title: 'javdb Configurable Options Script',
fields: {
'asdf': {
'label': 'Search keys',
'type': 'textarea',
'rows': 30,
'cols': 50,
'default': '调J; 阴环;18岁;19岁;20岁;gvh;sm;tki;一字马;一线天;乳环;固定;圈养;奴隶;奴隸;实录;性奴;拘;拘束;拷問;捆綁;捆绑;攣;无毛;束;束縛;束缚;母G;母狗;無毛;痙;白虎;緊縛;萝莉;調教;调教;軟派;軟體;软体;陵辱;19歳;潮吹;痉挛;弓背;高潮;'
},
'isRunInNewTabs': {
'options': ['Auto Run In New Tab', 'Not Run In New Tab'],
'label': 'Auto Run In New Tab?',
'type': 'radio',
'default': 'Auto Run In New Tab'
},
},
'events':
{
'open': function () {
let vals = unique(this.get('asdf').split(/;|;|,|,/gi)).join(';')
this.set('asdf', vals)
},
'save': function () {
let vals = unique(this.get('asdf').split(/;|;|,|,/gi)).join(';')
this.set('asdf', vals)
}
}
})))
.then(gmc => {
setTimeout(() => $(elBindOpen).click(() => gmc.open()), 500);
return gmc;
})
.then(gmc => {
(unsafeWindow||window).gmc = gmc;
if (!funcIsRun(gmc)) throw Error(`no run due to contion failed`)
return gmc
})
.then(gmc => {
return { gmc, conf: gmc.get('asdf') }
}
)
.then(({ gmc, conf }) => {
console.log('config value of keys', conf)
return ({ gmc, 'keys': conf.split(/;|;|,|,/i) })
})
.then(({ gmc, keys }) => {
$(selector).each((i, element) => {
let el = $(element)
$.each(keys, (inex, key) => {
if (a_Contains_b(funcText(el), key)) {
createSuperLabel(el.prop('href'), el.prop('href')).then(res => console.log(key, res, el.prop('href')))
return false;
}
})
});
return { gmc, keys }
})
.catch(e => console.log('error', e))
};