// ==UserScript==
// @name MT论坛
// @namespace http://tampermonkey.net/
// @description MT论坛效果增强,如自动签到、自动展开帖子、滚动加载评论、显示uid、屏蔽用户、手机版小黑屋、今日签到之星、今日签到排名、帖外预览图片、搜索框清空按钮修复、个人空间正确进入、康哥图床-帖子内(20MB)、Hello图床-帖子内(20MB)、Z4A图床-帖子内(50MB)、康哥图床-聊天内(20MB)、Hello图床-聊天内(20MB)、Z4A图床-聊天内(50MB)、付费主题白嫖提醒、页面小窗浏览帖子等
// @version 2.4.8.5
// @author WhiteSevs
// @icon https://bbs.binmt.cc/favicon.ico
// @match *://bbs.binmt.cc/*
// @compatible edge Beta/Dev/Candy 测试通过
// @compatible 火狐 测试通过
// @compatible Yandex 测试通过
// @compatible Kiwi 测试通过
// @license GPL-3.0-only
// @grant GM_addStyle
// @grant GM_setValue
// @grant GM_getValue
// @grant GM_deleteValue
// @grant GM_setClipboard
// @grant GM_xmlhttpRequest
// @run-at document-start
// @supportURL https://github.com/893177236/Monkey_script
// @require https://lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/jquery/3.4.1/jquery.min.js
// @require https://greasyfork.org/scripts/449471-viewer/code/Viewer.js?version=1081056
// @require https://greasyfork.org/scripts/449512-xtiper/code/Xtiper.js?version=1081249
// ==/UserScript==
(function () {
'use strict';
const log = {
success: (str) => {
console.log("%c" + str, "color: #00a5ff");
},
error: (str) => {
console.trace("%c" + str, "color: #f20000");
}
}
function tryCatch(func, params, errorFunc) { // 捕获错误
try {
func(params);
} catch (error) {
console.log("%c" + (func.name + "出现错误"), "color: #f20000");
console.log("%c" + ("错误原因:" + error), "color: #f20000");
window.eval(errorFunc);
}
}
let mt_config = {
dom_obj: {
beauty_select: function () { //下拉列表对象
return document.getElementsByClassName("beauty-select")[0];
},
combobox_switch: function () { //复选框对象
return document.getElementsByClassName("whitesevcheckbox")[0];
},
comiis_verify: function () { //帖子内各个人的信息节点【list】
return document.getElementsByClassName("comiis_verify");
},
comiis_formlist: function () { //导航中最新、热门、精华、恢复、抢沙发的各个帖子【list】
return document.getElementsByClassName("forumlist_li");
},
comiis_mmlist: function () {
return document.getElementsByClassName("comiis_mmlist");
},
comiis_postli: function () { //帖子内评论,包括帖子内容主体,第一个就是主体【list】
return document.getElementsByClassName("comiis_postli comiis_list_readimgs nfqsqi")
},
post_bottom_controls: function () { // 帖子底部一栏控件
return document.getElementsByClassName("comiis_znalist_bottom b_t cl")
},
post_list_of_comments: function () { //帖子内评论列表
return $jq(".comiis_postlist.kqide");
},
post_next_commect: function () { //帖子内评论下一页的按钮
return document.querySelector("div.comiis_page.bg_f>a:nth-child(3)");
}
},
rexp: {
bbs:/bbs.binmt.cc/, // 论坛
search_url: /bbs.binmt.cc\/search.php/g, //搜索页
chat_url: /home.php\?mod=space&do=pm&subop=view/g, // 聊天页
home_url: /home.php\?mod=spacecp&ac=profile&op=info/g, //个人空间页
home_url_brief: /home.php\?mod=space/g, //个人空间页简略url
home_kmisign_url: /bbs.binmt.cc\/(forum.php\?mod=guide&view=hot(|&mobile=2)|k_misign-sign.html)/g, //主页和签到页链接
home_space_url: /bbs\.binmt\.cc\/home\.php\?mod=space/g, //【我的】 个人信息页链接
home_space_pc_uid_url: /space-uid-(.*?).html/, //PC 个人空间链接uid
reply_forum: /bbs.binmt.cc\/forum.php\?mod=post&action=reply/g, // 回复的界面url
sign_url: "",
navigation_url: "",
community_url: /forum.php\?forumlist/, //社区
forum_post: /(bbs.binmt.cc\/thread-|bbs.binmt.cc\/forum.php\?mod=viewthread)/g, //帖子链接
forum_post_pc: /.*:\/\/bbs.binmt.cc\/thread.*/, //帖子链接-PC
forum_guide_url: /bbs.binmt.cc\/forum.php\?mod=guide/g, // 导航链接
forum_post_reply: /forum.php\?mod=post&action=reply/g, //帖子中回复的链接
forum_post_page: '&page=(.*)', //帖子链接的当前所在页 page
forum_post_pc_page: 'thread-(.*?)-', //PC帖子链接的当前所在页 page
forum_plate_text: /休闲灌水|求助问答|逆向教程|资源共享|综合交流|编程开发|玩机教程|建议反馈/g, //各版块名称
plate_url: /bbs.binmt.cc\/forum-[0-9]{1,2}-[0-9]{1,2}.html/g, // 板块链接
formhash: /formhash=(.*)&/, //论坛账号的凭证
font_special: /<br>| |<font.*?>|<\/font>|<strike>|<strong>|<i>|<u>|align=".*?"/g, //帖子内特殊字体格式
forum_post_guide_url: /bbs.binmt.cc\/page-[1-5].html|bbs.binmt.cc\/forum.php\?mod=guide/g, //帖子链接和导航链接
mt_uid: /uid=(\d+)/,
nologin: /member.php\?mod=logging&action=login(|&mobile=2)/g, //未登录
pc_useragent: 'Windows', //pc识别
k_misign_sign: "bbs.binmt.cc\/k_misign-sign.html",
post_forum: /forum.php\?mod=post&action=newthread/, // 发布帖子
edit_forum: /forum.php\?mod=post&action=edit/, // 编辑帖子
}
}
// mt全屏遮罩调用
// popup.open('<img src="https://bbs.binmt.cc/template/comiis_app/comiis/img/imageloading.gif" class="comiis_loading comiis_noloadimage">');
// 关闭方式
// popup.close()
let utils = {
dateStringFormatToStamp(datastring) {
let date = datastring;
date = date.substring(0, 19);
date = date.replace(/-/g, '/');
let timestamp = new Date(date).getTime();
// let newDate = new Date(timestamp);
return timestamp;
},
timeStringFormatToStamp(timestring) {
let today = new Date();
let date = today.getFullYear() + "-" + (today.getMonth() + 1) + "-" + today.getDate() + " " + timestring;
date = date.substring(0, 19);
date = date.replace(/-/g, '/');
let timestamp = new Date(date).getTime();
// let newDate = new Date(timestamp);
return timestamp
},
listCompareDescByValue(propertyName) { // json根据 字段(int)降序
return function (object1, object2) {
var value1 = object1[propertyName];
var value2 = object2[propertyName];
if (value2 < value1) {
return -1;
} else if (value2 > value1) {
return 1;
} else {
return 0;
}
}
},
listCompareAscByValue(propertyName) { // json根据 字段(int)升
return function (object1, object2) {
var value1 = object1[propertyName];
var value2 = object2[propertyName];
if (value2 > value1) { //-1表示前对象小,1表示后对象小,0表示相等
return -1;
} else if (value2 < value1) {
return 1;
} else {
return 0;
}
}
},
listToStringByValue(_list_, propertyName) { // json根据 字段(int)合并
let content = "";
Array.from(_list_).forEach((item) => {
content = content + item[propertyName];
})
return content
}
}
async function envCheck(){ // 脚本运行环境修复,兼容部分函数 GM_xmlhttpRequest x浏览器进行了兼容,调用方式为GM.xmlHttpRequest,但会检测是否同源请求,所以不可修改headers
let checkStatus = true;
let isFailedFunction = [];
console.log("正在检测脚本环境...");
if (typeof GM_xmlhttpRequest == "undefined") {
if (typeof GM != "undefined" && typeof GM.xmlHttpRequest != "undefined") {
GM_xmlhttpRequest = GM.xmlHttpRequest;
console.log("check: %c GM_xmlhttpRequest %c √ 替换成当前环境的GM中", "background:#24272A; color:#ffffff");
} else {
checkStatus = false;
isFailedFunction = isFailedFunction.concat("GM_xmlhttpRequest");
window.GM_xmlhttpRequest = (f) => {
console.log(`%c GM_xmlhttpRequest %c 该函数不存在,请求失败 ${f.url}`, "background:#24272A; color:#ffffff","background:#fff;");
f.onerror();
}
}
} else {
console.log("check: %c GM_xmlhttpRequest %c √", "background:#24272A; color:#ffffff", "color:#00a5ff");
}
if (typeof $ != 'undefined') {
window.$jq = $.noConflict(true); // 为什么这么写,X浏览器加载jq会替换网页上的jq
console.log(`check: %c $ %c √ jQuery版本:${$jq.fn.jquery}`, "background:#24272A; color:#ffffff", "color:#00a5ff");
if (typeof $ != 'undefined') {
console.log(`检测到网页使用的jQuery版本: %c ${$.fn.jquery}`, "color:#00a5ff");
}
} else {
checkStatus = false;
isFailedFunction = isFailedFunction.concat("GM_xmlhttpRequest");
console.log("check: %c $ %c ×", "background:#24272A; color:#ffffff", "color:#f90000");
}
var loadNetworkResource = [];
window.GM_asyncLoadScript = (url, replaceStatus) => { // 异步执行跨域js资源
if (loadNetworkResource.indexOf(url) != -1) {
console.log("已加载该js:", url);
return
}
replaceStatus = replaceStatus == null ? true : replaceStatus;
return new Promise(res => {
GM_xmlhttpRequest({
url: url,
method: "GET",
async: false,
timeout: 10000,
onload: (r) => {
let execStatus = false;
let retText = r.responseText;
if (replaceStatus) {
retText = retText.replace(/\$/g, "$jq");
retText = retText.replace(/jQuery/g, "$jq");
}
try {
eval(retText);
execStatus = true;
loadNetworkResource = loadNetworkResource.concat(url);
} catch (error) {
console.log("执行JS失败1" + error);
execStatus = false;
}
try {
window.eval(retText);
execStatus = true;
loadNetworkResource = loadNetworkResource.concat(url);
} catch (error) {
console.log("执行JS失败2 " + error);
execStatus = false;
}
res(execStatus);
},
onerror: () => {
console.log("网络异常,加载JS失败", url);
res(false);
}
})
})
}
window.GM_asyncLoadStyleSheet = (url) => { // 异步添加跨域css资源
if (loadNetworkResource.indexOf(url) != -1) {
console.log("已加载该css:", url);
return
}
loadNetworkResource = loadNetworkResource.concat(url);
let cssNode = document.createElement("link");
cssNode.setAttribute("rel","stylesheet");
cssNode.setAttribute("href",url);
cssNode.setAttribute("type","text/css");
document.head.append(cssNode);
}
if (typeof GM_getValue == "undefined") {
window.GM_getValue = (key) => {
let value = window.localStorage.getItem(key);
if(value != null && !value.startsWith("v")){
value = JSON.parse(value);
}
return value;
};
console.log("check: %c GM_xmlhttpRequest %c √ 修复", "background:#24272A; color:#ffffff", "color:#00a5ff");
} else {
console.log("check: %c GM_getValue %c √", "background:#24272A; color:#ffffff", "color:#00a5ff");
}
if (typeof GM_setValue == "undefined") {
window.GM_setValue = (key, value) => {
if(typeof value == "object"){
value = JSON.stringify(value);
}
window.localStorage.setItem(key, value);
};
console.log("check: %c GM_setValue %c √ 修复", "background:#24272A; color:#ffffff", "color:#00a5ff");
} else {
console.log("check: %c GM_setValue %c √", "background:#24272A; color:#ffffff", "color:#00a5ff");
}
if (typeof GM_deleteValue == "undefined") {
window.GM_deleteValue = (key) => {
window.localStorage.removeItem(key);
};
console.log("check: %c GM_deleteValue %c √ 修复", "background:#24272A; color:#ffffff", "color:#00a5ff");
} else {
console.log("check: %c GM_deleteValue %c √", "background:#24272A; color:#ffffff", "color:#00a5ff");
}
if (typeof GM_addStyle == "undefined") {
window.GM_addStyle = (styleText) => {
let cssDOM = document.createElement("style");
cssDOM.setAttribute("type", "text/css");
cssDOM.innerHTML = styleText;
document.head.appendChild(cssDOM);
};
console.log("check: %c GM_addStyle %c √ 修复", "background:#24272A; color:#ffffff", "color:#00a5ff");
} else {
console.log("check: %c GM_addStyle %c √", "background:#24272A; color:#ffffff", "color:#00a5ff");
}
if (typeof GM_setClipboard == "undefined") {
window.GM_setClipboard = (text) => {
let clipBoardDOM = document.createElement("input");
clipBoardDOM.type = "text";
clipBoardDOM.setAttribute("style", "opacity:0;position:absolute;");
clipBoardDOM.id = "whitesevClipBoardInput";
document.body.append(clipBoardDOM);
let clipBoardInputNode = document.getElementById("whitesevClipBoardInput");
clipBoardInputNode.value = text;
clipBoardInputNode.removeAttribute("disabled");
clipBoardInputNode.select();
document.execCommand('copy');
clipBoardInputNode.remove();
};
console.log("check: %c GM_setClipboard %c √ 修复", "background:#24272A; color:#ffffff", "color:#00a5ff");
} else {
console.log("check: %c GM_setClipboard %c √", "background:#24272A; color:#ffffff", "color:#00a5ff");
}
if(checkStatus){
console.log(`脚本环境检测结果: 通过`);
}else{
let isFailedStr = "";
Array.from(isFailedFunction).forEach( item=>{
isFailedStr += (item+"、");
})
isFailedStr = isFailedStr.replace(/、$/,'')
console.log(`脚本环境检测结果: ${isFailedStr}失败`);
}
return checkStatus;
}
async function loadCheckboxTipResource() { // 加载checkbox值变化的显示的提示的资源
await GM_asyncLoadScript("https://whitesev.gitee.io/static_resource/ios_loading/js/iosOverlay.js");
await GM_asyncLoadStyleSheet("https://whitesev.gitee.io/static_resource/ios_loading/css/iosOverlay.css");
}
function repairPCNoLoadResource() { // 修复电脑版未加载的js资源
GM_asyncLoadScript("https://cdn2.bbs.binmt.cc/static/js/smilies.js?x6L");
GM_asyncLoadScript("https://cdn2.bbs.binmt.cc/static/js/common.js?x6L");
}
function latestReleaseForumPost() { // 最新发表
var ele = document.createElement('li');
var url = window.location.href;
ele.id = "latest_publication";
ele.innerHTML = '<a href="https:\/\/bbs.binmt.cc\/forum.php?mod=guide&view=newthread" hidefocus="true" title="最新发表">最新发表<\/a>';
document.getElementsByClassName("wp comiis_nvbox cl")[0].children[1].appendChild(ele);
if (url == 'https:\/\/bbs.binmt.cc\/forum.php?mod=guide&view=newthread') {
document.getElementById("mn_forum_10").children[0].style = "background: url(";
ele.style.cssText = 'background: url("https:\/\/cdn2.bbs.binmt.cc\/template\/comiis_mi\/img\/nv_a.png") repeat-x 50% -50px;';
}
}
function removeForumPostFontStyle() { // 移除帖子内的字体style
if (GM_getValue("v1") && location.href.match(mt_config.rexp.forum_post)) {
var rule = mt_config.rexp.font_special;
var h_content = document.getElementsByClassName("comiis_a comiis_message_table cl");
h_content[0].innerHTML = h_content[0].innerHTML.replace(rule, '');
}
}
function autoSignIn() { //mt签到
function getFormHash() { // 获取账号的formhash
return document.querySelector("input[name=formhash]") ? document.querySelector("input[name=formhash]").value : document.querySelector("div[class=sidenv_exit]>a").href.match(mt_config.rexp.formhash)[1];
}
function getLocalTime() { // 获取当前时间
let GM_myDate = new Date;
let GM_year = GM_myDate.getFullYear(); //获取当前年
let GM_mon = GM_myDate.getMonth() + 1; //获取当前月
let GM_date = GM_myDate.getDate();
let GM_alldate = GM_year.toString() + GM_mon.toString() + GM_date.toString();
GM_alldate = parseInt(GM_alldate);
return GM_alldate
}
if (!GM_getValue("v17")) {
console.log("尚未开启每日签到");
return;
}
if (GM_getValue("mt_sign") == getLocalTime()) {
console.log("今日已签到");
return;
}
if ((document.querySelector("div[class=comiis_dlq]>a") != null) || (document.getElementsByClassName("sidenv_user")[0].href.match(mt_config.rexp.nologin) != null)) {
console.log("当前账号尚未登录");
return;
}
let mtFormHash = getFormHash();
if (mtFormHash == null) {
console.log("获取账号formhash失败");
return;
}
$jq.get("/k_misign-sign.html?operation=qiandao&format=button&formhash=" + mtFormHash + "&inajax=1&ajaxtarget=midaben_sign", function (data, status) {
console.log(data.responseText);
GM_setValue("mt_sign", getLocalTime());
window.location.reload();
});
}
function searchHistory() { // 搜索历史
if (GM_getValue("v19") && location.href.match(mt_config.rexp.search_url)) {
function search_event() { // 搜索历史事件
//搜索界面增加关闭按钮事件,清空input内容
//点击搜索保存搜索记录
$jq("#scform_submit").click(function () {
let getsearchtext = $jq("#scform_srchtxt").val();
if ((getsearchtext != null) && (getsearchtext != "")) {
let search_history_array = new Array(getsearchtext);
let has_history = GM_getValue("search_history");
if (has_history != null) {
if ($jq.inArray(getsearchtext, has_history) != -1) {
console.log("已有该搜索历史记录")
search_history_array = has_history
} else {
console.log("无该记录,追加");
search_history_array = search_history_array.concat(has_history);
}
} else {
console.log("空记录,添加")
}
GM_setValue("search_history", search_history_array);
}
})
}
function add_search_history() { //搜索界面添加搜索历史记录
$jq("#scform_srchtxt").attr("list", "search_history");
var search_history_list = GM_getValue("search_history");
var dom_datalist = document.createElement("datalist");
dom_datalist.id = "search_history";
var option_text = "";
if (search_history_list) {
for (var i = 0; i < search_history_list.length; i++) {
option_text = option_text + '<option value="' + search_history_list[i] + '">';
}
dom_datalist.innerHTML = option_text;
$jq(".comiis_flex").append(dom_datalist);
}
}
function add_clear_history() { //搜索界面添加清理历史记录和历史记录个数
let search_history_list = GM_getValue("search_history");
let search_history_nums = 0;
if (search_history_list != null) {
search_history_nums = search_history_list.length;
}
let clear_history_innerHTML =
`<div class="comiis_p12 f14 bg_f f_c b_b cl" style="padding-bottom:10px">搜索记录个数: ` +
search_history_nums +
`<button class="btn_clear_search_history" style="
border: none;
float: right;
background: red;
color: #fff;
border-radius: 3px;
font-weight: 600;
min-width: 20vw;
width: 20vw;
">清理记录</button></div>`;
let insertdom = $jq(".comiis_p12.f14.bg_f.f_c.b_b.cl,.comiis_tagtit.b_b.f_c");
insertdom.before(clear_history_innerHTML);
$jq(".btn_clear_search_history").click(function () {
GM_deleteValue("search_history");
window.location.reload();
})
}
search_event();
add_search_history();
add_clear_history();
}
}
function showTodayStar() { // 显示今日之星,在签到页上
if (GM_getValue("v33") && window.location.href.match(mt_config.rexp.k_misign_sign)) {
let todayStarParent = $jq(".pg_k_misign .comiis_qdinfo");
let todayStar = document.createElement("ul");
GM_xmlhttpRequest({
url: "/k_misign-sign.html",
method: 'get',
async: false,
headers: {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.64 Safari/537.36 Edg/101.0.1210.53"
},
onload: (r) => {
let html = $jq(r.responseText);
let todatastarele = html.find("#pt span.xg1");
let todaypeople = todatastarele[0].textContent.replace("今日签到之星:", '');
todayStar.innerHTML = '<li class="f_f" style="display: flex;flex-direction: column;width: 100%;"><span class="comiis_tm">今日签到之星</span>' + todaypeople + '</li>';
let comiis_space_box_height = getComputedStyle($jq(".comiis_space_box")[0], null)["height"].replace("px", "");
let comiis_space_box_padding_bottom = getComputedStyle($jq(".comiis_space_box")[0], null)["padding-bottom"].replace("px", "");
comiis_space_box_height = parseInt(comiis_space_box_height);
comiis_space_box_padding_bottom = parseInt(comiis_space_box_padding_bottom);
let total_height = comiis_space_box_height + comiis_space_box_padding_bottom + 50;
GM_addStyle(`
.comiis_space_box{
height: ${total_height}px;
background-size: 100% 100%;
}
.pg_k_misign .comiis_qdinfo{
height: 110px !important;
}`);
todayStarParent.append(todayStar);
},
onerror: (r) => {
console.log(r);
log.error("请求今日之星失败");
}
})
}
}
function showSignInRanking() { // 显示签到的最先几个人,最多10个,和顶部的今日签到之星
if (window.location.href.match(mt_config.rexp.k_misign_sign)) {
let today_ranking_ele = document.querySelector(".comiis_topnv .comiis_flex .flex");
today_ranking_ele.after($jq(`<li class="flex"><a href="javascript:;" id="k_misignlist_today_latest" onclick="ajaxlist('todayLatest');">今日最先</a></li>`)[0]);
let getMaxPage = (urlextra) => {
return new Promise(res => {
GM_xmlhttpRequest({
url: "https://bbs.binmt.cc/k_misign-sign.html?operation=" + urlextra,
async: false,
dataType: 'html',
headers: {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.64 Safari/537.36 Edg/101.0.1210.53"
},
onload: function (resp) {
let last_url = $jq(resp.responseText).find("#J_list_detail .pg .last")[0].href;
let last_page = last_url.match(/page=([0-9]*)/)[1];
res(last_page);
// console.log(data);
// $jq("#ranklist").html(data);
// $jq('#ranklist').attr('listtype', listtype);
},
onerror: function (resp) {
console.log(resp);
res(0);
}
})
})
}
let getPagePeople = (page) => {
return new Promise(res => {
GM_xmlhttpRequest({
url: "https://bbs.binmt.cc/k_misign-sign.html?operation=list&op=&page=" + page,
async: false,
dataType: 'html',
headers: {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.64 Safari/537.36 Edg/101.0.1210.53"
},
onload: function (resp) {
let peoples = $jq(resp.responseText).find("#J_list_detail tbody tr");
let ret_array = [];
if (peoples.length == 2 && peoples[0].textContent.indexOf("暂无内容") != -1) {
res(ret_array);
return;
}
for (let i = 1; i <= peoples.length - 2; i++) {
let people = peoples[i];
let ret_json = {};
let user_name = people.children[0].getElementsByTagName("a")[0].textContent;
let space_url = people.children[0].getElementsByTagName("a")[0].href;
let uid = space_url.match(/space-uid-([0-9]*)/)[1];
let sign_all_days = people.children[1].textContent;
let sign_month_days = people.children[2].textContent;
let sign_time = people.children[3].textContent;
let sign_reward = people.children[5].textContent;
ret_json["user"] = user_name;
ret_json["uid"] = uid;
ret_json["avatar"] = "https://avatar-bbs.mt2.cn/uc_server/avatar.php?uid=" + uid + "&size=small";
ret_json["days"] = sign_all_days;
ret_json["monthDays"] = sign_month_days;
ret_json["time"] = sign_time;
ret_json["reward"] = sign_reward;
ret_array = ret_array.concat(ret_json);
}
res(ret_array)
},
onerror: function (resp) {
console.log(resp);
res({});
}
})
})
}
function changeRankList(data, listtype) {
$jq("#ranklist").html(data);
$jq('#ranklist').attr('listtype', listtype);
}
ajaxlist = async (listtype) => {
listtype = listtype;
if (listtype == 'today') {
loadingdelay = false;
urlextra = 'list&op=today';
} else if (listtype == 'month') {
loadingdelay = false;
urlextra = 'list&op=month';
} else if (listtype == 'zong') {
loadingdelay = false;
urlextra = 'list&op=zong';
} else if (listtype == 'calendar') {
loadingdelay = true;
urlextra = 'calendar';
} else {
loadingdelay = false;
urlextra = 'list';
}
//alert(loadingdelay);
if (listtype == 'todayLatest') {
loadingdelay = false;
urlextra = 'list&op=&page=0';
let maxPage = await getMaxPage(urlextra);
let latestPeople = await getPagePeople(maxPage);
latestPeople.reverse();
if (latestPeople.length < 10) {
let latestPeople_2 = await getPagePeople(maxPage - 1);
latestPeople_2.reverse();
latestPeople = latestPeople.concat(latestPeople_2);
latestPeople.reverse();
}
let peopleHTML = '';
latestPeople.reverse();
console.log(latestPeople);
latestPeople.forEach(people => {
peopleHTML = peopleHTML + `
<tbody id="autolist_` + people["uid"] + `">
<tr>
<td class="k_misign_lu">
<a href="home.php?mod=space&uid=` + people["uid"] + `"><img
src="` + people["avatar"] + `"></a>
</td>
<td class="k_misign_ll"><span></span></td>
<td class="k_misign_lc">
<h4 class="f_c"><a href="home.php?mod=space&uid=` + people["uid"] + `">` + people["user"] + `</a><span>` + people["time"] + `</span><span
class="y">总天数 ` + people["days"] + `天</span></h4>
<p class="f_0">月天数 ` + people["monthDays"] + ` 天
,
上次奖励
` + people["reward"] + `</p>
</td>
</tr>
</tbody>
`
})
let latestHTML = `<li class="styli_h bg_e"></li>
<div class="comiis_topnv bg_f b_t b_b">
<ul class="comiis_flex">
<li class="flex"><a href="javascript:;" id="k_misignlist_today" onclick="ajaxlist('today');">今日排行</a></li>
<li class="flex f_0"><em class="bg_0"></em><a href="javascript:;" id="k_misignlist_today_latest" onclick="ajaxlist('todayLatest');">今日最先</a>
</li>
<li class="flex"><a href="javascript:;" id="k_misignlist_month" onclick="ajaxlist('month');" class="f_c">本月排行</a>
</li>
<li class="flex"><a href="javascript:;" id="k_misignlist_zong" onclick="ajaxlist('zong');" class="f_c">总排行</a></li>
</ul>
</div>
<div class="k_misign_wp">
<div class="k_misign_list bg_f">
<table id="misign_list">
` + peopleHTML + `
</table>
</div>
</div>`
changeRankList(latestHTML, listtype)
} else {
$jq.ajax({
type: 'GET',
url: "plugin.php?id=k_misign:sign&operation=" + urlextra,
async: false,
dataType: 'html',
success: function (data) {
// console.log(data);
data = data.replace(`今日排行</a></li>`, `今日排行</a></li><li class="flex"><a href="javascript:;" id="k_misignlist_today_latest" onclick="ajaxlist('todayLatest');">今日最先</a></li>`);
changeRankList(data, listtype);
},
complete: function (XHR, TS) {
XHR = null
}
});
}
}
}
}
const blackHome = {
showBlackHomeView: async () => { // 显示小黑屋界面
$jq.NZ_MsgBox.alert({
title: "小黑屋名单",
content: "获取中",
type: "",
location: "center",
buttons: {
confirm: {
text: "确定"
}
}
});
let blacklistret = await blackHome.getBlackList('');
if (blacklistret == null) {
$jq(".msgcon").html("获取小黑屋名单失败,请重新获取");
return
};
let blacklist = window.eval('(' + blacklistret + ')');
let blackContent = '';
function sortByProperTyName(data, propertyname) {
let _list_ = [];
$jq.each(data, function (index, value) {
let date = value["dateline"].match(/([0-9]{4}-[0-9]{1,2}-[0-9]{1,2}[\s]*[0-9]{1,2}:[0-9]{1,2})/g)[0];
date = date.substring(0, 19);
date = date.replace(/-/g, '/');
let timestamp = new Date(date).getTime();
value["time"] = timestamp;
_list_ = _list_.concat(value);
});
function compareDesc(propertyName) {
return function (object1, object2) {
var value1 = object1[propertyName];
var value2 = object2[propertyName];
if (value2 < value1) {
return -1;
} else if (value2 > value1) {
return 1;
} else {
return 0;
}
}
}
_list_.sort(compareDesc("time"));
return _list_;
}
let newBlacklist = sortByProperTyName(blacklist["data"], "time");
$jq.each(newBlacklist, function (index, value) {
let blackreson = (value["reason"] == "") ? "无" : value["reason"];
blackContent = blackContent + `
<tbody id="autolist">
<tr>
<td class="k_misign_lu" style="text-align: center;overflow-wrap: break-word;width: 76px;">
<a href="home.php?mod=space&uid=` + value["uid"] + `&do=profile">
<img src="https://avatar-bbs.mt2.cn/uc_server/avatar.php?uid=` + value["uid"] + `&size=small">
</a>
<div class="f_c" style="display: flex;justify-content: center;margin-top: 5px;word-break: break-word;">
<h4>
<a href="home.php?mod=space&uid=` + value["uid"] + `&do=profile">` + value["username"] + `</a>
</h4>
</div>
</td>
<td class="k_misign_ll" style="width: 10px;">
<span></span>
</td>
<td class="k_misign_lc" style="max-width: 200px;">
<div class="f_c" style="display: flex;justify-content: space-between;">
<h4>
<div class="y">操作时间: ` + value["dateline"] + `</div>
</h4>
</div>
<div class="f_c" style="display: flex;justify-content: space-between;">
<p class="f_0">操作行为: ` + value["action"] + `</p>
</div>
<div class="f_c" style="display: flex;justify-content: space-between;">
<p class="f_0">过期时间: ` + value["groupexpiry"] + `</p>
</div>
<div class="f_c" style="display: flex;justify-content: space-between;">
<p class="f_0" style="color: #fc2a2a !important;">操作人员: ` + value["operator"] + `</p>
</div>
<div class="f_c" style="display: flex;justify-content: space-between;">操作理由: ` + blackreson + `</div>
</td>
</tr>
<tr style="height:15px;"></tr>
</tbody>
`;
// console.log(value);
})
let mainBlackContent = '<table id="misign_list" style="overflow: auto;height: inherit;margin: 15px 0px;">' + blackContent + "</table>";
$jq(".msgcon").html(mainBlackContent);
$jq(".NZ-MsgBox-alert.NZ-MsgBox--motion").css("top", "100px");
$jq(".msgcon").css("height", "400px");
},
insertMobileBlackHomeButton: async function () { // 插入手机版查看小黑屋的按钮
if ((window.location.href.match(mt_config.rexp.bbs) != null) && (GM_getValue("v30"))) {
// @require https://cdn.bootcdn.net/ajax/libs/SyntaxHighlighter/3.0.83/scripts/shCore.js
// @require https://cdn.bootcdn.net/ajax/libs/SyntaxHighlighter/3.0.83/scripts/shBrushJScript.js
// gitee需要公开仓库,那我只能引用资源站的js和css了
// 主页 https://www.jq22.com/jquery-info24191
// https://gitee.com/whitesev/static_resource/raw/master/NZ_MsgBox/Js/NZ-Plugin/Js/NZ-MsgBox.min.js
// https://gitee.com/whitesev/static_resource/raw/master/NZ_MsgBox/Js/NZ-Plugin/Js/NZ-Drag.min.js
// https://gitee.com/whitesev/static_resource/raw/master/NZ_MsgBox/Js/NZ-Plugin/Css/NZ-MsgBox.min.css
if(typeof $jq.NZ_MsgBox == "undefined" || typeof $ != 'undefined' && $.NZ_MsgBox ){
await GM_asyncLoadScript("https://www.jq22.com/demo/NZ-Plugin-MsgBox202201130154/Js/NZ-Plugin/Js/NZ-MsgBox.min.js");
await GM_asyncLoadScript("https://www.jq22.com/demo/NZ-Plugin-MsgBox202201130154/Js/NZ-Plugin/Js/NZ-Drag.min.js");
}
await GM_asyncLoadStyleSheet("https://www.jq22.com/demo/NZ-Plugin-MsgBox202201130154/Js/NZ-Plugin/Css/NZ-MsgBox.min.css");
let comiis_left_Touch = document.createElement("li");
comiis_left_Touch.className = "comiis_left_Touch";
let black_home_ele = document.createElement("a");
black_home_ele.setAttribute("href", "javascript:;");
black_home_ele.className = "blacklist";
black_home_ele.innerHTML = `
<div class="styli_tit f_c">
<i class="comiis_font" style="color: #000;"></i>
</div>
<div class="flex">小黑屋</div>
<div class="styli_ico">
<i class="comiis_font f_e"></i>
</div>`;
GM_addStyle(`
.NZ-MsgBox-alert .msgcontainer .msgtitle {
text-align: center !important;
}
#autolist .k_misign_lu img {
width: 40px;
height: 40px;
-moz-border-radius: 20px;
-webkit-border-radius: 20px;
border-radius: 20px;
}
.k_misign_lc .f_c{
margin: 5px 0px;
}`)
black_home_ele.onclick = () => {
blackHome.showBlackHomeView();
}
// Array.from(document.querySelectorAll(".comiis_myinfo_list.bg_f.cl")).forEach((ele) => {
// if (ele.innerText.match(/消息提醒|资料设置|我的积分|我的勋章|我的道具/)) {
// ele.append(black_home_ele);
// return;
// }
// })
comiis_left_Touch.append(black_home_ele);
$jq(".comiis_sidenv_box .sidenv_li .comiis_left_Touch.bdew").append(comiis_left_Touch);
}
},
getBlackList: async (cid) => { // 获取黑名单列表
return new Promise(res => {
GM_xmlhttpRequest({
url: "https://bbs.binmt.cc/forum.php?mod=misc&action=showdarkroom&cid=" + cid + "&t=&ajaxdata=json",
timeout: 5000,
method: "GET",
async: false,
headers: {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.64 Safari/537.36 Edg/101.0.1210.53",
},
onload: (r) => {
res(r.responseText);
},
onerror: (r) => {
console.log(r);
res();
}
})
})
}
}
const quickUBB = {
code: {
"rainbow1": {
"key": "转普通彩虹",
"value": "",
"isFunc": true,
"num": 1
},
"rainbow2": {
"key": "转黑白彩虹",
"value": "",
"isFunc": true,
"num": 2
},
"rainbow3": {
"key": "转黑红彩虹",
"value": "",
"isFunc": true,
"num": 3
},
"rainbow4": {
"key": "转蓝绿彩虹",
"value": "",
"isFunc": true,
"num": 4
},
"size": {
"key": "size",
"value": "[size=][/size]",
"tagL": "=",
"tagR": "]",
"L": "[size=]",
"R": "[/size]",
"cursorL": "[size=",
"cursorLength": 6
},
"color": {
"key": "color",
"value": "[color=][/color]",
"tagL": "=",
"tagR": "]",
"L": "[color=]",
"R": "[/color]",
"cursorL": "[color=",
"cursorLength": 7
},
"b": {
"key": "加粗",
"value": "[b][/b]",
"tagL": "]",
"tagR": "[",
"L": "[b]",
"R": "[/b]",
"cursorR": "[/b]",
"cursorLength": 4
},
"u": {
"key": "下划线",
"value": "[u][/u]",
"tagL": "]",
"tagR": "[",
"L": "[u]",
"R": "[/u]",
"cursorR": "[/u]",
"cursorLength": 4
},
"i": {
"key": "倾斜",
"value": "[i][/i]",
"tagL": "]",
"tagR": "[",
"L": "[i]",
"R": "[/i]",
"cursorR": "[/i]",
"cursorLength": 4
},
"s": {
"key": "中划线",
"value": "[s][/s]",
"tagL": "]",
"tagR": "[",
"L": "[s]",
"R": "[/s]",
"cursorR": "[/s]",
"cursorLength": 4
},
"lineFeed": {
"key": "换行",
"value": "[*]",
"L": "",
"R": "[*]",
"cursorL": "[*]",
"cursorLength": 3
},
"longHorizontalLine": {
"key": "长横线",
"value": "[hr]",
"L": "",
"R": "[hr]",
"cursorL": "[hr]",
"cursorLength": 4
},
"link": {
"key": "链接",
"value": "[url=][/url]",
"tagL": "=",
"tagR": "]",
"L": "[url=]",
"R": "[/url]",
"cursorL": "[url=",
"cursorLength": 5
},
"hide": {
"key": "隐藏",
"value": "[hide][/hide]",
"tagL": "]",
"tagR": "[",
"L": "[hide]",
"R": "[/hide]",
"cursorR": "[/hide]",
"cursorLength": 7
},
"quote": {
"key": "引用",
"value": "[quote][/quote]",
"tagL": "]",
"tagR": "[",
"L": "[quote]",
"R": "[/quote]",
"cursorR": "[/quote]",
"cursorLength": 8
}
},
insertQuickReplyUBB: () => { // 快捷回复
if (GM_getValue("v31") && (window.location.href.match(mt_config.rexp.forum_post) != null)) {
quickUBB.jqueryExtraFunction();
$jq(".comiis_post_ico .comiis_pictitle").after($jq(`<a href="javascript:;" class="commis_insert"><i class="comiis_font"><em>插入</em></i></a>`));
$jq(".comiis_post_ico.comiis_minipost_icot.f_c.cl").on("click", "a", (e) => {
$jq("#comiis_post_tab div.bg_f").hide()
e.currentTarget.style.display = "";
if (e.currentTarget.className != "comiis_pictitle") {
e.currentTarget.style.display = "block";
}
})
let message_ele = $jq("#needmessage");
let fastpostsubmitline_ele = $jq("#fastpostsubmitline");
if (message_ele && fastpostsubmitline_ele) {
$jq("#comiis_post_tab").append($jq(`
<div class="bg_f b_b comiis_input_style cl" style="display: none;"><div class="comiis_post_urlico b_b"><ul></ul></div></div>
`));
$jq.each(quickUBB.code, function (index, value) {
let ubbs = $jq(`<li class="quickUBBs"><a href="javascript:;" class="comiis_xifont f_d"><i class="comiis_font"></i>${value["key"]}</a></li>`);
ubbs.on("click", (e) => {
$jq.each($jq("#comiis_post_tab div.comiis_post_urlico ul li.quickUBBs a.comiis_xifont"), (i, v) => {
v.className = "comiis_xifont f_d";
if (v == e.target) {
v.className = "comiis_xifont f_0";
}
});
let userInput = prompt(`请输入需要${value["key"]}的文字`, value["value"]);
if (value["isFunc"]) {
userInput = quickUBB.set_rainbow(value["num"], userInput);
}
if (userInput != null && userInput.trim()) {
comiis_addsmilies(userInput);
}
})
$jq("#comiis_post_tab div.comiis_post_urlico ul").append(ubbs[0]);
})
} else {
console.log("未找到快捷回复框");
}
}
},
insertReplayUBB: () => { // 具体回复
if (!GM_getValue("v35")) {
console.log("v35未开启");
return;
}
if (window.location.href.match(mt_config.rexp.reply_forum) == null) {
console.log("未在回复界面");
return;
}
let insertDOM = $jq(".comiis_post_urlico");
if (!insertDOM) {
console.log("未找到插入元素");
return;
}
let parentEle = $jq(".comiis_post_urlico > ul")[0];
let contentEle = $jq("#comiis_post_qydiv > ul");
quickUBB.jqueryExtraFunction();
$jq.each(quickUBB.code, function (key, value) {
let ubbs = $jq(`<li class="quickUBBs"><a href="javascript:;" class="comiis_xifont f_d"><i class="comiis_font"></i>${value["key"]}</a></li>`);
ubbs.on("click", (e) => {
let bottomEle = $jq(`#comiis_post_qydiv li[data-key='${value.key}']`);
if (!bottomEle.length) {
console.log("未找到该元素");
return
}
let contentIndex = 7 + Object.keys(quickUBB.code).indexOf(key);
$jq("#comiis_post_qydiv ul li").hide().eq(contentIndex).fadeIn();
$jq.each($jq("#comiis_post_tab div.comiis_post_urlico ul li a.comiis_xifont"), (i, v) => {
v.className = "comiis_xifont f_d";
if (v == e.target) {
v.className = "comiis_xifont f_0";
}
});
})
parentEle.append(ubbs[0]);
let ubbs_content = document.createElement("li");
ubbs_content.setAttribute("style", "display: none;");
ubbs_content.setAttribute("data-key", value["key"]);
ubbs_content.innerHTML = `
<div class="comiis_styli_m f15" style="padding-top:12px;">
<div class="bg_e comiis_p5" style="border-radius:4px"><textarea class="comiis_pt kmshow f_c" id="comiis_input_${key}" style="font-size:15px" placeholder="请输入需要${value["key"]}的文字"></textarea></div>
</div>
<div class="comiis_styli_m f15 comiis_flex" style="padding-top:0;">
<div class="styli_tit"><button class="comiis_sendbtn bg_0 f_f" data-keyI="${key}" type="button">插入</button></div>
<div class="flex"></div>
</div>`;
contentEle.append(ubbs_content);
$jq(`.comiis_sendbtn[data-keyI="${key}"]`).on("click", () => {
let text = $jq(`#comiis_input_${key}`).val();
if (text == '') {
popup.open('请输入需要插入的内容', 'alert');
return;
}
if (quickUBB.code[key]["isFunc"]) {
text = quickUBB.set_rainbow(quickUBB.code[key]["num"], text);
}
if (quickUBB.code[key].hasOwnProperty("L")) {
text = quickUBB.code[key]['L'] + text + quickUBB.code[key]['R'];
}
$jq("#needmessage").insertAtCaret(text);
// if (quickUBB.code[key]["tagL"] != undefined || quickUBB.code[key]["tagR"] != undefined) {
// $jq("#needmessage").moveCursorInCenterByText(quickUBB.code[key]["tagL"], quickUBB.code[key]["tagR"]);
// }
if (quickUBB.code[key].hasOwnProperty("cursorL")) {
$jq("#needmessage").moveCursorToCenterByTextWithLeft(quickUBB.code[key]["cursorL"], quickUBB.code[key]["cursorLength"]);
}
if (quickUBB.code[key].hasOwnProperty("cursorR")) {
$jq("#needmessage").moveCursorToCenterByTextWithRight(quickUBB.code[key]["cursorR"], quickUBB.code[key]["cursorLength"]);
}
})
});
},
set_rainbow: (num, text) => {
if (text == "") {
return '';
}
var wr_text = text;
var wr_code, wr_rgb, r, g, b, i, j, istep
var wr_rgb1, wr_rgb2, r1, g1, b1, r2, g2, b2
r1 = g1 = b1 = r2 = g2 = b2 = 0;
r = 0;
g = 0;
b = 0;
istep = 0;
wr_code = '';
if (num == 1) {
istep = 40;
r = 255;
i = 1;
j = 0;
do {
if (wr_text.charCodeAt(j) != 32) {
if (g + istep < 256) {
if (i == 1) g += istep;
} else if (i == 1) {
i = 2;
g = 255;
}
if (r - istep > -1) {
if (i == 2) r -= istep;
} else if (i == 2) {
i = 3;
r = 0;
}
if (b + istep < 256) {
if (i == 3) b += istep;
} else if (i == 3) {
i = 4;
b = 255;
}
if (g - istep > -1) {
if (i == 4) g -= istep;
} else if (i == 4) {
i = 5;
g = 0;
}
if (r + istep < 256) {
if (i == 5) r += istep;
} else if (i == 5) {
i = 6;
r = 255;
}
if (b - istep > -1) {
if (i == 6) b -= istep;
} else if (i == 6) {
i = 1;
b = 0;
}
wr_rgb = '';
wr_rgb += parseInt(r).toString(16).length == 1 ? 0 + parseInt(r).toString(16) : parseInt(r).toString(16);
wr_rgb += parseInt(g).toString(16).length == 1 ? 0 + parseInt(g).toString(16) : parseInt(g).toString(16);
wr_rgb += parseInt(b).toString(16).length == 1 ? 0 + parseInt(b).toString(16) : parseInt(b).toString(16);
wr_rgb = wr_rgb.toUpperCase();
wr_code += '[color=#' + wr_rgb + ']' + wr_text.charAt(j) + '[/color]';
} else {
wr_code += wr_text.charAt(j);
}
j++;
} while (j < wr_text.length);
} else if (num == 2) {
istep = 255 / wr_text.length;
for (i = 1; i < wr_text.length + 1; i++) {
if (wr_text.charCodeAt(i - 1) != 32) {
r += istep;
g += istep;
b += istep;
if (r > 255) r = 255;
if (g > 255) g = 255;
if (b > 255) b = 255;
wr_rgb = '';
wr_rgb += parseInt(r).toString(16).length == 1 ? 0 + parseInt(r).toString(16) : parseInt(r).toString(16);
wr_rgb += parseInt(g).toString(16).length == 1 ? 0 + parseInt(g).toString(16) : parseInt(g).toString(16);
wr_rgb += parseInt(b).toString(16).length == 1 ? 0 + parseInt(b).toString(16) : parseInt(b).toString(16);
wr_rgb = wr_rgb.toUpperCase();
wr_code += '[color=#' + wr_rgb + ']' + wr_text.charAt(i - 1) + '[/color]';
} else {
wr_code += wr_text.charAt(i - 1);
}
}
} else if (num == 3) {
istep = 255 / wr_text.length;
for (i = 1; i < wr_text.length + 1; i++) {
if (wr_text.charCodeAt(i - 1) != 32) {
r += istep;
g = 29;
b = 36;
if (r > 255) r = 255;
if (g > 255) g = 255;
if (b > 255) b = 255;
wr_rgb = '';
wr_rgb += parseInt(r).toString(16).length == 1 ? 0 + parseInt(r).toString(16) : parseInt(r).toString(16);
wr_rgb += parseInt(g).toString(16).length == 1 ? 0 + parseInt(g).toString(16) : parseInt(g).toString(16);
wr_rgb += parseInt(b).toString(16).length == 1 ? 0 + parseInt(b).toString(16) : parseInt(b).toString(16);
wr_rgb = wr_rgb.toUpperCase();
wr_code += '[color=#' + wr_rgb + ']' + wr_text.charAt(i - 1) + '[/color]';
} else {
wr_code += wr_text.charAt(i - 1);
}
}
} else if (num == 4) {
istep = 255 / wr_text.length;
for (i = 1; i < wr_text.length + 1; i++) {
if (wr_text.charCodeAt(i - 1) != 32) {
r = 0;
g = 174;
b += istep;
if (r > 255) r = 255;
if (g > 255) g = 255;
if (b > 255) b = 255;
wr_rgb = '';
wr_rgb += parseInt(r).toString(16).length == 1 ? 0 + parseInt(r).toString(16) : parseInt(r).toString(16);
wr_rgb += parseInt(g).toString(16).length == 1 ? 0 + parseInt(g).toString(16) : parseInt(g).toString(16);
wr_rgb += parseInt(255 - b).toString(16).length == 1 ? 0 + parseInt(255 - b).toString(16) : parseInt(255 - b).toString(16);
wr_rgb = wr_rgb.toUpperCase();
wr_code += '[color=#' + wr_rgb + ']' + wr_text.charAt(i - 1) + '[/color]';
} else {
wr_code += wr_text.charAt(i - 1);
}
}
}
return wr_code;
},
jqueryExtraFunction: () => {
$jq.fn.extend({
insertAtCaret: function (myValue) {
var $t = $jq(this)[0];
if (document.selection) {
this.focus();
var sel = document.selection.createRange();
sel.text = myValue;
this.focus();
} else
if ($t.selectionStart || $t.selectionStart == '0') {
var startPos = $t.selectionStart;
var endPos = $t.selectionEnd;
var scrollTop = $t.scrollTop;
$t.value = $t.value.substring(0, startPos) + myValue + $t.value.substring(endPos, $t.value.length);
this.focus();
$t.selectionStart = startPos + myValue.length;
$t.selectionEnd = startPos + myValue.length;
$t.scrollTop = scrollTop;
} else {
this.value += myValue;
this.focus();
}
},
selectRange: function (start, end) {
if (end === undefined) {
end = start;
}
return this.each(function () {
if ('selectionStart' in this) {
this.selectionStart = start;
this.selectionEnd = end;
} else if (this.setSelectionRange) {
this.setSelectionRange(start, end);
} else if (this.createTextRange) {
var range = this.createTextRange();
range.collapse(true);
range.moveEnd('character', end);
range.moveStart('character', start);
range.select();
}
});
},
getCursorPosition: function () {
var el = $jq(this)[0];
var pos = 0;
if ('selectionStart' in el) {
pos = el.selectionStart;
} else if ('selection' in document) {
el.focus();
var Sel = document.selection.createRange();
var SelLength = document.selection.createRange().text.length;
Sel.moveStart('character', -el.value.length);
pos = Sel.text.length - SelLength;
}
return pos;
},
moveCursorInCenterByText: function (leftTextFlag, rightTextFlag) {
var el = $jq(this)[0];
var el_text = el.value;
for (let i = el.selectionStart - 1; i > 0; i--) {
let LText = el_text[i - 1];
let currentText = el_text[i];
if (LText == leftTextFlag && currentText == rightTextFlag) {
this.selectRange(i);
break;
}
}
},
moveCursorToCenterByTextWithLeft: function (leftMatchText, _length_) {
var el = $jq(this)[0];
var el_text = el.value;
for (let i = el.selectionStart - 1; i > 0; i--) {
let lTexts = el_text.substring(i - _length_, i);
if (lTexts == leftMatchText) {
this.selectRange(i);
break;
}
}
},
moveCursorToCenterByTextWithRight: function (rightMatchText, _length_) {
var el = $jq(this)[0];
var el_text = el.value;
for (let i = el.selectionStart - 1; i > 0; i--) {
let rTexts = el_text.substring(i, i + _length_);
if (rTexts == rightMatchText) {
this.selectRange(i + _length_);
break;
}
}
}
});
}
}
function blacklistShieldUsersOrBlocks() { // 黑名单-屏蔽用户或板块
if (location.href.match(mt_config.rexp.home_space_url) != null) {
var white_space_ele = document.createElement("div");
var black_list_ele = document.createElement("div");
white_space_ele.className = "styli_h cl";
black_list_ele.setAttribute("id", "blacklistallmain");
black_list_ele.className = "comiis_myinfo_list bg_f cl";
black_list_ele.innerHTML = `<li class="comiis_styli b_b cl">
<textarea name="blacklistuid" id="blacklistuid" placeholder="输入想要屏蔽的用户的uid,多个uid用英文逗号分隔,如1234,5678,9231"></textarea>
<textarea name="blacklistplate" id="blacklistplate" placeholder="输入想要屏蔽的板块,多个板块用顿号分隔,如求助问答、休闲灌水"></textarea>
<a href="javascript:void(0)" id="blacklistsave" class="comiis_flex comiis_styli bg_f b_t cl">
<div class="flex">保存</div>
</a>
</li>`;
GM_addStyle(`
#blacklistallmain{
height: 232px;
}
#blacklistallmain li.comiis_styli{
height: 180px;
}
#blacklistallmain #blacklistuid{
width: 90%;
resize: none;
opacity: 0.7;
height: 70% !important;
line-height: inherit;
-webkit-appearance: none;
border: none !important;
font-size: 14px;
vertical-align: middle;
background-color: transparent;
border-bottom: 3px solid #efefef !important;
}
#blacklistallmain #blacklistplate{
width: 90%;
resize: none;
opacity: 0.7;
height: 30% !important;
line-height: inherit;
-webkit-appearance: none;
border: none !important;
font-size: 14px;
vertical-align: middle;
background-color: transparent;
}
#blacklistsave{
text-align: center;
background: transparent !important;
border-color: transparent !important;
}
`);
let mt_commis_menu = document.getElementsByClassName("comiis_myinfo cl")[0];
mt_commis_menu.appendChild(white_space_ele);
mt_commis_menu.appendChild(black_list_ele);
mt_commis_menu.appendChild(white_space_ele);
document.getElementById("blacklistuid").textContent = GM_getValue("blacklistuid") ? GM_getValue("blacklistuid") : "";
document.getElementById("blacklistplate").textContent = GM_getValue("blacklistuid") ? GM_getValue("blacklistuid") : "";
document.getElementById("blacklistsave").onclick = () => {
let blackListUIDValue = document.getElementById("blacklistuid").value;
let blackListPlateValue = document.getElementById("blacklistplate").value;
GM_setValue("blacklistuid", blackListUIDValue);
GM_setValue("blacklistplate", blackListPlateValue);
popup.open("保存成功", "alert");
// iosOverlay({
// text: "保存成功",
// duration: 2000,
// icon: "https://www.helloimg.com/images/2022/05/24/ZoDS05.png"
// });
}
}
}
function identifyLinks() { // 识别链接
if (GM_getValue("v2")) {
/*TEXT link to Clickable Hyperlink From Via*/
var clearLink, excludedTags, filter, linkMixInit, linkPack, linkify, observePage, observer, setLink, url_regexp, xpath;
url_regexp = /((https?:\/\/|www\.)[\x21-\x7e]+[\w\/]|(\w[\w._-]+\.(com|cn|org|net|info|tv|cc))(\/[\x21-\x7e]*[\w\/])?|ed2k:\/\/[\x21-\x7e]+\|\/|thunder:\/\/[\x21-\x7e]+=)/gi;
clearLink = function (a) {
var b;
a = null != (b = a.originalTarget) ? b : a.target;
if (null != a && "a" === a.localName && -1 !== a.className.indexOf("texttolink") && (b = a.getAttribute("href"), 0 !== b.indexOf("http") && 0 !== b.indexOf("ed2k://") && 0 !== b.indexOf("thunder://"))) return a.setAttribute("href", "http://" + b)
};
document.addEventListener("mouseover", clearLink);
setLink = function (a) {
if (null != a && a.hasOwnProperty("className") && typeof (a.parentNode.className) === "string" && -1 === a.parentNode.className.indexOf("texttolink") && "#cdata-section" !== a.nodeName) {
var b = a.textContent.replace(url_regexp, '<a href="$1" target="_blank" class="texttolink" style="border: 1px solid #f00;">$1</a>');
if (a.textContent.length !== b.length) {
var c = document.createElement("span");
c.innerHTML = b;
return a.parentNode.replaceChild(c, a)
}
}
};
excludedTags = "a svg canvas applet input button area pre embed frame frameset head iframe img option map meta noscript object script style textarea code".split(" ");
xpath = "//text()[not(ancestor::" + excludedTags.join(") and not(ancestor::") + ")]";
filter = new RegExp("^(" + excludedTags.join("|") + ")$", "i");
linkPack = function (a, b) {
var c, d;
if (b + 1E4 < a.snapshotLength) {
var e = c = b;
for (d = b + 1E4; b <= d ? c <= d : c >= d; e = b <= d ? ++c : --c) setLink(a.snapshotItem(e));
setTimeout(function () {
return linkPack(a, b + 1E4)
}, 15)
} else
for (e = c = b, d = a.snapshotLength; b <= d ? c <= d : c >= d; e = b <= d ? ++c : --c) setLink(a.snapshotItem(e))
};
linkify = function (a) {
a = document.evaluate(xpath, a, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
return linkPack(a, 0)
};
observePage = function (a) {
for (a = document.createTreeWalker(a, NodeFilter.SHOW_TEXT, {
acceptNode: function (a) {
if (!filter.test(a.parentNode.localName)) return NodeFilter.FILTER_ACCEPT
}
}, !1); a.nextNode();) setLink(a.currentNode)
};
observer = new window.MutationObserver(function (a) {
var b, c;
var d = 0;
for (b = a.length; d < b; d++) {
var e = a[d];
if ("childList" === e.type) {
var g = e.addedNodes;
var f = 0;
for (c = g.length; f < c; f++) e = g[f], observePage(e)
}
}
});
linkMixInit = function () {
if (window === window.top && "" !== window.document.title) return linkify(document.body), observer.observe(document.body, {
childList: !0,
subtree: !0
})
};
var clearlinkF = function (a) {
var url = a.getAttribute("href");
if (0 !== url.indexOf("http") && 0 !== url.indexOf("ed2k://") && 0 !== url.indexOf("thunder://")) return a.setAttribute("href", "http://" + url)
},
clearlinkE = function () {
for (var a = document.getElementsByClassName("texttolink"), b = 0; b < a.length; b++) clearlinkF(a[b])
};
setTimeout(clearlinkE, 2500);
setTimeout(linkMixInit, 1100);
}
}
function detectUserOnlineStatus() { // 探测用户在线状态
if (window.location.href.match(mt_config.rexp.forum_post_pc)) {
var quanju = [];
var cishu = 0;
for (var sss = document.getElementsByClassName("pls favatar"), ll = 0; ll < sss.length; ll++) {
var sendmessage = sss[ll].getElementsByClassName("comiis_o cl")
if (sendmessage.length == 0) {} else {
var sendmessageurl = sendmessage[0].getElementsByTagName('a')[1].href;
let xhr = new XMLHttpRequest();
xhr.open("GET", sendmessageurl, false);
xhr.onreadystatechange = function () {
if (xhr.readyState == 4) {
let pattern = /正在.*]/g;
let str = xhr.responseText;
let newstr = str.match(pattern)[0];
quanju.push(newstr);
}
}
xhr.send();
if (quanju[cishu].match('离线')) {
cishu = cishu + 1;
var imi2 = document.createElement('img');
imi2.src = 'https:\/\/cdn2.bbs.binmt.cc\/static\/image\/smiley\/doge\/54.png';
imi2.smilied = '1353';
imi2.border = "0";
imi2.style = 'float:right';
sss[ll].insertAdjacentElement('afterbegin', imi2);
} else {
cishu = cishu + 1;
var imi = document.createElement('img');
imi.src = 'https:\/\/cdn2.bbs.binmt.cc\/static\/image/smiley\/doge\/35.png';
imi.smilied = '1384';
imi.border = "0";
imi.style = 'float:right';
sss[ll].insertAdjacentElement('afterbegin', imi);
}
}
}
}
}
function commentsAddReviews() { // 评论区添加点评功能
if (GM_getValue("v6") && location.href.match(mt_config.rexp.forum_post)) {
var hongbao = document.getElementsByClassName("bottom_zhan y");
if (hongbao.length == 0) {} else {
var cishu2 = 0;
var replyhref = hongbao[cishu2].getElementsByTagName('a')[0].href;
var page = replyhref.match(mt_config.rexp.forum_post_page)[1];
//console.log(page);
for (cishu2 = 0; cishu2 < hongbao.length; cishu2++) {
if (hongbao[cishu2].children.length == 1) {
var rewardhref = hongbao[cishu2].getElementsByTagName('a')[0].href.replace('mod=post&', 'mod=misc&');
rewardhref = rewardhref.replace("action=reply&", "action=comment&");
var reviews_href = rewardhref + '&extra=page%3D1&page=' + page;
let reviews_pid = hongbao[cishu2].parentElement.parentElement.id.replace("pid", "&pid=");
reviews_href = reviews_href + reviews_pid;
//console.log(rewardhref)
var oa = document.createElement('a');
var ob = document.createElement('i');
var lm = document.getElementsByClassName("bottom_zhan y")[cishu2];
oa.href = reviews_href;
oa.className = "f_c dialog";
ob.style = "content: url(https://s1.ax1x.com/2020/04/26/Jcq8VU.png);height: 15px;";
ob.className = "comiis_font mt_review";
ob.innerHTML = "";
oa.appendChild(ob);
let review_username = hongbao[cishu2].parentElement.parentElement.getElementsByClassName("top_user f_b")[0].text;
oa.onclick = function () {
let click_time = Date.now();
var mt_interval = setInterval(function () {
let run_time = parseInt((Date.now() - click_time) / 1000);
if (run_time >= 5) {
console.log("超时");
clearInterval(mt_interval);
} else if (document.querySelector("div[id=ntcmsg_popmenu]>div>span.f_c") != null) {
console.log("存在,清理定时器");
console.log("点评用户:", review_username);
console.log("该对象出现用时:", run_time);
try {
document.querySelector("div[id=ntcmsg_popmenu]>div>span.f_c").innerText = "点评 " + review_username;
} catch (err) {
console.log("修改点评失败", err);
}
clearInterval(mt_interval);
}
}, 100)
}
lm.insertAdjacentElement('afterBegin', oa);
} else {
console.log("已有点评按钮,无需再次添加");
}
}
}
}
}
function modifyForumPostFontColor() { //字体颜色改为黑色
if (GM_getValue("v3") && location.href.match(mt_config.rexp.forum_post)) {
var hide = document.getElementsByTagName('font');
var i = 0;
for (i = 0; i < hide.length; i++) {
hide[i].removeAttribute('color');
hide[i].removeAttribute('style');
hide[i].removeAttribute('size');
}
var content = document.getElementsByClassName("comiis_message bg_f view_all cl message");
var rule = /<br>| |<font.*?>|<\/font>|<strike>|<strong>|<i>|<u>|align=".*?"/g;
var j = 0,
k = 1;
for (j = 0; j < content.length; j++ & k++) {
content[j].innerHTML = content[j].innerHTML.replace(rule, '');
}
}
}
function collectionForumPost() { // 悬浮按钮-添加收藏帖子功能
var own_formhash = document.querySelector("#scform > input[type=hidden]:nth-child(1)").value;
var collect_href_id = window.location.href.match(mt_config.rexp.forum_post_pc_page)[1];
var collect_href = 'https:\/\/bbs.binmt.cc\/home.php?mod=spacecp&ac=favorite&type=thread&id=' + collect_href_id + '&formhash=' + own_formhash;
var new_collect = document.createElement('span');
var old_Suspended = document.getElementById("scrolltop");
new_collect.innerHTML = '<a href="' + collect_href + '" id="k_favorite" onclick="showWindow(this.id, this.href, \'get\', 0);" onmouseover="this.title = $(\'favoritenumber\').innerHTML + \' 人收藏\'" ><img src="https:\/\/s1.ax1x.com\/2020\/04\/29\/JTk3lD.gif" height="26" width="26" style="position:absolute;top:10px;left:11px"><\/a>';
old_Suspended.insertAdjacentElement('afterBegin', new_collect);
}
function quickReply() { //快捷回复
document.querySelector("#scrolltop > span:nth-child(2) > a").onclick = function () {
showWindow('reply', this.href);
var a = document.querySelector("#postsubmit");
setTimeout(
'document.querySelector("#moreconf").innerHTML=document.querySelector("#moreconf").innerHTML+\'<button type="button" id = "insertspace2" style="float: left;">一键空格<\/button>\';document.querySelector("#insertspace2").onclick=function(){document.querySelector("#postmessage").value=document.querySelector("#postmessage").value+" ";}', 200)
}
}
function showUserLevel() { // 显示用户具体等级
var a = document.getElementsByClassName("pls favatar");
var i = 0;
var e = "0级";
for (i = 0; i < a.length; i++) {
var b = a[i].getElementsByTagName("em")[1].outerText;
var c = a[i].getElementsByTagName("tr")[0];
var d = document.createElement("td");
switch (b) {
case "幼儿园":
e = "1级";
break;
case "小学生":
e = "2级";
break;
case "初中生":
e = "3级";
break;
case "高中生":
e = "4级";
break;
case "大学生":
e = "5级";
break;
case "硕士生":
e = "6级";
break;
case "博士生":
case "实习版主":
case "版主":
case "审核员":
e = "7级";
break;
case "博士后":
case "超级版主":
case "网站编辑":
e = "8级";
break;
case "管理员":
case "信息监察员":
e = "9级";
break;
}
d.innerHTML = '<p><a class="dj">' + e + '<\/a><\/p>Lv';
c.appendChild(d);
}
}
function showUserUID() { //显示用户的uid
if (GM_getValue("v15") &&
((window.location.href.match(mt_config.rexp.forum_post_guide_url) ||
(window.location.href.match(mt_config.rexp.forum_post)) ||
(window.location.href.match(mt_config.rexp.plate_url)) ||
(window.location.href.match(mt_config.rexp.search_url))
))) {
window.findUserFormList = false;
window.findUserFormListNums = 0;
let findSetInval = setInterval(function () {
let formList = mt_config.dom_obj.comiis_formlist() ? mt_config.dom_obj.comiis_formlist() : [];
formList = formList.length == 0 ? mt_config.dom_obj.comiis_postli() : formList;
formList = formList.length == 0 ? mt_config.dom_obj.comiis_mmlist() : formList;
window.findUserFormList = formList.length ? true : false;
if (findUserFormListNums >= 10) {
console.log("未出现,清理定时器");
clearInterval(findSetInval);
}
if (window.findUserFormList) {
GM_addStyle(`
.comiis_postli_top.bg_f.b_t h2{
height: auto;
}`);
function matchUIDByArray(data) {
for (let i = 0; i < data.length; i++) {
let url = data[i].href;
let uid = url.match(mt_config.rexp.mt_uid);
if (uid) {
return uid[1];
}
}
return null
}
$jq.each(formList, (index, value) => {
let mtUIDOM = value.getElementsByClassName("mt_uid_set");
if (!mtUIDOM.length) {
let childrenByATagetElement = value.getElementsByTagName("a");
let mt_uid = null;
mt_uid = matchUIDByArray(childrenByATagetElement);
if (mt_uid != null) {
let uid_control = document.createElement("a");
let mtUidDomInsertElement = value.getElementsByClassName("top_lev")[0];
let uid_control_height = getComputedStyle(mtUidDomInsertElement, null)["height"];
let uid_control_margin = getComputedStyle(mtUidDomInsertElement, null)["margin"];
let uid_control_padding = getComputedStyle(mtUidDomInsertElement, null)["padding"];
let uid_control_line_height = getComputedStyle(mtUidDomInsertElement, null)["line-height"];
let uid_control_font = getComputedStyle(mtUidDomInsertElement, null)["font"];
uid_control.className = "mt_uid_set";
uid_control.style = `
font: ${uid_control_font};
background: rgb(255, 118, 0);
color: white;
float: left;
margin: ${uid_control_margin};
padding: ${uid_control_padding};
height: ${uid_control_height};
line-height: ${uid_control_line_height};
border-radius: 1.5px;`;
uid_control.innerHTML = "UID:" + mt_uid;
uid_control.onclick = function () {
try {
GM_setClipboard(mt_uid);
popup.open(`${mt_uid}已复制`, "alert");
// iosOverlay({
// text: mt_uid + "已复制",
// duration: 2000,
// icon: "https://www.helloimg.com/images/2022/05/24/ZoDS05.png"
// });
console.log("复制:", mt_uid)
} catch (err) {
popup.open(`${mt_uid}复制失败`, "alert");
console.log("复制失败:" + mt_uid, err);
// iosOverlay({
// text: mt_uid + "复制失败",
// duration: 2000,
// icon: "https://whitesev.gitee.io/static_resource/ios_loading/img/cross.png"
// });
}
}
mtUidDomInsertElement.parentElement.append(uid_control);
}
}
})
console.log("出现,清理定时器");
clearInterval(findSetInval);
} else {
findUserFormListNums += 1;
}
}, 800)
}
}
function shieldUser() { // 屏蔽用户
if (window.location.href.match(mt_config.rexp.forum_guide_url) || window.location.href.match(mt_config.rexp.plate_url)) {
console.log("屏蔽YH——1");
let infos = document.querySelectorAll(".comiis_forumlist .forumlist_li");
let black_list = GM_getValue("blacklistuid") ? GM_getValue("blacklistuid") : "";
let black_list_array = black_list.split(",");
Array.from(infos).forEach((info) => {
let usr = info.getElementsByClassName("wblist_tximg")[0].href;
let usr_uid = usr.match(mt_config.rexp.mt_uid)[1];
if (black_list_array.indexOf(usr_uid) != -1) {
console.log("屏蔽用户:" + usr_uid);
info.setAttribute("style", "display:none !important;");
}
})
}
if (window.location.href.match(mt_config.rexp.forum_post)) {
console.log("屏蔽YH——2");
let comments = document.querySelectorAll(".comiis_postlist .comiis_postli");
let black_list = GM_getValue("blacklistuid") ? GM_getValue("blacklistuid") : "";
let black_list_array = black_list.split(",");
Array.from(comments).forEach((comment) => {
let usr = comment.getElementsByClassName("postli_top_tximg")[0].href;
let usr_uid = usr.match(mt_config.rexp.mt_uid)[1];
if (black_list_array.indexOf(usr_uid) != -1) {
console.log("屏蔽用户:" + usr_uid);
comment.setAttribute("style", "display:none !important;");
}
})
}
}
function shieldPlate() { // 屏蔽板块
if (window.location.href.match(mt_config.rexp.forum_guide_url)) {
console.log("屏蔽BK");
let infos = document.querySelectorAll(".comiis_forumlist .forumlist_li");
let black_list = GM_getValue("blacklistplate") ? GM_getValue("blacklistplate") : "";
let black_list_array = black_list.split("、");
Array.from(infos).forEach((info) => {
let from_plate = (info.querySelector(".forumlist_li_time a.f_d") || info.querySelector(".comiis_xznalist_bk.cl") ).outerText;
from_plate = from_plate.replace(//g, "");
from_plate = from_plate.replace(/\s*/g, "");
from_plate = from_plate.replace("来自", "");
if (black_list_array.indexOf(from_plate) != -1) {
console.log("屏蔽板块:" + from_plate);
info.setAttribute("style", "display:none !important;");
}
})
}
}
function autoExpendFullTextByForumPost() { //自动展开帖子内容
if (GM_getValue("v18") && location.href.match(mt_config.rexp.forum_post)) {
GM_addStyle(`
div.comiis_message.bg_f.view_one.b_b.cl.message > div.comiis_messages.comiis_aimg_show.cl{
max-height: inherit !important;
overflow-y: inherit !important;
position: inherit !important;
}
.comiis_lookfulltext_key,
.comiis_lookfulltext_bg{
display: none !important;
}`)
}
}
function recoveryIMGWidth() { // 修复图片宽度
if (GM_getValue("v16") && location.href.match(mt_config.rexp.forum_post)) {
GM_addStyle(`
.comiis_messages img{
max-width: 100% !important;
}
`)
}
}
function needRepeatLoadingJSResource() { //帖子内需要重复执行的js
tryCatch(shieldUser);
tryCatch(commentsAddReviews);
tryCatch(identifyLinks);
tryCatch(showUserUID);
tryCatch(previewPictures);
tryCatch(modifyForumPostFontColor);
tryCatch(pageSmallWindowBrowsingForumPost);
popup.init();
}
function loadNextComments() { // 加载下一页的评论
function autoLoadNextPageComments(post_comments_list) { //自动加载下一页的评论
$jq("#loading-comment-tip")[0].parentElement.style.display = "";
let next_page_url = post_comments_list.children[2].href
let isloding_flag = false;
console.log("获取下一页:", next_page_url);
if (next_page_url.indexOf("javascript:;") != -1) {
console.log(post_comments_list);
console.log("无多页评论");
$jq("#loading-comment-tip")[0].parentElement.style.display = "none";
return;
}
function _loadNextComments_() {
if (isloding_flag == false) {
isloding_flag = true;
$jq("#loading-comment-tip").text("正在加载评论中...");
$jq("#loading-comment-tip")[0].parentElement.style.display = "";
$jq.get(next_page_url, function (data, status, xhr) {
console.log("正在请求的下一页url", next_page_url);
let postlist = $jq(data);
let kqideSourceNode = $jq(".comiis_postlist.kqide");
let postDOM = postlist.find(".comiis_postlist.kqide").html();
let get_next_page_url = postlist.find(".nxt");
if (get_next_page_url.length != 0) {
console.log("成功获取到下一页-评论");
next_page_url = get_next_page_url.attr("href");
$jq("#loading-comment-tip")[0].parentElement.style.display = "none";
} else {
console.log("评论全部加载完毕,关闭监听事件");
$jq(".comiis_page.bg_f").remove();
$jq("#loading-comment-tip").text("已加载完所有评论")
$jq("#loading-comment-tip")[0].parentElement.style.display = "";
$jq("#loading-comment-tip").unbind("click", _loadNextComments_);
$jq(window).unbind("scroll");
}
isloding_flag = false;
kqideSourceNode.append(postDOM);
needRepeatLoadingJSResource();
})
} else {
console.log("正在加载中请稍后");
}
}
$jq(window).bind("scroll", function () {
// scroll at bottom
if (Math.ceil($jq(window).scrollTop() + $jq(window).height() + 150) >= $jq(document).height()) {
// load data
_loadNextComments_();
}
})
$jq("#loading-comment-tip").text("请上下滑动或点击加载");
$jq("#loading-comment-tip").bind("click", _loadNextComments_);
}
if (GM_getValue("v21") && window.location.href.match(mt_config.rexp.forum_post)) {
let tip_html = `
<div class="comiis_multi_box bg_f b_t">
<label class="comiis_loadbtn bg_e f_d" id="loading-comment-tip">
正在等待页面加载完毕
</label>
</div>`;
$jq(".comiis_bodybox").append($jq(tip_html));
let commentsEle = document.querySelector(".comiis_pltit span.f_d") || document.querySelector("#comiis_foot_memu .comiis_kmvnum");
if (document.querySelector(".comiis_pltit h2") && document.querySelector(".comiis_pltit h2").textContent.indexOf("暂无评论") != -1) {
console.log("暂无评论");
$jq("#loading-comment-tip")[0].parentElement.style.display = "none";
return;
}
let commentsNum = parseInt(commentsEle.textContent);
if (commentsNum >= 10) {
let setAutoLoadInterval = setInterval(function () {
let post_comments_list = document.querySelector(".comiis_page.bg_f"); //评论列表
if (post_comments_list) {
autoLoadNextPageComments(post_comments_list);
clearInterval(setAutoLoadInterval);
} else {
console.log("正在等待下一页列表元素出现");
}
}, 500)
} else {
console.log("无多页评论");
$jq("#loading-comment-tip")[0].parentElement.style.display = "none";
}
}
}
function loadPrevComments() { //加载上一页的评论
function autoLoadPrevPageComments() { //自动加载上一页的评论
let post_comments_list = document.querySelector(".comiis_page.bg_f");
let prev_page_url = post_comments_list.children[0].href
let isloding_flag = false;
console.log("获取上一页:", prev_page_url);
$jq("#loading-comment-tip-prev").text("请上下滑动或点击加载");
$jq("#loading-comment-tip-prev").bind("click", loadPrevComments);
function loadPrevComments() {
if (isloding_flag) {
console.log("正在加载上一页中请稍后");
} else {
isloding_flag = true;
$jq("#loading-comment-tip-prev").text("正在加载评论中...");
$jq("#loading-comment-tip-prev")[0].parentElement.style.display = "";
$jq.get(prev_page_url, function (data, status, xhr) {
console.log("正在请求的上一页评论:", prev_page_url);
let postlist = $jq(data);
let kqideSourceNode = $jq(".comiis_postlist.kqide");
let postDOM = postlist.find(".comiis_postlist.kqide").html();
let get_pregv_page_url = postlist.find(".prev");
if (get_pregv_page_url.length != 0) {
console.log("成功获取到上一页-评论");
prev_page_url = get_pregv_page_url.attr("href");
$jq("#loading-comment-tip-prev")[0].parentElement.style.display = "none";
isloding_flag = false;
kqideSourceNode.prepend(postDOM);
needRepeatLoadingJSResource();
} else {
isloding_flag = false;
kqideSourceNode.prepend(postDOM);
console.log("上一页评论全部加载完毕,关闭监听事件");
let page_title = postlist.find(".comiis_viewtit")[0].outerHTML;
console.log($jq(page_title));
kqideSourceNode.prepend($jq(page_title)[0]);
needRepeatLoadingJSResource();
// $jq(".comiis_page.bg_f").remove();
$jq("#loading-comment-tip-prev").remove();
$jq("#loading-comment-tip-prev").unbind("click", loadPrevComments);
$jq(window).unbind("scroll");
}
})
}
// $jq(window).unbind("scroll",loadPrevComments);
}
$jq(window).bind("scroll", function () {
if ($jq(window).scrollTop() <= 50) {
loadPrevComments();
}
});
}
if (GM_getValue("v32") && window.location.href.match(mt_config.rexp.forum_post)) {
if (!document.querySelector(".comiis_pltit span.f_d")) {
console.log("当前不在第一页,加载上一页评论");
let tip_html = `
<div class="comiis_multi_box bg_f b_t">
<label class="comiis_loadbtn bg_e f_d" id="loading-comment-tip-prev">
正在等待页面加载完毕
</label>
</div>`;
$jq(".comiis_bodybox script")[0].after($jq(tip_html)[0]);
if (document.querySelector(".comiis_pltit h2") && document.querySelector(".comiis_pltit h2").textContent.indexOf("暂无评论") != -1) {
console.log("暂无上一页评论");
$jq("#loading-comment-tip-prev")[0].parentElement.style.display = "none";
return;
}
autoLoadPrevPageComments();
}
}
}
function Hooks() { // hook?用不到
return {
initEnv: function () {
Function.prototype.hook = function (realFunc, hookFunc, context) {
var _context = null; //函数上下文
var _funcName = null; //函数名
_context = context || window;
_funcName = getFuncName(this);
_context['realFunc_' + _funcName] = this;
console.log(window);
if (_context[_funcName].prototype && _context[_funcName].prototype.isHooked) {
console.log("Already has been hooked,unhook first");
return false;
}
function getFuncName(fn) {
// 获取函数名
var strFunc = fn.toString();
var _regex = /function\s+(\w+)\s*\(/;
var patten = strFunc.match(_regex);
if (patten) {
return patten[1];
};
return '';
}
try {
eval('_context[_funcName] = function ' + _funcName + '(){\n' +
'var args = Array.prototype.slice.call(arguments,0);\n' +
'var obj = this;\n' +
'hookFunc.apply(obj,args);\n' +
"return _context['realFunc_" + _funcName + "'].apply(obj,args);\n" +
'};');
_context[_funcName].prototype.isHooked = true;
return true;
} catch (e) {
console.log("Hook failed,check the params.");
return false;
}
}
Function.prototype.unhook = function (realFunc, funcName, context) {
var _context = null;
var _funcName = null;
_context = context || window;
_funcName = funcName;
if (!_context[_funcName].prototype.isHooked) {
console.log("No function is hooked on");
return false;
}
_context[_funcName] = _context['realFunc' + _funcName];
delete _context['realFunc_' + _funcName];
return true;
}
},
cleanEnv: function () {
if (Function.prototype.hasOwnProperty("hook")) {
delete Function.prototype.hook;
}
if (Function.prototype.hasOwnProperty("unhook")) {
delete Function.prototype.unhook;
}
return true;
}
};
}
function pageAfterDOMChangeRunFunction() { // 当页面内容元素添加时需要执行的函数
if (window.location.href.match(/bbs.binmt.cc\/forum/)) {
function beforeHookRun() {
tryCatch(showUserUID);
tryCatch(previewPictures);
tryCatch(shieldUser);
tryCatch(shieldPlate);
tryCatch(pageSmallWindowBrowsingForumPost);
}
document.body.addEventListener("DOMNodeInserted", (event) => {
let ele = event.target;
if (ele.className != null && ele.className.indexOf("comiis_forumlist") != -1) {
beforeHookRun();
}
})
}
}
async function previewPictures() { // 贴外预览图片-使用github项目https://github.com/fengyuanchen/viewerjs
if (!GM_getValue("v34") &&
(!(window.location.href.match(mt_config.rexp.forum_guide_url) ||
// !(window.location.href.match(mt_config.rexp.forum_post)) ||
// !(window.location.href.match(mt_config.rexp.plate_url)) ||
!(window.location.href.match(mt_config.rexp.search_url))
))) {
return
}
function getFormList() {
let formList = mt_config.dom_obj.comiis_formlist() ? mt_config.dom_obj.comiis_formlist() : [];
formList = formList.length == 0 ? mt_config.dom_obj.comiis_postli() : formList;
formList = formList.length == 0 ? mt_config.dom_obj.comiis_mmlist() : formList;
return formList;
}
let formlist = null; // 帖子列表
let isFindFormList = false;
let findFormListNums = 0;
let waitFormListAppear = setInterval(function () {
if (isFindFormList) {
formlist = getFormList();
main();
clearInterval(waitFormListAppear)
} else {
if (findFormListNums >= 10) {
console.log("未出现帖子或寻找贴子超时,清理定时器");
clearInterval(waitFormListAppear);
}
isFindFormList = getFormList().length ? true : false;
findFormListNums += 1;
}
}, 800);
function getPreviewBtn(node,isNew) {
let prevNode = document.createElement("li");
prevNode.className = "f_c";
let imageDOM = node.querySelectorAll(".comiis_pyqlist_img").length ? node.querySelectorAll(".comiis_pyqlist_img") : node.querySelectorAll(".comiis_pyqlist_imgs");
if (imageDOM.length == 0) {
return null;
};
prevNode.setAttribute("style", "display: flex;justify-content: center;");
prevNode.innerHTML = `<i class="comiis_font"></i><a class="topreimg"></a>`;
Array.from(imageDOM).forEach(item => {
let needPrevImages = item.querySelectorAll("img");
let postForumImageNodeDiv = document.createElement("div");
let postForumImageNodeUl = document.createElement("ul");
postForumImageNodeUl.className = "postforumimages";
postForumImageNodeUl.setAttribute("style", "display:none;");
Array.from(needPrevImages).forEach(_img_ => {
let tempLi = document.createElement("li");
let tempImg = document.createElement("img");
tempImg.setAttribute("data-src", _img_.getAttribute("src"));
tempLi.append(tempImg);
postForumImageNodeUl.append(tempLi);
});
postForumImageNodeDiv.append(postForumImageNodeUl);
prevNode.append(postForumImageNodeDiv);
})
let canPrevImageNums = prevNode.getElementsByTagName("img").length;
prevNode.getElementsByClassName("topreimg")[0].innerText = isNew ? canPrevImageNums :"预览图片";
prevNode.onclick = (e) => {
let imageList = e.target.parentElement.children[2].children[0];
let viewer = new Viewer(imageList, {
inline: false,
url: "data-src",
hidden:()=>{
viewer.destroy();
}
});
viewer.zoomTo(1);
viewer.show();
}
return prevNode;
}
async function main() {
$jq.each(formlist, function (index, value) {
let isNewUI = false;
let formBottomEle = value.querySelectorAll(".comiis_znalist_bottom.b_t.cl ul.cl li");
if(!formBottomEle.length){
let tempFormBottomEle = value.querySelectorAll(".comiis_xznalist_bottom.cl ul.cl li"); // 新版论坛UI
if(!tempFormBottomEle.length){return};
formBottomEle = tempFormBottomEle;
isNewUI = true;
};
let clParentEle = formBottomEle[0].parentElement;
if(clParentEle.querySelector(".topreimg")){
console.log("已经插入过预览图片");
}else{
let previewPicturesEle = getPreviewBtn(value, isNewUI?isNewUI:null);
if (previewPicturesEle != null) {
clParentEle.append(previewPicturesEle);
clParentEle.setAttribute("style", "display: flex;");
}
}
})
}
}
function repairClearSearchInput() { // 修复搜索的清空按钮
if (GM_getValue("v36") && window.location.href.match(mt_config.rexp.search_url)) {
let $search_input = $jq(".ssclose.bg_e.f_e");
if ($search_input) {
$search_input.click(function (e) {
e.preventDefault();
$jq("#scform_srchtxt").val("")
})
} else {
log.error("搜索界面: 获取清空按钮失败");
}
}
}
function repairUnableToEnterOtherSpaceCorrectly() { // 修复无法正确进入别人的空间
if (GM_getValue("v37") && window.location.href.match(mt_config.rexp.home_url_brief)) {
let href_params = window.location.href.match(/home.php\?(.+)/gi);
href_params = href_params[href_params.length - 1];
let params_split = href_params.split("&");
if (params_split.length == 2 && href_params.indexOf("uid=") != -1 && href_params.indexOf("mod=space") != -1) {
window.location.href = window.location.href + "&do=profile";
}
}
}
function postForumKGChartBed() { // 发帖快捷图片上传 康哥图床
if (!window.location.href.match(mt_config.rexp.post_forum) &&
!window.location.href.match(mt_config.rexp.edit_forum) &&
!window.location.href.match(mt_config.rexp.reply_forum) &&
!window.location.href.match(mt_config.rexp.forum_post) ||
!GM_getValue("v42")) {
return
};
GM_addStyle(`
.comiis_post_imglist li.up_btn_kggzs a{
display: block;
width: 50px;
height: 50px;
line-height: 50px;
padding: 4px;
border-radius: 2px;
border-style: dashed;
}
.comiis_post_imglist li.up_btn_kggzs a i {
position: absolute;
top: 11px;
left: 5px;
z-index: 8;
font-size: 26px;
width: 50px;
height: 50px;
line-height: 50px;
text-align: center;
}
.comiis_post_imglist li.up_btn_kggzs a input {
position:absolute;
top:11px;
left:5px;
height:50px;
width:50px;
z-index:10;
opacity:0
}
.comiis_post_imglist li .delImg {
position:absolute;
top:-5px;
left:-5px
}
.comiis_post_imglist li .delImg i {
font-size:24px;
background:#fff;
border-radius:50%
}
#imglist_kggzs{
overflow-y: auto;
max-height: 200px;
}
#kggzsfiledata{
display:none;
}
`);
let imgListParent = $jq(".comiis_upbox.comiis_allowpostimg.bg_f.cl");
if (!imgListParent.length) {
imgListParent = $jq("#comiis_post_tab .comiis_upbox.bg_f.b_t.b_b.cl");
if (!imgListParent.length) {
console.log("未找到图片列表父元素");
return;
}
};
let imgUploadBtn = `
<ul id="imglist_kggzs" class="comiis_post_imglist cl">
<li class="up_btn_kggzs">
<a href="javascript:;" class="bg_e b_ok f_d" id="kggzsChartBedBtnUpload">
<p style="position: relative;bottom: 20px;text-align: center;color: #000;">kggzs</p>
<i class="comiis_font"></i>
<input type="file" name="Filedata" id="kggzsfiledata" accept="image/*" multiple="multiple">
<p style="position: relative;bottom: 30px;text-align: center;">20MB</p>
</a>
</li>
</ul>
`;
imgListParent.append($jq(imgUploadBtn));
let chartBedUrl = "https://img.kggzs.cn/api/v1";
let chartBedUser = GM_getValue("KggzsChartBedUser");
let chartBedPwd = GM_getValue("KggzsChartBedPwd");
let chartBedToken = null;
let loginStatus = false; // 登录状态
let tokenStatus = false; //token状态
let code = {
401: "未登录或授权失败",
403: "管理员关闭了接口功能",
429: "超出请求配额,请求受限",
500: "服务端出现异常"
}
function getToken() {
return new Promise(res => {
let formData = new FormData();
formData.append("email", chartBedUser);
formData.append("password", chartBedPwd);
GM_xmlhttpRequest({
url: `${chartBedUrl}/tokens`,
method: "POST",
data: formData,
headers: {
"Accept": "application/json"
},
onload: (r) => {
if (code[r.status] != null) {
popup.open(code[r.status], 'alert');
res(null);
return;
}
let json_data = JSON.parse(r.responseText);
if (json_data["status"]) {
popup.open("token成功获取", "alert");
res(json_data["data"]["token"]);
} else {
popup.open(json_data["message"], "alert");
res(null);
}
},
onerror: () => {
popup.open("网络异常");
res(null);
}
})
})
}
function uploadImage(imageFile) {
let res_data = {
"imageUri": null,
"json_data": null
};
let form = new FormData();
form.append("strategy_id", 3);
form.append("file", imageFile);
return new Promise(res => {
GM_xmlhttpRequest({
url: `${chartBedUrl}/upload`,
method: "POST",
data: form,
async: false,
dataType: "json",
headers: {
"Accept": "application/json",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.64 Safari/537.36 Edg/101.0.1210.53",
"Referer": `${chartBedUrl}/`,
"Authorization": `Bearer ${chartBedToken}`,
"Origin": chartBedUrl,
},
onload: (r) => {
if (code[r.status] != null) {
popup.open(code[r.status], 'alert');
res(res_data);
return;
}
let json_data = JSON.parse(r.responseText);
console.log(json_data);
if (json_data["status"]) {
popup.open('上传成功', 'alert');
let file_reader = new FileReader();
//FileReader主要用于将文件内容读入内存,通过一系列异步接口,可以在主线程中访问本地文件
file_reader.readAsDataURL(imageFile); //读取图片的内容生成的base64编码的图
//读取完成后,执行该回调函数,它会返回读取的结果result
file_reader.onload = (function () {
let imageUri = this.result; // 此时的图片已经存储到了result中
res_data["imageUri"] = imageUri;
res_data["json_data"] = json_data;
res(res_data);
});
} else {
console.log(json_data);
popup.open(json_data["message"], 'alert');
res(res_data);
}
},
onerror: (r) => {
popup.open("网络异常", 'alert');
res(res_data);
}
})
})
}
function deleteImage(imageKey) {
return new Promise(res => {
GM_xmlhttpRequest({
url: `${chartBedUrl}/images/:${imageKey}`,
method: "DELETE",
async: false,
data: JSON.stringify({
"key": ""
}),
dataType: "json",
headers: {
"Accept": "application/json",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.64 Safari/537.36 Edg/101.0.1210.53",
"Referer": `${chartBedUrl}/`,
"Authorization": `Bearer ${chartBedToken}`,
"Origin": chartBedUrl,
},
onload: (r) => {
if (code[r.status] != null) {
popup.open(code[r.status], 'alert');
res(res_data);
return;
}
let json_data = JSON.parse(r.responseText);
console.log(json_data);
},
onerror: (r) => {
popup.open("网络异常", 'alert');
res(res_data);
}
})
})
}
function clearData() {
chartBedUser = "";
chartBedPwd = "";
chartBedToken = null;
loginStatus = false;
tokenStatus = false;
GM_deleteValue("KggzsChartBedUser");
GM_deleteValue("KggzsChartBedPwd");
}
$jq("#kggzsChartBedBtnUpload i").on("click", async function () {
if (tokenStatus) {
popup.open('正在配置中...', 'alert');
return;
}
if (!chartBedUser || !chartBedPwd) {
let userInput = prompt('请输入康哥图床的用户和密码,使用空格分割');
if (userInput) {
let userInputSplit = userInput.split(" ");
let user = userInputSplit[0];
let pwd = userInputSplit[1];
GM_setValue("KggzsChartBedUser", user);
GM_setValue("KggzsChartBedPwd", pwd);
chartBedUser = user;
chartBedPwd = pwd;
popup.open('设置完毕,请重新点击', 'alert');
}
} else if (chartBedToken == null || !loginStatus) {
tokenStatus = true;
popup.open('正在配置token', 'alert');
chartBedToken = await getToken();
console.log("token:" + chartBedToken);
if (chartBedToken != null) {
$jq("#kggzsfiledata").click();
} else {
clearData();
}
tokenStatus = false;
} else {
$jq("#kggzsfiledata").click();
}
});
$jq("#kggzsfiledata").on("change", (e) => {
let chooseImageFiles = e.currentTarget.files;
if (chooseImageFiles.length == 0) {
return
};
popup.open("上传图片中...请稍后", "alert");
console.log(`图片数量:${chooseImageFiles.length}`);
$jq.each(chooseImageFiles, async (i) => {
let imageFile = chooseImageFiles[i];
let uploadImageReturn = await uploadImage(imageFile);
if (uploadImageReturn["json_data"] != null) {
console.log(uploadImageReturn);
let image_id_encoded = uploadImageReturn["json_data"]["data"]["key"];
let image_url = uploadImageReturn["json_data"]["data"]["links"]["url"];
let image_thumb_url = uploadImageReturn["json_data"]["data"]["links"]["thumbnail_url"];
let image_name = uploadImageReturn["json_data"]["data"]["origin_name"];
let image_uri = uploadImageReturn["imageUri"];
let uploadImageHTML = `<li>
<span class="delImg" id-encode="${image_id_encoded}">
<a href="javascript:;">
<i class="comiis_font f_g"></i>
</a>
</span>
<span class="charu f_f">插入</span>
<span class="p_img">
<a href="javascript:;" onclick="comiis_addsmilies('[url=${image_url}][img]${image_url}[/img][/url]')">
<img style="height:54px;width:54px;" title="${image_name}" src="${image_uri}" class="vm b_ok"></a>
</span>
<input type="hidden" name="">
</li>`;
$jq("#imglist_kggzs").append($jq(uploadImageHTML));
chartBed.storage.add("kggzs", image_id_encoded, image_url, image_thumb_url, image_name);
}
})
$jq("#kggzsfiledata").val("");
});
$jq("#imglist_kggzs").on("click", ".delImg", async (e) => {
e.preventDefault();
e.currentTarget.parentElement.remove();
// popup.open('删除中,请稍后', 'alert');
// let id_encoded = e.currentTarget.getAttribute("id-encode");
// if(!id_encoded){
// popup.open('获取id_encoded失败,请自行去Hello图床删除', 'alert');
// return;
// }
// let deleteStatus = await deleteImage(key);
// if(deleteStatus){
// e.currentTarget.parentElement.remove();
// chartBed.storage.delete("kggzs",id_encoded);
// }
})
}
function postForumHelloChartBed() { // 发帖快捷图片上传Hello图床
if (!window.location.href.match(mt_config.rexp.post_forum) &&
!window.location.href.match(mt_config.rexp.edit_forum) &&
!window.location.href.match(mt_config.rexp.reply_forum) &&
!window.location.href.match(mt_config.rexp.forum_post) ||
!GM_getValue("v38")) {
return
};
GM_addStyle(`
.comiis_post_imglist li.up_btn_hello a{
display: block;
width: 50px;
height: 50px;
line-height: 50px;
padding: 4px;
border-radius: 2px;
border-style: dashed;
}
.comiis_post_imglist li.up_btn_hello a i {
position: absolute;
top: 11px;
left: 5px;
z-index: 8;
font-size: 26px;
width: 50px;
height: 50px;
line-height: 50px;
text-align: center;
}
.comiis_post_imglist li.up_btn_hello a input {
position:absolute;
top:11px;
left:5px;
height:50px;
width:50px;
z-index:10;
opacity:0
}
.comiis_post_imglist li .delImg {
position:absolute;
top:-5px;
left:-5px
}
.comiis_post_imglist li .delImg i {
font-size:24px;
background:#fff;
border-radius:50%
}
#imglist_hello{
overflow-y: auto;
max-height: 200px;
}
#hellofiledata{
display:none;
}
`);
let imgListParent = $jq(".comiis_upbox.comiis_allowpostimg.bg_f.cl");
if (!imgListParent.length) {
imgListParent = $jq("#comiis_post_tab .comiis_upbox.bg_f.b_t.b_b.cl");
if (!imgListParent.length) {
console.log("未找到图片列表父元素");
return;
}
};
let imgUploadBtn = `
<ul id="imglist_hello" class="comiis_post_imglist cl">
<li class="up_btn_hello">
<a href="javascript:;" class="bg_e b_ok f_d" id="helloChartBedBtnUpload">
<p style="position: relative;bottom: 20px;text-align: center;color: #000;">Hello</p>
<i class="comiis_font"></i>
<input type="file" name="Filedata" id="hellofiledata" accept="image/*" multiple="multiple">
<p style="position: relative;bottom: 30px;text-align: center;">20MB</p>
</a>
</li>
</ul>
`;
imgListParent.append($jq(imgUploadBtn));
let chartBedUrl = "https://www.helloimg.com";
let chartBedUser = GM_getValue("HelloChartBedUser");
let chartBedPwd = GM_getValue("HelloChartBedPwd");
let chartBedAuthToken = null;
let loginStatus = false; // 登录状态
let authTokenStatus = false; //authToken状态
let clearData = () => {
GM_deleteValue("HelloChartBedUser");
GM_deleteValue("HelloChartBedPwd");
loginStatus = false;
authTokenStatus = false;
chartBedUser = "";
chartBedPwd = "";
chartBedAuthToken = null;
}
$jq("#helloChartBedBtnUpload i").on("click", async function () {
if (authTokenStatus) {
popup.open('正在配置中...', 'alert');
return;
}
if (!chartBedUser || !chartBedPwd) {
let userInput = prompt('请输入Hello图床的用户和密码,使用空格分割');
if (userInput) {
let userInputSplit = userInput.split(" ");
let user = userInputSplit[0];
let pwd = userInputSplit[1];
GM_setValue("HelloChartBedUser", user);
GM_setValue("HelloChartBedPwd", pwd);
chartBedUser = user;
chartBedPwd = pwd;
popup.open('设置完毕,请重新点击', 'alert');
}
} else if (chartBedAuthToken == null || !loginStatus) {
authTokenStatus = true;
popup.open('正在配置auth_token', 'alert');
chartBedAuthToken = await chartBed.getAuthToken(chartBedUrl);
console.log("auth_token:" + chartBedAuthToken);
if (chartBedAuthToken != null) {
popup.open('正在登录Hello图床', 'alert');
let retloginStatus = await chartBed.login(chartBedUrl, chartBedUser, chartBedPwd, chartBedAuthToken);
if (retloginStatus) {
loginStatus = true;
$jq("#hellofiledata").click();
} else if (retloginStatus == false) {
clearData();
}
}
authTokenStatus = false;
} else {
$jq("#hellofiledata").click();
}
})
$jq("#hellofiledata").on("change", (e) => {
let chooseImageFiles = e.currentTarget.files;
if (chooseImageFiles.length == 0) {
return
};
popup.open("上传图片中...请稍后", "alert");
console.log(`图片数量:${chooseImageFiles.length}`);
$jq.each(chooseImageFiles, async (i) => {
let imageFile = chooseImageFiles[i];
let uploadImageReturn = await chartBed.uploadImage(chartBedUrl, chartBedAuthToken, imageFile);
if (uploadImageReturn["json_data"] != null) {
let image_id_encoded = uploadImageReturn["json_data"]["image"]["id_encoded"];
let image_url = uploadImageReturn["json_data"]["image"]["url"];
let image_thumb_url = uploadImageReturn["json_data"]["image"]["thumb"]["url"];
let image_name = uploadImageReturn["json_data"]["image"]["filename"];
let image_uri = uploadImageReturn["imageUri"];
let uploadImageHTML = `<li>
<span class="delImg" id-encode="${image_id_encoded}">
<a href="javascript:;">
<i class="comiis_font f_g"></i>
</a>
</span>
<span class="charu f_f">插入</span>
<span class="p_img">
<a href="javascript:;" onclick="comiis_addsmilies('[url=${image_url}][img]${image_url}[/img][/url]')">
<img style="height:54px;width:54px;" title="${image_name}" src="${image_uri}" class="vm b_ok"></a>
</span>
<input type="hidden" name="">
</li>`;
$jq("#imglist_hello").append($jq(uploadImageHTML));
chartBed.storage.add("hello", image_id_encoded, image_url, image_thumb_url, image_name);
}
})
$jq("#hellofiledata").val("");
})
$jq("#imglist_hello").on("click", ".delImg", async (e) => {
e.preventDefault();
popup.open('删除中,请稍后', 'alert');
let id_encoded = e.currentTarget.getAttribute("id-encode");
if (!id_encoded) {
popup.open('获取id_encoded失败,请自行去Hello图床删除', 'alert');
return;
}
let deleteStatus = await chartBed.deleteImage(chartBedUrl, chartBedAuthToken, id_encoded);
if (deleteStatus) {
e.currentTarget.parentElement.remove();
chartBed.storage.delete("hello", id_encoded);
}
})
}
async function postForumZ4aChartBed() { // 发帖快捷图片上传z4a图床
if (!window.location.href.match(mt_config.rexp.post_forum) &&
!window.location.href.match(mt_config.rexp.edit_forum) &&
!window.location.href.match(mt_config.rexp.reply_forum) &&
!window.location.href.match(mt_config.rexp.forum_post) ||
!GM_getValue("v39")) {
return
};
let imgListParent = $jq(".comiis_upbox.comiis_allowpostimg.bg_f.cl");
if (!imgListParent.length) {
imgListParent = $jq("#comiis_post_tab .comiis_upbox.bg_f.b_t.b_b.cl");
if (!imgListParent.length) {
console.log("未找到图片列表父元素");
return;
}
};
GM_addStyle(`
.comiis_post_imglist li.up_btn_z4a a{
display: block;
width: 50px;
height: 50px;
line-height: 50px;
padding: 4px;
border-radius: 2px;
border-style: dashed;
}
.comiis_post_imglist li.up_btn_z4a a i {
position: absolute;
top: 11px;
left: 5px;
z-index: 8;
font-size: 26px;
width: 50px;
height: 50px;
line-height: 50px;
text-align: center;
}
.comiis_post_imglist li.up_btn_z4a a input {
position:absolute;
top:11px;
left:5px;
height:50px;
width:50px;
z-index:10;
opacity:0
}
.comiis_post_imglist li .delImg {
position:absolute;
top:-5px;
left:-5px
}
.comiis_post_imglist li .delImg i {
font-size:24px;
background:#fff;
border-radius:50%
}
#imglist_z4a{
overflow-y: auto;
max-height: 200px;
}
#z4afiledata{
display:none;
}
`);
let imgUploadBtn = `
<ul id="imglist_z4a" class="comiis_post_imglist cl">
<li class="up_btn_z4a">
<a href="javascript:;" class="bg_e b_ok f_d" id="z4aChartBedBtnUpload">
<p style="position: relative;bottom: 20px;text-align: center;color: #000;">Z4A</p>
<i class="comiis_font"></i>
<input type="file" name="Filedata" id="z4afiledata" accept="image/*" multiple="multiple">
<p style="position: relative;bottom: 30px;text-align: center;">50MB</p>
</a>
</li>
</ul>
`;
imgListParent.append($jq(imgUploadBtn));
let chartBedUrl = "https://www.z4a.net";
let chartBedUser = GM_getValue("Z4AChartBedUser");
let chartBedPwd = GM_getValue("Z4AChartBedPwd");
let chartBedAuthToken = null;
let loginStatus = false; // 登录状态
let authTokenStatus = false; //authToken状态
let clearData = () => {
GM_deleteValue("Z4AChartBedUser");
GM_deleteValue("Z4AChartBedPwd");
loginStatus = false;
authTokenStatus = false;
chartBedUser = "";
chartBedPwd = "";
chartBedAuthToken = null;
}
$jq("#z4aChartBedBtnUpload i").on("click", async function () {
if (authTokenStatus) {
popup.open('正在配置中...', 'alert');
return;
}
if (!chartBedUser || !chartBedPwd) {
let userInput = prompt('请输入Z4A图床的用户和密码,使用空格分割');
if (userInput) {
let userInputSplit = userInput.split(" ");
let user = userInputSplit[0];
let pwd = userInputSplit[1];
GM_setValue("Z4AChartBedUser", user);
GM_setValue("Z4AChartBedPwd", pwd);
chartBedUser = user;
chartBedPwd = pwd;
popup.open('设置完毕,请重新点击', 'alert');
}
} else if (chartBedAuthToken == null || !loginStatus) {
authTokenStatus = true;
popup.open('正在配置auth_token', 'alert');
chartBedAuthToken = await chartBed.getAuthToken(chartBedUrl);
console.log("auth_token:" + chartBedAuthToken);
if (chartBedAuthToken != null) {
popup.open('正在登录Z4A图床', 'alert');
let retloginStatus = await chartBed.login(chartBedUrl, chartBedUser, chartBedPwd, chartBedAuthToken);
if (retloginStatus) {
loginStatus = true;
$jq("#z4afiledata").click();
} else if (retloginStatus == false) {
clearData();
}
}
authTokenStatus = false;
} else {
$jq("#z4afiledata").click();
}
})
$jq("#z4afiledata").on("change", (e) => {
let chooseImageFiles = e.currentTarget.files;
if (chooseImageFiles.length == 0) {
return
};
popup.open("上传图片中...请稍后", "alert");
console.log(`图片数量:${chooseImageFiles.length}`);
$jq.each(chooseImageFiles, async (i) => {
let imageFile = chooseImageFiles[i];
let uploadImageReturn = await chartBed.uploadImage(chartBedUrl, chartBedAuthToken, imageFile);
if (uploadImageReturn["json_data"] != null) {
let image_id_encoded = uploadImageReturn["json_data"]["image"]["id_encoded"];
let image_url = uploadImageReturn["json_data"]["image"]["url"];
let image_thumb_url = uploadImageReturn["json_data"]["image"]["thumb"]["url"];
let image_name = uploadImageReturn["json_data"]["image"]["filename"];
let image_uri = uploadImageReturn["imageUri"];
let uploadImageHTML = `<li>
<span class="delImg" id-encode="${image_id_encoded}">
<a href="javascript:;">
<i class="comiis_font f_g"></i>
</a>
</span>
<span class="charu f_f">插入</span>
<span class="p_img">
<a href="javascript:;" onclick="comiis_addsmilies('[url=${image_url}][img]${image_url}[/img][/url]')">
<img style="height:54px;width:54px;" title="${image_name}" src="${image_uri}" class="vm b_ok"></a>
</span>
<input type="hidden" name="">
</li>`;
$jq("#imglist_z4a").append($jq(uploadImageHTML));
chartBed.storage.add("z4a", image_id_encoded, image_url, image_thumb_url, image_name);
}
})
$jq("#z4afiledata").val("");
})
$jq("#imglist_z4a").on("click", ".delImg", async (e) => {
e.preventDefault();
popup.open('删除中,请稍后', 'alert');
let id_encoded = e.currentTarget.getAttribute("id-encode");
if (!id_encoded) {
popup.open('获取id_encoded失败,请自行去Z4A图床删除', 'alert');
return;
}
let deleteStatus = await chartBed.deleteImage(chartBedUrl, chartBedAuthToken, id_encoded);
if (deleteStatus) {
e.currentTarget.parentElement.remove();
chartBed.storage.delete("z4a", id_encoded);
}
})
}
const chartBed = {
ret_code: {
200: {
200: "删除成功"
},
500: {
101: "重复上传",
400: "请求被拒绝,token错误",
401: "请求被拒绝",
},
400: {
100: "删除失败,图片已删除",
101: "重复上传",
}
},
storage: {
add: function (web, id_encoded, url, thumb_url, name) {
let localData = GM_getValue("chartBedsImagesHistory") ? GM_getValue("chartBedsImagesHistory") : [];
let saveData = localData.concat({
"web": web,
"id_encoded": id_encoded,
"url": url,
"thumb_url": thumb_url,
"name": name
});
GM_setValue("chartBedsImagesHistory", saveData);
},
delete: function (_web_, id_encoded) {
let localData = GM_getValue("chartBedsImagesHistory") ? GM_getValue("chartBedsImagesHistory") : [];
Array.from(localData).forEach((item, index) => {
if (item["web"] == _web_ && item["id_encoded"] == id_encoded) {
localData.splice(index, 1);
GM_setValue("chartBedsImagesHistory", localData);
return;
}
})
},
get: function () {
return GM_getValue("chartBedsImagesHistory") ? GM_getValue("chartBedsImagesHistory") : [];
}
},
getAuthToken(url) { // 获取图床的auth_token
return new Promise(res => {
GM_xmlhttpRequest({
url: url,
method: "GET",
headers: {
'user-agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Mobile Safari/537.36 Edg/94.0.992.38'
},
onload: (r) => {
let token = r.responseText.match(/PF.obj.config.auth_token[\s]*=[\s]*"(.+)";/i);
if (token.length == 2) {
popup.open("auth_token成功获取", "alert");
res(token[1]);
} else {
console.log(r);
popup.open("auth_token获取失败", "alert");
res(null);
}
},
onerror: () => {
popup.open("网络异常", "alert");
res(null)
}
})
})
},
login(url, user, pwd, auth_token) { // 图床登录
return new Promise(res => {
GM_xmlhttpRequest({
url: `${url}/login`,
method: "POST",
data: `login-subject=${user}&password=${pwd}&auth_token=${auth_token}`,
headers: {
"Content-Type": "application/x-www-form-urlencoded"
},
onload: (e) => {
console.log(e);
if (e.status == 200 && e.responseText.match("注销")) {
popup.open('登陆成功', 'alert');
res(true);
} else {
popup.open('登录失败', 'alert');
res(false);
}
},
onerror: () => {
popup.open('网络异常', 'alert');
res(404);
}
})
});
},
uploadImage(url, auth_token, imageFile) { // 上传图片请求
let res_data = {
"imageUri": null,
"json_data": null
};
let form = new FormData();
form.append("type", "file");
form.append("action", "upload");
form.append("timestamp", new Date().getTime());
form.append("auth_token", auth_token);
form.append("nsfw", 0);
form.append("source", imageFile);
return new Promise(res => {
GM_xmlhttpRequest({
url: `${url}/json`,
method: "POST",
data: form,
async: false,
dataType: "json",
headers: {
"Accept": "application/json",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.64 Safari/537.36 Edg/101.0.1210.53",
"Referer": `${url}/`,
"Origin": url,
},
onload: (r) => {
let json_data = JSON.parse(r.responseText);
console.log(json_data);
let status_code = json_data["status_code"];
if (status_code == 200) {
popup.open('上传成功', 'alert');
let file_reader = new FileReader();
//FileReader主要用于将文件内容读入内存,通过一系列异步接口,可以在主线程中访问本地文件
file_reader.readAsDataURL(imageFile); //读取图片的内容生成的base64编码的图
//读取完成后,执行该回调函数,它会返回读取的结果result
file_reader.onload = (function () {
let imageUri = this.result; // 此时的图片已经存储到了result中
res_data["imageUri"] = imageUri;
res_data["json_data"] = json_data;
res(res_data);
});
} else if (chartBed.ret_code[status_code] != null && chartBed.ret_code[status_code][json_data["error"]["code"]] != null) {
popup.open(chartBed.ret_code[status_code][json_data["error"]["code"]], 'alert');
res(res_data);
} else {
console.log(json_data);
res(res_data);
}
},
onerror: (r) => {
console.log(r.responseText);
popup.open("网络异常", 'alert');
res(res_data);
}
})
})
},
deleteImage(url, auth_token, id_encoded) { // 删除图片请求
return new Promise(res => {
GM_xmlhttpRequest({
url: `${url}/json`,
method: "POST",
data: `auth_token=${auth_token}&action=delete&single=true&delete=image&deleting[id]=${id_encoded}`,
headers: {
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"
},
onload: (e) => {
let json_data = JSON.parse(e.responseText);
let status_code = json_data["status_code"];
if (status_code == 200 && json_data["success"]["code"] == 200) {
popup.open(chartBed.ret_code["200"]["200"], 'alert');
res(true);
} else if (status_code == 400 && json_data["error"]["code"] == 100) {
popup.open(chartBed.ret_code["400"]["100"], 'alert');
res(true);
} else if (chartBed.ret_code[status_code] != null && chartBed.ret_code[status_code][json_data["error"]["code"]] != null) {
popup.open(chartBed.ret_code[status_code][json_data["error"]["code"]], 'alert');
res(false);
} else {
console.log(json_data);
popup.open(json_data["error"]["message"], 'alert');
res(false);
}
},
onerror: () => {
popup.open('网络异常', 'alert');
res(false);
}
})
})
},
}
function chatChartBed() { // 聊天快捷图片上传到图床(总)
if (!window.location.href.match(mt_config.rexp.chat_url) ||
!GM_getValue("v40") &&
!GM_getValue("v41") &&
!GM_getValue("v43")
) {
return
};
let imgBtn = `<a href="javascript:;" class="comiis_pictitle"><i class="comiis_font"></i></a>`;
let menu = `<div class="comiis_minibq bg_f cl" style="display: none;"><div class="imgboxlist"></div><div class="bqbox_t bg_e cl"><ul id="comiis_img_chartbed_key"></ul></div></div>`;
$jq(".styli_tit.comiis_post_ico.f_c.cl").append($jq(imgBtn));
$jq("#comiis_post_tab").append($jq(menu));
$jq(".comiis_pictitle").on("click", (e) => {
let toShow = false;
$jq("#comiis_post_tab .comiis_minibq").filter(function (i, v) {
if (v.style.display != 'none') {
toShow = true;
}
});
if (toShow) {
$jq(".comiis_foot_height").removeClass("comiis_show_smiley");
} else {
$jq(".comiis_foot_height").addClass("comiis_show_smiley");
}
});
GM_addStyle(`
.comiis_post_imglist li.up_btn_kggzs a,
.comiis_post_imglist li.up_btn_hello a,
.comiis_post_imglist li.up_btn_z4a a{
display: block;
width: 50px;
height: 50px;
line-height: 50px;
padding: 4px;
border-radius: 2px;
border-style: dashed;
}
.comiis_post_imglist li.up_btn_kggzs a i,
.comiis_post_imglist li.up_btn_hello a i,
.comiis_post_imglist li.up_btn_z4a a i {
position: absolute;
top: 11px;
left: 5px;
z-index: 8;
font-size: 26px;
width: 50px;
height: 50px;
line-height: 50px;
text-align: center;
}
.comiis_post_imglist li.up_btn_kggzs a input,
.comiis_post_imglist li.up_btn_hello a input,
.comiis_post_imglist li.up_btn_z4a a input {
position:absolute;
top:11px;
left:5px;
height:50px;
width:50px;
z-index:10;
opacity:0
}
.comiis_post_imglist li .delImg {
position:absolute;
top:-5px;
left:-5px
}
.comiis_post_imglist li .delImg i {
font-size:24px;
background:#fff;
border-radius:50%
}
.imgboxlist{
height: 170px;
overflow-y: auto;
}
.menuclicked{
background: #fff;
}
#kggzsfiledata,
#hellofiledata,
#z4afiledata{
display: none;
}
`);
if (GM_getValue("chartBedsImagesHistory") == undefined) {
GM_setValue("chartBedsImagesHistory", []);
}
tryCatch(chatKGChartBed);
tryCatch(chatHelloChartBed);
tryCatch(chatZ4AChartBed);
tryCatch(chatHistoryChartBedImages);
$jq("#comiis_img_chartbed_key").children()[0].children[0].click();
}
function chatKGChartBed() { // 聊天快捷图片上传康哥图床
if (!GM_getValue("v43")) {
return
};
let imgUploadBtn = `
<div class="comiis_upbox kggzschartbed" style="display:none;">
<ul id="imglist_kggzs" class="comiis_post_imglist cl">
<li class="up_btn_kggzs">
<a href="javascript:;" class="bg_e b_ok f_d" id="kggzsChartBedBtnUpload">
<i class="comiis_font"></i>
<input type="file" name="Filedata" id="kggzsfiledata" accept="image/*" multiple="multiple">
<p style="padding-top: 21px;padding-left: 6px;">20MB</p>
</a>
</li>
</ul>
</div>
`;
let imgMenu = `<li><a href="javascript:;" id="menu_kggzs" class="">康哥图床</a></li>`;
$jq("#comiis_img_chartbed_key").append($jq(imgMenu));
$jq(".comiis_minibq .imgboxlist").append($jq(imgUploadBtn));
$jq("#menu_kggzs").on("click", (e) => {
$jq("#menu_kggzs").addClass("menuclicked"); // 添加点击菜单背景白色
$jq("#menu_hello").removeClass("menuclicked");
$jq("#menu_z4a").removeClass("menuclicked");
$jq("#menu_chartbed_history").removeClass("menuclicked");
$jq(".comiis_upbox").hide();
$jq(".comiis_upbox.kggzschartbed").show();
});
let chartBedUrl = "https://img.kggzs.cn/api/v1";
let chartBedUser = GM_getValue("KggzsChartBedUser");
let chartBedPwd = GM_getValue("KggzsChartBedPwd");
let chartBedToken = null;
let loginStatus = false; // 登录状态
let tokenStatus = false; //token状态
let code = {
401: "未登录或授权失败",
403: "管理员关闭了接口功能",
429: "超出请求配额,请求受限",
500: "服务端出现异常"
}
function getToken() {
return new Promise(res => {
let formData = new FormData();
formData.append("email", chartBedUser);
formData.append("password", chartBedPwd);
GM_xmlhttpRequest({
url: `${chartBedUrl}/tokens`,
method: "POST",
data: formData,
headers: {
"Accept": "application/json"
},
onload: (r) => {
if (code[r.status] != null) {
popup.open(code[r.status], 'alert');
res(null);
return;
}
let json_data = JSON.parse(r.responseText);
if (json_data["status"]) {
popup.open("token成功获取", "alert");
res(json_data["data"]["token"]);
} else {
popup.open(json_data["message"], "alert");
res(null);
}
},
onerror: () => {
popup.open("网络异常");
res(null);
}
})
})
}
function uploadImage(imageFile) {
let res_data = {
"imageUri": null,
"json_data": null
};
let form = new FormData();
form.append("strategy_id", 3);
form.append("file", imageFile);
return new Promise(res => {
GM_xmlhttpRequest({
url: `${chartBedUrl}/upload`,
method: "POST",
data: form,
async: false,
dataType: "json",
headers: {
"Accept": "application/json",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.64 Safari/537.36 Edg/101.0.1210.53",
"Referer": `${chartBedUrl}/`,
"Authorization": `Bearer ${chartBedToken}`,
"Origin": chartBedUrl,
},
onload: (r) => {
if (code[r.status] != null) {
popup.open(code[r.status], 'alert');
res(res_data);
return;
}
let json_data = JSON.parse(r.responseText);
console.log(json_data);
if (json_data["status"]) {
popup.open('上传成功', 'alert');
let file_reader = new FileReader();
//FileReader主要用于将文件内容读入内存,通过一系列异步接口,可以在主线程中访问本地文件
file_reader.readAsDataURL(imageFile); //读取图片的内容生成的base64编码的图
//读取完成后,执行该回调函数,它会返回读取的结果result
file_reader.onload = (function () {
let imageUri = this.result; // 此时的图片已经存储到了result中
res_data["imageUri"] = imageUri;
res_data["json_data"] = json_data;
res(res_data);
});
} else {
console.log(json_data);
popup.open(json_data["message"], 'alert');
res(res_data);
}
},
onerror: (r) => {
popup.open("网络异常", 'alert');
res(res_data);
}
})
})
}
function deleteImage(imageKey) {
return new Promise(res => {
GM_xmlhttpRequest({
url: `${chartBedUrl}/images/:${imageKey}`,
method: "DELETE",
async: false,
data: JSON.stringify({
"key": ""
}),
dataType: "json",
headers: {
"Accept": "application/json",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.64 Safari/537.36 Edg/101.0.1210.53",
"Referer": `${chartBedUrl}/`,
"Authorization": `Bearer ${chartBedToken}`,
"Origin": chartBedUrl,
},
onload: (r) => {
if (code[r.status] != null) {
popup.open(code[r.status], 'alert');
res(res_data);
return;
}
let json_data = JSON.parse(r.responseText);
console.log(json_data);
},
onerror: (r) => {
popup.open("网络异常", 'alert');
res(res_data);
}
})
})
}
function clearData() {
chartBedUser = "";
chartBedPwd = "";
chartBedToken = null;
loginStatus = false;
tokenStatus = false;
GM_deleteValue("KggzsChartBedUser");
GM_deleteValue("KggzsChartBedPwd");
}
$jq("#kggzsChartBedBtnUpload i").on("click", async function () {
if (tokenStatus) {
popup.open('正在配置中...', 'alert');
return;
}
if (!chartBedUser || !chartBedPwd) {
let userInput = prompt('请输入康哥图床的用户和密码,使用空格分割');
if (userInput) {
let userInputSplit = userInput.split(" ");
let user = userInputSplit[0];
let pwd = userInputSplit[1];
GM_setValue("KggzsChartBedUser", user);
GM_setValue("KggzsChartBedPwd", pwd);
chartBedUser = user;
chartBedPwd = pwd;
popup.open('设置完毕,请重新点击', 'alert');
}
} else if (chartBedToken == null || !loginStatus) {
tokenStatus = true;
popup.open('正在配置token', 'alert');
chartBedToken = await getToken();
console.log("token:" + chartBedToken);
if (chartBedToken != null) {
$jq("#kggzsfiledata").click();
} else {
clearData();
}
tokenStatus = false;
} else {
$jq("#kggzsfiledata").click();
}
});
$jq("#kggzsfiledata").on("change", (e) => {
let chooseImageFiles = e.currentTarget.files;
if (chooseImageFiles.length == 0) {
return
};
popup.open("上传图片中...请稍后", "alert");
console.log(`图片数量:${chooseImageFiles.length}`);
$jq.each(chooseImageFiles, async (i) => {
let imageFile = chooseImageFiles[i];
let uploadImageReturn = await uploadImage(imageFile);
if (uploadImageReturn["json_data"] != null) {
console.log(uploadImageReturn);
let image_id_encoded = uploadImageReturn["json_data"]["data"]["key"];
let image_url = uploadImageReturn["json_data"]["data"]["links"]["url"];
let image_thumb_url = uploadImageReturn["json_data"]["data"]["links"]["thumbnail_url"];
let image_name = uploadImageReturn["json_data"]["data"]["origin_name"];
let image_uri = uploadImageReturn["imageUri"];
let uploadImageHTML = `<li>
<span class="delImg" id-encode="${image_id_encoded}">
<a href="javascript:;">
<i class="comiis_font f_g"></i>
</a>
</span>
<span class="charu f_f">插入</span>
<span class="p_img">
<a href="javascript:;" onclick="comiis_addsmilies('[url=${image_url}][img]${image_url}[/img][/url]')">
<img style="height:54px;width:54px;" title="${image_name}" src="${image_uri}" class="vm b_ok"></a>
</span>
<input type="hidden" name="">
</li>`;
$jq("#imglist_kggzs").append($jq(uploadImageHTML));
chartBed.storage.add("kggzs", image_id_encoded, image_url, image_thumb_url, image_name);
}
})
$jq("#kggzsfiledata").val("");
});
$jq("#imglist_kggzs").on("click", ".delImg", async (e) => {
e.preventDefault();
e.currentTarget.parentElement.remove();
// popup.open('删除中,请稍后', 'alert');
// let id_encoded = e.currentTarget.getAttribute("id-encode");
// if(!id_encoded){
// popup.open('获取id_encoded失败,请自行去Hello图床删除', 'alert');
// return;
// }
// let deleteStatus = await deleteImage(key);
// if(deleteStatus){
// e.currentTarget.parentElement.remove();
// chartBed.storage.delete("kggzs",id_encoded);
// }
})
}
function chatHelloChartBed() { // 聊天快捷图片上传Hello图床
if (!GM_getValue("v40")) {
return
};
let imgUploadBtn = `
<div class="comiis_upbox hellochartbed" style="display:none;">
<ul id="imglist_hello" class="comiis_post_imglist cl">
<li class="up_btn_hello">
<a href="javascript:;" class="bg_e b_ok f_d" id="helloChartBedBtnUpload">
<i class="comiis_font"></i>
<input type="file" name="Filedata" id="hellofiledata" accept="image/*" multiple="multiple">
<p style="padding-top: 21px;padding-left: 6px;">20MB</p>
</a>
</li>
</ul>
</div>
`;
let imgMenu = `<li><a href="javascript:;" id="menu_hello" class="">hello图床</a></li>`;
$jq("#comiis_img_chartbed_key").append($jq(imgMenu));
$jq(".comiis_minibq .imgboxlist").append($jq(imgUploadBtn));
$jq("#menu_hello").on("click", (e) => {
$jq("#menu_hello").addClass("menuclicked"); // 添加点击菜单背景白色
$jq("#menu_kggzs").removeClass("menuclicked");
$jq("#menu_z4a").removeClass("menuclicked");
$jq("#menu_chartbed_history").removeClass("menuclicked");
$jq(".comiis_upbox").hide();
$jq(".comiis_upbox.hellochartbed").show();
});
let chartBedUrl = "https://www.helloimg.com";
let chartBedUser = GM_getValue("HelloChartBedUser");
let chartBedPwd = GM_getValue("HelloChartBedPwd");
let chartBedAuthToken = null;
let loginStatus = false; // 登录状态
let authTokenStatus = false; //authToken状态
let clearData = () => {
GM_deleteValue("HelloChartBedUser");
GM_deleteValue("HelloChartBedPwd");
loginStatus = false;
authTokenStatus = false;
chartBedUser = "";
chartBedPwd = "";
chartBedAuthToken = null;
}
$jq("#helloChartBedBtnUpload i").on("click", async function () {
if (authTokenStatus) {
popup.open('正在配置中...', 'alert');
return;
}
if (!chartBedUser || !chartBedPwd) {
let userInput = prompt('请输入Hello图床的用户和密码,使用空格分割');
if (userInput) {
let userInputSplit = userInput.split(" ");
let user = userInputSplit[0];
let pwd = userInputSplit[1];
GM_setValue("HelloChartBedUser", user);
GM_setValue("HelloChartBedPwd", pwd);
chartBedUser = user;
chartBedPwd = pwd;
popup.open('设置完毕,请重新点击', 'alert');
}
} else if (chartBedAuthToken == null || !loginStatus) {
authTokenStatus = true;
popup.open('正在配置auth_token', 'alert');
chartBedAuthToken = await chartBed.getAuthToken(chartBedUrl);
console.log("auth_token:" + chartBedAuthToken);
if (chartBedAuthToken != null) {
popup.open('正在登录Hello图床', 'alert');
let retloginStatus = await chartBed.login(chartBedUrl, chartBedUser, chartBedPwd, chartBedAuthToken);
if (retloginStatus) {
loginStatus = true;
$jq("#hellofiledata").click();
} else if (retloginStatus == false) {
clearData();
}
}
authTokenStatus = false;
} else {
$jq("#hellofiledata").click();
}
})
$jq("#hellofiledata").on("change", (e) => {
let chooseImageFiles = e.currentTarget.files;
if (chooseImageFiles.length == 0) {
return
};
popup.open("上传图片中...请稍后", "alert");
$jq.each(chooseImageFiles, async (i) => {
let imageFile = chooseImageFiles[i];
let uploadImageReturn = await chartBed.uploadImage(chartBedUrl, chartBedAuthToken, imageFile);
if (uploadImageReturn["json_data"] != null) {
let image_id_encoded = uploadImageReturn["json_data"]["image"]["id_encoded"];
let image_url = uploadImageReturn["json_data"]["image"]["url"];
let image_thumb_url = uploadImageReturn["json_data"]["image"]["thumb"]["url"];
let image_name = uploadImageReturn["json_data"]["image"]["filename"];
let image_uri = uploadImageReturn["imageUri"];
let uploadImageHTML = `<li>
<span class="delImg" id-encode="${image_id_encoded}">
<a href="javascript:;">
<i class="comiis_font f_g"></i>
</a>
</span>
<span class="charu f_f">插入</span>
<span class="p_img">
<a href="javascript:;" onclick="comiis_addsmilies('[url=${image_url}][img]${image_url}[/img][/url]')">
<img style="height:54px;width:54px;" title="${image_name}" src="${image_uri}" class="vm b_ok"></a>
</span>
<input type="hidden" name="">
</li>`;
$jq("#imglist_hello").append($jq(uploadImageHTML));
chartBed.storage.add("hello", image_id_encoded, image_url, image_thumb_url, image_name);
}
})
$jq("#hellofiledata").val("");
})
$jq("#imglist_hello").on("click", ".delImg", async (e) => {
e.preventDefault();
popup.open('删除中,请稍后', 'alert');
let id_encoded = e.currentTarget.getAttribute("id-encode");
if (!id_encoded) {
popup.open('获取id_encoded失败,请自行去Hello图床删除', 'alert');
return;
}
let deleteStatus = await chartBed.deleteImage(chartBedUrl, chartBedAuthToken, id_encoded);
if (deleteStatus) {
e.currentTarget.parentElement.remove();
chartBed.storage.delete("hello", id_encoded);
}
})
}
function chatZ4AChartBed() { // 聊天快捷图片上传Z4A图床
if (!GM_getValue("v41")) {
return
};
let imgUploadBtn = `
<div class="comiis_upbox z4achartbed" style="display:none;">
<ul id="imglist_z4a" class="comiis_post_imglist cl">
<li class="up_btn_z4a">
<a href="javascript:;" class="bg_e b_ok f_d" id="z4aChartBedBtnUpload">
<i class="comiis_font"></i>
<input type="file" name="Filedata" id="z4afiledata" accept="image/*" multiple="multiple">
<p style="padding-top: 21px;padding-left: 6px;">50MB</p>
</a>
</li>
</ul>
</div>
`;
let imgMenu = `<li><a href="javascript:;" id="menu_z4a" class="">z4a图床</a></li>`;
$jq("#comiis_img_chartbed_key").append($jq(imgMenu));
$jq(".comiis_minibq .imgboxlist").append($jq(imgUploadBtn));
$jq("#menu_z4a").on("click", (e) => {
$jq("#menu_z4a").addClass("menuclicked"); // 添加点击菜单背景白色
$jq("#menu_kggzs").removeClass("menuclicked");
$jq("#menu_hello").removeClass("menuclicked");
$jq("#menu_chartbed_history").removeClass("menuclicked");
$jq(".comiis_upbox").hide();
$jq(".comiis_upbox.z4achartbed").show();
});
let chartBedUrl = "https://www.z4a.net";
let chartBedUser = GM_getValue("Z4AChartBedUser");
let chartBedPwd = GM_getValue("Z4AChartBedPwd");
let chartBedAuthToken = null;
let loginStatus = false; // 登录状态
let authTokenStatus = false; //authToken状态
let clearData = () => {
GM_deleteValue("Z4AChartBedUser");
GM_deleteValue("Z4AChartBedPwd");
loginStatus = false;
authTokenStatus = false;
chartBedUser = "";
chartBedPwd = "";
chartBedAuthToken = null;
}
$jq("#z4aChartBedBtnUpload i").on("click", async function () {
if (authTokenStatus) {
popup.open('正在配置中...', 'alert');
return;
}
if (!chartBedUser || !chartBedPwd) {
let userInput = prompt('请输入Z4A图床的用户和密码,使用空格分割');
if (userInput) {
let userInputSplit = userInput.split(" ");
let user = userInputSplit[0];
let pwd = userInputSplit[1];
GM_setValue("Z4AChartBedUser", user);
GM_setValue("Z4AChartBedPwd", pwd);
chartBedUser = user;
chartBedPwd = pwd;
popup.open('设置完毕,请重新点击', 'alert');
}
} else if (chartBedAuthToken == null || !loginStatus) {
authTokenStatus = true;
popup.open('正在配置auth_token', 'alert');
chartBedAuthToken = await chartBed.getAuthToken(chartBedUrl);
console.log("auth_token:" + chartBedAuthToken);
if (chartBedAuthToken != null) {
popup.open('正在登录Z4A图床', 'alert');
let retloginStatus = await chartBed.login(chartBedUrl, chartBedUser, chartBedPwd, chartBedAuthToken);
if (retloginStatus) {
loginStatus = true;
$jq("#z4afiledata").click();
} else if (retloginStatus == false) {
clearData();
}
}
authTokenStatus = false;
} else {
$jq("#z4afiledata").click();
}
})
$jq("#z4afiledata").on("change", (e) => {
let chooseImageFiles = e.currentTarget.files;
if (chooseImageFiles.length == 0) {
return
};
popup.open("上传图片中...请稍后", "alert");
$jq.each(chooseImageFiles, async (i) => {
let imageFile = chooseImageFiles[i];
let uploadImageReturn = await chartBed.uploadImage(chartBedUrl, chartBedAuthToken, imageFile);
if (uploadImageReturn["json_data"] != null) {
let image_id_encoded = uploadImageReturn["json_data"]["image"]["id_encoded"];
let image_url = uploadImageReturn["json_data"]["image"]["url"];
let image_thumb_url = uploadImageReturn["json_data"]["image"]["thumb"]["url"];
let image_name = uploadImageReturn["json_data"]["image"]["filename"];
let image_uri = uploadImageReturn["imageUri"];
let uploadImageHTML = `<li>
<span class="delImg" id-encode="${image_id_encoded}">
<a href="javascript:;">
<i class="comiis_font f_g"></i>
</a>
</span>
<span class="charu f_f">插入</span>
<span class="p_img">
<a href="javascript:;" onclick="comiis_addsmilies('[url=${image_url}][img]${image_url}[/img][/url]')">
<img style="height:54px;width:54px;" title="${image_name}" src="${image_uri}" class="vm b_ok"></a>
</span>
<input type="hidden" name="">
</li>`;
$jq("#imglist_z4a").append($jq(uploadImageHTML));
chartBed.storage.add("z4a", image_id_encoded, image_url, image_thumb_url, image_name);
}
})
$jq("#z4afiledata").val("");
})
$jq("#imglist_z4a").on("click", ".delImg", async (e) => {
e.preventDefault();
popup.open('删除中,请稍后', 'alert');
let id_encoded = e.currentTarget.getAttribute("id-encode");
if (!id_encoded) {
popup.open('获取id_encoded失败,请自行去Z4A图床删除', 'alert');
return;
}
let deleteStatus = await chartBed.deleteImage(chartBedUrl, chartBedAuthToken, id_encoded);
if (deleteStatus) {
e.currentTarget.parentElement.remove();
chartBed.storage.delete("z4a", id_encoded);
}
})
}
function chatHistoryChartBedImages() { // 聊天快捷图片上传中 所有图床历史上传过的图片
let historyImages = chartBed.storage.get();
let imageMenu = `<li><a href="javascript:;" id="menu_chartbed_history" class="">历史图片</a></li>`;
$jq("#comiis_img_chartbed_key").append($jq(imageMenu));
let imageArea = `
<div class="comiis_upbox chartbedhistory" style="display:none;">
<ul id="imglist_history" class="comiis_post_imglist cl">
</ul>
</div>
`;
$jq(".comiis_minibq .imgboxlist").append($jq(imageArea));
$jq("#menu_chartbed_history").on("click", (e) => {
$jq("#menu_chartbed_history").addClass("menuclicked"); // 添加点击菜单背景白色
$jq("#menu_z4a").removeClass("menuclicked");
$jq("#menu_hello").removeClass("menuclicked");
$jq(".comiis_upbox").hide();
$jq(".comiis_upbox.chartbedhistory").show();
});
$jq.each(historyImages, (i) => {
let _web = historyImages[i]["web"];
let _url = historyImages[i]["url"];
let _thumb_url = historyImages[i]["thumb_url"];
let _name = historyImages[i]["name"];
let _imageHTML = `
<li>
<span class="delImg" t-index="${i}">
<a href="javascript:;">
<i class="comiis_font f_g"></i>
</a>
</span>
<span class="charu f_f">${_web}</span>
<span class="p_img">
<a href="javascript:;" onclick="comiis_addsmilies('[url=${_url}][img]${_url}[/img][/url]')">
<img style="height:54px;width:54px;" title="${_name}" src="${_thumb_url}" class="vm b_ok"></a>
</span>
<input type="hidden" name="${_name}">
</li>
`;
$jq("#imglist_history").append($jq(_imageHTML));
})
$jq("#imglist_history").on("click", ".delImg", async (e) => {
e.preventDefault();
let _t_index = e.currentTarget.getAttribute("t-index");
let imageItem = historyImages[_t_index];
let web = imageItem["web"];
let id_encoded = imageItem["id_encoded"];
e.currentTarget.parentElement.remove();
chartBed.storage.delete(web, id_encoded);
})
}
function paymentSubjectReminder() { // 付费主题白嫖提醒
let urlForumPostMatchStatus = window.location.href.match(mt_config.rexp.forum_post);
let urlHomeSpaceMatchStatus = window.location.href.match(mt_config.rexp.home_space_url);
let urlGuideMatchStatus = window.location.href.match(mt_config.rexp.forum_guide_url);
let urlCommunityMatchStatus = window.location.href.match(mt_config.rexp.community_url) || window.location.href.match(mt_config.rexp.plate_url);
let urlBBSMatchStatus = window.location.href.match(mt_config.rexp.bbs);
let storageMatchStatus = GM_getValue("v44") != null;
let setTipForumPostList = GM_getValue("tipToFreeSubjectForumPost") == null ? [] : GM_getValue("tipToFreeSubjectForumPost");
const paymentSubjectReminderHome = {
getData() { // 获取数据
return GM_getValue("tipToFreeSubjectForumPost") == null ? [] : GM_getValue("tipToFreeSubjectForumPost");
},
setData(data) { // 设置数据
GM_setValue("tipToFreeSubjectForumPost", data);
},
async insertButtonView() { // 插入-底部导航-我的-付费主题白嫖列表(按钮)
if(typeof $jq.NZ_MsgBox == "undefined" || typeof $ != 'undefined' && $.NZ_MsgBox ){
await GM_asyncLoadScript("https://www.jq22.com/demo/NZ-Plugin-MsgBox202201130154/Js/NZ-Plugin/Js/NZ-MsgBox.min.js");
await GM_asyncLoadScript("https://www.jq22.com/demo/NZ-Plugin-MsgBox202201130154/Js/NZ-Plugin/Js/NZ-Drag.min.js");
}
await GM_asyncLoadStyleSheet("https://www.jq22.com/demo/NZ-Plugin-MsgBox202201130154/Js/NZ-Plugin/Css/NZ-MsgBox.min.css");
let comiis_left_Touch = document.createElement("li");
comiis_left_Touch.className="comiis_left_Touch";
let paymentSubjectReminderHomeBtn = document.createElement("a");
paymentSubjectReminderHomeBtn.setAttribute("href", "javascript:;");
paymentSubjectReminderHomeBtn.className = "paymentsubjectreminder";
paymentSubjectReminderHomeBtn.innerHTML = `
<div class="styli_tit f_c">
<i class="comiis_font" style="color:#ec0000;"></i>
</div>
<div class="flex">付费主题白嫖列表</div>
<div class="styli_ico">
<i class="comiis_font f_e"></i>
</div>`;
GM_addStyle(`
.NZ-MsgBox-alert .msgcontainer .msgtitle {
text-align: center !important;
}
#autolist .k_misign_lu img {
width: 40px;
height: 40px;
-moz-border-radius: 20px;
-webkit-border-radius: 20px;
border-radius: 20px;
}
.k_misign_lc .f_c{
margin: 5px 0px;
}
`)
paymentSubjectReminderHomeBtn.onclick = () => {
paymentSubjectReminderHome.showView();
}
comiis_left_Touch.append(paymentSubjectReminderHomeBtn);
$jq(".comiis_sidenv_box .sidenv_li .comiis_left_Touch.bdew").append(comiis_left_Touch);
// Array.from(document.querySelectorAll(".comiis_myinfo_list.bg_f.cl")).forEach((ele) => {
// if (ele.innerText.match(/消息提醒|资料设置|我的积分|我的勋章|我的道具/)) {
// ele.append(paymentSubjectReminderHomeBtn);
// return;
// }
// })
},
showView() { // 显示-付费主题白嫖列表(dialog)
let data = paymentSubjectReminderHome.getData();
$jq.NZ_MsgBox.alert({
title: "付费主题白嫖列表",
content: "获取中",
type: "",
location: "center",
buttons: {
confirm: {
text: "确定"
}
}
});
let notVisitedTipContent = "" //可白嫖且未访问
let notVisitedNums = 0; //可白嫖且未访问的数量
let isFreeContent = ""; // 可白嫖帖子-未读的加左上边红点
let isPaidContent = ""; // 需付费帖子
let isFreeNotVisitedContentList = [];
let isFreeContentList = [];
let isPaidContentList = [];
$jq.each(data, (i, v) => {
let timeColor = "#f91212";
let leftRedBtn = "";
if (new Date().getTime() > v["expirationTimeStamp"]) { // 可白嫖
timeColor = "#1e90ff";
if (v["isVisited"] == false) {
leftRedBtn = '<span class="icon_msgs bg_del" style="position: fixed;width: 10px;height: 10px;border-radius: 50%;margin: 10px 0px 0px -15px;"></span>'
notVisitedNums = notVisitedNums + 1;
}
}
let concatList = {
"content": `
<tbody id="autolist">
<tr>
<td style="width: 100%;">
<div style="display: inline-flex;">
${leftRedBtn}
<div style="width: 240px;">
<a href="javascript:void(0);" t-href="${v["url"]}" t-index="${i}" style="color: #1e90ff;">${v["title"]}</a>
<li style="margin: 5px 15px;color: ${timeColor};">${v["expirationTime"]}</li>
</div>
<div style="align-self: center;margin-left: 10px;" t-index="${i}" class="delsubjecttip">
<i class="comiis_font" style="font-size: 24px;padding-left: 6px;"></i>
</div>
</div>
</td>
</tr>
<tr style="height:15px;"></tr>
</tbody>
`,
"timestamp": v["expirationTimeStamp"]
};
if (new Date().getTime() > v["expirationTimeStamp"]) { // 可白嫖
if (leftRedBtn != '') {
isFreeNotVisitedContentList = isFreeNotVisitedContentList.concat(concatList);
} else {
isFreeContentList = isFreeContentList.concat(concatList);
}
} else {
isPaidContentList = isPaidContentList.concat(concatList);
}
});
isFreeNotVisitedContentList.sort(utils.listCompareAscByValue("timestamp"));
isFreeContentList.sort(utils.listCompareAscByValue("timestamp"));
isFreeContent = utils.listToStringByValue(isFreeNotVisitedContentList, "content") + utils.listToStringByValue(isFreeContentList, "content");
isPaidContent = utils.listToStringByValue(isPaidContentList, "content");
if (notVisitedNums > 0) {
notVisitedTipContent = `<span class="icon_msgs bg_del f_f" style="
display: inline-block;
position: absolute;
width: 16px;
height: 16px;
line-height: 16px;
border-radius: 50%;
font-size: 14px;
text-align: center;
margin: 3px 0px 0px 10px;
">${notVisitedNums}</span>`;
}
let dialogIsFreeContent = '<details class="subjectcanvisit" open=""><summary>可白嫖' + notVisitedTipContent + '</summary><table id="paymentSubjectReminderIsFreeList" style="overflow: auto;height: inherit;margin: 15px 0px;">' + isFreeContent + "</table></details>";
let dialogIsPaidContent = '<details class="subjectnotvisit"><summary>需付费</summary><table id="paymentSubjectReminderIsPaidList" style="overflow: auto;height: inherit;margin: 15px 0px;">' + isPaidContent + "</table></details>";
$jq(".msgcon").html("");
$jq(".msgcon").append(dialogIsFreeContent);
$jq(".msgcon").append(dialogIsPaidContent);
$jq(".NZ-MsgBox-alert.NZ-MsgBox--motion").css("top", "100px");
$jq(".msgcon").css("height", "400px");
$jq(".delsubjecttip i.comiis_font").on("click", (e) => {
var confirmStatus = confirm("确定移出提醒?");
var t_index = e.target.parentElement.getAttribute("t-index");
if (confirmStatus) {
data.splice(t_index, 1);
console.log(data);
paymentSubjectReminderHome.setData(data);
e.target.parentElement.parentElement.parentElement.parentElement.parentElement.remove();
}
});
$jq("#paymentSubjectReminderIsFreeList").on("click", "a", (e) => {
var t_index = e.target.getAttribute("t-index");
var t_href = e.target.getAttribute("t-href");
console.log(t_index, t_href);
data[t_index]["isVisited"] = true;
paymentSubjectReminderHome.setData(data);
window.open(t_href, "_blank");
e.target.setAttribute("style", "color: #000000;");
if (e.target.parentElement.parentElement.children[0].className != "icon_msgs bg_del") {
return;
}
e.target.parentElement.parentElement.children[0].remove();
$jq("#paymentSubjectReminderIsFreeList").append(e.target.parentElement.parentElement.parentElement.parentElement.parentElement);
let notVisitedNums = $jq(".subjectcanvisit summary span.icon_msgs.bg_del.f_f").text();
notVisitedNums = parseInt(notVisitedNums) - 1;
if (notVisitedNums > 0) {
$jq(".subjectcanvisit summary span.icon_msgs.bg_del.f_f").html(notVisitedNums);
} else {
$jq(".subjectcanvisit summary span.icon_msgs.bg_del.f_f").remove();
}
})
$jq("#paymentSubjectReminderIsPaidList").on("click", "a", (e) => {
var t_index = e.target.getAttribute("t-index");
var t_href = e.target.getAttribute("t-href");
console.log(t_index, t_href);
window.open(t_href, "_blank");
e.target.setAttribute("style", "color: #000000;");
})
}
}
if (storageMatchStatus && urlForumPostMatchStatus) { // 帖子内部-添加进提醒的按钮或者已添加进提醒的按钮点击移出
let paySubjectTip = $jq("span.kmren"); // 购买主题的元素
if (paySubjectTip.length != 0) {
log.success("当前帖子存在需要购买主题");
let isAddTip = false;
let tipBtnHTML = '';
Array.from(setTipForumPostList).forEach((item, index) => {
if (window.location.href.match(item["url"])) {
isAddTip = true;
return;
}
});
if (isAddTip) {
log.success("已设置提醒");
tipBtnHTML = $jq(`<a href="javascript:;" class="styli_tit f_c"><i class="comiis_font" style="color: #ffffff;"></i></a>`);
tipBtnHTML.on("click", () => {
let confirmStatus = confirm("确定移出提醒?");
if (confirmStatus) {
Array.from(setTipForumPostList).forEach((item, index) => {
if (window.location.href.match(item["url"])) {
setTipForumPostList.splice(index, 1);
GM_setValue("tipToFreeSubjectForumPost", setTipForumPostList);
popup.open("移出成功", "alert");
setTimeout(function () {
window.location.reload();
}, 1500);
return;
}
});
}
});
} else {
log.success("未设置提醒");
tipBtnHTML = $jq(`<a href="javascript:;" class="styli_tit f_c"><i class="comiis_font" style="color: #FF9900;"></i></a>`);
tipBtnHTML.on("click", () => {
let expirationTimeMatch = $jq(".kmren").parent().text().replace(/\t|\n/g, "").match(/[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}[\s]{1}[0-9]{1,2}:[0-9]{1,2}/);
if (expirationTimeMatch.length == 0) {
popup.open("获取付费主题到期时间失败", "alert");
return;
}
let expirationTime = expirationTimeMatch[0];
let expirationTimeStamp = utils.dateStringFormatToStamp(expirationTime);
setTipForumPostList = setTipForumPostList.concat({
"url": window.location.href,
"title": document.title.replace(" - MT论坛", ""),
"expirationTime": expirationTime,
"expirationTimeStamp": expirationTimeStamp,
"isVisited": false
});
GM_setValue("tipToFreeSubjectForumPost", setTipForumPostList);
popup.open("添加成功", "alert");
setTimeout(function () {
window.location.reload();
}, 1500);
});
}
$jq(".comiis_head.f_top .header_y").append(tipBtnHTML);
};
}
if (storageMatchStatus && urlBBSMatchStatus) { // 底部导航-我的-提供类似小黑屋这种可查看设置提醒的帖子
paymentSubjectReminderHome.insertButtonView();
}
if (storageMatchStatus) { // 设置提醒小红点
function getTipNums() {
let needTipNums = 0;
Array.from(paymentSubjectReminderHome.getData()).forEach((item, index) => {
if (new Date().getTime() > item["expirationTimeStamp"] && item["isVisited"] == false) {
needTipNums += 1;
}
});
return needTipNums;
}
if (urlHomeSpaceMatchStatus || urlGuideMatchStatus || urlCommunityMatchStatus) { // 当前网页为,底部导航-我的
let redBtn = $jq(".icon_msgs.bg_del.f_f"); // 底部导航-我的-右上角小红点
let tipNums = 0;
if (redBtn.length) {
tipNums = parseInt(redBtn.text());
$jq(".icon_msgs.bg_del.f_f").html(tipNums + getTipNums());
$jq(".comiis_head .header_z .kmuser em").append($jq(`<span class="icon_msgs bg_del"></span>`));
} else {
let tipnums = getTipNums();
if (tipnums) {
$jq("ul.comiis_flex li.flex a[title='我的'] i.comiis_font").append($jq(`<span class="icon_msgs bg_del f_f">${tipnums}</span>`));
$jq(".comiis_head .header_z .kmuser em").append($jq(`<span class="icon_msgs bg_del"></span>`));
}
}
}
if (urlHomeSpaceMatchStatus) { // 当前网页为,底部导航-我的-付费主题白嫖列表中最右边
let tipnums = getTipNums();
if (tipnums) {
$jq(".comiis_flex.comiis_styli.paymentsubjectreminder div.flex").after($jq(`<span class="myinfo_tip bg_del f_f">${tipnums}</span>`));
}
}
if (urlBBSMatchStatus) { // 当前网页为,全部
let redBtn = $jq(".sidenv_num.bg_del.f_f"); // 侧边栏-头像-右上角小红点
let tipNums = 0;
if (redBtn.length) {
tipNums = parseInt(redBtn.text());
$jq(".sidenv_num.bg_del.f_f").html(tipNums + getTipNums());
} else {
let tipnums = getTipNums();
if (tipnums) {
$jq(".sidenv_user em").before($jq(`<span class="sidenv_num bg_del f_f">${tipnums}</span>`));
}
}
}
}
}
function pageSmallWindowBrowsingForumPost(){ //页面小窗浏览帖子
if (!GM_getValue("v45") && (
!(window.location.href.match(mt_config.rexp.forum_guide_url) ||
!(window.location.href.match(mt_config.rexp.search_url))
))
) {return};
GM_addStyle(`
.xtiper_sheet,
.xtiper_sheet .xtiper_sheet_tit{
border-radius: 10px 10px 0px 0px;
}
/* title自定义美化 */
.xtiper_sheet_tit.xtiper_sheet_left{
display: inline-flex;
background: #fff;
width: 100%;
box-sizing: border-box;
}
.xtiper_sheet_tit.xtiper_sheet_left img.xtiper_tit_ico{
background: #fff;
filter: invert(100%);
width: 24px;
height: 24px;
align-self: center;
}
.xtiper_sheet_tit.xtiper_sheet_left .xtiper_tit_content{
margin-left: 22px;
width: 215px;
}
.xtiper_sheet_tit.xtiper_sheet_left .xtiper_tit_content p{
word-wrap: break-word;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.xtiper_sheet_tit.xtiper_sheet_left .xtiper_tit_content .xtiper_tit_svg_lock{
display: flex;
align-items: center;
}
.xtiper_sheet_tit.xtiper_sheet_left .xtiper_tit_content .xtiper_tit_svg_lock svg{
margin: 0px 6px 0px 2px;
}
.xtiper_sheet_tit.xtiper_sheet_left .xtiper_tit_right {
display: inline-flex;
align-items: center;
align-content: center;
width: 115px;
justify-content: center;
}
.xtiper_sheet_tit.xtiper_sheet_left .xtiper_tit_right_windowopen,
.xtiper_sheet_tit.xtiper_sheet_left .xtiper_tit_right_windowclose{
width: 100%;
text-align: center;
margin: 0px 0px;
}
/* 底部高度不对等问题*/
.xtiper_content.xtit{
height: calc(100% - 70px);
}
/* 底部消息距离底部30px*/
.xtiper.xtiper_msg.xtiper_msg_bottom.xtiper_msg_black.xon{
margin-bottom: 30px;
}
`);
function getFormList() { // 获取当前页面所有帖子
let formList = mt_config.dom_obj.comiis_formlist() ? mt_config.dom_obj.comiis_formlist() : [];
formList = formList.length == 0 ? mt_config.dom_obj.comiis_postli() : formList;
formList = formList.length == 0 ? mt_config.dom_obj.comiis_mmlist() : formList;
return formList;
}
let formlist = null; // 帖子列表
let isFindFormList = false; // 是否找到帖子
let findFormListNums = 0; // 找到帖子的数量
let waitFormListAppear = setInterval(function () { // 等待页面加载出现帖子
if (isFindFormList) {
formlist = getFormList();
main();
clearInterval(waitFormListAppear);
} else {
if (findFormListNums >= 10) {
console.log("未出现帖子或寻找贴子超时,清理定时器");
clearInterval(waitFormListAppear);
}
isFindFormList = getFormList().length ? true : false;
findFormListNums += 1;
}
}, 800);
function getSmallPageBtn(forumPostTitle,forumPostUrl,isNew) {
let prevNode = document.createElement("li");
let websiteTitle = `
<img src="https://cdn-bbs.mt2.cn/template/comiis_app/comiis/img/favicon.ico" class="xtiper_tit_ico">
<div class="xtiper_tit_content">
<p>${forumPostTitle}</p>
<div class="xtiper_tit_svg_lock">
<svg t="1660458686317" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2383" width="12" height="12" style="margin: 0px 6px 0px 2px;"><path d="M842.666667 384h-74.666667V277.333333a234.666667 234.666667 0 1 0-469.333333 0v106.666667H224a53.393333 53.393333 0 0 0-53.333333 53.333333v490.666667a53.393333 53.393333 0 0 0 53.333333 53.333333h618.666667a53.393333 53.393333 0 0 0 53.333333-53.333333V437.333333a53.393333 53.393333 0 0 0-53.333333-53.333333zM341.333333 277.333333c0-105.866667 86.133333-192 192-192s192 86.133333 192 192v106.666667H341.333333z" fill="#000000" p-id="2384"></path></svg>
<p>bbs.binmt.cc</p>
</div>
</div>
<div class="xtiper_tit_right">
<div class="xtiper_tit_right_windowopen">
<svg t="1660459294973" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3580" width="20" height="20"><path d="M5.064339 94.782119l0-74.338917 494.595401 0c17.302383 0 31.352438 16.614748 31.352438 37.206628 0 20.517541-14.050055 37.132289-31.352438 37.132289L5.064339 94.782119" p-id="3581" fill="#2c2c2c"></path><path d="M1008.639721 1024l-74.338917 0L934.300804 529.404599c0-17.302383 16.614748-31.352438 37.206628-31.352438 20.517541 0 37.132289 14.050055 37.132289 31.352438L1008.639721 1024" p-id="3582" fill="#2c2c2c"></path><path d="M1008.639721 20.443202 945.972014 20.443202 1008.639721 20.443202Z" p-id="3583" fill="#2c2c2c"></path><path d="M1008.639721 83.129494 1008.639721 20.443202 1008.639721 83.129494Z" p-id="3584" fill="#2c2c2c"></path><path d="M5.064339 83.129494 5.064339 20.443202 67.750631 20.443202 5.064339 20.443202 5.064339 83.129494Z" p-id="3585" fill="#2c2c2c"></path><path d="M5.064339 1024 5.064339 961.332293 5.064339 1024Z" p-id="3586" fill="#2c2c2c"></path><path d="M67.750631 1024 5.064339 1024 67.750631 1024Z" p-id="3587" fill="#2c2c2c"></path><path d="M1008.639721 1024 945.972014 1024 1008.639721 1024Z" p-id="3588" fill="#2c2c2c"></path><path d="M1008.639721 1024 1008.639721 961.332293 1008.639721 1024Z" p-id="3589" fill="#2c2c2c"></path><path d="M934.300804 20.443202l74.338917 0 0 263.438538c0 17.302383-16.614748 31.371023-37.132289 31.371023-20.610465 0-37.206628-14.06864-37.206628-31.371023L934.300804 20.443202" p-id="3590" fill="#2c2c2c"></path><path d="M726.393437 94.782119c-17.339552 0-31.371023-16.614748-31.371023-37.132289 0-20.573295 14.031471-37.206628 31.371023-37.206628l282.227699 0 0 74.338917L726.393437 94.782119" p-id="3591" fill="#2c2c2c"></path><path d="M79.403256 1024 5.064339 1024 5.064339 20.443202 79.403256 20.443202 79.403256 1024Z" p-id="3592" fill="#2c2c2c"></path><path d="M1008.639721 949.661083 1008.639721 1024 5.064339 1024 5.064339 949.661083 1008.639721 949.661083Z" p-id="3593" fill="#2c2c2c"></path><path d="M947.941995 28.564729c12.210167-12.265921 33.935716-10.426033 48.431805 4.107225 14.551843 14.477504 16.391731 36.221637 4.107225 48.431805L288.425706 793.214831c-12.265921 12.321676-33.9543 10.481787-48.506143-4.12581-14.533258-14.458919-16.373147-36.221637-4.107225-48.394635L947.941995 28.564729" p-id="3594" fill="#2c2c2c"></path></svg>
</div>
<div class="xtiper_tit_right_windowclose">
<svg t="1660459530654" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5064" width="20" height="20"><path d="M579.392 511.296l429.376 428.544a48.128 48.128 0 0 1-34.176 82.304c-12.8 0-25.088-5.12-34.112-14.208L511.168 579.392 81.792 1008a48.32 48.32 0 0 1-67.648-0.576 48.128 48.128 0 0 1-0.64-67.52L442.88 511.296 13.568 82.752A48.128 48.128 0 0 1 14.08 15.168 48.32 48.32 0 0 1 81.792 14.592l429.376 428.544L940.48 14.592a48.32 48.32 0 0 1 67.648 0.64c18.624 18.56 18.88 48.64 0.64 67.52L579.392 511.296z" fill="#2c2c2c" p-id="5065"></path></svg>
</div>
</div>
`;
prevNode.className = "f_c";
prevNode.setAttribute("style", "display: flex;justify-content: center;align-items: center;");
prevNode.innerHTML = `<svg t="1660462230529" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="7937" width="23" height="23" style="margin-right: 4px;"><path d="M885.333333 768h-618.666666C215.466667 768 170.666667 725.333333 170.666667 672v-448C170.666667 170.666667 213.333333 128 266.666667 128h616.533333C938.666667 128 981.333333 170.666667 981.333333 224v445.866667c0 55.466667-42.666667 98.133333-96 98.133333z m-618.666666-576c-17.066667 0-32 14.933333-32 32v445.866667c0 17.066667 14.933333 32 32 32h616.533333c17.066667 0 32-14.933333 32-32V224c2.133333-17.066667-12.8-32-29.866667-32h-618.666666z" p-id="7938" fill="#999999"></path><path d="M757.333333 896h-618.666666C85.333333 896 42.666667 851.2 42.666667 800v-448c0-17.066667 14.933333-32 32-32s32 14.933333 32 32v445.866667c0 19.2 14.933333 34.133333 32 34.133333h616.533333c17.066667 0 32 14.933333 32 32s-12.8 32-29.866667 32z" p-id="7939" fill="#999999"></path></svg><a class="tosmallwindowprev"></a>`;
prevNode.getElementsByClassName("tosmallwindowprev")[0].innerText = isNew ? "Win" :"小窗浏览";
prevNode.onclick = () => {
xtip.open({
type: 'url',
content: forumPostUrl,
title: websiteTitle,
height: '88%',
app: true,
success:(e)=>{
let xtiper_tit_right_windowopen = e.xtipdiv.querySelector(".xtiper_tit_right_windowopen svg");
let xtiper_tit_right_windowclose = e.xtipdiv.querySelector(".xtiper_tit_right_windowclose svg");
xtiper_tit_right_windowopen.onclick = ()=>{
window.open(forumPostUrl,"_blank");
}
xtiper_tit_right_windowclose.onclick = ()=>{
xtip.close(e.mainid);
}
e.xtipdiv.querySelector(".xtiper_tit_content p").onclick = ()=>{
GM_setClipboard(forumPostUrl);
xtip.msg('已复制网址', {icon: 'success',pos: 'bottom'});
};
}
});
}
return prevNode;
}
async function main() {
$jq.each(formlist, function (index, value) {
let isNewUI = false;
let formBottomEle = value.querySelectorAll(".comiis_znalist_bottom.b_t.cl ul.cl li");
if(!formBottomEle.length){
let tempFormBottomEle = value.querySelectorAll(".comiis_xznalist_bottom.cl ul.cl li"); // 新版论坛UI
if(!tempFormBottomEle.length){return};
formBottomEle = tempFormBottomEle;
isNewUI = true;
};
let clParentEle = formBottomEle[0].parentElement;
if(clParentEle.querySelector(".tosmallwindowprev")){
console.log("已经插入过小窗浏览");
}else{
let forumPostUrl = value.querySelector(".mmlist_li_box.cl a").getAttribute("href");
let forumPostTitle = value.querySelector(".mmlist_li_box.cl a").innerText;
if(!forumPostUrl){
console.log("获取帖子url失败");
return;
}
if(!forumPostTitle){
console.log("获取帖子标题失败");
return;
}
let previewPicturesEle = getSmallPageBtn(forumPostTitle, forumPostUrl,isNewUI?isNewUI:null);
if (previewPicturesEle != null) {
clParentEle.append(previewPicturesEle);
clParentEle.setAttribute("style", "display: flex;");
}
}
})
}
}
function userCheckBoxSettings() { // 设置的html
function checkboxNode() {
return $jq(".whitesevcheckbox");
}
function selectedNodeText() {
let selectedVal = selectNode().val();
return $jq(`.beauty-select option[value='${selectedVal}']`).text();
}
function selectNode() {
return $jq(".beauty-select");
}
function setCodeNodeCheckedStatus(status) { // 设置 开关的状态
if (status) {
checkboxNode().removeClass("comiis_checkbox_close");
} else {
checkboxNode().addClass("comiis_checkbox_close");
}
}
function setLastClickItem() { //初始化设置上次点击的select内容
let selectNodeNormalVal = GM_getValue("last") == null ? "v2" : GM_getValue("last");
selectNode().val(selectNodeNormalVal);
setCodeNodeCheckedStatus(GM_getValue(selectNodeNormalVal) != null ? true : false);
}
function setSelectNodeChangeEvent() { // 设置选项的change事件
selectNode().change(function () {
let selected_value = $jq('.beauty-select').val();
GM_setValue("last", selected_value);
let check_value = GM_getValue(selected_value) != null ? true : false;
setCodeNodeCheckedStatus(check_value);
});
}
function setCodeNodeClickEvent() { // 设置开关的click事件
checkboxNode().on("click", (e) => {
let selected_value = selectNode().val();
let check_value = GM_getValue(selected_value) != null ? false : true;
if (check_value) {
GM_setValue(selected_value, true);
} else {
GM_deleteValue(selected_value);
}
// let showText = check_value ? `${selectedNodeText()}开启` : `${selectedNodeText()}关闭`;
// iosOverlay({
// text: showText,
// duration: 1500,
// icon: "https://www.helloimg.com/images/2022/05/24/ZoDS05.png"
// });
let showText = check_value ? '设置-开启' : '设置-关闭';
popup.open(showText, "alert");
setCodeNodeCheckedStatus(check_value);
})
}
function setSelectNodeCSS() {
GM_addStyle(`
.beauty-select{
background-color: #fff;
height:28px;
width:180px;
line-height:28px;
border: 1px solid #ececec;
background: url(w.png) no-repeat;
background-position: 95% 50%;
-webkit-appearance: none; /*去掉样式 for chrome*/
appearance:none;/*去掉样式*/
-moz-appearance:none;/*去掉样式*/
}`);
}
if (window.location.href.match(mt_config.rexp.bbs)) {
var setting_content = document.createElement("li");
setting_content.className = "comiis_left_Touch";
setting_content.innerHTML = '<div class="styli_tit f_c"><i class="comiis_font" style="color: #a70bfe;font-size: 23px;"></i></div><div class="flex" style="display: flex;align-items: center;"><select style="vertical-align:top;border-color:transparent;font-size: 17px;font-weight: 300;" class="beauty-select">' +
'<option value="v2">识别链接<\/option>' +
'<option value="v17">自动签到<\/option>' +
'<option value="v18">自动展开帖子<\/option>' +
'<option value="v16">自适应帖子内图片的宽度<\/option>' +
'<option value="v15">显示用户的UID<\/option>' +
'<option value="v19">显示搜索历史<\/option>' +
'<option value="v1">移除帖子字体效果<\/option>' +
'<option value="v3">移除评论区字体效果<\/option>' +
'<option value="v6">评论区开启点评<\/option>' +
'<option value="v32">自动加载上一页评论<\/option>' +
'<option value="v21">自动加载下一页评论<\/option>' +
'<option value="v30">小黑屋<\/option>' +
'<option value="v31">快捷回复UBB代码<\/option>' +
'<option value="v35">完整回复UBB代码<\/option>' +
'<option value="v33">今日签到之星<\/option>' +
'<option value="v34">帖外预览图片<\/option>' +
'<option value="v36">修复搜索的清空按钮<\/option>' +
'<option value="v37">修复无法正确进入别人的空间<\/option>' +
'<option value="v42">康哥图床-帖子内(20MB)<\/option>' +
'<option value="v38">Hello图床-帖子内(20MB)<\/option>' +
'<option value="v39">Z4A图床-帖子内<\/option>' +
'<option value="v43">康哥图床-聊天内(20MB)<\/option>' +
'<option value="v40">Hello图床-聊天内(20MB)<\/option>' +
'<option value="v41">Z4A图床-聊天内(50MB)<\/option>' +
'<option value="v44">付费主题白嫖提醒<\/option>' +
'<option value="v45">页面小窗浏览帖子<\/option>' +
'<\/select>' +
'<code class="bg_f b_ok comiis_checkbox comiis_checkbox_close whitesevcheckbox"></code>' +
'<\/div>';
// Array.from(document.querySelectorAll(".comiis_myinfo_list.bg_f.cl")).forEach((ele) => {
// if (ele.innerText.match(/风格配色|夜间模式|最近访客|改名申请|手机绑定设置/)) {
// ele.appendChild(setting_content);
// return;
// }
// })
GM_addStyle(`
.comiis_sidenv_box ul.comiis_left_Touch.bdew li:nth-last-child(1) {
margin-bottom: 10px;
}
`);
$jq(".comiis_sidenv_box .sidenv_li .comiis_left_Touch.bdew").append(setting_content);
tryCatch(setSelectNodeCSS);
tryCatch(setLastClickItem);
tryCatch(setCodeNodeClickEvent);
tryCatch(setSelectNodeChangeEvent);
// tryCatch(loadCheckboxTipResource);
}
}
function mobileMainRunScript() {
tryCatch(commentsAddReviews);
tryCatch(recoveryIMGWidth);
tryCatch(identifyLinks);
tryCatch(showUserUID);
tryCatch(previewPictures);
tryCatch(removeForumPostFontStyle);
tryCatch(modifyForumPostFontColor);
tryCatch(autoSignIn);
tryCatch(autoExpendFullTextByForumPost);
tryCatch(searchHistory);
tryCatch(loadNextComments, '', '$jq("#loading-comment-tip").text("加载评论失败")');
tryCatch(loadPrevComments, '', '$jq("#loading-comment-tip-prev").text("加载评论失败")');
tryCatch(repairClearSearchInput);
tryCatch(repairUnableToEnterOtherSpaceCorrectly);
tryCatch(postForumKGChartBed);
tryCatch(postForumHelloChartBed);
tryCatch(postForumZ4aChartBed);
tryCatch(chatChartBed);
tryCatch(pageSmallWindowBrowsingForumPost);
}
function entrance() { //这是入口
var usa = navigator.userAgent.match(mt_config.rexp.pc_useragent);
if (usa != null) {
tryCatch(repairPCNoLoadResource);
$jq(document).ready(function () {
tryCatch(latestReleaseForumPost);
// tryCatch(detectUserOnlineStatus);
tryCatch(identifyLinks);
tryCatch(collectionForumPost);
tryCatch(quickReply);
tryCatch(showUserLevel);
tryCatch(autoSignIn);
});
} else {
$jq(document).ready(function () {
mobileMainRunScript();
tryCatch(shieldUser);
tryCatch(shieldPlate);
tryCatch(userCheckBoxSettings); // 选项主要界面内容
tryCatch(blackHome.insertMobileBlackHomeButton);
tryCatch(paymentSubjectReminder);
tryCatch(quickUBB.insertQuickReplyUBB);
tryCatch(quickUBB.insertReplayUBB);
tryCatch(blacklistShieldUsersOrBlocks);
tryCatch(showTodayStar);
tryCatch(showSignInRanking);
pageAfterDOMChangeRunFunction();
})
}
} //function entrance()的结束处
if (envCheck()) {
$jq(document).ready(function () {
entrance()
});
}
})();