9311652bed
* Embed a tweet by URL * Clean up imports * Prevent tweetId from getting interpreted as a number * Use a single place to embed iframe, Youtube, and Tweets * Support Manifold and Metaculus embeds * Remove unused import * Simplify Manifold paste logic * Clean up embed rewrite code * Add back comment * Rejigger config so tsx is only in web/ * Clean up comment * Revert unnecessary tsconfig change * Fix placeholder * Lighten placeholder
38 lines
761 B
TypeScript
38 lines
761 B
TypeScript
import { Node, mergeAttributes } from '@tiptap/core'
|
|
|
|
export interface TweetOptions {
|
|
tweetId: string
|
|
}
|
|
|
|
// This is a version of the Tiptap Node config without addNodeView,
|
|
// since that would require bundling in tsx
|
|
export const TiptapTweetNode = {
|
|
name: 'tiptapTweet',
|
|
group: 'block',
|
|
atom: true,
|
|
|
|
addAttributes() {
|
|
return {
|
|
tweetId: {
|
|
default: null,
|
|
},
|
|
}
|
|
},
|
|
|
|
parseHTML() {
|
|
return [
|
|
{
|
|
tag: 'tiptap-tweet',
|
|
},
|
|
]
|
|
},
|
|
|
|
renderHTML(props: { HTMLAttributes: Record<string, any> }) {
|
|
return ['tiptap-tweet', mergeAttributes(props.HTMLAttributes)]
|
|
},
|
|
}
|
|
|
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
// @ts-ignore
|
|
export default Node.create<TweetOptions>(TiptapTweetNode)
|