Skip to content

Commit a8c1b73

Browse files
committed
feat: Checkboxes instead of contenteditable div
1 parent 95085e5 commit a8c1b73

File tree

6 files changed

+60
-22
lines changed

6 files changed

+60
-22
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,6 @@
8888
"eslint-plugin-promise": "^3.0.0",
8989
"eslint-plugin-react": "^6.4.1",
9090
"eslint-plugin-standard": "^2.0.1",
91-
"matreshka": "^2.0.0-beta.2"
91+
"matreshka": "^2.0.0-beta.3"
9292
}
9393
}

src/index.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,8 @@ module.exports = new class Application extends MatreshkaObject {
6969

7070
console.log(results);
7171
},
72-
'change:parserName': () => setParser(this.parserName)
72+
'change:parserName': () => setParser(this.parserName),
73+
'rules@modify': evt => console.log('tablo')
7374
});
7475
}
7576
}

src/lint/configs/index.js

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,11 @@ const names = ['airbnb', 'eslint', 'google', 'standard'];
22
const configs = [];
33

44
for(const name of names) {
5-
configs.push({
6-
name,
7-
config: require(`./eslint-config-${name}.json`)
8-
});
5+
const config = {
6+
...require(`./eslint-config-${name}.json`)
7+
};
8+
9+
configs.push({ name, config });
910
}
1011

1112
export default configs;

src/rules/index.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,8 @@ export default class Rules extends MatreshkaArray {
3333
toJSON() {
3434
const result = {};
3535
for(const group of this) {
36-
for(const { ruleName, value } of group) {
37-
result[group.getFullRuleName(ruleName, group.name)] = value;
36+
for(const { ruleName, value, isOn } of group) {
37+
result[group.getFullRuleName(ruleName, group.name)] = isOn ? value : 0;
3838
}
3939
}
4040

src/rules/rule.js

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
import MatreshkaObject from 'matreshka/object';
2+
//import prop from 'matreshka/binders/prop';
3+
4+
export default class Rule extends MatreshkaObject {
5+
renderer = `<label title="{{ dynamicValueJSON }}">
6+
<input type="checkbox" checked="{{ isOn }}"> {{ ruleName }}
7+
</label>`;
8+
constructor(data) {
9+
super(data)
10+
.calc({
11+
value: {
12+
source: 'valueJSON',
13+
handler: value => value ? JSON.parse(value) : 0
14+
},
15+
isOn: {
16+
source: 'value',
17+
handler: value => {
18+
const v = value instanceof Array ? value[0] : value;
19+
return v !== 0 && v !== 'off';
20+
}
21+
},
22+
dynamicValue: {
23+
source: ['value', 'isOn'],
24+
handler: (value, isOn) => {
25+
const [errorLevel, ...settings] = value instanceof Array ? value : [value];
26+
let newErrorLevel;
27+
28+
if(!isOn) {
29+
newErrorLevel = 'off';
30+
} else if(errorLevel === 'off' || errorLevel === 0) {
31+
newErrorLevel = 'error';
32+
} else {
33+
newErrorLevel = errorLevel;
34+
}
35+
36+
return settings.length ? [newErrorLevel, ...settings] : newErrorLevel;
37+
}
38+
},
39+
dynamicValueJSON: {
40+
source: 'dynamicValue',
41+
handler: value => JSON.stringify(value, null, '\t')
42+
}
43+
});
44+
}
45+
}

src/rules/rules-group.js

Lines changed: 5 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,23 @@
11
import MatreshkaArray from 'matreshka/array';
2-
import chain from 'matreshka/chain';
3-
import html from 'matreshka/binders/html';
2+
import Rule from './rule';
43

54
export default class RulesGroup extends MatreshkaArray {
5+
Model = Rule;
6+
67
renderer = `<fieldset>
78
<legend>{{ name }}</legend>
89
<div class="rules-list"></div>
910
</fieldset>`;
10-
itemRenderer = `<label>
11-
{{ ruleName }}: <code contenteditable class="value-json"></code>
12-
</label>`
11+
1312
constructor(plugin) {
1413
super()
1514
.set(plugin);
1615

1716
const { plugin: { rules } } = plugin;
1817
for(const ruleName of Object.keys(rules)) {
19-
//console.log(rules);
2018
this.push({
2119
ruleName,
22-
value: 0
20+
value: 'off'
2321
});
2422
}
2523
}
@@ -29,11 +27,4 @@ export default class RulesGroup extends MatreshkaArray {
2927
.bindNode('container', ':sandbox .rules-list')
3028
.rerender();
3129
}
32-
33-
onItemRender(item) {
34-
chain(item)
35-
.calc('valueJSON', 'value', value => JSON.stringify(value, null, '\t'))
36-
.calc('value', 'valueJSON', value => value ? JSON.parse(value) : 0)
37-
.bindNode('valueJSON', ':sandbox .value-json', html());
38-
}
3930
}

0 commit comments

Comments
 (0)