// ==UserScript==
// @name 查看 bangumi 马赛克瓷砖
// @namespace http://tampermonkey.net/
// @author 鈴宮華緋
// @description 查看 bangumi 马赛克瓷砖,配合 http://bangumi.tv/group/topic/344198 使用
// @version 2.40
// @include /https?:\/\/(bgm\.tv|bangumi\.tv|chii\.in)\/(user)\/[^\/]*$/
// @require http://code.jquery.com/jquery-latest.js
// @downloadURL https://update.greasyfork.icu/scripts/34889/%E6%9F%A5%E7%9C%8B%20bangumi%20%E9%A9%AC%E8%B5%9B%E5%85%8B%E7%93%B7%E7%A0%96.user.js
// @updateURL https://update.greasyfork.icu/scripts/34889/%E6%9F%A5%E7%9C%8B%20bangumi%20%E9%A9%AC%E8%B5%9B%E5%85%8B%E7%93%B7%E7%A0%96.meta.js
// ==/UserScript==
(function() {
let dateobj = new Date();
let date = dateobj.toLocaleDateString();
let get_new_mosaic = false;
let api_prefix = "https://bangumi-mosaic-tile.now.sh/users/";
let url = window.location.href;
let userid = url.match(/user\/(.*)/)[1];
let type_name = "进度";
let type = "progress";
let user_mosaic_date = JSON.parse(localStorage.getItem("bangumi_mosaic_date"));
if(user_mosaic_date == null) {
user_mosaic_date = {};
}
if(!user_mosaic_date.hasOwnProperty(userid)) {
user_mosaic_date[userid] = {};
}
function checkUpdateDate() {
if ( date != user_mosaic_date[userid]['date'] || date != user_mosaic_date[userid][type]) {
user_mosaic_date[userid]['date'] = date;
user_mosaic_date[userid][type] = date;
localStorage.setItem("bangumi_mosaic_date", JSON.stringify(user_mosaic_date));
get_new_mosaic = true;
}
}
if (localStorage.getItem("bangumi_mosaic_type_name") === null) {
localStorage.setItem("bangumi_mosaic_type_name",type_name);
} else {
type_name = localStorage.getItem("bangumi_mosaic_type_name");
}
if (localStorage.getItem("bangumi_mosaic_type") === null) {
localStorage.setItem("bangumi_mosaic_type",type);
} else {
type = localStorage.getItem("bangumi_mosaic_type");
}
let type_list = {"吐槽":"say","收藏":"subject","进度":"progress","日志":"blog","人物":"mono","好友":"relation","小组":"group","维基":"wiki","目录":"index","天窗":"doujin"};
let hover_color = "#ddd9";
let checked_color = "#ddda";
let normal_color = "#fff0";
$("ul.network_service").before("
");
$("div.app_box").prepend("");
for(let key in type_list) {
$("ul.tab_btn_list").append("" + key + "");
}
$("li[target=" + type + "]").css({"background":checked_color}).addClass("clicked");
if(1) {
$("ul.tab_btn_list").css({"position":"relative","box-shadow":"0 0 3px 0 #666","-moz-box-shadow":"0 0 3px 0 #666","-webkit-box-shadow":"0 0 3px 0 #666","border-radius":"5px","margin":"20px 100px 0 100px","overflow":"hidden"});
$("li.tab_btn").css({"padding":"3px 6px","cursor":"pointer","float":"left","text-align":"center"});
$("li.tab_btn").outerWidth($("ul.tab_btn_list").outerWidth() / getJsonLength(type_list));
} else {
$("ul.tab_btn_list").css({"position":"absolute","left":"-50px","top":"-10px","box-shadow":"0 0 3px 0 #666","-moz-box-shadow":"0 0 3px 0 #666","-webkit-box-shadow":"0 0 3px 0 #666","border-radius":"5px","overflow":"hidden"});
$("li.tab_btn").css({"padding":"3px 6px","cursor":"pointer","text-align":"center"}).last().css({"border":"none"});
}
$("li.tab_btn").hover(function(){
if(!$(this).hasClass("clicked")) {
$(this).css({"background":hover_color});
}
},function() {
if(!$(this).hasClass("clicked")) {
$(this).css({"background":normal_color});
}
}).click(function(){
$("li.tab_btn").css({"background":normal_color}).removeClass("clicked");
$(this).css({"background":checked_color}).addClass("clicked");
type_name = $(this).text();
type = $(this).attr("target");
localStorage.setItem("bangumi_mosaic_type_name",type_name);
localStorage.setItem("bangumi_mosaic_type",type);
getMosaic();
});
getMosaic();
function getMosaic() {
checkUpdateDate();
$.ajax({
url : api_prefix + userid + "/timelines/" + type + ".svg",
timeout : 3000,
beforeSend : function() {
$("div.mosaic_box").html('bangumi ' + type_name + '马赛克瓷砖加载中...
');
},
success : function(){
let parameter = "";
if (get_new_mosaic) {
parameter = "?number=" + Math.random();
}
$("div.mosaic_box").html('bangumi ' + type_name + '马赛克瓷砖
');
get_new_mosaic = false;
},
error : function(){
$("div.mosaic_box").html("该用户暂无马赛克瓷砖,请等待一段时间后再次查看");
}
});
}
function getJsonLength(json) {
let length = 0;
for(let item in json) {
length++;
}
return length;
}
})();