diff --git a/background/usercss-helper.js b/background/usercss-helper.js
index be4e5716..e3d3d91f 100644
--- a/background/usercss-helper.js
+++ b/background/usercss-helper.js
@@ -81,16 +81,24 @@
sourceCode,
checkDup,
metaOnly,
+ vars,
}) {
- const task = buildMeta({sourceCode});
- return (metaOnly ? task : task.then(usercss.buildCode))
- .then(style => {
- if (!checkDup) {
- return {style};
- }
- return find(style)
- .then(dup => ({style, dup}));
- });
+ return usercss.buildMeta(sourceCode)
+ .then(style =>
+ Promise.all([
+ metaOnly ? style : doBuild(style),
+ checkDup ? find(style) : undefined
+ ])
+ )
+ .then(([style, dup]) => ({style, dup}));
+
+ function doBuild(style) {
+ if (vars) {
+ const oldStyle = {usercssData: {vars}};
+ usercss.assignVars(style, oldStyle);
+ }
+ return usercss.buildCode(style);
+ }
}
// Parse the source, apply customizations, report fatal/syntax errors
diff --git a/edit.html b/edit.html
index 01c91b83..4fe6708b 100644
--- a/edit.html
+++ b/edit.html
@@ -30,6 +30,7 @@
+
diff --git a/edit/live-preview.js b/edit/live-preview.js
index fe81de0b..c18cdca7 100644
--- a/edit/live-preview.js
+++ b/edit/live-preview.js
@@ -4,7 +4,6 @@ function createLivePreview() {
let previewer;
return {update};
- // {id, enabled, sourceCode, sections}
function update(data) {
if (!previewer) {
if (!data.id || !data.enabled) {
diff --git a/edit/source-editor.js b/edit/source-editor.js
index 56278681..22d10002 100644
--- a/edit/source-editor.js
+++ b/edit/source-editor.js
@@ -5,7 +5,7 @@ global createAppliesToLineWidget messageBox
global sectionsToMozFormat
global exclusions
global beforeUnload
-global createMetaCompiler linter
+global createMetaCompiler linter createLivePreview
*/
'use strict';
@@ -37,14 +37,19 @@ function createSourceEditor(style) {
editors.push(cm);
+ const livePreview = createLivePreview();
+ livePreview.enable(Boolean(style.id));
+
$('#enabled').onchange = function () {
const value = this.checked;
dirty.modify('enabled', style.enabled, value);
style.enabled = value;
+ updateLivePreview();
};
cm.on('changes', () => {
dirty.modify('sourceGeneration', savedGeneration, cm.changeGeneration());
+ updateLivePreview();
});
CodeMirror.commands.prevEditor = cm => nextPrevMozDocument(cm, -1);
@@ -87,6 +92,20 @@ function createSourceEditor(style) {
});
});
+ function updateLivePreview() {
+ if (!style.id) {
+ return;
+ }
+ API.buildUsercss({
+ sourceCode: cm.getValue(),
+ vars: style.usercssData.vars
+ })
+ .then(newStyle => {
+ delete newStyle.enabled;
+ livePreview.update(Object.assign({}, style, newStyle));
+ });
+ }
+
function initAppliesToLineWidget() {
const PREF_NAME = 'editor.appliesToLineWidget';
const widget = createAppliesToLineWidget(cm);
@@ -204,6 +223,7 @@ function createSourceEditor(style) {
styleId = style.id;
$('#preview-label').classList.remove('hidden');
updateMeta();
+ livePreview.enable(Boolean(style.id));
}
}