* chore: add precommit hook for eslint fixes, fix linting issues * chore: add eslint import sort plugin
100 lines
3.7 KiB
JavaScript
100 lines
3.7 KiB
JavaScript
import './styles.scss'
|
||
|
||
import Highlight from '@tiptap/extension-highlight'
|
||
import TextAlign from '@tiptap/extension-text-align'
|
||
import { EditorContent, useEditor } from '@tiptap/react'
|
||
import StarterKit from '@tiptap/starter-kit'
|
||
import React from 'react'
|
||
|
||
const MenuBar = ({ editor }) => {
|
||
if (!editor) {
|
||
return null
|
||
}
|
||
|
||
return (
|
||
<>
|
||
<button onClick={() => editor.chain().focus().toggleHeading({ level: 1 }).run()} className={editor.isActive('heading', { level: 1 }) ? 'is-active' : ''}>
|
||
h1
|
||
</button>
|
||
<button onClick={() => editor.chain().focus().toggleHeading({ level: 2 }).run()} className={editor.isActive('heading', { level: 2 }) ? 'is-active' : ''}>
|
||
h2
|
||
</button>
|
||
<button onClick={() => editor.chain().focus().toggleHeading({ level: 3 }).run()} className={editor.isActive('heading', { level: 3 }) ? 'is-active' : ''}>
|
||
h3
|
||
</button>
|
||
<button onClick={() => editor.chain().focus().setParagraph().run()} className={editor.isActive('paragraph') ? 'is-active' : ''}>
|
||
paragraph
|
||
</button>
|
||
<button onClick={() => editor.chain().focus().toggleBold().run()} className={editor.isActive('bold') ? 'is-active' : ''}>
|
||
bold
|
||
</button>
|
||
<button onClick={() => editor.chain().focus().toggleItalic().run()} className={editor.isActive('italic') ? 'is-active' : ''}>
|
||
italic
|
||
</button>
|
||
<button onClick={() => editor.chain().focus().toggleStrike().run()} className={editor.isActive('strike') ? 'is-active' : ''}>
|
||
strike
|
||
</button>
|
||
<button onClick={() => editor.chain().focus().toggleHighlight().run()} className={editor.isActive('highlight') ? 'is-active' : ''}>
|
||
highlight
|
||
</button>
|
||
<button onClick={() => editor.chain().focus().setTextAlign('left').run()} className={editor.isActive({ textAlign: 'left' }) ? 'is-active' : ''}>
|
||
left
|
||
</button>
|
||
<button onClick={() => editor.chain().focus().setTextAlign('center').run()} className={editor.isActive({ textAlign: 'center' }) ? 'is-active' : ''}>
|
||
center
|
||
</button>
|
||
<button onClick={() => editor.chain().focus().setTextAlign('right').run()} className={editor.isActive({ textAlign: 'right' }) ? 'is-active' : ''}>
|
||
right
|
||
</button>
|
||
<button onClick={() => editor.chain().focus().setTextAlign('justify').run()} className={editor.isActive({ textAlign: 'justify' }) ? 'is-active' : ''}>
|
||
justify
|
||
</button>
|
||
</>
|
||
)
|
||
}
|
||
|
||
export default () => {
|
||
const editor = useEditor({
|
||
extensions: [
|
||
StarterKit,
|
||
TextAlign.configure({
|
||
types: ['heading', 'paragraph'],
|
||
}),
|
||
Highlight,
|
||
],
|
||
content: `
|
||
<h3 style="text-align:center">
|
||
Devs Just Want to Have Fun by Cyndi Lauper
|
||
</h3>
|
||
<p style="text-align:center">
|
||
I come home in the morning light<br>
|
||
My mother says, <mark>“When you gonna live your life right?”</mark><br>
|
||
Oh mother dear we’re not the fortunate ones<br>
|
||
And devs, they wanna have fun<br>
|
||
Oh devs just want to have fun</p>
|
||
<p style="text-align:center">
|
||
The phone rings in the middle of the night<br>
|
||
My father yells, "What you gonna do with your life?"<br>
|
||
Oh daddy dear, you know you’re still number one<br>
|
||
But <s>girls</s>devs, they wanna have fun<br>
|
||
Oh devs just want to have
|
||
</p>
|
||
<p style="text-align:center">
|
||
That’s all they really want<br>
|
||
Some fun<br>
|
||
When the working day is done<br>
|
||
Oh devs, they wanna have fun<br>
|
||
Oh devs just wanna have fun<br>
|
||
(devs, they wanna, wanna have fun, devs wanna have)
|
||
</p>
|
||
`,
|
||
})
|
||
|
||
return (
|
||
<div>
|
||
<MenuBar editor={editor} />
|
||
<EditorContent editor={editor} />
|
||
</div>
|
||
)
|
||
}
|