├── .husky ├── .gitignore └── pre-commit ├── .github └── ISSUE_TEMPLATE │ ├── config.yml │ ├── feature.yml │ └── bug_report.yml ├── src ├── player │ ├── plugins │ │ ├── danmaku │ │ │ ├── index.ts │ │ │ ├── types.ts │ │ │ ├── parser.ts │ │ │ ├── progressBarPower.ts │ │ │ ├── apis.ts │ │ │ ├── utils.ts │ │ │ ├── danmakuList.ts │ │ │ ├── filter.ts │ │ │ ├── index.scss │ │ │ └── html.ts │ │ ├── autoseek │ │ │ ├── index.ts │ │ │ ├── index.scss │ │ │ ├── html.template.html │ │ │ └── autoseek.ts │ │ └── shortcuts │ │ │ ├── index.ts │ │ │ ├── utils.ts │ │ │ ├── help │ │ │ ├── index.ts │ │ │ ├── index.scss │ │ │ └── showHelp.ts │ │ │ ├── types.ts │ │ │ ├── shortcuts.ts │ │ │ ├── keybindings.ts │ │ │ └── commands.ts │ ├── assets │ │ ├── Hennyano.png │ │ ├── NachoNeko.png │ │ ├── NachoNeko1.png │ │ └── NachoNeko2.png │ ├── index.ts │ └── index.scss ├── adapter │ ├── _iframe_player_parser │ │ ├── index.scss │ │ ├── index.ts │ │ └── parser.ts │ ├── agefans │ │ ├── index.scss │ │ ├── index.ts │ │ ├── mobilePlay.ts │ │ └── play.ts │ ├── xfani │ │ ├── index.scss │ │ ├── index.ts │ │ └── play.ts │ ├── cycanime │ │ ├── index.scss │ │ ├── index.ts │ │ └── play.ts │ ├── mutean │ │ ├── index.scss │ │ ├── index.ts │ │ └── play.ts │ ├── gugufan │ │ ├── index.scss │ │ ├── index.ts │ │ └── play.ts │ ├── girigirilove │ │ ├── index.scss │ │ ├── index.ts │ │ └── play.ts │ ├── index.ts │ ├── anime1 │ │ ├── history.ts │ │ ├── index.ts │ │ ├── index.scss │ │ └── play.ts │ ├── bimiacg │ │ ├── index.scss │ │ ├── index.ts │ │ └── play.ts │ ├── standalone │ │ ├── index.ts │ │ └── play.ts │ ├── common │ │ ├── history.scss │ │ ├── history.ts │ │ └── defineIframePlayer.ts │ └── ntdm9 │ │ ├── index.ts │ │ ├── play.ts │ │ └── favorite.ts ├── index.ts ├── utils │ ├── isUrl.ts │ ├── parseTime.ts │ ├── wait.ts │ ├── copy.ts │ ├── sleep.ts │ ├── opencc.ts │ ├── queryDom.ts │ ├── parseToJSON.ts │ ├── popover.scss │ ├── message.scss │ ├── renderKey.ts │ ├── alert.ts │ ├── alert.scss │ ├── execInUnsafeWindow.ts │ ├── tabs.scss │ ├── message.ts │ ├── keybind.ts │ ├── request.ts │ ├── tabs.ts │ ├── storage.ts │ ├── popover.ts │ ├── modal.scss │ ├── modal.ts │ └── subtitles.ts ├── global.scss └── runtime │ └── index.ts ├── types.d.ts ├── public ├── subtitles.srt ├── subtitles.vtt ├── index.html └── subtitles.ass ├── LICENSE ├── README.md ├── package.json ├── .gitignore ├── meta.template └── tsconfig.json /.husky/.gitignore: -------------------------------------------------------------------------------- 1 | _ 2 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | blank_issues_enabled: true 2 | -------------------------------------------------------------------------------- /src/player/plugins/danmaku/index.ts: -------------------------------------------------------------------------------- 1 | export { setup } from './danmaku' 2 | -------------------------------------------------------------------------------- /.husky/pre-commit: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | . "$(dirname "$0")/_/husky.sh" 3 | 4 | npx pretty-quick --staged 5 | -------------------------------------------------------------------------------- /src/player/plugins/autoseek/index.ts: -------------------------------------------------------------------------------- 1 | import './index.scss' 2 | export { setup } from './autoseek' 3 | -------------------------------------------------------------------------------- /src/player/plugins/shortcuts/index.ts: -------------------------------------------------------------------------------- 1 | import './commands' 2 | 3 | export { setup, Shortcuts } from './shortcuts' 4 | -------------------------------------------------------------------------------- /src/player/assets/Hennyano.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IronKinoko/agefans-enhance/HEAD/src/player/assets/Hennyano.png -------------------------------------------------------------------------------- /src/player/assets/NachoNeko.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IronKinoko/agefans-enhance/HEAD/src/player/assets/NachoNeko.png -------------------------------------------------------------------------------- /src/player/assets/NachoNeko1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IronKinoko/agefans-enhance/HEAD/src/player/assets/NachoNeko1.png -------------------------------------------------------------------------------- /src/player/assets/NachoNeko2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IronKinoko/agefans-enhance/HEAD/src/player/assets/NachoNeko2.png -------------------------------------------------------------------------------- /src/adapter/_iframe_player_parser/index.scss: -------------------------------------------------------------------------------- 1 | .pro-ascepan-top { 2 | #bkcl { 3 | display: none !important; 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import 'plyr/dist/plyr.css' 2 | import './global.scss' 3 | import './adapter' 4 | import { runtime } from './runtime' 5 | 6 | runtime.run() 7 | -------------------------------------------------------------------------------- /src/adapter/agefans/index.scss: -------------------------------------------------------------------------------- 1 | .agefans-wrapper { 2 | .video_detail_episode { 3 | a:visited { 4 | color: rgb(220, 53, 69) !important; 5 | } 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /src/adapter/xfani/index.scss: -------------------------------------------------------------------------------- 1 | .xfani.widescreen { 2 | .header_nav0, 3 | .top-back.hoa, 4 | .fixedGroup { 5 | visibility: hidden; 6 | pointer-events: none; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/adapter/cycanime/index.scss: -------------------------------------------------------------------------------- 1 | .cycanime.widescreen { 2 | .header_nav0, 3 | .top-back.hoa, 4 | .fixedGroup { 5 | visibility: hidden; 6 | pointer-events: none; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/adapter/mutean/index.scss: -------------------------------------------------------------------------------- 1 | .mutefun.widescreen { 2 | .header, 3 | .module-player-side, 4 | .fixedGroup { 5 | visibility: hidden; 6 | pointer-events: none; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/utils/isUrl.ts: -------------------------------------------------------------------------------- 1 | export function isUrl(text: string) { 2 | return /^((https?):\/\/)?([^!@#$%^&*?.\s-]([^!@#$%^&*?.\s]{0,63}[^!@#$%^&*?.\s])?\.)+[a-z]{2,6}\/?/.test( 3 | text 4 | ) 5 | } 6 | -------------------------------------------------------------------------------- /src/adapter/gugufan/index.scss: -------------------------------------------------------------------------------- 1 | .gugufan.widescreen { 2 | .header_nav0, 3 | .header_nav1, 4 | .top-back.hoa, 5 | .fixedGroup { 6 | visibility: hidden; 7 | pointer-events: none; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/adapter/girigirilove/index.scss: -------------------------------------------------------------------------------- 1 | .girigirilove.widescreen { 2 | .header_nav0, 3 | .header_nav1, 4 | .top-back.hoa, 5 | .fixedGroup { 6 | visibility: hidden; 7 | pointer-events: none; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/utils/parseTime.ts: -------------------------------------------------------------------------------- 1 | export function parseTime(time = 0) { 2 | time = Math.round(time) 3 | return `${Math.floor(time / 60) 4 | .toString() 5 | .padStart(2, '0')}:${(time % 60).toString().padStart(2, '0')}` 6 | } 7 | -------------------------------------------------------------------------------- /src/utils/wait.ts: -------------------------------------------------------------------------------- 1 | import { sleep } from './sleep' 2 | 3 | export async function wait(selector: () => boolean) { 4 | let bool = selector() 5 | 6 | while (!bool) { 7 | await sleep() 8 | bool = selector() 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature.yml: -------------------------------------------------------------------------------- 1 | name: 新功能/意见/建议 2 | description: 有什么好的建议快提给我吧 3 | body: 4 | - type: textarea 5 | id: desc 6 | attributes: 7 | label: 简要描述下需要的功能、意见或建议 8 | value: 9 | validations: 10 | required: true 11 | -------------------------------------------------------------------------------- /src/utils/copy.ts: -------------------------------------------------------------------------------- 1 | export function copyToClipboard(element: JQuery | HTMLElement) { 2 | var $temp = $('