// --------------------------------------------------------------------
//
// ==UserScript==
// @name hjj_tidy
// @namespace http://abbypan.github.io/
// @version 0.2
// @license MIT
// @author Abby Pan (abbypan@gmail.com)
// @description 红晋江( http://bbs.jjwxc.net ) 贴子整理,去广告,加跳转,只看楼主,最少字数等等
// @copyright 2014, Abby Pan (http://abbypan.github.io/)
// @include *://bbs.jjwxc.net/showmsg.php?board=*&id=*
// @include *://bbs.jjwxc.com/showmsg.php?board=*&id=*
// @grant none
// ==/UserScript==
//
// --------------------------------------------------------------------
function extract_floor_info(info) {
var c = info.html()
.replace(/^\s*<font color='gray' size='-1'>[^<]+<\/font><br>/,'')
;
var w = info.text().length;
var meta = info.parents("tr:eq(1)").next().text();
var m = meta.match(/№(\d+).+?☆☆☆(.*?)于([\d\s:-]+)留言☆☆☆/);
return {
content: c,
word_num: w,
id: parseInt(m[1]),
poster: m[2] || ' ',
time: m[3]
};
}
function format_floor_content(f) {
var html = '<div class="floor" id="floor' + f.id + '" fid="'+ f.id +'">' +
'<div class="flcontent" word_num="' + f.word_num + '">' + f.content + '</div>' +
'<span class="chapter">№' + f.id + '<span class="star">☆☆☆</span><span class="floor_poster">' + f.poster + '</span><span class="star">于</span>' + f.time + '留言<span class="star">☆☆☆</span></span>' +
' ' +
'<a class="reply_thread_floor" reply_type="cite" href="#">»</a>' +
' ' +
'<a class="reply_thread_floor" reply_type="default" href="#">›</a>' +
' ' +
'<a class="jump_to_top" href="#">⇑</a>' +
' ' +
'<a class="jump_to_bottom" href="#">⇓</a>' +
' ' +
'<a class="jump_to_prev" href="#">↑</a>' +
' ' +
'<a class="jump_to_next" href="#">↓</a>' +
' ' +
'<span class="temp_floor"></span>' +
'</div>';
//'<a href="#jump_floor" data-rel="popup" data-position-to="window" data-transition="pop">☇</a>' +
//' ' +
//'<a class="mark_floor" href="#">⚓</a>' +
//' ' +
return html;
}
function extract_showmsg_content(d){
var res = {};
var tm = $('title').text();
res["title"] = tm.replace(/―― 晋江文学城网友交流区/,'').replace(/^\s+/,'').replace(/\s+$/, '');
var pm = d.match(/\>(共\d+页:.+?)<\/div>/);
res["pager"] = pm ? pm[1].replace(/<\/a>/g, '</a> ') : '';
var h = $.parseHTML(d);
res["banner"] = $(h).find('a').eq(0).parent().html();
res["banner_reverse"] = res["banner"].replace(/^(.*?)(→.*?→)(.*)/, "$3$2$1");
res["reply_form"] = $(h).find('input[name="last_floor"]').parent().prop('outerHTML');
var poster = '';
var floors_info = new Array();
$(h).find('td[class="read"]').each(function() {
var bot = $(this);
var f_i = extract_floor_info(bot);
if(!poster) poster = f_i.poster;
var html = format_floor_content(f_i);
floors_info.push(html);
}).promise().done(function(){
var all_floor = floors_info.join("\n");
res["floor_list"] = all_floor;
res["poster"] = poster;
});
return res;
}
function get_css(){
return '<style> \
body { font-size: 150%; line-height: 150%; margin-left : 10%; margin-right: 10% } \
#banner_bottom { text-align: right; } \
.pager,#thread_action { border: 0.1em solid rgb(153, 204, 0); } \
.flcontent { padding-bottom : 0.5em; } \
.floor,.onethread { \
border-bottom: 0.1em solid rgb(153, 204, 0); \
margin: 0.8em 0.2em 1.2em; \
text-indent: 0em; \
padding-bottom: 0.25em; \
} \
#thread_title { font-weight: bold;backgound-color:#E8F3FF; } \
.star { color: #d4db8e; font-weight: bold; } \
</style> \
';
}
function div_thread_action(){
return '<div id="thread_action"> \
<input size="10" type="text" name="word_num" value=50 id="min_word_num_input" > \
<a href="#" id="min_word_num">字数</a> \
<input size="10" type="text" name="floor_keyword" id="floor_keyword_input" placeholder="关键字"> \
<a href="#" id="floor_keyword">抽取</a> \
<a href="#" id="floor_filter">过滤</a> \
\
<a href="#" id="only_poster">楼主</a> \
<a href="#" id="view_img">看图</a> \
<a href="#" id="reverse_floor">倒序</a> \
<a id="view_all_floor" href="#">全部</a> \
<span id="thread_action_temp"></span> \
</div>';
}
(function(){
$ = unsafeWindow.jQuery;
var d = $('body').html();
var res = extract_showmsg_content(d);
var reply_thread_floor = function (){
$("#reply").find("textarea").val("");
var reply_type = $(this).attr("reply_type");
var c = $(this).parent().children(".chapter").text().replace(/\\n/g, " ");
if(reply_type=="cite")
c = "" +
$(this).parent().children(".flcontent").text().replace(/(\\s*\\n)+/g, "\n").trim().substr(0, 300) +
"......\n\n" + c ;
$("#reply").find("textarea").val(c.trim()+"\n");
var pos = $("#reply").offset().top;
$("html,body").animate({ scrollTop : pos },500);
};
var filter_floor = function(is_to_filter,msg) {
var i = 0;
$(".floor").each(function() {
if(i>0 && is_to_filter($(this))) $(this).hide();
i=1;
});
if(msg) $("#thread_action_temp").html(msg);
} ;
$('head').html(
'<title>' + res["title"] + '</title>' +
get_css()
);
$('body').html(
'<div id="thread_info">' + res["banner"] + '<br><br>' +
'<div id="thread_title">' + res["title"] + "</div><br>" +
div_thread_action() +
'</div><br>' +
'<div id="pager_top" class="pager">' + res["pager"] + '</div>' +
'<div id="thread_floor_list">' + res["floor_list"] + '</div>' +
'<div id="pager_bottom" class="pager">' + res["pager"] + '</div>' +
'<div id="banner_bottom">' + res["banner_reverse"] + '</div>' +
'<div id="reply">' + res["reply_form"] + '</div>'
);
$('body').on('click', '.jump_to_top', function(){
$('html,body').animate({ 'scrollTop': 0 }, 500);
});
$('body').on('click', '.jump_to_bottom', function(){
var f = $('#pager_bottom').offset();
$("html,body").animate({ scrollTop : f.top },500);
});
$('body').on('click','.jump_to_next', function(){
var x = $(this).parent().nextAll();
var i = 50-1;
if(x[i]) {
var pos = $(x[i]).offset().top;
$("html,body").animate({ scrollTop : pos },500);
}
});
$('body').on('click','.jump_to_prev', function(){
var x = $(this).parent().prevAll();
var i = 50-1;
if(x[i]) {
var pos = $(x[i]).offset().top;
$("html,body").animate({ scrollTop : pos },500);
}
});
$('body').on('click', '.reply_thread_floor',function(){
$('#reply').find('textarea').val('');
var reply_type = $(this).attr("reply_type");
var c = $(this).parent().children('.chapter').text().replace(/\n/g, ' ');
if(reply_type=="cite")
c = "" +
$(this).parent().children('.flcontent').text().replace(/(\s*\n)+/g, "\n").trim().substr(0, 300) +
"......\n\n" + c ;
$('#reply').find('textarea').val(c.trim()+"\n");
var pos = $('#reply').offset().top;
$("html,body").animate({ scrollTop : pos },500);
});
$('body').on('click', '#view_all_floor', function(){
$(".floor").each(function() {
$(this).show();
});
$("#thread_action_temp").html("全部");
});
$('body').on('click', '#view_img', function(){
var is_to_filter = function(f){
var c = f.find(".flcontent").eq(0).html();
return c.match(/\<img /i) ? 0 : 1;
};
filter_floor(is_to_filter, "只看图");
});
var get_showmsg_poster = function(){
if($(".floor").eq(0).find(".floor_poster").length>0){
return $(".floor").eq(0).find(".floor_poster").text();
}
return;
};
$('body').on('click', '#only_poster', function(){
var poster = get_showmsg_poster();
var is_to_filter = function(f){
var flposter = f.find(".floor_poster").text();
return flposter!=poster ;
};
filter_floor(is_to_filter, "只看楼主");
});
$('body').on('click', '#min_word_num',function(){
var min = $("#min_word_num_input").val();
var is_to_filter = function(f){
var c = f.find(".flcontent").attr("word_num");
return c<min;
};
filter_floor(is_to_filter, "最少" + min + "字");
});
$('body').on('click', '#floor_keyword',function(){
var k = $("#floor_keyword_input").val();
var is_to_filter = function(f){
var c = f.find(".flcontent").text().match(k);
var p = f.find(".floor_poster").text().match(k);
return (c || p) ? false : true;
};
filter_floor(is_to_filter, "抽取" + k);
});
$('body').on('click', '#floor_filter',function(){
var k = $("#floor_keyword_input").val();
var is_to_filter = function(f){
var c = f.find(".flcontent").text().match(k);
var p = f.find(".floor_poster").text().match(k);
return (c || p) ? true : false;
};
filter_floor(is_to_filter, "过滤" + k);
});
$('body').on('click', '#reverse_floor', function(){
var s = [];
$(".floor").each(function(){
s.push($(this).prop("outerHTML"));
});
var c = s.reverse().join("\n");
$("#thread_floor_list").html(c);
$("#thread_action_temp").html("倒序");
});
})();