From 5ef5b666c2caa7961523f5566d0f480d564dd7fb Mon Sep 17 00:00:00 2001 From: ache Date: Sun, 4 Feb 2018 04:49:32 +0100 Subject: Work on the style guideline --- .eslintrc.json | 188 ++++++++++++++++++++++++++++++++++++++++++++++++++++ app.js | 98 ++++++++++++++++----------- package.json | 8 ++- public/js/qcm.js | 12 ++-- public/js/script.js | 8 +-- 5 files changed, 266 insertions(+), 48 deletions(-) create mode 100644 .eslintrc.json diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000..147e056 --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,188 @@ +{ + "parserOptions": { + "ecmaVersion": 6, + "sourceType": "module" + }, + + "env": { + "es6": true, + "node": true, + "mocha": true + }, + + "plugins": [], + + "globals": { + "document": false, + "navigator": false, + "window": false, + "expect": true + }, + + "rules": { + "accessor-pairs": 2, + "array-bracket-spacing": [1, "never"], + "arrow-spacing": [2, {"before": true, "after": true}], + "block-spacing": [2, "always"], + "brace-style": [2, "1tbs", {"allowSingleLine": true}], + "camelcase": [2, {"properties": "never"}], + "comma-dangle": [1, "always-multiline"], + "comma-spacing": [2, {"before": false, "after": true}], + "comma-style": [2, "last"], + "computed-property-spacing": [2, "never"], + "constructor-super": 2, + "curly": [2, "multi-line"], + "dot-location": [2, "property"], + "eol-last": [2, "always"], + "eqeqeq": [2, "allow-null"], + "func-call-spacing": [2, "never"], + "callback-return": [1, ["callback", "cb", "done"]], + "handle-callback-err": [2, "^(err|error)$"], + "indent": [2, 2, { + "SwitchCase": 1, + "VariableDeclarator": 1, + "outerIIFEBody": 1, + "FunctionDeclaration": { + "parameters": 1, + "body": 1 + }, + "FunctionExpression": { + "parameters": 1, + "body": 1 + } + }], + "key-spacing": [2, {"beforeColon": false, "afterColon": true}], + "keyword-spacing": [2, {"before": true, "after": true}], + "linebreak-style": [2, "unix"], + "max-len": ["error", { + "code": 100, + "ignoreRegExpLiterals": true, + "ignorePattern": "^\\s*const\\s.+=\\s*require\\s*\\(" + }], + "new-cap": [2, {"newIsCap": true, "capIsNew": false}], + "new-parens": 2, + "newline-per-chained-call": [2, {"ignoreChainWithDepth": 4}], + "no-array-constructor": 2, + "no-caller": 2, + "no-class-assign": 2, + "no-cond-assign": 2, + "no-console": [1, {"allow": ["error"]}], + "no-const-assign": 2, + "no-constant-condition": [2, {"checkLoops": false}], + "no-control-regex": 2, + "no-debugger": 2, + "no-delete-var": 2, + "no-dupe-args": 2, + "no-dupe-class-members": 2, + "no-dupe-keys": 2, + "no-duplicate-case": 2, + "no-duplicate-imports": 2, + "no-empty-character-class": 2, + "no-empty-pattern": 2, + "no-eval": 2, + "no-ex-assign": 2, + "no-extend-native": 2, + "no-extra-bind": 2, + "no-extra-boolean-cast": 2, + "no-extra-parens": [2, "functions"], + "no-fallthrough": 2, + "no-floating-decimal": 2, + "no-func-assign": 2, + "no-global-assign": 2, + "no-implied-eval": 2, + "no-inner-declarations": [2, "functions"], + "no-invalid-regexp": 2, + "no-irregular-whitespace": 2, + "no-iterator": 2, + "no-label-var": 2, + "no-labels": [2, {"allowLoop": false, "allowSwitch": false}], + "no-lone-blocks": 2, + "no-lonely-if": 2, + "no-mixed-operators": [2, { + "groups": [ + ["+", "-", "*", "/", "%", "**"], + ["&", "|", "^", "~", "<<", ">>", ">>>"], + ["==", "!=", "===", "!==", ">", ">=", "<", "<="], + ["&&", "||"], + ["in", "instanceof"] + ], + "allowSamePrecedence": false + }], + "no-mixed-spaces-and-tabs": 2, + "no-multi-spaces": 2, + "no-multi-str": 2, + "no-multiple-empty-lines": [2, {"max": 2}], + "no-native-reassign": 2, + "no-negated-in-lhs": 2, + "no-nested-ternary": 2, + "no-new": 2, + "no-new-func": 2, + "no-new-object": 2, + "no-new-require": 2, + "no-new-symbol": 2, + "no-new-wrappers": 2, + "no-obj-calls": 2, + "no-octal": 2, + "no-octal-escape": 2, + "no-path-concat": 2, + "no-proto": 2, + "no-redeclare": 2, + "no-regex-spaces": 2, + "no-return-assign": [2, "except-parens"], + "no-self-assign": 2, + "no-self-compare": 2, + "no-sequences": 2, + "no-shadow-restricted-names": 2, + "no-sparse-arrays": 2, + "no-tabs": 2, + "no-template-curly-in-string": 2, + "no-this-before-super": 2, + "no-throw-literal": 2, + "no-trailing-spaces": 2, + "no-undef": 2, + "no-undef-init": 2, + "no-unexpected-multiline": 2, + "no-unmodified-loop-condition": 2, + "no-unneeded-ternary": [2, {"defaultAssignment": false}], + "no-unreachable": 2, + "no-unsafe-finally": 2, + "no-unsafe-negation": 2, + "no-unused-vars": [2, {"vars": "all", "args": "none"}], + "no-useless-call": 2, + "no-useless-computed-key": 2, + "no-useless-constructor": 2, + "no-useless-escape": 2, + "no-useless-rename": 2, + "no-var": 2, + "no-whitespace-before-property": 2, + "no-with": 2, + "object-curly-spacing": [1, "never"], + "object-property-newline": [2, {"allowMultiplePropertiesPerLine": true}], + "one-var": [2, {"initialized": "never"}], + "operator-linebreak": [2, "after", {"overrides": {"?": "before", ":": "before"}}], + "padded-blocks": [0, "never"], + "prefer-template": 2, + "prefer-const": [2, {"destructuring": "any", "ignoreReadBeforeAssign": true}], + "quotes": [2, "single", {"avoidEscape": true, "allowTemplateLiterals": true}], + "rest-spread-spacing": [2, "never"], + "space-before-blocks": [2, "always"], + "space-before-function-paren": ["error", { + "anonymous": "always", + "named": "never", + "asyncArrow": "always" + }], + "space-in-parens": [2, "never"], + "space-infix-ops": 2, + "space-unary-ops": [2, {"words": true, "nonwords": false}], + "spaced-comment": [2, "always", + {"line": {"markers": ["*package", "!", ","]}, "block": {"balanced": true, "markers": ["*package", "!", ","], "exceptions": ["*"]}} + ], + "template-curly-spacing": [2, "never"], + "unicode-bom": [2, "never"], + "use-isnan": 2, + "valid-typeof": 2, + "wrap-iife": [2, "any", {"functionPrototypeMethods": true}], + "yield-star-spacing": [2, "both"], + "yoda": [2, "never"] + } +} diff --git a/app.js b/app.js index eb95838..85687e0 100644 --- a/app.js +++ b/app.js @@ -8,7 +8,7 @@ const path = 'md'; const app = express(); process.on('uncaughtException', err => { - console.error('[' + new Date() + '] > Error - ' + err); + console.error(`[${new Date()}] > Error - ${err}`); }); const report = require('vfile-reporter'); @@ -37,42 +37,46 @@ const rawButton = ' { +app.get(`/${path}/*`, (req, res) => { const url = decodeURI(req._parsedUrl.pathname); const query = req.query; - console.log('[' + new Date() + '] > ' + 200 + ' - ' + url); + console.log(`[${new Date()}] > ${200} - ${url}`); if (query && query.raw === 'true') { - res.sendFile(url, {root: '.', + res.sendFile(url, { + root: '.', dotfiles: 'deny', headers: { 'x-timestamp': Date.now(), - 'x-sent': true}}, err => { - if (err) { - console.log('Error : ', err); - } else { - console.log('Sent : ', url); - } - }); + 'x-sent': true, + }, + }, err => { + if (err) { + console.log('Error : ', err); + } else { + console.log('Sent : ', url); + } + } + ); return; } fs.readFile(url.substr(1), 'utf8', (err, data) => { @@ -80,8 +84,8 @@ app.get('/' + path + '/*', (req, res) => { return console.log(err); } -// Remark() - /* Debbug comment + // Remark() + /* Debbug comment const a = unified() .use(remark) .use(lineInput) @@ -93,20 +97,20 @@ app.get('/' + path + '/*', (req, res) => { */ toHTML(data, (err, file) => { - res.send(String(file) + useLandScript + - '' + rawButton + ''); + res.send(`${String(file) + useLandScript + }${rawButton}`); console.error(report(err || file)); }); }); }); app.get('/data', (req, res) => { - console.log('[' + new Date() + '] > ' + 200 + ' - ' + req.url); + console.log(`[${new Date()}] > ${200} - ${req.url}`); res.send(dirTree(path, {extensions: /\.md/})); }); app.get('/img/*', (req, res) => { - console.log('[' + new Date() + '] > ' + 200 + ' - ' + req.url); + console.log(`[${new Date()}] > ${200} - ${req.url}`); if (path === '/img/ic_info_black_48px.svg' || path === '/imr/ic_error_black_48px.svg' || path === '/imr/ic_good_black_48px.svg' || @@ -124,7 +128,7 @@ app.get('/img/*', (req, res) => { }); app.get('/', (req, res) => { - console.log('[' + new Date() + '] > ' + 200 + ' - ' + req.url); + console.log(`[${new Date()}] > ${200} - ${req.url}`); fs.readFile('public/index.html', 'utf8', (err, data) => { if (err) { return console.log(err); @@ -134,18 +138,38 @@ app.get('/', (req, res) => { }); app.get('*', (req, res) => { - console.error('[' + new Date() + '] > ' + 404 + ' - ' + req.url); + console.error(`[${new Date()}] > ${404} - ${req.url}`); fs.readFile('public/404.md', 'utf8', (err, data) => { if (err) { return console.log(err); } fs.readFile('public/css/style.css', 'utf8', (err, style) => { + if (err) { + let html = ''; + html += ''; + html += '

500 - Internal Server Error

'; + html += `Debug : ${err}`; + html += ''; + html += ''; + res.status(500).send(html); + return; + } toHTML(data, (err, file) => { + if (err) { + let html = ''; + html += ''; + html += '

500 - Internal Server Error

'; + html += 'Debug : 404 page can\'t be converted to HTML
'; + html += `Debug : ${err}`; + html += ''; + html += ''; + res.status(404).send(html); + } let html = ''; html += ''; - html += ''; + html += ``; html += ''; - html += ''; + html += ''; html += String(file); html += ''; html += ''; @@ -158,5 +182,5 @@ app.get('*', (req, res) => { const server = app.listen(8090, () => { const host = server.address().address; const port = server.address().port; - console.log('[' + new Date() + '] > App listening at http://%s:%s', host, port); + console.log(`[${new Date()}] > App listening at http://%s:%s`, host, port); }); diff --git a/package.json b/package.json index 675e828..0a1283b 100644 --- a/package.json +++ b/package.json @@ -37,6 +37,12 @@ "xo": "^0.18.2" }, "xo": { - "space": true + "space": true, + "rules": { + "comma-dangle": [ + "error", + "always-multiline" + ] + } } } diff --git a/public/js/qcm.js b/public/js/qcm.js index 3ce5724..6a09aa6 100644 --- a/public/js/qcm.js +++ b/public/js/qcm.js @@ -8,7 +8,7 @@ * */ -const check = (id => { +const check = id => { const fieldQCM = document.getElementById(id); Array.from(fieldQCM.getElementsByTagName('INPUT')).forEach(input => { @@ -16,11 +16,11 @@ const check = (id => { return; } - const label = document.querySelector('label[for=\'' + input.id + '\']'); + const label = document.querySelector(`label[for='${input.id}']`); if (input.checked) { - Array.from(label.getElementsByClassName('hiden_block_quote')).forEach((child => { + Array.from(label.getElementsByClassName('hiden_block_quote')).forEach(child => { child.classList.remove('hiden_block_quote'); - })); + }); } switch (input.className) { case '!': @@ -36,7 +36,7 @@ const check = (id => { // Empty } }); -}); +}; function shuffle(array) { let currentIndex = array.length; @@ -63,7 +63,7 @@ document.addEventListener('DOMContentLoaded', () => { listQCM.forEach(field => { let listInput = []; Array.from(field.getElementsByTagName('INPUT')).forEach(input => { - const label = document.querySelector('label[for=\'' + input.id + '\']'); + const label = document.querySelector(`label[for='${input.id}']`); listInput.push({input, label}); field.removeChild(input); field.removeChild(label); diff --git a/public/js/script.js b/public/js/script.js index e90198c..1bcb250 100644 --- a/public/js/script.js +++ b/public/js/script.js @@ -12,7 +12,7 @@ document.addEventListener('DOMContentLoaded', () => { document.getElementById('tree').appendChild(addDirectory(data)); Array.from(document.getElementsByTagName('a')).forEach(a => { - a.onclick = (function (e) { + a.onclick = function (e) { e.preventDefault(); e.stopPropagation(); const setMd = new XMLHttpRequest(); @@ -23,19 +23,19 @@ document.addEventListener('DOMContentLoaded', () => { }; setMd.open('GET', a.href); setMd.send(); - }); + }; }); Array.from(document.getElementsByClassName('directory')).forEach(dir => { dir.querySelectorAll('ul').forEach(ul => { ul.style.display = 'none'; }); - dir.onclick = (e => { + dir.onclick = e => { e.stopPropagation(); dir.querySelectorAll('ul').forEach(ul => { ul.style.display = ul.style.display === 'none' ? 'block' : 'none'; }); - }); + }; }); } }; -- cgit v1.2.3