@atlaskit/editor-common
Version:
A package that contains common classes and components for editor and renderer
60 lines (59 loc) • 2.28 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.flatmap = flatmap;
exports.getFragmentBackingArray = getFragmentBackingArray;
exports.mapChildren = mapChildren;
exports.mapFragment = mapFragment;
exports.mapSlice = mapSlice;
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
var _model = require("@atlaskit/editor-prosemirror/model");
/**
* A helper to get the underlying array of a fragment.
*/
function getFragmentBackingArray(fragment) {
return fragment.content;
}
function mapFragment(content, callback) {
var parent = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
var children = [];
for (var i = 0, size = content.childCount; i < size; i++) {
var _node = content.child(i);
var transformed = _node.isLeaf ? callback(_node, parent, i) : callback(_node.copy(mapFragment(_node.content, callback, _node)), parent, i);
if (transformed) {
if (transformed instanceof _model.Fragment) {
children.push.apply(children, (0, _toConsumableArray2.default)(getFragmentBackingArray(transformed)));
} else if (Array.isArray(transformed)) {
children.push.apply(children, (0, _toConsumableArray2.default)(transformed));
} else {
children.push(transformed);
}
}
}
return _model.Fragment.fromArray(children);
}
function mapSlice(slice, callback) {
var fragment = mapFragment(slice.content, callback);
return new _model.Slice(fragment, slice.openStart, slice.openEnd);
}
function flatmap(fragment, callback) {
var fragmentContent = [];
for (var i = 0; i < fragment.childCount; i++) {
var child = callback(fragment.child(i), i, fragment);
if (Array.isArray(child)) {
fragmentContent.push.apply(fragmentContent, (0, _toConsumableArray2.default)(child));
} else {
fragmentContent.push(child);
}
}
return _model.Fragment.fromArray(fragmentContent);
}
function mapChildren(node, callback) {
var array = [];
for (var i = 0; i < node.childCount; i++) {
array.push(callback(node.child(i), i, node instanceof _model.Fragment ? node : node.content));
}
return array;
}