postmerge
This commit is contained in:
parent
9f572ca590
commit
1055c006fc
|
@ -1,5 +1,5 @@
|
|||
import { EditorView } from 'prosemirror-view'
|
||||
import { EditorState } from 'prosemirror-state'
|
||||
import type { EditorView } from 'prosemirror-view'
|
||||
import type { EditorState } from 'prosemirror-state'
|
||||
import { useState } from '../store/context'
|
||||
import { ProseMirror } from './ProseMirror'
|
||||
import '../styles/Editor.scss'
|
||||
|
@ -10,7 +10,7 @@ export const Editor = () => {
|
|||
const onReconfigure = (text: EditorState) => ctrl.setState({ text })
|
||||
const onChange = (text: EditorState) => ctrl.setState({ text, lastModified: new Date() })
|
||||
// const editorCss = (config) => css``
|
||||
const style = () => (store.error ? `display: none;` : store.markdown ? `white-space: pre-wrap;` : '')
|
||||
const style = () => (store.error ? `display: none;` : (store.markdown ? `white-space: pre-wrap;` : ''))
|
||||
return (
|
||||
<ProseMirror
|
||||
className='editor col-md-6 shift-content'
|
||||
|
|
|
@ -1,12 +1,13 @@
|
|||
import { Config } from '../store/context'
|
||||
import type { JSX } from 'solid-js/jsx-runtime';
|
||||
import type { Config } from '../store/context'
|
||||
import '../styles/Layout.scss'
|
||||
|
||||
export type Styled = {
|
||||
children: any;
|
||||
children: JSX.Element;
|
||||
config?: Config;
|
||||
'data-testid'?: string;
|
||||
onClick?: () => void;
|
||||
onMouseEnter?: (e: any) => void;
|
||||
onMouseEnter?: (e: MouseEvent) => void;
|
||||
}
|
||||
|
||||
export const Layout = (props: Styled) => {
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
import { createEffect, untrack } from 'solid-js'
|
||||
import { Store, unwrap } from 'solid-js/store'
|
||||
import { EditorState, Transaction } from 'prosemirror-state'
|
||||
import { EditorState, EditorStateConfig, Transaction } from 'prosemirror-state'
|
||||
import { EditorView } from 'prosemirror-view'
|
||||
import { Schema } from 'prosemirror-model'
|
||||
import { NodeViewFn, ProseMirrorExtension, ProseMirrorState } from '../prosemirror/helpers'
|
||||
import type { NodeViewFn, ProseMirrorExtension, ProseMirrorState } from '../prosemirror/helpers'
|
||||
|
||||
interface Props {
|
||||
interface ProseMirrorProps {
|
||||
style?: string;
|
||||
className?: string;
|
||||
text?: Store<ProseMirrorState>;
|
||||
|
@ -16,7 +16,7 @@ interface Props {
|
|||
onChange: (s: EditorState) => void;
|
||||
}
|
||||
|
||||
export const ProseMirror = (props: Props) => {
|
||||
export const ProseMirror = (props: ProseMirrorProps) => {
|
||||
let editorRef: HTMLDivElement
|
||||
const editorView = () => untrack(() => unwrap(props.editorView))
|
||||
|
||||
|
@ -30,7 +30,7 @@ export const ProseMirror = (props: Props) => {
|
|||
|
||||
createEffect((payload: [EditorState, ProseMirrorExtension[]]) => {
|
||||
const [prevText, prevExtensions] = payload
|
||||
const text: EditorState = unwrap(props.text)
|
||||
const text = unwrap(props.text)
|
||||
const extensions: ProseMirrorExtension[] = unwrap(props.extensions)
|
||||
if (!text || !extensions?.length) {
|
||||
return [text, extensions]
|
||||
|
@ -63,7 +63,7 @@ export const ProseMirror = (props: Props) => {
|
|||
<div
|
||||
style={props.style}
|
||||
ref={editorRef}
|
||||
className={props.className}
|
||||
class={props.className}
|
||||
spell-check={false}
|
||||
/>
|
||||
)
|
||||
|
@ -101,7 +101,7 @@ const createEditorState = (
|
|||
|
||||
let editorState: EditorState
|
||||
if (reconfigure) {
|
||||
editorState = text.reconfigure({ schema, plugins })
|
||||
editorState = text.reconfigure({ schema, plugins } as EditorStateConfig)
|
||||
} else if (text instanceof EditorState) {
|
||||
editorState = EditorState.fromJSON({ schema, plugins }, text.toJSON())
|
||||
} else if (text){
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import markdownit from 'markdown-it'
|
||||
import { MarkdownSerializer, MarkdownParser, defaultMarkdownSerializer } from 'prosemirror-markdown'
|
||||
import { Node, Schema } from 'prosemirror-model'
|
||||
import { EditorState } from 'prosemirror-state'
|
||||
import { MarkdownSerializer, MarkdownParser, defaultMarkdownSerializer, MarkdownSerializerState } from 'prosemirror-markdown'
|
||||
import type { Node, Schema } from 'prosemirror-model'
|
||||
import type { EditorState } from 'prosemirror-state'
|
||||
|
||||
export const serialize = (state: EditorState) => {
|
||||
let text = markdownSerializer.serialize(state.doc)
|
||||
|
@ -12,14 +12,30 @@ export const serialize = (state: EditorState) => {
|
|||
return text
|
||||
}
|
||||
|
||||
|
||||
function findAlignment(cell: Node): string | null {
|
||||
const alignment = cell.attrs.style as string
|
||||
if (!alignment) {
|
||||
return null
|
||||
}
|
||||
|
||||
const match = alignment.match(/text-align: ?(left|right|center)/)
|
||||
if (match && match[1]) {
|
||||
return match[1]
|
||||
}
|
||||
|
||||
return null
|
||||
}
|
||||
|
||||
export const markdownSerializer = new MarkdownSerializer(
|
||||
{
|
||||
...defaultMarkdownSerializer.nodes,
|
||||
image(state, node) {
|
||||
image(state: MarkdownSerializerState, node: Node) {
|
||||
const alt = state.esc(node.attrs.alt || '')
|
||||
const src = node.attrs.path ?? node.attrs.src
|
||||
const title = node.attrs.title ? state.quote(node.attrs.title) : undefined
|
||||
const title = node.attrs.title ? `"${node.attrs.title}"` : undefined
|
||||
state.write(`\n`)
|
||||
/*  */
|
||||
},
|
||||
code_block(state, node) {
|
||||
const src = node.attrs.params.src
|
||||
|
@ -88,20 +104,6 @@ export const markdownSerializer = new MarkdownSerializer(
|
|||
return findAlignment(cell)
|
||||
}
|
||||
|
||||
function findAlignment(cell: Node): string | null {
|
||||
const alignment = cell.attrs.style as string
|
||||
if (!alignment) {
|
||||
return null
|
||||
}
|
||||
|
||||
const match = alignment.match(/text-align:[ ]?(left|right|center)/)
|
||||
if (match && match[1]) {
|
||||
return match[1]
|
||||
}
|
||||
|
||||
return null
|
||||
}
|
||||
|
||||
node.forEach((table_child) => {
|
||||
if (table_child.type.name === 'table_head') serializeTableHead(table_child)
|
||||
if (table_child.type.name === 'table_body') serializeTableBody(table_child)
|
||||
|
@ -122,9 +124,10 @@ export const markdownSerializer = new MarkdownSerializer(
|
|||
}
|
||||
)
|
||||
|
||||
function listIsTight(tokens: any, i: number) {
|
||||
function listIsTight(tokens: any, idx: number) {
|
||||
let i = idx
|
||||
while (++i < tokens.length) {
|
||||
if (tokens[i].type != 'list_item_open') return tokens[i].hidden
|
||||
if (tokens[i].type !== 'list_item_open') return tokens[i].hidden
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import { Plugin, EditorState } from 'prosemirror-state'
|
||||
import { Node, Schema, SchemaSpec } from 'prosemirror-model'
|
||||
import { Decoration, EditorView, NodeView } from 'prosemirror-view'
|
||||
import type { Node, Schema, SchemaSpec } from 'prosemirror-model'
|
||||
import type { Decoration, EditorView, NodeView } from 'prosemirror-view'
|
||||
|
||||
export interface ProseMirrorExtension {
|
||||
schema?: (prev: SchemaSpec) => SchemaSpec;
|
||||
|
@ -21,7 +21,7 @@ export const isInitialized = (state: any) => state !== undefined && state instan
|
|||
|
||||
export const isEmpty = (state: any) =>
|
||||
!isInitialized(state) ||
|
||||
(state.doc.childCount == 1 &&
|
||||
(state.doc.childCount === 1 &&
|
||||
!state.doc.firstChild.type.spec.code &&
|
||||
state.doc.firstChild.isTextblock &&
|
||||
state.doc.firstChild.content.size == 0)
|
||||
state.doc.firstChild.content.size === 0)
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import { EditorState } from 'prosemirror-state'
|
||||
import type { EditorState } from 'prosemirror-state'
|
||||
import { serialize } from './markdown'
|
||||
|
||||
export const copy = async (text: string): Promise<void> => {
|
||||
|
|
|
@ -63,6 +63,7 @@ export interface Collab {
|
|||
export type LoadingType = 'loading' | 'initialized'
|
||||
|
||||
export interface State {
|
||||
isMac?: boolean
|
||||
text?: ProseMirrorState;
|
||||
editorView?: EditorView;
|
||||
extensions?: ProseMirrorExtension[];
|
||||
|
|
|
@ -2,8 +2,8 @@ import { ClientOptions, dedupExchange, fetchExchange, createClient, Exchange } f
|
|||
import { devtoolsExchange } from '@urql/devtools'
|
||||
import { isDev } from '../utils/config'
|
||||
|
||||
// export const baseUrl = 'https://newapi.discours.io'
|
||||
export const baseUrl = 'http://localhost:8000'
|
||||
export const baseUrl = 'https://newapi.discours.io'
|
||||
// export const baseUrl = 'http://localhost:8000'
|
||||
|
||||
const exchanges: Exchange[] = [dedupExchange, fetchExchange]
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user