diff --git a/.eslintrc b/.eslintrc new file mode 100644 index 0000000..b2c77b6 --- /dev/null +++ b/.eslintrc @@ -0,0 +1,120 @@ +{ + "root": true, + "parser": "babel-eslint", + "plugins": [ + "babel", + "react", + "import", + "react-hooks" + ], + "extends": [ + "eslint:recommended", + "plugin:react/recommended", + "plugin:promise/recommended" + ], + "env": { + "browser": true, + "es6": true, + "node": true + }, + "parserOptions": { + "ecmaVersion": 8, + "sourceType": "module", + "ecmaFeatures": { + "modules": true, + "jsx": true, + "experimentalObjectRestSpread": true, + "legacyDecorators": true + } + }, + "settings": { + "react": { + "version": "detect" + } + }, + "ignorePatterns": [ + "node_modules", + "build" + ], + "rules": { + "arrow-parens": "off", + "dot-notation": "off", + "eqeqeq": "off", + "import/no-extraneous-dependencies": ["error", {"devDependencies": ["./webpack.config.babel.js"]}], + "linebreak-style": "off", + "no-plusplus": "off", + "no-prototype-builtins": "off", + "no-undef": "error", + "no-unused-expressions": ["error", { "allowShortCircuit": true, "allowTernary": true }], + "no-unused-vars": ["warn", { "argsIgnorePattern": "props|context|e", "varsIgnorePattern": "s" }], + "no-useless-escape": "off", + "object-curly-newline": "off", + "object-curly-spacing": ["warn", "always", {"objectsInObjects": false, "arraysInObjects": false}], + "prefer-destructuring": ["warn", { + "VariableDeclarator": { "array": false, "object": true }, + "AssignmentExpression": { "array": false, "object": false } + }, { + "enforceForRenamedProperties": false + }], + "promise/always-return": "off", + "promise/catch-or-return": ["warn", { + "allowFinally": true + }], + "promise/no-callback-in-promise": "off", + "react/display-name": "off", + "react/forbid-prop-types": "off", + "react/jsx-curly-brace-presence": "off", + "react/jsx-filename-extension": ["warn", { "extensions": [".js", ".jsx"] }], + "react/jsx-indent": ["warn", 2, { "indentLogicalExpressions": true }], + "react/jsx-indent-props": ["warn", 2], + "react/no-unescaped-entities": "off", + "react/prop-types": "off" + }, + "overrides": [ + { + "files": ["*.ts", "*.tsx"], + "env": { "browser": true, "es6": true, "node": true, "mocha": true }, + "extends": [ + "plugin:@typescript-eslint/eslint-recommended" + ], + "globals": { "Atomics": "readonly", "SharedArrayBuffer": "readonly" }, + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaFeatures": { "jsx": true }, + "ecmaVersion": 2019, + "sourceType": "module", + "project": "./tsconfig.json" + }, + "plugins": [ + "@typescript-eslint" + ], + "rules": { + "@typescript-eslint/no-unused-vars": [1, { + "args": "after-used" , + "argsIgnorePattern": "^_", + "ignoreRestSiblings": true + }], + "comma-dangle": ["error", { + "arrays": "only-multiline", + "objects": "only-multiline", + "imports": "never", + "exports": "never", + "functions": "never" + }], + "import/extensions": "off", + "import/named": "off", + "import/no-extraneous-dependencies": ["error", {"devDependencies": ["**/*.spec.ts"]}], + "import/no-unresolved": "off", + "lines-between-class-members": "off", + "no-param-reassign": "off", + "no-plusplus": "off", + "no-shadow": "off", + "no-unused-vars": "off", + "no-underscore-dangle": "off", + "no-use-before-define": "off", + "prefer-template": "error", + "react/jsx-filename-extension": [1, { "extensions": [".tsx"] }] + } + } + ] +} diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index cc204a1..0000000 --- a/.eslintrc.js +++ /dev/null @@ -1,56 +0,0 @@ -module.exports = { - "root": true, - "parser": "babel-eslint", - "extends": [ - "eslint:recommended", - "plugin:react/recommended" - ], - "env": { - "browser": true, - "es6": true, - "node": true - }, - "parserOptions": { - "ecmaVersion": 8, - "sourceType": "module", - "ecmaFeatures": { - "modules": true, - "jsx": true, - "experimentalObjectRestSpread": true, - "legacyDecorators": true - } - }, - "rules": { - "import/no-extraneous-dependencies": ["error", {"devDependencies": ["./webpack.config.babel.js"]}], - "react/forbid-prop-types": "off", - "react/jsx-filename-extension": "off", - "react/no-unescaped-entities": "off", - "react/prop-types": "off", - "react/display-name": "off", - "no-unused-expressions": ["error", { "allowShortCircuit": true, "allowTernary": true }], - "no-plusplus": "off", - "no-prototype-builtins": "off", - "object-curly-spacing": ["warn", "always", {"objectsInObjects": false, "arraysInObjects": false}], - "object-curly-newline": "off", - "linebreak-style": "off", - "eqeqeq": "off", - "dot-notation": "off", - "no-unused-vars": ["warn", { "argsIgnorePattern": "props|context|e", "varsIgnorePattern": "s" }], - "no-undef": "error", - "no-useless-escape": "off" - }, - "settings": { - "react": { - "version": require('./package.json').dependencies.react - } - }, - "plugins": [ - "react", - "import", - "react-hooks" - ], - "ignorePatterns": [ - "node_modules", - "build" - ] -} diff --git a/package-lock.json b/package-lock.json index d248b6f..076ab54 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3499,6 +3499,12 @@ "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.3.3.tgz", "integrity": "sha512-LKVP3cgXBT9RYj+t+9FDKwS5tdI+rPBXaNSkma7hvqy35lc7mAokC2zsqWJH0LaqIt3B962nuYI77hsJoT1gow==" }, + "@types/eslint-visitor-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", + "integrity": "sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==", + "dev": true + }, "@types/glob": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.2.tgz", @@ -3640,6 +3646,140 @@ "@types/node": "*" } }, + "@typescript-eslint/eslint-plugin": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-3.10.1.tgz", + "integrity": "sha512-PQg0emRtzZFWq6PxBcdxRH3QIQiyFO3WCVpRL3fgj5oQS3CDs3AeAKfv4DxNhzn8ITdNJGJ4D3Qw8eAJf3lXeQ==", + "dev": true, + "requires": { + "@typescript-eslint/experimental-utils": "3.10.1", + "debug": "^4.1.1", + "functional-red-black-tree": "^1.0.1", + "regexpp": "^3.0.0", + "semver": "^7.3.2", + "tsutils": "^3.17.1" + }, + "dependencies": { + "debug": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", + "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "regexpp": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", + "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", + "dev": true + }, + "semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "dev": true + } + } + }, + "@typescript-eslint/experimental-utils": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-3.10.1.tgz", + "integrity": "sha512-DewqIgscDzmAfd5nOGe4zm6Bl7PKtMG2Ad0KG8CUZAHlXfAKTF9Ol5PXhiMh39yRL2ChRH1cuuUGOcVyyrhQIw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.3", + "@typescript-eslint/types": "3.10.1", + "@typescript-eslint/typescript-estree": "3.10.1", + "eslint-scope": "^5.0.0", + "eslint-utils": "^2.0.0" + }, + "dependencies": { + "eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + } + } + }, + "@typescript-eslint/parser": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-3.10.1.tgz", + "integrity": "sha512-Ug1RcWcrJP02hmtaXVS3axPPTTPnZjupqhgj+NnZ6BCkwSImWk/283347+x9wN+lqOdK9Eo3vsyiyDHgsmiEJw==", + "dev": true, + "requires": { + "@types/eslint-visitor-keys": "^1.0.0", + "@typescript-eslint/experimental-utils": "3.10.1", + "@typescript-eslint/types": "3.10.1", + "@typescript-eslint/typescript-estree": "3.10.1", + "eslint-visitor-keys": "^1.1.0" + } + }, + "@typescript-eslint/types": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-3.10.1.tgz", + "integrity": "sha512-+3+FCUJIahE9q0lDi1WleYzjCwJs5hIsbugIgnbB+dSCYUxl8L6PwmsyOPFZde2hc1DlTo/xnkOgiTLSyAbHiQ==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-3.10.1.tgz", + "integrity": "sha512-QbcXOuq6WYvnB3XPsZpIwztBoquEYLXh2MtwVU+kO8jgYCiv4G5xrSP/1wg4tkvrEE+esZVquIPX/dxPlePk1w==", + "dev": true, + "requires": { + "@typescript-eslint/types": "3.10.1", + "@typescript-eslint/visitor-keys": "3.10.1", + "debug": "^4.1.1", + "glob": "^7.1.6", + "is-glob": "^4.0.1", + "lodash": "^4.17.15", + "semver": "^7.3.2", + "tsutils": "^3.17.1" + }, + "dependencies": { + "debug": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", + "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "dev": true + } + } + }, + "@typescript-eslint/visitor-keys": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-3.10.1.tgz", + "integrity": "sha512-9JgC82AaQeglebjZMgYR5wgmfUdUc+EitGUUMW8u2nDckaeimzW+VsoLV6FoimPv2id3VQzfjwBxEMVz08ameQ==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, "@webassemblyjs/ast": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", @@ -7151,6 +7291,15 @@ } } }, + "eslint-plugin-babel": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-babel/-/eslint-plugin-babel-5.3.1.tgz", + "integrity": "sha512-VsQEr6NH3dj664+EyxJwO4FCYm/00JhYb3Sk3ft8o+fpKuIfQ9TaW6uVUfvwMXHcf/lsnRIoyFPsLMyiWCSL/g==", + "dev": true, + "requires": { + "eslint-rule-composer": "^0.3.0" + } + }, "eslint-plugin-import": { "version": "2.22.1", "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.22.1.tgz", @@ -7193,6 +7342,12 @@ } } }, + "eslint-plugin-promise": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-4.2.1.tgz", + "integrity": "sha512-VoM09vT7bfA7D+upt+FjeBO5eHIJQBUWki1aPvB+vbNiHS3+oGIJGIeyBtKQTME6UPXXy3vV07OL1tHd3ANuDw==", + "dev": true + }, "eslint-plugin-react": { "version": "7.21.4", "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.21.4.tgz", @@ -7238,6 +7393,12 @@ "integrity": "sha512-EjxTHxjLKIBWFgDJdhKKzLh5q+vjTFrqNZX36uIxWS4OfyXe5DawqPj3U5qeJ1ngLwatjzQnmR0Lz0J0YH3kxw==", "dev": true }, + "eslint-rule-composer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz", + "integrity": "sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==", + "dev": true + }, "eslint-scope": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz", @@ -15646,6 +15807,15 @@ "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==", "dev": true }, + "tsutils": { + "version": "3.17.1", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.17.1.tgz", + "integrity": "sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + }, "tty-browserify": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", diff --git a/package.json b/package.json index 7e5194d..0ecb1e7 100644 --- a/package.json +++ b/package.json @@ -5,8 +5,8 @@ "scripts": { "start": "webpack serve --mode development --env development", "build": "webpack -p", - "lint": "tsc --noEmit; eslint '*/**/*.{js,ts,tsx}'", - "lint:fix": "tsc --noEmit; eslint '*/**/*.{js,ts,tsx}' --quiet --fix", + "lint": "tsc --noEmit && eslint '*/**/*.{js,ts,tsx}'", + "lint:fix": "tsc --noEmit && eslint '*/**/*.{js,ts,tsx}' --quiet --fix", "test": "cross-env TS_NODE_COMPILER_OPTIONS='{ \"module\": \"commonjs\" }' mocha -r ts-node/register -r ignore-styles -r jsdom-global/register src/**/*.spec.ts" }, "repository": { @@ -60,14 +60,18 @@ "@types/react": "^16.9.52", "@types/react-dom": "^16.9.8", "@types/react-router-dom": "^5.1.6", + "@typescript-eslint/eslint-plugin": "^3.3.0", + "@typescript-eslint/parser": "^3.3.0", "babel-eslint": "^10.1.0", "babel-loader": "^8.1.0", "chai": "^4.2.0", "cross-env": "^7.0.2", "css-loader": "^3.6.0", "eslint": "^6.8.0", + "eslint-plugin-babel": "^5.3.1", "eslint-plugin-import": "^2.22.1", "eslint-plugin-react": "^7.21.4", + "eslint-plugin-promise": "^4.2.1", "eslint-plugin-react-hooks": "^3.0.0", "ignore-styles": "^5.0.1", "jsdom": "^16.4.0", diff --git a/src/components/Snippets/Initiative.js b/src/components/Snippets/Initiative.js index acc7671..a085a7f 100644 --- a/src/components/Snippets/Initiative.js +++ b/src/components/Snippets/Initiative.js @@ -1,7 +1,7 @@ import React from 'react'; export function Initiative(props) { - let initiative = props.initiative; + let { initiative } = props; let image = null; if (["Danian", "Generic", "Mipedian", "OverWorld", "UnderWorld", "M'arrillian"].indexOf(initiative) > -1) { image = diff --git a/src/components/Snippets/_icons.js b/src/components/Snippets/_icons.js index 9a3e0ee..53ecd33 100644 --- a/src/components/Snippets/_icons.js +++ b/src/components/Snippets/_icons.js @@ -19,7 +19,7 @@ export function Rarity(props) { return ( {set !== 'PE1' && } - {!props.notext && {API.sets[props.set]} | {props.rarity}} + {!props.notext && <>{API.sets[props.set]} | {props.rarity}} ); } diff --git a/src/components/Snippets/index.js b/src/components/Snippets/index.js index d57ab66..0eba7b7 100644 --- a/src/components/Snippets/index.js +++ b/src/components/Snippets/index.js @@ -26,7 +26,7 @@ export function Loading(props) { } export function Splash(props) { - let image = props.image; + let { image } = props; return (
); diff --git a/src/components/SpreadsheetData.js b/src/components/SpreadsheetData.js index 682eaad..584a852 100644 --- a/src/components/SpreadsheetData.js +++ b/src/components/SpreadsheetData.js @@ -203,7 +203,8 @@ class API { this.buildCollection(collection) .then(() => { resolve(); - }); + }) + .catch(() => {}); } else resolve(); }); diff --git a/src/components/collection/List.js b/src/components/collection/List.js index 9c3d896..ed9c220 100644 --- a/src/components/collection/List.js +++ b/src/components/collection/List.js @@ -1,6 +1,6 @@ import React from 'react'; -import {observable} from "mobx"; -import {observer, inject} from 'mobx-react'; +import { observable } from "mobx"; +import { observer, inject } from 'mobx-react'; import Attack from './types/Attack'; import Battlegear from './types/Battlegear'; import Creature from './types/Creature'; @@ -16,11 +16,11 @@ export default class CardList extends React.Component { } render() { - let cards = this.props.cards; + let { cards } = this.props; if (cards.length == 1 && cards[0].text) { return ( -
{cards[0].text}
+
{cards[0].text}
); } return cards.map((card, i) => { diff --git a/src/components/collection/search/index.js b/src/components/collection/search/index.js index 9f22b23..f6909eb 100644 --- a/src/components/collection/search/index.js +++ b/src/components/collection/search/index.js @@ -165,9 +165,9 @@ export default class SearchCollection extends React.Component { } handleChange = (event, obj) => { - const target = event.target; + const { target } = event; const value = target.type === 'checkbox' ? target.checked : target.value; - const name = target.name; + const { name } = target; if (!obj) this.input[name] = value; else this.input[obj][name] = value; } @@ -262,7 +262,7 @@ export default class SearchCollection extends React.Component {
- +

diff --git a/src/components/collection/types/Attack.js b/src/components/collection/types/Attack.js index 5a7ec0f..45056e2 100644 --- a/src/components/collection/types/Attack.js +++ b/src/components/collection/types/Attack.js @@ -7,7 +7,7 @@ import { Rarity, Unique, Name, Element, Ability, AttackIcon } from '../../Snippe export default class Attack extends React.Component { render() { - let card = this.props.card; + let { card } = this.props; if (this.props.ext == false) return (
@@ -39,9 +39,9 @@ export default class Attack extends React.Component {
- {card.gsx$flavortext && + {card.gsx$flavortext && <> {card.gsx$flavortext}
-
} + } Art By: {card.gsx$artist}
diff --git a/src/components/collection/types/Battlegear.js b/src/components/collection/types/Battlegear.js index 0cd87a9..45ed7e7 100644 --- a/src/components/collection/types/Battlegear.js +++ b/src/components/collection/types/Battlegear.js @@ -7,7 +7,7 @@ import { Rarity, Unique, Name, Ability, BattlegearIcon } from '../../Snippets'; export default class Battlegear extends React.Component { render() { - let card = this.props.card; + let { card } = this.props; if (this.props.ext == false) return (
@@ -31,9 +31,9 @@ export default class Battlegear extends React.Component {
- {card.gsx$flavortext && + {card.gsx$flavortext && <> {card.gsx$flavortext}
-
} + } Art By: {card.gsx$artist}
diff --git a/src/components/collection/types/Creature.js b/src/components/collection/types/Creature.js index 67f087f..0da29cc 100644 --- a/src/components/collection/types/Creature.js +++ b/src/components/collection/types/Creature.js @@ -7,7 +7,7 @@ import { Rarity, Unique, Name, Element, Mugic, Discipline, Ability, Tribe } from export default class Creature extends React.Component { render() { - let card = this.props.card; + let { card } = this.props; let mugic = []; for (let i = 0; i < card.gsx$mugicability; i++) { @@ -56,27 +56,27 @@ export default class Creature extends React.Component { {/*chieftain*/ card.gsx$types.includes("Chieftain") && - (Minions use Brainwashed text. Minions may only play Generic Mugic.)
+ (Minions use Brainwashed text. Minions may only play Generic Mugic.)
} {card.gsx$flavortext}
-
-
- {card.gsx$courage} -
-
- {card.gsx$power} -
-
- {card.gsx$wisdom} -
-
- {card.gsx$speed} -
-
{card.gsx$energy} -
+
+
+ {card.gsx$courage}
+
+ {card.gsx$power} +
+
+ {card.gsx$wisdom} +
+
+ {card.gsx$speed} +
+
{card.gsx$energy} +
+
) else return ( @@ -100,11 +100,11 @@ export default class Creature extends React.Component { {/*chieftain*/ card.gsx$types.includes("Chieftain") && - (Minions use Brainwashed text. Minions may only play Generic Mugic.)
+ (Minions use Brainwashed text. Minions may only play Generic Mugic.)
} - {card.gsx$flavortext && + {card.gsx$flavortext && <> {card.gsx$flavortext}
-
} + } Art By: {card.gsx$artist} diff --git a/src/components/collection/types/Location.js b/src/components/collection/types/Location.js index d248c4f..286c2fb 100644 --- a/src/components/collection/types/Location.js +++ b/src/components/collection/types/Location.js @@ -8,7 +8,7 @@ import API from '../../SpreadsheetData'; export default class Location extends React.Component { render() { - let card = this.props.card; + let { card } = this.props; if (this.props.ext == false) return (
@@ -34,9 +34,9 @@ export default class Location extends React.Component { - {card.gsx$flavortext && + {card.gsx$flavortext && <> {card.gsx$flavortext}
-
} + } Art By: {card.gsx$artist}
diff --git a/src/components/collection/types/Mugic.js b/src/components/collection/types/Mugic.js index 9b98ff3..5e50c09 100644 --- a/src/components/collection/types/Mugic.js +++ b/src/components/collection/types/Mugic.js @@ -53,9 +53,9 @@ class Attack extends React.Component {
- {card.gsx$flavortext && + {card.gsx$flavortext && <> {card.gsx$flavortext}
-
} + } Art By: {card.gsx$artist} diff --git a/src/components/create/index.js b/src/components/create/index.js index 57f220a..ae097da 100644 --- a/src/components/create/index.js +++ b/src/components/create/index.js @@ -1,12 +1,12 @@ import React from 'react'; -import {observer, inject} from 'mobx-react'; +import { observer, inject } from 'mobx-react'; @inject((stores, props, context) => props) @observer export default class Create extends React.Component { render() { return (
This page is not yet available -
); + ); } } diff --git a/src/components/entercode/EnterTheCode.js b/src/components/entercode/EnterTheCode.js index 2f948e2..ed0d282 100644 --- a/src/components/entercode/EnterTheCode.js +++ b/src/components/entercode/EnterTheCode.js @@ -79,7 +79,7 @@ export default class EnterTheCode extends React.Component { return(
Pack Simulator + to={`/EnterTheCode/PackSimulator/`}>Pack Simulator

this.code = value} > - {props => ( -
- - - - - - - - - - - - - - -
+ {props => ( +
+ + + + + + + + + + + + + + +
)}

diff --git a/src/components/entercode/PackSimulator/generate.js b/src/components/entercode/PackSimulator/generate.js index 41f9eb7..53b67f4 100644 --- a/src/components/entercode/PackSimulator/generate.js +++ b/src/components/entercode/PackSimulator/generate.js @@ -77,15 +77,15 @@ class GenerateCard { } else { cards.push( -
-
- {gendisp(card.gsx$courage)} - {gendisp(card.gsx$power)} - {gendisp(card.gsx$wisdom)} - {gendisp(card.gsx$speed)} - {geneng(card.gsx$energy)} -
+
+
+ {gendisp(card.gsx$courage)} + {gendisp(card.gsx$power)} + {gendisp(card.gsx$wisdom)} + {gendisp(card.gsx$speed)} + {geneng(card.gsx$energy)}
+
); } diff --git a/src/components/entercode/PackSimulator/index.js b/src/components/entercode/PackSimulator/index.js index 6b36975..5509730 100644 --- a/src/components/entercode/PackSimulator/index.js +++ b/src/components/entercode/PackSimulator/index.js @@ -57,26 +57,26 @@ export default function (props) { } return ( -
- Enter The Code -

-
- - -

- -
-

-
{cards}
-
+
+ Enter The Code +

+
+ + +

+ +
+

+
{cards}
+
); } \ No newline at end of file diff --git a/src/components/entercode/index.js b/src/components/entercode/index.js index 18c3f64..4d7f2be 100644 --- a/src/components/entercode/index.js +++ b/src/components/entercode/index.js @@ -1,6 +1,6 @@ import React from 'react'; -import {observer, inject} from 'mobx-react'; -import {Route} from 'react-router-dom'; +import { observer, inject } from 'mobx-react'; +import { Route } from 'react-router-dom'; import EnterTheCode from './EnterTheCode'; import PackSimulator from './PackSimulator'; @@ -14,7 +14,7 @@ export default class Base extends React.Component { } function Routing(props) { - const match = props.match; + const { match } = props; return (
diff --git a/src/components/home/index.js b/src/components/home/index.js index 93b88f0..50801ea 100644 --- a/src/components/home/index.js +++ b/src/components/home/index.js @@ -1,8 +1,8 @@ import React from 'react'; -import {Link} from 'react-router-dom'; -import {Donate} from '../Snippets'; +import { Link } from 'react-router-dom'; +import { Donate } from '../Snippets'; import "./home.scss"; -import {observable} from 'mobx'; +import { observable } from 'mobx'; const GithubLink = () => ( ( ); -const LoreEntry = ({block, text, sets}) => { +const LoreEntry = ({ block, text, sets }) => { return (
{block}
- {text.map((entry, i) =>
)} + {text.map((entry, i) =>
)} {sets.map((set, i) => { if (set.text && set.text.length > 0) { return
@@ -31,7 +31,7 @@ const LoreEntry = ({block, text, sets}) => { } export default class Home extends React.Component { - state = {lore: []}; + state = { lore: []}; componentDidMount() { fetch("/src/json/starter_lore.json") @@ -39,11 +39,11 @@ export default class Home extends React.Component { return response.json(); }) .then((lore) => { - this.setState({"lore": lore}); + this.setState({ "lore": lore }); return; }) .catch(() => { - this.setState({"lore": [{"block": "Unable to load lore...", "text": []}]}) + this.setState({ "lore": [{ "block": "Unable to load lore...", "text": []}]}) }); } diff --git a/src/components/index.js b/src/components/index.js index 99569c0..68268cc 100644 --- a/src/components/index.js +++ b/src/components/index.js @@ -32,7 +32,7 @@ const Collection = loadable( /** * This function is to define beta routes */ -function BetaRoutingWrapper(props) { +function BetaRoutingWrapper() { return ( @@ -44,7 +44,7 @@ function BetaRoutingWrapper(props) { ); } -function Routing(props) { +function Routing() { return ( @@ -67,7 +67,7 @@ function Base(props) { const children = ; return ( - + <>
@@ -179,7 +179,7 @@ function Base(props) {
- + ); } diff --git a/src/components/mugicplayer/mugicparser.spec.ts b/src/components/mugicplayer/mugicparser.spec.ts index 6a847e6..4e0c7de 100644 --- a/src/components/mugicplayer/mugicparser.spec.ts +++ b/src/components/mugicplayer/mugicparser.spec.ts @@ -16,7 +16,7 @@ const cases = { Object.entries(cases).forEach(([key, value]) => { describe(key, () => { - it('should return ' + value.output, () => { + it(`should return ${value.output}`, () => { const tune = output(parseTune(value.input)); expect(tune).to.deep.equal(value.output); }); diff --git a/src/components/mugicplayer/mugicparser.ts b/src/components/mugicplayer/mugicparser.ts index b43f522..af91537 100644 --- a/src/components/mugicplayer/mugicparser.ts +++ b/src/components/mugicplayer/mugicparser.ts @@ -22,7 +22,7 @@ export const output = (seq: Note[]) => { // db notation uses duration (quarter notes) and pitch // 2Eb => E flat for 2 quarter notes export const parseTune = (input: string): Note[] => { - let seq: Note[] = []; + const seq: Note[] = []; let time = 0; console.log(input.split(" ")); input.split(" ").forEach((note) => { @@ -79,7 +79,7 @@ const parseNote = (pitch: string, seq: Note[]): {pitch: string, octave: number} if (seq.length === 0) return 4; const l = seq.length - 1; - const octave = seq[l].octave; + const { octave } = seq[l]; const current = pitchValue(pitch, octave); const previous = pitchValue(seq[l]); @@ -129,7 +129,7 @@ const parseNote = (pitch: string, seq: Note[]): {pitch: string, octave: number} if (octave > 5) octave = 5; - return {pitch, octave}; + return { pitch, octave }; } /* @@ -148,8 +148,8 @@ const parseNote = (pitch: string, seq: Note[]): {pitch: string, octave: number} const trend = (current: number, l: number, seq: Note[]): number => { if (l < 1) return seq[l].octave; - let prev = pitchValue(seq[l]); - let prev2 = pitchValue(seq[l-1]); + const prev = pitchValue(seq[l]); + const prev2 = pitchValue(seq[l-1]); console.log(prev2, prev, current); // downward trend @@ -176,7 +176,7 @@ const trend = (current: number, l: number, seq: Note[]): number => { * Takes two pitches and returns the distance between them */ const compare = (one: number, two: number): number => { - let res = Math.abs(one - two); + const res = Math.abs(one - two); if (res < 4) { return res; } diff --git a/src/components/mugicplayer/mugicplayer.ts b/src/components/mugicplayer/mugicplayer.ts index cb6e140..d726573 100644 --- a/src/components/mugicplayer/mugicplayer.ts +++ b/src/components/mugicplayer/mugicplayer.ts @@ -1,4 +1,4 @@ -import {Time, Transport, Synth, Part, PolySynth, EnvelopeCurve} from 'tone'; +import { Time, Transport, Synth, Part, PolySynth, EnvelopeCurve } from 'tone'; import { Note, parseTune } from './mugicparser'; diff --git a/src/components/mugicplayer/playbutton.tsx b/src/components/mugicplayer/playbutton.tsx index 56822ea..635f9df 100644 --- a/src/components/mugicplayer/playbutton.tsx +++ b/src/components/mugicplayer/playbutton.tsx @@ -1,11 +1,11 @@ import React from 'react'; -import {debounced} from '../debounce'; -import {MugicPlayer} from './mugicplayer'; +import { debounced } from '../debounce'; +import { MugicPlayer } from './mugicplayer'; const player = MugicPlayer.getInstance(); export default (props: any) => { const play = debounced(200, () => { player.play(props.notes); }); return ( - { play() }} /> + { play() }} /> ); }; diff --git a/src/components/portal/Category.js b/src/components/portal/Category.js index f234e0e..6b06a15 100644 --- a/src/components/portal/Category.js +++ b/src/components/portal/Category.js @@ -1,11 +1,11 @@ import React from 'react'; import Interactive from 'react-interactive'; -import {Link, Route} from 'react-router-dom'; -import {observable} from 'mobx'; -import {observer, inject} from 'mobx-react'; +import { Link, Route } from 'react-router-dom'; +import { observable } from 'mobx'; +import { observer, inject } from 'mobx-react'; import s from '../../styles/app.style'; import API from '../SpreadsheetData'; -import {Loading} from '../Snippets'; +import { Loading } from '../Snippets'; @inject((stores, props, context) => props) @observer export default class Category extends React.Component { @@ -22,7 +22,7 @@ export default class Category extends React.Component { render() { if (this.loaded == false) { - API.LoadDB([{'cards': this.type}, {'portal': this.type}]) + API.LoadDB([{ 'cards': this.type }, { 'portal': this.type }]) .then(() => { this.loaded = true; }); @@ -34,13 +34,13 @@ export default class Category extends React.Component { if (!data) return (
); return (
- - {card.gsx$name.split(",")[0]}
- -
+ {card.gsx$name.split(",")[0]}
+ +
); }; @@ -83,11 +83,11 @@ export default class Category extends React.Component { ); bottom_nav = ((tribe) ? - API.portal[this.type].chain().find({'gsx$tribe': tribe}).simplesort('gsx$name').data() + API.portal[this.type].chain().find({ 'gsx$tribe': tribe }).simplesort('gsx$name').data() : API.portal[this.type].chain().simplesort('gsx$name').data() ).map((card_portal, i) => { - let card_data = API.cards[this.type].findOne({'gsx$name': card_portal.gsx$name}); + let card_data = API.cards[this.type].findOne({ 'gsx$name': card_portal.gsx$name }); let url = ((tribe) ? `/portal/${this.props.type}/${card_portal.gsx$tribe}/${encodeURIComponent(card_portal.gsx$name)}` : @@ -107,26 +107,26 @@ export default class Category extends React.Component { bottom_nav = API.portal[this.type].data .sort((a, b) => (a.gsx$name > b.gsx$name) ? 1 : -1) .map((card_portal, i) => { - let card_data = API.cards[this.type].findOne({'gsx$name': card_portal.gsx$name}); + let card_data = API.cards[this.type].findOne({ 'gsx$name': card_portal.gsx$name }); return create_link(card_portal, card_data, i); }); } if (base_path) { return ( -
-
{cat_title}
-
{bottom_nav}
-
+
+
{cat_title}
+
{bottom_nav}
+
); } return ( -
-
{top_content}
-
{cat_title}
-
{bottom_nav}
-
+
+
{top_content}
+
{cat_title}
+
{bottom_nav}
+
); } } diff --git a/src/components/portal/Home.js b/src/components/portal/Home.js index 099b689..326446f 100644 --- a/src/components/portal/Home.js +++ b/src/components/portal/Home.js @@ -1,5 +1,5 @@ -import React, {Fragment} from 'react'; -import {observable} from "mobx"; +import React, { Fragment } from 'react'; +import { observable } from "mobx"; import API from '../SpreadsheetData'; export default class Home extends React.Component { diff --git a/src/components/portal/Search.js b/src/components/portal/Search.js index ca60d51..cba789a 100644 --- a/src/components/portal/Search.js +++ b/src/components/portal/Search.js @@ -1,12 +1,12 @@ import React from 'react'; import Interactive from 'react-interactive'; -import {Link} from 'react-router-dom'; +import { Link } from 'react-router-dom'; import API from '../SpreadsheetData'; -import {observable} from "mobx"; -import {observer, inject} from 'mobx-react'; +import { observable } from "mobx"; +import { observer, inject } from 'mobx-react'; import loki from 'lokijs'; import s from '../../styles/app.style'; -import {SearchButton} from '../Snippets'; +import { SearchButton } from '../Snippets'; @inject((stores, props, context) => props) @observer export default class SearchPortal extends React.Component { @@ -50,19 +50,20 @@ class DBSearch extends React.Component { render() { if (this.loaded == false) { API.LoadDB([ - {'portal': 'attacks'}, {'portal': 'battlegear'}, {'portal': 'creatures'}, {'portal': 'locations'}, {'portal': 'mugic'}, - {'cards': 'attacks'}, {'cards': 'battlegear'}, {'cards': 'creatures'}, {'cards': 'locations'}, {'cards': 'mugic'} + { 'portal': 'attacks' }, { 'portal': 'battlegear' }, { 'portal': 'creatures' }, { 'portal': 'locations' }, { 'portal': 'mugic' }, + { 'cards': 'attacks' }, { 'cards': 'battlegear' }, { 'cards': 'creatures' }, { 'cards': 'locations' }, { 'cards': 'mugic' } ]).then(() => { this.loaded = true; - }); + }) + .catch(() => {}) return (Loading...); } - let string = this.props.string; + let { string } = this.props; // No search if (string == "") { - return (
); + return (
); } const makeLink = (card, i) => { @@ -90,6 +91,21 @@ class DBSearch extends React.Component {
); }; + const create_link = (card, data, i, url) => { + // Prevent site from crashing due to misspelled/missing data + if (!data) return (
); + + return (
+ + {card.gsx$name.split(",")[0]}
+ +
+
); + }; + let filter = this.filter.addCollection('filter'); var pview = filter.addDynamicView('filter'); pview.applySimpleSort('gsx$name'); @@ -101,35 +117,35 @@ class DBSearch extends React.Component { let mugicResults = API.portal.mugic.chain(); // Attributes Background Details - attackResults = attackResults.find({'$or': [ - {'gsx$attributes': {'$regex': new RegExp(string, 'i')}}, - {'gsx$background': {'$regex': new RegExp(string, 'i')}}, - {'gsx$details': {'$regex': new RegExp(string, 'i')}} + attackResults = attackResults.find({ '$or': [ + { 'gsx$attributes': { '$regex': new RegExp(string, 'i') }}, + { 'gsx$background': { '$regex': new RegExp(string, 'i') }}, + { 'gsx$details': { '$regex': new RegExp(string, 'i') }} ]}); // Attributes Background Details - battlegearResults = battlegearResults.find({'$or': [ - {'gsx$attributes': {'$regex': new RegExp(string, 'i')}}, - {'gsx$background': {'$regex': new RegExp(string, 'i')}}, - {'gsx$details': {'$regex': new RegExp(string, 'i')}} + battlegearResults = battlegearResults.find({ '$or': [ + { 'gsx$attributes': { '$regex': new RegExp(string, 'i') }}, + { 'gsx$background': { '$regex': new RegExp(string, 'i') }}, + { 'gsx$details': { '$regex': new RegExp(string, 'i') }} ]}); // Appearance Background Special Abilities Details - creatureResults = creatureResults.find({'$or': [ - {'gsx$appearance': {'$regex': new RegExp(string, 'i')}}, - {'gsx$background': {'$regex': new RegExp(string, 'i')}}, - {'gsx$specialabilities': {'$regex': new RegExp(string, 'i')}}, - {'gsx$details': {'$regex': new RegExp(string, 'i')}} + creatureResults = creatureResults.find({ '$or': [ + { 'gsx$appearance': { '$regex': new RegExp(string, 'i') }}, + { 'gsx$background': { '$regex': new RegExp(string, 'i') }}, + { 'gsx$specialabilities': { '$regex': new RegExp(string, 'i') }}, + { 'gsx$details': { '$regex': new RegExp(string, 'i') }} ]}); // Local Features Background Details - locationResults = locationResults.find({'$or': [ - {'gsx$localfeatures': {'$regex': new RegExp(string, 'i')}}, - {'gsx$background': {'$regex': new RegExp(string, 'i')}}, - {'gsx$details': {'$regex': new RegExp(string, 'i')}} + locationResults = locationResults.find({ '$or': [ + { 'gsx$localfeatures': { '$regex': new RegExp(string, 'i') }}, + { 'gsx$background': { '$regex': new RegExp(string, 'i') }}, + { 'gsx$details': { '$regex': new RegExp(string, 'i') }} ]}); // Background Details - mugicResults = mugicResults.find({'$or': [ - {'gsx$background': {'$regex': new RegExp(string, 'i')}}, - {'gsx$details': {'$regex': new RegExp(string, 'i')}} + mugicResults = mugicResults.find({ '$or': [ + { 'gsx$background': { '$regex': new RegExp(string, 'i') }}, + { 'gsx$details': { '$regex': new RegExp(string, 'i') }} ]}); let temp; @@ -161,26 +177,26 @@ class DBSearch extends React.Component { // This prioritizes names in the results let names = [].concat( - API.portal.attacks.find({'gsx$name': {'$regex': new RegExp(string, 'i')}}), - API.portal.battlegear.find({'gsx$name': {'$regex': new RegExp(string, 'i')}}), - API.portal.creatures.find({'gsx$name': {'$regex': new RegExp(string, 'i')}}), - API.portal.locations.find({'gsx$name': {'$regex': new RegExp(string, 'i')}}), - API.portal.mugic.find({'gsx$name': {'$regex': new RegExp(string, 'i')}}), + API.portal.attacks.find({ 'gsx$name': { '$regex': new RegExp(string, 'i') }}), + API.portal.battlegear.find({ 'gsx$name': { '$regex': new RegExp(string, 'i') }}), + API.portal.creatures.find({ 'gsx$name': { '$regex': new RegExp(string, 'i') }}), + API.portal.locations.find({ 'gsx$name': { '$regex': new RegExp(string, 'i') }}), + API.portal.mugic.find({ 'gsx$name': { '$regex': new RegExp(string, 'i') }}), API.cards.attacks.chain() - .find({'gsx$name': {'$regex': new RegExp(string, 'i')}}) + .find({ 'gsx$name': { '$regex': new RegExp(string, 'i') }}) .where((obj) => {return (obj.gsx$splash != ('') )}).data(), API.cards.battlegear.chain() - .find({'gsx$name': {'$regex': new RegExp(string, 'i')}}) + .find({ 'gsx$name': { '$regex': new RegExp(string, 'i') }}) .where((obj) => {return (obj.gsx$splash != ('') )}).data(), // TODO after rewriting Single Creature // API.cards.creatures.chain() // .find({'gsx$name': {'$regex': new RegExp(string, 'i')}}) // .where((obj) => {return (obj.gsx$splash != ('') )}).data(), API.cards.locations.chain() - .find({'gsx$name': {'$regex': new RegExp(string, 'i')}}) + .find({ 'gsx$name': { '$regex': new RegExp(string, 'i') }}) .where((obj) => {return (obj.gsx$splash != ('') )}).data(), API.cards.mugic.chain() - .find({'gsx$name': {'$regex': new RegExp(string, 'i')}}) + .find({ 'gsx$name': { '$regex': new RegExp(string, 'i') }}) .where((obj) => {return (obj.gsx$splash != ('') )}).data() ).sort((a, b) => { a = a.gsx$name.toLowerCase(); @@ -193,19 +209,19 @@ class DBSearch extends React.Component { if (content.length == 0) { let artists = [].concat( API.cards.attacks.chain() - .find({'gsx$artist': {'$regex': new RegExp(string, 'i')}}) + .find({ 'gsx$artist': { '$regex': new RegExp(string, 'i') }}) .where((obj) => {return (obj.gsx$splash != ('') )}).data(), API.cards.battlegear.chain() - .find({'gsx$artist': {'$regex': new RegExp(string, 'i')}}) + .find({ 'gsx$artist': { '$regex': new RegExp(string, 'i') }}) .where((obj) => {return (obj.gsx$splash != ('') )}).data(), API.cards.creatures.chain() - .find({'gsx$artist': {'$regex': new RegExp(string, 'i')}}) + .find({ 'gsx$artist': { '$regex': new RegExp(string, 'i') }}) .where((obj) => {return (obj.gsx$splash != ('') )}).data(), API.cards.locations.chain() - .find({'gsx$artist': {'$regex': new RegExp(string, 'i')}}) + .find({ 'gsx$artist': { '$regex': new RegExp(string, 'i') }}) .where((obj) => {return (obj.gsx$splash != ('') )}).data(), API.cards.mugic.chain() - .find({'gsx$artist': {'$regex': new RegExp(string, 'i')}}) + .find({ 'gsx$artist': { '$regex': new RegExp(string, 'i') }}) .where((obj) => {return (obj.gsx$splash != ('') )}).data() ).sort((a, b) => { a = a.gsx$name.toLowerCase(); @@ -229,11 +245,11 @@ class DBSearch extends React.Component { return (

- {names.length > 0 && + {names.length > 0 && <>
Entries
{names}
-
} + }
{header}
{content}
); diff --git a/src/components/portal/Single/Attack.js b/src/components/portal/Single/Attack.js index 36361f2..c44c5fe 100644 --- a/src/components/portal/Single/Attack.js +++ b/src/components/portal/Single/Attack.js @@ -1,8 +1,8 @@ import React from 'react'; import API from '../../SpreadsheetData'; import s from '../../../styles/app.style'; -import {observer, inject} from 'mobx-react'; -import {PageNotFound} from '../../Snippets'; +import { observer, inject } from 'mobx-react'; +import { PageNotFound } from '../../Snippets'; import Single from './_base'; @inject((stores, props, context) => props) @observer @@ -20,28 +20,28 @@ export default class SingleAttack extends React.Component { let name = decodeURIComponent(path[3]); - const attack = API.portal.attacks.findOne({'gsx$name': name}); - const card_data = API.cards.attacks.findOne({'gsx$name': name}); + const attack = API.portal.attacks.findOne({ 'gsx$name': name }); + const card_data = API.cards.attacks.findOne({ 'gsx$name': name }); if (attack) { return ( -
- Attributes:
- {attack.gsx$attributes} -
-
-
- Background:
- {attack.gsx$background} -
-
-
- Details:
- {attack.gsx$details} -
- } + card={card_data} + col2={<> +
+ Attributes:
+ {attack.gsx$attributes} +
+
+
+ Background:
+ {attack.gsx$background} +
+
+
+ Details:
+ {attack.gsx$details} +
+ } /> ); } diff --git a/src/components/portal/Single/Battlegear.js b/src/components/portal/Single/Battlegear.js index d430da8..bf0501f 100644 --- a/src/components/portal/Single/Battlegear.js +++ b/src/components/portal/Single/Battlegear.js @@ -1,8 +1,8 @@ import React from 'react'; import API from '../../SpreadsheetData'; import s from '../../../styles/app.style'; -import {observer, inject} from 'mobx-react'; -import {PageNotFound} from '../../Snippets'; +import { observer, inject } from 'mobx-react'; +import { PageNotFound } from '../../Snippets'; import Single from './_base'; @inject((stores, props, context) => props) @observer @@ -20,13 +20,13 @@ export default class SingleBattlegear extends React.Component { let name = decodeURIComponent(path[3]); - const battlegear = API.portal.battlegear.findOne({'gsx$name': name}); - const card_data = API.cards.battlegear.findOne({'gsx$name': name}); + const battlegear = API.portal.battlegear.findOne({ 'gsx$name': name }); + const card_data = API.cards.battlegear.findOne({ 'gsx$name': name }); if (battlegear) { return ( + col2={<>
Attributes:
{battlegear.gsx$attributes} @@ -41,7 +41,7 @@ export default class SingleBattlegear extends React.Component { Details:
{battlegear.gsx$details}
- } + } />); } else if (card_data) { diff --git a/src/components/portal/Single/Creature.js b/src/components/portal/Single/Creature.js index 5188044..102a3e1 100644 --- a/src/components/portal/Single/Creature.js +++ b/src/components/portal/Single/Creature.js @@ -1,11 +1,11 @@ import React from 'react'; import Interactive from 'react-interactive'; -import {Link} from 'react-router-dom'; +import { Link } from 'react-router-dom'; import API from '../../SpreadsheetData'; import s from '../../../styles/app.style'; -import {observer, inject} from 'mobx-react'; +import { observer, inject } from 'mobx-react'; import Single from './_base'; -import {PageNotFound, Element, Mugic, Discipline, Ability, Tribe} from '../../Snippets'; +import { PageNotFound, Element, Mugic, Discipline, Ability, Tribe } from '../../Snippets'; function Artist(props) { let artists = []; @@ -32,7 +32,7 @@ export default class SingleCreature extends React.Component { if (path.length == 4) return decodeURIComponent(path[3]); })(); - const creature = API.portal.creatures.findOne({'gsx$name': name}); + const creature = API.portal.creatures.findOne({ 'gsx$name': name }); if (!creature) { return(); @@ -40,7 +40,7 @@ export default class SingleCreature extends React.Component { const tribe = creature.gsx$tribe; - const card_data = API.cards.creatures.findOne({'gsx$name': name}); + const card_data = API.cards.creatures.findOne({ 'gsx$name': name }); const locations = creature.gsx$location.split(/[;]+\s*/).map((item, i) => { return

{item}

; @@ -59,15 +59,15 @@ export default class SingleCreature extends React.Component { return ( + text={<>
- {creature.gsx$appearance && + {creature.gsx$appearance && <>
Appearance:
{creature.gsx$appearance}

-
} + }
Background:
{creature.gsx$background} @@ -103,13 +103,13 @@ export default class SingleCreature extends React.Component { {creature.gsx$weight}

- {card_data.gsx$artist && + {card_data.gsx$artist && <>
Artist(s):

-
} + }
Card ID: {card_data.gsx$id} @@ -183,7 +183,7 @@ export default class SingleCreature extends React.Component { Mugic Ability: {mugic}
- } + } />); } } diff --git a/src/components/portal/Single/Location.js b/src/components/portal/Single/Location.js index bf53566..f376e57 100644 --- a/src/components/portal/Single/Location.js +++ b/src/components/portal/Single/Location.js @@ -1,8 +1,8 @@ import React from 'react'; import API from '../../SpreadsheetData'; -import {observer, inject} from 'mobx-react'; +import { observer, inject } from 'mobx-react'; import Single from './_base'; -import {PageNotFound, Initiative} from '../../Snippets'; +import { PageNotFound, Initiative } from '../../Snippets'; @inject((stores, props, context) => props) @observer export default class SingleLocation extends React.Component { @@ -19,19 +19,19 @@ export default class SingleLocation extends React.Component { let name = decodeURIComponent(path[3]); - const location = API.portal.locations.findOne({'gsx$name': name}); - const card_data = API.cards.locations.findOne({'gsx$name': name}); + const location = API.portal.locations.findOne({ 'gsx$name': name }); + const card_data = API.cards.locations.findOne({ 'gsx$name': name }); if (location) { return ( + col0={<>
Initiative:
- } - col2={ + } + col2={<>
Local Features:
{location.gsx$localfeatures} @@ -46,19 +46,19 @@ export default class SingleLocation extends React.Component { Details:
{location.gsx$details}
-
} + } />); } else if (card_data) { if (card_data.gsx$splash) { return ( + col0={<>
Initiative:
- } + } />); } } diff --git a/src/components/portal/Single/Mugic.js b/src/components/portal/Single/Mugic.js index 4a4b400..97e3f4d 100644 --- a/src/components/portal/Single/Mugic.js +++ b/src/components/portal/Single/Mugic.js @@ -1,9 +1,9 @@ import React from 'react'; import API from '../../SpreadsheetData'; import s from '../../../styles/app.style'; -import {observer, inject} from 'mobx-react'; +import { observer, inject } from 'mobx-react'; import Single from './_base'; -import {PageNotFound, Mugic, Tribe} from '../../Snippets'; +import { PageNotFound, Mugic, Tribe } from '../../Snippets'; @inject((stores, props, context) => props) @observer export default class SingleMugic extends React.Component { @@ -22,8 +22,8 @@ export default class SingleMugic extends React.Component { if (path.length == 4) return decodeURIComponent(path[3]); })(); - const mugic = API.portal.mugic.findOne({'gsx$name': name}); - const card_data = API.cards.mugic.findOne({'gsx$name': name}); + const mugic = API.portal.mugic.findOne({ 'gsx$name': name }); + const card_data = API.cards.mugic.findOne({ 'gsx$name': name }); const cost = () => { let cost = []; @@ -44,7 +44,7 @@ export default class SingleMugic extends React.Component { if (mugic) { return ( + col0={<>
Tribe: @@ -54,8 +54,8 @@ export default class SingleMugic extends React.Component { Cost: {cost()}
- } - col2={ + } + col2={<>
Background:
{mugic.gsx$background} @@ -65,14 +65,14 @@ export default class SingleMugic extends React.Component { Details:
{mugic.gsx$details}
-
} + } />); } else if (card_data) { if (card_data.gsx$splash) { return ( + col0={<>
Tribe: @@ -82,7 +82,7 @@ export default class SingleMugic extends React.Component { Cost: {cost()}
- } + } />); } } diff --git a/src/components/portal/Single/_base.js b/src/components/portal/Single/_base.js index 26b844d..fe6209c 100644 --- a/src/components/portal/Single/_base.js +++ b/src/components/portal/Single/_base.js @@ -9,12 +9,12 @@ import s from '../../../styles/app.style'; // own "name" display function function Name(props) { let name = props.name.split(","); - return ( + return (<> {name[0]} { name.length > 1 &&
{name[1].trim()}
} -
); + ); } function Artist(props) { @@ -38,80 +38,83 @@ export default class Single extends React.Component { } render() { - let card = this.props.card; - return ( -
- × - -
- {card.gsx$splash && ( + let { card } = this.props; + return (<> +
+ × + +
+ {card.gsx$splash && (
- {/**/} + {/**/}
)} -
-
- -
-
- {this.props.text && -
{this.props.text}
- } - {!this.props.text && -
- {card.gsx$artist && -
- Artist(s): - -
-
-
} -
- Set: - {`${API.sets[card.gsx$set]} (${card.gsx$set})`} -
-
-
- Rarity: - -  {card.gsx$rarity} -
-
-
- Card ID: - {card.gsx$id} -
- {this.props.col0 && -
- {this.props.col0} -
} - {card.gsx$ability && -
-
- Ability: - -
-
} - {card.gsx$flavortext && -
-
- Card Flavor:
- {card.gsx$flavortext} -
-
} - {this.props.col1 && -
- this.props.col1 -
} -
- } - {!this.props.text && -
- {this.props.col2} -
- } +
+
+ +
- ); + {this.props.text && +
{this.props.text}
+ } + {!this.props.text && +
+ {card.gsx$artist && <> +
+ Artist(s): + +
+
+ } + {card.gsx$set && <> +
+ Set: + {`${API.sets[card.gsx$set]} (${card.gsx$set})`} +
+
+ + } +
+ Rarity: + + {card.gsx$rarity} +
+
+
+ Card ID: + {card.gsx$id} +
+ {this.props.col0 && <> +
+ {this.props.col0} + } + {card.gsx$ability && <> +
+
+ Ability: + +
+ } + {card.gsx$flavortext && <> +
+
+ Card Flavor:
+ {card.gsx$flavortext} +
+ } + {this.props.col1 && <> +
+ this.props.col1 + } +
+ } + {!this.props.text && +
+ {this.props.col2} +
+ } +
+ ); } } diff --git a/src/components/portal/Tribes.js b/src/components/portal/Tribes.js index a6bec5c..0bcf188 100644 --- a/src/components/portal/Tribes.js +++ b/src/components/portal/Tribes.js @@ -1,12 +1,12 @@ import React from 'react'; import Interactive from 'react-interactive'; -import {Link, Route} from 'react-router-dom'; -import {observable} from 'mobx'; -import {observer, inject} from 'mobx-react'; +import { Link, Route } from 'react-router-dom'; +import { observable } from 'mobx'; +import { observer, inject } from 'mobx-react'; import loki from 'lokijs'; import s from '../../styles/app.style'; import API from '../SpreadsheetData'; -import {Loading} from '../Snippets'; +import { Loading } from '../Snippets'; import Creature from './Single/Creature'; import Mugic from './Single/Mugic'; @@ -25,10 +25,11 @@ export default class Tribes extends React.Component { // -> /{Tribe}/Mugic || /{Tribe}/Creatures render() { if (this.loaded == false) { - API.LoadDB([{'cards': 'creatures'}, {'portal': 'creatures'}, {'cards': 'mugic'}, {'portal': 'mugic'}]) + API.LoadDB([{ 'cards': 'creatures' }, { 'portal': 'creatures' }, { 'cards': 'mugic' }, { 'portal': 'mugic' }]) .then(() => { this.loaded = true; - }); + }) + .catch(() => {}); return (); } @@ -43,11 +44,11 @@ export default class Tribes extends React.Component { let temp; - temp = API.portal.creatures.find({'gsx$tribe': tribe}); + temp = API.portal.creatures.find({ 'gsx$tribe': tribe }); temp.forEach((v) => { delete v.$loki }); filter.insert(temp); - temp = API.portal.mugic.find({'gsx$tribe': tribe}); + temp = API.portal.mugic.find({ 'gsx$tribe': tribe }); temp.forEach((v) => { delete v.$loki }); filter.insert(temp); @@ -58,12 +59,12 @@ export default class Tribes extends React.Component { let card_data, url; if (card.gsx$type == "Mugic") { - card_data = API.cards.mugic.findOne({'gsx$name': card.gsx$name}); + card_data = API.cards.mugic.findOne({ 'gsx$name': card.gsx$name }); url = "/portal/" + tribe + "/Mugic/" + encodeURIComponent(card.gsx$name); } if (card.gsx$type == "Creatures") { - card_data = API.cards.creatures.findOne({'gsx$name': card.gsx$name}); + card_data = API.cards.creatures.findOne({ 'gsx$name': card.gsx$name }); url = "/portal/" + tribe + "/Creatures/" + encodeURIComponent(card.gsx$name); } diff --git a/src/components/portal/index.js b/src/components/portal/index.js index 5cb8ed3..3cf41c4 100644 --- a/src/components/portal/index.js +++ b/src/components/portal/index.js @@ -1,12 +1,12 @@ import React from 'react'; -import {observable} from "mobx"; -import {observer, inject} from 'mobx-react'; -import {Link, Route} from 'react-router-dom'; +import { observable } from "mobx"; +import { observer, inject } from 'mobx-react'; +import { Link, Route } from 'react-router-dom'; import API from '../SpreadsheetData'; import Home from './Home'; import Search from './Search'; -import {SearchButton} from '../Snippets'; +import { SearchButton } from '../Snippets'; import Category from './Category'; import Tribes from './Tribes'; @@ -41,10 +41,10 @@ export default class Base extends React.Component { } function Routing(props) { - const url = props.match.url; + const { url } = props.match; return ( - + <> } /> } /> @@ -52,10 +52,10 @@ function Routing(props) { } /> } /> {API.tribes.map((tribe, i) => ( - + ))} - + ); } diff --git a/src/styles/style.js b/src/styles/style.js index bd0f697..0b12d41 100644 --- a/src/styles/style.js +++ b/src/styles/style.js @@ -58,7 +58,7 @@ export default { }} {...props} > - + {content} ),