multi_embed_player 3.0.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/LICENSE +201 -0
- package/README.md +36 -0
- package/dist/iframe_api/bilibili.d.ts +91 -0
- package/dist/iframe_api/bilibili.d.ts.map +1 -0
- package/dist/iframe_api/bilibili.js +451 -0
- package/dist/iframe_api/bilibili.js.map +1 -0
- package/dist/iframe_api/index.d.ts +6 -0
- package/dist/iframe_api/index.d.ts.map +1 -0
- package/dist/iframe_api/index.js +8 -0
- package/dist/iframe_api/index.js.map +1 -0
- package/dist/iframe_api/niconico.d.ts +42 -0
- package/dist/iframe_api/niconico.d.ts.map +1 -0
- package/dist/iframe_api/niconico.js +181 -0
- package/dist/iframe_api/niconico.js.map +1 -0
- package/dist/iframe_api/soundcloud.d.ts +80 -0
- package/dist/iframe_api/soundcloud.d.ts.map +1 -0
- package/dist/iframe_api/soundcloud.js +188 -0
- package/dist/iframe_api/soundcloud.js.map +1 -0
- package/dist/iframe_api/youtube.d.ts +133 -0
- package/dist/iframe_api/youtube.d.ts.map +1 -0
- package/dist/iframe_api/youtube.js +278 -0
- package/dist/iframe_api/youtube.js.map +1 -0
- package/dist/multi_embed_player.d.ts +48 -0
- package/dist/multi_embed_player.d.ts.map +1 -0
- package/dist/multi_embed_player.js +318 -0
- package/dist/multi_embed_player.js.map +1 -0
- package/dist/types.d.ts +126 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +22 -0
- package/dist/types.js.map +1 -0
- package/package.json +56 -0
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
import { PlayerState } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* Class representing a Niconico player.
|
|
4
|
+
*/
|
|
5
|
+
export class mep_niconico {
|
|
6
|
+
constructor(replacing_element, content, player_set_event_function) {
|
|
7
|
+
this.autoplay = 0;
|
|
8
|
+
this.startSeconds = 0;
|
|
9
|
+
this.endSeconds = -1;
|
|
10
|
+
this.playerState = PlayerState.UNSTARTED;
|
|
11
|
+
this.currentTime = 0;
|
|
12
|
+
this.duration = 0;
|
|
13
|
+
this.volume = 100;
|
|
14
|
+
this.muted = false;
|
|
15
|
+
this.load(replacing_element, content, player_set_event_function);
|
|
16
|
+
}
|
|
17
|
+
async load(replacing_element, content, player_set_event_function) {
|
|
18
|
+
this.player = document.createElement("iframe");
|
|
19
|
+
if (typeof player_set_event_function === "function") {
|
|
20
|
+
player_set_event_function();
|
|
21
|
+
}
|
|
22
|
+
let iframe_replace_node;
|
|
23
|
+
if (typeof replacing_element === "string") {
|
|
24
|
+
const element = document.getElementById(replacing_element);
|
|
25
|
+
if (!element) {
|
|
26
|
+
throw new Error(`Element with id "${replacing_element}" not found`);
|
|
27
|
+
}
|
|
28
|
+
iframe_replace_node = element;
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
iframe_replace_node = replacing_element;
|
|
32
|
+
}
|
|
33
|
+
this.videoid = content.videoId;
|
|
34
|
+
const playerVars = content.playerVars || {};
|
|
35
|
+
// Set player variables
|
|
36
|
+
this.autoplay = playerVars.autoplay || 0;
|
|
37
|
+
this.startSeconds = playerVars.startSeconds || 0;
|
|
38
|
+
this.endSeconds = playerVars.endSeconds || -1;
|
|
39
|
+
// Set iframe attributes
|
|
40
|
+
this.player.width = String(content.width || 560);
|
|
41
|
+
this.player.height = String(content.height || 315);
|
|
42
|
+
this.player.allow = "autoplay; fullscreen";
|
|
43
|
+
this.player.allowFullscreen = true;
|
|
44
|
+
this.player.style.border = "none";
|
|
45
|
+
// Build URL with parameters
|
|
46
|
+
const params = new URLSearchParams();
|
|
47
|
+
params.set('v', this.videoid);
|
|
48
|
+
if (this.autoplay)
|
|
49
|
+
params.set('autoplay', '1');
|
|
50
|
+
if (this.startSeconds)
|
|
51
|
+
params.set('from', String(this.startSeconds));
|
|
52
|
+
if (this.endSeconds !== -1)
|
|
53
|
+
params.set('to', String(this.endSeconds));
|
|
54
|
+
if (playerVars.mute)
|
|
55
|
+
params.set('mute', '1');
|
|
56
|
+
if (playerVars.noRelatedVideo)
|
|
57
|
+
params.set('noRelatedVideo', '1');
|
|
58
|
+
if (playerVars.noLogo)
|
|
59
|
+
params.set('noLogo', '1');
|
|
60
|
+
if (playerVars.noController)
|
|
61
|
+
params.set('noController', '1');
|
|
62
|
+
if (playerVars.noHeader)
|
|
63
|
+
params.set('noHeader', '1');
|
|
64
|
+
if (playerVars.noTags)
|
|
65
|
+
params.set('noTags', '1');
|
|
66
|
+
if (playerVars.noShare)
|
|
67
|
+
params.set('noShare', '1');
|
|
68
|
+
this.player.src = `https://embed.nicovideo.jp/watch/${this.videoid}?${params.toString()}`;
|
|
69
|
+
// Replace element
|
|
70
|
+
iframe_replace_node.replaceWith(this.player);
|
|
71
|
+
// Dispatch ready event
|
|
72
|
+
setTimeout(() => {
|
|
73
|
+
this.player.dispatchEvent(new Event("onReady"));
|
|
74
|
+
}, 1000);
|
|
75
|
+
}
|
|
76
|
+
// IPlayer interface implementation
|
|
77
|
+
playVideo() {
|
|
78
|
+
// Niconico doesn't provide direct control through iframe
|
|
79
|
+
// This would require postMessage communication
|
|
80
|
+
console.log("Play video - Niconico iframe doesn't support direct control");
|
|
81
|
+
}
|
|
82
|
+
pauseVideo() {
|
|
83
|
+
// Niconico doesn't provide direct control through iframe
|
|
84
|
+
console.log("Pause video - Niconico iframe doesn't support direct control");
|
|
85
|
+
}
|
|
86
|
+
getCurrentTime() {
|
|
87
|
+
// Return estimated time based on when playback started
|
|
88
|
+
return Promise.resolve(this.currentTime);
|
|
89
|
+
}
|
|
90
|
+
getDuration() {
|
|
91
|
+
// Would need to be fetched from Niconico API
|
|
92
|
+
return Promise.resolve(this.duration);
|
|
93
|
+
}
|
|
94
|
+
async seekTo(time) {
|
|
95
|
+
const num_time = Number(time);
|
|
96
|
+
if (isNaN(num_time) || num_time < 0) {
|
|
97
|
+
console.error("Invalid time value");
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
// Update internal time tracking
|
|
101
|
+
this.currentTime = this.startSeconds + num_time;
|
|
102
|
+
console.log("Seek to - Niconico iframe doesn't support direct control");
|
|
103
|
+
}
|
|
104
|
+
setVolume(volume) {
|
|
105
|
+
const num_volume = Number(volume);
|
|
106
|
+
if (isNaN(num_volume) || num_volume < 0 || num_volume > 100) {
|
|
107
|
+
console.error("Invalid volume value");
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
this.volume = num_volume;
|
|
111
|
+
console.log("Set volume - Niconico iframe doesn't support direct control");
|
|
112
|
+
}
|
|
113
|
+
getVolume() {
|
|
114
|
+
return Promise.resolve(this.volume);
|
|
115
|
+
}
|
|
116
|
+
mute() {
|
|
117
|
+
this.muted = true;
|
|
118
|
+
console.log("Mute - Niconico iframe doesn't support direct control");
|
|
119
|
+
}
|
|
120
|
+
unMute() {
|
|
121
|
+
this.muted = false;
|
|
122
|
+
console.log("Unmute - Niconico iframe doesn't support direct control");
|
|
123
|
+
}
|
|
124
|
+
isMuted() {
|
|
125
|
+
return Promise.resolve(this.muted);
|
|
126
|
+
}
|
|
127
|
+
getPlayerState() {
|
|
128
|
+
return Promise.resolve(this.playerState);
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Get real duration between start and end times.
|
|
132
|
+
*/
|
|
133
|
+
async getRealDulation() {
|
|
134
|
+
const duration = await this.getDuration();
|
|
135
|
+
if (this.endSeconds === -1) {
|
|
136
|
+
return duration - this.startSeconds;
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
return this.endSeconds - this.startSeconds;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Load video by ID.
|
|
144
|
+
*/
|
|
145
|
+
loadVideoById(content) {
|
|
146
|
+
this.videoid = content.videoId;
|
|
147
|
+
const playerVars = content.playerVars || {};
|
|
148
|
+
this.autoplay = playerVars.autoplay || 0;
|
|
149
|
+
this.startSeconds = playerVars.startSeconds || 0;
|
|
150
|
+
this.endSeconds = playerVars.endSeconds || -1;
|
|
151
|
+
// Reload iframe with new video
|
|
152
|
+
const params = new URLSearchParams();
|
|
153
|
+
params.set('v', this.videoid);
|
|
154
|
+
if (this.autoplay)
|
|
155
|
+
params.set('autoplay', '1');
|
|
156
|
+
if (this.startSeconds)
|
|
157
|
+
params.set('from', String(this.startSeconds));
|
|
158
|
+
if (this.endSeconds !== -1)
|
|
159
|
+
params.set('to', String(this.endSeconds));
|
|
160
|
+
this.player.src = `https://embed.nicovideo.jp/watch/${this.videoid}?${params.toString()}`;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Cue video by ID.
|
|
164
|
+
*/
|
|
165
|
+
cueVideoById(content) {
|
|
166
|
+
this.videoid = content.videoId;
|
|
167
|
+
const playerVars = content.playerVars || {};
|
|
168
|
+
this.autoplay = 0; // Don't autoplay when cueing
|
|
169
|
+
this.startSeconds = playerVars.startSeconds || 0;
|
|
170
|
+
this.endSeconds = playerVars.endSeconds || -1;
|
|
171
|
+
// Load without autoplay
|
|
172
|
+
const params = new URLSearchParams();
|
|
173
|
+
params.set('v', this.videoid);
|
|
174
|
+
if (this.startSeconds)
|
|
175
|
+
params.set('from', String(this.startSeconds));
|
|
176
|
+
if (this.endSeconds !== -1)
|
|
177
|
+
params.set('to', String(this.endSeconds));
|
|
178
|
+
this.player.src = `https://embed.nicovideo.jp/watch/${this.videoid}?${params.toString()}`;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
//# sourceMappingURL=niconico.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"niconico.js","sourceRoot":"","sources":["../../iframe_api/niconico.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { SoundCloudContent, IPlayer, PlayerState, EventHandler } from '../types';
|
|
2
|
+
interface SoundCloudWidget {
|
|
3
|
+
bind(event: string, callback: () => void): void;
|
|
4
|
+
play(): void;
|
|
5
|
+
pause(): void;
|
|
6
|
+
toggle(): void;
|
|
7
|
+
seekTo(milliseconds: number): void;
|
|
8
|
+
setVolume(volume: number): void;
|
|
9
|
+
next(): void;
|
|
10
|
+
prev(): void;
|
|
11
|
+
skip(soundIndex: number): void;
|
|
12
|
+
load(url: string, options?: any): void;
|
|
13
|
+
reload(): void;
|
|
14
|
+
getVolume(callback: (volume: number) => void): void;
|
|
15
|
+
getDuration(callback: (duration: number) => void): void;
|
|
16
|
+
getPosition(callback: (position: number) => void): void;
|
|
17
|
+
getSounds(callback: (sounds: any[]) => void): void;
|
|
18
|
+
getCurrentSound(callback: (sound: any) => void): void;
|
|
19
|
+
getCurrentSoundIndex(callback: (index: number) => void): void;
|
|
20
|
+
isPaused(callback: (paused: boolean) => void): void;
|
|
21
|
+
}
|
|
22
|
+
declare global {
|
|
23
|
+
interface Window {
|
|
24
|
+
SC: {
|
|
25
|
+
Widget: {
|
|
26
|
+
(iframe: HTMLIFrameElement): SoundCloudWidget;
|
|
27
|
+
};
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Class representing a SoundCloud player.
|
|
33
|
+
*/
|
|
34
|
+
export declare class mep_soundcloud implements IPlayer {
|
|
35
|
+
private static soundcloud_api_loaded;
|
|
36
|
+
private static soundcloud_api_promise;
|
|
37
|
+
private player;
|
|
38
|
+
private iframe;
|
|
39
|
+
private widget;
|
|
40
|
+
private autoplay;
|
|
41
|
+
private startSeconds;
|
|
42
|
+
private endSeconds;
|
|
43
|
+
private playerState;
|
|
44
|
+
private currentTime;
|
|
45
|
+
private duration;
|
|
46
|
+
private volume;
|
|
47
|
+
private muted;
|
|
48
|
+
/**
|
|
49
|
+
* Load SoundCloud Widget API asynchronously.
|
|
50
|
+
*/
|
|
51
|
+
private load_soundcloud_api;
|
|
52
|
+
constructor(replacing_element: string | HTMLElement, content: SoundCloudContent, player_set_event_function?: EventHandler);
|
|
53
|
+
private load;
|
|
54
|
+
private setup_event_listeners;
|
|
55
|
+
playVideo(): void;
|
|
56
|
+
pauseVideo(): void;
|
|
57
|
+
getCurrentTime(): Promise<number>;
|
|
58
|
+
getDuration(): Promise<number>;
|
|
59
|
+
seekTo(time: number): Promise<void>;
|
|
60
|
+
setVolume(volume: number): void;
|
|
61
|
+
getVolume(): Promise<number>;
|
|
62
|
+
mute(): void;
|
|
63
|
+
unMute(): void;
|
|
64
|
+
isMuted(): Promise<boolean>;
|
|
65
|
+
getPlayerState(): Promise<PlayerState>;
|
|
66
|
+
/**
|
|
67
|
+
* Get real duration between start and end times.
|
|
68
|
+
*/
|
|
69
|
+
getRealDulation(): Promise<number>;
|
|
70
|
+
/**
|
|
71
|
+
* Load track by ID.
|
|
72
|
+
*/
|
|
73
|
+
loadVideoById(content: SoundCloudContent): void;
|
|
74
|
+
/**
|
|
75
|
+
* Cue track by ID.
|
|
76
|
+
*/
|
|
77
|
+
cueVideoById(content: SoundCloudContent): void;
|
|
78
|
+
}
|
|
79
|
+
export {};
|
|
80
|
+
//# sourceMappingURL=soundcloud.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"soundcloud.d.ts","sourceRoot":"","sources":["../../iframe_api/soundcloud.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
import { PlayerState } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* Class representing a SoundCloud player.
|
|
4
|
+
*/
|
|
5
|
+
export class mep_soundcloud {
|
|
6
|
+
/**
|
|
7
|
+
* Load SoundCloud Widget API asynchronously.
|
|
8
|
+
*/
|
|
9
|
+
async load_soundcloud_api() {
|
|
10
|
+
return new Promise((resolve) => {
|
|
11
|
+
if (mep_soundcloud.soundcloud_api_loaded === 0) {
|
|
12
|
+
mep_soundcloud.soundcloud_api_loaded = 1;
|
|
13
|
+
const script = document.createElement("script");
|
|
14
|
+
script.src = "https://w.soundcloud.com/player/api.js";
|
|
15
|
+
script.addEventListener("load", () => {
|
|
16
|
+
mep_soundcloud.soundcloud_api_promise.forEach(func => func());
|
|
17
|
+
mep_soundcloud.soundcloud_api_loaded = 2;
|
|
18
|
+
resolve();
|
|
19
|
+
});
|
|
20
|
+
document.body.appendChild(script);
|
|
21
|
+
}
|
|
22
|
+
else if (mep_soundcloud.soundcloud_api_loaded === 1) {
|
|
23
|
+
mep_soundcloud.soundcloud_api_promise.push(resolve);
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
resolve();
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
constructor(replacing_element, content, player_set_event_function) {
|
|
31
|
+
this.autoplay = 0;
|
|
32
|
+
this.startSeconds = 0;
|
|
33
|
+
this.endSeconds = -1;
|
|
34
|
+
this.playerState = PlayerState.UNSTARTED;
|
|
35
|
+
this.currentTime = 0;
|
|
36
|
+
this.duration = 0;
|
|
37
|
+
this.volume = 100;
|
|
38
|
+
this.muted = false;
|
|
39
|
+
this.load(replacing_element, content, player_set_event_function);
|
|
40
|
+
}
|
|
41
|
+
async load(replacing_element, content, player_set_event_function) {
|
|
42
|
+
this.player = document.createElement("div");
|
|
43
|
+
if (typeof player_set_event_function === "function") {
|
|
44
|
+
player_set_event_function();
|
|
45
|
+
}
|
|
46
|
+
await this.load_soundcloud_api();
|
|
47
|
+
let iframe_replace_node;
|
|
48
|
+
if (typeof replacing_element === "string") {
|
|
49
|
+
const element = document.getElementById(replacing_element);
|
|
50
|
+
if (!element) {
|
|
51
|
+
throw new Error(`Element with id "${replacing_element}" not found`);
|
|
52
|
+
}
|
|
53
|
+
iframe_replace_node = element;
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
iframe_replace_node = replacing_element;
|
|
57
|
+
}
|
|
58
|
+
const playerVars = content.playerVars || {};
|
|
59
|
+
this.autoplay = playerVars.autoplay || 0;
|
|
60
|
+
this.startSeconds = playerVars.startSeconds || 0;
|
|
61
|
+
this.endSeconds = playerVars.endSeconds || -1;
|
|
62
|
+
// Create iframe
|
|
63
|
+
this.iframe = document.createElement("iframe");
|
|
64
|
+
this.iframe.width = String(content.width || 560);
|
|
65
|
+
this.iframe.height = String(content.height || 315);
|
|
66
|
+
this.iframe.allow = "autoplay";
|
|
67
|
+
this.iframe.src = `https://w.soundcloud.com/player/?url=https://soundcloud.com/${content.videoId}&auto_play=${this.autoplay}&hide_related=false&show_comments=true&show_user=true&show_reposts=false&show_teaser=true&visual=true`;
|
|
68
|
+
iframe_replace_node.replaceWith(this.iframe);
|
|
69
|
+
// Initialize widget
|
|
70
|
+
this.widget = window.SC.Widget(this.iframe);
|
|
71
|
+
this.setup_event_listeners();
|
|
72
|
+
}
|
|
73
|
+
setup_event_listeners() {
|
|
74
|
+
this.widget.bind('ready', () => {
|
|
75
|
+
this.player.dispatchEvent(new Event("onReady"));
|
|
76
|
+
});
|
|
77
|
+
this.widget.bind('play', () => {
|
|
78
|
+
this.playerState = PlayerState.PLAYING;
|
|
79
|
+
this.player.dispatchEvent(new CustomEvent("onStateChange", { detail: this.playerState }));
|
|
80
|
+
});
|
|
81
|
+
this.widget.bind('pause', () => {
|
|
82
|
+
this.playerState = PlayerState.PAUSED;
|
|
83
|
+
this.player.dispatchEvent(new CustomEvent("onStateChange", { detail: this.playerState }));
|
|
84
|
+
});
|
|
85
|
+
this.widget.bind('finish', () => {
|
|
86
|
+
this.playerState = PlayerState.ENDED;
|
|
87
|
+
this.player.dispatchEvent(new Event("onEndVideo"));
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
// IPlayer interface implementation
|
|
91
|
+
playVideo() {
|
|
92
|
+
this.widget.play();
|
|
93
|
+
}
|
|
94
|
+
pauseVideo() {
|
|
95
|
+
this.widget.pause();
|
|
96
|
+
}
|
|
97
|
+
getCurrentTime() {
|
|
98
|
+
return new Promise((resolve) => {
|
|
99
|
+
this.widget.getPosition((position) => {
|
|
100
|
+
resolve(position / 1000); // Convert to seconds
|
|
101
|
+
});
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
getDuration() {
|
|
105
|
+
return new Promise((resolve) => {
|
|
106
|
+
this.widget.getDuration((duration) => {
|
|
107
|
+
resolve(duration / 1000); // Convert to seconds
|
|
108
|
+
});
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
async seekTo(time) {
|
|
112
|
+
const num_time = Number(time);
|
|
113
|
+
if (isNaN(num_time) || num_time < 0) {
|
|
114
|
+
console.error("Invalid time value");
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
this.widget.seekTo((this.startSeconds + num_time) * 1000); // Convert to milliseconds
|
|
118
|
+
}
|
|
119
|
+
setVolume(volume) {
|
|
120
|
+
const num_volume = Number(volume);
|
|
121
|
+
if (isNaN(num_volume) || num_volume < 0 || num_volume > 100) {
|
|
122
|
+
console.error("Invalid volume value");
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
this.widget.setVolume(num_volume / 100); // SoundCloud expects 0-1 range
|
|
126
|
+
this.volume = num_volume;
|
|
127
|
+
}
|
|
128
|
+
getVolume() {
|
|
129
|
+
return new Promise((resolve) => {
|
|
130
|
+
this.widget.getVolume((volume) => {
|
|
131
|
+
resolve(volume * 100); // Convert to 0-100 range
|
|
132
|
+
});
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
mute() {
|
|
136
|
+
this.widget.setVolume(0);
|
|
137
|
+
this.muted = true;
|
|
138
|
+
}
|
|
139
|
+
unMute() {
|
|
140
|
+
this.widget.setVolume(this.volume / 100);
|
|
141
|
+
this.muted = false;
|
|
142
|
+
}
|
|
143
|
+
isMuted() {
|
|
144
|
+
return Promise.resolve(this.muted);
|
|
145
|
+
}
|
|
146
|
+
getPlayerState() {
|
|
147
|
+
return Promise.resolve(this.playerState);
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Get real duration between start and end times.
|
|
151
|
+
*/
|
|
152
|
+
async getRealDulation() {
|
|
153
|
+
const duration = await this.getDuration();
|
|
154
|
+
if (this.endSeconds === -1) {
|
|
155
|
+
return duration - this.startSeconds;
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
return this.endSeconds - this.startSeconds;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Load track by ID.
|
|
163
|
+
*/
|
|
164
|
+
loadVideoById(content) {
|
|
165
|
+
const url = `https://soundcloud.com/${content.videoId}`;
|
|
166
|
+
this.widget.load(url, {
|
|
167
|
+
auto_play: this.autoplay === 1,
|
|
168
|
+
callback: () => {
|
|
169
|
+
this.player.dispatchEvent(new Event("onReady"));
|
|
170
|
+
}
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Cue track by ID.
|
|
175
|
+
*/
|
|
176
|
+
cueVideoById(content) {
|
|
177
|
+
const url = `https://soundcloud.com/${content.videoId}`;
|
|
178
|
+
this.widget.load(url, {
|
|
179
|
+
auto_play: false,
|
|
180
|
+
callback: () => {
|
|
181
|
+
this.player.dispatchEvent(new Event("onReady"));
|
|
182
|
+
}
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
mep_soundcloud.soundcloud_api_loaded = 0;
|
|
187
|
+
mep_soundcloud.soundcloud_api_promise = [];
|
|
188
|
+
//# sourceMappingURL=soundcloud.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"soundcloud.js","sourceRoot":"","sources":["../../iframe_api/soundcloud.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { YouTubeContent, IPlayer, PlayerState, EventHandler } from '../types';
|
|
2
|
+
declare global {
|
|
3
|
+
interface Window {
|
|
4
|
+
YT: {
|
|
5
|
+
Player: new (element: string | HTMLElement, config: YTPlayerConfig) => YTPlayer;
|
|
6
|
+
ready: (callback: () => void) => void;
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
interface YTPlayerConfig {
|
|
11
|
+
height: string;
|
|
12
|
+
width: string;
|
|
13
|
+
videoId: string;
|
|
14
|
+
playerVars: Record<string, any>;
|
|
15
|
+
host: string;
|
|
16
|
+
events: {
|
|
17
|
+
onReady: () => void;
|
|
18
|
+
onError: (event: {
|
|
19
|
+
data: number;
|
|
20
|
+
}) => void;
|
|
21
|
+
onStateChange: () => void;
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
interface YTPlayer {
|
|
25
|
+
playVideo(): void;
|
|
26
|
+
pauseVideo(): void;
|
|
27
|
+
getCurrentTime(): number;
|
|
28
|
+
getDuration(): number;
|
|
29
|
+
seekTo(seconds: number, allowSeekAhead?: boolean): void;
|
|
30
|
+
setVolume(volume: number): void;
|
|
31
|
+
getVolume(): number;
|
|
32
|
+
mute(): void;
|
|
33
|
+
unMute(): void;
|
|
34
|
+
isMuted(): boolean;
|
|
35
|
+
getPlayerState(): number;
|
|
36
|
+
loadVideoById(videoId: string, startSeconds?: number, suggestedQuality?: string): void;
|
|
37
|
+
cueVideoById(videoId: string, startSeconds?: number, suggestedQuality?: string): void;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Class representing a YouTube player.
|
|
41
|
+
*/
|
|
42
|
+
export declare class mep_youtube implements IPlayer {
|
|
43
|
+
private static youtube_api_loaded;
|
|
44
|
+
private static youtube_api_promise;
|
|
45
|
+
private player;
|
|
46
|
+
private YT_player;
|
|
47
|
+
private autoplay;
|
|
48
|
+
private startSeconds;
|
|
49
|
+
private endSeconds;
|
|
50
|
+
private el;
|
|
51
|
+
/**
|
|
52
|
+
* Load YouTube Iframe API asynchronously.
|
|
53
|
+
*/
|
|
54
|
+
private load_youtube_api;
|
|
55
|
+
/**
|
|
56
|
+
* Create a new YouTube player instance.
|
|
57
|
+
*/
|
|
58
|
+
constructor(replacing_element: string | HTMLElement, content: YouTubeContent, player_set_event_function?: EventHandler);
|
|
59
|
+
/**
|
|
60
|
+
* Load the YouTube player.
|
|
61
|
+
*/
|
|
62
|
+
private load;
|
|
63
|
+
/**
|
|
64
|
+
* Handle error events from the player.
|
|
65
|
+
*/
|
|
66
|
+
private error_event_handler;
|
|
67
|
+
/**
|
|
68
|
+
* Dispatch event to the player element.
|
|
69
|
+
*/
|
|
70
|
+
private dispatch_event;
|
|
71
|
+
/**
|
|
72
|
+
* Play the video.
|
|
73
|
+
*/
|
|
74
|
+
playVideo(): void;
|
|
75
|
+
/**
|
|
76
|
+
* Pause the video.
|
|
77
|
+
*/
|
|
78
|
+
pauseVideo(): void;
|
|
79
|
+
/**
|
|
80
|
+
* Get the current time of the video.
|
|
81
|
+
*/
|
|
82
|
+
getCurrentTime(): number;
|
|
83
|
+
/**
|
|
84
|
+
* Get the duration of the video.
|
|
85
|
+
*/
|
|
86
|
+
getDuration(): number;
|
|
87
|
+
/**
|
|
88
|
+
* Get the actual duration between the start and end times.
|
|
89
|
+
*/
|
|
90
|
+
getRealDulation(): number;
|
|
91
|
+
/**
|
|
92
|
+
* Seek to a specific time in the video.
|
|
93
|
+
*/
|
|
94
|
+
seekTo(time: number): void;
|
|
95
|
+
/**
|
|
96
|
+
* Set the volume of the player.
|
|
97
|
+
*/
|
|
98
|
+
setVolume(volume: number): void;
|
|
99
|
+
/**
|
|
100
|
+
* Mute the player.
|
|
101
|
+
*/
|
|
102
|
+
mute(): void;
|
|
103
|
+
/**
|
|
104
|
+
* Unmute the player.
|
|
105
|
+
*/
|
|
106
|
+
unMute(): void;
|
|
107
|
+
/**
|
|
108
|
+
* Check if the player is muted.
|
|
109
|
+
*/
|
|
110
|
+
isMuted(): boolean;
|
|
111
|
+
/**
|
|
112
|
+
* Get the current volume of the player.
|
|
113
|
+
*/
|
|
114
|
+
getVolume(): number;
|
|
115
|
+
/**
|
|
116
|
+
* Get the current state of the player.
|
|
117
|
+
*/
|
|
118
|
+
getPlayerState(): PlayerState;
|
|
119
|
+
/**
|
|
120
|
+
* Get the title of the currently loaded video.
|
|
121
|
+
*/
|
|
122
|
+
getTitle(): string;
|
|
123
|
+
/**
|
|
124
|
+
* Load a new video by ID.
|
|
125
|
+
*/
|
|
126
|
+
loadVideoById(content: YouTubeContent, startSeconds?: number): void;
|
|
127
|
+
/**
|
|
128
|
+
* Cue a new video by ID.
|
|
129
|
+
*/
|
|
130
|
+
cueVideoById(content: YouTubeContent, startSeconds?: number): void;
|
|
131
|
+
}
|
|
132
|
+
export {};
|
|
133
|
+
//# sourceMappingURL=youtube.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"youtube.d.ts","sourceRoot":"","sources":["../../iframe_api/youtube.ts"],"names":[],"mappings":"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"}
|