// ==UserScript==
// @name javdb auto open
// @namespace javdb enhancement
// @author jimmly
// @version 0.3.3
// @description 增加页面顶部底部按钮和一键下种按钮
// @create 2023-9-21
// @include *javdb*
// @grant GM_getValue
// @grant GM_setValue
// @grant GM.getValue
// @grant GM.setValue
// @require https://openuserjs.org/src/libs/sizzle/GM_config.min.js
// @license MIT
// @run-at document-idle
// ==/UserScript==
/**
* @typedef { import('jquery') } $
* @typedef { import('jQuery') } jQuery
*/
(async withJQuery => {
let conf = new GM_config({
id: 'GM_config_javdb',
title: 'Configurable Options Script',
fields: {
'asdf': {
'label': 'Search keys',
'type': 'textarea',
'default': '萝莉;奴隶;奴隸;调教;調教;拘束;軟體;软体;痙;攣;拘;束;固定;sm;白虎,捆绑,捆綁;束縛;束缚,母狗;'
},
},
})
var addStyle = function (css) {
var s = document.createElement('style');
s.appendChild(document.createTextNode(css));
document.getElementsByTagName('head')[0].appendChild(s);
}
addStyle(`
a:link{color:green;}
a:hover{color:red;}
a:active{color:yellow;}
a:visited{color:orange;}
.btn1 {
opacity:0.3;-moz-transition-duration:0.2s;-webkit-transition-duration:0.2s;
padding:1px;background:white;font-size: 10; text-align: center; vertical-align: middle;
border-radius:5px 5px 5px 5px;cursor:pointer; left:0px;z-index:9999;
background:white;
width:40px;height:40px;line-height:40px;
}
`);
// 创建超链接,不会被拦截
function createSuperLabel(url, id) {
if (!id)
id = url;
// 防止反复添加
if (!document.getElementById(id) && !localStorage[id]) {
let tmpLink = document.createElement("a");
localStorage[id] = true
tmpLink.setAttribute("href", url);
tmpLink.setAttribute("target", "_blank");
tmpLink.setAttribute("id", id);
document.body.appendChild(tmpLink);
tmpLink.click();
return true
}
return false;
}
withJQuery(/** @param { $ } $ */function ($, win) {
//$('item a').removeAttr('style')
new Promise((resolve, reject) => resolve(conf.get('asdf')))
.then(conf => {
console.log('config value of keys', conf)
return (conf.toString()).split(/;|;|,|,/i)
})
.then(keys => {
if (window.location.href.indexOf('tags') > -1)
$('.item a').each((i, element) => {
let el = $(element)
$.each(keys, (inex, key) => {
if (key && el.attr('title').toLowerCase().indexOf(key.toLowerCase()) > -1) {
console.log(key, createSuperLabel(el.prop('href')), el.prop('href'))
return false;
}
})
});
})
let container = $(document.createElement('div')).css({
'cssText': `position:fixed;top:15%;width:40px;height:240px;left:0px;z-index:9999`
});
let topref = 80;
//最顶按钮
let toTopBtn = $(document.createElement('div')).text('Top');
toTopBtn.click(function () {
window.scrollTo(0, 0);
});
container.append(toTopBtn).append($('<br />'));
if (window.location.href.indexOf("thread") == -1) {
//下载按钮
let downloadBtn = $(document.createElement('div')).text('Lod');
downloadBtn.click(function () {
let url = $(".t_attachlist > dt > a:eq(1)").prop('href');
let filename = $("div.mainbox.viewthread>h1").text().trim() + '.torrent';
console.log(filename)
$.ajax({
url,
success: function (result, status, xhr) {
let alink = document.createElement('a');
alink.download = filename;
alink.href = $(result).find("#downloadBtn").prop('href');
document.body.appendChild(alink);
alink.click();
},
error: function (xhr, status, error) {
console.log(status, error)
}
});
});
container.append(downloadBtn).append($('<br />'));
}
else {
$('tr').hover(function () {
// $(this).find('*').each(function (item) {
// $(this).data('oldcolor', $(this).css("background-color"))
// })
$(this).find('*').css("background-color", "#9AAAC7")
},
function () {
$(this).find('*').css("background-color", '');
});
}
//最低按钮
let toBottomBtn = $(document.createElement('div')).text('Bot');;
toBottomBtn.click(function () {
window.scrollTo(0, document.body.scrollHeight);
});
container.append(toBottomBtn).append($('<br />'));
let fastBtn = $(document.createElement('div')).text('Set'),
middleBtn = $(document.createElement('div')).text('Sta'),
slowBtn = $(document.createElement('div')).text('Low');
container.append(fastBtn).append($('<br />'))
.append(middleBtn).append($('<br />'))
.append(slowBtn).append($('<br />'))
container.find('div')
.addClass('btn1')
.hover(
function (item) {
$(this).css('opacity', 1).css('border', '1px solid black')
}, function (item) {
$(this).css('opacity', 0.3).css('border', 'none')
})
win.__wait = 900
win.__step = 100;
fastBtn.click(function () {
conf.open();
// if (win.__wait > 5) {
// win.__wait = win.__wait / 1.5
// } else {
// win.__wait = 5
// }
});
slowBtn.click(function () { win.__wait *= 1.5 });
win.___func = function () {
win.______h = $(document).scrollTop() + win.__step;
if (win.______h >= $(document).height() - $(window).height()) {
clearTimeout(win.___t)
// win.___t = setTimeout(win.___func, 30000)
} else {
$(document).scrollTop(win.______h);
win.___t = setTimeout(win.___func, win.__wait)
}
};
$(document).keydown(function (event) {
let e = event || window.event;
let k = e.keyCode || e.which;
if (k === 16) {
// isCtrl = true;
middleBtn.click()
} else if (k === 38) { //up
event.stopPropagation()
slowBtn.click()
} else if (k === 40) {//down
event.stopPropagation()
//fastBtn.click()
}
})
middleBtn.click(function () {
if (!!!win.___t) {
win.___func();
} else {
clearTimeout(win.___t)
win.___t = 0
}
})
container.appendTo('body');
$(window).blur(function () {
clearTimeout(win.___t)
win.___t = 0
}).focus(function () {
win.___func();
})
})
})(function (callback, safe) {
if (typeof jQuery == "undefined") {
let script = document.createElement("script")
script.type = "text/javascript"
script.src = "https://code.jquery.com/jquery-3.6.1.min.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)
}
});