mirror of
https://github.com/hcengineering/platform.git
synced 2025-04-23 08:48:01 +00:00
1301 Add format modes (#1842)
Signed-off-by: Denis Bunakalya <denis.bunakalya@xored.com>
This commit is contained in:
parent
54918c8fc6
commit
37abd77e44
@ -20,7 +20,7 @@
|
|||||||
import { createEventDispatcher } from 'svelte'
|
import { createEventDispatcher } from 'svelte'
|
||||||
import { Completion } from '../Completion'
|
import { Completion } from '../Completion'
|
||||||
import textEditorPlugin from '../plugin'
|
import textEditorPlugin from '../plugin'
|
||||||
import { RefInputAction, RefInputActionItem, TextEditorHandler } from '../types'
|
import { RefInputAction, RefInputActionItem, TextEditorHandler, FORMAT_MODES, FormatMode } from '../types'
|
||||||
import Attach from './icons/Attach.svelte'
|
import Attach from './icons/Attach.svelte'
|
||||||
import Bold from './icons/Bold.svelte'
|
import Bold from './icons/Bold.svelte'
|
||||||
import Italic from './icons/Italic.svelte'
|
import Italic from './icons/Italic.svelte'
|
||||||
@ -46,8 +46,7 @@
|
|||||||
|
|
||||||
let textEditor: TextEditor
|
let textEditor: TextEditor
|
||||||
let isFormatting = false
|
let isFormatting = false
|
||||||
let isBold = false
|
let activeModes = new Set<FormatMode>()
|
||||||
let isItalic = false
|
|
||||||
|
|
||||||
export let categories: ObjectSearchCategory[] = []
|
export let categories: ObjectSearchCategory[] = []
|
||||||
|
|
||||||
@ -173,20 +172,15 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
function updateFormattingState () {
|
function updateFormattingState () {
|
||||||
isBold = textEditor.checkIsActive('bold')
|
activeModes = new Set(FORMAT_MODES.filter(textEditor.checkIsActive))
|
||||||
isItalic = textEditor.checkIsActive('italic')
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function toggleBold () {
|
function getToggler (toggle: () => void) {
|
||||||
textEditor.toggleBold()
|
return () => {
|
||||||
|
toggle()
|
||||||
textEditor.focus()
|
textEditor.focus()
|
||||||
isBold = !isBold
|
updateFormattingState()
|
||||||
}
|
}
|
||||||
|
|
||||||
function toggleItalic () {
|
|
||||||
textEditor.toggleItalic()
|
|
||||||
textEditor.focus()
|
|
||||||
isItalic = !isItalic
|
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
@ -194,31 +188,79 @@
|
|||||||
{#if isFormatting}
|
{#if isFormatting}
|
||||||
<div class="formatPanel buttons-group xsmall-gap" class:withoutTopBorder>
|
<div class="formatPanel buttons-group xsmall-gap" class:withoutTopBorder>
|
||||||
<Tooltip label={textEditorPlugin.string.Bold}>
|
<Tooltip label={textEditorPlugin.string.Bold}>
|
||||||
<Button icon={Bold} kind={'transparent'} size={'small'} selected={isBold} on:click={toggleBold} />
|
<Button
|
||||||
|
icon={Bold}
|
||||||
|
kind={'transparent'}
|
||||||
|
size={'small'}
|
||||||
|
selected={activeModes.has('bold')}
|
||||||
|
on:click={getToggler(textEditor.toggleBold)}
|
||||||
|
/>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
<Tooltip label={textEditorPlugin.string.Italic}>
|
<Tooltip label={textEditorPlugin.string.Italic}>
|
||||||
<Button icon={Italic} kind={'transparent'} size={'small'} selected={isItalic} on:click={toggleItalic} />
|
<Button
|
||||||
|
icon={Italic}
|
||||||
|
kind={'transparent'}
|
||||||
|
size={'small'}
|
||||||
|
selected={activeModes.has('italic')}
|
||||||
|
on:click={getToggler(textEditor.toggleItalic)}
|
||||||
|
/>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
<Tooltip label={textEditorPlugin.string.Strikethrough}>
|
<Tooltip label={textEditorPlugin.string.Strikethrough}>
|
||||||
<Button icon={Strikethrough} kind={'transparent'} size={'small'} selected={undefined} on:click={() => {}} />
|
<Button
|
||||||
|
icon={Strikethrough}
|
||||||
|
kind={'transparent'}
|
||||||
|
size={'small'}
|
||||||
|
selected={activeModes.has('strike')}
|
||||||
|
on:click={getToggler(textEditor.toggleStrike)}
|
||||||
|
/>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
<div class="buttons-divider" />
|
<div class="buttons-divider" />
|
||||||
<Tooltip label={textEditorPlugin.string.OrderedList}>
|
<Tooltip label={textEditorPlugin.string.OrderedList}>
|
||||||
<Button icon={ListNumber} kind={'transparent'} size={'small'} selected={undefined} on:click={() => {}} />
|
<Button
|
||||||
|
icon={ListNumber}
|
||||||
|
kind={'transparent'}
|
||||||
|
size={'small'}
|
||||||
|
selected={activeModes.has('orderedList')}
|
||||||
|
on:click={getToggler(textEditor.toggleOrderedList)}
|
||||||
|
/>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
<Tooltip label={textEditorPlugin.string.BulletedList}>
|
<Tooltip label={textEditorPlugin.string.BulletedList}>
|
||||||
<Button icon={ListBullet} kind={'transparent'} size={'small'} selected={undefined} on:click={() => {}} />
|
<Button
|
||||||
|
icon={ListBullet}
|
||||||
|
kind={'transparent'}
|
||||||
|
size={'small'}
|
||||||
|
selected={activeModes.has('bulletList')}
|
||||||
|
on:click={getToggler(textEditor.toggleBulletList)}
|
||||||
|
/>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
<div class="buttons-divider" />
|
<div class="buttons-divider" />
|
||||||
<Tooltip label={textEditorPlugin.string.Blockquote}>
|
<Tooltip label={textEditorPlugin.string.Blockquote}>
|
||||||
<Button icon={Quote} kind={'transparent'} size={'small'} selected={undefined} on:click={() => {}} />
|
<Button
|
||||||
|
icon={Quote}
|
||||||
|
kind={'transparent'}
|
||||||
|
size={'small'}
|
||||||
|
selected={activeModes.has('blockquote')}
|
||||||
|
on:click={getToggler(textEditor.toggleBlockquote)}
|
||||||
|
/>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
<div class="buttons-divider" />
|
<div class="buttons-divider" />
|
||||||
<Tooltip label={textEditorPlugin.string.Code}>
|
<Tooltip label={textEditorPlugin.string.Code}>
|
||||||
<Button icon={Code} kind={'transparent'} size={'small'} selected={undefined} on:click={() => {}} />
|
<Button
|
||||||
|
icon={Code}
|
||||||
|
kind={'transparent'}
|
||||||
|
size={'small'}
|
||||||
|
selected={activeModes.has('code')}
|
||||||
|
on:click={getToggler(textEditor.toggleCode)}
|
||||||
|
/>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
<Tooltip label={textEditorPlugin.string.CodeBlock}>
|
<Tooltip label={textEditorPlugin.string.CodeBlock}>
|
||||||
<Button icon={CodeBlock} kind={'transparent'} size={'small'} selected={undefined} on:click={() => {}} />
|
<Button
|
||||||
|
icon={CodeBlock}
|
||||||
|
kind={'transparent'}
|
||||||
|
size={'small'}
|
||||||
|
selected={activeModes.has('codeBlock')}
|
||||||
|
on:click={getToggler(textEditor.toggleCodeBlock)}
|
||||||
|
/>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
</div>
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
|
@ -24,6 +24,7 @@
|
|||||||
import StarterKit from '@tiptap/starter-kit'
|
import StarterKit from '@tiptap/starter-kit'
|
||||||
import { createEventDispatcher, onDestroy, onMount } from 'svelte'
|
import { createEventDispatcher, onDestroy, onMount } from 'svelte'
|
||||||
import textEditorPlugin from '../plugin'
|
import textEditorPlugin from '../plugin'
|
||||||
|
import { FormatMode } from '../types'
|
||||||
|
|
||||||
export let content: string = ''
|
export let content: string = ''
|
||||||
export let placeholder: IntlString = textEditorPlugin.string.EditorPlaceholder
|
export let placeholder: IntlString = textEditorPlugin.string.EditorPlaceholder
|
||||||
@ -53,8 +54,8 @@
|
|||||||
export function insertText (text: string): void {
|
export function insertText (text: string): void {
|
||||||
editor.commands.insertContent(text as HTMLContent)
|
editor.commands.insertContent(text as HTMLContent)
|
||||||
}
|
}
|
||||||
export function checkIsActive (markName: string) {
|
export function checkIsActive (formatMode: FormatMode) {
|
||||||
return editor.isActive(markName)
|
return editor.isActive(formatMode)
|
||||||
}
|
}
|
||||||
export function toggleBold () {
|
export function toggleBold () {
|
||||||
editor.commands.toggleBold()
|
editor.commands.toggleBold()
|
||||||
@ -62,6 +63,24 @@
|
|||||||
export function toggleItalic () {
|
export function toggleItalic () {
|
||||||
editor.commands.toggleItalic()
|
editor.commands.toggleItalic()
|
||||||
}
|
}
|
||||||
|
export function toggleStrike () {
|
||||||
|
editor.commands.toggleStrike()
|
||||||
|
}
|
||||||
|
export function toggleOrderedList () {
|
||||||
|
editor.commands.toggleOrderedList()
|
||||||
|
}
|
||||||
|
export function toggleBulletList () {
|
||||||
|
editor.commands.toggleBulletList()
|
||||||
|
}
|
||||||
|
export function toggleBlockquote () {
|
||||||
|
editor.commands.toggleBlockquote()
|
||||||
|
}
|
||||||
|
export function toggleCode () {
|
||||||
|
editor.commands.toggleCode()
|
||||||
|
}
|
||||||
|
export function toggleCodeBlock () {
|
||||||
|
editor.commands.toggleCodeBlock()
|
||||||
|
}
|
||||||
let needFocus = false
|
let needFocus = false
|
||||||
export function focus (): void {
|
export function focus (): void {
|
||||||
needFocus = true
|
needFocus = true
|
||||||
|
@ -24,3 +24,16 @@ export interface RefInputActionItem extends Doc {
|
|||||||
|
|
||||||
order?: number
|
order?: number
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const FORMAT_MODES = [
|
||||||
|
'bold',
|
||||||
|
'italic',
|
||||||
|
'strike',
|
||||||
|
'orderedList',
|
||||||
|
'bulletList',
|
||||||
|
'blockquote',
|
||||||
|
'code',
|
||||||
|
'codeBlock'
|
||||||
|
] as const
|
||||||
|
|
||||||
|
export type FormatMode = typeof FORMAT_MODES[number]
|
||||||
|
Loading…
Reference in New Issue
Block a user