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.
@@ -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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"}