本文整理匯總了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;
}