Passed
Push — master ( b893da...e7ac93 )
by Andreas
03:30 queued 15s
created

script/plugins/InputRules/inputrules.js   A

Complexity

Total Complexity 4
Complexity/F 1.33

Size

Lines of Code 33
Function Count 3

Duplication

Duplicated Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 15
dl 0
loc 33
rs 10
c 0
b 0
f 0
wmc 4
mnd 1
bc 1
fnc 3
bpm 0.3333
cpm 1.3333
noi 0

2 Functions

Rating   Name   Duplication   Size   Complexity  
A inputrules.js ➔ buildInputRules 0 7 2
A inputrules.js ➔ smileyRule 0 10 2
1
import { inputRules, InputRule } from 'prosemirror-inputrules';
2
import { TextSelection } from 'prosemirror-state';
3
import SmileyConf from '../../custom/SmileyConf';
4
5
/**
6
 * Smiley input rule
7
 *
8
 * @returns {InputRule}
9
 */
10
export function smileyRule() {
11
    return new InputRule(SmileyConf.getRegex(), ((state, match) => {
12
        const { tr } = state;
13
        const syntax = match[1];
14
        const icon = SmileyConf.getSmileys()[syntax];
15
16
        tr.setSelection(TextSelection.create(tr.doc, tr.selection.from, tr.selection.from - syntax.length + 1));
17
        return tr.replaceSelectionWith(state.schema.nodes.smiley.create({ icon, syntax }));
18
    }));
19
}
20
21
/**
22
 * Rules for transforming user input
23
 *
24
 * @param {prosemirrorModel.Schema} schema
25
 * @returns {Plugin}
26
 */
27
export default function buildInputRules(schema) {
28
    const rules = [];
29
    if (schema.nodes.smiley) {
30
        rules.push(smileyRule());
31
    }
32
    return inputRules({ rules });
33
}
34