// ==UserScript==
// @name agefans Enhance
// @namespace https://github.com/IronKinoko/agefans-enhance
// @version 1.1.1
// @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 += `