@zodiac-ui/editor
Version:
A rich text editor for Angular based on `@atlaskit/editor-core`.
33 lines • 5.26 kB
JavaScript
import { Fragment, Slice } from "prosemirror-model";
/**
* A helper to get the underlying array of a fragment.
*/
export function getFragmentBackingArray(fragment) {
return fragment.content;
}
export function mapFragment(content, callback, parent = null) {
const children = [];
for (let i = 0, size = content.childCount; i < size; i++) {
const node = content.child(i);
const transformed = node.isLeaf
? callback(node, parent, i)
: callback(node.copy(mapFragment(node.content, callback, node)), parent, i);
if (transformed) {
if (transformed instanceof Fragment) {
children.push(...getFragmentBackingArray(transformed));
}
else if (Array.isArray(transformed)) {
children.push(...transformed);
}
else {
children.push(transformed);
}
}
}
return Fragment.fromArray(children);
}
export function mapSlice(slice, callback) {
const fragment = mapFragment(slice.content, callback);
return new Slice(fragment, slice.openStart, slice.openEnd);
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLXNsaWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHpvZGlhYy11aS9lZGl0b3IvIiwic291cmNlcyI6WyJsaWIvdXRpbHMvbWFwLXNsaWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBUSxRQUFRLEVBQUUsS0FBSyxFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFFekQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsdUJBQXVCLENBQ25DLFFBQWtCO0lBRWxCLE9BQVEsUUFBZ0IsQ0FBQyxPQUFpQixDQUFDO0FBQy9DLENBQUM7QUFFRCxNQUFNLFVBQVUsV0FBVyxDQUN2QixPQUFpQixFQUNqQixRQUlvQyxFQUNwQyxTQUFzQixJQUFJO0lBRTFCLE1BQU0sUUFBUSxHQUFHLEVBQVksQ0FBQztJQUM5QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLEdBQUcsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3RELE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLE1BQU07WUFDM0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztZQUMzQixDQUFDLENBQUMsUUFBUSxDQUNOLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQ3BELE1BQU0sRUFDTixDQUFDLENBQ0osQ0FBQztRQUNOLElBQUksV0FBVyxFQUFFO1lBQ2IsSUFBSSxXQUFXLFlBQVksUUFBUSxFQUFFO2dCQUNqQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsdUJBQXVCLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQzthQUMxRDtpQkFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEVBQUU7Z0JBQ25DLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQzthQUNqQztpQkFBTTtnQkFDSCxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2FBQzlCO1NBQ0o7S0FDSjtJQUNELE9BQU8sUUFBUSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUN4QyxDQUFDO0FBRUQsTUFBTSxVQUFVLFFBQVEsQ0FDcEIsS0FBWSxFQUNaLFFBSW9DO0lBRXBDLE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3RELE9BQU8sSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQy9ELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOb2RlLCBGcmFnbWVudCwgU2xpY2UgfSBmcm9tIFwicHJvc2VtaXJyb3ItbW9kZWxcIlxyXG5cclxuLyoqXHJcbiAqIEEgaGVscGVyIHRvIGdldCB0aGUgdW5kZXJseWluZyBhcnJheSBvZiBhIGZyYWdtZW50LlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEZyYWdtZW50QmFja2luZ0FycmF5KFxyXG4gICAgZnJhZ21lbnQ6IEZyYWdtZW50LFxyXG4pOiBSZWFkb25seUFycmF5PE5vZGU+IHtcclxuICAgIHJldHVybiAoZnJhZ21lbnQgYXMgYW55KS5jb250ZW50IGFzIE5vZGVbXTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIG1hcEZyYWdtZW50KFxyXG4gICAgY29udGVudDogRnJhZ21lbnQsXHJcbiAgICBjYWxsYmFjazogKFxyXG4gICAgICAgIG5vZGU6IE5vZGUsXHJcbiAgICAgICAgcGFyZW50OiBOb2RlIHwgbnVsbCxcclxuICAgICAgICBpbmRleDogbnVtYmVyLFxyXG4gICAgKSA9PiBOb2RlIHwgTm9kZVtdIHwgRnJhZ21lbnQgfCBudWxsLFxyXG4gICAgcGFyZW50OiBOb2RlIHwgbnVsbCA9IG51bGwsXHJcbikge1xyXG4gICAgY29uc3QgY2hpbGRyZW4gPSBbXSBhcyBOb2RlW107XHJcbiAgICBmb3IgKGxldCBpID0gMCwgc2l6ZSA9IGNvbnRlbnQuY2hpbGRDb3VudDsgaSA8IHNpemU7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IG5vZGUgPSBjb250ZW50LmNoaWxkKGkpO1xyXG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybWVkID0gbm9kZS5pc0xlYWZcclxuICAgICAgICAgICAgPyBjYWxsYmFjayhub2RlLCBwYXJlbnQsIGkpXHJcbiAgICAgICAgICAgIDogY2FsbGJhY2soXHJcbiAgICAgICAgICAgICAgICBub2RlLmNvcHkobWFwRnJhZ21lbnQobm9kZS5jb250ZW50LCBjYWxsYmFjaywgbm9kZSkpLFxyXG4gICAgICAgICAgICAgICAgcGFyZW50LFxyXG4gICAgICAgICAgICAgICAgaSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICBpZiAodHJhbnNmb3JtZWQpIHtcclxuICAgICAgICAgICAgaWYgKHRyYW5zZm9ybWVkIGluc3RhbmNlb2YgRnJhZ21lbnQpIHtcclxuICAgICAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goLi4uZ2V0RnJhZ21lbnRCYWNraW5nQXJyYXkodHJhbnNmb3JtZWQpKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHRyYW5zZm9ybWVkKSkge1xyXG4gICAgICAgICAgICAgICAgY2hpbGRyZW4ucHVzaCguLi50cmFuc2Zvcm1lZCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjaGlsZHJlbi5wdXNoKHRyYW5zZm9ybWVkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBGcmFnbWVudC5mcm9tQXJyYXkoY2hpbGRyZW4pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbWFwU2xpY2UoXHJcbiAgICBzbGljZTogU2xpY2UsXHJcbiAgICBjYWxsYmFjazogKFxyXG4gICAgICAgIG5vZGVzOiBOb2RlLFxyXG4gICAgICAgIHBhcmVudDogTm9kZSB8IG51bGwsXHJcbiAgICAgICAgaW5kZXg6IG51bWJlcixcclxuICAgICkgPT4gTm9kZSB8IE5vZGVbXSB8IEZyYWdtZW50IHwgbnVsbCxcclxuKTogU2xpY2Uge1xyXG4gICAgY29uc3QgZnJhZ21lbnQgPSBtYXBGcmFnbWVudChzbGljZS5jb250ZW50LCBjYWxsYmFjayk7XHJcbiAgICByZXR1cm4gbmV3IFNsaWNlKGZyYWdtZW50LCBzbGljZS5vcGVuU3RhcnQsIHNsaWNlLm9wZW5FbmQpO1xyXG59XHJcbiJdfQ==