feat:add copy text align and separator feature
This commit is contained in:
@@ -1,4 +1,4 @@
|
|||||||
import { ElementType } from '../..'
|
import { ElementType, IEditorOption } from '../..'
|
||||||
import { ZERO } from '../../dataset/constant/Common'
|
import { ZERO } from '../../dataset/constant/Common'
|
||||||
import { EDITOR_ELEMENT_COPY_ATTR } from '../../dataset/constant/Element'
|
import { EDITOR_ELEMENT_COPY_ATTR } from '../../dataset/constant/Element'
|
||||||
import { ElementStyleKey } from '../../dataset/enum/ElementStyle'
|
import { ElementStyleKey } from '../../dataset/enum/ElementStyle'
|
||||||
@@ -20,6 +20,7 @@ import { Control } from '../draw/control/Control'
|
|||||||
import { CheckboxControl } from '../draw/control/checkbox/CheckboxControl'
|
import { CheckboxControl } from '../draw/control/checkbox/CheckboxControl'
|
||||||
import { splitText } from '../../utils'
|
import { splitText } from '../../utils'
|
||||||
import { Previewer } from '../draw/particle/previewer/Previewer'
|
import { Previewer } from '../draw/particle/previewer/Previewer'
|
||||||
|
import { DeepRequired } from '../../interface/Common'
|
||||||
|
|
||||||
export class CanvasEvent {
|
export class CanvasEvent {
|
||||||
|
|
||||||
@@ -28,6 +29,7 @@ export class CanvasEvent {
|
|||||||
private mouseDownStartPosition: ICurrentPosition | null
|
private mouseDownStartPosition: ICurrentPosition | null
|
||||||
|
|
||||||
private draw: Draw
|
private draw: Draw
|
||||||
|
private options: DeepRequired<IEditorOption>
|
||||||
private pageContainer: HTMLDivElement
|
private pageContainer: HTMLDivElement
|
||||||
private pageList: HTMLCanvasElement[]
|
private pageList: HTMLCanvasElement[]
|
||||||
private position: Position
|
private position: Position
|
||||||
@@ -48,6 +50,7 @@ export class CanvasEvent {
|
|||||||
this.pageContainer = draw.getPageContainer()
|
this.pageContainer = draw.getPageContainer()
|
||||||
this.pageList = draw.getPageList()
|
this.pageList = draw.getPageList()
|
||||||
this.draw = draw
|
this.draw = draw
|
||||||
|
this.options = draw.getOptions()
|
||||||
this.cursor = null
|
this.cursor = null
|
||||||
this.position = this.draw.getPosition()
|
this.position = this.draw.getPosition()
|
||||||
this.range = this.draw.getRange()
|
this.range = this.draw.getRange()
|
||||||
@@ -585,7 +588,7 @@ export class CanvasEvent {
|
|||||||
const { startIndex, endIndex } = this.range.getRange()
|
const { startIndex, endIndex } = this.range.getRange()
|
||||||
const elementList = this.draw.getElementList()
|
const elementList = this.draw.getElementList()
|
||||||
if (startIndex !== endIndex) {
|
if (startIndex !== endIndex) {
|
||||||
writeElementList(elementList.slice(startIndex + 1, endIndex + 1))
|
writeElementList(elementList.slice(startIndex + 1, endIndex + 1), this.options)
|
||||||
let curIndex: number
|
let curIndex: number
|
||||||
if (activeControl) {
|
if (activeControl) {
|
||||||
curIndex = this.control.cut()
|
curIndex = this.control.cut()
|
||||||
@@ -602,7 +605,7 @@ export class CanvasEvent {
|
|||||||
const { startIndex, endIndex } = this.range.getRange()
|
const { startIndex, endIndex } = this.range.getRange()
|
||||||
const elementList = this.draw.getElementList()
|
const elementList = this.draw.getElementList()
|
||||||
if (startIndex !== endIndex) {
|
if (startIndex !== endIndex) {
|
||||||
writeElementList(elementList.slice(startIndex + 1, endIndex + 1))
|
writeElementList(elementList.slice(startIndex + 1, endIndex + 1), this.options)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
import { IElement } from '..'
|
import { IEditorOption, IElement, RowFlex } from '..'
|
||||||
import { ZERO } from '../dataset/constant/Common'
|
import { ZERO } from '../dataset/constant/Common'
|
||||||
import { TEXTLIKE_ELEMENT_TYPE } from '../dataset/constant/Element'
|
import { TEXTLIKE_ELEMENT_TYPE } from '../dataset/constant/Element'
|
||||||
import { ElementType } from '../dataset/enum/Element'
|
import { ElementType } from '../dataset/enum/Element'
|
||||||
|
import { DeepRequired } from '../interface/Common'
|
||||||
import { zipElementList } from './element'
|
import { zipElementList } from './element'
|
||||||
|
|
||||||
export function writeClipboardItem(text: string, html: string) {
|
export function writeClipboardItem(text: string, html: string) {
|
||||||
@@ -16,7 +17,7 @@ export function writeClipboardItem(text: string, html: string) {
|
|||||||
window.navigator.clipboard.write([item])
|
window.navigator.clipboard.write([item])
|
||||||
}
|
}
|
||||||
|
|
||||||
export function writeElementList(elementList: IElement[]) {
|
export function writeElementList(elementList: IElement[], options: DeepRequired<IEditorOption>) {
|
||||||
const clipboardDom: HTMLDivElement = document.createElement('div')
|
const clipboardDom: HTMLDivElement = document.createElement('div')
|
||||||
function buildDomFromElementList(payload: IElement[]) {
|
function buildDomFromElementList(payload: IElement[]) {
|
||||||
for (let e = 0; e < payload.length; e++) {
|
for (let e = 0; e < payload.length; e++) {
|
||||||
@@ -52,8 +53,10 @@ export function writeElementList(elementList: IElement[]) {
|
|||||||
img.height = element.height!
|
img.height = element.height!
|
||||||
}
|
}
|
||||||
clipboardDom.append(img)
|
clipboardDom.append(img)
|
||||||
|
} else if (element.type === ElementType.SEPARATOR) {
|
||||||
|
const hr = document.createElement('hr')
|
||||||
|
clipboardDom.append(hr)
|
||||||
} else if (!element.type || TEXTLIKE_ELEMENT_TYPE.includes(element.type)) {
|
} else if (!element.type || TEXTLIKE_ELEMENT_TYPE.includes(element.type)) {
|
||||||
const span = document.createElement('span')
|
|
||||||
let text = ''
|
let text = ''
|
||||||
if (element.type === ElementType.CONTROL) {
|
if (element.type === ElementType.CONTROL) {
|
||||||
text = element.control!.value?.[0]?.value || ''
|
text = element.control!.value?.[0]?.value || ''
|
||||||
@@ -61,20 +64,26 @@ export function writeElementList(elementList: IElement[]) {
|
|||||||
text = element.value
|
text = element.value
|
||||||
}
|
}
|
||||||
if (!text) continue
|
if (!text) continue
|
||||||
span.innerText = text.replace(new RegExp(`${ZERO}`, 'g'), '\n')
|
const isBlock = element.rowFlex === RowFlex.CENTER || element.rowFlex === RowFlex.RIGHT
|
||||||
|
const dom = document.createElement(isBlock ? 'p' : 'span')
|
||||||
|
dom.innerText = text.replace(new RegExp(`${ZERO}`, 'g'), '\n')
|
||||||
|
dom.style.fontFamily = element.font || options.defaultFont
|
||||||
|
if (element.rowFlex) {
|
||||||
|
dom.style.textAlign = element.rowFlex
|
||||||
|
}
|
||||||
if (element.color) {
|
if (element.color) {
|
||||||
span.style.color = element.color
|
dom.style.color = element.color
|
||||||
}
|
}
|
||||||
if (element.bold) {
|
if (element.bold) {
|
||||||
span.style.fontWeight = '600'
|
dom.style.fontWeight = '600'
|
||||||
}
|
}
|
||||||
if (element.italic) {
|
if (element.italic) {
|
||||||
span.style.fontStyle = 'italic'
|
dom.style.fontStyle = 'italic'
|
||||||
}
|
}
|
||||||
if (element.size) {
|
if (element.size) {
|
||||||
span.style.fontSize = `${element.size}px`
|
dom.style.fontSize = `${element.size}px`
|
||||||
}
|
}
|
||||||
clipboardDom.append(span)
|
clipboardDom.append(dom)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user