// ==UserScript== // @name agefans Enhance // @namespace https://github.com/IronKinoko/agefans-enhance // @version 1.2.0 // @description 增强agefans播放功能,实现自动换集、画中画、历史记录、断点续播等功能 // @author IronKinoko // @match https://www.agefans.net/* // @match https://www.agefans.net/play/* // @match https://www.agefans.net/detail/* // @require https://cdn.jsdelivr.net/npm/jquery@1.12.4/dist/jquery.min.js // @grant none // @license MIT // @downloadURL none // ==/UserScript== (function () { 'use strict'; function renderHistroyStyle() { // add a tag visited style let styleDom = document.createElement('style'); styleDom.innerHTML = `.movurl li a:visited { color: red; }`; document.head.appendChild(styleDom); } function detailModule() { renderHistroyStyle(); } class History { constructor() { this.cacheKey = 'v-his'; } get his() { return JSON.parse(localStorage.getItem(this.cacheKey) || '[]') } set his(value) { if (Array.isArray(value)) { localStorage.setItem(this.cacheKey, JSON.stringify(value.slice(0, 100))); } } getAll() { return this.his } get(id) { return this.his.find((o) => o.id === id) } setTime(id, time = 0) { const his = this.his; his.find((o) => o.id === id).time = time; this.his = his; } log(item) { const his = this.his; his.unshift(item); this.his = his; } refresh(id, data) { const his = this.his; const index = his.findIndex((o) => o.id === id); const item = his.splice(index, 1)[0]; his.unshift(data || item); this.his = his; } has(id) { return Boolean(this.his.find((o) => o.id === id)) } logHistory() { const id = location.pathname.match(/\/play\/(\d*)/)?.[1]; if (!id) return const hisItem = {}; hisItem.id = id; hisItem.title = $('#detailname a').text(); hisItem.href = location.href; hisItem.section = $('li a[style*="color: rgb(238, 0, 0);"]').text(); hisItem.time = 0; hisItem.logo = $('#play_poster_img').attr('src'); if (this.has(id)) { const oldItem = this.get(id); if (oldItem.href !== hisItem.href) { this.refresh(id, hisItem); } else { this.refresh(id); } } else { this.log(hisItem); } } } const his = new History(); function parseTime(time = 0) { return `${Math.floor(time / 60) .toString() .padStart(2, '0')}:${(time % 60).toString().padStart(2, '0')}` } function renderHistoryList() { $('#history') .html('') .append(() => { /** @type {any[]} */ const histories = his.getAll(); let html = ''; histories.forEach((o) => { html += ` ${o.title}
${o.title}
${o.section} ${parseTime(o.time)}
`; }); return `
${ html || '
暂无数据
' }
` }); } function renderHistoryPage() { const currentDom = $('.nav_button_current'); $( '' ).appendTo('head'); $('
').insertBefore('#footer').hide(); $(`历史`) .appendTo('#nav') .on('click', (e) => { if ($('#history').is(':visible')) { $('#container').show(); $('#history').hide(); changeActive(currentDom); } else { renderHistoryList(); $('#container').hide(); $('#history').show(); changeActive($(e.currentTarget)); } }); $('.nav_button_current') .on('click', (e) => { $('#container').show(); $('#history').hide(); changeActive(e.currentTarget); }) .removeAttr('href'); } function changeActive(dom) { $('.nav_button_current').removeClass('nav_button_current'); $(dom).addClass('nav_button_current'); } function historyModule() { renderHistoryPage(); renderHistoryList(); } function copyToClipboard(element) { var $temp = $("