From edf887412f311cc95931063e9758c8eec72f3208 Mon Sep 17 00:00:00 2001 From: Jason Park Date: Sun, 29 Apr 2018 00:19:30 -0500 Subject: [PATCH] Fix some of eslint errors --- .eslintrc.js | 3 +++ bin/temporary_action.js | 23 ++++++++----------- src/frontend/core/Randomize.js | 10 ++++++++ src/frontend/core/datas/GraphData.js | 20 ++++++++-------- .../core/renderers/Array2DRenderer/index.jsx | 20 ++++++++-------- .../renderers/Array2DRenderer/stylesheet.scss | 3 ++- .../core/renderers/GraphRenderer/index.jsx | 15 ++++++------ .../core/renderers/Renderer/index.jsx | 11 +++++++++ 8 files changed, 64 insertions(+), 41 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index 60a9734..1e2ef04 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -3,5 +3,8 @@ module.exports = { 'rules': { 'no-plusplus': 'off', 'no-mixed-operators': 'off', + 'no-bitwise': 'off', + 'import/no-unresolved': 'off', + 'import/extensions': 'off', } }; \ No newline at end of file diff --git a/bin/temporary_action.js b/bin/temporary_action.js index 4c11ffa..213db0e 100644 --- a/bin/temporary_action.js +++ b/bin/temporary_action.js @@ -1,5 +1,6 @@ const path = require('path'); const fs = require('fs'); +const lebab = require('lebab'); const categories = fs.readdirSync(path.resolve(__dirname, '..', 'algorithm')); for (const category of categories) { @@ -8,19 +9,13 @@ for (const category of categories) { for (const algorithm of algorithms) { if (algorithm.startsWith('.')) continue; const filepath = path.resolve(__dirname, '..', 'algorithm', category, algorithm, 'code.js'); - const code = fs.readFileSync(filepath, 'utf-8'); - const tracers = [ - 'Array1DTracer', - 'Array2DTracer', - 'ChartTracer', - 'GraphTracer', - 'LogTracer', - 'Randomize', - 'Tracer', - ]; - const used = tracers.filter(tracer => code.includes(tracer)); - const importLine = `import { ${used.join(', ')} } from 'algorithm-visualizer';\n\n`; - const newCode = importLine + code; - fs.writeFileSync(filepath, newCode, 'utf-8'); + const oldCode = fs.readFileSync(filepath, 'utf-8'); + try { + const { code: newCode, warnings } = lebab.transform(oldCode, ['let', 'arrow', 'multi-var', 'template', 'default-param', 'includes']); +// fs.writeFileSync(filepath, newCode, 'utf-8'); + } catch (e) { + console.log(filepath); + console.error(e); + } } } \ No newline at end of file diff --git a/src/frontend/core/Randomize.js b/src/frontend/core/Randomize.js index e6b35bb..ae51cd4 100644 --- a/src/frontend/core/Randomize.js +++ b/src/frontend/core/Randomize.js @@ -2,6 +2,15 @@ const integer = (min = 1, max = 9) => { return (Math.random() * (max - min + 1) | 0) + min; }; +const string = length => { + const choices = 'abcdefghijklmnopqrstuvwxyz'; + let text = ''; + for (let i = 0; i < length; i++) { + text += choices[integer(0, choices.length - 1)]; + } + return text; +}; + const array1D = (N, options) => { return array2D(1, N, options)[0]; }; @@ -41,6 +50,7 @@ const graph = (N = 5, options = {}) => { export default { integer, + string, array1D, array2D, graph, diff --git a/src/frontend/core/datas/GraphData.js b/src/frontend/core/datas/GraphData.js index 2a1fa4f..c575fe0 100644 --- a/src/frontend/core/datas/GraphData.js +++ b/src/frontend/core/datas/GraphData.js @@ -33,16 +33,16 @@ class GraphData extends Data { for (let i = 0; i < array2d.length; i++) { const id = i; const weight = null; - const visited = false; - this.graph.addNode(id, weight, visited); + const visitedCount = 0; + this.graph.addNode(id, weight, visitedCount); for (let j = 0; j < array2d.length; j++) { const value = array2d[i][j]; if (value) { const source = i; const target = j; const weight = weighted ? value : null; - const visited = false; - this.graph.addEdge(source, target, weight, visited); + const visitedCount = 0; + this.graph.addEdge(source, target, weight, visitedCount); } } } @@ -80,10 +80,10 @@ class GraphData extends Data { visitOrLeave(target, source, weight, visit) { const edge = this.graph.findEdge(source, target); - if (edge) edge.visited = visit; + if (edge) edge.visitedCount += visit ? 1 : -1; const node = this.graph.findNode(target); node.weight = weight; - node.visited = visit; + node.visitedCount += visit ? 1 : -1; this.render(); if (this.logData) { this.logData.print(visit ? (source || '') + ' -> ' + target : (source || '') + ' <- ' + target); @@ -108,14 +108,14 @@ class Graph { this.directed = directed; } - addNode(id, weight, visited, x = 0, y = 0) { + addNode(id, weight, visitedCount, x = 0, y = 0) { if (this.findNode(id)) return; - this.nodes.push({ id, weight, visited, x, y }); + this.nodes.push({ id, weight, visitedCount, x, y }); } - addEdge(source, target, weight, visited) { + addEdge(source, target, weight, visitedCount) { if (this.findEdge(source, target)) return; - this.edges.push({ source, target, weight, visited }); + this.edges.push({ source, target, weight, visitedCount }); } findNode(id) { diff --git a/src/frontend/core/renderers/Array2DRenderer/index.jsx b/src/frontend/core/renderers/Array2DRenderer/index.jsx index effa008..5f1ca80 100644 --- a/src/frontend/core/renderers/Array2DRenderer/index.jsx +++ b/src/frontend/core/renderers/Array2DRenderer/index.jsx @@ -8,23 +8,25 @@ class Array2DRenderer extends Renderer { const { data } = this.props.data; return ( -
+ + { data.map((row, i) => ( -
+
{ row.map((col, j) => ( -
- {col.value} -
+ )) } - + )) } - + +
+ {this.toString(col.value)} +
); } } diff --git a/src/frontend/core/renderers/Array2DRenderer/stylesheet.scss b/src/frontend/core/renderers/Array2DRenderer/stylesheet.scss index 7f9b05f..28ee13d 100644 --- a/src/frontend/core/renderers/Array2DRenderer/stylesheet.scss +++ b/src/frontend/core/renderers/Array2DRenderer/stylesheet.scss @@ -12,12 +12,13 @@ display: flex; align-items: center; justify-content: center; - width: 28em; + min-width: 28em; height: 28em; background-color: $theme-normal; border: 1em solid $theme-light; margin-right: -1em; margin-bottom: -1em; + padding: 0 4em; .value { font-size: 12em; diff --git a/src/frontend/core/renderers/GraphRenderer/index.jsx b/src/frontend/core/renderers/GraphRenderer/index.jsx index 4506dfc..402c0ee 100644 --- a/src/frontend/core/renderers/GraphRenderer/index.jsx +++ b/src/frontend/core/renderers/GraphRenderer/index.jsx @@ -58,8 +58,8 @@ class GraphRenderer extends Renderer { { - graph.edges.sort((a, b) => a.visited - b.visited).map(edge => { - const { source, target, weight, visited } = edge; + graph.edges.sort((a, b) => a.visitedCount - b.visitedCount).map(edge => { + const { source, target, weight, visitedCount } = edge; const { x: sx, y: sy } = graph.findNode(source); let { x: ex, y: ey } = graph.findNode(target); const mx = (sx + ex) / 2; @@ -76,12 +76,13 @@ class GraphRenderer extends Renderer { } return ( - + { weighted && - {weight} + {this.toString(weight)} } @@ -90,15 +91,15 @@ class GraphRenderer extends Renderer { } { graph.nodes.map(node => { - const { id, x, y, weight, visited } = node; + const { id, x, y, weight, visitedCount } = node; return ( - {id} { weighted && - {weight} + {this.toString(weight)} } ); diff --git a/src/frontend/core/renderers/Renderer/index.jsx b/src/frontend/core/renderers/Renderer/index.jsx index 1d64555..885062f 100644 --- a/src/frontend/core/renderers/Renderer/index.jsx +++ b/src/frontend/core/renderers/Renderer/index.jsx @@ -89,6 +89,17 @@ class Renderer extends React.Component { this.refresh(); } + toString(value) { + switch (typeof(value)) { + case 'number': + return value === Infinity ? '∞' : Number.isInteger(value) ? value.toString() : value.toFixed(3); + case 'boolean': + return value ? 'T' : 'F'; + default: + return value; + } + } + refresh() { this.forceUpdate(); } -- GitLab