UNPKG

@zodiac-ui/editor

Version:

A rich text editor for Angular based on `@atlaskit/editor-core`.

33 lines 6.57 kB
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