Greasy Fork

手机贴吧触屏版改进

去除广告,隐藏及重新显示帖子,移除悬浮按钮,界面改进

// ==UserScript==
// @name           手机贴吧触屏版改进
// @description    去除广告,隐藏及重新显示帖子,移除悬浮按钮,界面改进
// @include        http://tieba.baidu.com/*
// @author         yechenyin
// @version        0.68
// @namespace 	   https://greasyfork.org/users/3586-yechenyin
// @require	       https://code.jquery.com/jquery-1.11.2.min.js
// @run-at         document-start
// ==/UserScript==




/****************************************************/

//默认页面刷新后“显示隐藏帖子”开关恢复关闭状态,保持不显示隐藏帖子
//如果想保存“显示隐藏帖子”开关的设置,请将true改为false
var keep_hiding = true;


//广告
var ads = [
"a.client_ghost_icon",
"ul.threads_list>div.special",
//"ul.threads_list>div[class!='tl_shadow']",
"#main>div[id^='cpro_u']",
"a.light_see_index",
"div.forum_recommend_w",
"div.first_floor_ad_wrapper",
"div[id^=cpro]",
"div.client_ad_topBanner ~ li",
"div.client_ad_topBanner",
"div[id^=BAIDU_DUP_wrapper]",
"ul.threads_list>div.tl_gap",
"ul.threads_list>div.tl_top",
"div.client_ad_top",
"ul.threads_list>li.tl_spread",
"li.first_floor_ad_wrapper",
"li.special-thread",
".more_content_btn",
"div.pb-selected-banner",
"li.special"];

/****************************************************/
jQuery.fn.hide = function(action, delay) {
  $('head').append($('<style>').text(this.selector + ' {display:none}'));
};

if ($("#tieba_sp_improved").length === 0) {
    for (i=0; i<ads.length; i++)
	if ($(ads[i]).length > 0)
	    $(ads[i]).hide();

    $("body").append($("<script>").attr("id", "tieba_sp_improved"));


if (location.href.search("http://tieba.baidu.com/f?") === 0) {

    if (localStorage.display_hidden_threads === undefined || localStorage.display_hidden_threads == "false") {
	$("li.tl_shadow>a").each(function() {
	    if (localStorage.hidden_threads && localStorage.hidden_threads.search($(this).attr("tid")) >= 0)
	        $(this).parent().hide();
	});
    }

    $("div.ti_zan_reply").each(function () {
	var hide = $("<a>", {class:"ti_func_btn", text:"隐藏"});
	hide.css({width:30, marginLeft:-6, marginRight:4});
	hide.click(toggle_thread);

	$(this).append(hide);
	//$(this).parent().appendTo(this.parentNode.parentNode.parentNode);
    });

    $("div.light_post_entrance").addClass("icon_btn blue_kit_icon new_frs_sprite_icons blue_kit_icon_post");
    $("div.light_post_entrance").css({left:"auto", right:90, bottom:"auto", top:1, "z-index":1000});

    var my_message = $("<a>", {class:"mode_setup_message_title", text:"我的消息", href:"http://tieba.baidu.com/mo/q/msg"});
    $(".mode_setup_message_title").replaceWith(my_message);
    var bawu = $("div.blue_kit_right>a[href*='bawuindex']").removeClass().addClass("mode_setup_message_title");
    bawu.css({position:"absolute", right:9});
    bawu.insertBefore($(".person_info_content"));
    //$("span.info_look").css({marginRight:15});


    var display_hidden_threads = $("ul.mode_setup_list>li:nth-child(2)").clone();
    display_hidden_threads.contents().filter(function() { return this.nodeType == 3; }).replaceWith("显示隐藏帖子");
    if (localStorage.display_hidden_threads === undefined || localStorage.display_hidden_threads == "false") {
	display_hidden_threads.children().eq(1).removeClass().addClass("mode_setup_switch switch_off");
    } else {
	display_hidden_threads.children().eq(1).removeClass().addClass("mode_setup_switch switch_on");
    }
    display_hidden_threads.children().eq(1).click(display_hidden_switch);
    $("ul.mode_setup_list").append(display_hidden_threads);

    //$("div.zan_reply").css({position: "relative", border:"none", zIndex:1}).appendTo($("#pblist>li:first-child"));
    $("#j_ghost_tool_share").removeClass().addClass("spinner_item pb_icon").css("background-position", "10px -561px").wrap("<li></li>").appendTo($("ul.more_spinner"));
    $("div#j_ghost").hide();

    $("a.pager_next, a.pager_prev").click(function() {

	for (i=0; i<ads.length; i++)
	    if ($(ads[i])[0] !== undefined)
		$(ads[i]).remove();

	if (localStorage.display_hidden_threads === undefined || localStorage.display_hidden_threads == "false") {
	    $("li.tl_shadow>a").each(function() {
		if (localStorage.hidden_threads && localStorage.hidden_threads.search($(this).attr("tid")) >= 0)
		    $(this).parent().hide();
	    });
	}

	$("a.sign-button").click();
	$("a.dia_closebtn_container").click();

	$("div.ti_author_time").each(function () {
	    var zan_btn = $(this).next().children().eq(0).children().eq(0);
	    zan_btn.css({left:"auto", float:"right", display:"inline", position:"relative", marginRight:-1, marginTop:-1});
	    var zan_num = $(this).next().children().eq(0).children().eq(1);
	    zan_num.addClass("ti_func_btn");
	    zan_num.css({left:"auto", float:"right", width:"auto", marginTop:-1, marginRight:12, display:"inline"});
	    var reply = $(this).next().children().eq(2);
	    reply.css({left:"auto", float:"right", width:"auto", marginTop:-1, marginRight:8, display:"inline"});
	    var hide = $("<a>", {class:"ti_func_btn", text:"隐藏"});
	    hide.css({float:"right", width:30, marginTop:-1, marginRight:2, display:"inline"});
	    hide.click(toggle_thread);

	    $(this).append(hide, reply, zan_num, zan_btn);
	    $(this).next().remove();
	    $(this).insertAfter($(this).parent());
	});

});

/*
    openDB().onsuccess  = function(event){
	var db = event.target.result;
	var transaction = db.transaction(["read"],"readwrite");
	var store = transaction.objectStore("read");

	if (localStorage.tieba_last_read) {
	    var last_read = localStorage.tieba_last_read.substring(url.indexOf(":")+1, url.length);
	    var url = localStorage.tieba_last_read.substring(url.indexOf(":")+1, url.length);
	    localStorage.tieba_last_read = "";
	    var request = store.get(url);
	    request.onsuccess = function(event){
		if (!request.result) {
		    console.log("Adding  " + url + " : " + last_read);
		    store.add({url: url, last: parseInt(last_read)});
		} else {
		    console.log("Updating " + url + " : " +event.target.result.last + " to " + last_read);
		    request.result.last = parseInt(last_read);
		    store.put(request.result);
		}
	    };
	}

	for (var i=0; i<$("li[class^=tl]>a.ti_item").length; i++) {
	    (function(i) {
	    var thread = $("li[class^=tl]>a.ti_item")[i];
	    var amount = parseInt($(thread).next().find("span.btn_icon").text());
	    var url = thread.href.match(/\/p\/\d+/)[0];
	    url = url.substring(url.lastIndexOf("/")+1, url.length);
	    console.log(i + ":" + amount+ ":" + url);
	    var request = store.get(url);
	    request.onsuccess = function(event){
		if (event.target.result) {
		    var start = event.target.result.last + 1;
		    if (start > amount)
			start = amount;
		    console.log(start + "::" + amount);
		    var pn = parseInt(start/50)*50;
		    thread.href = "/p/" + url + "?pn=" + pn + "&fn=" + start + "&";
		    console.log(pn + "<" + thread.href);
		}
	    };
	    })(i);
	}
}; */
}



if (location.href.search("http://tieba.baidu.com/p/") === 0) {
  //window.scrollTo(0, $('.btn more_content_close').offset().top);
  $('.btn more_content_close').click();
    if (location.href.match("&fn=")) {
	var selector = "li[fn='" + location.href.match(/fn=\d+/)[0].replace("fn=","") + "']";
	var offset = $("li[fn='" + location.href.match(/fn=\d+/)[0].replace("fn=","") + "']").offset().top;
	console.log("scroll:"+offset);
	window.scrollTo(0, offset);
	//$("html, body").animate({scrollTop:offset}, 0);
	console.log("scrollend:"+offset);
    }

    for (var i=0; i<$("#pblist>li").length; i++) {
	var c = $("#pblist>li")[i];
	if (!c.hasAttribute("tid"))
	    $(c).hide();
    }

    $("div.zan_reply").css({position: "relative", border:"none", zIndex:1}).appendTo($("#pblist>li:first-child"));
    $("#j_ghost_tool_share").removeClass().addClass("spinner_item pb_icon").css("background-position", "10px -561px").wrap("<li></li>").appendTo($("ul.more_spinner"));
    $("div#j_ghost").hide();

    $("a[href^='/mo/q/checkurl']").each(function() {
	this.href = this.innerHTML;
    });

    $(window).unload(function(){
	var last_read = $("li.list_item").last().attr("fn");
	var url = location.href.match(/\/p\/\d+/)[0];
	url = url.substring(url.lastIndexOf("/")+1, url.length);
	localStorage.tieba_last_read = url + ":" + last_read;
	console.log(localStorage.tieba_last_read);
    });
}

}


function openDB() {
    window.indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB;
    if(!window.indexedDB)
       console.log("你的浏览器不支持IndexedDB");

    var request = window.indexedDB.open("tiebaDB", 1);
    var db;
    request.onerror = function(event){
	console.log("打开DB失败", event);
};
    request.onupgradeneeded   = function(event){
	console.log("Upgrading");
	db = event.target.result;
	var objectStore = db.createObjectStore("read", { keyPath : "url" });
	objectStore.createIndex("last", "last", { unique: false });
    };
    return request;
}

function toggle_thread() {
    if($(this).text() == "隐藏") {
	$(this).parent().parent().parent().hide();
	$(this).text("显示");
	this.parentNode.parentNode.style.display = "none";
	if (localStorage.hidden_threads === undefined)
	    localStorage.hidden_threads = "";
	localStorage.hidden_threads += $(this).parent().parent().prev().attr("tid") + " ";
    } else if($(this).text() == "显示") {
	$(this).text("隐藏");
	$(this).parent().parent().parent().show();
	var hidden_threads = localStorage.hidden_threads;
	localStorage.hidden_threads = hidden_threads.replace($(this).parent().parent().prev().attr("tid")+" ", "");
    }
}

function display_hidden_switch() {
    if (this.className.match("switch_off")) {
	$("li.tl_shadow>a").map(function() {
	    if (localStorage.hidden_threads.search($(this).attr("tid")) >= 0) {
		$(this).next().children().eq(2).text("显示");
		$(this).parent().show();
	    }
	});
	if (!keep_hiding) {
	    localStorage.display_hidden_threads = "true";
	}
	$(this).removeClass("switch_on").removeClass("switch_off").addClass("switch_on");
    } else {
	$("li.tl_shadow>a").map(function() {
	    if (localStorage.hidden_threads.search($(this).attr("tid")) >= 0) {
		$(this).next().children().eq(2).text("显示");
		$(this).parent().hide();
	    }
	});
	localStorage.display_hidden_threads = "false";
	$(this).removeClass("switch_on").removeClass("switch_off").addClass("switch_off");
    }
}