diff --git a/.esdoc.json b/.esdoc.json new file mode 100644 index 00000000..4d236594 --- /dev/null +++ b/.esdoc.json @@ -0,0 +1,103 @@ +{ + "source": "./src/app", + "includes": ["\\.js$", "\\.jsx$"], + "destination": "./docs", + "index": "./README.md", + "plugins": [ + { + "name": "esdoc-standard-plugin", + "option": { + "lint": { + "enable": false + }, + "coverage": { + "enable": false + }, + "accessor": { + "access": [ + "public", + "protected", + "private" + ], + "autoPrivate": true + }, + "undocumentIdentifier": { + "enable": true + }, + "unexportedIdentifier": { + "enable": false + }, + "typeInference": { + "enable": true + }, + "brand": { + "logo": "./src/images/logo/192x192.png", + "title": "Coriolis", + "description": "Coriolis Shipyard for Elite Dangerous", + "repository": "https://github.com/EDCD/coriolis", + "site": "https://coriolis.edcd.io", + "author": "https://github.com/edcd", + "image": "./src/images/logo/192x192.png" + } + } + }, + { + "name": "esdoc-ecmascript-proposal-plugin", + "option": { + "all": true + } + }, + { + "name": "esdoc-react-plugin" + }, + { + "name": "esdoc-standard-plugin", + "option": { + "lint": { + "enable": false + }, + "coverage": { + "enable": false + }, + "accessor": { + "access": [ + "public", + "protected", + "private" + ], + "autoPrivate": true + }, + "undocumentIdentifier": { + "enable": true + }, + "unexportedIdentifier": { + "enable": false + }, + "typeInference": { + "enable": true + }, + "brand": { + "logo": "./src/images/logo/192x192.png", + "title": "Coriolis", + "description": "Coriolis Shipyard for Elite Dangerous", + "repository": "https://github.com/EDCD/coriolis", + "site": "https://coriolis.edcd.io", + "author": "https://github.com/edcd", + "image": "./src/images/logo/192x192.png" + } + } + }, + { + "name": "esdoc-jsx-plugin", + "option": { + "enable": true + } + }, + { + "name": "esdoc-publish-html-plugin", + "option": { + "template": "./node_modules/esdoc-custom-theme/template" + } + } + ] +} \ No newline at end of file diff --git a/.eslintrc b/.eslintrc index 8e0f6cd1..d1c8bd1a 100644 --- a/.eslintrc +++ b/.eslintrc @@ -9,7 +9,8 @@ }, "env": { "browser": true, - "node": true + "node": true, + "es6": true }, "plugins": [ "react" diff --git a/.gitignore b/.gitignore index 13cf3ae0..76f6c3f1 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,5 @@ nginx.pid env *.swp .project +.vscode/ +docs/ \ No newline at end of file diff --git a/README.md b/README.md index f5a2dfb1..fd7ba711 100755 --- a/README.md +++ b/README.md @@ -23,6 +23,7 @@ Chat to us on [Discord](https://discord.gg/0uwCh6R62aPRjk9w)! See the [Developer's Guide](https://github.com/EDCD/coriolis/wiki/Developing-for-Coriolis) in the wiki. +Also see [the documentation site.](https://coriolis.willb.info/) ### Ship and Module Database diff --git a/package-lock.json b/package-lock.json index 7ee2b683..13b10ba3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -136,6 +136,12 @@ } } }, + "@types/node": { + "version": "10.5.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.5.1.tgz", + "integrity": "sha512-AFLl1IALIuyt6oK4AYZsgWVJ/5rnyzQWud7IebaZWWV3YmgtPZkQmYio9R5Ze/2pdd7XfqF5bP+hWS11mAKoOQ==", + "dev": true + }, "abab": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/abab/-/abab-1.0.4.tgz", @@ -2189,6 +2195,54 @@ "supports-color": "^2.0.0" } }, + "cheerio": { + "version": "1.0.0-rc.2", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.2.tgz", + "integrity": "sha1-S59TqBsn5NXawxwP/Qz6A8xoMNs=", + "dev": true, + "requires": { + "css-select": "~1.2.0", + "dom-serializer": "~0.1.0", + "entities": "~1.1.1", + "htmlparser2": "^3.9.1", + "lodash": "^4.15.0", + "parse5": "^3.0.1" + }, + "dependencies": { + "domhandler": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "dev": true, + "requires": { + "domelementtype": "1" + } + }, + "htmlparser2": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.9.2.tgz", + "integrity": "sha1-G9+HrMoPP55T+k/M6w9LTLsAszg=", + "dev": true, + "requires": { + "domelementtype": "^1.3.0", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^2.0.2" + } + }, + "parse5": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz", + "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==", + "dev": true, + "requires": { + "@types/node": "*" + } + } + } + }, "chokidar": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", @@ -2333,6 +2387,12 @@ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", "dev": true }, + "codemirror": { + "version": "5.39.0", + "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.39.0.tgz", + "integrity": "sha512-vpJRray/0ZCt9FiS7UcVr1JAm6OBdUt6TA/94Q7MScr8TnutVdQWh/WPr0migzaBPQmYvY7I9UZNvbsaLESIuQ==", + "dev": true + }, "color": { "version": "0.11.4", "resolved": "https://registry.npmjs.org/color/-/color-0.11.4.tgz", @@ -2353,6 +2413,12 @@ "color-name": "^1.1.1" } }, + "color-logger": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/color-logger/-/color-logger-0.0.6.tgz", + "integrity": "sha1-5WJF7ymCJlcRDHy3WpzXhstp7Rs=", + "dev": true + }, "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", @@ -4760,6 +4826,413 @@ "estraverse": "^4.1.1" } }, + "esdoc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/esdoc/-/esdoc-1.1.0.tgz", + "integrity": "sha512-vsUcp52XJkOWg9m1vDYplGZN2iDzvmjDL5M/Mp8qkoDG3p2s0yIQCIjKR5wfPBaM3eV14a6zhQNYiNTCVzPnxA==", + "dev": true, + "requires": { + "babel-generator": "6.26.1", + "babel-traverse": "6.26.0", + "babylon": "6.18.0", + "cheerio": "1.0.0-rc.2", + "color-logger": "0.0.6", + "escape-html": "1.0.3", + "fs-extra": "5.0.0", + "ice-cap": "0.0.4", + "marked": "0.3.19", + "minimist": "1.2.0", + "taffydb": "2.7.3" + }, + "dependencies": { + "babel-generator": { + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", + "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", + "dev": true, + "requires": { + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "detect-indent": "^4.0.0", + "jsesc": "^1.3.0", + "lodash": "^4.17.4", + "source-map": "^0.5.7", + "trim-right": "^1.0.1" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "esdoc-accessor-plugin": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/esdoc-accessor-plugin/-/esdoc-accessor-plugin-1.0.0.tgz", + "integrity": "sha1-eRukhy5sQDUVznSbE0jW8Ck62es=", + "dev": true + }, + "esdoc-brand-plugin": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/esdoc-brand-plugin/-/esdoc-brand-plugin-1.0.1.tgz", + "integrity": "sha512-Yv9j3M7qk5PSLmSeD6MbPsfIsEf8K43EdH8qZpE/GZwnJCRVmDPrZJ1cLDj/fPu6P35YqgcEaJK4E2NL/CKA7g==", + "dev": true, + "requires": { + "cheerio": "0.22.0" + }, + "dependencies": { + "cheerio": { + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.22.0.tgz", + "integrity": "sha1-qbqoYKP5tZWmuBsahocxIe06Jp4=", + "dev": true, + "requires": { + "css-select": "~1.2.0", + "dom-serializer": "~0.1.0", + "entities": "~1.1.1", + "htmlparser2": "^3.9.1", + "lodash.assignin": "^4.0.9", + "lodash.bind": "^4.1.4", + "lodash.defaults": "^4.0.1", + "lodash.filter": "^4.4.0", + "lodash.flatten": "^4.2.0", + "lodash.foreach": "^4.3.0", + "lodash.map": "^4.4.0", + "lodash.merge": "^4.4.0", + "lodash.pick": "^4.2.1", + "lodash.reduce": "^4.4.0", + "lodash.reject": "^4.4.0", + "lodash.some": "^4.4.0" + } + }, + "domhandler": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "dev": true, + "requires": { + "domelementtype": "1" + } + }, + "htmlparser2": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.9.2.tgz", + "integrity": "sha1-G9+HrMoPP55T+k/M6w9LTLsAszg=", + "dev": true, + "requires": { + "domelementtype": "^1.3.0", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^2.0.2" + } + } + } + }, + "esdoc-coverage-plugin": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/esdoc-coverage-plugin/-/esdoc-coverage-plugin-1.1.0.tgz", + "integrity": "sha1-OGmGnNf4eJH5cmJXh2laKZrs5Fw=", + "dev": true + }, + "esdoc-custom-theme": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/esdoc-custom-theme/-/esdoc-custom-theme-1.4.2.tgz", + "integrity": "sha512-vlK7upah872gYdO6qIEDgWO2LPmq2iH2995L2YjNu2ULyR75KsFslgWjTJmqn/bHHrFiJsWKuB4NK2lIwwPDKw==", + "dev": true, + "requires": { + "codemirror": "^5.34.0" + } + }, + "esdoc-ecmascript-proposal-plugin": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/esdoc-ecmascript-proposal-plugin/-/esdoc-ecmascript-proposal-plugin-1.0.0.tgz", + "integrity": "sha1-OQ3FZWuoooMOOdujVw15E43y/9k=", + "dev": true + }, + "esdoc-external-ecmascript-plugin": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/esdoc-external-ecmascript-plugin/-/esdoc-external-ecmascript-plugin-1.0.0.tgz", + "integrity": "sha1-ePVl1KDFGFrGMVJhTc4f4ahmiNs=", + "dev": true, + "requires": { + "fs-extra": "1.0.0" + }, + "dependencies": { + "fs-extra": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-1.0.0.tgz", + "integrity": "sha1-zTzl9+fLYUWIP8rjGR6Yd/hYeVA=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "klaw": "^1.0.0" + } + }, + "jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + } + } + }, + "esdoc-integrate-manual-plugin": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/esdoc-integrate-manual-plugin/-/esdoc-integrate-manual-plugin-1.0.0.tgz", + "integrity": "sha1-GFSmqhwIEDXXyMUeO91PtlqkcRw=", + "dev": true + }, + "esdoc-integrate-test-plugin": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/esdoc-integrate-test-plugin/-/esdoc-integrate-test-plugin-1.0.0.tgz", + "integrity": "sha1-4tDQAJD38MNeXS8sAzMnp55T5Ak=", + "dev": true + }, + "esdoc-jsx-plugin": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/esdoc-jsx-plugin/-/esdoc-jsx-plugin-1.0.0.tgz", + "integrity": "sha1-k37119LeWhfdIP90ZL5CWaeGQdE=", + "dev": true + }, + "esdoc-lint-plugin": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/esdoc-lint-plugin/-/esdoc-lint-plugin-1.0.2.tgz", + "integrity": "sha512-24AYqD2WbZI9We02I7/6dzAa7yUliRTFUaJCZAcYJMQicJT5gUrNFVaI8XmWEN/mhF3szIn1uZBNWeLul4CmNw==", + "dev": true + }, + "esdoc-publish-html-plugin": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/esdoc-publish-html-plugin/-/esdoc-publish-html-plugin-1.1.2.tgz", + "integrity": "sha512-hG1fZmTcEp3P/Hv/qKiMdG1qSp8MjnVZMMkxL5P5ry7I2sX0HQ4P9lt2lms+90Lt0r340HHhSuVx107UL7dphg==", + "dev": true, + "requires": { + "babel-generator": "6.11.4", + "cheerio": "0.22.0", + "escape-html": "1.0.3", + "fs-extra": "1.0.0", + "ice-cap": "0.0.4", + "marked": "0.3.19", + "taffydb": "2.7.2" + }, + "dependencies": { + "babel-generator": { + "version": "6.11.4", + "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.11.4.tgz", + "integrity": "sha1-FPaTOrsgxiZm0n47e59bncBxKpo=", + "dev": true, + "requires": { + "babel-messages": "^6.8.0", + "babel-runtime": "^6.9.0", + "babel-types": "^6.10.2", + "detect-indent": "^3.0.1", + "lodash": "^4.2.0", + "source-map": "^0.5.0" + } + }, + "cheerio": { + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.22.0.tgz", + "integrity": "sha1-qbqoYKP5tZWmuBsahocxIe06Jp4=", + "dev": true, + "requires": { + "css-select": "~1.2.0", + "dom-serializer": "~0.1.0", + "entities": "~1.1.1", + "htmlparser2": "^3.9.1", + "lodash.assignin": "^4.0.9", + "lodash.bind": "^4.1.4", + "lodash.defaults": "^4.0.1", + "lodash.filter": "^4.4.0", + "lodash.flatten": "^4.2.0", + "lodash.foreach": "^4.3.0", + "lodash.map": "^4.4.0", + "lodash.merge": "^4.4.0", + "lodash.pick": "^4.2.1", + "lodash.reduce": "^4.4.0", + "lodash.reject": "^4.4.0", + "lodash.some": "^4.4.0" + } + }, + "detect-indent": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-3.0.1.tgz", + "integrity": "sha1-ncXl3bzu+DJXZLlFGwK8bVQIT3U=", + "dev": true, + "requires": { + "get-stdin": "^4.0.1", + "minimist": "^1.1.0", + "repeating": "^1.1.0" + } + }, + "domhandler": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "dev": true, + "requires": { + "domelementtype": "1" + } + }, + "fs-extra": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-1.0.0.tgz", + "integrity": "sha1-zTzl9+fLYUWIP8rjGR6Yd/hYeVA=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "klaw": "^1.0.0" + } + }, + "htmlparser2": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.9.2.tgz", + "integrity": "sha1-G9+HrMoPP55T+k/M6w9LTLsAszg=", + "dev": true, + "requires": { + "domelementtype": "^1.3.0", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^2.0.2" + } + }, + "jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "repeating": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-1.1.3.tgz", + "integrity": "sha1-PUEUIYh3U3SU+X93+Xhfq4EPpKw=", + "dev": true, + "requires": { + "is-finite": "^1.0.0" + } + }, + "taffydb": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/taffydb/-/taffydb-2.7.2.tgz", + "integrity": "sha1-e/gQalwaSCUbPjvAoOFzJIn9Dcg=", + "dev": true + } + } + }, + "esdoc-react-plugin": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/esdoc-react-plugin/-/esdoc-react-plugin-1.0.1.tgz", + "integrity": "sha1-IUoSFdDmFln1Gi2Z7+SONAw/pvQ=", + "dev": true, + "requires": { + "cheerio": "1.0.0-rc.1" + }, + "dependencies": { + "cheerio": { + "version": "1.0.0-rc.1", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.1.tgz", + "integrity": "sha1-KvNzOeq3E+9rcs3pjO+mcrh2Qf4=", + "dev": true, + "requires": { + "css-select": "~1.2.0", + "dom-serializer": "~0.1.0", + "entities": "~1.1.1", + "htmlparser2": "^3.9.1", + "lodash": "^4.15.0", + "parse5": "^3.0.1" + } + }, + "domhandler": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "dev": true, + "requires": { + "domelementtype": "1" + } + }, + "htmlparser2": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.9.2.tgz", + "integrity": "sha1-G9+HrMoPP55T+k/M6w9LTLsAszg=", + "dev": true, + "requires": { + "domelementtype": "^1.3.0", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^2.0.2" + } + }, + "parse5": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz", + "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==", + "dev": true, + "requires": { + "@types/node": "*" + } + } + } + }, + "esdoc-standard-plugin": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/esdoc-standard-plugin/-/esdoc-standard-plugin-1.0.0.tgz", + "integrity": "sha1-ZhIBysfvhokkkCRG/awVJyU8XU0=", + "dev": true, + "requires": { + "esdoc-accessor-plugin": "^1.0.0", + "esdoc-brand-plugin": "^1.0.0", + "esdoc-coverage-plugin": "^1.0.0", + "esdoc-external-ecmascript-plugin": "^1.0.0", + "esdoc-integrate-manual-plugin": "^1.0.0", + "esdoc-integrate-test-plugin": "^1.0.0", + "esdoc-lint-plugin": "^1.0.0", + "esdoc-publish-html-plugin": "^1.0.0", + "esdoc-type-inference-plugin": "^1.0.0", + "esdoc-undocumented-identifier-plugin": "^1.0.0", + "esdoc-unexported-identifier-plugin": "^1.0.0" + } + }, + "esdoc-type-inference-plugin": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/esdoc-type-inference-plugin/-/esdoc-type-inference-plugin-1.0.2.tgz", + "integrity": "sha512-tMIcEHNe1uhUGA7lT1UTWc9hs2dzthnTgmqXpmeUhurk7fL2tinvoH+IVvG/sLROzwOGZQS9zW/F9KWnpMzLIQ==", + "dev": true + }, + "esdoc-undocumented-identifier-plugin": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/esdoc-undocumented-identifier-plugin/-/esdoc-undocumented-identifier-plugin-1.0.0.tgz", + "integrity": "sha1-guBdNxwy0ShxFA8dXIHsmf2cwsg=", + "dev": true + }, + "esdoc-unexported-identifier-plugin": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/esdoc-unexported-identifier-plugin/-/esdoc-unexported-identifier-plugin-1.0.0.tgz", + "integrity": "sha1-H5h0xqfCvr+a05fDzrdcnGnaurE=", + "dev": true + }, "eslint": { "version": "3.19.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-3.19.0.tgz", @@ -5370,6 +5843,17 @@ "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", "dev": true }, + "fs-extra": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz", + "integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -5519,6 +6003,7 @@ "version": "1.0.5", "bundled": true, "dev": true, + "optional": true, "requires": { "delayed-stream": "~1.0.0" } @@ -5581,7 +6066,8 @@ "delayed-stream": { "version": "1.0.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "delegates": { "version": "1.0.0", @@ -5869,12 +6355,14 @@ "mime-db": { "version": "1.27.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "mime-types": { "version": "2.1.15", "bundled": true, "dev": true, + "optional": true, "requires": { "mime-db": "~1.27.0" } @@ -5950,7 +6438,8 @@ "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "oauth-sign": { "version": "0.8.2", @@ -6788,6 +7277,139 @@ "integrity": "sha1-P5E2XKvmC3ftDruiS0VOPgnZWoI=", "dev": true }, + "ice-cap": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/ice-cap/-/ice-cap-0.0.4.tgz", + "integrity": "sha1-im0xq0ysjUtW3k+pRt8zUlYbbhg=", + "dev": true, + "requires": { + "cheerio": "0.20.0", + "color-logger": "0.0.3" + }, + "dependencies": { + "acorn": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-2.7.0.tgz", + "integrity": "sha1-q259nYhqrKiwhbwzEreaGYQz8Oc=", + "dev": true + }, + "acorn-globals": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-1.0.9.tgz", + "integrity": "sha1-VbtemGkVB7dFedBRNBMhfDgMVM8=", + "dev": true, + "optional": true, + "requires": { + "acorn": "^2.1.0" + } + }, + "cheerio": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.20.0.tgz", + "integrity": "sha1-XHEPK6uVZTJyhCugHG6mGzVF7DU=", + "dev": true, + "requires": { + "css-select": "~1.2.0", + "dom-serializer": "~0.1.0", + "entities": "~1.1.1", + "htmlparser2": "~3.8.1", + "jsdom": "^7.0.2", + "lodash": "^4.1.0" + } + }, + "color-logger": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/color-logger/-/color-logger-0.0.3.tgz", + "integrity": "sha1-2bIt0dlz4Waxi/MT+fSBu6TfIBg=", + "dev": true + }, + "domhandler": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz", + "integrity": "sha1-LeWaCCLVAn+r/28DLCsloqir5zg=", + "dev": true, + "requires": { + "domelementtype": "1" + } + }, + "htmlparser2": { + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", + "integrity": "sha1-mWwosZFRaovoZQGn15dX5ccMEGg=", + "dev": true, + "requires": { + "domelementtype": "1", + "domhandler": "2.3", + "domutils": "1.5", + "entities": "1.0", + "readable-stream": "1.1" + }, + "dependencies": { + "entities": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz", + "integrity": "sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY=", + "dev": true + } + } + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "jsdom": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-7.2.2.tgz", + "integrity": "sha1-QLQCdwwr2iNGkJa+6Rq2deOx/G4=", + "dev": true, + "optional": true, + "requires": { + "abab": "^1.0.0", + "acorn": "^2.4.0", + "acorn-globals": "^1.0.4", + "cssom": ">= 0.3.0 < 0.4.0", + "cssstyle": ">= 0.2.29 < 0.3.0", + "escodegen": "^1.6.1", + "nwmatcher": ">= 1.3.7 < 2.0.0", + "parse5": "^1.5.1", + "request": "^2.55.0", + "sax": "^1.1.4", + "symbol-tree": ">= 3.1.0 < 4.0.0", + "tough-cookie": "^2.2.0", + "webidl-conversions": "^2.0.0", + "whatwg-url-compat": "~0.6.5", + "xml-name-validator": ">= 2.0.1 < 3.0.0" + } + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + }, + "webidl-conversions": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-2.0.1.tgz", + "integrity": "sha1-O/glj30xjHRDw28uFpQCoaZwNQY=", + "dev": true, + "optional": true + } + } + }, "iconv-lite": { "version": "0.4.19", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", @@ -8503,6 +9125,15 @@ "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", "dev": true }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, "jsonify": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", @@ -8548,6 +9179,15 @@ "is-buffer": "^1.1.5" } }, + "klaw": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", + "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.9" + } + }, "lazy-cache": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", @@ -8876,18 +9516,90 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=" }, + "lodash.assignin": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.assignin/-/lodash.assignin-4.2.0.tgz", + "integrity": "sha1-uo31+4QesKPoBEIysOJjqNxqKKI=", + "dev": true + }, + "lodash.bind": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-4.2.1.tgz", + "integrity": "sha1-euMBfpOWIqwxt9fX3LGzTbFpDTU=", + "dev": true + }, "lodash.camelcase": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=", "dev": true }, + "lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=", + "dev": true + }, + "lodash.filter": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz", + "integrity": "sha1-ZosdSYFgOuHMWm+nYBQ+SAtMSs4=", + "dev": true + }, + "lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=", + "dev": true + }, + "lodash.foreach": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz", + "integrity": "sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM=", + "dev": true + }, + "lodash.map": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", + "integrity": "sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=", + "dev": true + }, "lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", "dev": true }, + "lodash.merge": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.1.tgz", + "integrity": "sha512-AOYza4+Hf5z1/0Hztxpm2/xiPZgi/cjMqdnKTUWTBSKchJlxXXuUSxCCl8rJlf4g6yww/j6mA8nC8Hw/EZWxKQ==", + "dev": true + }, + "lodash.pick": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", + "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=", + "dev": true + }, + "lodash.reduce": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz", + "integrity": "sha1-8atrg5KZrUj3hKu/R2WW8DuRTTs=", + "dev": true + }, + "lodash.reject": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.reject/-/lodash.reject-4.6.0.tgz", + "integrity": "sha1-gNZJLcFHCGS79YNTO2UfQqn1JBU=", + "dev": true + }, + "lodash.some": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz", + "integrity": "sha1-G7nzFO9ri63tE7VJFpsqlF62jk0=", + "dev": true + }, "lodash.uniq": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", @@ -9002,6 +9714,12 @@ "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", "dev": true }, + "marked": { + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/marked/-/marked-0.3.19.tgz", + "integrity": "sha512-ea2eGWOqNxPcXv8dyERdSr/6FmzvWwzjMxpfGB/sbMccXoct+xY+YukPD+QTUZwyvK7BZwcr4m21WBOW41pAkg==", + "dev": true + }, "math-expression-evaluator": { "version": "1.2.17", "resolved": "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz", @@ -11975,6 +12693,12 @@ } } }, + "taffydb": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/taffydb/-/taffydb-2.7.3.tgz", + "integrity": "sha1-KtNxaWKUmPylvIQkMJbTzeDsOjQ=", + "dev": true + }, "tapable": { "version": "0.2.8", "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.2.8.tgz", @@ -12205,6 +12929,12 @@ "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=", "dev": true }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + }, "unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", @@ -12687,6 +13417,16 @@ } } }, + "whatwg-url-compat": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/whatwg-url-compat/-/whatwg-url-compat-0.6.5.tgz", + "integrity": "sha1-AImBEa9om7CXVBzVpFymyHmERb8=", + "dev": true, + "optional": true, + "requires": { + "tr46": "~0.0.1" + } + }, "whet.extend": { "version": "0.9.9", "resolved": "https://registry.npmjs.org/whet.extend/-/whet.extend-0.9.9.tgz", diff --git a/package.json b/package.json index 702b0a89..a8ef3274 100644 --- a/package.json +++ b/package.json @@ -16,6 +16,7 @@ "clean": "rimraf build", "start": "node devServer.js", "lint": "eslint --ext .js,.jsx src", + "preinstall": "ls ../coriolis-data || git clone https://github.com/edcd/coriolis-data.git ../coriolis-data && (cd ../coriolis-data && npm i)", "test": "jest", "prod-serve": "nginx -p $(pwd) -c nginx.conf", "prod-stop": "kill -QUIT $(cat nginx.pid)", @@ -93,7 +94,14 @@ "webpack": "^2.4.1", "webpack-dev-server": "^2.4.4", "webpack-notifier": "^1.6.0", - "webpack-bugsnag-plugins": "^1.1.1" + "webpack-bugsnag-plugins": "^1.1.1", + "esdoc": "^1.1.0", + "esdoc-ecmascript-proposal-plugin": "^1.0.0", + "esdoc-jsx-plugin": "^1.0.0", + "esdoc-react-plugin": "^1.0.1", + "esdoc-standard-plugin": "^1.0.0", + "esdoc-publish-html-plugin": "^1.1.2", + "esdoc-custom-theme": "^1.4.2" }, "dependencies": { "babel-polyfill": "*", diff --git a/src/app/components/AvailableModulesMenu.jsx b/src/app/components/AvailableModulesMenu.jsx index 2fc495d8..251c0712 100644 --- a/src/app/components/AvailableModulesMenu.jsx +++ b/src/app/components/AvailableModulesMenu.jsx @@ -61,7 +61,9 @@ const GRPCAT = { // Standard 'gpp': 'guardian', 'gpc': 'guardian', - 'ggc': 'guardian' + 'gsrp': 'guardian', + 'ggc': 'guardian', + 'gfsb': 'guardian' }; // Order here is the order in which items will be shown in the modules menu const CATEGORIES = { @@ -90,7 +92,7 @@ const CATEGORIES = { 'experimental': ['axmc', 'axmr', 'rfl', 'xs', 'sfn', 'rcpl'], // Guardian - 'guardian': ['gpp', 'gpd', 'gpc', 'ggc'] + 'guardian': ['gpp', 'gpd', 'gpc', 'ggc', 'gsrp', 'gfsb'] }; /** diff --git a/src/app/components/Defence.jsx b/src/app/components/Defence.jsx index 35fea165..576b65f6 100644 --- a/src/app/components/Defence.jsx +++ b/src/app/components/Defence.jsx @@ -76,6 +76,7 @@ export default class Defence extends TranslatedComponent { shieldSourcesData.push({ value: Math.round(shield.generator), label: translate('generator') }); shieldSourcesData.push({ value: Math.round(shield.boosters), label: translate('boosters') }); shieldSourcesData.push({ value: Math.round(shield.cells), label: translate('cells') }); + shieldSourcesData.push({ value: Math.round(shield.addition), label: translate('shield addition') }); if (shield.generator > 0) { shieldSourcesTt.push(
{translate('generator') + ' ' + formats.int(shield.generator)}{units.MJ}
); diff --git a/src/app/components/FSDProfile.jsx b/src/app/components/FSDProfile.jsx index 4a4f2094..bd12fc10 100644 --- a/src/app/components/FSDProfile.jsx +++ b/src/app/components/FSDProfile.jsx @@ -57,7 +57,7 @@ export default class FSDProfile extends TranslatedComponent { */ _calcMaxRange(ship, fuel, mass) { // Obtain the maximum range - return Calc.jumpRange(mass, ship.standard[2].m, Math.min(fuel, ship.standard[2].m.getMaxFuelPerJump())); + return Calc.jumpRange(mass, ship.standard[2].m, Math.min(fuel, ship.standard[2].m.getMaxFuelPerJump()), ship); } /** @@ -77,7 +77,7 @@ export default class FSDProfile extends TranslatedComponent { const maxMass = thrusters.getMaxMass(); const mass = ship.unladenMass + fuel + cargo; const minRange = 0; - const maxRange = Calc.jumpRange(minMass + fsd.getMaxFuelPerJump(), fsd, fsd.getMaxFuelPerJump()); + const maxRange = Calc.jumpRange(minMass + fsd.getMaxFuelPerJump(), fsd, fsd.getMaxFuelPerJump(), ship); // Add a mark at our current mass const mark = Math.min(mass, maxMass); diff --git a/src/app/components/InternalSlot.jsx b/src/app/components/InternalSlot.jsx index 2bf0feb8..38f1011f 100644 --- a/src/app/components/InternalSlot.jsx +++ b/src/app/components/InternalSlot.jsx @@ -63,6 +63,9 @@ export default class InternalSlot extends Slot { { m.getSpinup() ?
{translate('spinup')}: {formats.f1(m.getSpinup())}{u.s}
: null } { m.getDuration() ?
{translate('duration')}: {formats.f1(m.getDuration())}{u.s}
: null } { m.grp === 'scb' ?
{translate('cells')}: {formats.int(m.getAmmo() + 1)}
: null } + { m.grp === 'gsrp' ?
{translate('shield addition')}: {formats.f1(m.getShieldAddition())}{u.MJ}
: null } + { m.grp === 'gfsb' ?
{translate('jump addition')}: {formats.f1(m.getJumpBoost())}{u.LY}
: null } + { m.grp === 'gs' ?
{translate('shield addition')}: {formats.f1(m.getShieldAddition())}{u.MJ}
: null } { m.getShieldReinforcement() ?
{translate('shieldreinforcement')}: {formats.f1(m.getDuration() * m.getShieldReinforcement())}{u.MJ}
: null } { m.getShieldReinforcement() ?
{translate('total')}: {formats.int((m.getAmmo() + 1) * (m.getDuration() * m.getShieldReinforcement()))}{u.MJ}
: null } { m.repair ?
{translate('repair')}: {m.repair}
: null } diff --git a/src/app/components/JumpRange.jsx b/src/app/components/JumpRange.jsx index 2b8f5196..ceba5bc2 100644 --- a/src/app/components/JumpRange.jsx +++ b/src/app/components/JumpRange.jsx @@ -61,7 +61,7 @@ export default class JumpRange extends TranslatedComponent { const fuel = this.state.fuelLevel * ship.fuelCapacity; // Obtain the jump range - return Calc.jumpRange(ship.unladenMass + fuel + cargo, fsd, fuel); + return Calc.jumpRange(ship.unladenMass + fuel + cargo, fsd, fuel, ship); } /** diff --git a/src/app/components/ModalShoppingList.jsx b/src/app/components/ModalShoppingList.jsx index e8d5efa3..047e69bb 100644 --- a/src/app/components/ModalShoppingList.jsx +++ b/src/app/components/ModalShoppingList.jsx @@ -23,7 +23,8 @@ export default class ModalShoppingList extends TranslatedComponent { matsList: '', mats: {}, failed: false, - cmdrName: Persist.getCmdr(), + cmdrName: Persist.getCmdr().selected, + cmdrs: Persist.getCmdr().cmdrs, matsPerGrade: Persist.getRolls(), blueprints: [] }; @@ -34,11 +35,14 @@ export default class ModalShoppingList extends TranslatedComponent { */ componentDidMount() { this.renderMats(); - this.registerBPs(); + if (this.checkBrowserIsCompatible()) { + this.getCommanders(); + this.registerBPs(); + } } /** - * Convert mats object to string + * Find all blueprints needed to make a build. */ registerBPs() { const ship = this.props.ship; @@ -51,34 +55,81 @@ export default class ModalShoppingList extends TranslatedComponent { if (!module.m.blueprint.grade || !module.m.blueprint.grades) { continue; } + if (module.m.blueprint.special) { + console.log(module.m.blueprint.special); + blueprints.push({ uuid: module.m.blueprint.special.uuid, number: 1 }); + } for (const g in module.m.blueprint.grades) { + if (!module.m.blueprint.grades.hasOwnProperty(g)) { + continue; + } if (g > module.m.blueprint.grade) { continue; } - blueprints.push({ blueprint: module.m.blueprint.grades[g], number: this.state.matsPerGrade[g] }); + blueprints.push({ uuid: module.m.blueprint.grades[g].uuid, number: this.state.matsPerGrade[g] }); } } } this.setState({ blueprints }); } + /** + * Check browser isn't firefox. + * @return {boolean} true if compatible, false if not. + */ + checkBrowserIsCompatible() { + // Firefox 1.0+ + return typeof InstallTrigger === 'undefined'; + } + + /** + * Get a list of commanders from EDEngineer. + */ + getCommanders() { + request + .get('http://localhost:44405/commanders') + .end((err, res) => { + if (err) { + console.log(err); + return this.setState({ failed: true }); + } + const cmdrs = JSON.parse(res.text); + if (!this.state.cmdrName) { + this.setState({ cmdrName: cmdrs[0] }); + } + this.setState({ cmdrs }, () => { + Persist.setCmdr({ selected: this.state.cmdrName, cmdrs }); + }); + }); + } + /** * Send all blueprints to ED Engineer - * @param {SyntheticEvent} event React event + * @param {Event} event React event */ sendToEDEng(event) { event.preventDefault(); - event.target.disabled = true; - event.target.innerText = 'Sending...'; + const target = event.target; + target.disabled = this.state.blueprints.length > 0; + if (this.state.blueprints.length === 0) { + target.innerText = 'No modded components.'; + target.disabled = true; + setTimeout(() => { + target.innerText = 'Send to EDEngineer'; + target.disabled = false; + }, 3000); + } else { + target.innerText = 'Sending...'; + } let countSent = 0; let countTotal = this.state.blueprints.length; - const target = event.target; + for (const i of this.state.blueprints) { request .patch(`http://localhost:44405/${this.state.cmdrName}/shopping-list`) - .field('uuid', i.blueprint.uuid) + .field('uuid', i.uuid) .field('size', i.number) - .end((err, res) => { + .end(err => { if (err) { console.log(err); if (err.message !== 'Bad Request') { @@ -109,10 +160,16 @@ export default class ModalShoppingList extends TranslatedComponent { continue; } for (const g in module.m.blueprint.grades) { + if (!module.m.blueprint.grades.hasOwnProperty(g)) { + continue; + } if (g > module.m.blueprint.grade) { continue; } for (const i in module.m.blueprint.grades[g].components) { + if (!module.m.blueprint.grades[g].components.hasOwnProperty(i)) { + continue; + } if (mats[i]) { mats[i] += module.m.blueprint.grades[g].components[i] * this.state.matsPerGrade[g]; } else { @@ -156,8 +213,9 @@ export default class ModalShoppingList extends TranslatedComponent { */ cmdrChangeHandler(e) { let cmdrName = e.target.value; - this.setState({ cmdrName }); - Persist.setCmdr(cmdrName); + this.setState({ cmdrName }, () => { + Persist.setCmdr({ selected: this.state.cmdrName, cmdrs: this.state.cmdrs }); + }); } /** @@ -167,6 +225,7 @@ export default class ModalShoppingList extends TranslatedComponent { render() { let translate = this.context.language.translate; this.changeHandler = this.changeHandler.bind(this); + const compatible = this.checkBrowserIsCompatible(); this.cmdrChangeHandler = this.cmdrChangeHandler.bind(this); this.sendToEDEng = this.sendToEDEng.bind(this); return
e.stopPropagation() }> @@ -188,12 +247,15 @@ export default class ModalShoppingList extends TranslatedComponent {