multi_embed_player 3.0.1 → 3.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CLAUDE.md +92 -0
- package/README.md +0 -24
- package/add_types.sh +61 -0
- package/dist/iframe_api/bilibili.d.ts +180 -61
- package/dist/iframe_api/bilibili.d.ts.map +1 -1
- package/dist/iframe_api/bilibili.js +938 -354
- package/dist/iframe_api/bilibili.js.map +1 -1
- package/dist/iframe_api/niconico.d.ts +177 -28
- package/dist/iframe_api/niconico.d.ts.map +1 -1
- package/dist/iframe_api/niconico.js +290 -146
- package/dist/iframe_api/niconico.js.map +1 -1
- package/dist/iframe_api/soundcloud.d.ts +132 -60
- package/dist/iframe_api/soundcloud.d.ts.map +1 -1
- package/dist/iframe_api/soundcloud.js +318 -146
- package/dist/iframe_api/soundcloud.js.map +1 -1
- package/dist/iframe_api/youtube.d.ts +32 -69
- package/dist/iframe_api/youtube.d.ts.map +1 -1
- package/dist/iframe_api/youtube.js +130 -139
- package/dist/iframe_api/youtube.js.map +1 -1
- package/dist/multi_embed_player.d.ts +193 -26
- package/dist/multi_embed_player.d.ts.map +1 -1
- package/dist/multi_embed_player.js +726 -123
- package/dist/multi_embed_player.js.map +1 -1
- package/package.json +10 -41
- package/dist/iframe_api/index.d.ts +0 -6
- package/dist/iframe_api/index.d.ts.map +0 -1
- package/dist/iframe_api/index.js +0 -8
- package/dist/iframe_api/index.js.map +0 -1
- package/dist/types.d.ts +0 -126
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -22
- package/dist/types.js.map +0 -1
|
@@ -1,48 +1,215 @@
|
|
|
1
|
-
|
|
1
|
+
type ServiceType = 'youtube' | 'niconico' | 'bilibili' | 'soundcloud';
|
|
2
|
+
interface ApiPromiseData {
|
|
3
|
+
res: Array<(value: any) => void>;
|
|
4
|
+
rej: Array<(reason?: any) => void>;
|
|
5
|
+
}
|
|
6
|
+
interface PlaylistItem {
|
|
7
|
+
service: ServiceType;
|
|
8
|
+
videoId: string;
|
|
9
|
+
call_array: any[];
|
|
10
|
+
call_index: number;
|
|
11
|
+
startSeconds?: number;
|
|
12
|
+
endSeconds?: number;
|
|
13
|
+
subService?: ServiceType;
|
|
14
|
+
subVideoId?: string;
|
|
15
|
+
[key: string]: any;
|
|
16
|
+
}
|
|
17
|
+
type ServiceStatusMap = Record<ServiceType, number>;
|
|
18
|
+
type ServiceApiCache = Record<ServiceType, Record<string, any>>;
|
|
19
|
+
type ServiceApiPromise = Record<ServiceType, Record<string, ApiPromiseData>>;
|
|
20
|
+
type ServiceBooleanMap = Record<ServiceType, boolean>;
|
|
21
|
+
type ServiceUrlMap = Record<ServiceType, string>;
|
|
22
|
+
type IframeApiClassMap = Record<string, any>;
|
|
23
|
+
declare var multi_embed_player_set_variable: any;
|
|
24
|
+
declare var YT: any;
|
|
25
|
+
/**
|
|
26
|
+
* Fetches the iframe API for a given service and video ID.
|
|
27
|
+
* @param {string} service - The name of the service.
|
|
28
|
+
* @param {string} videoid - The ID of the video.
|
|
29
|
+
* @param {boolean} use_cors - Whether to use CORS.
|
|
30
|
+
* @param {boolean} image_proxy - The image proxy.
|
|
31
|
+
* @param {boolean} GDPR_access_accept - Whether GDPR access is accepted.
|
|
32
|
+
* @param {boolean} failed_send_error - Whether to send an error if the request fails.
|
|
33
|
+
* @param {HTMLElement} failed_send_error_target - The target to send the error to.
|
|
34
|
+
* @returns {Promise}
|
|
35
|
+
*/
|
|
36
|
+
declare const multi_embed_player_fetch_iframe_api: (service: ServiceType, videoid: string, use_cors: boolean, image_proxy: boolean, GDPR_access_accept: boolean, failed_send_error?: boolean, failed_send_error_target?: HTMLElement | null) => Promise<void>;
|
|
37
|
+
/**
|
|
38
|
+
* Resets all values in multi_embed_player.GDPR_accepted to false and removes the corresponding item from localStorage.
|
|
39
|
+
*/
|
|
40
|
+
declare const multi_embed_player_GDPR_accepted_all_back_down: () => void;
|
|
2
41
|
/**
|
|
3
42
|
* A custom HTML element for embedding multiple video services in a single player.
|
|
4
43
|
* @extends HTMLElement
|
|
5
44
|
*/
|
|
6
|
-
|
|
45
|
+
declare class multi_embed_player extends HTMLElement {
|
|
46
|
+
#private;
|
|
47
|
+
videoid: string | null;
|
|
48
|
+
follow_GDPR: boolean;
|
|
49
|
+
service: ServiceType | null;
|
|
50
|
+
image_url: string | null;
|
|
51
|
+
picture_tag: HTMLPictureElement | null;
|
|
52
|
+
player: any;
|
|
53
|
+
playlist: PlaylistItem[];
|
|
54
|
+
autoplay: boolean;
|
|
55
|
+
error_not_declare: boolean;
|
|
56
|
+
previousData: PlaylistItem | null;
|
|
57
|
+
startSeconds: number;
|
|
58
|
+
endSeconds: number;
|
|
7
59
|
static script_origin: string;
|
|
8
60
|
static iframe_api_endpoint: string;
|
|
9
|
-
static mep_status_load_api:
|
|
10
|
-
static mep_load_api_promise:
|
|
11
|
-
static api_cache:
|
|
12
|
-
static api_promise:
|
|
13
|
-
static GDPR_accept_promise:
|
|
14
|
-
static iframe_api_class:
|
|
15
|
-
static GDPR_accepted:
|
|
16
|
-
static possible_direct_access_services:
|
|
61
|
+
static mep_status_load_api: ServiceStatusMap;
|
|
62
|
+
static mep_load_api_promise: Record<'youtube' | 'niconico' | 'bilibili' | 'soundcloud', (() => void)[]>;
|
|
63
|
+
static api_cache: ServiceApiCache;
|
|
64
|
+
static api_promise: ServiceApiPromise;
|
|
65
|
+
static GDPR_accept_promise: Record<'youtube' | 'niconico' | 'bilibili' | 'soundcloud', (() => void)[]>;
|
|
66
|
+
static iframe_api_class: IframeApiClassMap;
|
|
67
|
+
static GDPR_accepted: ServiceBooleanMap;
|
|
68
|
+
static possible_direct_access_services: ServiceType[];
|
|
17
69
|
static cors_proxy: string;
|
|
18
|
-
static tearms_policy_service:
|
|
70
|
+
static tearms_policy_service: ServiceUrlMap;
|
|
19
71
|
static follow_GDPR: boolean;
|
|
20
|
-
private videoid;
|
|
21
|
-
private service;
|
|
22
|
-
private image_url?;
|
|
23
|
-
private picture_tag?;
|
|
24
|
-
private follow_GDPR;
|
|
25
72
|
constructor();
|
|
26
73
|
connectedCallback(): Promise<void>;
|
|
27
74
|
/**
|
|
28
|
-
*
|
|
75
|
+
* Loads a video by its ID and sets the autoplay and subtitle options.
|
|
76
|
+
* @async
|
|
77
|
+
* @param {Object} data - The data object containing the video ID, service, start time, and end time.
|
|
78
|
+
* @param {boolean} [autoplay=true] - Whether or not to autoplay the video.
|
|
79
|
+
* @param {boolean} [sub=false] - Whether or not to load a subtitle. deprecated
|
|
80
|
+
* @returns {Promise<void>}
|
|
81
|
+
*/
|
|
82
|
+
loadVideoById(data: any, autoplay?: boolean, sub?: boolean): Promise<void>;
|
|
83
|
+
/**
|
|
84
|
+
* Plays the video.
|
|
85
|
+
*/
|
|
86
|
+
playVideo(): void;
|
|
87
|
+
/**
|
|
88
|
+
* Pauses the video.
|
|
89
|
+
*/
|
|
90
|
+
pauseVideo(): void;
|
|
91
|
+
/**
|
|
92
|
+
* Stops the video.
|
|
93
|
+
* @deprecated
|
|
94
|
+
*/
|
|
95
|
+
stopVideo(): void;
|
|
96
|
+
/**
|
|
97
|
+
* Returns the current time of the video.
|
|
98
|
+
* @returns {Promise<number>} - A promise that resolves with the current time of the video. promise only bilibili
|
|
99
|
+
*/
|
|
100
|
+
getCurrentTime(): Promise<number>;
|
|
101
|
+
/**
|
|
102
|
+
* Seeks to a given time in the video.
|
|
103
|
+
* @param {number} seconds - if service is bilibili, return promise
|
|
104
|
+
*/
|
|
105
|
+
seekTo(seconds: number): Promise<void>;
|
|
106
|
+
/**
|
|
107
|
+
* Mutes the video.
|
|
108
|
+
*/
|
|
109
|
+
mute(): void;
|
|
110
|
+
/**
|
|
111
|
+
* Unmutes the video.
|
|
112
|
+
*/
|
|
113
|
+
unMute(): void;
|
|
114
|
+
/**
|
|
115
|
+
* Returns whether the video is muted.
|
|
116
|
+
* @returns {boolean} - Whether the video is muted.if service is bilibili, return promise
|
|
117
|
+
*/
|
|
118
|
+
isMuted(): boolean | Promise<boolean>;
|
|
119
|
+
/**
|
|
120
|
+
* Set the volume of the player.
|
|
121
|
+
* @param {number} volume - The volume level to set.
|
|
122
|
+
*/
|
|
123
|
+
setVolume(volume: number): void;
|
|
124
|
+
/**
|
|
125
|
+
* Returns the current volume of the player.
|
|
126
|
+
* @returns {number} The current volume of the player.
|
|
127
|
+
*/
|
|
128
|
+
getVolume(): number;
|
|
129
|
+
/**
|
|
130
|
+
* Returns the duration of the current video.
|
|
131
|
+
* @returns {number} The duration of the current video in seconds.
|
|
132
|
+
*/
|
|
133
|
+
getDuration(): number;
|
|
134
|
+
/**
|
|
135
|
+
* Returns the real duration of the video based on the start and end seconds.
|
|
136
|
+
* @returns {number} The real duration of the video.
|
|
137
|
+
*/
|
|
138
|
+
getRealDulation(): number;
|
|
139
|
+
/**
|
|
140
|
+
* Returns the relative current time by subtracting the start time from the current time.
|
|
141
|
+
* @returns {Promise<number>} The relative current time.
|
|
29
142
|
*/
|
|
30
|
-
|
|
143
|
+
getRelativeCurrentTime(): Promise<number>;
|
|
31
144
|
/**
|
|
32
|
-
*
|
|
145
|
+
* Calculates the percentage of the current time relative to the total duration of the media.
|
|
146
|
+
* @returns {number} The percentage of the current time.
|
|
33
147
|
*/
|
|
34
|
-
|
|
148
|
+
getPercentOfCurremtTime(): Promise<number>;
|
|
35
149
|
/**
|
|
36
|
-
*
|
|
150
|
+
* Seeks to a relative position in the video based on the current time.
|
|
151
|
+
* @param {number} seconds - The number of seconds to seek relative to the current time.
|
|
37
152
|
*/
|
|
38
|
-
|
|
153
|
+
relativeSeekTo_ct(seconds: number): Promise<void>;
|
|
39
154
|
/**
|
|
40
|
-
*
|
|
155
|
+
* Start seeking from the given seconds plus the startSeconds.
|
|
156
|
+
* @param {number} seconds - The seconds to seek from.
|
|
41
157
|
*/
|
|
42
|
-
|
|
158
|
+
relativeSeekTo_ss(seconds: number): void;
|
|
43
159
|
/**
|
|
44
|
-
*
|
|
160
|
+
* Returns the current state of the player.
|
|
161
|
+
* @returns {number} The player state:
|
|
162
|
+
* -1 -> not set video mainly before embed
|
|
163
|
+
* 0 -> not played only thumnail
|
|
164
|
+
* 1 -> onload
|
|
165
|
+
* 2 -> playing
|
|
166
|
+
* 3 -> pause
|
|
167
|
+
* 4 -> video ended
|
|
45
168
|
*/
|
|
46
|
-
|
|
169
|
+
getPlayerState(): number;
|
|
170
|
+
/**
|
|
171
|
+
* Loads the YouTube API asynchronously and returns a Promise that resolves when the API is ready.
|
|
172
|
+
* If the API is already loaded, the Promise resolves immediately.
|
|
173
|
+
* If the API is currently being loaded, the Promise will resolve when the API is ready.
|
|
174
|
+
* @returns {Promise<void>} A Promise that resolves when the YouTube API is ready.
|
|
175
|
+
*/
|
|
176
|
+
youtube_api_loader(): Promise<void>;
|
|
177
|
+
/**
|
|
178
|
+
* Loads the API for the specified service and returns a promise that resolves when the API is loaded.
|
|
179
|
+
* @async
|
|
180
|
+
* @param {string} service - The name of the service whose API needs to be loaded.
|
|
181
|
+
* @returns {Promise<void>} A promise that resolves when the API is loaded.
|
|
182
|
+
*/
|
|
183
|
+
iframe_api_loader(service: string): Promise<void>;
|
|
184
|
+
/**
|
|
185
|
+
* Loads a script asynchronously and returns a promise that resolves when the script is loaded successfully or rejects when there is an error.
|
|
186
|
+
* @param {string} src - The URL of the script to be loaded.
|
|
187
|
+
* @returns {Promise<void>} - A promise that resolves when the script is loaded successfully or rejects when there is an error.
|
|
188
|
+
*/
|
|
189
|
+
mep_promise_script_loader(src: string): Promise<void>;
|
|
190
|
+
}
|
|
191
|
+
declare class mep_playitem {
|
|
192
|
+
service: ServiceType;
|
|
193
|
+
videoid: string;
|
|
194
|
+
call_array: PlaylistItem[];
|
|
195
|
+
startSeconds: number | undefined;
|
|
196
|
+
endSeconds: number | undefined;
|
|
197
|
+
subService: ServiceType | undefined;
|
|
198
|
+
subVideoid: string | undefined;
|
|
199
|
+
constructor(service: any, videoid: any);
|
|
200
|
+
toData(): PlaylistItem;
|
|
201
|
+
}
|
|
202
|
+
declare class mep_parallel {
|
|
203
|
+
data: mep_parallel_inner[];
|
|
204
|
+
constructor();
|
|
205
|
+
parse(): void;
|
|
206
|
+
}
|
|
207
|
+
declare class mep_parallel_inner {
|
|
208
|
+
service: ServiceType;
|
|
209
|
+
videoid: string;
|
|
210
|
+
constructor(service: any, videoid: any);
|
|
47
211
|
}
|
|
212
|
+
declare const multi_embed_player_save_GDPR_status: () => void;
|
|
213
|
+
declare const multi_embed_player_GDPR_reviever: (service: ServiceType) => void;
|
|
214
|
+
declare const multi_embed_player_css: HTMLStyleElement;
|
|
48
215
|
//# sourceMappingURL=multi_embed_player.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"multi_embed_player.d.ts","sourceRoot":"","sources":["../multi_embed_player.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"multi_embed_player.d.ts","sourceRoot":"","sources":["../multi_embed_player.ts"],"names":[],"mappings":"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"}
|