// ==UserScript==
// @name m.mysmth.net cross link
// @description add cross links between mobile, www2 and nForum views
// @include https://*.mysmth.net/*
// @version 1.3.3
// @namespace https://gf.qytechs.cn/users/5696
// @grant none
// @require https://code.jquery.com/jquery-3.5.1.min.js
// ==/UserScript==
function buildWww2BoardSearch(board) {
return '<a href="https://www.mysmth.net/bbsbfind.php?board=' + board + '">搜索</a>';
}
function buildMobileArticleLink(board, tid) {
return '<a href="https://m.mysmth.net/article/' + board + '/single/' + tid + '/0">手机版</a>';
}
function buildWww2ArticleDeleteLink(bid, tid) {
return '<a href="https://www.mysmth.net/bbsdel.php?bid=' + bid + '&id=' + tid + '">www2</a>';
}
function buildMobileThreadLink(board, gid, start, page) {
if (start !== null) {
return '<a href="https://m.mysmth.net/article/' + board + '/' + gid + '/?s=' + start + '">手机版</a>';
}
page = (page !== null) ? '/?p=' + page : '';
return '<a href="https://m.mysmth.net/article/' + board + '/' + gid + page + '">手机版</a>';
}
function buildNforumThreadLink(board, tid, page) {
page = (page !== null && !isNaN(page)) ? '?p=' + page : '';
return '<a href="https://www.mysmth.net/nForum/#!article/' + board + '/' + tid + page + '">nForum</a>';
}
function buildMobileThreadBoardLink(board, page) {
page = (page !== null) ? '/?p=' + page : '';
return '<a href="https://m.mysmth.net/board/' + board + page + '">手机版</a>';
}
function buildNforumThreadBoardLink(board, page) {
page = (page !== null) ? '?p=' + page : '';
return '<a href="https://www.mysmth.net/nForum/#!board/' + board + page + '">nForum</a>';
}
function buildGoForm() {
$form = $('<form id="goform" action="/go" method="get" style="display: inline;"></form>');
$form.append('<input name="name" type="text" size=10>');
$form.append('<input type="submit" value="GO">');
return $form;
}
function buildLoginForm(multiline) {
$form = $('<form id="loginform" action="/user/login" method="post"></form>');
$form.append('用户: <input id="userid" name="id" type="input">');
$form.append((multiline)?'<br/>':' ');
$form.append('密码: <input id="passwd" name="passwd" type="password">');
$form.append((multiline)?'<br/>':' ');
$form.append('<input class="loginbutton" id="TencentCaptcha" data-appid="2068091125" data-cbfn="captchaSuccess" type="button" value="刷新">');
$form.append('<input name="ticket" id="ticket2" value="" type="hidden">');
$form.append('<input name="randstr" id="randstr2" value="" type="hidden">');
return $form;
}
function mobileLogin() {
$(".loginbutton").off('click').attr("value", "正在登陆");
$.ajax({
url: "https://m.mysmth.net/user/login",
method: "POST",
data: $(this).parents('form').serialize(),
complete: function() { window.location.href = window.location.href+(window.location.href.includes("?")?"&":"?") + "reload="+Date.parse(new Date()); },
error: function(xhr, status, error) { console.log(status); alert(error); },
success: function(doc, status, xhr) { $(".loginbutton").attr("value", "提交成功 正在刷新"); }
});
}
function patchMobile() {
if(!$("#TencentCaptcha").length) {
var e = $(".sp.hl.f");
if (e.length) {
if ( e.text() == "您没有绑定手机号码,没有发表文章的权限"
|| e.text() == "您无权阅读此版面"
) {
e.append(buildLoginForm(true));
$(".loginbutton").click(mobileLogin);
return
}
}
if(!$(".menu.nav").children("a[href*='logout']").length) {
$(".menu.nav").prepend(buildLoginForm(false));
$(".loginbutton").click(mobileLogin);
}
}
e = document.getElementsByClassName('menu nav') [0];
if (e.children.length == 9) {
var str = '';
if (e.children[4].innerHTML.length > 2)
str += e.children[4].outerHTML + '|';
if (e.children[5].innerHTML.length > 2)
str += e.children[5].outerHTML + '|';
if (e.children[6].innerHTML.length > 2)
str += e.children[6].outerHTML;
if (str.length > 0)
document.getElementsByClassName('sec nav') [0].innerHTML += '||' + str;
}
$(".menu.sp").append(e.outerHTML.replace('"TencentCaptcha"', '"TencentCaptcha2"'));
$(".loginbutton").click(mobileLogin);
$("form input[value='快速回复']").closest("div").remove();
$(".menu.sp a[style]").replaceWith(buildGoForm());
s = document.getElementsByTagName('script');
for (var i = 1; i < s.length; i++) {
s[i].parentNode.removeChild(s[i]);
}
var slist = document.getElementsByClassName('slist sec') [1];
var linklist = {
links: [],
ptr: -1
};
var httpRequest = new XMLHttpRequest();
httpRequest.responseType = 'document';
httpRequest.onreadystatechange = function () {
if (httpRequest.readyState === 4 && httpRequest.status === 200) {
if(linklist.ptr < 0)
{
linklist.links = httpRequest.response.getElementsByClassName('nav sec') [0].children;
linklist.ptr++;
}
else
{
var slist2 = httpRequest.response.getElementsByClassName('slist sec') [0];
slist.parentNode.insertBefore(slist2, slist.nextSibling);
slist = slist2;
}
if (linklist.ptr >= linklist.links.length)
{
return;
}
linklist.ptr++;
var url = "https://m.mysmth.net" + linklist.links[linklist.ptr].getAttribute('href');
httpRequest.open('GET', url, true);
httpRequest.send();
}
};
var url = "https://m.mysmth.net/hot";
httpRequest.open('GET', url, true);
httpRequest.send();
}
function patchMobileThreadBoard() {
var match = /https?:\/\/m\.mysmth\.net\/board\/(\w+)(\/?\?p=(\d+))?/.exec(document.URL);
var board = match[1];
var page = match[3];
var nav = document.getElementsByClassName('nav sec') [0];
nav.innerHTML = nav.innerHTML + '||' + buildNforumThreadBoardLink(board, page) + '||' + buildWww2BoardSearch(board);
//list
list = document.getElementsByClassName('list sec') [0].children;
for (var i = 0; i < list.length; i++) {
li = list[i];
t = li.children[0];
a = li.children[1];
d = a.textContent.substring(0, 10);
var ta1 = t.childNodes[0];
var ta2 = document.createElement('a');
var ta3 = a.children[0];
var ta4 = a.children[1];
var span = document.createElement('span');
ta1.title = li.textContent;
if(d.match(/^\d{4}-\d{2}-\d{2}$/) && Date.now()-Date.parse(d) > 7*24*60*60*1000) {
ta1.text = "(坟)"+ta1.text;
}
ta2.text = t.childNodes[1].textContent;
ta2.href = ta1.href + '?p=' + Math.floor(parseInt(/\((\d+)\)/.exec(t.childNodes[1].textContent) [1]) / 10 + 1);
t.replaceChild(ta2, t.childNodes[1]);
t.appendChild(span);
span.appendChild(ta3);
span.appendChild(ta4);
$(span).css("font-size", "x-small");
$(span).find("a").css("margin-left", "5px");
li.removeChild(a);
}
}
function patchMobileThread() {
var match = /https?:\/\/m\.mysmth\.net\/article\/(\w+)\/(\d+)(\?p=(\d+))?/.exec(document.URL);
var board = match[1];
var gid = match[2];
var page = match[4];
var start = 0;
$('.nav.hl').each(function() {
$(this).find("a[href*='/forward/']").each(function() {
match = /\/\w+\/forward\/(\d+)/.exec($(this).attr("href"));
start = match[1];
$(this).append('|' + buildMobileArticleLink(board, start).replace('手机版', '单文'))
$(this).append('|' + buildWww2ArticleDeleteLink(board, start).replace('www2', '删除'))
});
});
$(".nav.sec").first().append('||' + buildNforumThreadLink(board, gid, page) + '||' + buildWww2BoardSearch(board));
}
function patchMobileArticle() {
var match = /https?:\/\/m\.mysmth\.net\/article\/(\w+)\/(\d+)\?s=(\d+)/.exec(document.getElementsByClassName('sec nav') [0].childNodes[2].href);
var board = match[1];
var gid = match[2];
var start = match[3];
var nav = document.getElementsByClassName('nav sec') [0];
nav.innerHTML = nav.innerHTML + '||' + buildNforumThreadLink(board, gid) + '||' + buildWww2BoardSearch(board);
}
function patchMobileArticleBoard() {
var match = /https?:\/\/m\.mysmth\.net\/board\/(\w+)\/0(\?p=(\d+))?/.exec(document.URL);
var board = match[1];
var page = match[3];
var nav = document.getElementsByClassName('nav sec') [0];
nav.innerHTML = nav.innerHTML + '||' + buildNforumThreadBoardLink(board) + '||' + buildWww2BoardSearch(board);
}
function patchMobilePost() {
var btns = document.getElementsByClassName('btn') [0].parentElement;
var button = document.createElement('input');
button.type = 'button';
button.value = 'IMG';
button.className = 'btn';
button.onclick = function () {
var textarea = document.getElementsByName('content') [0];
var newvalue = textarea.value.substring(0, textarea.selectionStart);
newvalue += '[img=';
newvalue += textarea.value.substring(textarea.selectionStart, textarea.selectionEnd);
newvalue += '][/img]'
newvalue += textarea.value.substring(textarea.selectionEnd);
textarea.value = newvalue;
}
}
function patchWww2FindResult() {
var match = /https?:\/\/www\.mysmth\.net\/bbsbfind\.php\?.*\bboard=(\w+)\b/.exec(document.URL);
var board = match[1];
var links = $("a[href*='bbscon']").each(function() {
var id = /\bid=(\d+)/.exec($(this).attr("href"))[1]
$(this).attr("href", "https://m.mysmth.net/article/"+board+"/single/"+id+"/0");
});
}
function patchNforumThread() {
var match = /https?:\/\/www\.mysmth\.net\/nForum\/#!article\/(\w+)\/(\d+)(\?p=(\d+))?/.exec(document.URL);
var board = match[1];
var gid = match[2];
var page = match[4];
var nav = document.getElementById('notice');
nav.innerHTML += '  【' + buildMobileThreadLink(board, gid, null, page).replace('href', 'onclick="javascript: window.location=this.href" href') + '】';
}
function patchNforumThreadBoard() {
var match = /https?:\/\/www\.mysmth\.net\/nForum\/#!board\/(\w+)(\/?\?p=(\d+))?/.exec(document.URL);
var board = match[1];
var page = match[3];
var nav = document.getElementById('notice');
nav.innerHTML += '  【' + buildMobileThreadBoardLink(board, page).replace('href', 'onclick="javascript: window.location=this.href" href') + '】';
}
if (document.URL.match(/^https?:\/\/m\.mysmth\.net\/\W?/)) {
patchMobile();
}
if($(".menu.sp").text().includes("发生错误")) {
// do nothing
} else if (document.URL.match(/https?:\/\/wap\.mysmth\.net\/index/)) {
window.location.href = "https://m.mysmth.net/index";
} else if (document.URL.match(/https?:\/\/m\.mysmth\.net\/article\/\w+\/(\d+)/)) {
patchMobileThread();
} else if (document.URL.match(/https?:\/\/m\.mysmth\.net\/board\/\w+\/0(\?p=(\d+))?/)) {
patchMobileArticleBoard();
} else if (document.URL.match(/https?:\/\/m\.mysmth\.net\/board\/\w+(p=(\d+))?/)) {
patchMobileThreadBoard();
} else if (document.URL.match(/https?:\/\/m\.mysmth\.net\/article\/\w+\/single\/(\d+)/)) {
patchMobileArticle();
} else if (document.URL.match(/https?:\/\/m\.mysmth\.net\/article\/\w+\/post/)) {
patchMobilePost();
} else if (document.URL.match(/https?:\/\/m\.mysmth\.net\/article\/\w+\/edit/)) {
patchMobilePost();
} else if (document.URL.match(/https?:\/\/www\.mysmth\.net\/bbsbfind\.php\?.*\bboard=(\w+)\b/)) {
patchWww2FindResult();
} else if (document.URL.match(/https?:\/\/www\.mysmth\.net\/nForum\/#!article\/(\w+)\/(\d+)/)) {
patchNforumThread();
} else if (document.URL.match(/https?:\/\/www\.mysmth\.net\/nForum\/#!board\/(\w+)/)) {
patchNforumThreadBoard();
}