Add linting

This commit is contained in:
Tyler Vigario 2020-06-01 20:43:11 -07:00
parent e0f897ea2c
commit 5f61b7a390
No known key found for this signature in database
GPG Key ID: 4D670648A0376AA4
12 changed files with 2077 additions and 869 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

12
web/.editorconfig Normal file
View File

@ -0,0 +1,12 @@
root = true
[*]
charset = utf-8
insert_final_newline = true
indent_style = space
indent_size = 2
trim_trailing_whitespace = true
quote_type = single
[*.json]
quote_type = double

36
web/.eslintrc.json Normal file
View File

@ -0,0 +1,36 @@
{
"env": {
"browser": true,
"es6": true,
"es2017": true,
"es2020": true,
"jquery": true
},
"plugins": [
"node",
"import",
"jsdoc"
],
"extends": [
"eslint:recommended",
"google",
"plugin:node/recommended-module",
"plugin:import/errors",
"plugin:import/warnings",
"plugin:jsdoc/recommended"
],
"globals": {
"Atomics": "readonly",
"SharedArrayBuffer": "readonly"
},
"parser": "babel-eslint",
"rules": {
"require-jsdoc": "off",
"valid-jsdoc": "off",
"jsdoc/require-jsdoc": "off",
"max-len": ["warn", { "code": 120 }],
"import/no-commonjs": "error",
"import/no-amd": "error",
"linebreak-style": "off"
}
}

1136
web/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -5,6 +5,8 @@
"scripts": { "scripts": {
"dev": "npm run development", "dev": "npm run development",
"development": "webpack --mode=development --config webpack.config.cjs --progress", "development": "webpack --mode=development --config webpack.config.cjs --progress",
"lint": "eslint --config .eslintrc.json src/js/ --ext .mjs",
"lint:fix": "npm run lint -- --fix",
"prod": "npm run production", "prod": "npm run production",
"production": "webpack --mode=production --config webpack.config.cjs --progress", "production": "webpack --mode=production --config webpack.config.cjs --progress",
"test": "echo \"Error: no test specified\" && exit 1" "test": "echo \"Error: no test specified\" && exit 1"
@ -24,9 +26,15 @@
"@babel/plugin-proposal-class-properties": "^7.10.1", "@babel/plugin-proposal-class-properties": "^7.10.1",
"@babel/preset-env": "^7.10.2", "@babel/preset-env": "^7.10.2",
"autoprefixer": "^9.8.0", "autoprefixer": "^9.8.0",
"babel-eslint": "^10.1.0",
"babel-loader": "^8.1.0", "babel-loader": "^8.1.0",
"core-js": "^3.6.5", "core-js": "^3.6.5",
"css-loader": "^3.5.3", "css-loader": "^3.5.3",
"eslint": "^7.1.0",
"eslint-config-google": "^0.14.0",
"eslint-plugin-import": "^2.20.2",
"eslint-plugin-jsdoc": "^26.0.2",
"eslint-plugin-node": "^11.1.0",
"html-webpack-plugin": "^4.3.0", "html-webpack-plugin": "^4.3.0",
"mini-css-extract-plugin": "^0.9.0", "mini-css-extract-plugin": "^0.9.0",
"postcss-loader": "^3.0.0", "postcss-loader": "^3.0.0",

View File

@ -1,17 +1,29 @@
// jQuery 3.x // eslint-disable-next-line no-unused-vars
import {$, jQuery} from 'jquery/src/jquery'; import {$, jQuery} from 'jquery/src/jquery';
// jQuery Migrate 3.x
import 'jquery-migrate/src/migrate'; import 'jquery-migrate/src/migrate';
// Popper 1.x
import 'popper.js'; import 'popper.js';
// Boostrap 4.x
import 'bootstrap/js/src/index'; import 'bootstrap/js/src/index';
// Old application code // Old application code
import './main'; import './main.mjs';
// New application code // New application code
import './index'; import Theme from './theme.mjs';
import {library, dom} from '@fortawesome/fontawesome-svg-core/index.es';
import {fas} from '@fortawesome/free-solid-svg-icons/index.es';
import {far} from '@fortawesome/free-regular-svg-icons/index.es';
import {fab} from '@fortawesome/free-brands-svg-icons/index.es';
library.add(fas, far, fab);
document.addEventListener('DOMContentLoaded', () => {
Theme.init();
// This is required to seach DOM and convert i tags to SVG
dom.i2svg();
document.getElementById('theme-switch-btn').addEventListener('click', () => {
Theme.swap();
});
});

View File

@ -1,18 +0,0 @@
import Theme from './theme';
import { library, dom } from '@fortawesome/fontawesome-svg-core/index.es';
import { fas } from '@fortawesome/free-solid-svg-icons/index.es';
import { far } from '@fortawesome/free-regular-svg-icons/index.es';
import { fab } from '@fortawesome/free-brands-svg-icons/index.es';
library.add(fas, far, fab);
document.addEventListener('DOMContentLoaded', () => {
Theme.init();
// FontAwesome
dom.i2svg();
document.getElementById('theme-switch-btn').addEventListener('click', () => {
Theme.swap();
});
});

File diff suppressed because it is too large Load Diff

View File

@ -1,7 +1,6 @@
export default class { export default class {
/** /**
* Internal state for dark theme activation. * @property {boolean} #dark Interal state for dark theme activation.
* @property {boolean}
* @private * @private
*/ */
static #dark = false; static #dark = false;
@ -19,6 +18,7 @@ export default class {
/** /**
* Set page theme and update local storage variable. * Set page theme and update local storage variable.
*
* @param {boolean} dark Whether to activate dark theme. * @param {boolean} dark Whether to activate dark theme.
*/ */
static set(dark = false) { static set(dark = false) {

17
web/src/js/util.js Normal file
View File

@ -0,0 +1,17 @@
export function isOverflown(element) {
return element.scrollHeight > element.clientHeight || element.scrollWidth > element.clientWidth;
}
export function setProgressBar(bar, progress, text='') {
const progStr = (progress*100).toString();
bar.setAttribute('aria-valuenow', progStr);
bar.style.width = progStr + '%';
bar.textContent = text;
}
export function secondsToStr(seconds) {
seconds = Math.floor(seconds);
const mins = Math.floor(seconds / 60);
const secs = seconds % 60;
return ('00' + mins).slice(-2) + ':' + ('00' + secs).slice(-2);
}

View File

@ -94,8 +94,7 @@
</tr> </tr>
<tr class="playlist-expand table-dark d-none"> <tr class="playlist-expand table-dark d-none">
<td colspan="4" class="text-center"> <td colspan="4" class="text-center">
<a class="text-muted" href="javascript:">See item <span class="playlist-expand-item-range"></span> on the playlist. <a class="text-muted" href="javascript:">See item <span class="playlist-expand-item-range"></span> on the playlist.</a>
</a>
</td> </td>
</tr> </tr>
<tr class="playlist-item-template d-none"> <tr class="playlist-item-template d-none">
@ -394,7 +393,7 @@
<i class="fas fa-play" aria-hidden="true"></i> <i class="fas fa-play" aria-hidden="true"></i>
</div> </div>
<div class="floating-button" style="bottom: 50px;" onclick="switchTheme()"> <div id="theme-switch-btn" class="floating-button" style="bottom: 50px;">
<i class="fas fa-lightbulb" aria-hidden="true"></i> <i class="fas fa-lightbulb" aria-hidden="true"></i>
</div> </div>