@zodiac-ui/editor
Version:
A rich text editor for Angular based on `@atlaskit/editor-core`.
33 lines • 6.57 kB
JavaScript
export const toggleBlockMark = (markType, getAttrs, allowedBlocks) => (state, dispatch) => {
const { from, to } = state.selection;
let markApplied = false;
const tr = state.tr;
state.doc.nodesBetween(from, to, (node, pos, parent) => {
if (!node.type.isBlock) {
return false;
}
if ((!allowedBlocks ||
(Array.isArray(allowedBlocks)
? allowedBlocks.indexOf(node.type) > -1
: allowedBlocks(state.schema, node, parent))) &&
parent.type.allowsMarkType(markType)) {
const oldMarks = node.marks.filter(mark => mark.type === markType);
const prevAttrs = oldMarks.length ? oldMarks[0].attrs : undefined;
const newAttrs = getAttrs(prevAttrs, node);
if (newAttrs !== undefined) {
tr.setNodeMarkup(pos, node.type, node.attrs, node.marks
.filter(mark => !markType.excludes(mark.type))
.concat(newAttrs === false ? [] : markType.create(newAttrs)));
markApplied = true;
}
}
});
if (markApplied && tr.docChanged) {
if (dispatch) {
dispatch(tr.scrollIntoView());
}
return true;
}
return false;
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9nZ2xlLWJsb2NrLW1hcmsuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Aem9kaWFjLXVpL2VkaXRvci8iLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy90b2dnbGUtYmxvY2stbWFyay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFXQSxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsQ0FDM0IsUUFBa0IsRUFDbEIsUUFBaUUsRUFDakUsYUFFNkQsRUFDdEQsRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxFQUFFO0lBQzlCLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQztJQUVyQyxJQUFJLFdBQVcsR0FBRyxLQUFLLENBQUM7SUFDeEIsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQztJQUVwQixLQUFLLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRTtRQUNuRCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDcEIsT0FBTyxLQUFLLENBQUM7U0FDaEI7UUFFRCxJQUNJLENBQUMsQ0FBQyxhQUFhO1lBQ1gsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQztnQkFDekIsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDdkMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ3JELE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxFQUN0QztZQUNFLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQztZQUVuRSxNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBVyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDekUsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUUzQyxJQUFJLFFBQVEsS0FBSyxTQUFTLEVBQUU7Z0JBQ3hCLEVBQUUsQ0FBQyxhQUFhLENBQ1osR0FBRyxFQUNILElBQUksQ0FBQyxJQUFJLEVBQ1QsSUFBSSxDQUFDLEtBQUssRUFDVixJQUFJLENBQUMsS0FBSztxQkFDTCxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO3FCQUM3QyxNQUFNLENBQUMsUUFBUSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQ25FLENBQUM7Z0JBQ0YsV0FBVyxHQUFHLElBQUksQ0FBQzthQUN0QjtTQUNKO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFJLFdBQVcsSUFBSSxFQUFFLENBQUMsVUFBVSxFQUFFO1FBQzlCLElBQUksUUFBUSxFQUFFO1lBQ1YsUUFBUSxDQUFDLEVBQUUsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO1NBQ2pDO1FBQ0QsT0FBTyxJQUFJLENBQUM7S0FDZjtJQUVELE9BQU8sS0FBSyxDQUFDO0FBQ2pCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBUb2dnbGVzIGJsb2NrIG1hcmsgYmFzZWQgb24gdGhlIHJldHVybiB0eXBlIG9mIGBnZXRBdHRyc2AuXHJcbiAqIFRoaXMgaXMgc2ltaWxhciB0byBQcm9zZU1pcnJvcidzIGBnZXRBdHRyc2AgZnJvbSBgQXR0cmlidXRlU3BlY2BcclxuICogcmV0dXJuIGBmYWxzZWAgdG8gcmVtb3ZlIHRoZSBtYXJrLlxyXG4gKiByZXR1cm4gYHVuZGVmaW5lZCBmb3Igbm8tb3AuXHJcbiAqIHJldHVybiBhbiBgb2JqZWN0YCB0byB1cGRhdGUgdGhlIG1hcmsuXHJcbiAqL1xyXG5pbXBvcnQgeyBNYXJrVHlwZSwgTm9kZVR5cGUsIFNjaGVtYSB9IGZyb20gXCJwcm9zZW1pcnJvci1tb2RlbFwiXHJcbmltcG9ydCB7IENvbW1hbmQgfSBmcm9tIFwiLi4vaW50ZXJmYWNlcy9jb21tYW5kXCJcclxuaW1wb3J0IHsgTm9kZSB9IGZyb20gJ3Byb3NlbWlycm9yLW1vZGVsJztcclxuXHJcbmV4cG9ydCBjb25zdCB0b2dnbGVCbG9ja01hcmsgPSA8VCA9IG9iamVjdD4oXHJcbiAgICBtYXJrVHlwZTogTWFya1R5cGUsXHJcbiAgICBnZXRBdHRyczogKChwcmV2QXR0cnM/OiBULCBub2RlPzogTm9kZSkgPT4gVCB8IHVuZGVmaW5lZCB8IGZhbHNlKSxcclxuICAgIGFsbG93ZWRCbG9ja3M/OlxyXG4gICAgICAgIHwgQXJyYXk8Tm9kZVR5cGU+XHJcbiAgICAgICAgfCAoKHNjaGVtYTogU2NoZW1hLCBub2RlOiBOb2RlLCBwYXJlbnQ6IE5vZGUpID0+IGJvb2xlYW4pLFxyXG4pOiBDb21tYW5kID0+IChzdGF0ZSwgZGlzcGF0Y2gpID0+IHtcclxuICAgIGNvbnN0IHsgZnJvbSwgdG8gfSA9IHN0YXRlLnNlbGVjdGlvbjtcclxuXHJcbiAgICBsZXQgbWFya0FwcGxpZWQgPSBmYWxzZTtcclxuICAgIGNvbnN0IHRyID0gc3RhdGUudHI7XHJcblxyXG4gICAgc3RhdGUuZG9jLm5vZGVzQmV0d2Vlbihmcm9tLCB0bywgKG5vZGUsIHBvcywgcGFyZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKCFub2RlLnR5cGUuaXNCbG9jaykge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICghYWxsb3dlZEJsb2NrcyB8fFxyXG4gICAgICAgICAgICAgICAgKEFycmF5LmlzQXJyYXkoYWxsb3dlZEJsb2NrcylcclxuICAgICAgICAgICAgICAgICAgICA/IGFsbG93ZWRCbG9ja3MuaW5kZXhPZihub2RlLnR5cGUpID4gLTFcclxuICAgICAgICAgICAgICAgICAgICA6IGFsbG93ZWRCbG9ja3Moc3RhdGUuc2NoZW1hLCBub2RlLCBwYXJlbnQpKSkgJiZcclxuICAgICAgICAgICAgcGFyZW50LnR5cGUuYWxsb3dzTWFya1R5cGUobWFya1R5cGUpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG9sZE1hcmtzID0gbm9kZS5tYXJrcy5maWx0ZXIobWFyayA9PiBtYXJrLnR5cGUgPT09IG1hcmtUeXBlKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHByZXZBdHRycyA9IG9sZE1hcmtzLmxlbmd0aCA/IChvbGRNYXJrc1swXS5hdHRycyBhcyBUKSA6IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgY29uc3QgbmV3QXR0cnMgPSBnZXRBdHRycyhwcmV2QXR0cnMsIG5vZGUpO1xyXG5cclxuICAgICAgICAgICAgaWYgKG5ld0F0dHJzICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIHRyLnNldE5vZGVNYXJrdXAoXHJcbiAgICAgICAgICAgICAgICAgICAgcG9zLFxyXG4gICAgICAgICAgICAgICAgICAgIG5vZGUudHlwZSxcclxuICAgICAgICAgICAgICAgICAgICBub2RlLmF0dHJzLFxyXG4gICAgICAgICAgICAgICAgICAgIG5vZGUubWFya3NcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihtYXJrID0+ICFtYXJrVHlwZS5leGNsdWRlcyhtYXJrLnR5cGUpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KG5ld0F0dHJzID09PSBmYWxzZSA/IFtdIDogbWFya1R5cGUuY3JlYXRlKG5ld0F0dHJzKSksXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgbWFya0FwcGxpZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKG1hcmtBcHBsaWVkICYmIHRyLmRvY0NoYW5nZWQpIHtcclxuICAgICAgICBpZiAoZGlzcGF0Y2gpIHtcclxuICAgICAgICAgICAgZGlzcGF0Y2godHIuc2Nyb2xsSW50b1ZpZXcoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxufTtcclxuIl19