diff --git a/.eslintrc b/.eslintrc
index 0364accf..2787d782 100644
--- a/.eslintrc
+++ b/.eslintrc
@@ -23,18 +23,23 @@
},
"rules": {
+ "arrow-parens": "error",
+ "arrow-spacing": "error",
"block-scoped-var": "warn",
"brace-style": ["warn", "1tbs"],
"camelcase": "error",
"comma-dangle": ["error", "never"],
"comma-spacing": "error",
"consistent-return": "warn",
+ "constructor-super": "error",
"dot-notation": ["error", { "allowKeywords": false }],
"eol-last": "error",
"eqeqeq": ["error", "smart"],
"guard-for-in": "error",
"indent": ["error", 2, {"SwitchCase": 1}],
+ "jsx-quotes": ["error", "prefer-single"],
"key-spacing": "warn",
+ "keyword-spacing": "error",
"linebreak-style": "error",
"max-depth": ["warn", 4],
"max-params": ["warn", 5],
@@ -42,15 +47,17 @@
"no-alert": "error",
"no-caller": "error",
"no-catch-shadow": "error",
+ "no-const-assign": "error",
"no-debugger": "error",
"no-delete-var": "error",
"no-div-regex": "warn",
"no-dupe-args": "error",
+ "no-dupe-class-members": "error",
"no-dupe-keys": "error",
"no-duplicate-case": "error",
+ "no-duplicate-imports": "error",
"no-else-return": "warn",
"no-empty-character-class": "error",
- "no-labels": "error",
"no-eval": "error",
"no-ex-assign": "error",
"no-extend-native": "warn",
@@ -63,6 +70,7 @@
"no-inner-declarations": "error",
"no-irregular-whitespace": "error",
"no-label-var": "error",
+ "no-labels": "error",
"no-lone-blocks": "error",
"no-lonely-if": "error",
"no-multi-spaces": "warn",
@@ -71,6 +79,7 @@
"no-negated-in-lhs": "warn",
"no-nested-ternary": "error",
"no-new-object": "error",
+ "no-new-symbol": "error",
"no-new-wrappers": "error",
"no-obj-calls": "error",
"no-octal": "error",
@@ -79,6 +88,7 @@
"no-redeclare": "error",
"no-shadow": "error",
"no-spaced-func": "error",
+ "no-this-before-super": "error",
"no-throw-literal": "error",
"no-trailing-spaces": "error",
"no-undef": "error",
@@ -89,19 +99,33 @@
"no-unused-expressions": "error",
"no-unused-vars": "error",
"no-use-before-define": ["error", "nofunc"],
+ "no-useless-rename": "error",
+ "no-var": "warn",
"no-with": "error",
"object-curly-spacing": ["error", "never"],
+ "prefer-arrow-callback": "warn",
+ "prefer-const": "error",
+ "prefer-spread": "error",
+ "prefer-template": "warn",
"quote-props": ["warn", "consistent-as-needed"],
"quotes": ["error", "single", "avoid-escape"],
"radix": "error",
- "react/jsx-uses-react": "error",
+ "react/jsx-closing-bracket-location": ["error", "line-aligned"],
+ "react/jsx-curly-spacing": "error",
+ "react/jsx-equals-spacing": "error",
+ "react/jsx-first-prop-new-line": ["error", "multiline"],
+ "react/jsx-indent": ["error", 2],
"react/jsx-no-bind": "error",
+ "react/jsx-uses-react": "error",
"react/jsx-uses-vars": "error",
+ "react/prefer-stateless-function": "error",
+ "react/require-render-return": "error",
+ "react/self-closing-comp": "error",
"semi": "error",
- "keyword-spacing": "error",
"space-before-function-paren": ["error", {"anonymous": "never", "named": "never"}],
"space-infix-ops": "error",
"space-unary-ops": ["error", { "words": true, "nonwords": false }],
+ "template-curly-spacing": "error",
"use-isnan": "error",
"valid-typeof": "error",
"wrap-iife": "error"
diff --git a/js/Actions.jsx b/js/Actions.jsx
index b7700607..37100e66 100644
--- a/js/Actions.jsx
+++ b/js/Actions.jsx
@@ -21,13 +21,13 @@ class Actions extends React.Component {
}
render() {
return
;
}
}
-module.exports = connect(state => state.media)(Actions);
+module.exports = connect((state) => state.media)(Actions);
diff --git a/js/Balance.jsx b/js/Balance.jsx
index 6a40a187..3d50063f 100644
--- a/js/Balance.jsx
+++ b/js/Balance.jsx
@@ -33,7 +33,7 @@ class Balance extends React.Component {
const offset = (sprite - 1) * 15;
const style = {
- backgroundPosition: '0 -' + offset + 'px'
+ backgroundPosition: `0 -${offset}px`
};
return state.media)(Balance);
+module.exports = connect((state) => state.media)(Balance);
diff --git a/js/Character.jsx b/js/Character.jsx
index 965d10e1..63e0de3e 100644
--- a/js/Character.jsx
+++ b/js/Character.jsx
@@ -2,7 +2,7 @@ import React from 'react';
module.exports = (props) => {
const char = '' + props.children;
- const className = 'character character-' + char.toLowerCase().charCodeAt(0);
+ const className = `character character-${char.toLowerCase().charCodeAt(0)}`;
return {props.children}
;
};
diff --git a/js/ClutterBar.jsx b/js/ClutterBar.jsx
index aac66df1..90b6855f 100644
--- a/js/ClutterBar.jsx
+++ b/js/ClutterBar.jsx
@@ -34,4 +34,4 @@ class ClutterBar extends React.Component {
}
}
-module.exports = connect(state => state.display)(ClutterBar);
+module.exports = connect((state) => state.display)(ClutterBar);
diff --git a/js/ContextMenu.jsx b/js/ContextMenu.jsx
index 7e05d006..8263b528 100644
--- a/js/ContextMenu.jsx
+++ b/js/ContextMenu.jsx
@@ -72,4 +72,4 @@ class ContextMenu extends React.Component {
}
}
-module.exports = connect(state => state.contextMenu)(ContextMenu);
+module.exports = connect((state) => state.contextMenu)(ContextMenu);
diff --git a/js/DragTarget.jsx b/js/DragTarget.jsx
index 3ac160e6..a3cc1cc9 100644
--- a/js/DragTarget.jsx
+++ b/js/DragTarget.jsx
@@ -20,7 +20,8 @@ class DragTarget extends React.Component {
return
+ onDrop={this.handleDrop}
+ >
{this.props.children}
;
}
diff --git a/js/Kbps.jsx b/js/Kbps.jsx
index 029fbc76..5f986501 100644
--- a/js/Kbps.jsx
+++ b/js/Kbps.jsx
@@ -4,12 +4,10 @@ import {connect} from 'react-redux';
import CharacterString from './CharacterString.jsx';
-class Kbps extends React.Component {
- render() {
- return
- {this.props.kbps}
- ;
- }
-}
+const Kbps = (props) => {
+ return
+ {props.kbps}
+ ;
+};
-module.exports = connect(state => state.media)(Kbps);
+module.exports = connect((state) => state.media)(Kbps);
diff --git a/js/Khz.jsx b/js/Khz.jsx
index 7f21b84a..ac29eeae 100644
--- a/js/Khz.jsx
+++ b/js/Khz.jsx
@@ -4,12 +4,10 @@ import {connect} from 'react-redux';
import CharacterString from './CharacterString.jsx';
-class Khz extends React.Component {
- render() {
- return
- {this.props.khz}
- ;
- }
-}
+const Khz = (props) => {
+ return
+ {props.khz}
+ ;
+};
-module.exports = connect(state => state.media)(Khz);
+module.exports = connect((state) => state.media)(Khz);
diff --git a/js/MainWindow.jsx b/js/MainWindow.jsx
index 1debe9a4..039daebd 100644
--- a/js/MainWindow.jsx
+++ b/js/MainWindow.jsx
@@ -81,9 +81,9 @@ const MainWindow = (props) => {
-
+
;
};
-module.exports = connect(state => state)(MainWindow);
+module.exports = connect((state) => state)(MainWindow);
diff --git a/js/Marquee.jsx b/js/Marquee.jsx
index 2176e742..e039c123 100644
--- a/js/Marquee.jsx
+++ b/js/Marquee.jsx
@@ -117,4 +117,4 @@ export {
loopText,
Marquee
};
-export default connect(state => state)(Marquee);
+export default connect((state) => state)(Marquee);
diff --git a/js/MonoStereo.jsx b/js/MonoStereo.jsx
index a2eb0f88..9c92241b 100644
--- a/js/MonoStereo.jsx
+++ b/js/MonoStereo.jsx
@@ -9,4 +9,4 @@ const MonoStereo = (props) => {
;
};
-module.exports = connect(state => state.media)(MonoStereo);
+module.exports = connect((state) => state.media)(MonoStereo);
diff --git a/js/Position.jsx b/js/Position.jsx
index 26ae779e..bc33d01a 100644
--- a/js/Position.jsx
+++ b/js/Position.jsx
@@ -52,4 +52,4 @@ class Position extends React.Component {
}
}
-module.exports = connect(state => state)(Position);
+module.exports = connect((state) => state)(Position);
diff --git a/js/Repeat.jsx b/js/Repeat.jsx
index 4141e505..0fad4347 100644
--- a/js/Repeat.jsx
+++ b/js/Repeat.jsx
@@ -19,4 +19,4 @@ class Repeat extends React.Component {
}
}
-module.exports = connect(state => state.media)(Repeat);
+module.exports = connect((state) => state.media)(Repeat);
diff --git a/js/ShadeTime.jsx b/js/ShadeTime.jsx
index cddb411b..eac38aa0 100644
--- a/js/ShadeTime.jsx
+++ b/js/ShadeTime.jsx
@@ -29,4 +29,4 @@ class Time extends React.Component {
}
}
-module.exports = connect(state => state.media)(Time);
+module.exports = connect((state) => state.media)(Time);
diff --git a/js/Shuffle.jsx b/js/Shuffle.jsx
index c6c0b8ba..2241ec79 100644
--- a/js/Shuffle.jsx
+++ b/js/Shuffle.jsx
@@ -19,4 +19,4 @@ class Shuffle extends React.Component {
}
}
-module.exports = connect(state => state.media)(Shuffle);
+module.exports = connect((state) => state.media)(Shuffle);
diff --git a/js/Time.jsx b/js/Time.jsx
index 849e9cac..8c69f5c6 100644
--- a/js/Time.jsx
+++ b/js/Time.jsx
@@ -19,12 +19,12 @@ class Time extends React.Component {
const timeObj = getTimeObj(seconds);
return
{this.props.timeMode === 'REMAINING' &&
}
-
-
-
-
+
+
+
+
;
}
}
-module.exports = connect(state => state.media)(Time);
+module.exports = connect((state) => state.media)(Time);
diff --git a/js/Visualizer.jsx b/js/Visualizer.jsx
index 72e32acd..7453dafe 100644
--- a/js/Visualizer.jsx
+++ b/js/Visualizer.jsx
@@ -20,4 +20,4 @@ class Visualizer extends React.Component {
}
}
-module.exports = connect(state => state)(Visualizer);
+module.exports = connect((state) => state)(Visualizer);
diff --git a/js/Volume.jsx b/js/Volume.jsx
index 81be1514..0a706cc6 100644
--- a/js/Volume.jsx
+++ b/js/Volume.jsx
@@ -32,7 +32,7 @@ class Volume extends React.Component {
const offset = (sprite - 1) * 15;
const style = {
- backgroundPosition: '0 -' + offset + 'px'
+ backgroundPosition: `0 -${offset}px`
};
return state.media)(Volume);
+module.exports = connect((state) => state.media)(Volume);
diff --git a/js/browser.js b/js/browser.js
index f49114ef..54b32fc6 100644
--- a/js/browser.js
+++ b/js/browser.js
@@ -1,6 +1,6 @@
module.exports = function(base) {
- var supportsAudioApi = !!(base.AudioContext || base.webkitAudioContext);
- var supportsCanvas = !!(base.document.createElement('canvas').getContext);
+ const supportsAudioApi = !!(base.AudioContext || base.webkitAudioContext);
+ const supportsCanvas = !!(base.document.createElement('canvas').getContext);
this.isCompatible = supportsAudioApi && supportsCanvas;
};
diff --git a/js/hotkeys.js b/js/hotkeys.js
index bf8a3e7c..c0660ca1 100644
--- a/js/hotkeys.js
+++ b/js/hotkeys.js
@@ -1,9 +1,9 @@
import {play, pause, stop} from './actionCreators';
module.exports = function(winamp, store) {
- var keylog = [];
- var trigger = [78, 85, 76, 27, 76, 27, 83, 79, 70, 84];
- document.addEventListener('keydown', function(e){
+ let keylog = [];
+ const trigger = [78, 85, 76, 27, 76, 27, 83, 79, 70, 84];
+ document.addEventListener('keydown', (e) => {
if (e.ctrlKey) { // Is CTRL depressed?
switch (e.keyCode) {
// CTRL+D
diff --git a/js/winamp.js b/js/winamp.js
index c7d0cb75..0c6aadf5 100755
--- a/js/winamp.js
+++ b/js/winamp.js
@@ -27,7 +27,7 @@ module.exports = {
this.dispatch({type: 'SET_VOLUME', volume: options.volume});
this.dispatch({type: 'SET_BALANCE', balance: options.balance});
this.loadFromUrl(options.mediaFile.url, options.mediaFile.name);
- var skinFile = new MyFile();
+ const skinFile = new MyFile();
skinFile.setUrl(options.skinUrl);
this.setSkin(skinFile);
@@ -36,39 +36,37 @@ module.exports = {
},
_registerListeners: function() {
- var self = this;
-
this.windowManager.registerWindow(this.mainWindow);
- this.media.addEventListener('timeupdate', function() {
- self.dispatch({type: 'UPDATE_TIME_ELAPSED', elapsed: self.media.timeElapsed()});
+ this.media.addEventListener('timeupdate', () => {
+ this.dispatch({type: 'UPDATE_TIME_ELAPSED', elapsed: this.media.timeElapsed()});
// Legacy
- window.dispatchEvent(self.events.timeUpdated);
+ window.dispatchEvent(this.events.timeUpdated);
});
- this.media.addEventListener('visualizerupdate', function(analyser) {
- self.skin.visualizer.paintFrame(self.visualizerStyle, analyser);
+ this.media.addEventListener('visualizerupdate', (analyser) => {
+ this.skin.visualizer.paintFrame(this.visualizerStyle, analyser);
});
- this.media.addEventListener('ended', function() {
- self.skin.visualizer.clear();
- self.dispatch({type: 'MEDIA_IS_STOPPED'});
+ this.media.addEventListener('ended', () => {
+ this.skin.visualizer.clear();
+ this.dispatch({type: 'MEDIA_IS_STOPPED'});
});
- this.media.addEventListener('waiting', function() {
- self.dispatch({type: 'START_WORKING'});
+ this.media.addEventListener('waiting', () => {
+ this.dispatch({type: 'START_WORKING'});
});
- this.media.addEventListener('stopWaiting', function() {
- self.dispatch({type: 'STOP_WORKING'});
+ this.media.addEventListener('stopWaiting', () => {
+ this.dispatch({type: 'STOP_WORKING'});
});
- this.media.addEventListener('playing', function() {
- self.dispatch({type: 'MEDIA_IS_PLAYING'});
+ this.media.addEventListener('playing', () => {
+ this.dispatch({type: 'MEDIA_IS_PLAYING'});
});
- this.fileInput.onchange = function(e){
- self.loadFromFileReference(e.target.files[0]);
+ this.fileInput.onchange = (e) => {
+ this.loadFromFileReference(e.target.files[0]);
};
},
@@ -93,7 +91,7 @@ module.exports = {
seekForwardBy: function(seconds) {
this.media.seekToTime(this.media.timeElapsed() + seconds);
- window.dispatchEvent(self.events.timeUpdated);
+ window.dispatchEvent(this.events.timeUpdated);
},
toggleRepeat: function() {
@@ -114,7 +112,7 @@ module.exports = {
},
loadFromFileReference: function(fileReference) {
- var file = new MyFile();
+ const file = new MyFile();
file.setFileReference(fileReference);
if (new RegExp('(wsz|zip)$', 'i').test(fileReference.name)) {
this.skin.setSkinByFile(file);
@@ -132,7 +130,7 @@ module.exports = {
} else {
this.fileName = fileName;
}
- var file = new MyFile();
+ const file = new MyFile();
file.setUrl(url);
file.processBuffer(this._loadBuffer.bind(this));
},
@@ -156,8 +154,8 @@ module.exports = {
/* Listeners */
_loadBuffer: function(buffer) {
function setMetaData() {
- var kbps = '128';
- var khz = Math.round(this.media.sampleRate() / 1000).toString();
+ const kbps = '128';
+ const khz = Math.round(this.media.sampleRate() / 1000).toString();
this.dispatch({type: 'SET_MEDIA_KBPS', kbps: kbps});
this.dispatch({type: 'SET_MEDIA_KHZ', khz: khz});
this.dispatch({type: 'SET_CHANNELS_COUNT', channels: this.media.channels()});