parent
b17eef4053
commit
19ebeedf6a
|
@ -1,5 +1,5 @@
|
||||||
/* global API msg */// msg.js
|
/* global API msg */// msg.js
|
||||||
/* global CHROME URLS stringAsRegExp tryRegExp tryURL */// toolbox.js
|
/* global CHROME URLS isEmptyObj stringAsRegExp tryRegExp tryURL */// toolbox.js
|
||||||
/* global bgReady compareRevision */// common.js
|
/* global bgReady compareRevision */// common.js
|
||||||
/* global calcStyleDigest styleCodeEmpty styleSectionGlobal */// sections-util.js
|
/* global calcStyleDigest styleCodeEmpty styleSectionGlobal */// sections-util.js
|
||||||
/* global db */
|
/* global db */
|
||||||
|
@ -467,7 +467,7 @@ const styleMan = (() => {
|
||||||
|
|
||||||
async function init() {
|
async function init() {
|
||||||
const styles = await db.exec('getAll') || [];
|
const styles = await db.exec('getAll') || [];
|
||||||
const updated = styles.filter(fixKnownProblems);
|
const updated = await Promise.all(styles.map(fixKnownProblems).filter(Boolean));
|
||||||
if (updated.length) {
|
if (updated.length) {
|
||||||
await db.exec('putMany', updated);
|
await db.exec('putMany', updated);
|
||||||
}
|
}
|
||||||
|
@ -479,7 +479,7 @@ const styleMan = (() => {
|
||||||
bgReady._resolveStyles();
|
bgReady._resolveStyles();
|
||||||
}
|
}
|
||||||
|
|
||||||
function fixKnownProblems(style) {
|
function fixKnownProblems(style, initIndex, initArray) {
|
||||||
let res = 0;
|
let res = 0;
|
||||||
for (const key in MISSING_PROPS) {
|
for (const key in MISSING_PROPS) {
|
||||||
if (!style[key]) {
|
if (!style[key]) {
|
||||||
|
@ -523,7 +523,17 @@ const styleMan = (() => {
|
||||||
if (!style.url) res = style.url = url;
|
if (!style.url) res = style.url = url;
|
||||||
if (!style.installationUrl) res = style.installationUrl = url;
|
if (!style.installationUrl) res = style.installationUrl = url;
|
||||||
}
|
}
|
||||||
return Boolean(res);
|
/* @import must precede `vars` that we add at beginning */
|
||||||
|
if (
|
||||||
|
initArray &&
|
||||||
|
!isEmptyObj((style.usercssData || {}).vars) &&
|
||||||
|
style.sections.some(({code}) =>
|
||||||
|
code.startsWith(':root {\n --') &&
|
||||||
|
/@import\s/i.test(code))
|
||||||
|
) {
|
||||||
|
return usercssMan.buildCode(style);
|
||||||
|
}
|
||||||
|
return res && style;
|
||||||
}
|
}
|
||||||
|
|
||||||
function urlMatchStyle(query, style) {
|
function urlMatchStyle(query, style) {
|
||||||
|
|
|
@ -4678,6 +4678,7 @@ self.parserlib = (() => {
|
||||||
//#endregion
|
//#endregion
|
||||||
//#region PUBLIC API
|
//#region PUBLIC API
|
||||||
|
|
||||||
|
/** @namespace parserlib */
|
||||||
return {
|
return {
|
||||||
css: {
|
css: {
|
||||||
Colors,
|
Colors,
|
||||||
|
|
|
@ -71,12 +71,15 @@ function styleCodeEmpty(code) {
|
||||||
if (!code) {
|
if (!code) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
let lastIndex = 0;
|
||||||
const rx = /\s+|\/\*([^*]|\*(?!\/))*(\*\/|$)|@namespace[^;]+;|@charset[^;]+;/giyu;
|
const rx = /\s+|\/\*([^*]|\*(?!\/))*(\*\/|$)|@namespace[^;]+;|@charset[^;]+;/giyu;
|
||||||
while (rx.exec(code)) {
|
while (rx.exec(code)) {
|
||||||
if (rx.lastIndex === code.length) {
|
lastIndex = rx.lastIndex;
|
||||||
|
if (lastIndex === code.length) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
styleCodeEmpty.lastIndex = lastIndex;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -12,7 +12,7 @@ const BUILDERS = Object.assign(Object.create(null), {
|
||||||
varDef = ':root {\n' + varDef + '}\n';
|
varDef = ':root {\n' + varDef + '}\n';
|
||||||
for (const section of sections) {
|
for (const section of sections) {
|
||||||
if (!styleCodeEmpty(section.code)) {
|
if (!styleCodeEmpty(section.code)) {
|
||||||
section.code = varDef + section.code;
|
spliceCssAfterGlobals(section, varDef, styleCodeEmpty.lastIndex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -165,3 +165,23 @@ function simplifyUsercssVars(vars) {
|
||||||
va.value = value;
|
va.value = value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function spliceCssAfterGlobals(section, newText, after) {
|
||||||
|
const {code} = section;
|
||||||
|
const RX_IMPORT = /@import\s/gi;
|
||||||
|
RX_IMPORT.lastIndex = after;
|
||||||
|
if (RX_IMPORT.test(code)) {
|
||||||
|
require(['/js/csslint/parserlib']); /* global parserlib */
|
||||||
|
const parser = new parserlib.css.Parser();
|
||||||
|
parser._tokenStream = new parserlib.css.TokenStream(code);
|
||||||
|
parser._sheetGlobals();
|
||||||
|
const {col, line, offset} = parser._tokenStream._token;
|
||||||
|
// normalizing newlines in non-usercss to match line:col from parserlib
|
||||||
|
if ((code.indexOf('\r') + 1 || 1e99) - 1 < offset) {
|
||||||
|
after = col + code.split('\n', line).reduce((len, s) => len + s.length + 1, 0);
|
||||||
|
} else {
|
||||||
|
after = offset + 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
section.code = (after ? code.slice(0, after) + '\n' : '') + newText + code.slice(after);
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user