diff --git a/src/client/app/common/views/components/url-preview.vue b/src/client/app/common/views/components/url-preview.vue
index 38979871c..a630178af 100644
--- a/src/client/app/common/views/components/url-preview.vue
+++ b/src/client/app/common/views/components/url-preview.vue
@@ -2,6 +2,9 @@
+
@@ -34,6 +37,7 @@ export default Vue.extend({
icon: null,
sitename: null,
youtubeId: null,
+ tweetUrl: null,
misskeyUrl
};
},
@@ -44,6 +48,25 @@ export default Vue.extend({
this.youtubeId = url.searchParams.get('v');
} else if (url.hostname == 'youtu.be') {
this.youtubeId = url.pathname;
+ } else if (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);
+
+ if (twttr.widgets) {
+ Vue.nextTick(loadTweet);
+ } else {
+ const wjsId = 'twitter-wjs';
+ if (!document.getElementById(wjsId)) {
+ const head = document.getElementsByTagName('head')[0];
+ const script = document.createElement('script');
+ script.setAttribute('id', wjsId);
+ script.setAttribute('src', 'https://platform.twitter.com/widgets.js');
+ head.appendChild(script);
+ }
+ twttr.ready = loadTweet;
+ (window as any).twttr = twttr;
+ }
} else {
fetch('/url?url=' + encodeURIComponent(this.url)).then(res => {
res.json().then(info => {