// ==UserScript==
// @name 直播吧助手
// @namespace http://tampermonkey.net/
// @version 2.0
// @description 直播吧使用助手,包括标题栏比分、新闻模块排序调整等
// @author purezhi
// @match https://*.zhibo8.cc/*
// @grant none
// @downloadURL none
// ==/UserScript==
let page = '';
let $cntr = null;
let modSltr = '';
let headSltr = '';
let ttlSltr = '';
let localKey = '';
(function() {
'use strict';
initSorting();
initScoreTitle();
})();
function initSorting() {
if (/^https?:\/\/www\.zhibo8\.cc\/nba\/?$/.test(location.href)) {
page = 'www_nba';
}
else if (/^https?:\/\/www\.zhibo8\.cc\/zuqiu\/?$/.test(location.href)) {
page = 'www_zuqiu';
}
else if (/^https?:\/\/news\.zhibo8\.cc\/nba\/?$/.test(location.href)) {
page = 'news_nba';
}
else if (/^https?:\/\/news\.zhibo8\.cc\/zuqiu\/?$/.test(location.href)) {
page = 'news_zuqiu';
}
if (!page) return;
$cntr = $('#middle .m_left');
modSltr = '.video.v_change';
headSltr = '.v_top';
ttlSltr = '.v_top>a:first-child';
localKey = 'sorting_' + page;
$('.menu .container').append( ' \
\
\
\
\
');
$(document).on('click', '[mod-order-save]', function (event) {
saveSort();
});
$(document).on('click', '[mod-order-reset]', function (event) {
if (localStorage.getItem(localKey) != null) {
localStorage.removeItem(localKey);
}
location.reload();
});
$(document).on('click', '[mod-top]', function (event) {
let $el = $(this);
let $mod = $el.closest(modSltr);
if ($mod.length <= 0 || $mod.prevAll(modSltr).length <= 0) return;
$mod.insertBefore($mod.prevAll(modSltr).last());
});
$(document).on('click', '[mod-prev]', function (event) {
let $el = $(this);
let $mod = $el.closest(modSltr);
if ($mod.length <= 0 || $mod.prev(modSltr).length <= 0) return;
$mod.insertBefore($mod.prev(modSltr));
});
$(document).on('click', '[mod-next]', function (event) {
let $el = $(this);
let $mod = $el.closest(modSltr);
if ($mod.length <= 0 || $mod.next(modSltr).length <= 0) return;
$mod.insertAfter($mod.next(modSltr));
});
let sortings = loadSort();
const modCount = $(modSltr).length;
$(modSltr).each(function (idx, el) {
let $head = $(el).find(headSltr);
if (!$head) return;
let $titleEl = $(el).find(ttlSltr);
if (!$titleEl) return;
const title = $titleEl.html();
if (!title) return;
let sort = modCount - idx;
if (sortings && sortings[title] != null) {
sort = sortings[title];
}
$(el).attr('mod-order', sort);
$head.css('position', 'relative');
$head.append(
''
);
});
doSort();
$('[mod-sort]').on('mouseover', function (event) {
$(this).css('opacity', '1');
})
$('[mod-sort]').on('mouseout', function (event) {
$(this).css('opacity', '0.15');
});
}
function initScoreTitle() {
if (!/https?:\/\/(www\.)?zhibo8\.cc\/zhibo\/nba\/([^\.]+?)\.htm/.test(location.href)) return;
var ttlIntrvl = setInterval(function() {
showScoreTitle();
}, 3000);
showScoreTitle();
}
function doSort() {
const modArr = []
let max = 0;
$(modSltr).each(function (idx, el) {
let sort = $(el).attr('mod-order');
if (!sort) return;
sort = parseInt(sort)
modArr[sort] = $(el);
if (max < sort) max = parseInt(sort);
});
for (let i = 0; i <= max; i++) {
if (!modArr[i]) continue;
modArr[i].insertBefore(modSltr + ':first-child');
}
}
function loadSort() {
if (localStorage.getItem(localKey)) {
return JSON.parse(localStorage.getItem(localKey));
}
return null;
}
function saveSort() {
const sortings = {};
const modCount = $(modSltr).length;
$(modSltr).each(function (idx, el) {
let $head = $(el).find(headSltr);
if (!$head) return;
let $titleEl = $(el).find(ttlSltr);
if (!$titleEl) return;
const title = $titleEl.html();
if (!title) return;
sortings[title] = modCount - idx;
});
localStorage.setItem(localKey, JSON.stringify(sortings));
console.log(localStorage.getItem(localKey));
}
function showScoreTitle() {
const vtm = document.querySelectorAll('.bf_table .visit_team_name a');
if (vtm.length < 1) {
console.warn("no visit team");
return;
}
const vsc = document.querySelectorAll('.bf_top .bf_box.tmtop .time_score .visit_score');
if (vtm.length < 1) {
console.warn("no visit score");
return;
}
const htm = document.querySelectorAll('.bf_table .home_team_name a');
if (vtm.length < 1) {
console.warn("no host team");
return;
}
const hsc = document.querySelectorAll('.bf_top .bf_box.tmtop .time_score .host_score');
if (vtm.length < 1) {
console.warn("no host score");
return;
}
document.title = `${vtm[0].innerText} ${vsc[0].innerText} ➲ ${htm[0].innerText} ${hsc[0].innerText}`;
}