Skip to content
Snippets Groups Projects
Commit e0ce00ba authored by syuilo's avatar syuilo
Browse files

Embed YouTube

parent 8164dd0c
No related branches found
No related tags found
No related merge requests found
<template> <template>
<a class="mk-url-preview" :href="url" target="_blank" :title="url" v-if="!fetching"> <iframe v-if="youtubeId" type="text/html" height="250"
<div class="thumbnail" v-if="thumbnail" :style="`background-image: url(${thumbnail})`"></div> :src="`http://www.youtube.com/embed/${youtubeId}`"
<article> frameborder="0"/>
<header> <div v-else>
<h1>{{ title }}</h1> <a class="mk-url-preview" :href="url" target="_blank" :title="url" v-if="!fetching">
</header> <div class="thumbnail" v-if="thumbnail" :style="`background-image: url(${thumbnail})`"></div>
<p>{{ description }}</p> <article>
<footer> <header>
<img class="icon" v-if="icon" :src="icon"/> <h1>{{ title }}</h1>
<p>{{ sitename }}</p> </header>
</footer> <p>{{ description }}</p>
</article> <footer>
</a> <img class="icon" v-if="icon" :src="icon"/>
<p>{{ sitename }}</p>
</footer>
</article>
</a>
</div>
</template> </template>
<script lang="ts"> <script lang="ts">
...@@ -26,26 +31,38 @@ export default Vue.extend({ ...@@ -26,26 +31,38 @@ export default Vue.extend({
description: null, description: null,
thumbnail: null, thumbnail: null,
icon: null, icon: null,
sitename: null sitename: null,
youtubeId: null
}; };
}, },
created() { created() {
fetch('/api:url?url=' + this.url).then(res => { const url = new URL(this.url);
res.json().then(info => {
this.title = info.title; if (url.hostname == 'www.youtube.com') {
this.description = info.description; this.youtubeId = url.searchParams.get('v');
this.thumbnail = info.thumbnail; } else if (url.hostname == 'youtu.be') {
this.icon = info.icon; this.youtubeId = url.pathname;
this.sitename = info.sitename; } else {
fetch('/api:url?url=' + this.url).then(res => {
this.fetching = false; res.json().then(info => {
this.title = info.title;
this.description = info.description;
this.thumbnail = info.thumbnail;
this.icon = info.icon;
this.sitename = info.sitename;
this.fetching = false;
});
}); });
}); }
} }
}); });
</script> </script>
<style lang="stylus" scoped> <style lang="stylus" scoped>
iframe
width 100%
.mk-url-preview .mk-url-preview
display block display block
font-size 16px font-size 16px
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment