// ==UserScript== // @name Tieba Enhance // @author lkytal // @namespace Lkytal // @homepage http://lkytal.github.io/ // @homepageURL https://lkytal.github.io/GM // @description 贴吧小尾巴, 坟贴提醒, 去除跳转等功能 // @include http://tieba.baidu.com/* // @include https://tieba.baidu.com/* // @version 6.2.3 // @require https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.4.1.min.js // @icon https://github.com/lkytal/GM/raw/master/icons/tieba.png // @noframes // @license AGPL // @grant unsafeWindow // @grant GM_addStyle // @grant GM_xmlhttpRequest // @grant GM_getValue // @grant GM_setValue // @grant GM_listValues // @grant GM_deleteValue // @run-at document-end // @charset UTF-8 // @supportURL https://github.com/lkytal/GM/issues // @downloadURL https://update.greasyfork.icu/scripts/345/Tieba%20Enhance.user.js // @updateURL https://update.greasyfork.icu/scripts/345/Tieba%20Enhance.meta.js // ==/UserScript== "use strict"; var AddTail, CheckPost, TailInit, TiebaInit, addTiebaCSS, clearLink, log, open_setting_window, tiebaData, hasProp = {}.hasOwnProperty; window.$ = window.jQuery = jQuery.noConflict(true); tiebaData = { StopPost: 0, count: 0 }; log = function (msg) { var text; tiebaData.count += 1; text = "hit " + tiebaData.count + " : " + msg; return console.log(text); }; //setting win open_setting_window = function () { var UpdateText, ref, ref1, x; $('setting_shadow').remove(); $('body').append("
重置
保存
设置

坟贴检测

超过 天的帖子视为坟贴
坟贴禁回

小尾巴
html
javascript
保存当前尾巴
新建尾巴
删除尾巴
预览

"); //读取设置 $("#fentie_date")[0].value = tiebaData.fentie_date; if (!tiebaData.fentie_open) { $("#fentie_open").attr("class", "setting_sp_btn close"); $("#fentie_open + div").css("display", "none"); } if (!tiebaData.fentie_forbidden) { $("#fentie_forbidden").attr("class", "setting_sp_btn close"); } if (!tiebaData.tail_open) { $("#tail_open").attr("class", "setting_sp_btn close"); $("#tail_select,#tail_select + div").css("display", "none"); } ref = tiebaData.tail_data; for (x in ref) { if (!hasProp.call(ref, x)) continue; $("#tail_select_text")[0].innerHTML = x; $("#tail_select_text").attr("new", "0"); $("#tail_select_text").attr("oname", x); $("#tail_data")[0].value = tiebaData.tail_data[x].split("!分隔!")[0]; $("#tail_type_text")[0].innerHTML = tiebaData.tail_data[x].split("!分隔!")[1]; break; } ref1 = tiebaData.tail_data; for (x in ref1) { if (!hasProp.call(ref1, x)) continue; $("#tail_option_box").append("
" + x + "
"); } UpdateText = function () { var e; if ($("#tail_type_text")[0].innerHTML === "javascript") { try { $("#tail_data_show")[0].innerHTML = eval($("#tail_data")[0].value); } catch (error) { e = error; $("#tail_data_show")[0].innerHTML = e; } } else { if ($("#tail_type_text")[0].innerHTML === "html") { $("#tail_data_show")[0].innerHTML = $("#tail_data")[0].value; } } }; UpdateText(); $(".tail_option").click(function () { $("#tail_select_text")[0].innerHTML = this.innerHTML; $("#tail_select_text").attr("new", "0"); $("#tail_select_text").attr("oname", this.innerHTML); $("#tail_data")[0].value = tiebaData.tail_data[this.innerHTML].split("!分隔!")[0]; $("#tail_type_text")[0].innerHTML = tiebaData.tail_data[this.innerHTML].split("!分隔!")[1]; return UpdateText(); }); $(".tail_type_option").click(function () { $("#tail_type_text")[0].innerHTML = this.innerHTML; return UpdateText(); }); $("#tail_data").keyup(function () { return UpdateText(); }); $("#setting_shadow").fadeIn(400); //按钮 $("#setting_close").mouseenter(function () { return this.innerHTML = "关闭"; }); $("#setting_close").mouseleave(function () { return this.innerHTML = "设置"; }); //$("#setting_window").click (e) -> e.stopPropagation() $("#setting_close").click(function () { return $("#setting_shadow").fadeOut(400, function () { return $("#setting_shadow").remove(); }); }); $("#setting_reset").click(function () { var j, key, len, ref2; if (confirm("确定重置设置吗(会刷新页面)")) { ref2 = GM_listValues(); for (j = 0, len = ref2.length; j < len; j++) { key = ref2[j]; GM_deleteValue(key); } window.location.reload(); } }); $("#fentie_open").click(function () { $("#fentie_open + div").slideToggle("slow"); if (tiebaData.fentie_open) { tiebaData.fentie_open = 0; return $("#fentie_open").attr("class", "setting_sp_btn close"); } else { tiebaData.fentie_open = 1; return $("#fentie_open").attr("class", "setting_sp_btn"); } }); $("#fentie_forbidden").click(function () { if (tiebaData.fentie_forbidden) { tiebaData.fentie_forbidden = 0; $("#fentie_forbidden").attr("class", "setting_sp_btn close"); } else { tiebaData.fentie_forbidden = 1; $("#fentie_forbidden").attr("class", "setting_sp_btn"); } }); $("#tail_open").click(function () { if (tiebaData.tail_open) { tiebaData.tail_open = 0; $("#tail_select,#tail_select + div").toggle("slow"); $("#tail_option_box").hide(400); $("#tail_type_box").hide(400); $("#tail_open").attr("class", "setting_sp_btn close"); } else { tiebaData.tail_open = 1; $("#tail_select,#tail_select + div").slideToggle("slow"); $("#tail_open").attr("class", "setting_sp_btn"); } }); $("#tail_select_text + div").css("display", "none"); $("#tail_select_text").click(function () { var hideSelect; $("#tail_select_text + div").show(400); $(document).bind("click", hideSelect = function (e) { if (e.target.id !== "tail_select_text" && e.target.id !== "tail_open") { $("#tail_select_text + div").hide(400); $(document).unbind("click", hideSelect); } }); }); $("#tail_type_text + div").css("display", "none"); $("#tail_type_text").click(function () { var hideType; $("#tail_type_text + div").show(400); $(document).bind("click", hideType = function (e) { if (e.target.id !== "tail_type_text" && e.target.id !== "tail_open") { $("#tail_type_text + div").hide(400); $(document).unbind("click", hideType); } }); }); $("#tail_new").click(function () { $("#tail_select_text").attr("new", "1"); $("#tail_select_text").attr("oname", ""); $("#tail_select_text")[0].textContent = "New" + Math.random().toString().substr(3, 3); $("#tail_data")[0].value = "
小尾巴脚本Tieba Enhance:
https://git.oschina.net/coldfire/GM"; $("#tail_type_text")[0].textContent = "html"; }); $("#tail_delete").click(function () { var oname, ref2, ref3; oname = $("#tail_select_text")[0].getAttribute("oname"); if ($("#tail_select_text")[0].getAttribute("new") !== 1) { delete tiebaData.tail_data[oname]; } ref2 = tiebaData.tail_data; for (x in ref2) { if (!hasProp.call(ref2, x)) continue; $("#tail_select_text")[0].innerHTML = x; $("#tail_select_text").attr("new", "0"); $("#tail_select_text").attr("oname", x); $("#tail_data")[0].value = tiebaData.tail_data[x].split("!分隔!")[0]; $("#tail_type_text")[0].innerHTML = tiebaData.tail_data[x].split("!分隔!")[1]; break; } //save GM_setValue("tail_data", JSON.stringify(tiebaData.tail_data)); //reload $("#tail_option_box").empty(); ref3 = tiebaData.tail_data; for (x in ref3) { if (!hasProp.call(ref3, x)) continue; tiebaData.tail_data[x] = tiebaData.tail_data[x].replace(/!逗号!/g, ",").replace(/!引号!/g, "\""); $("#tail_option_box").append("
" + x + "
"); } UpdateText(); }); $("#tail_save").click(function () { var name, oname, ref2, ref3; name = $("#tail_select_text")[0].innerHTML; oname = $("#tail_select_text")[0].getAttribute("oname"); if ($("#tail_select_text")[0].getAttribute("new") === 1) { if (tiebaData.tail_data[name] != null) { return alert("该尾巴已存在!"); } else { tiebaData.tail_data[name] = $("#tail_data")[0].value + "!分隔!" + $("#tail_type_text")[0].textContent; } } else { if (name === oname) { tiebaData.tail_data[name] = $("#tail_data")[0].value + "!分隔!" + $("#tail_type_text")[0].textContent; } else { delete tiebaData.tail_data[oname]; tiebaData.tail_data[name] = $("#tail_data")[0].value + "!分隔!" + $("#tail_type_text")[0].textContent; } } ref2 = tiebaData.tail_data; for (x in ref2) { if (!hasProp.call(ref2, x)) continue; tiebaData.tail_data[x] = tiebaData.tail_data[x].replace(/,/g, "!逗号!").replace(/"/g, "!引号!"); } GM_setValue("tail_data", JSON.stringify(tiebaData.tail_data)); //reload $("#tail_option_box").empty(); ref3 = tiebaData.tail_data; for (x in ref3) { if (!hasProp.call(ref3, x)) continue; tiebaData.tail_data[x] = tiebaData.tail_data[x].replace(/!逗号!/g, ",").replace(/!引号!/g, "\""); $("#tail_option_box").append("
" + x + "
"); } UpdateText(); }); //保存部分 $("#setting_save").click(function () { tiebaData.fentie_date = $("#fentie_date")[0].value; GM_setValue("fentie_open", tiebaData.fentie_open); GM_setValue("fentie_date", tiebaData.fentie_date); GM_setValue("fentie_forbidden", tiebaData.fentie_forbidden); GM_setValue("tail_open", tiebaData.tail_open); return $("#setting_shadow").fadeOut(400, function () { return $("#setting_shadow").remove(); }); }); }; //坟贴检测函数 CheckPost = function () { var date_str, date_time, days, years; if ($("#j_core_title_wrap").length && tiebaData.fentie_open) { date_str = $("#j_p_postlist ul.p_tail > li:nth-child(2) > span")[0].textContent; if (date_str === "1970-01-01 07:00") { return setTimeout(CheckPost, 500); } date_str = date_str.replace(" ", "-").replace(":", "-").split("-"); date_time = new Date(date_str[0], date_str[1] - 1, date_str[2], date_str[3], date_str[4]); days = Math.round((new Date() - date_time) / 86400000); if (days >= tiebaData.fentie_date) { if (days >= 365) { years = Math.round(days / 365); days = `${years}年` + (days - years * 365); } $("#tb_nav").after(`

这是一个 ${days} 天的坟贴哦~

`); if (tiebaData.fentie_forbidden) { return tiebaData.StopPost = 1; } } } }; //Tail AddTail = function (e) { var currentTail, key, tailList; if (tiebaData.StopPost === 1) { if (!confirm("这可能是一个坟贴, 确认要回复么?")) { return $("#ueditor_replace").empty(); } } if (tiebaData.tail_cur === "不使用小尾巴") { return; } if (tiebaData.tail_cur === "随机小尾巴") { tailList = function () { var ref, results; ref = tiebaData.tail_data; results = []; for (key in ref) { if (!hasProp.call(ref, key)) continue; results.push(key); } return results; }(); tiebaData.tail_cur = tailList[Math.round(Math.random() * tailList.length)]; } currentTail = tiebaData.tail_data[tiebaData.tail_cur].split("!分隔!"); if (currentTail[1] === "html") { $("#ueditor_replace").append("
" + currentTail[0]); } else if (currentTail[1] === "javascript") { $("#ueditor_replace").append("
" + eval(currentTail[0])); } }; TailInit = function () { var SendBt, i, ref, ref1, x; if (!tiebaData.tail_open) { return; } if (document.querySelector(".ui_btn.ui_btn_m.j_submit.poster_submit")) { $("a.j_submit.poster_submit").before("
"); $("#tail_use_text").click(function () { return $("#tail_use_box").slideToggle(400); }); $(document).bind("click", function (e) { if (e.target.id !== "tail_use_text") { $("#tail_use_box").slideUp(400); } }); if (tiebaData.tail_cur === "不使用小尾巴" || tiebaData.tail_cur === "随机小尾巴") { $("#tail_use_text")[0].innerHTML = tiebaData.tail_cur; } else if (typeof tiebaData.tail_data[tiebaData.tail_cur] === "undefined") { ref = tiebaData.tail_data; for (i in ref) { if (!hasProp.call(ref, i)) continue; if (!(i != null)) { continue; } tiebaData.tail_cur = i; break; } GM_setValue("tail_cur", tiebaData.tail_cur); $("#tail_use_text")[0].innerHTML = tiebaData.tail_cur; } else { $("#tail_use_text")[0].innerHTML = tiebaData.tail_cur; } $("#tail_use_box").append("
不使用小尾巴
"); $("#tail_use_box").append("
随机小尾巴
"); ref1 = tiebaData.tail_data; for (x in ref1) { if (!hasProp.call(ref1, x)) continue; $("#tail_use_box").append(`
${x}
`); } $(".tail_use_option").click(function () { tiebaData.tail_cur = this.innerHTML; $("#tail_use_text")[0].innerHTML = tiebaData.tail_cur; GM_setValue("tail_cur", tiebaData.tail_cur); }); SendBt = document.querySelector("a.j_submit.poster_submit[title=\"Ctrl+Enter快捷发表\"]"); SendBt.addEventListener("click", AddTail, true); document.onkeydown = function (event) { if (event.ctrlKey && event.keyCode === 13) { return AddTail(); } }; } else { setTimeout(TailInit, 100); } }; clearLink = function (event) { var link, ref, url; link = event.target; if (((ref = link.href) != null ? ref.indexOf("http://jump.bdimg.com/safecheck") : void 0) === 0) { url = link.textContent; if (url.indexOf("http") !== 0) { url = "http://" + url; } return link.href = url; } }; TiebaInit = function () { addTiebaCSS(); tiebaData.fentie_open = GM_getValue("fentie_open", 1); tiebaData.fentie_date = GM_getValue("fentie_date", 30); tiebaData.fentie_forbidden = GM_getValue("fentie_forbidden", 1); tiebaData.tail_open = GM_getValue("tail_open", 1); tiebaData.tail_cur = GM_getValue("tail_cur", ""); tiebaData.tail_data = JSON.parse(GM_getValue("tail_data", "{\"Default\":\" !分隔!html\"}")); tiebaData._style_setted = 0; $("#tb_nav").find("ul:first").append("
  • "); jQuery("body").on("mouseover", "a", clearLink); setTimeout(CheckPost, 500); $("#setting_btn").click(function () { return open_setting_window(); }); TailInit(); }; if (window.self === window.top) { setTimeout(TiebaInit, 150); } addTiebaCSS = function () { return GM_addStyle("#NotifyTide { width: 100%; text-align: center; color: white; font-size: 28px; vertical-align: middle; pointer-events: none; -webkit-user-select: none; -moz-user-select: none; } #NotifyTide p { background: rgba(255, 119, 119, .5); padding: 25px 0px 25px 0px; text-shadow: red 0 0 5px, red 0 0 5px, red 0 0 7px, red 0 0 7px, red 0 0 10px, red 0 0 10px, red 0 0 15px, red 0 0 15px; } #setting_shadow { position: fixed; z-index: 1024000000; bottom: 0; left: 0; width: 100%; height: 100%; background: rgba(0, 0, 0, 0.5); -moz-transition: 0.4s; } #setting_window { position: fixed; top: -moz-calc(50% - 270px); top: -webkit-calc(50% - 270px); top: calc(50% - 270px); left: -moz-calc(50% - 300px); left: -webkit-calc(50% - 300px); left: calc(50% - 300px); width: 600px; background: #FFF; box-shadow: 0 0 5px #222; padding: 20px 20px 50px 20px; z-index: 1000000000; } #setting_out_div { overflow-y: scroll; padding: 0 10px 0 0; max-height:500px; } .setting_btn_inside { font-size: 16px; padding: 4px; -moz-user-select: none; cursor: default; } .setting_btn_inside:hover { background: #DDD; } .setting_btn_inside:active { box-shadow: 0 0 3px #999 inset; } #setting_reset { position: absolute; top: 14px; right: 14px; } #setting_save { display: inline-block; position: absolute; right: 15px; bottom: 10px; } .setting_sp_btn { font-size: 12px; padding: 4px; -moz-user-select: none; cursor: default; display: inline-block; position: relative; } .setting_sp_btn.close { background: #DDD; } .setting_sp_btn::before { position: absolute; right: -26px; top: 0; content: \"\"; width: 26px; height: 26px; background: #6B4; -moz-transition: 0.3s; } .setting_sp_btn.close::before { background: #C54; } .setting_sp_btn:hover { background: #DDD; } .setting_sp_btn:active { box-shadow: 0 0 3px #999 inset; } #setting_sp_q_c { margin: 0 0 0 40px !important; } #setting_window .setting_title { font-size: 34px; height: 42px; line-height: 42px; padding: 7px 10px; margin: 0 0 0 -7px; -moz-user-select: none; cursor: default; display: inline-block; } #setting_window p { font-size: 18px; height: 42px; line-height: 50px; -moz-user-select: none; cursor: default; } #setting_window p.setting_hide { height: 10px; line-height: 10px; -moz-user-select: none; cursor: default; } #setting_window p.setting_hide.sp { background: #CCC !important; height: 1px !important; margin: 8px 0 !important; } #setting_window p.setting_hiding_sp { height: 1px; line-height: 1px; -moz-user-select: none; cursor: default; } #setting_window .setting_input { -moz-appearance: none; border: none; background: #DDD; height: 28px; padding: 0px 7px !important; width: 100px; margin: 0 10px 0 0 !important; font-size: 14px !important; } #setting_window span { font-size: 14px !important; margin: 0 10px 0 0 !important; -moz-user-select: none; cursor: default; display: inline-block; } .setting_textarea { -moz-appearance: none !important; border: none; background: #DDD; margin: 10px 0 0 0 !important; padding: 7px !important; width: 550px; height: 100px; -moz-box-sizing: border-box; font-size: 12px !important; } #tail_select { display: inline-block; height: 26px !important; line-height: 26px !important; width: 450px !important; margin: 0px 0 0 40px !important; vertical-align: top !important; text-align: center !important; font-size: 12px !Important; -moz-box-sizing: border-box !Important; position: relative !important; cursor: default !important; } #tail_select_text { height: 26px; float: left; min-width: 100px !important; background: #DDD !important; padding: 0 5px !important; -moz-box-sizing: border-box !Important; } #tail_option_box { float: left; position: absolute !important; bottom: 30px; left: 0; min-width: 100px; background: #EEE !important; box-shadow: 0 0 3px #666 !important; display: inline-block; } .tail_option { padding: 0 8px !important; width: auto !important; font-size: 12px !important; height: 24px !important; line-height: 24px !important; cursor: default !important; } .tail_option:hover { background: #DDD !important; } #tail_type { background: #DDD !important; position: absolute !important; top: 0; right: 0px; } #tail_type_text { width: 80px !important; text-align: center !important; } #tail_type_box { position: absolute !important; width: 80px !important; bottom: 30px; right: 0px; background: #EEE; box-shadow: 0 0 3px #666; } .tail_type_option:hover { background: #DDD; } #tail_save { font-size: 12px !important; position: absolute; top: 0; right: 90px; height: 26px !important; padding: 0 !important; width: 86px !important; } #tail_new { font-size: 12px !important; -moz-box-sizing: border-box !Important; padding: 0 !important; height: 26px !important; width: 60px !important; position: absolute !important; top: 0 !important; right: 180px !important; } #tail_delete { font-size: 12px !important; -moz-box-sizing: border-box !Important; padding: 0 !important; height: 26px !important; width: 60px !important; position: absolute !important; top: 0 !important; right: 250px !important; } #tail_data + span { display: block !Important; margin: 5px 0 -3px 0 !important; font-size: 12px !Important; } #tail_use { margin-left: 20px; margin-right: 20px; height: 30px; width: auto; float: left !important; cursor: default; } #tail_use_text { width: auto; padding: 0 10px; line-height: 28px !important; text-align: center !important; } #tail_use_box_out { position: absolute !important; width: 300px !important; } #tail_use_box { position: absolute !important; background: #EEE; bottom: 35px; left: 0; box-shadow: 0 0 3px #666; z-index: 100; } .tail_use_option { padding: 0 10px; line-height: 30px !important; } .tail_use_option:hover { background: #DDD; }"); };