generated at
embed-tweet

Scrapboxにツイートを埋め込むUserScript
ツイート埋め込みのHTMLScrapboxでの表示用に変換するUserScriptです
こんな感じに引用表示に書き換えます
>なんとか平成のうちに完成しました。ツイート埋め込みのHTMLをScrapboxでの表示用に変換するUserScriptがなかったのでサクッと作りました。https://t.co/PjyI0jUVGX
>
>Twitter公式の埋め込みと違って文章をコピーするので、使用は自分のツイートだけに留めた方が良さそうです……#Scrapbox pic.twitter.com/s8fcv6gkar
> — 𝚔𝚗𝟷𝚌𝚑𝚝 (@kn1cht) 2019年4月30日

注意
Twitter公式の埋め込みと違って、単に文章をコピーするだけなので著作権に気をつけましょう
アカウントの表示名の変更なども反映されません
埋め込み用HTMLからは画像のURLが分からないので、画像や動画は埋め込まれません
どうしても画像を表示したければ、画像を別途アップロードするか手動で画像のURL(pbs.twimg.com/...)をコピペしてください

使い方
0. インポートします import '/api/code/kn1cht/embed-tweet/script.js'
1. ツイート埋め込み用のHTMLを貼り付けます
2. 貼ったものを全選択し、 Embed Tweet ボタンを押すと埋め込まれます

Issue
インデントを付けた状態で実行すると最初の改行より後がインデントなしになる
修正check

Changelog
7696c02 2019/04/30 公開
0073008 2019/05/01 複数のリンクがあるとツイートが途中で消える問題を修正
fb0a22e 2019/05/52 scriptタグが置換されない問題を修正
0754ff0 2019/06/23 インデントに対応

script.js
scrapbox.PopupMenu.addButton({ title : 'Embed Tweet', onClick : text => { const convertContent = (content, indent) => { const replaced = content .replace(/<a href="(https?:.*?)">(.*?)<\/a>/g, '[$1 $2]') .replace(/<br>/g, `\n${indent}`); const elem = document.createElement('div'); elem.innerHTML = replaced; return indent + elem.innerText; } const tweetRegex = /(?<spaces>[\t ]*)<blockquote[\w"\-= ]*><p[\w"\-= ]*>(?<content>.*)<\/p>&mdash;(?<author>.*)(?<link><a.*>)<\/blockquote>[\n\t ]*<script.*?><\/script>/; const match = text.match(tweetRegex); if(!match) return; const {spaces, content, author, link} = match.groups; const ind = `${spaces}>`; return text.replace(tweetRegex, convertContent(content, ind) + '\n' + convertContent(`\t—${author} ${link}`, ind)); } })