diff --git a/assets/js/invidious_iframe_api.js b/assets/js/invidious_iframe_api.js index 57df5ffe..52f770f3 100644 --- a/assets/js/invidious_iframe_api.js +++ b/assets/js/invidious_iframe_api.js @@ -103,7 +103,7 @@ class invidious_embed { async videodata_api(videoid) { const not_in_videodata_cahce = !(videoid in invidious_embed.videodata_cahce); if (not_in_videodata_cahce) { - const video_api_response = await fetch(invidious_embed.invidious_instance + "/api/v1/videos/" + videoid + "?fields=title,videoId,paid,premium,isFamilyFriendly,isListed,liveNow"); + const video_api_response = await fetch(invidious_embed.invidious_instance + "/api/v1/videos/" + videoid); if (video_api_response.ok) { invidious_embed.videodata_cahce[videoid] = Object.assign({}, { status: true }, await video_api_response.json()); } else { @@ -680,9 +680,37 @@ class invidious_embed { return this.target_origin + "/watch?v=" + this.videoId; } - async getVideoEmbedCode() { - const title = await this.getVideoTitle(); - return '<iframe width="560" height="315" src="' + this.target_origin + '/embed/' + this.videoId + '" title="' + title.replace('"', "'") + '" frameborder="0" allow="autoplay;encrypted-media;picture-in-picture;web-share" allowfullscreen></iframe>'; + getTitle(){ + return this.promise_send_event('gettitle'); + } + + getVideoEmbedCode() { + //const title = invidious_embed.api_promise? this.getTitle():await this.getTitle();] + const embed_url = encodeURI(`${this.target_origin}/embed/${this.videoId}`); + const html_escape = (html)=>{ + const html_escaped = html.replace(/[&'`"<>]/g, match=>{ + return { + '&': '&', + "'": ''', + '`': '`', + '"': '"', + '<': '<', + '>': '>', + }[match]}); + return html_escaped; + } + const iframe_constractor = (raw_title)=>{ + const html_escaped_title = html_escape(raw_title); + return `<iframe width="560" height="315" src="${ embed_url }" title="${ html_escaped_title }" frameborder="0" allow="autoplay;encrypted-media;picture-in-picture;web-share" allowfullscreen></iframe>`; + } + if(invidious_embed.api_promise){ + return new Promise(async(resolve,reject)=>{ + resolve(iframe_constractor(await this.getTitle())); + }) + } + else{ + return iframe_constractor(this.getTitle()); + } } getCurrentTime() {