420733b93a
* add Patch CSP option * show style version, size, and update age in manager * add scope selector to style search in manager * keep scroll position and selections in tab's session * directly install usercss from raw github links * ditch localStorage, use on-demand SessionStore proxy * simplify localization * allow <code> tag in i18n-html * keep nodes in HTML templates * API.getAllStyles is actually faster with code untouched * fix fitToContent when applies-to is taller than window * dedupe linter.enableForEditor calls * prioritize visible CMs in refreshOnViewListener * don't scroll to last style on editing a new one * delay colorview for invisible CMs * eslint comma-dangle error + autofix files * styleViaXhr: also toggle for disableAll pref * styleViaXhr: allow cookies for sandbox CSP * simplify notes in options * simplify getStylesViaXhr * oldUI fixups: * remove separator before 1st applies-to * center name bubbles * fix updateToc focus on a newly added section * fix fitToContent when cloning section * remove CSS `contain` as it makes no difference * replace overrides with declarative CSS + code cosmetics * simplify adjustWidth and make it work in FF
45 lines
1.2 KiB
JavaScript
45 lines
1.2 KiB
JavaScript
/* global linter editorWorker */
|
|
/* exported createMetaCompiler */
|
|
'use strict';
|
|
|
|
/**
|
|
* @param {CodeMirror} cm
|
|
* @param {function(meta:Object)} onUpdated
|
|
*/
|
|
function createMetaCompiler(cm, onUpdated) {
|
|
let meta = null;
|
|
let metaIndex = null;
|
|
let cache = [];
|
|
|
|
linter.register((text, options, _cm) => {
|
|
if (_cm !== cm) {
|
|
return;
|
|
}
|
|
const match = text.match(/\/\*!?\s*==userstyle==[\s\S]*?==\/userstyle==\s*\*\//i);
|
|
if (!match) {
|
|
return [];
|
|
}
|
|
if (match[0] === meta && match.index === metaIndex) {
|
|
return cache;
|
|
}
|
|
return editorWorker.metalint(match[0])
|
|
.then(({metadata, errors}) => {
|
|
if (errors.every(err => err.code === 'unknownMeta')) {
|
|
onUpdated(metadata);
|
|
}
|
|
cache = errors.map(err =>
|
|
({
|
|
from: cm.posFromIndex((err.index || 0) + match.index),
|
|
to: cm.posFromIndex((err.index || 0) + match.index),
|
|
message: err.code && chrome.i18n.getMessage(`meta_${err.code}`, err.args) || err.message,
|
|
severity: err.code === 'unknownMeta' ? 'warning' : 'error',
|
|
rule: err.code,
|
|
})
|
|
);
|
|
meta = match[0];
|
|
metaIndex = match.index;
|
|
return cache;
|
|
});
|
|
});
|
|
}
|