docs: support document internationalization #222

* docs: add English docuemnt #213

* docs: support document internationalization #222

---------

Co-authored-by: Hufe921 <huangyunfeihufe@hotmail.com>
This commit is contained in:
汥坳赵
2023-07-27 21:22:26 +08:00
committed by GitHub
co-authored by Hufe921
parent fc356c7eb6
commit 9f8016884f
33 changed files with 2842 additions and 430 deletions
+94 -21
View File
@@ -5,20 +5,24 @@ export default defineConfig({
title: 'canvas-editor',
description: 'rich text editor by canvas/svg',
themeConfig: {
i18nRouting: false,
algolia: {
appId: 'RWSVW6F3S5',
apiKey: 'e462fffb4d2e9ab4a78c29e0b457ab33',
indexName: 'hufe',
indexName: 'hufe'
},
logo: '/favicon.png',
nav: [{
text: '指南',
link: '/guide/start',
activeMatch: '/guide/'
}, {
text: 'Demo',
link: 'https://hufe.club/canvas-editor'
}],
nav: [
{
text: '指南',
link: '/guide/start',
activeMatch: '/guide/'
},
{
text: 'Demo',
link: 'https://hufe.club/canvas-editor'
}
],
sidebar: [
{
text: '开始',
@@ -47,7 +51,7 @@ export default defineConfig({
text: '快捷键',
items: [
{ text: '内部快捷键', link: '/guide/shortcut-internal' },
{ text: '自定义快捷键', link: '/guide/shortcut-custom' },
{ text: '自定义快捷键', link: '/guide/shortcut-custom' }
]
},
{
@@ -59,24 +63,93 @@ export default defineConfig({
},
{
text: 'API',
items: [
{ text: '全局API', link: '/guide/api' }
]
items: [{ text: '全局API', link: '/guide/api' }]
},
{
text: '插件',
items: [
{ text: '自定义插件', link: '/guide/plugin' }
]
items: [{ text: '自定义插件', link: '/guide/plugin' }]
}
],
socialLinks: [
{
icon: 'github',
link: 'https://github.com/Hufe921/canvas-editor'
}
],
socialLinks: [{
icon: 'github',
link: 'https://github.com/Hufe921/canvas-editor'
}],
footer: {
message: 'Released under the MIT License.',
copyright: 'Copyright © 2021-present Hufe'
}
},
locales: {
root: {
label: '简体中文',
lang: 'zh-CN'
},
en: {
label: 'English',
lang: 'en',
link: '/en/',
themeConfig: {
nav: [
{
text: 'Guide',
link: '/en/guide/start',
activeMatch: '/en/guide/'
},
{
text: 'Demo',
link: 'https://hufe.club/canvas-editor'
}
],
sidebar: [
{
text: 'Start',
items: [
{ text: 'start', link: '/en/guide/start' },
{ text: 'option', link: '/en/guide/option' },
{ text: 'i18n', link: '/en/guide/i18n' },
{ text: 'schema', link: '/en/guide/schema' }
]
},
{
text: 'Command',
items: [
{ text: 'execute', link: '/en/guide/command-execute' },
{ text: 'get', link: '/en/guide/command-get' }
]
},
{
text: 'Listener',
items: [
{ text: 'listener', link: '/en/guide/listener' },
{ text: 'eventbus', link: '/en/guide/eventbus' }
]
},
{
text: 'Shortcut',
items: [
{ text: 'internal', link: '/en/guide/shortcut-internal' },
{ text: 'custom', link: '/en/guide/shortcut-custom' }
]
},
{
text: 'Contextmenu',
items: [
{ text: 'internal', link: '/en/guide/contextmenu-internal' },
{ text: 'custom', link: '/en/guide/contextmenu-custom' }
]
},
{
text: 'Api',
items: [{ text: 'api', link: '/en/guide/api' }]
},
{
text: 'Plugin',
items: [{ text: 'plugin', link: '/en/guide/plugin' }]
}
]
}
}
}
})
})
+24
View File
@@ -0,0 +1,24 @@
# Global API
## How to Use
```javascript
import Editor from "@hufe921/canvas-editor"
const instance = new Editor(container, <IElement[]>data, options)
instance.apiName()
```
## destroy
Feature: Destroy the editor
Usage
```javascript
instance.destroy()
```
::: warning
Only destroy the editor DOM and related events, menu bars, toolbars, external variables, etc. need to be handled by themselves.
:::
+745
View File
@@ -0,0 +1,745 @@
# Execute Command
## How to Use
```javascript
import Editor from "@hufe921/canvas-editor"
const instance = new Editor(container, <IElement[]>data, options)
instance.command.commandName()
```
## executeMode
Feature: Switch editor mode (Edit, Clean, Read only)
Usage:
```javascript
instance.command.executeMode(editorMode: EditorMode)
```
## executeCut
Feature: Cut
Usage:
```javascript
instance.command.executeCut()
```
## executeCopy
Feature: Copy
Usage:
```javascript
instance.command.executeCopy()
```
## executePaste
Feature: Paste
Usage:
```javascript
instance.command.executePaste()
```
## executeSelectAll
Feature: Select all
Usage:
```javascript
instance.command.executeSelectAll()
```
## executeBackspace
Feature: Forward delete
Usage:
```javascript
instance.command.executeBackspace()
```
## executeSetRange
Feature: Set selection
Usage:
```javascript
instance.command.executeSetRange(startIndex: number , endIndex: number)
```
## executeUndo
Feature: Undo
Usage:
```javascript
instance.command.executeUndo()
```
## executeRedo
Feature: Redo
Usage:
```javascript
instance.command.executeRedo()
```
## executePainter
Feature: Format Brush - Copy style
Usage:
```javascript
instance.command.executePainter()
```
## executeApplyPainterStyle
Feature: Format brush - Apply style
Usage:
```javascript
instance.command.executeApplyPainterStyle()
```
## executeFormat
Feature: Clear format
Usage:
```javascript
instance.command.executeFormat()
```
## executeFont
Feature: Set font
Usage:
```javascript
instance.command.executeFont(font: string)
```
## executeSize
Feature: Set font size
Usage:
```javascript
instance.command.executeSize(size: number)
```
## executeSizeAdd
Feature: Increase the font size
Usage:
```javascript
instance.command.executeSizeAdd()
```
## executeSizeMinus
Feature: Reduce the font size
Usage:
```javascript
instance.command.executeSizeMinus()
```
## executeBold
Feature: Bold
Usage:
```javascript
instance.command.executeBold()
```
## executeItalic
Feature: Italic
Usage:
```javascript
instance.command.executeItalic()
```
## executeUnderline
Feature: Underline
Usage:
```javascript
instance.command.executeUnderline()
```
## executeStrikeout
Feature: Strikeout
Usage:
```javascript
instance.command.executeStrikeout()
```
## executeSuperscript
Feature: Superscript
Usage:
```javascript
instance.command.executeSuperscript()
```
## executeSubscript
Feature: Subscript
Usage:
```javascript
instance.command.executeSubscript()
```
## executeColor
Feature: Font color
Usage:
```javascript
instance.command.executeColor()
```
## executeHighlight
Feature: Highlight
Usage:
```javascript
instance.command.executeHighlight()
```
## executeTitle
Feature: Set title
Usage:
```javascript
instance.command.executeTitle(TitleLevel | null)
```
## executeList
Feature: Set list
Usage:
```javascript
instance.command.executeList(listType: ListType | null, listStyle?: ListStyle)
```
## executeRowFlex
Feature: Line alignment
Usage:
```javascript
instance.command.executeRowFlex(rowFlex: RowFlex)
```
## executeRowMargin
Feature: Line spacing
Usage:
```javascript
instance.command.executeRowMargin(rowMargin: number)
```
## executeInsertTable
Feature: Insert table
Usage:
```javascript
instance.command.executeInsertTable(row: number, col: number)
```
## executeInsertTableTopRow
Feature: Insert a row up
Usage:
```javascript
instance.command.executeInsertTableTopRow()
```
## executeInsertTableBottomRow
Feature: Insert a row down
Usage:
```javascript
instance.command.executeInsertTableBottomRow()
```
## executeInsertTableLeftCol
Feature: Insert a column to the left
Usage:
```javascript
instance.command.executeInsertTableLeftCol()
```
## executeInsertTableRightCol
Feature: Insert a column to the right
Usage:
```javascript
instance.command.executeInsertTableRightCol()
```
## executeDeleteTableRow
Feature: Deletes the current row
Usage:
```javascript
instance.command.executeDeleteTableRow()
```
## executeDeleteTableCol
Feature: Delete the current column
Usage:
```javascript
instance.command.executeDeleteTableCol()
```
## executeDeleteTable
Feature: Delete the table
Usage:
```javascript
instance.command.executeDeleteTable()
```
## executeMergeTableCell
Feature: Merge tables
Usage:
```javascript
instance.command.executeMergeTableCell()
```
## executeCancelMergeTableCell
Feature: Cancel the merge form
Usage:
```javascript
instance.command.executeCancelMergeTableCell()
```
## executeTableTdVerticalAlign
Feature: Table cell vertical alignment
Usage:
```javascript
instance.command.executeTableTdVerticalAlign(payload: VerticalAlign)
```
## executeTableBorderType
Feature: Table border type
Usage:
```javascript
instance.command.executeTableBorderType(payload: TableBorder)
```
## executeTableTdBackgroundColor
Feature: Table cell background color
Usage:
```javascript
instance.command.executeTableTdBackgroundColor(payload: string)
```
## executeImage
Feature: Insert a picture
Usage:
```javascript
instance.command.executeImage({
width: number;
height: number;
value: string;
})
```
## executeHyperlink
Feature: Insert a link
Usage:
```javascript
instance.command.executeHyperlink({
type: ElementType.HYPERLINK,
value: string,
url: string,
valueList: IElement[]
})
```
## executeDeleteHyperlink
Feature: Delete the link
Usage:
```javascript
instance.command.executeDeleteHyperlink()
```
## executeCancelHyperlink
Feature: Unlink
Usage:
```javascript
instance.command.executeCancelHyperlink()
```
## executeEditHyperlink
Feature: Edit the link
Usage:
```javascript
instance.command.executeEditHyperlink(newUrl: string)
```
## executeSeparator
Feature: Insert a dividing line
Usage:
```javascript
instance.command.executeSeparator(dashArray: number[])
```
## executePageBreak
Feature: Page breaks
Usage:
```javascript
instance.command.executePageBreak()
```
## executeAddWatermark
Feature: Add a watermark
Usage:
```javascript
instance.command.executeAddWatermark({
data: string;
color?: string;
opacity?: number;
size?: number;
font?: string;
})
```
## executeDeleteWatermark
Feature: Remove the watermark
Usage:
```javascript
instance.command.executeDeleteWatermark()
```
## executeSearch
Feature: 搜索
Usage:
```javascript
instance.command.executeSearch(keyword: string)
```
## executeSearchNavigatePre
Feature: Search Navigation - Previous
Usage:
```javascript
instance.command.executeSearchNavigatePre()
```
## executeSearchNavigateNext
Feature: Search Navigation - Next
Usage:
```javascript
instance.command.executeSearchNavigateNext()
```
## executeReplace
Feature: Search for replacement
Usage:
```javascript
instance.command.executeReplace(newWord: string)
```
## executePrint
Feature: Print
Usage:
```javascript
instance.command.executePrint()
```
## executeReplaceImageElement
Feature: Replace the picture
Usage:
```javascript
instance.command.executeReplaceImageElement(newUrl: string)
```
## executeSaveAsImageElement
Feature: Save as picture
Usage:
```javascript
instance.command.executeSaveAsImageElement()
```
## executeChangeImageDisplay
Feature: Change how image rows are displayed
Usage:
```javascript
instance.command.executeSaveAsImageElement(element: IElement, display: ImageDisplay)
```
## executePageMode
Feature: Page mode
Usage:
```javascript
instance.command.executePageMode(pageMode: PageMode)
```
## executePageScaleRecovery
Feature: Restore the original zoom factor of the page
Usage:
```javascript
instance.command.executePageScaleRecovery()
```
## executePageScaleMinus
Feature: Page zoom out
Usage:
```javascript
instance.command.executePageScaleMinus()
```
## executePageScaleAdd
Feature: Page zoom in
Usage:
```javascript
instance.command.executePageScaleAdd()
```
## executePaperSize
Feature: Set the paper size
Usage:
```javascript
instance.command.executePaperSize(width: number, height: number)
```
## executePaperDirection
Feature: Set the paper orientation
Usage:
```javascript
instance.command.executePaperDirection(paperDirection: PaperDirection)
```
## executeSetPaperMargin
Feature: Set the paper margins
Usage:
```javascript
instance.command.executeSetPaperMargin([top: number, right: number, bottom: number, left: number])
```
## executeInsertElementList
Feature: Insert an element
Usage:
```javascript
instance.command.executeInsertElementList(elementList: IElement[])
```
## executeAppendElementList
Feature: Append elements
Usage:
```javascript
instance.command.executeAppendElementList(elementList: IElement[], options?: IAppendElementListOption)
```
## executeSetValue
Feature: Set the editor data
Usage:
```javascript
instance.command.executeSetValue(payload: Partial<IEditorData>)
```
## executeRemoveControl
Feature: Delete the control
Usage:
```javascript
instance.command.executeRemoveControl()
```
## executeSetLocale
Feature: Set local language
Usage:
```javascript
instance.command.executeSetLocale(locale: string)
```
## executeLocationCatalog
Feature: Locate directory location
Usage:
```javascript
instance.command.executeLocationCatalog(titleId: string)
```
## executeWordTool
Feature: Word Tool (Delete blank lines and leading Spaces)
Usage:
```javascript
instance.command.executeWordTool()
```
+116
View File
@@ -0,0 +1,116 @@
# Get Data Command
## How to Use
```javascript
import Editor from "@hufe921/canvas-editor"
const instance = new Editor(container, <IElement[]>data, options)
const value = instance.command.commandName()
```
## getValue
Feature: Get the current document value
Usage:
```javascript
const {
version: string;
width: number;
height: number;
margins: IMargin;
header?: IHeader;
watermark?: IWatermark;
data: IEditorData;
} = instance.command.getValue(options?: IGetValueOption)
```
## getImage
Feature: Gets the base64 string of the current page image
Usage:
```javascript
const base64StringList = await instance.command.getImage(pixelRatio?: number)
```
## getWordCount
Feature: Get document word count
Usage:
```javascript
const wordCount = await instance.command.getWordCount()
```
## getRangeText
Feature: Get selection text
Usage:
```javascript
const rangeText = instance.command.getRangeText()
```
## getRangeContext
Feature: Get selection context
Usage:
```javascript
const rangeContext = instance.command.getRangeContext()
```
## getPaperMargin
Feature: Gets the margins
Usage:
```javascript
const [top: number, right: number, bottom: number, left: number] =
instance.command.getPaperMargin()
```
## getSearchNavigateInfo
Feature: Get search navigation information
Usage:
```javascript
const {
index: number;
count: number;
} = instance.command.getSearchNavigateInfo()
```
## getCatalog
Feature: Get directory
Usage:
```javascript
const catalog = await instance.command.getCatalog()
```
## getHTML
Feature: Get HTML
Usage:
```javascript
const {
header: string
main: string
footer: string
} = await instance.command.getHTML()
```
+20
View File
@@ -0,0 +1,20 @@
# Customize Contextmenu
## How to Use
```javascript
import Editor from "@hufe921/canvas-editor"
const instance = new Editor(container, <IElement[]>data, options)
instance.register.contextMenuList([
{
isDivider?: boolean;
icon?: string;
name?: string; // Use %s for selection text. Example: Search: %s
shortCut?: string;
when?: (payload: IContextMenuContext) => boolean;
callback?: (command: Command, context: IContextMenuContext) => any;
childMenus?: IRegisterContextMenu[];
}
])
```
+49
View File
@@ -0,0 +1,49 @@
# Internal Contextmenu
## Global
- Cut
- Copy
- Paste
- Select all
- Print
## Hyperlinks
- Delete the link
- Unlink
- Edit the link
## Image
- Change the picture
- Save as picture
- Text wrapping
- Embedded type
- Upper and lower surrounding
## Table
- Table borders
- All borders
- Borderless
- Outer border
- Vertical alignment
- Top alignment
- Center vertically
- Bottom end alignment
- Insert rows and columns
- Insert 1 row above
- Insert 1 row below
- Insert 1 column on the left
- Insert 1 column on the right side
- Delete rows and columns
- Delete 1 row
- Remove 1 column
- Delete the entire table
- Merge cells
- Cancel the merge
## control
- Delete the control
+121
View File
@@ -0,0 +1,121 @@
# Event Listening(eventBus)
## How to Use
```javascript
import Editor from "@hufe921/canvas-editor"
const instance = new Editor(container, <IElement[]>data, options)
// register
instance.eventBus.on<K keyof EventMap>(
eventName: K,
callback: EventMap[K]
)
// remove
instance.eventBus.off<K keyof EventMap>(
eventName: K,
callback: EventMap[K]
)
```
## rangeStyleChange
Feature: The selection style changes
Usage:
```javascript
instance.eventBus.on('rangeStyleChange', (payload: IRangeStyle) => void)
```
## visiblePageNoListChange
Feature: The visible page changes
Usage:
```javascript
instance.eventBus.on('visiblePageNoListChange', (payload: number[]) => void)
```
## intersectionPageNoChange
Feature: The current page changes
Usage:
```javascript
instance.eventBus.on('intersectionPageNoChange', (payload: number) => void)
```
## pageSizeChange
Feature: The current number of pages has changed
Usage:
```javascript
instance.eventBus.on('pageSizeChange', (payload: number) => void)
```
## pageScaleChange
Feature: The current page scaling has changed
Usage:
```javascript
instance.eventBus.on('pageScaleChange', (payload: number) => void)
```
## contentChange
Feature: The current content has changed
Usage:
```javascript
instance.eventBus.on('contentChange', () => void)
```
## controlChange
Feature: The control where the current cursor is located changes
Usage:
```javascript
instance.eventBus.on('controlChange', (payload: IControl | null) => void)
```
## pageModeChange
Feature: The page mode changes
Usage:
```javascript
instance.eventBus.on('pageModeChange', (payload: PageMode) => void)
```
## saved
Feature: Document saved
Usage:
```javascript
instance.eventBus.on('saved', (payload: IEditorResult) => void)
```
## zoneChange
Feature: The zone changes
Usage:
```javascript
instance.eventBus.on('zoneChange', (payload: EditorZone) => void)
```
+93
View File
@@ -0,0 +1,93 @@
# i18n
## How to Use
```javascript
import Editor from "@hufe921/canvas-editor"
const instance = new Editor(container, <IElement[]>data, options)
// register
instance.register.langMap(locale: string, lang: ILang)
// set locale
instance.command.executeSetLocale(locale)
```
## ILang
```typescript
interface ILang {
contextmenu: {
global: {
cut: string
copy: string
paste: string
selectAll: string
print: string
}
control: {
delete: string
}
hyperlink: {
delete: string
cancel: string
edit: string
}
image: {
change: string
saveAs: string
textWrap: string
textWrapType: {
embed: string
upDown: string
}
}
table: {
insertRowCol: string
insertTopRow: string
insertBottomRow: string
insertLeftCol: string
insertRightCol: string
deleteRowCol: string
deleteRow: string
deleteCol: string
deleteTable: string
mergeCell: string
mergeCancelCell: string
verticalAlign: string
verticalAlignTop: string
verticalAlignMiddle: string
verticalAlignBottom: string
border: string
borderAll: string
borderEmpty: string
borderExternal: string
}
}
datePicker: {
now: string
confirm: string
return: string
timeSelect: string
weeks: {
sun: string
mon: string
tue: string
wed: string
thu: string
fri: string
sat: string
}
year: string
month: string
hour: string
minute: string
second: string
}
frame: {
header: string
footer: string
}
}
```
+112
View File
@@ -0,0 +1,112 @@
# Event Listening(listener)
> The listener can respond to only one method. eventBus is recommended for event listening
## How to Use
```javascript
import Editor from "@hufe921/canvas-editor"
const instance = new Editor(container, <IElement[]>data, options)
instance.listener.eventName = ()=>{}
```
## rangeStyleChange
Feature: The selection style changes
Usage:
```javascript
instance.listener.rangeStyleChange = (payload: IRangeStyle) => {}
```
## visiblePageNoListChange
Feature: The visible page changes
Usage:
```javascript
instance.listener.visiblePageNoListChange = (payload: number[]) => {}
```
## intersectionPageNoChange
Feature: The current page changes
Usage:
```javascript
instance.listener.intersectionPageNoChange = (payload: number) => {}
```
## pageSizeChange
Feature: The current page size has changed
Usage:
```javascript
instance.listener.pageSizeChange = (payload: number) => {}
```
## pageScaleChange
Feature: The current page scaling has changed
Usage:
```javascript
instance.listener.pageScaleChange = (payload: number) => {}
```
## contentChange
Feature: The current content has changed
Usage:
```javascript
instance.listener.contentChange = () => {}
```
## controlChange
Feature: The control where the current cursor is located changes
Usage:
```javascript
instance.listener.controlChange = (payload: IControl | null) => {}
```
## pageModeChange
Feature: The page mode changes
Usage:
```javascript
instance.listener.pageModeChange = (payload: PageMode) => {}
```
## saved
Feature: Document saved
Usage:
```javascript
instance.listener.saved = (payload: IEditorResult) => {}
```
## zoneChange
Feature: 区域发生改变
Usage:
```javascript
instance.listener.zoneChange = (payload: EditorZone) => {}
```
+125
View File
@@ -0,0 +1,125 @@
# Configuration
## How to Use ?
```javascript
import Editor from "@hufe921/canvas-editor"
new Editor(container, IEditorData | IElement[], {
// option
})
```
## Complete Configuration
```typescript
interface IEditorOption {
mode?: EditorMode // Editor mode: Edit, Clean (Visual aids are not displayed.) For example: page break), read-only. default: Edit
defaultType?: string // Default element type. default: TEXT
defaultFont?: string // Default font. default: Yahei
defaultSize?: number // Default font size. default: 16
minSize?: number // Min font size。default: 5
maxSize?: number // Max font size。default: 72
defaultBasicRowMarginHeight?: number // Default line height。default: 8
defaultRowMargin?: number // Default line spacing. default: 1
defaultTabWidth?: number // Default tab width. default: 32
width?: number // Paper width. default: 794
height?: number // Paper height. default: 1123
scale?: number // scaling. default: 1
pageGap?: number // Paper spacing. default: 20
underlineColor?: string // Underline color. default: #000000
strikeoutColor?: string // Strikeout color. default: #FF0000
rangeColor?: string // Range color. default: #AECBFA
rangeAlpha?: number // Range transparency. default: 0.6
rangeMinWidth?: number // Range min width. default: 5
searchMatchColor?: string // Search for highlight color. default: #FFFF00
searchNavigateMatchColor?: string // Search navigation highlighted color.default: #AAD280
searchMatchAlpha?: number // Search for highlight transparency. default: 0.6
highlightAlpha?: number // Highlight element transparency. default: 0.6
resizerColor?: string // Image sizer color. default: #4182D9
resizerSize?: number // Image sizer size. default: 5
marginIndicatorSize?: number // The margin indicator length. default: 35
marginIndicatorColor?: string // The margin indicator color. default: #BABABA
margins?: IMargin // Page margins. default: [100, 120, 100, 120]
pageMode?: PageMode // Paper mode: Linkage, Pagination. default: Pagination
tdPadding?: number // Cell padding. default: 5
defaultTrMinHeight?: number // Default table row minimum height. default: 40
defaultColMinWidth?: number // Default minimum width for table columns (applied if the overall width is sufficient, otherwise scaled down). default: 40
defaultHyperlinkColor?: string // Default hyperlink color. default: #0000FF
header?: IHeader // Header information.{top?:number; maxHeightRadio?:MaxHeightRatio;}
footer?: IFooter // Footer information. {bottom?:number; maxHeightRadio?:MaxHeightRatio;}
pageNumber?: IPageNumber // Page number information. {bottom:number; size:number; font:string; color:string; rowFlex:RowFlex; format:string; numberType:NumberType;}
paperDirection?: PaperDirection // Paper orientation: portrait, landscape
inactiveAlpha?: number // When the body content is out of focus, transparency. default: 0.6
historyMaxRecordCount: number // History (undo redo) maximum number of records. default: 100
printPixelRatio: number // Print the pixel ratio (larger values are clearer, but larger sizes). default: 3
wordBreak: WordBreak // Word and punctuation breaks: No punctuation in the first line of the BREAK_WORD &The word is not split, and the line is folded after BREAK_ALL full according to the width of the character. default: BREAK_WORD
watermark?: IWatermark // Watermark{data:string; color?:string; opacity?:number; size?:number; font?:string;}
control?: IControlOption // Control {placeholderColor?:string; bracketColor?:string; prefix?:string; postfix?:string;}
checkbox?: ICheckboxOption // Checkbox {width?:number; height?:number; gap?:number; lineWidth?:number; fillStyle?:string; fontStyle?: string;}
cursor?: ICursorOption // Cursor style. {width?: number; color?: string; dragWidth?: number; dragColor?: string;}
title?: ITitleOption // Title configuration.{ defaultFirstSize?: number; defaultSecondSize?: number; defaultThirdSize?: number defaultFourthSize?: number; defaultFifthSize?: number; defaultSixthSize?: number;}
placeholder?: IPlaceholder // Placeholder text
}
```
## Header Configuration
```typescript
interface IHeader {
top?: number // Size from the top of the page.default: 30
maxHeightRadio?: MaxHeightRatio // Occupies the maximum height ratio of the page.default: HALF
disabled?: boolean // Whether to disable
}
```
## Footer Configuration
```typescript
interface IFooter {
bottom?: number // The size from the bottom of the page.default: 30
maxHeightRadio?: MaxHeightRatio // Occupies the maximum height ratio of the page.default: HALF
disabled?: boolean // Whether to disable
}
```
## Page Number Configuration
```typescript
interface IPageNumber {
bottom?: number // The size from the bottom of the page.default: 60
size?: number // font size.default: 12
font?: string // font.default: Yahei
color?: string // font color.default: #000000
rowFlex?: RowFlex // Line alignment.default: CENTER
format?: string // Page number format.default: {pageNo}。example{pageNo}/{pageCount}
numberType?: NumberType // The numeric type. default: ARABIC
disabled?: boolean // Whether to disable
startPageNo?: number // Start page number.default: 1
fromPageNo?: number // Page numbers appear from page number.default: 0
}
```
## Watermark Configuration
```typescript
interface IWatermark {
data: string // text.
color?: string // color.default: #AEB5C0
opacity?: number // transparency.default: 0.3
size?: number // font size.default: 200
font?: string // font.default: Yahei
}
```
## Placeholder Text Configuration
```typescript
interface IPlaceholder {
data: string // text.
color?: string // color.default: #DCDFE6
opacity?: number // transparency.default: 1
size?: number // font size.default: 16
font?: string // font.default: Yahei
}
```
+23
View File
@@ -0,0 +1,23 @@
# Custom Plugin
::: warning
Currently, only methods can be added and modified to the editor instance, and more functions will be extended in the future
:::
## Write a Plugin
```javascript
export function myPlugin(editor: Editor, options?: Option) {
// 1. updatesee moresrc/plugins/copy
editor.command.updateFunction = () => {}
// 2. addsee moresrc/plugins/markdown
editor.command.addFunction = () => {}
}
```
## Use Plugin
```javascript
instance.add(myPlugin, options?: Option)
```
+132
View File
@@ -0,0 +1,132 @@
# Data Structure
```typescript
interface IElement {
// basic
id?: string;
type?: {
TEXT = 'text',
IMAGE = 'image',
TABLE = 'table',
HYPERLINK = 'hyperlink',
SUPERSCRIPT = 'superscript',
SUBSCRIPT = 'subscript',
SEPARATOR = 'separator',
PAGE_BREAK = 'pageBreak',
CONTROL = 'control',
CHECKBOX = 'checkbox',
LATEX = 'latex',
TAB = 'tab',
DATE = 'date',
BLOCK = 'block'
};
value: string;
valueList?: IElement[]; // Use of composite elements (hyperlinks, titles, lists, and so on).
// style
font?: string;
size?: number;
width?: number;
height?: number;
bold?: boolean;
color?: string;
highlight?: string;
italic?: boolean;
underline?: boolean;
strikeout?: boolean;
rowFlex?: {
LEFT = 'left',
CENTER = 'center',
RIGHT = 'right',
ALIGNMENT = 'alignment'
};
rowMargin?: number;
letterSpacing?: number;
// table
colgroup?: {
width: number;
}[];
trList?: {
height: number;
tdList: {
colspan: number;
rowspan: number;
verticalAlign?: VerticalAlign;
backgroundColor?: string;
value: IElement[];
}[];
}[];
borderType?: TableBorder;
// Hyperlinks
url?: string;
// Superscript and subscript
actualSize?: number;
// Dividing line
dashArray?: number[];
// control
control?: {
type: {
TEXT = 'text',
SELECT = 'select',
CHECKBOX = 'checkbox'
};
value: IElement[] | null;
placeholder?: string;
conceptId?: string;
prefix?: string;
postfix?: string;
code: string | null;
min?: number;
max?: number;
valueSets: {
value: string;
code: string;
}[];
checkbox?: {
value: boolean | null;
code?: string;
disabled?: boolean;
};
};
controlComponent?: {
PREFIX = 'prefix',
POSTFIX = 'postfix',
PLACEHOLDER = 'placeholder',
VALUE = 'value',
CHECKBOX = 'checkbox'
};
// checkbox
checkbox?: {
value: boolean | null;
code?: string;
disabled?: boolean;
};
// LaTeX
laTexSVG?: string;
// date
dateFormat?: string;
// picture
imgDisplay?: {
INLINE = 'inline',
BLOCK = 'block'
}
// block
block?: {
type: {
IFRAME = 'iframe',
VIDEO = 'video'
};
iframeBlock?: {
src: string;
};
videoBlock?: {
src: string;
};
};
// title
level?: TitleLevel;
// list
listType?: ListType;
listStyle?: ListStyle;
listWrap?: boolean;
}
```
+21
View File
@@ -0,0 +1,21 @@
# Custom shortcut keys
## How to use?
```javascript
import Editor from "@hufe921/canvas-editor"
const instance = new Editor(container, <IElement[]>data, options)
instance.register.shortcutList([
{
key: KeyMap;
ctrl?: boolean;
meta?: boolean;
mod?: boolean; // windows:ctrl || mac:command
shift?: boolean;
alt?: boolean;
isGlobal?: boolean;
callback: (command: Command) => any;
}
])
```
+165
View File
@@ -0,0 +1,165 @@
# Internal shortcut keys
## Backspace
Feature: Forward delete
## Delete
Feature: Backward delete
## Enter
Feature: Line break
## Shift + Enter
Feature: Line breaks within the list
## ←
Feature: Move to the left
## Shift + ←
Feature: Zoom the selection to the left
## →
Feature: Move to the right
## Shift + →
Feature: Zoom the selection to the right
## ↑
Feature: Move up
## Shift + ↑
Feature: Zoom up the selection
## ↓
Feature: Move down
## Shift + ↓
Feature: Zoom down the selection
## Esc
Feature: Exit format brush
## Tab
Feature: Increase indent
## Ctrl/Cmd + Z
Feature: Undo
## Ctrl/Cmd + Y
Feature: Redo
## Ctrl/Cmd + C
Feature: Copy
## Ctrl/Cmd + X
Feature: Cut
## Ctrl/Cmd + A
Feature: Select all
## Ctrl/Cmd + S
Feature: Save
## Ctrl/Cmd + {
Feature: Increase the font
## Ctrl/Cmd + }
Feature: Reduce the font
## Ctrl/Cmd + B
Feature: Bold
## Ctrl/Cmd + I
Feature: Italic
## Ctrl/Cmd + U
Feature: Underline
## Ctrl/Cmd + L
Feature: Line left
## Ctrl/Cmd + E
Feature: Line center
## Ctrl/Cmd + R
Feature: Line right
## Ctrl/Cmd + J
Feature: Both sides are aligned
## Ctrl + Shift + X
Feature: Strikethrough
## Ctrl/Cmd + Shift + >
Feature: Superscript
## Ctrl/Cmd + Shift + <
Feature: Subscript
## Ctrl + Alt/Option + 0
Feature: Main body
## Ctrl + Alt/Option + 1
Feature: Header1
## Ctrl + Alt/Option + 2
Feature: Header2
## Ctrl + Alt/Option + 3
Feature: Header3
## Ctrl + Alt/Option + 4
Feature: Header4
## Ctrl + Alt/Option + 5
Feature: Header5
## Ctrl + Alt/Option + 6
Feature: Header6
## Ctrl/Cmd + Shift + I
Feature: Unordered list
## Ctrl/Cmd + Shift + U
Feature: Ordered list
+95
View File
@@ -0,0 +1,95 @@
# Getting Started
> WYSIWYG rich text editor.
Benefit from the complete self-implementation of cursor and text layout. The underlying rendering can also be rendered by svg, See code[feature/svg](https://github.com/Hufe921/canvas-editor/tree/feature/svg); Or complete pdf drawing with pdfjs,See code[feature/pdf](https://github.com/Hufe921/canvas-editor/tree/feature/pdf).
::: warning
The official only provides the editor core layer npm package, the menu bar or other external tools can refer to the document extension, or directly refer the implementation of [official](https://github.com/Hufe921/canvas-editor), See details [demo](https://hufe.club/canvas-editor/).
:::
## Features
- Rich text operations (Undo, Redo, Font, Size, Bold, Italic, Superscript, Alignment, Title, List, ...)
- Insert elements (Table, Image, Link, Code Block, Page Break, Math Formula, Date Picker, content Block, ...)
- Print (Based on canvas to picture, pdf drawing)
- Controls (Radio, Text, Checkbox)
- Right-click menu (Internal, Custom)
- Shortcut keys (Internal, Custom)
- Text, Element, Control drag and drop
- Header, Footer, Page Number
- Page Margin
- Watermark
- Pagination
## TODO
- Improve title and list functions
- Computational performance
- Control rule
- Table paging
- Out of the box version for vue, react and other frameworks
## Step. 1: Download NPM Package
```sh
npm i @hufe921/canvas-editor --save
```
## Step. 2: Prepare Container
```html
<div class="canvas-editor"></div>
```
## Step. 3: Instantiate Editor
- Examples that only the body content is included
```javascript
import Editor from '@hufe921/canvas-editor'
new Editor(
document.querySelector('.canvas-editor'),
[
{
value: 'Hello World'
}
],
{}
)
```
- Examples that contain body, header, footer content
```javascript
import Editor from '@hufe921/canvas-editor'
new Editor(
document.querySelector('.canvas-editor'),
{
header: [
{
value: 'Header',
rowFlex: RowFlex.CENTER
}
],
main: [
{
value: 'Hello World'
}
],
footer: [
{
value: 'canvas-editor',
size: 12
}
]
},
{}
)
```
## Step. 4: Configuration Editor
See the next section for details
+43
View File
@@ -0,0 +1,43 @@
---
layout: home
title: canvas-editor
titleTemplate: rich text editor by canvas/svg
hero:
name: canvas-editor
text: canvas/svg based rich text editor
actions:
- theme: brand
text: Get Started
link: /en/guide/start.html
- theme: alt
text: View on Github
link: https://github.com/Hufe921/canvas-editor
features:
- icon: 💡
title: WYSIWYG
details: Similar to word pageable, what you see is what you get
- icon: ⚡️
title: Lightweight Data Structure
details: A piece of JSON can render complex styles
- icon: 🛠️
title: Rich Features
details: Supports familiar rich text operations, tables, watermarks, controls, formulas, etc
- icon: 📦
title: Easy to Use
details: The core npm package is officially released, and the menu bar and toolbar can be maintained by themselves
- icon: 🔩
title: Flexible Development Mechanism
details: Through the interface, you can obtain the life cycle, event callback, custom right-click menu, and shortcut keys
- icon: 🔑
title: Full TypeScript Types API
details: Flexible apis and full TypeScript types
---
<style>
.main>p {
max-width:100% !important;
}
</style>
+6 -3
View File
@@ -1,4 +1,4 @@
# 全局API
# 全局 API
## 使用方式
@@ -8,14 +8,17 @@ import Editor from "@hufe921/canvas-editor"
const instance = new Editor(container, <IElement[]>data, options)
instance.apiName()
```
## destroy
功能:销毁编辑器
用法:
```javascript
instance.destroy()
```
::: warning
仅销毁编辑器dom及相关事件,菜单栏、工具栏、外部变量等需自行处理。
:::
仅销毁编辑器 dom 及相关事件,菜单栏、工具栏、外部变量等需自行处理。
:::
+147 -2
View File
@@ -10,336 +10,421 @@ instance.command.commandName()
```
## executeMode
功能:切换编辑器模式(编辑、清洁、只读)
用法:
```javascript
instance.command.executeMode(editorMode: EditorMode)
```
## executeCut
功能:剪切
用法:
```javascript
instance.command.executeCut()
```
## executeCopy
功能:复制
用法:
```javascript
instance.command.executeCopy()
```
## executePaste
功能:粘贴
用法:
```javascript
instance.command.executePaste()
```
## executeSelectAll
功能:全选
用法:
```javascript
instance.command.executeSelectAll()
```
## executeBackspace
功能:向前删除
用法:
```javascript
instance.command.executeBackspace()
```
## executeSetRange
功能:设置选区
用法:
```javascript
instance.command.executeSetRange(startIndex: number , endIndex: number)
```
## executeUndo
功能:撤销
用法:
```javascript
instance.command.executeUndo()
```
## executeRedo
功能:重做
用法:
```javascript
instance.command.executeRedo()
```
## executePainter
功能:格式刷-复制样式
用法:
```javascript
instance.command.executePainter()
```
## executeApplyPainterStyle
功能:格式刷-应用样式
用法:
```javascript
instance.command.executeApplyPainterStyle()
```
## executeFormat
功能:清除样式
用法:
```javascript
instance.command.executeFormat()
```
## executeFont
功能:设置字体
用法:
```javascript
instance.command.executeFont(font: string)
```
## executeSize
功能:设置字号
用法:
```javascript
instance.command.executeSize(size: number)
```
## executeSizeAdd
功能:增大字号
用法:
```javascript
instance.command.executeSizeAdd()
```
## executeSizeMinus
功能:减小字号
用法:
```javascript
instance.command.executeSizeMinus()
```
## executeBold
功能:字体加粗
用法:
```javascript
instance.command.executeBold()
```
## executeItalic
功能:字体斜体
用法:
```javascript
instance.command.executeItalic()
```
## executeUnderline
功能:下划线
用法:
```javascript
instance.command.executeUnderline()
```
## executeStrikeout
功能:删除线
用法:
```javascript
instance.command.executeStrikeout()
```
## executeSuperscript
功能:上标
用法:
```javascript
instance.command.executeSuperscript()
```
## executeSubscript
功能:上下标
用法:
```javascript
instance.command.executeSubscript()
```
## executeColor
功能:字体颜色
用法:
```javascript
instance.command.executeColor()
```
## executeHighlight
功能:高亮
用法:
```javascript
instance.command.executeHighlight()
```
## executeTitle
功能:标题设置
用法:
```javascript
instance.command.executeTitle(TitleLevel | null)
```
## executeList
功能:列表设置
用法:
```javascript
instance.command.executeList(listType: ListType | null, listStyle?: ListStyle)
```
## executeRowFlex
功能:行对齐
用法:
```javascript
instance.command.executeRowFlex(rowFlex: RowFlex)
```
## executeRowMargin
功能:行间距
用法:
```javascript
instance.command.executeRowMargin(rowMargin: number)
```
## executeInsertTable
功能:插入表格
用法:
```javascript
instance.command.executeInsertTable(row: number, col: number)
```
## executeInsertTableTopRow
功能:向上插入一行
用法:
```javascript
instance.command.executeInsertTableTopRow()
```
## executeInsertTableBottomRow
功能:向下插入一行
用法:
```javascript
instance.command.executeInsertTableBottomRow()
```
## executeInsertTableLeftCol
功能:向左插入一列
用法:
```javascript
instance.command.executeInsertTableLeftCol()
```
## executeInsertTableRightCol
功能:向右插入一列
用法:
```javascript
instance.command.executeInsertTableRightCol()
```
## executeDeleteTableRow
功能:删除当前行
用法:
```javascript
instance.command.executeDeleteTableRow()
```
## executeDeleteTableCol
功能:删除当前列
用法:
```javascript
instance.command.executeDeleteTableCol()
```
## executeDeleteTable
功能:删除表格
用法:
```javascript
instance.command.executeDeleteTable()
```
## executeMergeTableCell
功能:合并表格
用法:
```javascript
instance.command.executeMergeTableCell()
```
## executeCancelMergeTableCell
功能:取消合并表格
用法:
```javascript
instance.command.executeCancelMergeTableCell()
```
## executeTableTdVerticalAlign
功能:表格单元格垂直对齐方式
用法:
```javascript
instance.command.executeTableTdVerticalAlign(payload: VerticalAlign)
```
## executeTableBorderType
功能:表格边框类型
用法:
```javascript
instance.command.executeTableBorderType(payload: TableBorder)
```
## executeTableTdBackgroundColor
功能:表格单元格背景色
用法:
```javascript
instance.command.executeTableTdBackgroundColor(payload: string)
```
## executeImage
功能:插入图片
用法:
```javascript
instance.command.executeImage({
width: number;
@@ -349,9 +434,11 @@ instance.command.executeImage({
```
## executeHyperlink
功能:插入链接
用法:
```javascript
instance.command.executeHyperlink({
type: ElementType.HYPERLINK,
@@ -362,49 +449,61 @@ instance.command.executeHyperlink({
```
## executeDeleteHyperlink
功能:删除链接
用法:
```javascript
instance.command.executeDeleteHyperlink()
```
## executeCancelHyperlink
功能:取消链接
用法:
```javascript
instance.command.executeCancelHyperlink()
```
## executeEditHyperlink
功能:编辑链接
用法:
```javascript
instance.command.executeEditHyperlink(newUrl: string)
```
## executeSeparator
功能:插入分割线
用法:
```javascript
instance.command.executeSeparator(dashArray: number[])
```
## executePageBreak
功能:分页符
用法:
```javascript
instance.command.executePageBreak()
```
## executeAddWatermark
功能:添加水印
用法:
```javascript
instance.command.executeAddWatermark({
data: string;
@@ -416,185 +515,231 @@ instance.command.executeAddWatermark({
```
## executeDeleteWatermark
功能:添加水印
功能:删除水印
用法:
```javascript
instance.command.executeDeleteWatermark()
```
## executeSearch
功能:搜索
用法:
```javascript
instance.command.executeSearch(keyword: string)
```
## executeSearchNavigatePre
功能:搜索导航-上一个
用法:
```javascript
instance.command.executeSearchNavigatePre()
```
## executeSearchNavigateNext
功能:搜索导航-下一个
用法:
```javascript
instance.command.executeSearchNavigateNext()
```
## executeReplace
功能:搜索替换
用法:
```javascript
instance.command.executeReplace(newWord: string)
```
## executePrint
功能:打印
用法:
```javascript
instance.command.executePrint()
```
## executeReplaceImageElement
功能:替换图片
用法:
```javascript
instance.command.executeReplaceImageElement(newUrl: string)
```
## executeSaveAsImageElement
功能:另存为图片
用法:
```javascript
instance.command.executeSaveAsImageElement()
```
## executeChangeImageDisplay
功能:改变图片行显示方式
用法:
```javascript
instance.command.executeSaveAsImageElement(element: IElement, display: ImageDisplay)
```
## executePageMode
功能:页面模式
用法:
```javascript
instance.command.executePageMode(pageMode: PageMode)
```
## executePageScaleRecovery
功能:恢复页面原始缩放比例
用法:
```javascript
instance.command.executePageScaleRecovery()
```
## executePageScaleMinus
功能:页面缩小
用法:
```javascript
instance.command.executePageScaleMinus()
```
## executePageScaleAdd
功能:页面放大
用法:
```javascript
instance.command.executePageScaleAdd()
```
## executePaperSize
功能:设置纸张大小
用法:
```javascript
instance.command.executePaperSize(width: number, height: number)
```
## executePaperDirection
功能:设置纸张方向
用法:
```javascript
instance.command.executePaperDirection(paperDirection: PaperDirection)
```
## executeSetPaperMargin
功能:设置纸张页边距
用法:
```javascript
instance.command.executeSetPaperMargin([top: number, right: number, bottom: number, left: number])
```
## executeInsertElementList
功能:插入元素
用法:
```javascript
instance.command.executeInsertElementList(elementList: IElement[])
```
## executeAppendElementList
功能:追加元素
用法:
```javascript
instance.command.executeAppendElementList(elementList: IElement[], options?: IAppendElementListOption)
```
## executeSetValue
功能:设置编辑器数据
用法:
```javascript
instance.command.executeSetValue(payload: Partial<IEditorData>)
```
## executeRemoveControl
功能:删除控件
用法:
```javascript
instance.command.executeRemoveControl()
```
## executeSetLocale
功能:设置本地语言
用法:
```javascript
instance.command.executeSetLocale(locale: string)
```
## executeLocationCatalog
功能:定位目录位置
用法:
```javascript
instance.command.executeLocationCatalog(titleId: string)
```
## executeWordTool
功能:文字工具(删除空行、行首空格)
用法:
```javascript
instance.command.executeWordTool()
```
```
+23 -3
View File
@@ -8,10 +8,13 @@ import Editor from "@hufe921/canvas-editor"
const instance = new Editor(container, <IElement[]>data, options)
const value = instance.command.commandName()
```
## getValue
功能:获取当前文档信息
用法:
```javascript
const {
version: string;
@@ -25,49 +28,62 @@ const {
```
## getImage
功能:获取当前页面图片base64字符串
功能:获取当前页面图片 base64 字符串
用法:
```javascript
const base64StringList = await instance.command.getImage(pixelRatio?: number)
```
## getWordCount
功能:获取文档字数
用法:
```javascript
const wordCount = await instance.command.getWordCount()
```
## getRangeText
功能:获取选区文本
用法:
```javascript
const rangeText = instance.command.getRangeText()
```
## getRangeContext
功能:获取选区上下文
用法:
```javascript
const rangeContext = instance.command.getRangeContext()
```
## getPaperMargin
功能:获取页边距
用法:
```javascript
const [top: number, right: number, bottom: number, left: number] = instance.command.getPaperMargin()
const [top: number, right: number, bottom: number, left: number] =
instance.command.getPaperMargin()
```
## getSearchNavigateInfo
功能:获取搜索导航信息
用法:
```javascript
const {
index: number;
@@ -76,17 +92,21 @@ const {
```
## getCatalog
功能:获取目录
用法:
```javascript
const catalog = await instance.command.getCatalog()
```
## getHTML
功能:获取HTML
功能:获取 HTML
用法:
```javascript
const {
header: string
+1 -1
View File
@@ -17,4 +17,4 @@ instance.register.contextMenuList([
childMenus?: IRegisterContextMenu[];
}
])
```
```
+12 -7
View File
@@ -1,6 +1,7 @@
# 内部右键菜单
## 全局
- 剪切
- 复制
- 粘贴
@@ -8,11 +9,13 @@
- 打印
## 超链接
- 删除链接
- 取消链接
- 编辑链接
## 图片
- 更改图片
- 另存为图片
- 文字环绕
@@ -20,6 +23,7 @@
- 上下型环绕
## 表格
- 表格边框
- 所有框线
- 无框线
@@ -29,16 +33,17 @@
- 垂直居中
- 底端对齐
- 插入行列
- 上方插入1
- 下方插入1
- 左侧插入1
- 右侧插入1
- 上方插入 1
- 下方插入 1
- 左侧插入 1
- 右侧插入 1
- 删除行列
- 删除1
- 删除1
- 删除 1
- 删除 1
- 删除整个表格
- 合并单元格
- 取消合并
## 控件
- 删除控件
- 删除控件
+21 -1
View File
@@ -21,81 +21,101 @@ instance.eventBus.off<K keyof EventMap>(
```
## rangeStyleChange
功能:选区样式发生改变
用法:
```javascript
instance.eventBus.on('rangeStyleChange', (payload: IRangeStyle) => void)
```
## visiblePageNoListChange
功能:可见页发生改变
用法:
```javascript
instance.eventBus.on('visiblePageNoListChange', (payload: number[]) => void)
```
## intersectionPageNoChange
功能:当前页发生改变
用法:
```javascript
instance.eventBus.on('intersectionPageNoChange', (payload: number) => void)
```
## pageSizeChange
功能:当前页数发生改变
用法:
```javascript
instance.eventBus.on('pageSizeChange', (payload: number) => void)
```
## pageScaleChange
功能:当前页面缩放比例发生改变
用法:
```javascript
instance.eventBus.on('pageScaleChange', (payload: number) => void)
```
## contentChange
功能:当前内容发生改变
用法:
```javascript
instance.eventBus.on('contentChange', () => void)
```
## controlChange
功能:当前光标所在控件发生改变
用法:
```javascript
instance.eventBus.on('controlChange', (payload: IControl | null) => void)
```
## pageModeChange
功能:页面模式发生改变
用法:
```javascript
instance.eventBus.on('pageModeChange', (payload: PageMode) => void)
```
## saved
功能:文档执行保存
用法:
```javascript
instance.eventBus.on('saved', (payload: IEditorResult) => void)
```
## zoneChange
功能:区域发生改变
用法:
```javascript
instance.eventBus.on('zoneChange', (payload: EditorZone) => void)
```
```
+66 -66
View File
@@ -20,74 +20,74 @@ instance.command.executeSetLocale(locale)
interface ILang {
contextmenu: {
global: {
cut: string;
copy: string;
paste: string;
selectAll: string;
print: string;
};
control: {
delete: string;
};
hyperlink: {
delete: string;
cancel: string;
edit: string;
};
image: {
change: string;
saveAs: string;
textWrap: string;
textWrapType: {
embed: string;
upDown: string;
}
};
table: {
insertRowCol: string;
insertTopRow: string;
insertBottomRow: string;
insertLeftCol: string;
insertRightCol: string;
deleteRowCol: string;
deleteRow: string;
deleteCol: string;
deleteTable: string;
mergeCell: string;
mergeCancelCell: string;
verticalAlign: string;
verticalAlignTop: string;
verticalAlignMiddle: string;
verticalAlignBottom: string;
border: string;
borderAll: string;
borderEmpty: string;
borderExternal: string;
};
};
cut: string
copy: string
paste: string
selectAll: string
print: string
}
control: {
delete: string
}
hyperlink: {
delete: string
cancel: string
edit: string
}
image: {
change: string
saveAs: string
textWrap: string
textWrapType: {
embed: string
upDown: string
}
}
table: {
insertRowCol: string
insertTopRow: string
insertBottomRow: string
insertLeftCol: string
insertRightCol: string
deleteRowCol: string
deleteRow: string
deleteCol: string
deleteTable: string
mergeCell: string
mergeCancelCell: string
verticalAlign: string
verticalAlignTop: string
verticalAlignMiddle: string
verticalAlignBottom: string
border: string
borderAll: string
borderEmpty: string
borderExternal: string
}
}
datePicker: {
now: string;
confirm: string;
return: string;
timeSelect: string;
now: string
confirm: string
return: string
timeSelect: string
weeks: {
sun: string;
mon: string;
tue: string;
wed: string;
thu: string;
fri: string;
sat: string;
};
year: string;
month: string;
hour: string;
minute: string;
second: string;
};
sun: string
mon: string
tue: string
wed: string
thu: string
fri: string
sat: string
}
year: string
month: string
hour: string
minute: string
second: string
}
frame: {
header: string;
footer: string;
header: string
footer: string
}
}
```
```
+32 -12
View File
@@ -1,6 +1,6 @@
# 事件监听(listener)
> listener只能响应一个方法,推荐使用eventBus进行事件监听
> listener 只能响应一个方法,推荐使用 eventBus 进行事件监听
## 使用方式
@@ -12,81 +12,101 @@ instance.listener.eventName = ()=>{}
```
## rangeStyleChange
功能:选区样式发生改变
用法:
```javascript
instance.listener.rangeStyleChange = (payload: IRangeStyle)=>{}
instance.listener.rangeStyleChange = (payload: IRangeStyle) => {}
```
## visiblePageNoListChange
功能:可见页发生改变
用法:
```javascript
instance.listener.visiblePageNoListChange = (payload: number[])=>{}
instance.listener.visiblePageNoListChange = (payload: number[]) => {}
```
## intersectionPageNoChange
功能:当前页发生改变
用法:
```javascript
instance.listener.intersectionPageNoChange = (payload: number)=>{}
instance.listener.intersectionPageNoChange = (payload: number) => {}
```
## pageSizeChange
功能:当前页数发生改变
用法:
```javascript
instance.listener.pageSizeChange = (payload: number)=>{}
instance.listener.pageSizeChange = (payload: number) => {}
```
## pageScaleChange
功能:当前页面缩放比例发生改变
用法:
```javascript
instance.listener.pageScaleChange = (payload: number)=>{}
instance.listener.pageScaleChange = (payload: number) => {}
```
## contentChange
功能:当前内容发生改变
用法:
```javascript
instance.listener.contentChange = ()=>{}
instance.listener.contentChange = () => {}
```
## controlChange
功能:当前光标所在控件发生改变
用法:
```javascript
instance.listener.controlChange = (payload: IControl | null)=>{}
instance.listener.controlChange = (payload: IControl | null) => {}
```
## pageModeChange
功能:页面模式发生改变
用法:
```javascript
instance.listener.pageModeChange = (payload: PageMode)=>{}
instance.listener.pageModeChange = (payload: PageMode) => {}
```
## saved
功能:文档执行保存
用法:
```javascript
instance.listener.saved = (payload: IEditorResult)=>{}
instance.listener.saved = (payload: IEditorResult) => {}
```
## zoneChange
功能:区域发生改变
用法:
```javascript
instance.listener.zoneChange = (payload: EditorZone)=>{}
```
instance.listener.zoneChange = (payload: EditorZone) => {}
```
+72 -72
View File
@@ -14,52 +14,52 @@ new Editor(container, IEditorData | IElement[], {
```typescript
interface IEditorOption {
mode?: EditorMode; // 编辑器模式:编辑、清洁(不显示视觉辅助元素。如:分页符)、只读。默认:编辑
defaultType?: string; // 默认元素类型。默认:TEXT
defaultFont?: string; // 默认字体。默认:Yahei
defaultSize?: number; // 默认字号。默认:16
minSize?: number; // 最小字号。默认:5
maxSize?: number; // 最大字号。默认:72
defaultBasicRowMarginHeight?: number; // 默认行高。默认:8
defaultRowMargin?: number; // 默认行间距。默认:1
defaultTabWidth?: number; // 默认tab宽度。默认:32
width?: number; // 纸张宽度。默认:794
height?: number; // 纸张高度。默认:1123
scale?: number; // 缩放比例。默认:1
pageGap?: number; // 纸张间隔。默认:20
underlineColor?: string; // 下划线颜色。默认:#000000
strikeoutColor?: string; // 删除线颜色。默认:#FF0000
rangeColor?: string; // 选区颜色。默认:#AECBFA
rangeAlpha?: number; // 选区透明度。默认:0.6
rangeMinWidth?: number; // 选区最小宽度。默认:5
searchMatchColor?: string; // 搜索高亮颜色。默认:#FFFF00
searchNavigateMatchColor?: string; // 搜索导航高亮颜色。默认:#AAD280
searchMatchAlpha?: number; // 搜索高亮透明度。默认:0.6
highlightAlpha?: number; // 高亮元素透明度。默认:0.6
resizerColor?: string; // 图片尺寸器颜色。默认:#4182D9
resizerSize?: number; // 图片尺寸器大小。默认:5
marginIndicatorSize?: number; // 页边距指示器长度。默认:35
marginIndicatorColor?: string; // 页边距指示器颜色。默认:#BABABA
margins?: IMargin; // 页面边距。默认:[100, 120, 100, 120]
pageMode?: PageMode; // 纸张模式:连页、分页。默认:分页
tdPadding?: number; // 单元格内边距。默认:5
defaultTrMinHeight?: number; // 默认表格行最小高度。默认:40
defaultColMinWidth?: number; // 默认表格列最小宽度(整体宽度足够时应用,否则会按比例缩小)。默认:40
defaultHyperlinkColor?: string; // 默认超链接颜色。默认:#0000FF
header?: IHeader; // 页眉信息。{top?:number; maxHeightRadio?:MaxHeightRatio;}
footer?: IFooter; // 页脚信息。{bottom?:number; maxHeightRadio?:MaxHeightRatio;}
pageNumber?: IPageNumber; // 页码信息。{bottom:number; size:number; font:string; color:string; rowFlex:RowFlex; format:string; numberType:NumberType;}
paperDirection?: PaperDirection; // 纸张方向:纵向、横向
inactiveAlpha?: number; // 正文内容失焦时透明度。默认值:0.6
historyMaxRecordCount: number; // 历史(撤销重做)最大记录次数。默认:100次
printPixelRatio: number; // 打印像素比率(值越大越清晰,但尺寸越大)。默认:3
wordBreak: WordBreak; // 单词与标点断行:BREAK_WORD首行不出现标点&单词不拆分、BREAK_ALL按字符宽度撑满后折行。默认:BREAK_WORD
watermark?: IWatermark; // 水印信息。{data:string; color?:string; opacity?:number; size?:number; font?:string;}
control?: IControlOption; // 控件信息。 {placeholderColor?:string; bracketColor?:string; prefix?:string; postfix?:string;}
checkbox?: ICheckboxOption; // 复选框信息。{width?:number; height?:number; gap?:number; lineWidth?:number; fillStyle?:string; fontStyle?: string;}
cursor?: ICursorOption; // 光标样式。{width?: number; color?: string; dragWidth?: number; dragColor?: string;}
title?: ITitleOption; // 标题配置。{ defaultFirstSize?: number; defaultSecondSize?: number; defaultThirdSize?: number defaultFourthSize?: number; defaultFifthSize?: number; defaultSixthSize?: number;}
placeholder?: IPlaceholder; // 编辑器空白占位文本
mode?: EditorMode // 编辑器模式:编辑、清洁(不显示视觉辅助元素。如:分页符)、只读。默认:编辑
defaultType?: string // 默认元素类型。默认:TEXT
defaultFont?: string // 默认字体。默认:Yahei
defaultSize?: number // 默认字号。默认:16
minSize?: number // 最小字号。默认:5
maxSize?: number // 最大字号。默认:72
defaultBasicRowMarginHeight?: number // 默认行高。默认:8
defaultRowMargin?: number // 默认行间距。默认:1
defaultTabWidth?: number // 默认tab宽度。默认:32
width?: number // 纸张宽度。默认:794
height?: number // 纸张高度。默认:1123
scale?: number // 缩放比例。默认:1
pageGap?: number // 纸张间隔。默认:20
underlineColor?: string // 下划线颜色。默认:#000000
strikeoutColor?: string // 删除线颜色。默认:#FF0000
rangeColor?: string // 选区颜色。默认:#AECBFA
rangeAlpha?: number // 选区透明度。默认:0.6
rangeMinWidth?: number // 选区最小宽度。默认:5
searchMatchColor?: string // 搜索高亮颜色。默认:#FFFF00
searchNavigateMatchColor?: string // 搜索导航高亮颜色。默认:#AAD280
searchMatchAlpha?: number // 搜索高亮透明度。默认:0.6
highlightAlpha?: number // 高亮元素透明度。默认:0.6
resizerColor?: string // 图片尺寸器颜色。默认:#4182D9
resizerSize?: number // 图片尺寸器大小。默认:5
marginIndicatorSize?: number // 页边距指示器长度。默认:35
marginIndicatorColor?: string // 页边距指示器颜色。默认:#BABABA
margins?: IMargin // 页面边距。默认:[100, 120, 100, 120]
pageMode?: PageMode // 纸张模式:连页、分页。默认:分页
tdPadding?: number // 单元格内边距。默认:5
defaultTrMinHeight?: number // 默认表格行最小高度。默认:40
defaultColMinWidth?: number // 默认表格列最小宽度(整体宽度足够时应用,否则会按比例缩小)。默认:40
defaultHyperlinkColor?: string // 默认超链接颜色。默认:#0000FF
header?: IHeader // 页眉信息。{top?:number; maxHeightRadio?:MaxHeightRatio;}
footer?: IFooter // 页脚信息。{bottom?:number; maxHeightRadio?:MaxHeightRatio;}
pageNumber?: IPageNumber // 页码信息。{bottom:number; size:number; font:string; color:string; rowFlex:RowFlex; format:string; numberType:NumberType;}
paperDirection?: PaperDirection // 纸张方向:纵向、横向
inactiveAlpha?: number // 正文内容失焦时透明度。默认值:0.6
historyMaxRecordCount: number // 历史(撤销重做)最大记录次数。默认:100次
printPixelRatio: number // 打印像素比率(值越大越清晰,但尺寸越大)。默认:3
wordBreak: WordBreak // 单词与标点断行:BREAK_WORD首行不出现标点&单词不拆分、BREAK_ALL按字符宽度撑满后折行。默认:BREAK_WORD
watermark?: IWatermark // 水印信息。{data:string; color?:string; opacity?:number; size?:number; font?:string;}
control?: IControlOption // 控件信息。 {placeholderColor?:string; bracketColor?:string; prefix?:string; postfix?:string;}
checkbox?: ICheckboxOption // 复选框信息。{width?:number; height?:number; gap?:number; lineWidth?:number; fillStyle?:string; fontStyle?: string;}
cursor?: ICursorOption // 光标样式。{width?: number; color?: string; dragWidth?: number; dragColor?: string;}
title?: ITitleOption // 标题配置。{ defaultFirstSize?: number; defaultSecondSize?: number; defaultThirdSize?: number defaultFourthSize?: number; defaultFifthSize?: number; defaultSixthSize?: number;}
placeholder?: IPlaceholder // 编辑器空白占位文本
}
```
@@ -67,9 +67,9 @@ interface IEditorOption {
```typescript
interface IHeader {
top?: number; // 距离页面顶部大小。默认:30
maxHeightRadio?: MaxHeightRatio; // 占页面最大高度比。默认:HALF
disabled?: boolean; // 是否禁用
top?: number // 距离页面顶部大小。默认:30
maxHeightRadio?: MaxHeightRatio // 占页面最大高度比。默认:HALF
disabled?: boolean // 是否禁用
}
```
@@ -77,9 +77,9 @@ interface IHeader {
```typescript
interface IFooter {
bottom?: number; // 距离页面底部大小。默认:30
maxHeightRadio?: MaxHeightRatio; // 占页面最大高度比。默认:HALF
disabled?: boolean; // 是否禁用
bottom?: number // 距离页面底部大小。默认:30
maxHeightRadio?: MaxHeightRatio // 占页面最大高度比。默认:HALF
disabled?: boolean // 是否禁用
}
```
@@ -87,16 +87,16 @@ interface IFooter {
```typescript
interface IPageNumber {
bottom?: number; // 距离页面底部大小。默认:60
size?: number; // 字体大小。默认:12
font?: string; // 字体。默认:Yahei
color?: string; // 字体颜色。默认:#000000
rowFlex?: RowFlex; // 行对齐方式。默认:CENTER
format?: string; // 页码格式。默认:{pageNo}。示例:第{pageNo}页/共{pageCount}页
numberType?: NumberType; // 数字类型。默认:ARABIC
disabled?: boolean; // 是否禁用
startPageNo?: number; // 起始页码。默认:1
fromPageNo?: number; // 从第几页开始出现页码。默认:0
bottom?: number // 距离页面底部大小。默认:60
size?: number // 字体大小。默认:12
font?: string // 字体。默认:Yahei
color?: string // 字体颜色。默认:#000000
rowFlex?: RowFlex // 行对齐方式。默认:CENTER
format?: string // 页码格式。默认:{pageNo}。示例:第{pageNo}页/共{pageCount}页
numberType?: NumberType // 数字类型。默认:ARABIC
disabled?: boolean // 是否禁用
startPageNo?: number // 起始页码。默认:1
fromPageNo?: number // 从第几页开始出现页码。默认:0
}
```
@@ -104,11 +104,11 @@ interface IPageNumber {
```typescript
interface IWatermark {
data: string; // 文本。
color?: string; // 颜色。默认:#AEB5C0
opacity?: number; // 透明度。默认:0.3
size?: number; // 字体大小。默认:200
font?: string; // 字体。默认:Yahei
data: string // 文本。
color?: string // 颜色。默认:#AEB5C0
opacity?: number // 透明度。默认:0.3
size?: number // 字体大小。默认:200
font?: string // 字体。默认:Yahei
}
```
@@ -116,10 +116,10 @@ interface IWatermark {
```typescript
interface IPlaceholder {
data: string; // 文本。
color?: string; // 颜色。默认:#DCDFE6
opacity?: number; // 透明度。默认:1
size?: number; // 字体大小。默认:16
font?: string; // 字体。默认:Yahei
data: string // 文本。
color?: string // 颜色。默认:#DCDFE6
opacity?: number // 透明度。默认:1
size?: number // 字体大小。默认:16
font?: string // 字体。默认:Yahei
}
```
+1 -1
View File
@@ -20,4 +20,4 @@ export function myPlugin(editor: Editor, options?: Option) {
```javascript
instance.add(myPlugin, options?: Option)
```
```
+1 -1
View File
@@ -129,4 +129,4 @@ interface IElement {
listStyle?: ListStyle;
listWrap?: boolean;
}
```
```
+1 -1
View File
@@ -18,4 +18,4 @@ instance.register.shortcutList([
callback: (command: Command) => any;
}
])
```
```
+42 -1
View File
@@ -1,124 +1,165 @@
# 内部快捷键
## Backspace
功能:向前删除
## Delete
功能:向后删除
## Enter
功能:换行
## Shift + Enter
功能:列表内换行
## ←
功能:向左移动
## Shift + ←
功能:向左缩放选区
## →
功能:向右移动
## Shift + →
功能:向右缩放选区
## ↑
功能:向上移动
## Shift + ↑
功能:向上缩放选区
## ↓
功能:向下移动
## Shift + ↓
功能:向下缩放选区
## Esc
功能:退出格式刷
## Tab
功能:增加缩进
## Ctrl/Cmd + Z
功能:撤销
## Ctrl/Cmd + Y
功能:重做
## Ctrl/Cmd + C
功能:复制
## Ctrl/Cmd + X
功能:剪切
## Ctrl/Cmd + A
功能:全选
## Ctrl/Cmd + S
功能:保存
## Ctrl/Cmd + {
功能:增大字体
## Ctrl/Cmd + }
功能:减小字体
## Ctrl/Cmd + B
功能:加粗
## Ctrl/Cmd + I
功能:斜体
## Ctrl/Cmd + U
功能:下划线
## Ctrl/Cmd + L
功能:行居左
## Ctrl/Cmd + E
功能:行居中
## Ctrl/Cmd + R
功能:行居右
## Ctrl/Cmd + J
功能:两端对齐
## Ctrl + Shift + X
功能:删除线
## Ctrl/Cmd + Shift + >
功能:上标
## Ctrl/Cmd + Shift + <
功能:下标
## Ctrl + Alt/Option + 0
功能:正文
## Ctrl + Alt/Option + 1
功能:标题一
## Ctrl + Alt/Option + 2
功能:标题二
## Ctrl + Alt/Option + 3
功能:标题三
## Ctrl + Alt/Option + 4
功能:标题四
## Ctrl + Alt/Option + 5
功能:标题五
## Ctrl + Alt/Option + 6
功能:标题六
## Ctrl/Cmd + Shift + I
功能:无序列表
## Ctrl/Cmd + Shift + U
功能:有序列表
功能:有序列表
+43 -27
View File
@@ -2,17 +2,17 @@
> 所见即所得的富文本编辑器。
得益于光标及文字排版的完全自行实现。绘制底层也可由svg渲染,详见代码:[feature/svg](https://github.com/Hufe921/canvas-editor/tree/feature/svg);或借助pdfjs的完成pdf的绘制,详见代码:[feature/pdf](https://github.com/Hufe921/canvas-editor/tree/feature/pdf)。
得益于光标及文字排版的完全自行实现。绘制底层也可由 svg 渲染,详见代码:[feature/svg](https://github.com/Hufe921/canvas-editor/tree/feature/svg);或借助 pdfjs 的完成 pdf 的绘制,详见代码:[feature/pdf](https://github.com/Hufe921/canvas-editor/tree/feature/pdf)。
::: warning
官方仅提供编辑器核心层npm包,菜单栏或其他外部工具可自行参考文档扩展,或直接参考[官方](https://github.com/Hufe921/canvas-editor)实现,详见[demo](https://hufe.club/canvas-editor/)。
官方仅提供编辑器核心层 npm 包,菜单栏或其他外部工具可自行参考文档扩展,或直接参考[官方](https://github.com/Hufe921/canvas-editor)实现,详见[demo](https://hufe.club/canvas-editor/)。
:::
## 功能点
- 富文本操作(撤销、重做、字体、字号、加粗、斜体、上下标、对齐方式、标题、列表.....)
- 插入元素(表格、图片、链接、代码块、分页符、Math公式、日期选择器、内容块......)
- 打印(基于canvas转图片、pdf绘制)
- 插入元素(表格、图片、链接、代码块、分页符、Math 公式、日期选择器、内容块......)
- 打印(基于 canvas 转图片、pdf 绘制)
- 控件(单选、文本、复选框)
- 右键菜单(内部、自定义)
- 快捷键(内部、自定义)
@@ -28,9 +28,9 @@
- 计算性能
- 控件规则
- 表格分页
- vue、react等框架开箱即用版
- vue、react 等框架开箱即用版
## Step. 1: 下载npm包
## Step. 1: 下载 npm
```sh
npm i @hufe921/canvas-editor --save
@@ -45,35 +45,51 @@ npm i @hufe921/canvas-editor --save
## Step. 3: 实例化编辑器
- 仅包含正文内容
```javascript
import Editor from "@hufe921/canvas-editor"
new Editor(document.querySelector(".canvas-editor"), [
```javascript
import Editor from '@hufe921/canvas-editor'
new Editor(
document.querySelector('.canvas-editor'),
[
{
value: "Hello World"
value: 'Hello World'
}
], {})
],
{}
)
```
- 包含正文、页眉、页脚内容
```javascript
import Editor from "@hufe921/canvas-editor"
new Editor(document.querySelector(".canvas-editor"), {
header: [{
value: "Header",
rowFlex: RowFlex.CENTER
}],
main: [{
value: "Hello World"
}],
footer: [{
value: 'canvas-editor',
size: 12
}]
}, {})
```javascript
import Editor from '@hufe921/canvas-editor'
new Editor(
document.querySelector('.canvas-editor'),
{
header: [
{
value: 'Header',
rowFlex: RowFlex.CENTER
}
],
main: [
{
value: 'Hello World'
}
],
footer: [
{
value: 'canvas-editor',
size: 12
}
]
},
{}
)
```
## Step. 4: 配置编辑器
详见下一节
详见下一节
+1 -1
View File
@@ -40,4 +40,4 @@ features:
.main>p {
max-width:100% !important;
}
</style>
</style>