reuse parserCache on subsequent saving of usercss
This commit is contained in:
parent
d2cba96e10
commit
2036819442
|
@ -1,7 +1,15 @@
|
|||
/* global parserlib */
|
||||
'use strict';
|
||||
|
||||
function parseMozFormat(mozStyle) {
|
||||
/**
|
||||
* Extracts @-moz-document blocks into sections and the code between them into global sections.
|
||||
* Puts the global comments into the following section to minimize the amount of global sections.
|
||||
* Doesn't move the comment with ==UserStyle== inside.
|
||||
* @param {string} code
|
||||
* @param {number} styleId - used to preserve parserCache on subsequent runs over the same style
|
||||
* @returns {{sections: Array, errors: Array}}
|
||||
*/
|
||||
function parseMozFormat({code, styleId}) {
|
||||
const CssToProperty = {
|
||||
'url': 'urls',
|
||||
'url-prefix': 'urlPrefixes',
|
||||
|
@ -12,6 +20,7 @@ function parseMozFormat(mozStyle) {
|
|||
const sectionStack = [{code: '', start: 0}];
|
||||
const errors = [];
|
||||
const sections = [];
|
||||
const mozStyle = code;
|
||||
|
||||
parser.addListener('startdocument', e => {
|
||||
const lastSection = sectionStack[sectionStack.length - 1];
|
||||
|
@ -62,7 +71,10 @@ function parseMozFormat(mozStyle) {
|
|||
errors.push(`${e.line}:${e.col} ${e.message.replace(/ at line \d.+$/, '')}`);
|
||||
});
|
||||
|
||||
parser.parse(mozStyle);
|
||||
parser.parse(mozStyle, {
|
||||
reuseCache: !parseMozFormat.styleId || styleId === parseMozFormat.styleId,
|
||||
});
|
||||
parseMozFormat.styleId = styleId;
|
||||
return {sections, errors};
|
||||
|
||||
function doAddSection(section) {
|
||||
|
|
|
@ -489,7 +489,11 @@ var usercss = (() => {
|
|||
Promise.resolve(
|
||||
builder.preprocess && builder.preprocess(sourceCode, sVars) ||
|
||||
sourceCode)
|
||||
.then(mozStyle => invokeWorker({action: 'parse', code: mozStyle}))
|
||||
.then(mozStyle => invokeWorker({
|
||||
action: 'parse',
|
||||
styleId: style.id,
|
||||
code: mozStyle,
|
||||
}))
|
||||
.then(({sections, errors}) => sections.length && sections || Promise.reject(errors))
|
||||
.then(sections => {
|
||||
style.sections = sections;
|
||||
|
|
|
@ -4,13 +4,16 @@
|
|||
self.importScripts('./parserlib.js');
|
||||
parserlib.css.Tokens[parserlib.css.Tokens.COMMENT].hide = false;
|
||||
|
||||
self.onmessage = ({data: {action = 'run', code, config}}) => {
|
||||
self.onmessage = ({data}) => {
|
||||
|
||||
const {action = 'run'} = data;
|
||||
|
||||
if (action === 'parse') {
|
||||
if (!self.parseMozFormat) self.importScripts('/js/moz-parser.js');
|
||||
self.postMessage(parseMozFormat(code));
|
||||
self.postMessage(parseMozFormat(data));
|
||||
return;
|
||||
}
|
||||
|
||||
if (!self.CSSLint) self.importScripts('./csslint.js');
|
||||
|
||||
switch (action) {
|
||||
|
@ -25,6 +28,7 @@ self.onmessage = ({data: {action = 'run', code, config}}) => {
|
|||
return;
|
||||
|
||||
case 'run': {
|
||||
const {code, config} = data;
|
||||
const results = CSSLint.verify(code, config).messages
|
||||
//.filter(m => !m.message.includes('/*[[') && !m.message.includes(']]*/'))
|
||||
.map(m => Object.assign(m, {rule: {id: m.rule.id}}));
|
||||
|
|
|
@ -1467,10 +1467,15 @@ self.parserlib = (() => {
|
|||
*/
|
||||
function start(newParser) {
|
||||
parser = newParser;
|
||||
if (!parser) return;
|
||||
if (!parser) {
|
||||
data.clear();
|
||||
stack.length = 0;
|
||||
generationBase = performance.now();
|
||||
return;
|
||||
}
|
||||
if (firstRun) firstRun = false;
|
||||
stream = parser._tokenStream;
|
||||
generation = generationBase = performance.now();
|
||||
generation = performance.now();
|
||||
trim();
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user