// ==UserScript== // @name Bangumi Episodes Batch Edit Improve // @namespace org.binota.scripts.bangumi.bebei // @description 章节批量编辑增强 // @include /^https?:\/\/(bgm\.tv|bangumi\.tv|chii\.in)\/subject\/\d+\/ep(\/edit_batch)?/ // @version 0.1.1 // @grant none // @author BinotaLIU // @downloadURL https://update.greasyfork.icu/scripts/372600/Bangumi%20Episodes%20Batch%20Edit%20Improve.user.js // @updateURL https://update.greasyfork.icu/scripts/372600/Bangumi%20Episodes%20Batch%20Edit%20Improve.meta.js // ==/UserScript== 'use strict'; const $ = selector => document.querySelector(selector); const $a = selector => document.querySelectorAll(selector); const chunk = (input, size) => input.reduce((arr, item, idx) => idx % size === 0 ? [...arr, [item]] : [...arr.slice(0, -1), [...arr.slice(-1)[0], item]], []); const say = str => window.chiiLib.ukagaka.presentSpeech(str); const baseUrl = `${window.location.pathname.match(/^\/subject\/\d+\/ep/).find(() => true)}/edit_batch`; const csrfToken = $('[name=formhash]').value; const fetchEpisodesData = async (episodes) => await fetch( baseUrl, { method: 'POST', headers: { 'content-type': 'application/x-www-form-urlencoded', }, body: `chkall=on&submit=%E6%89%B9%E9%87%8F%E4%BF%AE%E6%94%B9&formhash=${csrfToken}&${episodes.map(ep => `ep_mod%5B%5D=${ep}`).join('&')}`, } ) .then(res => res.text()) .then(html => ((html || '').match(/