本文整理汇总了TypeScript中@typewriter/editor.Delta.eachLine方法的典型用法代码示例。如果您正苦于以下问题:TypeScript Delta.eachLine方法的具体用法?TypeScript Delta.eachLine怎么用?TypeScript Delta.eachLine使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类@typewriter/editor.Delta
的用法示例。
在下文中一共展示了Delta.eachLine方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的TypeScript代码示例。
示例1: deltaToVdom
export function deltaToVdom(delta: Delta, paper: Paper) {
const { blocks, marks, embeds } = paper;
const blockData = [];
delta.eachLine(({ ops, attributes }) => {
let inlineChildren = [];
// Collect block children
ops.forEach((op, i, array) => {
if (op.insert) {
let children = [];
if (typeof op.insert === 'string') {
const prev = array[i - 1];
const next = array[i + 1];
let text = op.insert.replace(/ /g, '\xA0 ');
if (!prev) text = text.replace(/^ /, '\xA0');
if (!next || (typeof next.insert === 'string' && next.insert[0] === ' ')) text = text.replace(/ $/, '\xA0');
children.push(text);
} else {
const embed = embeds.findByAttributes(op.insert);
let component: Function;
if (embed && (component = getComponent(embed.name))) {
const node = component(op.insert);
children.push(node);
}
}
if (op.attributes) {
// Sort them by the order found in marks and be efficient
Object.keys(op.attributes).sort((a, b) => marks.priority(b) - marks.priority(a)).forEach(name => {
const mark = marks.get(name);
let component: Function;
if (mark && (component = getComponent(mark.name))) {
const node = component(op.attributes, children);
nodeMarks.set(node, mark); // Store for merging
children = [ node ];
}
});
}
inlineChildren.push.apply(inlineChildren, children);
}
});
// Merge marks to optimize
inlineChildren = mergeChildren(inlineChildren);
const lastChild = inlineChildren[inlineChildren.length - 1];
if (!inlineChildren.length || (lastChild && (lastChild.name === 'br' || (inlineChildren.length === 1 && isDecoratorEmbed(lastChild))))) {
inlineChildren.push(BR);
}
let block = blocks.findByAttributes(attributes);
if (!block) block = blocks.getDefault();
blockData.push([ block, inlineChildren, attributes ]);
});
// If a block has optimize=true on it, vdom will be called with all sibling nodes of the same block
let blockChildren = [], prevBlock;
let collect = [];
blockData.forEach((data, i) => {
const [ block, children, attr ] = data;
const component = getComponent(block.name);
if (component && (component as any).rendersMultiple) {
collect.push([ attr, children ]);
const next = blockData[i + 1];
if (!next || next[0] !== block) {
const children = component(collect);
blockChildren = blockChildren.concat(children);
collect = [];
}
} else if (component) {
const node = component(attr, children);
blockChildren.push(node);
}
});
return blockChildren;
}