improve linter info and config popup (#1171)

* improve linter info popup

* show rule id so the user can configure it
* add "configure" button to show the linter config UI
* add margins between items
* emphasize active rules in linter config dialog
This commit is contained in:
tophf 2021-02-14 20:30:50 +03:00 committed by GitHub
parent c17dddb0ee
commit 3102738cfb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 37 additions and 5 deletions

View File

@ -729,6 +729,12 @@ body:not(.find-open) [data-match-highlight-count="1"] .CodeMirror-selection-high
#help-popup .rules { #help-popup .rules {
padding: 0 15px; padding: 0 15px;
} }
#help-popup .rules li {
padding-top: .5em;
}
#help-popup .rules p {
margin: .25em 0;
}
#help-popup button { #help-popup button {
margin-right: 3px; margin-right: 3px;
} }
@ -817,6 +823,11 @@ body:not(.find-open) [data-match-highlight-count="1"] .CodeMirror-selection-high
#message-box.center.lint-config #message-box-contents { #message-box.center.lint-config #message-box-contents {
text-align: left; text-align: left;
} }
#help-popup .active-linter-rule {
font-weight: bold;
text-decoration: underline;
background-color: rgba(128, 128, 128, .2);
}
/************ CSS beautifier ************/ /************ CSS beautifier ************/
.beautify-options { .beautify-options {

View File

@ -57,6 +57,21 @@
])); ]));
cm = popup.codebox; cm = popup.codebox;
cm.focus(); cm.focus();
const rulesStr = getActiveRules().join('|');
if (rulesStr) {
const rx = new RegExp(`"(${rulesStr})"\\s*:`);
let line = 0;
cm.startOperation();
cm.eachLine(({text}) => {
const m = rx.exec(text);
if (m) {
const ch = m.index + 1;
cm.markText({line, ch}, {line, ch: ch + m[1].length}, {className: 'active-linter-rule'});
}
++line;
});
cm.endOperation();
}
cm.on('changes', updateConfigButtons); cm.on('changes', updateConfigButtons);
updateConfigButtons(); updateConfigButtons();
window.on('closeHelp', onConfigClose, {once: true}); window.on('closeHelp', onConfigClose, {once: true});
@ -74,9 +89,9 @@
const rule = RULES.csslint.find(rule => rule.id === ruleID); const rule = RULES.csslint.find(rule => rule.id === ruleID);
return rule && return rule &&
$create('li', [ $create('li', [
$create('b', $createLink(rule.url || baseUrl, rule.name)), $create('b', ruleID + ': '),
$create('br'), rule.url ? $createLink(`"${rule.url}"`, rule.name) : $create('span', `"${rule.name}"`),
rule.desc, $create('p', rule.desc),
]); ]);
}; };
} else { } else {
@ -86,14 +101,20 @@
rule === 'CssSyntaxError' ? rule : $createLink(baseUrl + rule, rule)); rule === 'CssSyntaxError' ? rule : $createLink(baseUrl + rule, rule));
} }
const header = t('linterIssuesHelp', '\x01').split('\x01'); const header = t('linterIssuesHelp', '\x01').split('\x01');
const activeRules = new Set([...linterMan.getIssues()].map(issue => issue.rule));
helpPopup.show(t('linterIssues'), helpPopup.show(t('linterIssues'),
$create([ $create([
header[0], headerLink, header[1], header[0], headerLink, header[1],
$create('ul.rules', [...activeRules].map(template)), $create('ul.rules', getActiveRules().map(template)),
$create('button', {onclick: linterMan.showLintConfig}, t('configureStyle')),
])); ]));
}; };
function getActiveRules() {
const all = [...linterMan.getIssues()].map(issue => issue.rule);
const uniq = new Set(all);
return [...uniq];
}
function getLexicalDepth(lexicalState) { function getLexicalDepth(lexicalState) {
let depth = 0; let depth = 0;
while ((lexicalState = lexicalState.prev)) { while ((lexicalState = lexicalState.prev)) {