您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
for all
// ==UserScript== // @name 南加工具 // @namespace http://tampermonkey.net/ // @version 1.1.6 // @description for all // @license GPLv3 // @author unascribed // @match *://bbs.summer-plus.net/* // @match *://www.spring-plus.net/* // @match *://www.level-plus.net/* // @match *://www.snow-plus.net/* // @match *://www.north-plus.net/* // @grant none // ==/UserScript== (function () { 'use strict'; const spIndex = { "main": "48", "prefix": "thread.php?fid=", "suffix": ".html", "deliIndex": 3, } const spPrefix = [ "south", "north", "summer", "snow", "spring", "level", ] const hoverArgs = { "basic": "black", "dest": "rgb(52, 152, 219)", } const fontCss = { "fontWeight": "600", "fontFamily": "SF Pro Text,SF Pro Icons,Helvetica Neue,Helvetica,Arial,sans-serif", } const aCss = { "cursor": "pointer", "textDecoration": "none", "color": hoverArgs.basic, } const regToUse = { "bd": { "code": "提取码", "url": /https:[\w\/\.\?\-_&=]*/g, "urlStr": "pan.baidu.com", "codeStr": /[\w]*/, }, } const webs = { "sp": "-plus", } const sp = { "spMsg": "action-read", "spRead": "thread", "spSell": "tid" } const spFont = { "basic": "rgb(255, 255, 255)", "dest": hoverArgs.dest, } function getSp() { if (!matchAny(spPrefix)) return; spInit() adapt(sp) } // current url const crtUrl = window.location.href for (let w in webs) { let re = webs[w]; if (crtUrl.match(re) != null && crtUrl.match(re)[0] === re) { let methodName = "get" + w.replace(w[0], w[0].toUpperCase()) + "()" try { eval(methodName) } catch (ignore) { } } } function adapt(site) { for (let i in site) { let re = site[i]; if (crtUrl.match(re) != null && crtUrl.match(re)[0] === re) { eval(i + "()") } } } //*********************** south-plus *********************** function spInit() { let barCss = spBarCss() let bar = spBar(); let stuff = create("span", "main") let cp = clearPic(null, "span") let scrollBtn = create("span", "fall") scrollBtn.style.marginRight = "100px" addBefore(bar.bar, [stuff, cp, scrollBtn], bar.son) stuff.onclick = function () { let crt = window.location.href window.location.href = "https://" + crt.split("/")[2] + "/thread.php?fid=48&page=1" scrollDown() } scrollBtn.onclick = function () { scrollDown(); } let arr = [scrollBtn, stuff, cp] wrapEles(arr, barCss, spFont) } function spBar() { let bar = ele("guide") return { "bar": bar, "son": eles("li", "tag", bar)[0] } } function spBarCss() { return { "color": "#ffffff", "float": "left", "marginTop": "7px", "display": "inline-block", "padding": "0px 10px", "fontWeight": "unset", } } //sp message function spMsg() { let btn = eles("current link5 b")[0] setText(btn, "点我跳转") let btnCss = { "fontSize": "13px", } wrapEle(btn, merge(btnCss, fontCss)) btn.onclick = function () { gotoArticle() } } function gotoArticle() { let re = /http.*\w/g; let dest = eles("td1")[3].nextElementSibling; let sender = firstChild(eles("td1")[0].nextElementSibling).textContent if (sender == "SYSTEM" || sender == "3ccc287a") { dest = dest.getElementsByTagName("a")[0].href } else { dest = dest.textContent.match(re)[0] } window.open(dest.replace(dest.split("/")[2], crtUrl.split("/")[2])) } //sp mainpage order function spRead() { let btnCss = { "background": "#D6D6D6 transparent", "color": "#333333", "height": "18px", "padding": ".2em .6em", "display": "inline-block", "line-height": "16px", "fontSize": "12px", "cursor": "pointer", "textDecoration": "none" } let p = eles("fl")[6]; let opts = eles("orderway", "name")[0].options for (let i = 0, len = opts.length; i < len; i++) { let btn = create("span"); setText(btn, opts[i].textContent); setCss(btn, btnCss) p.appendChild(btn) btn.onclick = function () { spOrder(opts, i) scrollDown() } btn.onmousemove = function () { if (this.style.color == "rgb(51, 51, 51)") { this.style.color = "#fff"; this.style.background = "#bbbbbb" } } btn.onmouseleave = function () { if (this.style.color == "rgb(255, 255, 255)") { this.style.background = "" this.style.color = "#333333"; this.style.background = "#D6D6D6 transparent" } } } } function spOrder(opts, i) { opts[i].selected = true; eles("btn")[0].click() } function spSell() { let sellLevel = [0, 1, 2, 3, 5] let candicates = eles("tpc_content") let total = candicates.length let p = candicates[total - 1] let s = eles("span", "tag", p)[1] let btnCss = { "display": "inline-block", "padding": "4px 8px", "position": "relative", "top": "35px", } for (let i = 0, len = sellLevel.length; i < len; i++) { let levelBtn = create("a"); setText(levelBtn, levelBtn.value = sellLevel[i]); wrapEle(levelBtn, merge(btnCss, fontCss, aCss)) p.appendChild(levelBtn) levelBtn.onclick = function () { doSpSell(levelBtn); } } let sellInput = create("input"); sellInput.setAttribute("type", "text"); sellInput.setAttribute("id", "linkInput"); sellInput.setAttribute('placeholder', 'type link'); let siCss = { "position": "relative", "top": "34px", "left": "10px", "border": "1px solid #3498db", } setCss(sellInput, merge(siCss, fontCss)) p.appendChild(sellInput) let diyPrice = create("input"); diyPrice.setAttribute("type", "text"); let diyCss = { "left": "25px", "width":"26px", "height":"15px", } setCss(diyPrice, merge(siCss,diyCss)) p.appendChild(diyPrice) diyPrice.addEventListener("keyup", function(event) { event.preventDefault(); if (event.keyCode === 13) { doSpSell(this) } }) let cdcs = eles("tipad") let cdcsSize = cdcs.length - 1 let tipsParent = cdcs[cdcsSize] let tipsText = "(复制内容到输入框、再点击左侧的数字,即可生成对应数字价格的出售内容)" let diyText = "(自定义价格,在右边的小框中输入价格后按回车)" let tips = create("span", tipsText); let diyTips = create("span", diyText); let tipCss = { "position": "relative", "top": "-32px", "left": "132px", "fontSize": "12px", } let diyTipsCss = { "top": "-60px", "left": "-47px", } setCss(tips, tipCss) setCss(diyTips, merge(tipCss,diyTipsCss)) tipsParent.appendChild(tips) tipsParent.appendChild(diyTips) } function doSpSell(btn) { let price = btn.value; let link = ele("linkInput").value; let text = eles("textarea", "tag")[0].value if (text) { eles("textarea", "tag")[0].value += "\n" } let msg = ""; if (link.match(regToUse.bd.urlStr)) { let mt = link.match(regToUse.bd.url) msg = mt[0] + "\n"; link = getBdCode(link) } msg += "[sell=" + price + "]" + link; msg += "[/sell]" eles("textarea", "tag")[0].value += msg; } //************* tool ******************* function scrollBtn(parent = null) { let btn = create("a", "fall") if (parent) { parent.appendChild(btn) } let btnCss = { "marginLeft": "5px", "display": "inline-block", } wrapEle(btn, btnCss) btn.onclick = function () { scrollDown(900); } return btn; } //scroll function scrollDown(offset = 1399) { document.documentElement.scrollTop = offset; } function clearPic(parent = null, type = "a") { let clear = "clear"; let resume = "resume"; let btn = create(type, clear) if (parent) { parent.appendChild(btn) } let btnCss = { "display": "inline-block", } let flag = true; let oldDisplays = [] wrapEle(btn, btnCss) btn.onclick = function () { let imgs = eles("img", "tag"); let dp = imgs[0].style.display; if (!flag && oldDisplays.length > 0) { for (let i = 0, len = imgs.length; i < len; i++) { imgs[i].style.display = oldDisplays[i] } flag = true; setText(btn, clear) } else { if (oldDisplays.length == 0) { for (let i = 0, len = imgs.length; i < len; i++) { oldDisplays.push(imgs[i].style.display); } } for (let i = 0, len = imgs.length; i < len; i++) { imgs[i].style.display = "none" } flag = false; setText(btn, resume) } } return btn; } function ele(id, parent = null) { return parent ? parent.getElementById(id) : document.getElementById(id) } function eles(name, type = "cls", parent = null) { if (parent) { switch (type) { case "cls": return parent.getElementsByClassName(name); case "name": return parent.getElementsByName(name); case "tag": return parent.getElementsByTagName(name); } } else { switch (type) { case "cls": return document.getElementsByClassName(name); case "name": return document.getElementsByName(name); case "tag": return document.getElementsByTagName(name); } } } //set hover function hover(ele, args = hoverArgs) { let basic = args.basic; let dest = args.dest; ele.onmousemove = function () { if (this.style.color == basic) { this.style.color = dest; } } ele.onmouseleave = function () { if (this.style.color == dest) { this.style.color = basic; } } } function hovers(eles, args = hoverArgs) { eles.forEach(ele => { hover(ele, args) }); } function setText(ele, name = "login") { ele.textContent = name } function newBtn(text = null) { return text ? create("button", text) : create("button", "login"); } function create(type, text = null) { let ele = document.createElement(type) if (text) ele.textContent = text; return ele; } function setCss(ele, styles = {}) { if (!styles) { console.log("setCss不能为空!") } for (let i in styles) { ele.style[i] = styles[i]; } } function setCsses(eles, styles) { eles.forEach(ele => { setCss(ele, styles) }); } function wrapEle(ele, styles = {}, args = hoverArgs) { setCss(ele, merge(fontCss, aCss, styles)) hover(ele, args) } function wrapEles(eles, styles = {}, args = hoverArgs) { eles.forEach(ele => { wrapEle(ele, styles, args) }) } function addChildren(parent, children) { children.forEach(child => { parent.appendChild(child) }); } function addBefore(parent, children, before) { children.forEach(child => { parent.insertBefore(child, before) }); } function spGoto(target, needRemoveTail = false, idx = spIndex.deliIndex, deli = "/") { gotoUrl(target, needRemoveTail, idx, deli) } function gotoUrl(target, needRemoveTail, idx, deli) { let newUrl = crtUrl.replace(crtUrl.split(deli)[idx], target) if (needRemoveTail) { newUrl = removeTail(newUrl, target) } window.location.href = newUrl } function gotoUrlReg(target, reg) { window.location.href = crtUrl.replace(reg, target) } function removeTail(url, seg) { return url.substr(0, url.indexOf(seg) + seg.length) } function firstChild(p, layer = 1) { let temp = p; for (let i = 0; i < layer; i++) { temp = temp.firstElementChild } return temp; } function buildUrl(target, index) { return target.prefix + index + target.suffix; } function matchAny(prefixes) { let flag = false; prefixes.forEach(prefix => { if (crtUrl.match(prefix)) { flag = true; return; } }); return flag; } function merge() { let arr = [...arguments] if (arr.length == 1) return arr; let target = {} arr.forEach(obj => { for (let p in obj) { target[p] = obj[p] } }); return target; } function getBdCode(link) { let idx = link.indexOf(regToUse.bd.code) if (idx > -1) { link = link.substr(idx) return link; } let lkArr = link.split(" ") if (lkArr) { let len = lkArr.length let matched = 0; for (let i = 0; i < len; i++) { if (lkArr[i].match(regToUse.bd.codeStr)) { matched = i; break; } } if (matched > 0) { link = ""; for (let i = matched; i < len; i++) { link += lkArr[i] } } } return link; } })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址