// ==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}`; }