Merge pull request #2130 from acid-chicken/patch-player
WIP: Add player
This commit is contained in:
commit
9e41fddea3
1 changed files with 80 additions and 32 deletions
|
@ -1,13 +1,5 @@
|
|||
<template>
|
||||
<iframe v-if="youtubeId" type="text/html" height="250"
|
||||
:src="`https://www.youtube.com/embed/${youtubeId}?origin=${misskeyUrl}`"
|
||||
frameborder="0"/>
|
||||
<iframe v-else-if="spotifyId"
|
||||
:src="`https://open.spotify.com/embed/track/${spotifyId}`"
|
||||
frameborder="0" allowtransparency="true" allow="encrypted-media" />
|
||||
<iframe v-else-if="nicovideoId"
|
||||
:src="`https://embed.nicovideo.jp/watch/${nicovideoId}?oldScript=1&referer=${misskeyUrl}&from=${position || '0'}&allowProgrammaticFullScreen=1`"
|
||||
frameborder="0" allow="autoplay; encrypted-media" allowfullscreen />
|
||||
<iframe v-if="player" :src="player" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen />
|
||||
<div v-else-if="tweetUrl && detail" class="twitter">
|
||||
<blockquote ref="tweet" class="twitter-tweet" :data-theme="$store.state.device.darkmode ? 'dark' : null">
|
||||
<a :href="url"></a>
|
||||
|
@ -54,10 +46,7 @@ export default Vue.extend({
|
|||
thumbnail: null,
|
||||
icon: null,
|
||||
sitename: null,
|
||||
youtubeId: null,
|
||||
spotifyId: null,
|
||||
nicovideoId: null,
|
||||
position: null,
|
||||
player: null,
|
||||
tweetUrl: null,
|
||||
misskeyUrl
|
||||
};
|
||||
|
@ -65,23 +54,7 @@ export default Vue.extend({
|
|||
created() {
|
||||
const url = new URL(this.url);
|
||||
|
||||
if (url.hostname == 'www.youtube.com') {
|
||||
this.youtubeId = url.searchParams.get('v');
|
||||
return;
|
||||
} else if (url.hostname == 'youtu.be') {
|
||||
this.youtubeId = url.pathname;
|
||||
return;
|
||||
} else if (url.hostname == 'open.spotify.com') {
|
||||
this.spotifyId = url.pathname.split('/').reverse().filter(x => x !== '')[0];
|
||||
return;
|
||||
} else if (['nicovideo.jp', 'www.nicovideo.jp', 'nico.ms'].includes(url.hostname)) {
|
||||
const id = url.pathname.split('/').reverse().filter(x => x !== '')[0];
|
||||
if (['sm', 'nm', 'ax', 'ca', 'cd', 'cw', 'fx', 'ig', 'na', 'om', 'sd', 'sk', 'yk', 'yo', 'za', 'zb', 'zc', 'zd', 'ze', 'nl', 'so', ...Array(10).keys()].some(x => id.startsWith(x)) {
|
||||
this.nicovideoId = id;
|
||||
this.position = url.searchParams.get('from');
|
||||
return;
|
||||
}
|
||||
} else if (this.detail && url.hostname == 'twitter.com' && /^\/.+\/status(es)?\/\d+/.test(url.pathname)) {
|
||||
if (this.detail && url.hostname == 'twitter.com' && /^\/.+\/status(es)?\/\d+/.test(url.pathname)) {
|
||||
this.tweetUrl = url;
|
||||
const twttr = (window as any).twttr || {};
|
||||
const loadTweet = () => twttr.widgets.load(this.$refs.tweet);
|
||||
|
@ -110,11 +83,86 @@ export default Vue.extend({
|
|||
this.thumbnail = info.thumbnail;
|
||||
this.icon = info.icon;
|
||||
this.sitename = info.sitename;
|
||||
|
||||
this.fetching = false;
|
||||
if ([ // THIS IS THE WHITELIST FOR THE EMBED PLAYER
|
||||
'afreecatv.com',
|
||||
'aparat.com',
|
||||
'applemusic.com',
|
||||
'amazon.com',
|
||||
'awa.fm',
|
||||
'bandcamp.com',
|
||||
'bbc.co.uk',
|
||||
'beatport.com',
|
||||
'bilibili.com',
|
||||
'boomstream.com',
|
||||
'breakers.tv',
|
||||
'cam4.com',
|
||||
'cavelis.net',
|
||||
'chaturbate.com',
|
||||
'cnn.com',
|
||||
'cybergame.tv',
|
||||
'dailymotion.com',
|
||||
'deezer.com',
|
||||
'djlive.pl',
|
||||
'e-onkyo.com',
|
||||
'eventials.com',
|
||||
'facebook.com',
|
||||
'fc2.com',
|
||||
'gameplank.tv',
|
||||
'goodgame.ru',
|
||||
'google.com',
|
||||
'hardtunes.com',
|
||||
'instagram.com',
|
||||
'johnnylooch.com',
|
||||
'kexp.org',
|
||||
'lahzenegar.com',
|
||||
'liveedu.tv',
|
||||
'livetube.cc',
|
||||
'livestream.com',
|
||||
'meridix.com',
|
||||
'mixcloud.com',
|
||||
'mixer.com',
|
||||
'mobcrush.com',
|
||||
'mylive.in.th',
|
||||
'myspace.com',
|
||||
'netflix.com',
|
||||
'newretrowave.com',
|
||||
'nhk.or.jp',
|
||||
'nicovideo.jp',
|
||||
'noisetrade.com',
|
||||
'nood.tv',
|
||||
'npr.org',
|
||||
'openrec.tv',
|
||||
'pandora.com',
|
||||
'pandora.tv',
|
||||
'picarto.tv',
|
||||
'pscp.tv',
|
||||
'restream.io',
|
||||
'reverbnation.com',
|
||||
'sermonaudio.com',
|
||||
'smashcast.tv',
|
||||
'songkick.com',
|
||||
'soundcloud.com',
|
||||
'spinninrecords.com',
|
||||
'stitcher.com',
|
||||
'stream.me',
|
||||
'switchboard.live',
|
||||
'tunein.com',
|
||||
'twitcasting.tv',
|
||||
'twitch.tv',
|
||||
'twitter.com',
|
||||
'vaughnlive.tv',
|
||||
'veoh.com',
|
||||
'vimeo.com',
|
||||
'watchpeoplecode.com',
|
||||
'web.tv',
|
||||
'youtube.com',
|
||||
'youtu.be'
|
||||
].some(x => x == url.hostname || url.hostname.endsWith(`.${x}`))))
|
||||
this.player = info.player;
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
|
Loading…
Reference in a new issue