3.3 KiB
Multiple subtitles maintenance
The public factory is artplayerPluginMultipleSubtitles({ subtitles }). Registration is
asynchronous and resolves to { name: 'multipleSubtitles', tracks, reset }. tracks(names)
selects names in caller order, tracks() clears, and reset() restores the original order.
Both methods return undefined. Current declarations incorrectly omit the Promise and methods;
task PKG-MULTI-SUB-04 owns that compatibility work. Do not infer runtime behavior from them.
Current module boundaries
src/index.jscurrently combines download/decode, conversion, parsing, merging, Blob URL replacement and public registration. Task 03 will separate pure merge, requests and owned resources while preserving the factory and CSS hooks.src/parser.jsis vendored WebVTT parser/serializer code with a CC0 dedication. It is not owned plugin code to mechanically migrate to TypeScript. Keep it distinct from task 04. The pinned upstream reference and full adaptation check are in../../refactor/baselines/multiple-subtitles-vendor/and../../refactor/scripts/multiple-subtitles-vendor.mjs.types/artplayer-plugin-multiple-subtitles.d.tsis the historical public declaration.../../docs/assets/example/multiple.subtitles.jsdemonstrates the real plugin name,tracks/reset, name order and.art-subtitle-chinese/.art-subtitle-japaneseCSS hooks.
All tracks download concurrently and decode through TextDecoder. Explicit type wins over
the URL extension; SRT/ASS conversion delegates to existing core utils. onParser appears
in declarations but is not called. Parsing runs in metadata mode. Each track's top-level
cue text receives a name-based div once; current merging concatenates cue arrays by track
order, whereas 1.0.0 merged by cue index and retained the first track's timestamps.
Each selection serializes a new VTT, revokes the preceding URL, creates a text/vtt Blob, sets the live subtitle option's escape to false and calls subtitle.init with the live configuration plus URL/type/onVttLoad overrides. The latest URL and pending requests have no destroy owner yet. These are explicit future fixes, not behavior to silently call safe.
Vendor boundary and validation
The comparison revision is w3c/webvtt.js 380cfcce34ba8b472d3a31474874eb72a0e5f460.
This is not proof of the original acquisition commit. Its execution body matches local
code after replacing the IIFE/global exports with named ESM exports and normalizing format.
Older shipped sources keep the IIFE. Preserve the CC0 source header and complete
THIRD_PARTY_NOTICES; the normal build places notices in all standalone bundle headers.
Use the pinned Node and Yarn 1.22.22:
yarn test:multiple-subtitles
yarn build artplayer-plugin-multiple-subtitles
Historical tests read verified npm bytes and frozen Git inputs. For current normal behavior,
set ARTPLAYER_MULTIPLE_SUBTITLES_CANDIDATE=1; optionally set
ARTPLAYER_MULTIPLE_SUBTITLES_ARTIFACT to an actual main/legacy file, then run
node --test test/multiple-subtitles.test.js. These tests use controlled subtitle hosts;
they do not prove native rendering, decoder coverage or the online editor. Tasks 02 and
05/06 own error/lifecycle reproduction, real core/device combinations and demo acceptance.
See ../../refactor/baselines/multiple-subtitles-contract.md for exact historical differences.