ngx-editor
Version:
Rich Text Editor for angular using ProseMirror
149 lines • 12.8 kB
JavaScript
// :: MarkSpec A link. Has `href` and `title` attributes. `title`
// defaults to the empty string. Rendered and parsed as an `<a>`
// element.
const link = {
attrs: {
href: {},
title: { default: null },
target: { default: '_blank' }
},
inclusive: false,
parseDOM: [
{
tag: 'a[href]',
getAttrs(dom) {
return {
href: dom.getAttribute('href'),
title: dom.getAttribute('title'),
target: dom.getAttribute('target'),
};
}
}
],
toDOM(node) {
const { href, title, target } = node.attrs;
return ['a', { href, title, target }, 0];
}
};
// :: MarkSpec An emphasis mark. Rendered as an `<em>` element.
// Has parse rules that also match `<i>` and `font-style: italic`.
const em = {
parseDOM: [
{ tag: 'i' },
{ tag: 'em' },
{ style: 'font-style=italic' }
],
toDOM() {
return ['em', 0];
}
};
// :: MarkSpec A strong mark. Rendered as `<strong>`, parse rules
// also match `<b>` and `font-weight: bold`.
const strong = {
parseDOM: [
{ tag: 'strong' },
// This works around a Google Docs misbehavior where
// pasted content will be inexplicably wrapped in `<b>`
// tags with a font-weight normal.
{
tag: 'b',
getAttrs: (dom) => {
return dom.style.fontWeight !== 'normal' && null;
},
},
{
style: 'font-weight',
getAttrs: (value) => {
return /^(bold(er)?|[5-9]\d{2,})$/.test(value) && null;
}
}
],
toDOM() {
return ['strong', 0];
}
};
// :: MarkSpec Code font mark. Represented as a `<code>` element.
const code = {
parseDOM: [
{ tag: 'code' }
],
toDOM() {
return ['code', 0];
}
};
// :: MarkSpec An underline mark. Rendered as an `<u>` element.
// Has parse rules that also match `text-decoration: underline`.
const u = {
parseDOM: [
{ tag: 'u' },
{
style: 'text-decoration=underline',
consuming: false
}
],
toDOM() {
return ['u', 0];
}
};
// :: MarkSpec An underline mark. Rendered as an `<s>` element.
// Has parse rules that also match `strike`, `del` tag and css property `text-decoration: line-through`.
const s = {
parseDOM: [
{ tag: 's' },
{ tag: 'strike' },
{ style: 'text-decoration=line-through' }
],
toDOM() {
return ['s', 0];
}
};
const textColor = {
attrs: {
color: {
default: null
},
},
parseDOM: [
{
style: 'color',
getAttrs: (value) => {
return { color: value };
}
}
],
toDOM(mark) {
const { color } = mark.attrs;
return ['span', { style: `color:${color};` }, 0];
},
};
const textBackgroundColor = {
attrs: {
backgroundColor: {
default: null
},
},
parseDOM: [
{
style: 'background-color',
getAttrs: (value) => {
return { backgroundColor: value };
}
}
],
toDOM(mark) {
const { backgroundColor } = mark.attrs;
return ['span', { style: `background-color:${backgroundColor};` }, 0];
},
};
const marks = {
link,
em,
strong,
code,
u,
s,
text_color: textColor,
text_background_color: textBackgroundColor
};
export default marks;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFya3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZWRpdG9yL3NjaGVtYS9tYXJrcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxpRUFBaUU7QUFDakUsZ0VBQWdFO0FBQ2hFLFdBQVc7QUFDWCxNQUFNLElBQUksR0FBYTtJQUNyQixLQUFLLEVBQUU7UUFDTCxJQUFJLEVBQUUsRUFBRTtRQUNSLEtBQUssRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUU7UUFDeEIsTUFBTSxFQUFFLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRTtLQUM5QjtJQUNELFNBQVMsRUFBRSxLQUFLO0lBQ2hCLFFBQVEsRUFBRTtRQUNSO1lBQ0UsR0FBRyxFQUFFLFNBQVM7WUFDZCxRQUFRLENBQUMsR0FBZ0I7Z0JBQ3ZCLE9BQU87b0JBQ0wsSUFBSSxFQUFFLEdBQUcsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDO29CQUM5QixLQUFLLEVBQUUsR0FBRyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUM7b0JBQ2hDLE1BQU0sRUFBRSxHQUFHLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQztpQkFDbkMsQ0FBQztZQUNKLENBQUM7U0FDRjtLQUNGO0lBQ0QsS0FBSyxDQUFDLElBQUk7UUFDUixNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQzNDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzNDLENBQUM7Q0FDRixDQUFDO0FBRUYsK0RBQStEO0FBQy9ELGtFQUFrRTtBQUNsRSxNQUFNLEVBQUUsR0FBYTtJQUNuQixRQUFRLEVBQUU7UUFDUixFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUU7UUFDWixFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUU7UUFDYixFQUFF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QztTQUNGO0tBQ0Y7SUFDRCxLQUFLLENBQUMsSUFBVTtRQUNkLE1BQU0sRUFBRSxlQUFlLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ3ZDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxLQUFLLEVBQUUsb0JBQW9CLGVBQWUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDeEUsQ0FBQztDQUNGLENBQUM7QUFFRixNQUFNLEtBQUssR0FBRztJQUNaLElBQUk7SUFDSixFQUFFO0lBQ0YsTUFBTTtJQUNOLElBQUk7SUFDSixDQUFDO0lBQ0QsQ0FBQztJQUNELFVBQVUsRUFBRSxTQUFTO0lBQ3JCLHFCQUFxQixFQUFFLG1CQUFtQjtDQUMzQyxDQUFDO0FBRUYsZUFBZSxLQUFLLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBET01PdXRwdXRTcGVjLCBNYXJrLCBNYXJrU3BlYyB9IGZyb20gJ3Byb3NlbWlycm9yLW1vZGVsJztcblxuLy8gOjogTWFya1NwZWMgQSBsaW5rLiBIYXMgYGhyZWZgIGFuZCBgdGl0bGVgIGF0dHJpYnV0ZXMuIGB0aXRsZWBcbi8vIGRlZmF1bHRzIHRvIHRoZSBlbXB0eSBzdHJpbmcuIFJlbmRlcmVkIGFuZCBwYXJzZWQgYXMgYW4gYDxhPmBcbi8vIGVsZW1lbnQuXG5jb25zdCBsaW5rOiBNYXJrU3BlYyA9IHtcbiAgYXR0cnM6IHtcbiAgICBocmVmOiB7fSxcbiAgICB0aXRsZTogeyBkZWZhdWx0OiBudWxsIH0sXG4gICAgdGFyZ2V0OiB7IGRlZmF1bHQ6ICdfYmxhbmsnIH1cbiAgfSxcbiAgaW5jbHVzaXZlOiBmYWxzZSxcbiAgcGFyc2VET006IFtcbiAgICB7XG4gICAgICB0YWc6ICdhW2hyZWZdJyxcbiAgICAgIGdldEF0dHJzKGRvbTogSFRNTEVsZW1lbnQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBocmVmOiBkb20uZ2V0QXR0cmlidXRlKCdocmVmJyksXG4gICAgICAgICAgdGl0bGU6IGRvbS5nZXRBdHRyaWJ1dGUoJ3RpdGxlJyksXG4gICAgICAgICAgdGFyZ2V0OiBkb20uZ2V0QXR0cmlidXRlKCd0YXJnZXQnKSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gIF0sXG4gIHRvRE9NKG5vZGUpOiBET01PdXRwdXRTcGVjIHtcbiAgICBjb25zdCB7IGhyZWYsIHRpdGxlLCB0YXJnZXQgfSA9IG5vZGUuYXR0cnM7XG4gICAgcmV0dXJuIFsnYScsIHsgaHJlZiwgdGl0bGUsIHRhcmdldCB9LCAwXTtcbiAgfVxufTtcblxuLy8gOjogTWFya1NwZWMgQW4gZW1waGFzaXMgbWFyay4gUmVuZGVyZWQgYXMgYW4gYDxlbT5gIGVsZW1lbnQuXG4vLyBIYXMgcGFyc2UgcnVsZXMgdGhhdCBhbHNvIG1hdGNoIGA8aT5gIGFuZCBgZm9udC1zdHlsZTogaXRhbGljYC5cbmNvbnN0IGVtOiBNYXJrU3BlYyA9IHtcbiAgcGFyc2VET006IFtcbiAgICB7IHRhZzogJ2knIH0sXG4gICAgeyB0YWc6ICdlbScgfSxcbiAgICB7IHN0eWxlOiAnZm9udC1zdHlsZT1pdGFsaWMnIH1cbiAgXSxcbiAgdG9ET00oKTogRE9NT3V0cHV0U3BlYyB7XG4gICAgcmV0dXJuIFsnZW0nLCAwXTtcbiAgfVxufTtcblxuLy8gOjogTWFya1NwZWMgQSBzdHJvbmcgbWFyay4gUmVuZGVyZWQgYXMgYDxzdHJvbmc+YCwgcGFyc2UgcnVsZXNcbi8vIGFsc28gbWF0Y2ggYDxiPmAgYW5kIGBmb250LXdlaWdodDogYm9sZGAuXG5jb25zdCBzdHJvbmc6IE1hcmtTcGVjID0ge1xuICBwYXJzZURPTTogW1xuICAgIHsgdGFnOiAnc3Ryb25nJyB9LFxuICAgIC8vIFRoaXMgd29ya3MgYXJvdW5kIGEgR29vZ2xlIERvY3MgbWlzYmVoYXZpb3Igd2hlcmVcbiAgICAvLyBwYXN0ZWQgY29udGVudCB3aWxsIGJlIGluZXhwbGljYWJseSB3cmFwcGVkIGluIGA8Yj5gXG4gICAgLy8gdGFncyB3aXRoIGEgZm9udC13ZWlnaHQgbm9ybWFsLlxuICAgIHtcbiAgICAgIHRhZzogJ2InLFxuICAgICAgZ2V0QXR0cnM6IChkb206IEhUTUxFbGVtZW50KTogUmVjb3JkPHN0cmluZywgYW55PiA9PiB7XG4gICAgICAgIHJldHVybiBkb20uc3R5bGUuZm9udFdlaWdodCAhPT0gJ25vcm1hbCcgJiYgbnVsbDtcbiAgICAgIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICBzdHlsZTogJ2ZvbnQtd2VpZ2h0JyxcbiAgICAgIGdldEF0dHJzOiAodmFsdWU6IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIGFueT4gPT4ge1xuICAgICAgICByZXR1cm4gL14oYm9sZChlcik/fFs1LTldXFxkezIsfSkkLy50ZXN0KHZhbHVlKSAmJiBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgXSxcbiAgdG9ET00oKTogRE9NT3V0cHV0U3BlYyB7XG4gICAgcmV0dXJuIFsnc3Ryb25nJywgMF07XG4gIH1cbn07XG5cbi8vIDo6IE1hcmtTcGVjIENvZGUgZm9udCBtYXJrLiBSZXByZXNlbnRlZCBhcyBhIGA8Y29kZT5gIGVsZW1lbnQuXG5jb25zdCBjb2RlOiBNYXJrU3BlYyA9IHtcbiAgcGFyc2VET006IFtcbiAgICB7IHRhZzogJ2NvZGUnIH1cbiAgXSxcbiAgdG9ET00oKTogRE9NT3V0cHV0U3BlYyB7XG4gICAgcmV0dXJuIFsnY29kZScsIDBdO1xuICB9XG59O1xuXG4vLyA6OiBNYXJrU3BlYyBBbiB1bmRlcmxpbmUgbWFyay4gUmVuZGVyZWQgYXMgYW4gYDx1PmAgZWxlbWVudC5cbi8vIEhhcyBwYXJzZSBydWxlcyB0aGF0IGFsc28gbWF0Y2ggYHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lYC5cbmNvbnN0IHU6IE1hcmtTcGVjID0ge1xuICBwYXJzZURPTTogW1xuICAgIHsgdGFnOiAndScgfSxcbiAgICB7XG4gICAgICBzdHlsZTogJ3RleHQtZGVjb3JhdGlvbj11bmRlcmxpbmUnLFxuICAgICAgY29uc3VtaW5nOiBmYWxzZVxuICAgIH1cbiAgXSxcbiAgdG9ET00oKTogRE9NT3V0cHV0U3BlYyB7XG4gICAgcmV0dXJuIFsndScsIDBdO1xuICB9XG59O1xuXG4vLyA6OiBNYXJrU3BlYyBBbiB1bmRlcmxpbmUgbWFyay4gUmVuZGVyZWQgYXMgYW4gYDxzPmAgZWxlbWVudC5cbi8vIEhhcyBwYXJzZSBydWxlcyB0aGF0IGFsc28gbWF0Y2ggYHN0cmlrZWAsIGBkZWxgIHRhZyBhbmQgY3NzIHByb3BlcnR5IGB0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaGAuXG5jb25zdCBzOiBNYXJrU3BlYyA9IHtcbiAgcGFyc2VET006IFtcbiAgICB7IHRhZzogJ3MnIH0sXG4gICAgeyB0YWc6ICdzdHJpa2UnIH0sXG4gICAgeyBzdHlsZTogJ3RleHQtZGVjb3JhdGlvbj1saW5lLXRocm91Z2gnIH1cbiAgXSxcbiAgdG9ET00oKTogRE9NT3V0cHV0U3BlYyB7XG4gICAgcmV0dXJuIFsncycsIDBdO1xuICB9XG59O1xuXG5jb25zdCB0ZXh0Q29sb3I6IE1hcmtTcGVjID0ge1xuICBhdHRyczoge1xuICAgIGNvbG9yOiB7XG4gICAgICBkZWZhdWx0OiBudWxsXG4gICAgfSxcbiAgfSxcbiAgcGFyc2VET006IFtcbiAgICB7XG4gICAgICBzdHlsZTogJ2NvbG9yJyxcbiAgICAgIGdldEF0dHJzOiAodmFsdWU6IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIGFueT4gPT4ge1xuICAgICAgICByZXR1cm4geyBjb2xvcjogdmFsdWUgfTtcbiAgICAgIH1cbiAgICB9XG4gIF0sXG4gIHRvRE9NKG1hcms6IE1hcmspOiBET01PdXRwdXRTcGVjIHtcbiAgICBjb25zdCB7IGNvbG9yIH0gPSBtYXJrLmF0dHJzO1xuICAgIHJldHVybiBbJ3NwYW4nLCB7IHN0eWxlOiBgY29sb3I6JHtjb2xvcn07YCB9LCAwXTtcbiAgfSxcbn07XG5cbmNvbnN0IHRleHRCYWNrZ3JvdW5kQ29sb3I6IE1hcmtTcGVjID0ge1xuICBhdHRyczoge1xuICAgIGJhY2tncm91bmRDb2xvcjoge1xuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH0sXG4gIH0sXG4gIHBhcnNlRE9NOiBbXG4gICAge1xuICAgICAgc3R5bGU6ICdiYWNrZ3JvdW5kLWNvbG9yJyxcbiAgICAgIGdldEF0dHJzOiAodmFsdWU6IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIGFueT4gPT4ge1xuICAgICAgICByZXR1cm4geyBiYWNrZ3JvdW5kQ29sb3I6IHZhbHVlIH07XG4gICAgICB9XG4gICAgfVxuICBdLFxuICB0b0RPTShtYXJrOiBNYXJrKTogRE9NT3V0cHV0U3BlYyB7XG4gICAgY29uc3QgeyBiYWNrZ3JvdW5kQ29sb3IgfSA9IG1hcmsuYXR0cnM7XG4gICAgcmV0dXJuIFsnc3BhbicsIHsgc3R5bGU6IGBiYWNrZ3JvdW5kLWNvbG9yOiR7YmFja2dyb3VuZENvbG9yfTtgIH0sIDBdO1xuICB9LFxufTtcblxuY29uc3QgbWFya3MgPSB7XG4gIGxpbmssXG4gIGVtLFxuICBzdHJvbmcsXG4gIGNvZGUsXG4gIHUsXG4gIHMsXG4gIHRleHRfY29sb3I6IHRleHRDb2xvcixcbiAgdGV4dF9iYWNrZ3JvdW5kX2NvbG9yOiB0ZXh0QmFja2dyb3VuZENvbG9yXG59O1xuXG5leHBvcnQgZGVmYXVsdCBtYXJrcztcbiJdfQ==