Merge pull request #20 from Hufe921/feature/compress-data

feat:compress output data size
pr675
Hufe 4 years ago committed by GitHub
commit d49af61994
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -11,7 +11,7 @@ export function formatElementList(elementList: IElement[], isHandleFirstElement
}
let i = 0
while (i < elementList.length) {
const el = elementList[i]
let el = elementList[i]
if (el.type === ElementType.TABLE) {
const tableId = getUUID()
el.id = tableId
@ -40,6 +40,14 @@ export function formatElementList(elementList: IElement[], isHandleFirstElement
elementList.splice(i, 1)
// 追加字节点
if (valueList.length) {
// 元素展开
if (valueList[0].value.length > 1) {
const deleteValue = valueList.splice(0, 1)[0]
const deleteTextList = deleteValue.value.split('')
for (let d = 0; d < deleteTextList.length; d++) {
valueList.splice(d, 0, { ...deleteValue, value: deleteTextList[d] })
}
}
const hyperlinkId = getUUID()
for (let v = 0; v < valueList.length; v++) {
const value = valueList[v]
@ -51,6 +59,13 @@ export function formatElementList(elementList: IElement[], isHandleFirstElement
}
}
i--
} else if ((!el.type || el.type === ElementType.TEXT) && el.value.length > 1) {
elementList.splice(i, 1)
const valueList = el.value.split('')
for (let v = 0; v < valueList.length; v++) {
elementList.splice(i + v, 0, { ...el, value: valueList[v] })
}
el = elementList[i]
}
if (el.value === '\n') {
el.value = ZERO
@ -62,6 +77,33 @@ export function formatElementList(elementList: IElement[], isHandleFirstElement
}
}
export function isSameElementExceptValue(source: IElement, target: IElement): boolean {
const sourceKeys = Object.keys(source)
const targetKeys = Object.keys(target)
if (sourceKeys.length !== targetKeys.length) return false
for (let s = 0; s < sourceKeys.length; s++) {
const key = sourceKeys[s] as never
if (key === 'value') continue
if (source[key] !== target[key]) {
return false
}
}
return true
}
export function pickElementAttr(payload: IElement): IElement {
const element: IElement = {
value: payload.value === ZERO ? `\n` : payload.value,
}
EDITOR_ELEMENT_ZIP_ATTR.forEach(attr => {
const value = payload[attr] as never
if (value !== undefined) {
element[attr] = value
}
})
return element
}
export function zipElementList(payload: IElement[]): IElement[] {
const elementList = deepClone(payload)
const zipElementListData: IElement[] = []
@ -73,7 +115,7 @@ export function zipElementList(payload: IElement[]): IElement[] {
e++
continue
}
// 表格处理
// 表格、超链接递归处理
if (element.type === ElementType.TABLE) {
if (element.trList) {
for (let t = 0; t < element.trList.length; t++) {
@ -112,18 +154,25 @@ export function zipElementList(payload: IElement[]): IElement[] {
hyperlinkElement.valueList = zipElementList(valueList)
element = hyperlinkElement
}
// 压缩保留字段
const newElement: IElement = {
value: element.value === ZERO ? `\n` : element.value,
// 组合元素
const pickElement = pickElementAttr(element)
if (!element.type || element.type === ElementType.TEXT) {
while (e < elementList.length) {
const nextElement = elementList[e + 1]
e++
if (
nextElement
&& isSameElementExceptValue(pickElement, pickElementAttr(nextElement))
) {
pickElement.value += nextElement.value
} else {
break
}
EDITOR_ELEMENT_ZIP_ATTR.forEach(attr => {
const value = element[attr] as never
if (value !== undefined) {
newElement[attr] = value
}
})
zipElementListData.push(newElement)
} else {
e++
}
zipElementListData.push(pickElement)
}
return zipElementListData
}

Loading…
Cancel
Save