diff --git a/.eslintrc.json b/.eslintrc.json
index 14ca4c8..4f4452d 100644
--- a/.eslintrc.json
+++ b/.eslintrc.json
@@ -77,7 +77,7 @@
"no-implied-eval": "error",
"no-inline-comments": "off",
"no-inner-declarations": ["error", "functions"],
- "no-invalid-this": "error",
+ "no-invalid-this": "off",
"no-iterator": "error",
"no-label-var": "error",
"no-labels": "error",
@@ -186,7 +186,9 @@
"arrow-body-style": "off",
"indent": "off",
"react/sort-comp": "off",
- "react/jsx-no-bind": "off"
+ "react/jsx-no-bind": "off",
+ "no-extra-semi": "off",
+ "compat/compat": "off"
},
"globals": {
"ArrayBuffer": true,
diff --git a/package.json b/package.json
index 8e0e4d0..75936f5 100644
--- a/package.json
+++ b/package.json
@@ -7,7 +7,7 @@
"build": "preact build --template src/index.html --no-prerender",
"serve": "preact build && preact serve",
"dev": "preact watch --template src/index.html --https --no-prerender",
- "lint": "eslint src/*.js src/components/*.jsx",
+ "lint": "eslint src",
"test": "jest ./tests",
"precommit": "lint-staged"
},
@@ -15,7 +15,10 @@
"extends": "eslint-config-synacor"
},
"eslintIgnore": [
- "build/*"
+ "build/*",
+ "src/lib/",
+ "src/tests/",
+ "src/CodeMirror.js"
],
"lint-staged": {
"*.{js,jsx,json,css,md}": [
diff --git a/src/analytics.js b/src/analytics.js
index 889eb76..3f6d656 100644
--- a/src/analytics.js
+++ b/src/analytics.js
@@ -1,6 +1,4 @@
-import {
- log
-} from "./utils";
+import { log } from './utils';
/* global ga */
@@ -13,10 +11,10 @@ export function trackEvent(category, action, label, value) {
if (window.ga) {
ga('send', 'event', category, action, label, value);
}
-};
+}
// if online, load after sometime
-if (false && navigator.onLine && !window.DEBUG) {
+if (navigator.onLine && !window.DEBUG) {
/* eslint-disable */
// prettier-ignore
diff --git a/src/components/ContentWrap.jsx b/src/components/ContentWrap.jsx
index cccc986..d14f8b1 100644
--- a/src/components/ContentWrap.jsx
+++ b/src/components/ContentWrap.jsx
@@ -559,7 +559,8 @@ export default class ContentWrap extends Component {
setTimeout(() => {
this.setPreviewContent(true);
}, 1500);
- function checkWindow() {
+
+ var intervalID = window.setInterval(checkWindow => {
if (this.detachedWindow && this.detachedWindow.closed) {
clearInterval(intervalID);
document.body.classList.remove('is-detached-mode');
@@ -569,8 +570,7 @@ export default class ContentWrap extends Component {
// getting reflected while detached window was open)
this.setPreviewContent(true);
}
- }
- var intervalID = window.setInterval(checkWindow.bind(this), 500);
+ }, 500);
}
onMessageFromConsole() {
diff --git a/src/components/Modals.js b/src/components/Modals.js
deleted file mode 100644
index 776e902..0000000
--- a/src/components/Modals.js
+++ /dev/null
@@ -1,7 +0,0 @@
-import { h, Component } from 'preact';
-
-export default class Header extends Component {
- render() {
- return ;
- }
-}
diff --git a/src/components/Notifications.jsx b/src/components/Notifications.jsx
index f17e0af..ef00cb0 100644
--- a/src/components/Notifications.jsx
+++ b/src/components/Notifications.jsx
@@ -23,11 +23,19 @@ export function Notifications(props) {
🚀 Popular libraries list updated. Thanks
-
+
@diomed
{' '}
&{' '}
-
+
@leninalbertolp
@@ -40,10 +48,18 @@ export function Notifications(props) {
🚀 Announcement: Hi! I am Kushagra Gour (creator of
Web Maker) and I have launched a
-
+
Patreon campaign
. If you love Web Maker, consider pledging to
-
+
support me
{' '}
:)
@@ -52,6 +68,7 @@ export function Notifications(props) {
Suggest features or report bugs.
@@ -63,6 +80,7 @@ export function Notifications(props) {
Please rate Web Maker
@@ -70,7 +88,7 @@ export function Notifications(props) {
Share it
diff --git a/src/components/SplitPane.jsx b/src/components/SplitPane.jsx
index c9e6942..cbd5cb0 100644
--- a/src/components/SplitPane.jsx
+++ b/src/components/SplitPane.jsx
@@ -33,16 +33,22 @@ export class SplitPane extends Component {
options.onDragStart = this.props.onDragStart;
}
+ /* eslint-disable new-cap */
this.splitInstance = Split(
this.props.children.map(node => '#' + node.attributes.id),
options
);
+ /* eslint-enable new-cap */
+
if (this.props.onSplit) {
this.props.onSplit(this.splitInstance);
}
}
render() {
+ /* eslint-disable no-unused-vars */
const { children, ...props } = this.props;
+ /* eslint-enable no-unused-vars */
+
return {this.props.children}
;
}
}
diff --git a/src/components/common.jsx b/src/components/common.jsx
index f3f840f..5cbb6ba 100644
--- a/src/components/common.jsx
+++ b/src/components/common.jsx
@@ -11,7 +11,10 @@ class Clickable extends Component {
this.props.onClick(e);
}
render() {
+ /* eslint-disable no-unused-vars */
const { onClick, Tag, ...props } = this.props;
+ /* eslint-enable no-unused-vars */
+
return ;
}
}
diff --git a/src/computes.js b/src/computes.js
index 826d2e6..40ee889 100644
--- a/src/computes.js
+++ b/src/computes.js
@@ -1,42 +1,45 @@
-import {
- deferred
-} from './deferred';
-import {
- addInfiniteLoopProtection
-} from './utils';
-import {
- HtmlModes,
- CssModes,
- JsModes
-} from './codeModes';
+import { deferred } from './deferred';
+import { addInfiniteLoopProtection } from './utils';
+import { HtmlModes, CssModes, JsModes } from './codeModes';
const esprima = require('esprima');
// computeHtml, computeCss & computeJs evaluate the final code according
// to whatever mode is selected and resolve the returned promise with the code.
-export function computeHtml(code, mode) {
+export function computeHtml(userCode, mode) {
+ var code = userCode;
var d = deferred();
if (mode === HtmlModes.HTML) {
d.resolve({
code
});
} else if (mode === HtmlModes.MARKDOWN) {
- d.resolve(window.marked ? {
- code: marked(code)
- } : {
- code
- });
+ d.resolve(
+ window.marked
+ ? {
+ code: marked(code)
+ }
+ : {
+ code
+ }
+ );
} else if (mode === HtmlModes.JADE) {
- d.resolve(window.jade ? {
- code: jade.render(code)
- } : {
- code
- });
+ d.resolve(
+ window.jade
+ ? {
+ code: jade.render(code)
+ }
+ : {
+ code
+ }
+ );
}
return d.promise;
}
-export function computeCss(code, mode, settings) {
+export function computeCss(userCode, mode, settings) {
+ var code = userCode;
+
var d = deferred();
var errors;
@@ -47,18 +50,21 @@ export function computeCss(code, mode, settings) {
} else if (mode === CssModes.SCSS || mode === CssModes.SASS) {
if (window.sass && code) {
window.sass.compile(
- code, {
+ code,
+ {
indentedSyntax: mode === CssModes.SASS
},
- function (result) {
+ function(result) {
// Something was wrong
if (result.line && result.message) {
errors = {
lang: 'css',
- data: [{
- lineNumber: result.line - 1,
- message: result.message
- }]
+ data: [
+ {
+ lineNumber: result.line - 1,
+ message: result.message
+ }
+ ]
};
}
d.resolve({
@@ -74,27 +80,29 @@ export function computeCss(code, mode, settings) {
}
} else if (mode === CssModes.LESS) {
less.render(code).then(
- function (result) {
+ function(result) {
d.resolve({
code: result.css
});
},
- function (error) {
+ function(error) {
errors = {
lang: 'css',
- data: [{
- lineNumber: error.line,
- message: error.message
- }]
+ data: [
+ {
+ lineNumber: error.line,
+ message: error.message
+ }
+ ]
};
d.resolve({
code: '',
errors
- })
+ });
}
);
} else if (mode === CssModes.STYLUS) {
- stylus(code).render(function (error, result) {
+ stylus(code).render(function(error, result) {
if (error) {
window.err = error;
// Last line of message is the actual message
@@ -102,10 +110,12 @@ export function computeCss(code, mode, settings) {
tempArr.pop(); // This is empty string in the end
errors = {
lang: 'css',
- data: [{
- lineNumber: +error.message.match(/stylus:(\d+):/)[1] - 298,
- message: tempArr.pop()
- }]
+ data: [
+ {
+ lineNumber: +error.message.match(/stylus:(\d+):/)[1] - 298,
+ message: tempArr.pop()
+ }
+ ]
};
}
d.resolve({
@@ -140,7 +150,15 @@ export function computeCss(code, mode, settings) {
return d.promise;
}
-export function computeJs(code, mode, shouldPreventInfiniteLoops, infiniteLoopTimeout) {
+/* eslint-disable max-params */
+/* eslint-disable complexity */
+export function computeJs(
+ userCode,
+ mode,
+ shouldPreventInfiniteLoops,
+ infiniteLoopTimeout
+) {
+ var code = userCode;
var d = deferred();
var errors;
@@ -157,18 +175,22 @@ export function computeJs(code, mode, shouldPreventInfiniteLoops, infiniteLoopTi
} catch (e) {
errors = {
lang: 'js',
- data: [{
- lineNumber: e.lineNumber - 1,
- message: e.description
- }]
+ data: [
+ {
+ lineNumber: e.lineNumber - 1,
+ message: e.description
+ }
+ ]
};
} finally {
if (shouldPreventInfiniteLoops !== false) {
// If errors are found in last parse, we don't run infinite loop
// protection otherwise it will again throw error.
- code = errors ? code : addInfiniteLoopProtection(code, {
- timeout: infiniteLoopTimeout
- });
+ code = errors
+ ? code
+ : addInfiniteLoopProtection(code, {
+ timeout: infiniteLoopTimeout
+ });
}
d.resolve({
@@ -188,16 +210,20 @@ export function computeJs(code, mode, shouldPreventInfiniteLoops, infiniteLoopTi
} catch (e) {
errors = {
lang: 'js',
- data: [{
- lineNumber: e.location.first_line,
- message: e.message
- }]
+ data: [
+ {
+ lineNumber: e.location.first_line,
+ message: e.message
+ }
+ ]
};
} finally {
if (shouldPreventInfiniteLoops !== false) {
- code = errors ? code : addInfiniteLoopProtection(code, {
- timeout: infiniteLoopTimeout
- });
+ code = errors
+ ? code
+ : addInfiniteLoopProtection(code, {
+ timeout: infiniteLoopTimeout
+ });
}
d.resolve({
code,
@@ -217,19 +243,23 @@ export function computeJs(code, mode, shouldPreventInfiniteLoops, infiniteLoopTi
} catch (e) {
errors = {
lang: 'js',
- data: [{
- lineNumber: e.lineNumber - 1,
- message: e.description
- }]
+ data: [
+ {
+ lineNumber: e.lineNumber - 1,
+ message: e.description
+ }
+ ]
};
} finally {
code = Babel.transform(code, {
presets: ['latest', 'stage-2', 'react']
}).code;
if (shouldPreventInfiniteLoops !== false) {
- code = errors ? code : addInfiniteLoopProtection(code, {
- timeout: infiniteLoopTimeout
- });
+ code = errors
+ ? code
+ : addInfiniteLoopProtection(code, {
+ timeout: infiniteLoopTimeout
+ });
}
d.resolve({
code,
@@ -256,13 +286,16 @@ export function computeJs(code, mode, shouldPreventInfiniteLoops, infiniteLoopTi
/* eslint-disable no-throw-literal */
errors = {
lang: 'js',
- data: [{
- message: code.diagnostics[0].messageText,
- lineNumber: ts.getLineOfLocalPosition(
- code.diagnostics[0].file,
- code.diagnostics[0].start
- ) - 1
- }]
+ data: [
+ {
+ message: code.diagnostics[0].messageText,
+ lineNumber:
+ ts.getLineOfLocalPosition(
+ code.diagnostics[0].file,
+ code.diagnostics[0].start
+ ) - 1
+ }
+ ]
};
}
code = code.outputText;
@@ -275,10 +308,10 @@ export function computeJs(code, mode, shouldPreventInfiniteLoops, infiniteLoopTi
code,
errors
});
- } catch (e) {
-
- }
+ } catch (e) {}
}
return d.promise;
}
+/* eslint-enable max-params */
+/* eslint-enable complexity */
diff --git a/src/utils.js b/src/utils.js
index 057d576..ebde9b3 100644
--- a/src/utils.js
+++ b/src/utils.js
@@ -300,7 +300,10 @@ export function loadJS(src) {
return d.promise;
}
+/* eslint-disable max-params */
export function getCompleteHtml(html, css, js, item, isForExport) {
+ /* eslint-enable max-params */
+
if (!item) {
return '';
}