From 0987b4b39afd0aaaf0c36131a8a6c12eb8fed78a Mon Sep 17 00:00:00 2001 From: Xaver Maierhofer Date: Sun, 14 May 2017 22:57:52 +0200 Subject: [PATCH 001/119] [TASK] Update libarys d3 & autoprefixer --- package.json | 8 +-- yarn.lock | 178 ++++++++++++++++++++++----------------------------- 2 files changed, 82 insertions(+), 104 deletions(-) diff --git a/package.json b/package.json index 3906aea..3a5ea79 100644 --- a/package.json +++ b/package.json @@ -14,9 +14,9 @@ "eslint": "^3.19.0", "eslint-config-airbnb-es5": "^1.1.0", "eslint-config-defaults": "^9.0.0", - "eslint-plugin-react": "^7.0.0", + "eslint-plugin-react": "^7.0.1", "gulp": "github:gulpjs/gulp#4.0", - "gulp-autoprefixer": "^3.1.1", + "gulp-autoprefixer": "^4.0.0", "gulp-cache-bust": "^1.1.0", "gulp-environments": "^0.1.2", "gulp-eslint": "^3.0.1", @@ -42,10 +42,10 @@ }, "dependencies": { "almond": "^0.3.3", - "d3-drag": "^1.0.4", + "d3-drag": "^1.1.0", "d3-force": "^1.0.6", "d3-selection": "^1.0.6", - "d3-zoom": "^1.1.3", + "d3-zoom": "^1.2.0", "leaflet": "^1.0.3", "moment": "^2.17.1", "navigo": "^4.7.1", diff --git a/yarn.lock b/yarn.lock index 8b8d40e..1821f4a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -265,15 +265,15 @@ atob@~1.1.0: version "1.1.3" resolved "https://registry.yarnpkg.com/atob/-/atob-1.1.3.tgz#95f13629b12c3a51a5d215abdce2aa9f32f80773" -autoprefixer@^6.0.0: - version "6.7.7" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-6.7.7.tgz#1dbd1c835658e35ce3f9984099db00585c782014" +autoprefixer@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-7.0.1.tgz#472d7620a1b286e55ad1d8345a09d76aaed99d92" dependencies: - browserslist "^1.7.6" - caniuse-db "^1.0.30000634" + browserslist "^2.1.2" + caniuse-lite "^1.0.30000665" normalize-range "^0.1.2" num2fraction "^1.2.2" - postcss "^5.2.16" + postcss "^6.0.1" postcss-value-parser "^3.2.3" aws-sign2@~0.6.0: @@ -338,8 +338,8 @@ babel-types@^6.23.0, babel-types@^6.24.1: to-fast-properties "^1.0.1" babylon@^6.15.0, babylon@^6.17.0: - version "6.17.0" - resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.17.0.tgz#37da948878488b9c4e3c4038893fa3314b3fc932" + version "6.17.1" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.17.1.tgz#17f14fddf361b695981fe679385e4f1c01ebd86f" bach@^1.0.0: version "1.1.0" @@ -422,7 +422,7 @@ boom@2.x.x: dependencies: hoek "2.x.x" -brace-expansion@^1.0.0: +brace-expansion@^1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.7.tgz#3effc3c50e000531fb720eaff80f0ae8ef23cf59" dependencies: @@ -486,12 +486,12 @@ browser-sync@^2.18.8: ua-parser-js "0.7.12" yargs "6.4.0" -browserslist@^1.7.6: - version "1.7.7" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-1.7.7.tgz#0bd76704258be829b2398bb50e4b62d1a166b0b9" +browserslist@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.1.2.tgz#a9dd0791342dab019861c2dd1cd0fd5d83230d39" dependencies: - caniuse-db "^1.0.30000639" - electron-to-chromium "^1.2.7" + caniuse-lite "^1.0.30000665" + electron-to-chromium "^1.3.9" bs-recipes@1.3.4: version "1.3.4" @@ -581,9 +581,9 @@ camelcase@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" -caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639: - version "1.0.30000665" - resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000665.tgz#e84f4277935f295f546f8533cb0b410a8415b972" +caniuse-lite@^1.0.30000665: + version "1.0.30000669" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000669.tgz#f312f4868722f3ce869ce934da3b536e0e393845" caseless@~0.11.0: version "0.11.0" @@ -656,8 +656,8 @@ clap@^1.0.9: chalk "^1.1.3" clean-css@4.0.x: - version "4.0.12" - resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.0.12.tgz#a02e61707f1840bd3338f54dbc9acbda4e772fa3" + version "4.0.13" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.0.13.tgz#feb2a176062d72a6c3e624d9213cac6a0c485e80" dependencies: source-map "0.5.x" @@ -886,9 +886,9 @@ d3-dispatch@1: version "1.0.3" resolved "https://registry.yarnpkg.com/d3-dispatch/-/d3-dispatch-1.0.3.tgz#46e1491eaa9b58c358fce5be4e8bed626e7871f8" -d3-drag@1, d3-drag@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/d3-drag/-/d3-drag-1.0.4.tgz#a9c1609f11dd5530ae275ebd64377ec54efb9d8f" +d3-drag@1, d3-drag@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/d3-drag/-/d3-drag-1.1.0.tgz#4a49b4d77a42e9e3d5a0ef3b492b14aaa2e5a733" dependencies: d3-dispatch "1" d3-selection "1" @@ -935,9 +935,9 @@ d3-transition@1: d3-selection "1" d3-timer "1" -d3-zoom@^1.1.3: - version "1.1.4" - resolved "https://registry.yarnpkg.com/d3-zoom/-/d3-zoom-1.1.4.tgz#903fd2c988b5cace43f00dcf7aae09470c9cc12d" +d3-zoom@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/d3-zoom/-/d3-zoom-1.2.0.tgz#b3231f4f9386241475defe1c557bfd3fde1065fb" dependencies: d3-dispatch "1" d3-drag "1" @@ -964,10 +964,6 @@ dateformat@^1.0.11: get-stdin "^4.0.1" meow "^3.3.0" -dateformat@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-2.0.0.tgz#2743e3abb5c3fc2462e527dca445e04e9f4dee17" - debug-fabulous@0.1.X: version "0.1.0" resolved "https://registry.yarnpkg.com/debug-fabulous/-/debug-fabulous-0.1.0.tgz#ad0ea07a5d519324fb55842a8f34ee59c7f8ff6c" @@ -998,8 +994,8 @@ decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2: resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" deep-extend@~0.4.0: - version "0.4.1" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.1.tgz#efe4113d08085f4e6f9687759810f807469e2253" + version "0.4.2" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.2.tgz#48b699c27e334bf89f10892be432f6e4c7d34a7f" deep-is@~0.1.3: version "0.1.3" @@ -1087,12 +1083,18 @@ domelementtype@~1.1.1: version "1.1.3" resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b" -domhandler@2.3, domhandler@^2.3.0: +domhandler@2.3: version "2.3.0" resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.3.0.tgz#2de59a0822d5027fabff6f032c2b25a2a8abe738" dependencies: domelementtype "1" +domhandler@^2.3.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.1.tgz#892e47000a99be55bbf3774ffea0561d8879c259" + dependencies: + domelementtype "1" + domutils@1.4: version "1.4.3" resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.4.3.tgz#0865513796c6b306031850e175516baf80b72a6f" @@ -1107,8 +1109,8 @@ domutils@1.5: domelementtype "1" domutils@^1.5.1: - version "1.6.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.6.0.tgz#853de07f013287f976b7fe0461740222ea14ecbb" + version "1.6.2" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.6.2.tgz#1958cc0b4c9426e9ed367fb1c8e854891b0fa3ff" dependencies: dom-serializer "0" domelementtype "1" @@ -1161,9 +1163,9 @@ ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" -electron-to-chromium@^1.2.7: - version "1.3.9" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.9.tgz#db1cba2a26aebcca2f7f5b8b034554468609157d" +electron-to-chromium@^1.3.9: + version "1.3.10" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.10.tgz#63d62b785471f0d8dda85199d64579de8a449f08" emitter-steward@^1.0.0: version "1.0.0" @@ -1256,8 +1258,8 @@ es-to-primitive@^1.1.1: is-symbol "^1.0.1" es5-ext@^0.10.14, es5-ext@^0.10.9, es5-ext@~0.10.14: - version "0.10.15" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.15.tgz#c330a5934c1ee21284a7c081a86e5fd937c91ea6" + version "0.10.16" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.16.tgz#1ef1b04f3d09db6a5d630226d62202f2e425e45a" dependencies: es6-iterator "2" es6-symbol "~3.1" @@ -1334,9 +1336,9 @@ eslint-config-defaults@^9.0.0: version "9.0.0" resolved "https://registry.yarnpkg.com/eslint-config-defaults/-/eslint-config-defaults-9.0.0.tgz#a090adc13b2935e3f43b3cd048a92701654e5ad5" -eslint-plugin-react@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.0.0.tgz#084cfe772d229ec5ae7e525dfc6d299cc21ddd77" +eslint-plugin-react@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.0.1.tgz#e78107e1e559c6e2b17786bb67c2e2a010ad0d2f" dependencies: doctrine "^2.0.0" has "^1.0.1" @@ -1954,13 +1956,13 @@ group-array@^0.3.0: split-string "^1.0.1" union-value "^0.2.3" -gulp-autoprefixer@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/gulp-autoprefixer/-/gulp-autoprefixer-3.1.1.tgz#75230051cd0d171343d783b7e9b5d1120eeef9b0" +gulp-autoprefixer@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/gulp-autoprefixer/-/gulp-autoprefixer-4.0.0.tgz#e00a8c571b85d06516ac26341be90dfd9fc1eab0" dependencies: - autoprefixer "^6.0.0" + autoprefixer "^7.0.0" gulp-util "^3.0.0" - postcss "^5.0.4" + postcss "^6.0.1" through2 "^2.0.0" vinyl-sourcemaps-apply "^0.2.0" @@ -2155,7 +2157,7 @@ gulp-uglify@^2.1.2: uglify-save-license "^0.4.1" vinyl-sourcemaps-apply "^0.2.0" -gulp-util@3.0.7: +gulp-util@3.0.7, gulp-util@^3.0, gulp-util@^3.0.0, gulp-util@^3.0.6, gulp-util@^3.0.7, gulp-util@~3.0.4, gulp-util@~3.0.6: version "3.0.7" resolved "https://registry.yarnpkg.com/gulp-util/-/gulp-util-3.0.7.tgz#78925c4b8f8b49005ac01a011c557e6218941cbb" dependencies: @@ -2178,29 +2180,6 @@ gulp-util@3.0.7: through2 "^2.0.0" vinyl "^0.5.0" -gulp-util@^3.0, gulp-util@^3.0.0, gulp-util@^3.0.6, gulp-util@^3.0.7, gulp-util@~3.0.4, gulp-util@~3.0.6: - version "3.0.8" - resolved "https://registry.yarnpkg.com/gulp-util/-/gulp-util-3.0.8.tgz#0054e1e744502e27c04c187c3ecc505dd54bbb4f" - dependencies: - array-differ "^1.0.0" - array-uniq "^1.0.2" - beeper "^1.0.0" - chalk "^1.0.0" - dateformat "^2.0.0" - fancy-log "^1.1.0" - gulplog "^1.0.0" - has-gulplog "^0.1.0" - lodash._reescape "^3.0.0" - lodash._reevaluate "^3.0.0" - lodash._reinterpolate "^3.0.0" - lodash.template "^3.0.0" - minimist "^1.1.0" - multipipe "^0.1.2" - object-assign "^3.0.0" - replace-ext "0.0.1" - through2 "^2.0.0" - vinyl "^0.5.0" - "gulp@github:gulpjs/gulp#4.0": version "4.0.0-alpha.2" resolved "https://codeload.github.com/gulpjs/gulp/tar.gz/38246c3f8b6dbb8d4ef657183e92d90c8299e22f" @@ -2687,7 +2666,7 @@ jodid25519@^1.0.0: dependencies: jsbn "~0.1.0" -js-base64@^2.1.8, js-base64@^2.1.9: +js-base64@^2.1.8: version "2.1.9" resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.1.9.tgz#f0e80ae039a4bd654b5f281fc93f04a914a7fcce" @@ -2696,8 +2675,8 @@ js-tokens@^3.0.0: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.1.tgz#08e9f132484a2c45a30907e9dc4d5567b7f114d7" js-yaml@^3.4.6, js-yaml@^3.5.1, js-yaml@^3.5.4: - version "3.8.3" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.8.3.tgz#33a05ec481c850c8875929166fe1beb61c728766" + version "3.8.4" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.8.4.tgz#520b4564f86573ba96662af85a8cafa7b4b5a6f6" dependencies: argparse "^1.0.7" esprima "^3.1.1" @@ -3171,10 +3150,10 @@ mime@1.3.4, "mime@>= 0.0.1": resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53" "minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@~3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774" + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" dependencies: - brace-expansion "^1.0.0" + brace-expansion "^1.1.7" minimist@0.0.8: version "0.0.8" @@ -3673,12 +3652,11 @@ postcss-value-parser@^3.2.3: version "3.3.0" resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz#87f38f9f18f774a4ab4c8a232f5c5ce8872a9d15" -postcss@^5.0.4, postcss@^5.2.16: - version "5.2.17" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.17.tgz#cf4f597b864d65c8a492b2eabe9d706c879c388b" +postcss@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.1.tgz#000dbd1f8eef217aa368b9a212c5fc40b2a8f3f2" dependencies: chalk "^1.1.3" - js-base64 "^2.1.9" source-map "^0.5.6" supports-color "^3.2.3" @@ -4051,12 +4029,12 @@ safe-buffer@^5.0.1: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.0.1.tgz#d263ca54696cd8a306b5ca6551e92de57918fbe7" sass-graph@^2.1.1: - version "2.2.2" - resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.2.2.tgz#f4d6c95b546ea2a09d14176d0fc1a07ee2b48354" + version "2.2.3" + resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.2.3.tgz#2ba9f170f6cafed5b51665abe13cf319c9269c31" dependencies: glob "^7.0.0" lodash "^4.0.0" - scss-tokenizer "^0.2.1" + scss-tokenizer "^0.2.3" yargs "^6.6.0" sass-lint@^1.10.2: @@ -4081,9 +4059,9 @@ sax@>=0.6.0, sax@~1.2.1: version "1.2.2" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.2.tgz#fd8631a23bc7826bef5d871bdb87378c95647828" -scss-tokenizer@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/scss-tokenizer/-/scss-tokenizer-0.2.1.tgz#07c0cc577bb7ab4d08fd900185adbf4bc844141d" +scss-tokenizer@^0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz#8eb06db9a9723333824d3f5530641149847ce5d1" dependencies: js-base64 "^2.1.8" source-map "^0.4.2" @@ -4544,20 +4522,13 @@ through2-filter@^2.0.0: through2 "~2.0.0" xtend "~4.0.0" -through2@2.0.1: +through2@2.0.1, through2@2.X, through2@^2.0.0, through2@^2.0.1, through2@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.1.tgz#384e75314d49f32de12eebb8136b8eb6b5d59da9" dependencies: readable-stream "~2.0.0" xtend "~4.0.0" -through2@2.X, through2@^2.0.0, through2@^2.0.1, through2@^2.0.3, through2@~2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be" - dependencies: - readable-stream "^2.1.5" - xtend "~4.0.1" - through2@^0.6.0, through2@~0.6.5: version "0.6.5" resolved "https://registry.yarnpkg.com/through2/-/through2-0.6.5.tgz#41ab9c67b29d57209071410e1d7a7a968cd3ad48" @@ -4565,6 +4536,13 @@ through2@^0.6.0, through2@~0.6.5: readable-stream ">=1.0.33-1 <1.1.0-0" xtend ">=4.0.0 <4.1.0-0" +through2@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be" + dependencies: + readable-stream "^2.1.5" + xtend "~4.0.1" + through@2, through@^2.3.6, through@~2.3, through@~2.3.1: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" @@ -4646,8 +4624,8 @@ ua-parser-js@0.7.12: resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.12.tgz#04c81a99bdd5dc52263ea29d24c6bf8d4818a4bb" uglify-js@2.8.x, uglify-js@~2.8.10, uglify-js@~2.8.22: - version "2.8.22" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.22.tgz#d54934778a8da14903fa29a326fb24c0ab51a1a0" + version "2.8.24" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.24.tgz#48eb5175cf32e22ec11a47e638d7c8b4e0faf2dd" dependencies: source-map "~0.5.1" yargs "~3.10.0" @@ -4867,10 +4845,10 @@ which@1, which@^1.2.12, which@^1.2.9: isexe "^2.0.0" wide-align@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.0.tgz#40edde802a71fea1f070da3e62dcda2e7add96ad" + version "1.1.2" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710" dependencies: - string-width "^1.0.1" + string-width "^1.0.2" window-size@0.1.0: version "0.1.0" From 3e63b6432e16658d802e9e923295a592fcfb7d83 Mon Sep 17 00:00:00 2001 From: Martin Geno Date: Fri, 14 Apr 2017 20:43:03 +0200 Subject: [PATCH 002/119] [TASK] Add animation & improve behaviour of forcegraph --- lib/forcegraph.js | 97 ++++++++++++++++++++++++++++++++--------------- 1 file changed, 67 insertions(+), 30 deletions(-) diff --git a/lib/forcegraph.js b/lib/forcegraph.js index 4b28245..2cc5d34 100644 --- a/lib/forcegraph.js +++ b/lib/forcegraph.js @@ -1,5 +1,5 @@ -define(['d3-selection', 'd3-force', 'd3-zoom', 'd3-drag', 'utils/math', 'forcegraph/draw'], - function (d3Selection, d3Force, d3Zoom, d3Drag, math, draw) { +define(['d3-selection', 'd3-force', 'd3-zoom', 'd3-drag', 'd3-timer', 'd3-ease', 'd3-interpolate', 'utils/math', 'forcegraph/draw'], + function (d3Selection, d3Force, d3Zoom, d3Drag, d3Timer, d3Ease, d3Interpolate, math, draw) { 'use strict'; return function (config, linkScale, sidebar, router) { @@ -14,10 +14,12 @@ define(['d3-selection', 'd3-force', 'd3-zoom', 'd3-drag', 'utils/math', 'forcegr var intNodes = []; var dictNodes = {}; var intLinks = []; + var movetoTimer; var NODE_RADIUS_DRAG = 10; var NODE_RADIUS_SELECT = 15; var LINK_RADIUS_SELECT = 12; + var ZOOM_ANIMATE_DURATION = 350; var ZOOM_MIN = 1 / 8; var ZOOM_MAX = 3; @@ -32,9 +34,43 @@ define(['d3-selection', 'd3-force', 'd3-zoom', 'd3-drag', 'utils/math', 'forcegr draw.setMaxArea(canvas.width, canvas.height); } - function moveTo(x, y) { - transform.x = (canvas.width + sidebar()) / 2 - x * transform.k; - transform.y = canvas.height / 2 - y * transform.k; + function transformPosition(p) { + transform.x = p.x; + transform.y = p.y; + transform.k = p.k; + } + + function moveTo(callback, forceMove) { + clearTimeout(movetoTimer); + if (!forceMove && force.alpha() > 0.3) { + movetoTimer = setTimeout(function timerOfMoveTo() { + moveTo(callback); + }, 300); + return; + } + var result = callback(); + var x = result[0]; + var y = result[1]; + var k = result[2]; + var end = { k: k }; + + end.x = (canvas.width + sidebar()) / 2 - x * k; + end.y = canvas.height / 2 - y * k; + + var start = { x: transform.x, y: transform.y, k: transform.k }; + + var interpolate = d3Interpolate.interpolateObject(start, end); + + var timer = d3Timer.timer(function (t) { + if (t >= ZOOM_ANIMATE_DURATION) { + timer.stop(); + return; + } + + var v = interpolate(d3Ease.easeQuadInOut(t / ZOOM_ANIMATE_DURATION)); + transformPosition(v); + window.requestAnimationFrame(redraw); + }); } function onClick() { @@ -111,7 +147,8 @@ define(['d3-selection', 'd3-force', 'd3-zoom', 'd3-drag', 'utils/math', 'forcegr .force('x', d3Force.forceX().strength(0.02)) .force('y', d3Force.forceY().strength(0.02)) .force('collide', d3Force.forceCollide()) - .on('tick', redraw); + .on('tick', redraw) + .alphaDecay(0.015); var drag = d3Drag.drag() .subject(function () { @@ -192,40 +229,40 @@ define(['d3-selection', 'd3-force', 'd3-zoom', 'd3-drag', 'utils/math', 'forcegr }; self.resetView = function resetView() { - draw.setHighlight(null); - transform.k = (ZOOM_MIN + 1) / 2; - moveTo(0, 0); - redraw(); + moveTo(function calcToReset() { + draw.setHighlight(null); + return [0, 0, (ZOOM_MIN + 1) / 2]; + }, true); }; self.gotoNode = function gotoNode(d) { - for (var i = 0; i < intNodes.length; i++) { - var n = intNodes[i]; - if (n.o.node.nodeinfo.node_id !== d.nodeinfo.node_id) { - continue; + moveTo(function calcToNode() { + for (var i = 0; i < intNodes.length; i++) { + var n = intNodes[i]; + if (n.o.node.nodeinfo.node_id !== d.nodeinfo.node_id) { + continue; + } + draw.setHighlight({ type: 'node', o: n.o.node }); + return [n.x, n.y, (ZOOM_MAX + 1) / 2]; } - draw.setHighlight({ type: 'node', o: n.o.node }); - transform.k = (ZOOM_MAX + 1) / 2; - moveTo(n.x, n.y); - break; - } - redraw(); + return [0, 0, (ZOOM_MIN + 1) / 2]; + }); }; self.gotoLink = function gotoLink(d) { - draw.setHighlight({ type: 'link', o: d }); - for (var i = 0; i < intLinks.length; i++) { - var l = intLinks[i]; - if (l.o !== d) { - continue; + moveTo(function calcToLink() { + draw.setHighlight({ type: 'link', o: d }); + for (var i = 0; i < intLinks.length; i++) { + var l = intLinks[i]; + if (l.o !== d) { + continue; + } + return [(l.source.x + l.target.x) / 2, (l.source.y + l.target.y) / 2, (ZOOM_MAX / 2) + ZOOM_MIN]; } - moveTo((l.source.x + l.target.x) / 2, (l.source.y + l.target.y) / 2); - break; - } - redraw(); + return [0, 0, (ZOOM_MIN + 1) / 2]; + }); }; - self.gotoLocation = function gotoLocation() { // ignore }; From 8df5c2ce8063273bdd2a69ae0562b6c890158cf0 Mon Sep 17 00:00:00 2001 From: Xaver Maierhofer Date: Wed, 24 May 2017 16:15:50 +0200 Subject: [PATCH 003/119] [TASK] Upgrade to uglify3 and minor lib updates --- gulp/tasks/javascript.js | 2 +- package.json | 10 +- yarn.lock | 332 ++++++++++++++++++++++++--------------- 3 files changed, 212 insertions(+), 132 deletions(-) diff --git a/gulp/tasks/javascript.js b/gulp/tasks/javascript.js index 7b21f15..594d600 100644 --- a/gulp/tasks/javascript.js +++ b/gulp/tasks/javascript.js @@ -3,7 +3,7 @@ module.exports = function (gulp, plugins, config, env) { return gulp.src('app.js') .pipe(env.development(plugins.sourcemaps.init())) .pipe(plugins.requirejsOptimize(env.production() ? config.requireJs.prod : config.requireJs.dev)) - .pipe(env.production(plugins.uglify({ preserveComments: 'license' }))) + .pipe(env.production(plugins.uglify({ output: { comments: 'all' } }))) .pipe(env.development(plugins.sourcemaps.write('.', { addComment: true }))) .pipe(gulp.dest(config.build)); }; diff --git a/package.json b/package.json index 3a5ea79..44d69df 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,7 @@ }, "devDependencies": { "babel-eslint": "^7.2.3", - "browser-sync": "^2.18.8", + "browser-sync": "^2.18.12", "eslint": "^3.19.0", "eslint-config-airbnb-es5": "^1.1.0", "eslint-config-defaults": "^9.0.0", @@ -30,7 +30,7 @@ "gulp-sass": "^3.1.0", "gulp-sass-lint": "^1.3.2", "gulp-sourcemaps": "^2.6.0", - "gulp-uglify": "^2.1.2" + "gulp-uglify": "^3.0.0" }, "eslintConfig": { "env": { @@ -44,15 +44,15 @@ "almond": "^0.3.3", "d3-drag": "^1.1.0", "d3-force": "^1.0.6", - "d3-selection": "^1.0.6", + "d3-selection": "^1.1.0", "d3-zoom": "^1.2.0", "leaflet": "^1.0.3", "moment": "^2.17.1", - "navigo": "^4.7.1", + "navigo": "^4.8.0", "node-polyglot": "^2.2.2", "promise-polyfill": "^6.0.2", "rbush": "^2.0.1", "requirejs": "^2.3.2", - "snabbdom": "^0.6.4" + "snabbdom": "^0.6.9" } } diff --git a/yarn.lock b/yarn.lock index 1821f4a..8a986a9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -43,8 +43,8 @@ acorn-object-spread@^1.0.0: acorn "^3.1.0" acorn@4.X: - version "4.0.11" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.11.tgz#edcda3bd937e7556410d42ed5860f67399c794c0" + version "4.0.13" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" acorn@^3.0.4, acorn@^3.1.0: version "3.3.0" @@ -266,11 +266,11 @@ atob@~1.1.0: resolved "https://registry.yarnpkg.com/atob/-/atob-1.1.3.tgz#95f13629b12c3a51a5d215abdce2aa9f32f80773" autoprefixer@^7.0.0: - version "7.0.1" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-7.0.1.tgz#472d7620a1b286e55ad1d8345a09d76aaed99d92" + version "7.1.1" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-7.1.1.tgz#97bc854c7d0b979f8d6489de547a0d17fb307f6d" dependencies: - browserslist "^2.1.2" - caniuse-lite "^1.0.30000665" + browserslist "^2.1.3" + caniuse-lite "^1.0.30000670" normalize-range "^0.1.2" num2fraction "^1.2.2" postcss "^6.0.1" @@ -437,9 +437,9 @@ braces@^1.8.2: preserve "^0.2.0" repeat-element "^1.1.2" -browser-sync-client@2.4.5: - version "2.4.5" - resolved "https://registry.yarnpkg.com/browser-sync-client/-/browser-sync-client-2.4.5.tgz#976afab1a54f255baa38fe22ae3c0d3753ad337b" +browser-sync-client@2.5.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/browser-sync-client/-/browser-sync-client-2.5.1.tgz#ec1ad69a49c2e2d4b645b18b1c06c29b3d9af8eb" dependencies: etag "^1.7.0" fresh "^0.3.0" @@ -455,20 +455,20 @@ browser-sync-ui@0.6.3: stream-throttle "^0.1.3" weinre "^2.0.0-pre-I0Z7U9OV" -browser-sync@^2.18.8: - version "2.18.8" - resolved "https://registry.yarnpkg.com/browser-sync/-/browser-sync-2.18.8.tgz#2fb4de253798d7cfb839afb9c2f801968490cec2" +browser-sync@^2.18.12: + version "2.18.12" + resolved "https://registry.yarnpkg.com/browser-sync/-/browser-sync-2.18.12.tgz#bbaa0a17a961e2b5f0a8e760e695027186664779" dependencies: - browser-sync-client "2.4.5" + browser-sync-client "2.5.1" browser-sync-ui "0.6.3" bs-recipes "1.3.4" - chokidar "1.6.1" + chokidar "1.7.0" connect "3.5.0" dev-ip "^1.0.1" easy-extender "2.3.2" eazy-logger "3.0.2" emitter-steward "^1.0.0" - fs-extra "1.0.0" + fs-extra "3.0.1" http-proxy "1.15.2" immutable "3.8.1" localtunnel "1.8.2" @@ -479,19 +479,19 @@ browser-sync@^2.18.8: resp-modifier "6.0.2" rx "4.1.0" serve-index "1.8.0" - serve-static "1.11.1" + serve-static "1.12.2" server-destroy "1.0.1" socket.io "1.6.0" socket.io-client "1.6.0" ua-parser-js "0.7.12" yargs "6.4.0" -browserslist@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.1.2.tgz#a9dd0791342dab019861c2dd1cd0fd5d83230d39" +browserslist@^2.1.3: + version "2.1.4" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.1.4.tgz#cc526af4a1312b7d2e05653e56d0c8ab70c0e053" dependencies: - caniuse-lite "^1.0.30000665" - electron-to-chromium "^1.3.9" + caniuse-lite "^1.0.30000670" + electron-to-chromium "^1.3.11" bs-recipes@1.3.4: version "1.3.4" @@ -581,9 +581,9 @@ camelcase@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" -caniuse-lite@^1.0.30000665: - version "1.0.30000669" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000669.tgz#f312f4868722f3ce869ce934da3b536e0e393845" +caniuse-lite@^1.0.30000670: + version "1.0.30000670" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000670.tgz#c94f7dbf0b68eaadc46d3d203f46e82e7801135e" caseless@~0.11.0: version "0.11.0" @@ -630,9 +630,9 @@ cheerio@*, cheerio@^0.19.0: htmlparser2 "~3.8.1" lodash "^3.2.0" -chokidar@1.6.1, chokidar@^1.4.3: - version "1.6.1" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.6.1.tgz#2f4447ab5e96e50fb3d789fd90d4c72e0e4c70c2" +chokidar@1.7.0, chokidar@^1.4.3: + version "1.7.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468" dependencies: anymatch "^1.3.0" async-each "^1.0.0" @@ -655,9 +655,9 @@ clap@^1.0.9: dependencies: chalk "^1.1.3" -clean-css@4.0.x: - version "4.0.13" - resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.0.13.tgz#feb2a176062d72a6c3e624d9213cac6a0c485e80" +clean-css@4.1.x: + version "4.1.3" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.1.3.tgz#07cfe8980edb20d455ddc23aadcf1e04c6e509ce" dependencies: source-map "0.5.x" @@ -700,8 +700,8 @@ co@^4.6.0: resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" coa@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/coa/-/coa-1.0.1.tgz#7f959346cfc8719e3f7233cd6852854a7c67d8a3" + version "1.0.2" + resolved "https://registry.yarnpkg.com/coa/-/coa-1.0.2.tgz#2ba9fec3b4aa43d7a49d7e6c3561e92061b6bcec" dependencies: q "^1.1.2" @@ -728,7 +728,7 @@ combined-stream@^1.0.5, combined-stream@~1.0.5: dependencies: delayed-stream "~1.0.0" -commander@2.9.x, commander@^2.2.0, commander@^2.8.1, commander@^2.9.0: +commander@2.9.x, commander@^2.2.0, commander@^2.8.1, commander@^2.9.0, commander@~2.9.0: version "2.9.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" dependencies: @@ -907,8 +907,8 @@ d3-force@^1.0.6: d3-timer "1" d3-interpolate@1: - version "1.1.4" - resolved "https://registry.yarnpkg.com/d3-interpolate/-/d3-interpolate-1.1.4.tgz#a43ec5b3bee350d8516efdf819a4c08c053db302" + version "1.1.5" + resolved "https://registry.yarnpkg.com/d3-interpolate/-/d3-interpolate-1.1.5.tgz#69e099ff39214716e563c9aec3ea9d1ea4b8a79f" dependencies: d3-color "1" @@ -916,23 +916,23 @@ d3-quadtree@1: version "1.0.3" resolved "https://registry.yarnpkg.com/d3-quadtree/-/d3-quadtree-1.0.3.tgz#ac7987e3e23fe805a990f28e1b50d38fcb822438" -d3-selection@1, d3-selection@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/d3-selection/-/d3-selection-1.0.6.tgz#15332288f01f429d3d8d04051f043184d07642b9" +d3-selection@1, d3-selection@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/d3-selection/-/d3-selection-1.1.0.tgz#1998684896488f839ca0372123da34f1d318809c" d3-timer@1: version "1.0.5" resolved "https://registry.yarnpkg.com/d3-timer/-/d3-timer-1.0.5.tgz#b266d476c71b0d269e7ac5f352b410a3b6fe6ef0" d3-transition@1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/d3-transition/-/d3-transition-1.0.4.tgz#e1a9ebae3869a9d9c2874ab00841fa8313ae5de5" + version "1.1.0" + resolved "https://registry.yarnpkg.com/d3-transition/-/d3-transition-1.1.0.tgz#cfc85c74e5239324290546623572990560c3966f" dependencies: d3-color "1" d3-dispatch "1" d3-ease "1" d3-interpolate "1" - d3-selection "1" + d3-selection "^1.1.0" d3-timer "1" d3-zoom@^1.2.0: @@ -964,6 +964,10 @@ dateformat@^1.0.11: get-stdin "^4.0.1" meow "^3.3.0" +dateformat@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-2.0.0.tgz#2743e3abb5c3fc2462e527dca445e04e9f4dee17" + debug-fabulous@0.1.X: version "0.1.0" resolved "https://registry.yarnpkg.com/debug-fabulous/-/debug-fabulous-0.1.0.tgz#ad0ea07a5d519324fb55842a8f34ee59c7f8ff6c" @@ -983,12 +987,18 @@ debug@2.3.3: dependencies: ms "0.7.2" -debug@2.X, debug@^2.1.1, debug@^2.2.0: - version "2.6.6" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.6.tgz#a9fa6fbe9ca43cf1e79f73b75c0189cbb7d6db5a" +debug@2.6.4: + version "2.6.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.4.tgz#7586a9b3c39741c0282ae33445c4e8ac74734fe0" dependencies: ms "0.7.3" +debug@2.X, debug@^2.1.1, debug@^2.2.0: + version "2.6.8" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc" + dependencies: + ms "2.0.0" + decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" @@ -1032,7 +1042,7 @@ delegates@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" -depd@~1.1.0: +depd@1.1.0, depd@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.0.tgz#e1bd82c6aab6ced965b97b88b17ed3e528ca18c3" @@ -1163,9 +1173,9 @@ ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" -electron-to-chromium@^1.3.9: - version "1.3.10" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.10.tgz#63d62b785471f0d8dda85199d64579de8a449f08" +electron-to-chromium@^1.3.11: + version "1.3.11" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.11.tgz#744761df1d67b492b322ce9aa0aba5393260eb61" emitter-steward@^1.0.0: version "1.0.0" @@ -1258,8 +1268,8 @@ es-to-primitive@^1.1.1: is-symbol "^1.0.1" es5-ext@^0.10.14, es5-ext@^0.10.9, es5-ext@~0.10.14: - version "0.10.16" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.16.tgz#1ef1b04f3d09db6a5d630226d62202f2e425e45a" + version "0.10.21" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.21.tgz#19a725f9e51d0300bbc1e8e821109fd9daf55925" dependencies: es6-iterator "2" es6-symbol "~3.1" @@ -1462,14 +1472,10 @@ esutils@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" -etag@^1.7.0: +etag@^1.7.0, etag@~1.8.0: version "1.8.0" resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.0.tgz#6f631aef336d6c46362b51764044ce216be3c051" -etag@~1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.7.0.tgz#03d30b5f67dd6e632d2945d30d6652731a34d5d8" - event-emitter@~0.3.5: version "0.3.5" resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" @@ -1697,7 +1703,11 @@ formidable@1.0.x: version "1.0.17" resolved "https://registry.yarnpkg.com/formidable/-/formidable-1.0.17.tgz#ef5491490f9433b705faa77249c99029ae348559" -fresh@0.3.0, fresh@^0.3.0: +fresh@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.0.tgz#f474ca5e6a9246d6fd8e0953cfa9b9c805afa78e" + +fresh@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.3.0.tgz#651f838e22424e7566de161d8358caa199f83d4f" @@ -1715,7 +1725,15 @@ fs-exists-sync@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz#982d6893af918e72d08dec9e8673ff2b5a8d6add" -fs-extra@1.0.0, fs-extra@^1.0.0: +fs-extra@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-3.0.1.tgz#3794f378c58b342ea7dbbb23095109c4b3b62291" + dependencies: + graceful-fs "^4.1.2" + jsonfile "^3.0.0" + universalify "^0.1.0" + +fs-extra@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-1.0.0.tgz#cd3ce5f7e7cb6145883fcae3191e9877f8587950" dependencies: @@ -1870,13 +1888,13 @@ glob@^5.0.3, glob@~5.0.0: path-is-absolute "^1.0.0" glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@~7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" + version "7.1.2" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" inherits "2" - minimatch "^3.0.2" + minimatch "^3.0.4" once "^1.3.0" path-is-absolute "^1.0.0" @@ -2144,20 +2162,19 @@ gulp-sourcemaps@^2.6.0: through2 "2.X" vinyl "1.X" -gulp-uglify@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/gulp-uglify/-/gulp-uglify-2.1.2.tgz#6db85b1d0ee63d18058592b658649d65c2ec4541" +gulp-uglify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/gulp-uglify/-/gulp-uglify-3.0.0.tgz#0df0331d72a0d302e3e37e109485dddf33c6d1ca" dependencies: gulplog "^1.0.0" has-gulplog "^0.1.0" lodash "^4.13.1" make-error-cause "^1.1.1" through2 "^2.0.0" - uglify-js "~2.8.10" - uglify-save-license "^0.4.1" + uglify-js "^3.0.5" vinyl-sourcemaps-apply "^0.2.0" -gulp-util@3.0.7, gulp-util@^3.0, gulp-util@^3.0.0, gulp-util@^3.0.6, gulp-util@^3.0.7, gulp-util@~3.0.4, gulp-util@~3.0.6: +gulp-util@3.0.7: version "3.0.7" resolved "https://registry.yarnpkg.com/gulp-util/-/gulp-util-3.0.7.tgz#78925c4b8f8b49005ac01a011c557e6218941cbb" dependencies: @@ -2180,6 +2197,29 @@ gulp-util@3.0.7, gulp-util@^3.0, gulp-util@^3.0.0, gulp-util@^3.0.6, gulp-util@^ through2 "^2.0.0" vinyl "^0.5.0" +gulp-util@^3.0, gulp-util@^3.0.0, gulp-util@^3.0.6, gulp-util@^3.0.7, gulp-util@~3.0.4, gulp-util@~3.0.6: + version "3.0.8" + resolved "https://registry.yarnpkg.com/gulp-util/-/gulp-util-3.0.8.tgz#0054e1e744502e27c04c187c3ecc505dd54bbb4f" + dependencies: + array-differ "^1.0.0" + array-uniq "^1.0.2" + beeper "^1.0.0" + chalk "^1.0.0" + dateformat "^2.0.0" + fancy-log "^1.1.0" + gulplog "^1.0.0" + has-gulplog "^0.1.0" + lodash._reescape "^3.0.0" + lodash._reevaluate "^3.0.0" + lodash._reinterpolate "^3.0.0" + lodash.template "^3.0.0" + minimist "^1.1.0" + multipipe "^0.1.2" + object-assign "^3.0.0" + replace-ext "0.0.1" + through2 "^2.0.0" + vinyl "^0.5.0" + "gulp@github:gulpjs/gulp#4.0": version "4.0.0-alpha.2" resolved "https://codeload.github.com/gulpjs/gulp/tar.gz/38246c3f8b6dbb8d4ef657183e92d90c8299e22f" @@ -2285,17 +2325,17 @@ hosted-git-info@^2.1.4: resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.4.2.tgz#0076b9f46a270506ddbaaea56496897460612a67" html-minifier@^3.0.3: - version "3.4.4" - resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.4.4.tgz#616fe3e3ef16da02b393d9a6099eeff468a35df0" + version "3.5.1" + resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.1.tgz#0fbba015129b4ac9a30b887aec66f39d57cd37a9" dependencies: camel-case "3.0.x" - clean-css "4.0.x" + clean-css "4.1.x" commander "2.9.x" he "1.1.x" ncname "1.0.x" param-case "2.1.x" relateurl "0.2.x" - uglify-js "~2.8.22" + uglify-js "3.0.x" htmlparser2@3.9.x: version "3.9.2" @@ -2326,6 +2366,15 @@ http-errors@~1.5.0: setprototypeof "1.0.2" statuses ">= 1.3.1 < 2" +http-errors@~1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.1.tgz#5f8b8ed98aca545656bf572997387f904a722257" + dependencies: + depd "1.1.0" + inherits "2.0.3" + setprototypeof "1.0.3" + statuses ">= 1.3.1 < 2" + http-proxy@1.15.2: version "1.15.2" resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.15.2.tgz#642fdcaffe52d3448d2bda3b0079e9409064da31" @@ -2342,8 +2391,8 @@ http-signature@~1.1.0: sshpk "^1.7.0" ignore@^3.1.2, ignore@^3.2.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.0.tgz#3812d22cbe9125f2c2b4915755a1b8abd745a001" + version "3.3.3" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.3.tgz#432352e57accd87ab3110e82d3fea0e47812156d" immutable@3.8.1, immutable@^3.7.6: version "3.8.1" @@ -2716,6 +2765,12 @@ jsonfile@^2.1.0: optionalDependencies: graceful-fs "^4.1.6" +jsonfile@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-3.0.0.tgz#92e7c7444e5ffd5fa32e6a9ae8b85034df8347d0" + optionalDependencies: + graceful-fs "^4.1.6" + jsonify@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" @@ -2742,8 +2797,8 @@ jsx-ast-utils@^1.3.4: resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-1.4.1.tgz#3867213e8dd79bf1e8f2300c0cfc1efb182c0df1" kind-of@^3.0.2, kind-of@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.0.tgz#b58abe4d5c044ad33726a8c1525b48cf891bff07" + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" dependencies: is-buffer "^1.1.5" @@ -3028,8 +3083,8 @@ make-error-cause@^1.1.1: make-error "^1.2.0" make-error@^1.2.0: - version "1.2.3" - resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.2.3.tgz#6c4402df732e0977ac6faf754a5074b3d2b1d19d" + version "1.3.0" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.0.tgz#52ad3a339ccf10ce62b4040b708fe707244b8b96" make-iterator@^0.1.1: version "0.1.1" @@ -3149,7 +3204,7 @@ mime@1.3.4, "mime@>= 0.0.1": version "1.3.4" resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53" -"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@~3.0.2: +"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4, minimatch@~3.0.2: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" dependencies: @@ -3193,6 +3248,14 @@ ms@0.7.3: version "0.7.3" resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.3.tgz#708155a5e44e33f5fd0fc53e81d0d40a91be1fff" +ms@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-1.0.0.tgz#59adcd22edc543f7b5381862d31387b1f4bc9473" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + multipipe@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/multipipe/-/multipipe-0.1.2.tgz#2a8f2ddf70eed564dff2d57f1e1a137d9f05078b" @@ -3219,9 +3282,9 @@ natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" -navigo@^4.7.1: - version "4.7.1" - resolved "https://registry.yarnpkg.com/navigo/-/navigo-4.7.1.tgz#8b28980c0a1cc12e255656cd962c9c6cc5cd111c" +navigo@^4.8.0: + version "4.8.0" + resolved "https://registry.yarnpkg.com/navigo/-/navigo-4.8.0.tgz#fc2875226c9af050fa7398b90039f96e717c7ce6" ncname@1.0.x: version "1.0.0" @@ -3292,8 +3355,8 @@ node-rest-client@^1.4.1: xml2js ">=0.2.4" node-sass@^4.2.0: - version "4.5.2" - resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.5.2.tgz#4012fa2bd129b1d6365117e88d9da0500d99da64" + version "4.5.3" + resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.5.3.tgz#d09c9d1179641239d1b97ffc6231fdcec53e1568" dependencies: async-foreach "^0.1.3" chalk "^1.1.1" @@ -4029,13 +4092,13 @@ safe-buffer@^5.0.1: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.0.1.tgz#d263ca54696cd8a306b5ca6551e92de57918fbe7" sass-graph@^2.1.1: - version "2.2.3" - resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.2.3.tgz#2ba9f170f6cafed5b51665abe13cf319c9269c31" + version "2.2.4" + resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.2.4.tgz#13fbd63cd1caf0908b9fd93476ad43a51d1e0b49" dependencies: glob "^7.0.0" lodash "^4.0.0" scss-tokenizer "^0.2.3" - yargs "^6.6.0" + yargs "^7.0.0" sass-lint@^1.10.2: version "1.10.2" @@ -4085,23 +4148,23 @@ semver@^4.2.0: version "4.3.6" resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.6.tgz#300bc6e0e86374f7ba61068b5b1ecd57fc6532da" -send@0.14.1: - version "0.14.1" - resolved "https://registry.yarnpkg.com/send/-/send-0.14.1.tgz#a954984325392f51532a7760760e459598c89f7a" +send@0.15.2: + version "0.15.2" + resolved "https://registry.yarnpkg.com/send/-/send-0.15.2.tgz#f91fab4403bcf87e716f70ceb5db2f578bdc17d6" dependencies: - debug "~2.2.0" + debug "2.6.4" depd "~1.1.0" destroy "~1.0.4" encodeurl "~1.0.1" escape-html "~1.0.3" - etag "~1.7.0" - fresh "0.3.0" - http-errors "~1.5.0" + etag "~1.8.0" + fresh "0.5.0" + http-errors "~1.6.1" mime "1.3.4" - ms "0.7.1" + ms "1.0.0" on-finished "~2.3.0" range-parser "~1.2.0" - statuses "~1.3.0" + statuses "~1.3.1" serve-index@1.8.0: version "1.8.0" @@ -4115,14 +4178,14 @@ serve-index@1.8.0: mime-types "~2.1.11" parseurl "~1.3.1" -serve-static@1.11.1: - version "1.11.1" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.11.1.tgz#d6cce7693505f733c759de57befc1af76c0f0805" +serve-static@1.12.2: + version "1.12.2" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.12.2.tgz#e546e2726081b81b4bcec8e90808ebcdd323afba" dependencies: encodeurl "~1.0.1" escape-html "~1.0.3" parseurl "~1.3.1" - send "0.14.1" + send "0.15.2" server-destroy@1.0.1: version "1.0.1" @@ -4153,6 +4216,10 @@ setprototypeof@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.2.tgz#81a552141ec104b88e89ce383103ad5c66564d08" +setprototypeof@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04" + shelljs@^0.6.0: version "0.6.1" resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.6.1.tgz#ec6211bed1920442088fe0f70b2837232ed2c8a8" @@ -4179,9 +4246,9 @@ slice-ansi@0.0.4: dependencies: readable-stream "~1.0.31" -snabbdom@^0.6.4: - version "0.6.7" - resolved "https://registry.yarnpkg.com/snabbdom/-/snabbdom-0.6.7.tgz#045d9fc292574fe3597578bde2d9c403f79a1352" +snabbdom@^0.6.9: + version "0.6.9" + resolved "https://registry.yarnpkg.com/snabbdom/-/snabbdom-0.6.9.tgz#65a392f4c82ca7e8ec72aa0d2fa797cf5c73b8d7" sntp@1.x.x: version "1.0.9" @@ -4315,7 +4382,7 @@ stack-trace@0.0.9: version "0.0.9" resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.9.tgz#a8f6eaeca90674c333e7c43953f275b451510695" -"statuses@>= 1.3.1 < 2", statuses@~1.3.0: +"statuses@>= 1.3.1 < 2", statuses@~1.3.0, statuses@~1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e" @@ -4380,10 +4447,10 @@ string_decoder@~0.10.x: resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" string_decoder@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.0.tgz#f06f41157b664d86069f84bdbdc9b0d8ab281667" + version "1.0.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.1.tgz#62e200f039955a6810d8df0a33ffc0f013662d98" dependencies: - buffer-shims "~1.0.0" + safe-buffer "^5.0.1" stringstream@~0.0.4: version "0.0.5" @@ -4522,13 +4589,20 @@ through2-filter@^2.0.0: through2 "~2.0.0" xtend "~4.0.0" -through2@2.0.1, through2@2.X, through2@^2.0.0, through2@^2.0.1, through2@~2.0.0: +through2@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.1.tgz#384e75314d49f32de12eebb8136b8eb6b5d59da9" dependencies: readable-stream "~2.0.0" xtend "~4.0.0" +through2@2.X, through2@^2.0.0, through2@^2.0.1, through2@^2.0.3, through2@~2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be" + dependencies: + readable-stream "^2.1.5" + xtend "~4.0.1" + through2@^0.6.0, through2@~0.6.5: version "0.6.5" resolved "https://registry.yarnpkg.com/through2/-/through2-0.6.5.tgz#41ab9c67b29d57209071410e1d7a7a968cd3ad48" @@ -4536,13 +4610,6 @@ through2@^0.6.0, through2@~0.6.5: readable-stream ">=1.0.33-1 <1.1.0-0" xtend ">=4.0.0 <4.1.0-0" -through2@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be" - dependencies: - readable-stream "^2.1.5" - xtend "~4.0.1" - through@2, through@^2.3.6, through@~2.3, through@~2.3.1: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" @@ -4554,8 +4621,8 @@ tildify@^1.0.0: os-homedir "^1.0.0" time-stamp@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.0.1.tgz#9f4bd23559c9365966f3302dbba2b07c6b99b151" + version "1.1.0" + resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.1.0.tgz#764a5a11af50561921b133f3b44e618687e0f5c3" to-absolute-glob@^0.1.1: version "0.1.1" @@ -4623,18 +4690,21 @@ ua-parser-js@0.7.12: version "0.7.12" resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.12.tgz#04c81a99bdd5dc52263ea29d24c6bf8d4818a4bb" -uglify-js@2.8.x, uglify-js@~2.8.10, uglify-js@~2.8.22: - version "2.8.24" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.24.tgz#48eb5175cf32e22ec11a47e638d7c8b4e0faf2dd" +uglify-js@2.8.x: + version "2.8.27" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.27.tgz#47787f912b0f242e5b984343be8e35e95f694c9c" dependencies: source-map "~0.5.1" yargs "~3.10.0" optionalDependencies: uglify-to-browserify "~1.0.0" -uglify-save-license@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/uglify-save-license/-/uglify-save-license-0.4.1.tgz#95726c17cc6fd171c3617e3bf4d8d82aa8c4cce1" +uglify-js@3.0.x, uglify-js@^3.0.5: + version "3.0.11" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.0.11.tgz#81f594b9a24dad76e39da92f8f06e5b3bc8c2e11" + dependencies: + commander "~2.9.0" + source-map "~0.5.1" uglify-to-browserify@~1.0.0: version "1.0.2" @@ -4690,6 +4760,10 @@ unique-stream@^2.0.2: json-stable-stringify "^1.0.0" through2-filter "^2.0.0" +universalify@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.0.tgz#9eb1c4651debcc670cc94f1a75762332bb967778" + unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" @@ -4945,12 +5019,18 @@ yargs-parser@^3.2.0: camelcase "^3.0.0" lodash.assign "^4.1.0" -yargs-parser@^4.1.0, yargs-parser@^4.2.0: +yargs-parser@^4.1.0: version "4.2.1" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-4.2.1.tgz#29cceac0dc4f03c6c87b4a9f217dd18c9f74871c" dependencies: camelcase "^3.0.0" +yargs-parser@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-5.0.0.tgz#275ecf0d7ffe05c77e64e7c86e4cd94bf0e1228a" + dependencies: + camelcase "^3.0.0" + yargs@3.29.0, yargs@^3.28.0: version "3.29.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.29.0.tgz#1aab9660eae79d8b8f675bcaeeab6ee34c2cf69c" @@ -5000,9 +5080,9 @@ yargs@^5.0.0: y18n "^3.2.1" yargs-parser "^3.2.0" -yargs@^6.6.0: - version "6.6.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-6.6.0.tgz#782ec21ef403345f830a808ca3d513af56065208" +yargs@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8" dependencies: camelcase "^3.0.0" cliui "^3.2.0" @@ -5016,7 +5096,7 @@ yargs@^6.6.0: string-width "^1.0.2" which-module "^1.0.0" y18n "^3.2.1" - yargs-parser "^4.2.0" + yargs-parser "^5.0.0" yargs@~3.10.0: version "3.10.0" From 2fba8c1ac995eb7ce6029e144763f07b210b931b Mon Sep 17 00:00:00 2001 From: Xaver Maierhofer Date: Thu, 25 May 2017 23:54:13 +0200 Subject: [PATCH 004/119] [TASK] Add gulp-cli as dev dependency Easier to deploy via provisioning --- package.json | 1 + yarn.lock | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 44d69df..436395f 100644 --- a/package.json +++ b/package.json @@ -18,6 +18,7 @@ "gulp": "github:gulpjs/gulp#4.0", "gulp-autoprefixer": "^4.0.0", "gulp-cache-bust": "^1.1.0", + "gulp-cli": "^1.3.0", "gulp-environments": "^0.1.2", "gulp-eslint": "^3.0.1", "gulp-htmlmin": "^3.0.0", diff --git a/yarn.lock b/yarn.lock index 8a986a9..8346bbb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1995,7 +1995,7 @@ gulp-cache-bust@^1.1.0: temp-write "^2.1.0" through2 "2.0.1" -gulp-cli@^1.0.0: +gulp-cli@^1.0.0, gulp-cli@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/gulp-cli/-/gulp-cli-1.3.0.tgz#a6bfbb8be35341be290ae45cd3e401071216edd4" dependencies: From 6b67e4f7142a570f210efda9685e7de534137a1d Mon Sep 17 00:00:00 2001 From: Xaver Maierhofer Date: Sun, 28 May 2017 20:15:12 +0200 Subject: [PATCH 005/119] [BUGFIX] Mobile button position --- scss/modules/_map.scss | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scss/modules/_map.scss b/scss/modules/_map.scss index 8b16adb..c5457d8 100644 --- a/scss/modules/_map.scss +++ b/scss/modules/_map.scss @@ -16,9 +16,10 @@ } @media screen and (max-width: map-get($grid-breakpoints, lg) - 1) { - right: -1rem; + right: 0.1rem; top: 0; transform: scale(.8); + transform-origin: right; } } From 9c3f57dd3f40992bf0f62c535c847fc1ccc0c9ce Mon Sep 17 00:00:00 2001 From: Xaver Maierhofer Date: Mon, 29 May 2017 23:41:25 +0200 Subject: [PATCH 006/119] [BUGFIX] Sasslint leading-zero --- scss/modules/_map.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scss/modules/_map.scss b/scss/modules/_map.scss index c5457d8..8c74a88 100644 --- a/scss/modules/_map.scss +++ b/scss/modules/_map.scss @@ -16,7 +16,7 @@ } @media screen and (max-width: map-get($grid-breakpoints, lg) - 1) { - right: 0.1rem; + right: .1rem; top: 0; transform: scale(.8); transform-origin: right; From 374e73998a768692246f13eb06972ad4e1787c06 Mon Sep 17 00:00:00 2001 From: Xaver Maierhofer Date: Tue, 30 May 2017 20:15:27 +0200 Subject: [PATCH 007/119] [TASK] Upgrade to navigo v5 & d3-zoom v1.3 --- package.json | 4 +- yarn.lock | 101 ++++++++++++++++++++++----------------------------- 2 files changed, 45 insertions(+), 60 deletions(-) diff --git a/package.json b/package.json index 436395f..87e9d5b 100644 --- a/package.json +++ b/package.json @@ -46,10 +46,10 @@ "d3-drag": "^1.1.0", "d3-force": "^1.0.6", "d3-selection": "^1.1.0", - "d3-zoom": "^1.2.0", + "d3-zoom": "^1.3.0", "leaflet": "^1.0.3", "moment": "^2.17.1", - "navigo": "^4.8.0", + "navigo": "^5.0.1", "node-polyglot": "^2.2.2", "promise-polyfill": "^6.0.2", "rbush": "^2.0.1", diff --git a/yarn.lock b/yarn.lock index 8346bbb..67ae9d5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -573,7 +573,7 @@ camelcase@^1.0.2, camelcase@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" -camelcase@^2.0.0: +camelcase@^2.0.0, camelcase@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" @@ -582,8 +582,8 @@ camelcase@^3.0.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" caniuse-lite@^1.0.30000670: - version "1.0.30000670" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000670.tgz#c94f7dbf0b68eaadc46d3d203f46e82e7801135e" + version "1.0.30000676" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000676.tgz#1e962123f48073f0c51c4ea0651dd64d25786498" caseless@~0.11.0: version "0.11.0" @@ -935,9 +935,9 @@ d3-transition@1: d3-selection "^1.1.0" d3-timer "1" -d3-zoom@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/d3-zoom/-/d3-zoom-1.2.0.tgz#b3231f4f9386241475defe1c557bfd3fde1065fb" +d3-zoom@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/d3-zoom/-/d3-zoom-1.3.0.tgz#fe0f363b00590de55aa4dbcc860b28ffe78f13c5" dependencies: d3-dispatch "1" d3-drag "1" @@ -964,10 +964,6 @@ dateformat@^1.0.11: get-stdin "^4.0.1" meow "^3.3.0" -dateformat@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-2.0.0.tgz#2743e3abb5c3fc2462e527dca445e04e9f4dee17" - debug-fabulous@0.1.X: version "0.1.0" resolved "https://registry.yarnpkg.com/debug-fabulous/-/debug-fabulous-0.1.0.tgz#ad0ea07a5d519324fb55842a8f34ee59c7f8ff6c" @@ -1174,8 +1170,8 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" electron-to-chromium@^1.3.11: - version "1.3.11" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.11.tgz#744761df1d67b492b322ce9aa0aba5393260eb61" + version "1.3.13" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.13.tgz#1b3a5eace6e087bb5e257a100b0cbfe81b2891fc" emitter-steward@^1.0.0: version "1.0.0" @@ -2174,7 +2170,7 @@ gulp-uglify@^3.0.0: uglify-js "^3.0.5" vinyl-sourcemaps-apply "^0.2.0" -gulp-util@3.0.7: +gulp-util@3.0.7, gulp-util@^3.0, gulp-util@^3.0.0, gulp-util@^3.0.6, gulp-util@^3.0.7, gulp-util@~3.0.4, gulp-util@~3.0.6: version "3.0.7" resolved "https://registry.yarnpkg.com/gulp-util/-/gulp-util-3.0.7.tgz#78925c4b8f8b49005ac01a011c557e6218941cbb" dependencies: @@ -2197,29 +2193,6 @@ gulp-util@3.0.7: through2 "^2.0.0" vinyl "^0.5.0" -gulp-util@^3.0, gulp-util@^3.0.0, gulp-util@^3.0.6, gulp-util@^3.0.7, gulp-util@~3.0.4, gulp-util@~3.0.6: - version "3.0.8" - resolved "https://registry.yarnpkg.com/gulp-util/-/gulp-util-3.0.8.tgz#0054e1e744502e27c04c187c3ecc505dd54bbb4f" - dependencies: - array-differ "^1.0.0" - array-uniq "^1.0.2" - beeper "^1.0.0" - chalk "^1.0.0" - dateformat "^2.0.0" - fancy-log "^1.1.0" - gulplog "^1.0.0" - has-gulplog "^0.1.0" - lodash._reescape "^3.0.0" - lodash._reevaluate "^3.0.0" - lodash._reinterpolate "^3.0.0" - lodash.template "^3.0.0" - minimist "^1.1.0" - multipipe "^0.1.2" - object-assign "^3.0.0" - replace-ext "0.0.1" - through2 "^2.0.0" - vinyl "^0.5.0" - "gulp@github:gulpjs/gulp#4.0": version "4.0.0-alpha.2" resolved "https://codeload.github.com/gulpjs/gulp/tar.gz/38246c3f8b6dbb8d4ef657183e92d90c8299e22f" @@ -2325,8 +2298,8 @@ hosted-git-info@^2.1.4: resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.4.2.tgz#0076b9f46a270506ddbaaea56496897460612a67" html-minifier@^3.0.3: - version "3.5.1" - resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.1.tgz#0fbba015129b4ac9a30b887aec66f39d57cd37a9" + version "3.5.2" + resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.2.tgz#d73bc3ff448942408818ce609bf3fb0ea7ef4eb7" dependencies: camel-case "3.0.x" clean-css "4.1.x" @@ -2514,8 +2487,8 @@ is-date-object@^1.0.1: resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" is-dotfile@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.2.tgz#2c132383f39199f8edc268ca01b9b007d205cc4d" + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" is-equal-shallow@^0.1.3: version "0.1.3" @@ -2614,10 +2587,10 @@ is-plain-obj@1.1.x: resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" is-plain-object@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.1.tgz#4d7ca539bc9db9b737b8acb612f2318ef92f294f" + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.3.tgz#c15bf3e4b66b62d72efaf2925848663ecbc619b6" dependencies: - isobject "^1.0.0" + isobject "^3.0.0" is-posix-bracket@^0.1.0: version "0.1.1" @@ -3282,9 +3255,9 @@ natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" -navigo@^4.8.0: - version "4.8.0" - resolved "https://registry.yarnpkg.com/navigo/-/navigo-4.8.0.tgz#fc2875226c9af050fa7398b90039f96e717c7ce6" +navigo@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/navigo/-/navigo-5.0.1.tgz#e692c587a8066a9e56a22ce9c901e732e5c3f938" ncname@1.0.x: version "1.0.0" @@ -4589,20 +4562,13 @@ through2-filter@^2.0.0: through2 "~2.0.0" xtend "~4.0.0" -through2@2.0.1: +through2@2.0.1, through2@2.X, through2@^2.0.0, through2@^2.0.1, through2@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.1.tgz#384e75314d49f32de12eebb8136b8eb6b5d59da9" dependencies: readable-stream "~2.0.0" xtend "~4.0.0" -through2@2.X, through2@^2.0.0, through2@^2.0.1, through2@^2.0.3, through2@~2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be" - dependencies: - readable-stream "^2.1.5" - xtend "~4.0.1" - through2@^0.6.0, through2@~0.6.5: version "0.6.5" resolved "https://registry.yarnpkg.com/through2/-/through2-0.6.5.tgz#41ab9c67b29d57209071410e1d7a7a968cd3ad48" @@ -4610,6 +4576,13 @@ through2@^0.6.0, through2@~0.6.5: readable-stream ">=1.0.33-1 <1.1.0-0" xtend ">=4.0.0 <4.1.0-0" +through2@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be" + dependencies: + readable-stream "^2.1.5" + xtend "~4.0.1" + through@2, through@^2.3.6, through@~2.3, through@~2.3.1: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" @@ -4700,8 +4673,8 @@ uglify-js@2.8.x: uglify-to-browserify "~1.0.0" uglify-js@3.0.x, uglify-js@^3.0.5: - version "3.0.11" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.0.11.tgz#81f594b9a24dad76e39da92f8f06e5b3bc8c2e11" + version "3.0.13" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.0.13.tgz#1871d736aa1e550c728d7e5a6556579e70925d68" dependencies: commander "~2.9.0" source-map "~0.5.1" @@ -4928,7 +4901,7 @@ window-size@0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" -window-size@^0.1.2: +window-size@^0.1.2, window-size@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.4.tgz#f8e1aa1ee5a53ec5bf151ffa09742a6ad7697876" @@ -5031,7 +5004,7 @@ yargs-parser@^5.0.0: dependencies: camelcase "^3.0.0" -yargs@3.29.0, yargs@^3.28.0: +yargs@3.29.0: version "3.29.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.29.0.tgz#1aab9660eae79d8b8f675bcaeeab6ee34c2cf69c" dependencies: @@ -5061,6 +5034,18 @@ yargs@6.4.0: y18n "^3.2.1" yargs-parser "^4.1.0" +yargs@^3.28.0: + version "3.32.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.32.0.tgz#03088e9ebf9e756b69751611d2a5ef591482c995" + dependencies: + camelcase "^2.0.1" + cliui "^3.0.3" + decamelize "^1.1.1" + os-locale "^1.4.0" + string-width "^1.0.1" + window-size "^0.1.4" + y18n "^3.2.0" + yargs@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-5.0.0.tgz#3355144977d05757dbb86d6e38ec056123b3a66e" From 717ba279929794d67db4dc5ef2519ca2553f9b62 Mon Sep 17 00:00:00 2001 From: Xaver Maierhofer Date: Sun, 4 Jun 2017 16:41:13 +0200 Subject: [PATCH 008/119] [TASK] Optimize favicons --- assets/favicon/android-chrome-192x192.png | Bin 3843 -> 3693 bytes assets/favicon/android-chrome-512x512.png | Bin 9440 -> 9270 bytes assets/favicon/apple-touch-icon.png | Bin 2825 -> 3221 bytes assets/favicon/favicon-16x16.png | Bin 624 -> 485 bytes assets/favicon/favicon-32x32.png | Bin 1025 -> 886 bytes assets/favicon/manifest.json | 5 +- assets/favicon/mstile-144x144.png | Bin 3016 -> 2454 bytes assets/favicon/mstile-150x150.png | Bin 2656 -> 2235 bytes assets/favicon/mstile-310x150.png | Bin 2689 -> 2301 bytes assets/favicon/mstile-310x310.png | Bin 4983 -> 4335 bytes assets/favicon/mstile-70x70.png | Bin 2185 -> 1676 bytes assets/favicon/safari-pinned-tab.svg | 135 +--------------------- assets/faviconData.json | 2 +- gulp/tasks/favicon.js | 6 +- 14 files changed, 8 insertions(+), 140 deletions(-) diff --git a/assets/favicon/android-chrome-192x192.png b/assets/favicon/android-chrome-192x192.png index c8aed28b7a53c4ed039761a59a4024fdcfcb9927..c5dd45d31fa9eaeed851697a6bf9d80cf2f328ef 100644 GIT binary patch delta 3420 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 literal 9440 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 Yw&IC~#w&qK*M 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 Dma188 delta 339 zcmV-Z0j&Pz1MmcpBpL)~K}|sb0I`n?{9y$E0004VQb$4nuFf3ku^|Tmf3rzMK~xyi zeUHZyfNXJOd@EFhAjfTCi~;r~C(rA!ygxpYm}biW#af1_dS_R2f$X?O@FQuKN1 zK~z%UYR4RD*lMO~!Wsb&6wmJyrXT2GH8xDuT;M+HGIMf2U&urU`l{#GlQq2=^uvqd z7HUh><(pqjMbsSjRVWt&f3qRkY>#og%U3oBASmz^T{P{I5eFq2I4oCSX|3fkOO=5E zvjM_D!@iDY#FoUO`_kx-k00j%3(PU#6p{b{09SfcSaechcOY6Cgx@Ei}Vq10%CkAj{a) l$i&RV9K;99fJmT9E&%Em5p?oGHI)DW002ovPDHLkV1mBzjNkwO diff --git a/assets/favicon/favicon-32x32.png b/assets/favicon/favicon-32x32.png index a4907a616ae55408133fba77bbb67f06ad6f2f2a..7c478b7b1370633f939c8f6d072d78641f3e3d4a 100644 GIT binary patch delta 490 zcmV17H3ReDn;B$_W2OH-a zfan>BiH7If3J1VkoOp-sdtYw{d|g+}}n)5PbP66mikp+kItQ=ttjFT=p34 z09;Kb1LO-G6X(pE{eJ=gn+CPrwA(M>9N)Tr55RPS>7(`C+2JK7W^4&_mgOheu zV0unqfMQFK6Rrec<2cq9Cz4&Quc!v#LGedPn#9pnrDx*V+#|F+10dRj(((-FnBJVr gI4Xu3r{XpJ0tGuT`Z#@YO8@`>07*qoM6N<$g3Acz;s5{u delta 629 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 Da+A5; diff --git a/assets/favicon/mstile-150x150.png b/assets/favicon/mstile-150x150.png index 2ea0c5f70deb25f11ab96618c536004ada7b771c..c24fcfc6562d858291dda84048822f8b4da44446 100644 GIT binary patch delta 2122 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 O2|XPnbhWl^=zjq)7*!Ae delta 2554 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 O0$^rj32ZdD|L9-pHVqj7 diff --git a/assets/favicon/mstile-310x310.png b/assets/favicon/mstile-310x310.png index b2a9f3917b3f7e438e3497a865cea0770aeaedb4..1b00e9ad231280592cc811b0c4f4eb8185f1d4a4 100644 GIT binary patch delta 4158 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 diff --git a/assets/favicon/mstile-70x70.png b/assets/favicon/mstile-70x70.png index 82ea8764334d79bc9b92fd380ff32034a5332049..5fa172ed54193cfb16f6619aa733a07e443ba9cd 100644 GIT binary patch literal 1676 zcmb`H|34G>1IOPpUv_AHF-JFKXHz(I$hXeSw~MryiED-COS{(PTU(ec^R161-<7O< zD<5B%@+E1$UK1*0mD@4-awcDrB;T8M?tc0F1E1I9@%r-9>&GXDNI0@X`8#C*zz#Q8 zXVP}F|1k`@oy+4{8{2i9c^7=mbLlnr ztOSrZ%eR=4XJkwIzW(!@)~aw&_jJ4hRD3$V*qw|YVMSl7gcO%eInY3{&16TXp8ku8 zdQG$(J4J64%C;6zi~2}RefsLqeQS{Ovxlt$t{}Wv4$!*N$qJxMS_9<(b`?5l#vd~7 zC!G#tZ29M#&fHkek?+VjJWx4>KLZ7T zIeOaNs@+b)P8Bq@NU|WzGw7N3b^-)gS>_##wrSg$LzFxFs)FCtG|b_m_b#5KWRHl_ zI^QR#0?KPOa!=k!wF0ntD(xXTR;ioHDH)n71pBW{Qly^3Rp)Ovm2cGNmij4zJ1Lcf z{F=||V(G*Qjz$GNN_YUmMk29-d-?b@P}gUC-Qv$$`_gi)10vH?pDGrQxLb`ZU4uIR z!0C+kQCBoF=Qi;XJ`UWpEnBH>wTeb*3SwcOJUL+Sd7|}b#ymzzOc_HY%>-U(tPM5% z>V_!ya=M;t5u4898S41Cx0;MO&sE$Qjw+ea_u2nPcfDa;q^@fK&2-j92fwJh^*h8) zsIgCmK(&{;M`;fP4TPFtG*CaH%2(2%{IykPT>jRtq$>X}e|WJyk{{*4v8UFfY5O$m zZm;o!eZs+2Zkui?V-#Cpvf$+OLQp_{o`_(1ZlKk#`KDQpRWFygrlk935XSdQj8Ugo zaGnl#9Sd013Q+-b6mk}#;MUfUW9K?l!i2pEEum=8lNEai2%kz9A35h-?rzh#&D8pc zhJvr!$}!JcIaXfa;1AkfQ)Mr%&;|VuN_s)@H>Ee_0dwfYb2;|l;g+7%x?_iE2D%tZ z4JSTymCqX$34St9>jUO177M60NyqnvryQ?%wT^cm8JO3O-;+znKu)Te`M+a}8LmRr z0|s-AL5dG9=6!599~VDB3%zn#JL6SmgloUmfB(7<8yG&=aI*F7ng<=FJUp*VBUFerneiYj5;&?VilO^CgA10ybKT7#nMAjy7lLueGU>4S^Ru>kTiY!hcbx zytNbUteTzo$|UmVwC?IkYZ3R}#aH&0F~a0Br{lDe)(>Y-JhKzp!%z~>5NwM<_E0wl zM$0c$Ir8N8L+`Pe@2>}$6jc}5Y`nrQ;oh;_QmECsxjZv6wR_ThGZ?1G6j-2t?5c2TUYHp>bKtpJS=b`RbT`D!Xt@P_ay1u_+%NG zCu^4Tr%n_&`s^V=UW;M!vTP~wMIA@ZWv)FfX_MSuH*+3A%>OX_FOOw9GU)EX7IAIHp}}qZ12-3fbB!Y<;cwe!Pxt@; literal 2185 zcmYL~dpr~R8^_1YX%og4xhyNoP_5i2#N1{iGis$|?nGoMC)X)*oXVw=g&1AjjXKCB z{9KO9T)Hg|HFLK@?)T-l4zJVe^?bk2=Xsv@^ZmZQukRmEJn93l?^0080yD|3>- z(|)d9K*7GqOW^Nw7>-Ii>*8Sc6B?yt(ge&(!ZEs7aX!(`l%7W^slbJ zcbNakZT?e~@hC%g=rQ&~D6Yf9vK-^k8+&4#S?W-KjkTZ5*KV}8>1RIi6Fd+XOgiNN zSg$cqD+WqN$eb5rs2X_*gYgvtcI+QF{s!*DCnJ2B8)6%DGb+-m{*nv{e zqpJJpM8pr?z4(rq6J6+_VgNuihhUC#{JnqLi5ym74Nu`b`$Lr2zzMT)qq0^A-Bnv# zXlJk6niPHO=GxMW(i)|Dek(?5DG<0Skzo=o4B8fTT%V3(qwiRf@e`i82ae%yraY8d z0nX!{hxX=;r(?`PxqmM;tZu3j`STeSUC$!eFa5j^ng!+tcOW zCYtTF>}7qmI-z)Q2oHx>J%ueNP5RI0WA02AvGf)wO)H6@0&_12R(V+kSM~0$A$U|S zU#vAi2DDpd!K1P69#B4pBJOjQ+y4H%AG(?&7Caq=;yP{LcYaTm*JbsqP8^rJt3-4SiNvk6*7Dk zL$th8uU+ZTvmmNe?0_x;HeQ>8bc(&_LreyFLrQ6LsR}G0)EIL%pfz{iRO_iQ zl&Yx>Qr7*XXo-S(reQ{6_6_L=Qb*K9wlqy7pj zav|`T9yyGuVfSU}y?X*0`jUNs-kf-tC&J98;JEc06kaIDgFYM;VyNuG`jnF0cPGgT z$OhjP*0TW2W3%*X4;ILst7+^FHNAz&qpv~V@qx2mW=@-(c~8}hB{C=;l`UfM}r zOE3s4{v2|K6(o_)E-P}oKJL)df5u*a{4)GVQQ9}fz0W|#ObNXawY*mGkbhRrareMc zp32{oVJ-R_Juio1p}7&&aiio>5{H)D9sc)lHYAE~Dn~w=l9?^Ezef~Yw8YH>U+c5-7(Q%RyzH>uppdAbQppFy*h`@G$&cs0IS zMrWc|u0qU9IgIBr`e}@aZV~a2W2N#Z)))@cS(nzV(7_Mh`1r+>%&sk6r*G6Jk{9@o zlc%M)qfs~x?15y~i0fn&^vIzU^?e63sWC3~^(KnLc1jgyEVHA$^AjpB;(|ROJ_g41 z$ibkbav9n~X8jaHPH$qQojSLwJ)4uA541;Cn1Ks5)GfC(Jo+T*#jU*{PF|eZ3R=B& z#;vZPWZYg~6p{U?w+fJpZ#c@L^oUl1)nEPwHJO ~)lQ?f05I6C;_9ChyM~S%(Pm zv-JJtBTw{d`Osy`K;do?8+K}cyFN>YHtC5c+ - - - -Created by potrace 1.11, written by Peter Selinger 2001-2013 - - - - - + \ No newline at end of file diff --git a/assets/faviconData.json b/assets/faviconData.json index d4b60d2..af85f3c 100644 --- a/assets/faviconData.json +++ b/assets/faviconData.json @@ -1 +1 @@ -{"result":{"status":"success"},"favicon":{"package_url":"https://realfavicongenerator.net/files/03dc81277d21a8ed4bb836b4c05ada2ee75b9e3c/favicons.zip","files_urls":["https://realfavicongenerator.net/files/03dc81277d21a8ed4bb836b4c05ada2ee75b9e3c/package_files/android-chrome-192x192.png","https://realfavicongenerator.net/files/03dc81277d21a8ed4bb836b4c05ada2ee75b9e3c/package_files/android-chrome-512x512.png","https://realfavicongenerator.net/files/03dc81277d21a8ed4bb836b4c05ada2ee75b9e3c/package_files/apple-touch-icon.png","https://realfavicongenerator.net/files/03dc81277d21a8ed4bb836b4c05ada2ee75b9e3c/package_files/browserconfig.xml","https://realfavicongenerator.net/files/03dc81277d21a8ed4bb836b4c05ada2ee75b9e3c/package_files/favicon-16x16.png","https://realfavicongenerator.net/files/03dc81277d21a8ed4bb836b4c05ada2ee75b9e3c/package_files/favicon-32x32.png","https://realfavicongenerator.net/files/03dc81277d21a8ed4bb836b4c05ada2ee75b9e3c/package_files/favicon.ico","https://realfavicongenerator.net/files/03dc81277d21a8ed4bb836b4c05ada2ee75b9e3c/package_files/manifest.json","https://realfavicongenerator.net/files/03dc81277d21a8ed4bb836b4c05ada2ee75b9e3c/package_files/mstile-144x144.png","https://realfavicongenerator.net/files/03dc81277d21a8ed4bb836b4c05ada2ee75b9e3c/package_files/mstile-150x150.png","https://realfavicongenerator.net/files/03dc81277d21a8ed4bb836b4c05ada2ee75b9e3c/package_files/mstile-310x150.png","https://realfavicongenerator.net/files/03dc81277d21a8ed4bb836b4c05ada2ee75b9e3c/package_files/mstile-310x310.png","https://realfavicongenerator.net/files/03dc81277d21a8ed4bb836b4c05ada2ee75b9e3c/package_files/mstile-70x70.png","https://realfavicongenerator.net/files/03dc81277d21a8ed4bb836b4c05ada2ee75b9e3c/package_files/safari-pinned-tab.svg"],"html_code":"\n\n\n\n\n\n\n\n\n\n\n","compression":"true","overlapping_markups":["link[rel=\"apple-touch-icon\"]","meta[name=\"apple-mobile-web-app-title\"]","link[rel=\"shortcut\"]","link[rel=\"shortcut icon\"]","link[rel=\"icon\",sizes=\"16x16\"]","link[rel=\"icon\",sizes=\"32x32\"]","meta[name=\"msapplication-TileColor\"]","meta[name=\"msapplication-TileImage\"]","meta[name=\"msapplication-config\"]","meta[name=\"application-name\"]","link[rel=\"manifest\"]","meta[name=\"theme-color\"]","link[rel=\"mask-icon\"]"]},"files_location":{"type":"path","path":"."},"preview_picture_url":"https://realfavicongenerator.net/files/03dc81277d21a8ed4bb836b4c05ada2ee75b9e3c/favicon_preview.png","version":"0.14"} +{"result":{"status":"success"},"favicon":{"package_url":"https://realfavicongenerator.net/files/6450324c809032ae945bea6966d61ed90c569192/favicons.zip","files_urls":["https://realfavicongenerator.net/files/6450324c809032ae945bea6966d61ed90c569192/package_files/android-chrome-192x192.png","https://realfavicongenerator.net/files/6450324c809032ae945bea6966d61ed90c569192/package_files/android-chrome-512x512.png","https://realfavicongenerator.net/files/6450324c809032ae945bea6966d61ed90c569192/package_files/apple-touch-icon.png","https://realfavicongenerator.net/files/6450324c809032ae945bea6966d61ed90c569192/package_files/browserconfig.xml","https://realfavicongenerator.net/files/6450324c809032ae945bea6966d61ed90c569192/package_files/favicon-16x16.png","https://realfavicongenerator.net/files/6450324c809032ae945bea6966d61ed90c569192/package_files/favicon-32x32.png","https://realfavicongenerator.net/files/6450324c809032ae945bea6966d61ed90c569192/package_files/favicon.ico","https://realfavicongenerator.net/files/6450324c809032ae945bea6966d61ed90c569192/package_files/manifest.json","https://realfavicongenerator.net/files/6450324c809032ae945bea6966d61ed90c569192/package_files/mstile-144x144.png","https://realfavicongenerator.net/files/6450324c809032ae945bea6966d61ed90c569192/package_files/mstile-150x150.png","https://realfavicongenerator.net/files/6450324c809032ae945bea6966d61ed90c569192/package_files/mstile-310x150.png","https://realfavicongenerator.net/files/6450324c809032ae945bea6966d61ed90c569192/package_files/mstile-310x310.png","https://realfavicongenerator.net/files/6450324c809032ae945bea6966d61ed90c569192/package_files/mstile-70x70.png","https://realfavicongenerator.net/files/6450324c809032ae945bea6966d61ed90c569192/package_files/safari-pinned-tab.svg"],"html_code":"\n\n\n\n\n\n\n\n\n\n\n","compression":"true","overlapping_markups":["link[rel=\"apple-touch-icon\"]","meta[name=\"apple-mobile-web-app-title\"]","link[rel=\"shortcut\"]","link[rel=\"shortcut icon\"]","link[rel=\"icon\",sizes=\"16x16\"]","link[rel=\"icon\",sizes=\"32x32\"]","meta[name=\"msapplication-TileColor\"]","meta[name=\"msapplication-TileImage\"]","meta[name=\"msapplication-config\"]","meta[name=\"application-name\"]","link[rel=\"manifest\"]","meta[name=\"theme-color\"]","link[rel=\"mask-icon\"]"]},"files_location":{"type":"path","path":"."},"preview_picture_url":"https://realfavicongenerator.net/files/6450324c809032ae945bea6966d61ed90c569192/favicon_preview.png","version":"0.15"} \ No newline at end of file diff --git a/gulp/tasks/favicon.js b/gulp/tasks/favicon.js index cabe0f6..9f3036f 100644 --- a/gulp/tasks/favicon.js +++ b/gulp/tasks/favicon.js @@ -7,7 +7,7 @@ module.exports = function (gulp, plugins, config) { design: { ios: { pictureAspect: 'backgroundAndMargin', - backgroundColor: '#000000', + backgroundColor: '#ffffff', margin: '14%', assets: { ios6AndPriorIcons: false, @@ -19,7 +19,7 @@ module.exports = function (gulp, plugins, config) { }, desktopBrowser: {}, windows: { - pictureAspect: 'noChange', + pictureAspect: 'whiteSilhouette', backgroundColor: '#dc0067', onConflict: 'override', assets: { @@ -39,7 +39,7 @@ module.exports = function (gulp, plugins, config) { manifest: { name: 'Meshviewer', display: 'standalone', - orientation: 'notSet', + orientation: 'portrait', onConflict: 'override', declared: true }, From b37ac2ddce186e386d9e1e11421233e47eba06b4 Mon Sep 17 00:00:00 2001 From: Xaver Maierhofer Date: Wed, 7 Jun 2017 18:55:25 +0200 Subject: [PATCH 009/119] [TASK] Travis nodejs v8 --- .travis.yml | 4 ++-- README.md | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 0ca1e23..3d2d7fe 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,7 +3,7 @@ sudo: false language: node_js node_js: - - "7" + - "8" os: - linux @@ -12,7 +12,7 @@ os: matrix: include: - - node_js: 7 + - node_js: 8 os: linux env: USE_NPM=true - node_js: 6 diff --git a/README.md b/README.md index 61d2cc5..9c42936 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ _Some similar features might have been implemented/merged_ - Currently available: en, de, fr & ru - Gulp inline for some css and js - fewer requests and instant load indicator - Icon font with needed icons only -- Switch to Gulp (Tested with Node.js 4/6 LTS, 7 on Linux, 7 OSX & W**) +- Switch to Gulp (Tested with Node.js 4/6 LTS, 8 on Linux, OSX & W**) - css and some js moved inline - Yarn/npm in favour of bower - Load only moment.js without languages (Languages are included in translations) From 94b4a10bd423a8187149c67b5994c9341bfad44e Mon Sep 17 00:00:00 2001 From: Xaver Maierhofer Date: Wed, 12 Jul 2017 23:36:13 +0200 Subject: [PATCH 010/119] [TASK] Leaflet 1.1 and minor updates --- package.json | 8 +- yarn.lock | 763 ++++++++++++++++++++++++++++----------------------- 2 files changed, 420 insertions(+), 351 deletions(-) diff --git a/package.json b/package.json index 87e9d5b..083c53e 100644 --- a/package.json +++ b/package.json @@ -43,13 +43,13 @@ }, "dependencies": { "almond": "^0.3.3", - "d3-drag": "^1.1.0", + "d3-drag": "^1.1.1", "d3-force": "^1.0.6", "d3-selection": "^1.1.0", - "d3-zoom": "^1.3.0", - "leaflet": "^1.0.3", + "d3-zoom": "^1.3.1", + "leaflet": "^1.1.0", "moment": "^2.17.1", - "navigo": "^5.0.1", + "navigo": "^5.2.0", "node-polyglot": "^2.2.2", "promise-polyfill": "^6.0.2", "rbush": "^2.0.1", diff --git a/yarn.lock b/yarn.lock index 67ae9d5..10c063d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -30,29 +30,23 @@ accepts@1.3.3, accepts@~1.3.3: mime-types "~2.1.11" negotiator "0.6.1" -acorn-jsx@^3.0.0, acorn-jsx@^3.0.1: +acorn-jsx@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b" dependencies: acorn "^3.0.4" -acorn-object-spread@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/acorn-object-spread/-/acorn-object-spread-1.0.0.tgz#48ead0f4a8eb16995a17a0db9ffc6acaada4ba68" - dependencies: - acorn "^3.1.0" - acorn@4.X: version "4.0.13" resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" -acorn@^3.0.4, acorn@^3.1.0: +acorn@^3.0.4: version "3.3.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" acorn@^5.0.1, acorn@^5.0.3: - version "5.0.3" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.0.3.tgz#c460df08491463f028ccb82eab3730bf01087b3d" + version "5.1.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.1.1.tgz#53fe161111f912ab999ee887a90a0bc52822fd75" after@0.8.1: version "0.8.1" @@ -69,14 +63,6 @@ ajv@^4.7.0, ajv@^4.9.1: co "^4.6.0" json-stable-stringify "^1.0.1" -align-text@^0.1.1, align-text@^0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" - dependencies: - kind-of "^3.0.2" - longest "^1.0.1" - repeat-string "^1.5.2" - almond@^0.3.3: version "0.3.3" resolved "https://registry.yarnpkg.com/almond/-/almond-0.3.3.tgz#a0e7c95ac7624d6417b4494b1e68bff693168a20" @@ -93,10 +79,20 @@ ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" +ansi-styles@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.1.0.tgz#09c202d5c917ec23188caa5c9cb9179cd9547750" + dependencies: + color-convert "^1.0.0" + any-promise@^1.1.0: version "1.3.0" resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" @@ -109,8 +105,8 @@ anymatch@^1.3.0: micromatch "^2.1.5" aproba@^1.0.3: - version "1.1.1" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.1.1.tgz#95d3600f07710aa0e9298c726ad5ecf2eacbabab" + version "1.1.2" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.1.2.tgz#45c6629094de4e96f693ef7eab74ae079c240fc1" archy@^1.0.0: version "1.0.0" @@ -142,8 +138,8 @@ arr-filter@^1.1.1: make-iterator "^1.0.0" arr-flatten@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.0.3.tgz#a274ed85ac08849b6bd7847c4580745dc51adfb1" + version "1.1.0" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" arr-map@^2.0.0: version "2.0.2" @@ -253,7 +249,13 @@ async-settle@^1.0.0: dependencies: async-done "^1.2.2" -async@*, async@1.5.2: +async@*: + version "2.5.0" + resolved "https://registry.yarnpkg.com/async/-/async-2.5.0.tgz#843190fd6b7357a0b9e1c956edddd5ec8462b54d" + dependencies: + lodash "^4.14.0" + +async@1.5.2: version "1.5.2" resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" @@ -266,14 +268,14 @@ atob@~1.1.0: resolved "https://registry.yarnpkg.com/atob/-/atob-1.1.3.tgz#95f13629b12c3a51a5d215abdce2aa9f32f80773" autoprefixer@^7.0.0: - version "7.1.1" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-7.1.1.tgz#97bc854c7d0b979f8d6489de547a0d17fb307f6d" + version "7.1.2" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-7.1.2.tgz#fbeaf07d48fd878e0682bf7cbeeade728adb2b18" dependencies: - browserslist "^2.1.3" - caniuse-lite "^1.0.30000670" + browserslist "^2.1.5" + caniuse-lite "^1.0.30000697" normalize-range "^0.1.2" num2fraction "^1.2.2" - postcss "^6.0.1" + postcss "^6.0.6" postcss-value-parser "^3.2.3" aws-sign2@~0.6.0: @@ -315,31 +317,31 @@ babel-runtime@^6.22.0: regenerator-runtime "^0.10.0" babel-traverse@^6.23.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.24.1.tgz#ab36673fd356f9a0948659e7b338d5feadb31695" + version "6.25.0" + resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.25.0.tgz#2257497e2fcd19b89edc13c4c91381f9512496f1" dependencies: babel-code-frame "^6.22.0" babel-messages "^6.23.0" babel-runtime "^6.22.0" - babel-types "^6.24.1" - babylon "^6.15.0" + babel-types "^6.25.0" + babylon "^6.17.2" debug "^2.2.0" globals "^9.0.0" invariant "^2.2.0" lodash "^4.2.0" -babel-types@^6.23.0, babel-types@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.24.1.tgz#a136879dc15b3606bda0d90c1fc74304c2ff0975" +babel-types@^6.23.0, babel-types@^6.25.0: + version "6.25.0" + resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.25.0.tgz#70afb248d5660e5d18f811d91c8303b54134a18e" dependencies: babel-runtime "^6.22.0" esutils "^2.0.2" lodash "^4.2.0" to-fast-properties "^1.0.1" -babylon@^6.15.0, babylon@^6.17.0: - version "6.17.1" - resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.17.1.tgz#17f14fddf361b695981fe679385e4f1c01ebd86f" +babylon@^6.17.0, babylon@^6.17.2: + version "6.17.4" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.17.4.tgz#3e8b7402b88d22c3423e137a1577883b15ff869a" bach@^1.0.0: version "1.1.0" @@ -359,9 +361,9 @@ backo2@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" -balanced-match@^0.4.1: - version "0.4.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" base64-arraybuffer@0.1.5: version "0.1.5" @@ -423,10 +425,10 @@ boom@2.x.x: hoek "2.x.x" brace-expansion@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.7.tgz#3effc3c50e000531fb720eaff80f0ae8ef23cf59" + version "1.1.8" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292" dependencies: - balanced-match "^0.4.1" + balanced-match "^1.0.0" concat-map "0.0.1" braces@^1.8.2: @@ -486,40 +488,17 @@ browser-sync@^2.18.12: ua-parser-js "0.7.12" yargs "6.4.0" -browserslist@^2.1.3: - version "2.1.4" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.1.4.tgz#cc526af4a1312b7d2e05653e56d0c8ab70c0e053" +browserslist@^2.1.5: + version "2.1.5" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.1.5.tgz#e882550df3d1cd6d481c1a3e0038f2baf13a4711" dependencies: - caniuse-lite "^1.0.30000670" - electron-to-chromium "^1.3.11" + caniuse-lite "^1.0.30000684" + electron-to-chromium "^1.3.14" bs-recipes@1.3.4: version "1.3.4" resolved "https://registry.yarnpkg.com/bs-recipes/-/bs-recipes-1.3.4.tgz#0d2d4d48a718c8c044769fdc4f89592dc8b69585" -buble@^0.12.0: - version "0.12.5" - resolved "https://registry.yarnpkg.com/buble/-/buble-0.12.5.tgz#c66ffe92f9f4a3c65d3256079b711e2bd0bc5013" - dependencies: - acorn "^3.1.0" - acorn-jsx "^3.0.1" - acorn-object-spread "^1.0.0" - chalk "^1.1.3" - magic-string "^0.14.0" - minimist "^1.2.0" - os-homedir "^1.0.1" - -bubleify@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/bubleify/-/bubleify-0.5.1.tgz#f65c47cee31b80cad8b9e747bbe187d7fe51e927" - dependencies: - buble "^0.12.0" - object-assign "^4.0.1" - -buffer-shims@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51" - buffers@~0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/buffers/-/buffers-0.1.1.tgz#b24579c3bed4d6d396aeee6d9a8ae7f5482ab7bb" @@ -569,7 +548,7 @@ camelcase-keys@^2.0.0: camelcase "^2.0.0" map-obj "^1.0.0" -camelcase@^1.0.2, camelcase@^1.2.1: +camelcase@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" @@ -581,9 +560,9 @@ camelcase@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" -caniuse-lite@^1.0.30000670: - version "1.0.30000676" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000676.tgz#1e962123f48073f0c51c4ea0651dd64d25786498" +caniuse-lite@^1.0.30000684, caniuse-lite@^1.0.30000697: + version "1.0.30000700" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000700.tgz#6084871ec75c6fa62327de97622514f95d9db26a" caseless@~0.11.0: version "0.11.0" @@ -593,13 +572,6 @@ caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" -center-align@^0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" - dependencies: - align-text "^0.1.3" - lazy-cache "^1.0.3" - chainsaw@~0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/chainsaw/-/chainsaw-0.1.0.tgz#5eab50b28afe58074d0d58291388828b5e5fbc98" @@ -616,11 +588,40 @@ chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" +chalk@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.0.1.tgz#dbec49436d2ae15f536114e76d14656cdbc0f44d" + dependencies: + ansi-styles "^3.1.0" + escape-string-regexp "^1.0.5" + supports-color "^4.0.0" + charenc@~0.0.1: version "0.0.2" resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" -cheerio@*, cheerio@^0.19.0: +cheerio@*: + version "0.22.0" + resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-0.22.0.tgz#a9baa860a3f9b595a6b81b1a86873121ed3a269e" + dependencies: + 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" + +cheerio@^0.19.0: version "0.19.0" resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-0.19.0.tgz#772e7015f2ee29965096d71ea4175b75ab354925" dependencies: @@ -650,14 +651,14 @@ circular-json@^0.3.1: resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.1.tgz#be8b36aefccde8b3ca7aa2d6afc07a37242c0d2d" clap@^1.0.9: - version "1.1.3" - resolved "https://registry.yarnpkg.com/clap/-/clap-1.1.3.tgz#b3bd36e93dd4cbfb395a3c26896352445265c05b" + version "1.2.0" + resolved "https://registry.yarnpkg.com/clap/-/clap-1.2.0.tgz#59c90fe3e137104746ff19469a27a634ff68c857" dependencies: chalk "^1.1.3" clean-css@4.1.x: - version "4.1.3" - resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.1.3.tgz#07cfe8980edb20d455ddc23aadcf1e04c6e509ce" + version "4.1.6" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.1.6.tgz#5a47beb526994cb4f7bf36188a55ed3b45528f0b" dependencies: source-map "0.5.x" @@ -671,14 +672,6 @@ cli-width@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.1.0.tgz#b234ca209b29ef66fc518d9b98d5847b00edf00a" -cliui@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" - dependencies: - center-align "^0.1.1" - right-align "^0.1.1" - wordwrap "0.0.2" - cliui@^3.0.3, cliui@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" @@ -700,8 +693,8 @@ co@^4.6.0: resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" coa@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/coa/-/coa-1.0.2.tgz#2ba9fec3b4aa43d7a49d7e6c3561e92061b6bcec" + version "1.0.4" + resolved "https://registry.yarnpkg.com/coa/-/coa-1.0.4.tgz#a9ef153660d6a86a8bdec0289a5c684d217432fd" dependencies: q "^1.1.2" @@ -718,6 +711,16 @@ collection-map@^0.1.0: is-plain-object "^2.0.1" make-iterator "^0.1.1" +color-convert@^1.0.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.0.tgz#1accf97dd739b983bf994d56fec8f95853641b7a" + dependencies: + color-name "^1.1.1" + +color-name@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.2.tgz#5c8ab72b64bd2215d617ae9559ebb148475cf98d" + colors@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" @@ -728,12 +731,16 @@ combined-stream@^1.0.5, combined-stream@~1.0.5: dependencies: delayed-stream "~1.0.0" -commander@2.9.x, commander@^2.2.0, commander@^2.8.1, commander@^2.9.0, commander@~2.9.0: +commander@2.9.x, commander@~2.9.0: version "2.9.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" dependencies: graceful-readlink ">= 1.0.0" +commander@^2.2.0, commander@^2.8.1, commander@^2.9.0: + version "2.11.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.11.0.tgz#157152fd1e7a6c8d98a5b715cf376df928004563" + component-bind@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/component-bind/-/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1" @@ -836,9 +843,18 @@ css-select@~1.0.0: domutils "1.4" nth-check "~1.0.0" -css-tree@1.0.0-alpha17: - version "1.0.0-alpha17" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha17.tgz#7ab95ab72c533917af8be54313fec81841c5223a" +css-select@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" + dependencies: + boolbase "~1.0.0" + css-what "2.1" + domutils "1.5.1" + nth-check "~1.0.1" + +css-tree@1.0.0-alpha19: + version "1.0.0-alpha19" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha19.tgz#949aa846c2c15b3979792e8fce05f6b6e3ebcad4" dependencies: source-map "^0.5.3" @@ -846,6 +862,10 @@ css-what@1.0: version "1.0.0" resolved "https://registry.yarnpkg.com/css-what/-/css-what-1.0.0.tgz#d7cc2df45180666f99d2b14462639469e00f736c" +css-what@2.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.0.tgz#9467d032c38cfaefb9f2d79501253062f87fa1bd" + css@2.X, css@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/css/-/css-2.2.1.tgz#73a4c81de85db664d4ee674f7d47085e3b2d55dc" @@ -855,11 +875,11 @@ css@2.X, css@^2.2.1: source-map-resolve "^0.3.0" urix "^0.1.0" -csso@3.0.x: - version "3.0.1" - resolved "https://registry.yarnpkg.com/csso/-/csso-3.0.1.tgz#1469af5ee2ec509addadd8777aa0e45acb6b2f58" +csso@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/csso/-/csso-3.1.1.tgz#ab427584486c2e02e180327511b0b02a9179c272" dependencies: - css-tree "1.0.0-alpha17" + css-tree "1.0.0-alpha19" csso@~2.3.1: version "2.3.2" @@ -875,8 +895,8 @@ currently-unhandled@^0.4.1: array-find-index "^1.0.1" d3-collection@1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/d3-collection/-/d3-collection-1.0.3.tgz#00bdea94fbc1628d435abbae2f4dc2164e37dd34" + version "1.0.4" + resolved "https://registry.yarnpkg.com/d3-collection/-/d3-collection-1.0.4.tgz#342dfd12837c90974f33f1cc0a785aea570dcdc2" d3-color@1: version "1.0.3" @@ -886,9 +906,9 @@ d3-dispatch@1: version "1.0.3" resolved "https://registry.yarnpkg.com/d3-dispatch/-/d3-dispatch-1.0.3.tgz#46e1491eaa9b58c358fce5be4e8bed626e7871f8" -d3-drag@1, d3-drag@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/d3-drag/-/d3-drag-1.1.0.tgz#4a49b4d77a42e9e3d5a0ef3b492b14aaa2e5a733" +d3-drag@1, d3-drag@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/d3-drag/-/d3-drag-1.1.1.tgz#b5155304433b18ba38726b2184d0098e820dc64b" dependencies: d3-dispatch "1" d3-selection "1" @@ -921,8 +941,8 @@ d3-selection@1, d3-selection@^1.1.0: resolved "https://registry.yarnpkg.com/d3-selection/-/d3-selection-1.1.0.tgz#1998684896488f839ca0372123da34f1d318809c" d3-timer@1: - version "1.0.5" - resolved "https://registry.yarnpkg.com/d3-timer/-/d3-timer-1.0.5.tgz#b266d476c71b0d269e7ac5f352b410a3b6fe6ef0" + version "1.0.6" + resolved "https://registry.yarnpkg.com/d3-timer/-/d3-timer-1.0.6.tgz#4044bf15d7025c06ce7d1149f73cd07b54dbd784" d3-transition@1: version "1.1.0" @@ -935,9 +955,9 @@ d3-transition@1: d3-selection "^1.1.0" d3-timer "1" -d3-zoom@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/d3-zoom/-/d3-zoom-1.3.0.tgz#fe0f363b00590de55aa4dbcc860b28ffe78f13c5" +d3-zoom@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/d3-zoom/-/d3-zoom-1.3.1.tgz#386306072d05573e73794a3f1ee71a4d6ebb8c08" dependencies: d3-dispatch "1" d3-drag "1" @@ -964,6 +984,10 @@ dateformat@^1.0.11: get-stdin "^4.0.1" meow "^3.3.0" +dateformat@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-2.0.0.tgz#2743e3abb5c3fc2462e527dca445e04e9f4dee17" + debug-fabulous@0.1.X: version "0.1.0" resolved "https://registry.yarnpkg.com/debug-fabulous/-/debug-fabulous-0.1.0.tgz#ad0ea07a5d519324fb55842a8f34ee59c7f8ff6c" @@ -1107,7 +1131,7 @@ domutils@1.4: dependencies: domelementtype "1" -domutils@1.5: +domutils@1.5, domutils@1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" dependencies: @@ -1169,9 +1193,9 @@ ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" -electron-to-chromium@^1.3.11: - version "1.3.13" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.13.tgz#1b3a5eace6e087bb5e257a100b0cbfe81b2891fc" +electron-to-chromium@^1.3.14: + version "1.3.15" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.15.tgz#08397934891cbcfaebbd18b82a95b5a481138369" emitter-steward@^1.0.0: version "1.0.0" @@ -1264,8 +1288,8 @@ es-to-primitive@^1.1.1: is-symbol "^1.0.1" es5-ext@^0.10.14, es5-ext@^0.10.9, es5-ext@~0.10.14: - version "0.10.21" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.21.tgz#19a725f9e51d0300bbc1e8e821109fd9daf55925" + version "0.10.24" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.24.tgz#a55877c9924bc0c8d9bd3c2cbe17495ac1709b14" dependencies: es6-iterator "2" es6-symbol "~3.1" @@ -1333,8 +1357,8 @@ escope@^3.6.0: estraverse "^4.1.1" eslint-config-airbnb-es5@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/eslint-config-airbnb-es5/-/eslint-config-airbnb-es5-1.1.0.tgz#f342474fe7c8e02745707d1c5e3bca0a3ab9e968" + version "1.2.0" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb-es5/-/eslint-config-airbnb-es5-1.2.0.tgz#9518808fd876e2ce8294d51166b6b1359bd51f28" dependencies: strip-json-comments "1.0.2" @@ -1343,12 +1367,12 @@ eslint-config-defaults@^9.0.0: resolved "https://registry.yarnpkg.com/eslint-config-defaults/-/eslint-config-defaults-9.0.0.tgz#a090adc13b2935e3f43b3cd048a92701654e5ad5" eslint-plugin-react@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.0.1.tgz#e78107e1e559c6e2b17786bb67c2e2a010ad0d2f" + version "7.1.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.1.0.tgz#27770acf39f5fd49cd0af4083ce58104eb390d4c" dependencies: doctrine "^2.0.0" has "^1.0.1" - jsx-ast-utils "^1.3.4" + jsx-ast-utils "^1.4.1" eslint@^2.7.0: version "2.13.1" @@ -1439,9 +1463,9 @@ esprima@^2.6.0: version "2.7.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" -esprima@^3.1.1: - version "3.1.3" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" +esprima@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804" esquery@^1.0.0: version "1.0.0" @@ -1450,20 +1474,16 @@ esquery@^1.0.0: estraverse "^4.0.0" esrecurse@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.1.0.tgz#4713b6536adf7f2ac4f327d559e7756bff648220" + version "4.2.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.0.tgz#fa9568d98d3823f9a41d91e902dcab9ea6e5b163" dependencies: - estraverse "~4.1.0" + estraverse "^4.1.0" object-assign "^4.0.1" -estraverse@^4.0.0, estraverse@^4.1.1, estraverse@^4.2.0: +estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" -estraverse@~4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.1.1.tgz#f6caca728933a850ef90661d0e17982ba47111a2" - esutils@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" @@ -1511,12 +1531,18 @@ expand-range@^1.8.1: dependencies: fill-range "^2.1.0" -expand-tilde@^1.2.1, expand-tilde@^1.2.2: +expand-tilde@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-1.2.2.tgz#0b81eba897e5a3d31d1c3d102f8f01441e559449" dependencies: os-homedir "^1.0.1" +expand-tilde@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" + dependencies: + homedir-polyfill "^1.0.1" + express@2.5.x: version "2.5.11" resolved "https://registry.yarnpkg.com/express/-/express-2.5.11.tgz#4ce8ea1f3635e69e49f0ebb497b6a4b0a51ce6f0" @@ -1625,15 +1651,13 @@ findup-sync@~0.3.0: glob "~5.0.0" fined@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/fined/-/fined-1.0.2.tgz#5b28424b760d7598960b7ef8480dff8ad3660e97" + version "1.1.0" + resolved "https://registry.yarnpkg.com/fined/-/fined-1.1.0.tgz#b37dc844b76a2f5e7081e884f7c0ae344f153476" dependencies: - expand-tilde "^1.2.1" - lodash.assignwith "^4.0.7" - lodash.isempty "^4.2.1" - lodash.isplainobject "^4.0.4" - lodash.isstring "^4.0.1" - lodash.pick "^4.2.1" + expand-tilde "^2.0.2" + is-plain-object "^2.0.3" + object.defaults "^1.1.0" + object.pick "^1.2.0" parse-filepath "^1.0.1" first-chunk-stream@^1.0.0: @@ -1742,11 +1766,11 @@ fs.realpath@^1.0.0: resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" fsevents@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.1.tgz#f19fd28f43eeaf761680e519a203c4d0b3d31aff" + version "1.1.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.2.tgz#3282b713fb3ad80ede0e9fcf4611b5aa6fc033f4" dependencies: nan "^2.3.0" - node-pre-gyp "^0.6.29" + node-pre-gyp "^0.6.36" fstream-ignore@^1.0.5: version "1.0.5" @@ -1911,8 +1935,8 @@ global-prefix@^0.1.4: which "^1.2.12" globals@^9.0.0, globals@^9.14.0, globals@^9.2.0: - version "9.17.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-9.17.0.tgz#0c0ca696d9b9bb694d2e5470bd37777caad50286" + version "9.18.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" globby@^5.0.0: version "5.0.0" @@ -1926,11 +1950,11 @@ globby@^5.0.0: pinkie-promise "^2.0.0" globule@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/globule/-/globule-1.1.0.tgz#c49352e4dc183d85893ee825385eb994bb6df45f" + version "1.2.0" + resolved "https://registry.yarnpkg.com/globule/-/globule-1.2.0.tgz#1dc49c6822dd9e8a2fa00ba2a295006e8664bd09" dependencies: glob "~7.1.1" - lodash "~4.16.4" + lodash "~4.17.4" minimatch "~3.0.2" glogg@^1.0.0: @@ -2170,7 +2194,7 @@ gulp-uglify@^3.0.0: uglify-js "^3.0.5" vinyl-sourcemaps-apply "^0.2.0" -gulp-util@3.0.7, gulp-util@^3.0, gulp-util@^3.0.0, gulp-util@^3.0.6, gulp-util@^3.0.7, gulp-util@~3.0.4, gulp-util@~3.0.6: +gulp-util@3.0.7: version "3.0.7" resolved "https://registry.yarnpkg.com/gulp-util/-/gulp-util-3.0.7.tgz#78925c4b8f8b49005ac01a011c557e6218941cbb" dependencies: @@ -2193,6 +2217,29 @@ gulp-util@3.0.7, gulp-util@^3.0, gulp-util@^3.0.0, gulp-util@^3.0.6, gulp-util@^ through2 "^2.0.0" vinyl "^0.5.0" +gulp-util@^3.0, gulp-util@^3.0.0, gulp-util@^3.0.6, gulp-util@^3.0.7, gulp-util@~3.0.4, gulp-util@~3.0.6: + version "3.0.8" + resolved "https://registry.yarnpkg.com/gulp-util/-/gulp-util-3.0.8.tgz#0054e1e744502e27c04c187c3ecc505dd54bbb4f" + dependencies: + array-differ "^1.0.0" + array-uniq "^1.0.2" + beeper "^1.0.0" + chalk "^1.0.0" + dateformat "^2.0.0" + fancy-log "^1.1.0" + gulplog "^1.0.0" + has-gulplog "^0.1.0" + lodash._reescape "^3.0.0" + lodash._reevaluate "^3.0.0" + lodash._reinterpolate "^3.0.0" + lodash.template "^3.0.0" + minimist "^1.1.0" + multipipe "^0.1.2" + object-assign "^3.0.0" + replace-ext "0.0.1" + through2 "^2.0.0" + vinyl "^0.5.0" + "gulp@github:gulpjs/gulp#4.0": version "4.0.0-alpha.2" resolved "https://codeload.github.com/gulpjs/gulp/tar.gz/38246c3f8b6dbb8d4ef657183e92d90c8299e22f" @@ -2250,9 +2297,9 @@ has-cors@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/has-cors/-/has-cors-1.1.0.tgz#5e474793f7ea9843d1bb99c23eef49ff126fff39" -has-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" +has-flag@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" has-gulplog@^0.1.0: version "0.1.0" @@ -2287,15 +2334,15 @@ hoek@2.x.x: version "2.16.3" resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" -homedir-polyfill@^1.0.0: +homedir-polyfill@^1.0.0, homedir-polyfill@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz#4c2bbc8a758998feebf5ed68580f76d46768b4bc" dependencies: parse-passwd "^1.0.0" hosted-git-info@^2.1.4: - version "2.4.2" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.4.2.tgz#0076b9f46a270506ddbaaea56496897460612a67" + version "2.5.0" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.5.0.tgz#6d60e34b3abbc8313062c3b798ef8d901a07af3c" html-minifier@^3.0.3: version "3.5.2" @@ -2310,7 +2357,7 @@ html-minifier@^3.0.3: relateurl "0.2.x" uglify-js "3.0.x" -htmlparser2@3.9.x: +htmlparser2@3.9.2, htmlparser2@^3.9.1: version "3.9.2" resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.9.2.tgz#1bdf87acca0f3f9e53fa4fcceb0f4b4cbb00b338" dependencies: @@ -2396,7 +2443,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1: +inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" @@ -2409,15 +2456,15 @@ ini@^1.3.4, ini@~1.3.0: resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e" inline-source@^5.0.0: - version "5.2.2" - resolved "https://registry.yarnpkg.com/inline-source/-/inline-source-5.2.2.tgz#a82e3902d2de1c8acb0165b14ed61fb3ea66585a" + version "5.2.3" + resolved "https://registry.yarnpkg.com/inline-source/-/inline-source-5.2.3.tgz#c95da30fe7e39144e9fdff5128d821c302001433" dependencies: - csso "3.0.x" - htmlparser2 "3.9.x" - is-plain-obj "1.1.x" - object-assign "4.1.x" - svgo "0.7.x" - uglify-js "2.8.x" + csso "3.1.1" + htmlparser2 "3.9.2" + is-plain-obj "1.1.0" + object-assign "4.1.1" + svgo "0.7.2" + uglify-js "3.0.15" inquirer@^0.12.0: version "0.12.0" @@ -2550,22 +2597,27 @@ is-my-json-valid@^2.10.0, is-my-json-valid@^2.12.4: xtend "^4.0.0" is-number-like@^1.0.3: - version "1.0.7" - resolved "https://registry.yarnpkg.com/is-number-like/-/is-number-like-1.0.7.tgz#a38d6b0fd2cd4282449128859eed86c03fd23552" + version "1.0.8" + resolved "https://registry.yarnpkg.com/is-number-like/-/is-number-like-1.0.8.tgz#2e129620b50891042e44e9bbbb30593e75cfbbe3" dependencies: - bubleify "^0.5.1" lodash.isfinite "^3.3.2" is-number@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/is-number/-/is-number-0.1.1.tgz#69a7af116963d47206ec9bd9b48a14216f1e3806" -is-number@^2.0.2, is-number@^2.1.0: +is-number@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" dependencies: kind-of "^3.0.2" +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + dependencies: + kind-of "^3.0.2" + is-path-cwd@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" @@ -2582,15 +2634,15 @@ is-path-inside@^1.0.0: dependencies: path-is-inside "^1.0.1" -is-plain-obj@1.1.x: +is-plain-obj@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" -is-plain-object@^2.0.1: - version "2.0.3" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.3.tgz#c15bf3e4b66b62d72efaf2925848663ecbc619b6" +is-plain-object@^2.0.1, is-plain-object@^2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" dependencies: - isobject "^3.0.0" + isobject "^3.0.1" is-posix-bracket@^0.1.0: version "0.1.1" @@ -2668,40 +2720,34 @@ isobject@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/isobject/-/isobject-1.0.2.tgz#f0f9b8ce92dd540fa0740882e3835a2e022ec78a" -isobject@^2.0.0: +isobject@^2.0.0, isobject@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" dependencies: isarray "1.0.0" -isobject@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.0.tgz#39565217f3661789e8a0a0c080d5f7e6bc46e1a0" +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" -jodid25519@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/jodid25519/-/jodid25519-1.0.2.tgz#06d4912255093419477d425633606e0e90782967" - dependencies: - jsbn "~0.1.0" - js-base64@^2.1.8: version "2.1.9" resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.1.9.tgz#f0e80ae039a4bd654b5f281fc93f04a914a7fcce" js-tokens@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.1.tgz#08e9f132484a2c45a30907e9dc4d5567b7f114d7" + version "3.0.2" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" js-yaml@^3.4.6, js-yaml@^3.5.1, js-yaml@^3.5.4: - version "3.8.4" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.8.4.tgz#520b4564f86573ba96662af85a8cafa7b4b5a6f6" + version "3.9.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.9.0.tgz#4ffbbf25c2ac963b8299dc74da7e3740de1c18ce" dependencies: argparse "^1.0.7" - esprima "^3.1.1" + esprima "^4.0.0" js-yaml@~3.7.0: version "3.7.0" @@ -2739,8 +2785,8 @@ jsonfile@^2.1.0: graceful-fs "^4.1.6" jsonfile@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-3.0.0.tgz#92e7c7444e5ffd5fa32e6a9ae8b85034df8347d0" + version "3.0.1" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-3.0.1.tgz#a5ecc6f65f53f662c4415c7675a0331d0992ec66" optionalDependencies: graceful-fs "^4.1.6" @@ -2765,7 +2811,7 @@ jsprim@^1.2.2: json-schema "0.2.3" verror "1.3.6" -jsx-ast-utils@^1.3.4: +jsx-ast-utils@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-1.4.1.tgz#3867213e8dd79bf1e8f2300c0cfc1efb182c0df1" @@ -2775,6 +2821,12 @@ kind-of@^3.0.2, kind-of@^3.1.0: dependencies: is-buffer "^1.1.5" +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + dependencies: + is-buffer "^1.1.5" + klaw@^1.0.0: version "1.3.1" resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" @@ -2788,10 +2840,6 @@ last-run@^1.1.0: default-resolution "^2.0.0" es6-weak-map "^2.0.1" -lazy-cache@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" - lazystream@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.0.tgz#f6995fe0f820392f61396be89462407bb77168e4" @@ -2804,9 +2852,9 @@ lcid@^1.0.0: dependencies: invert-kv "^1.0.0" -leaflet@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/leaflet/-/leaflet-1.0.3.tgz#1f401b98b45c8192134c6c8d69686253805007c8" +leaflet@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/leaflet/-/leaflet-1.1.0.tgz#63246715cfc783dca6798b843a250e8e6fd84918" levn@^0.3.0, levn@~0.3.0: version "0.3.0" @@ -2830,8 +2878,8 @@ liftoff@^2.3.0: resolve "^1.1.7" limiter@^1.0.5: - version "1.1.0" - resolved "https://registry.yarnpkg.com/limiter/-/limiter-1.1.0.tgz#6e2bd12ca3fcdaa11f224e2e53c896df3f08d913" + version "1.1.2" + resolved "https://registry.yarnpkg.com/limiter/-/limiter-1.1.2.tgz#229d8055891c8b11af9e0ee5200e8e09bb3dcbeb" load-json-file@^1.0.0: version "1.1.0" @@ -2892,9 +2940,13 @@ lodash.assign@^4.1.0, lodash.assign@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7" -lodash.assignwith@^4.0.7: +lodash.assignin@^4.0.9: version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.assignwith/-/lodash.assignwith-4.2.0.tgz#127a97f02adc41751a954d24b0de17e100e038eb" + resolved "https://registry.yarnpkg.com/lodash.assignin/-/lodash.assignin-4.2.0.tgz#ba8df5fb841eb0a3e8044232b0e263a8dc6a28a2" + +lodash.bind@^4.1.4: + version "4.2.1" + resolved "https://registry.yarnpkg.com/lodash.bind/-/lodash.bind-4.2.1.tgz#7ae3017e939622ac31b7d7d7dcb1b34db1690d35" lodash.capitalize@^4.1.0: version "4.2.1" @@ -2918,6 +2970,18 @@ lodash.escape@^3.0.0: dependencies: lodash._root "^3.0.0" +lodash.filter@^4.4.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.filter/-/lodash.filter-4.6.0.tgz#668b1d4981603ae1cc5a6fa760143e480b4c4ace" + +lodash.flatten@^4.2.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" + +lodash.foreach@^4.3.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.foreach/-/lodash.foreach-4.5.0.tgz#1a6a35eace401280c7f06dddec35165ab27e3e53" + lodash.isarguments@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" @@ -2926,10 +2990,6 @@ lodash.isarray@^3.0.0: version "3.0.4" resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" -lodash.isempty@^4.2.1: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.isempty/-/lodash.isempty-4.4.0.tgz#6f86cbedd8be4ec987be9aaf33c9684db1b31e7e" - lodash.isequal@^4.0.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" @@ -2962,10 +3022,18 @@ lodash.keys@^3.0.0: lodash.isarguments "^3.0.0" lodash.isarray "^3.0.0" +lodash.map@^4.4.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.map/-/lodash.map-4.6.0.tgz#771ec7839e3473d9c4cde28b19394c3562f4f6d3" + lodash.mapvalues@^4.4.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz#1bafa5005de9dd6f4f26668c30ca37230cc9689c" +lodash.merge@^4.4.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.0.tgz#69884ba144ac33fe699737a6086deffadd0f89c5" + lodash.mergewith@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.0.tgz#150cf0a16791f5903b8891eab154609274bdea55" @@ -2974,10 +3042,22 @@ lodash.pick@^4.2.1: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3" +lodash.reduce@^4.4.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.reduce/-/lodash.reduce-4.6.0.tgz#f1ab6b839299ad48f784abbf476596f03b914d3b" + +lodash.reject@^4.4.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.reject/-/lodash.reject-4.6.0.tgz#80d6492dc1470864bbf583533b651f42a9f52415" + lodash.restparam@^3.0.0: version "3.6.1" resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" +lodash.some@^4.4.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.some/-/lodash.some-4.6.0.tgz#1bb9f314ef6b8baded13b549169b2a945eb68e4d" + lodash.sortby@^4.5.0: version "4.7.0" resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" @@ -3007,18 +3087,10 @@ lodash@^3.10.1, lodash@^3.2.0: version "3.10.1" resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" -lodash@^4.0.0, lodash@^4.13.1, lodash@^4.2.0, lodash@^4.3.0: +lodash@^4.0.0, lodash@^4.13.1, lodash@^4.14.0, lodash@^4.2.0, lodash@^4.3.0, lodash@~4.17.4: version "4.17.4" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" -lodash@~4.16.4: - version "4.16.6" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.16.6.tgz#d22c9ac660288f3843e16ba7d2b5d06cca27d777" - -longest@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" - loose-envify@^1.0.0: version "1.3.1" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" @@ -3037,17 +3109,11 @@ lower-case@^1.1.1: resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac" lru-cache@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.0.2.tgz#1d17679c069cda5d040991a09dbc2c0db377e55e" + version "4.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.1.tgz#622e32e82488b49279114a4f9ecf45e7cd6bba55" dependencies: - pseudomap "^1.0.1" - yallist "^2.0.0" - -magic-string@^0.14.0: - version "0.14.0" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.14.0.tgz#57224aef1701caeed273b17a39a956e72b172462" - dependencies: - vlq "^0.2.1" + pseudomap "^1.0.2" + yallist "^2.1.2" make-error-cause@^1.1.1: version "1.2.2" @@ -3173,10 +3239,14 @@ mime@1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/mime/-/mime-1.2.4.tgz#11b5fdaf29c2509255176b80ad520294f5de92b7" -mime@1.3.4, "mime@>= 0.0.1": +mime@1.3.4: version "1.3.4" resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53" +"mime@>= 0.0.1": + version "1.3.6" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.6.tgz#591d84d3653a6b0b4a3b9df8de5aa8108e72e5e0" + "minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4, minimatch@~3.0.2: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" @@ -3255,9 +3325,9 @@ natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" -navigo@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/navigo/-/navigo-5.0.1.tgz#e692c587a8066a9e56a22ce9c901e732e5c3f938" +navigo@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/navigo/-/navigo-5.2.0.tgz#3dfb19e7e2cc64059f4317396beec30a1ee2df52" ncname@1.0.x: version "1.0.0" @@ -3280,8 +3350,8 @@ no-case@^2.2.0: lower-case "^1.1.1" node-gyp@^3.3.1: - version "3.6.1" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.6.1.tgz#19561067ff185464aded478212681f47fd578cbc" + version "3.6.2" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.6.2.tgz#9bfbe54562286284838e750eac05295853fa1c60" dependencies: fstream "^1.0.0" glob "^7.0.3" @@ -3306,9 +3376,9 @@ node-polyglot@^2.2.2: string.prototype.trim "^1.1.2" warning "^3.0.0" -node-pre-gyp@^0.6.29: - version "0.6.34" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.34.tgz#94ad1c798a11d7fc67381b50d47f8cc18d9799f7" +node-pre-gyp@^0.6.36: + version "0.6.36" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.36.tgz#db604112cb74e0d477554e9b505b17abddfab786" dependencies: mkdirp "^0.5.1" nopt "^4.0.1" @@ -3368,8 +3438,8 @@ nopt@^4.0.1: osenv "^0.1.4" normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: - version "2.3.8" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.3.8.tgz#d819eda2a9dedbd1ffa563ea4071d936782295bb" + version "2.4.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" dependencies: hosted-git-info "^2.1.4" is-builtin-module "^1.0.0" @@ -3393,15 +3463,15 @@ now-and-later@^1.0.0: once "^1.3.2" "npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0, npmlog@^4.0.2: - version "4.1.0" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.0.tgz#dc59bee85f64f00ed424efb2af0783df25d1c0b5" + version "4.1.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" dependencies: are-we-there-yet "~1.1.2" console-control-strings "~1.1.0" gauge "~2.7.3" set-blocking "~2.0.0" -nth-check@~1.0.0: +nth-check@~1.0.0, nth-check@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.1.tgz#9929acdf628fc2c41098deab82ac580cf149aae4" dependencies: @@ -3423,7 +3493,7 @@ object-assign@4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.0.tgz#7a3b3d0e98063d43f4c03f2e8ae6cd51a86883a0" -object-assign@4.1.x, object-assign@^4.0.0, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: +object-assign@4.1.1, object-assign@^4.0.0, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" @@ -3452,7 +3522,7 @@ object.defaults@^0.3.0: for-own "^0.1.3" isobject "^1.0.0" -object.defaults@^1.0.0: +object.defaults@^1.0.0, object.defaults@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/object.defaults/-/object.defaults-1.1.0.tgz#3a7f868334b407dea06da16d88d5cd29e435fecf" dependencies: @@ -3468,6 +3538,12 @@ object.omit@^2.0.0: for-own "^0.1.4" is-extendable "^0.1.1" +object.pick@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.2.0.tgz#b5392bee9782da6d9fb7d6afaf539779f1234c2b" + dependencies: + isobject "^2.1.0" + object.reduce@^0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/object.reduce/-/object.reduce-0.1.7.tgz#d180e84f72d218348af45352b55165246b95046d" @@ -3688,13 +3764,13 @@ postcss-value-parser@^3.2.3: version "3.3.0" resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz#87f38f9f18f774a4ab4c8a232f5c5ce8872a9d15" -postcss@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.1.tgz#000dbd1f8eef217aa368b9a212c5fc40b2a8f3f2" +postcss@^6.0.1, postcss@^6.0.6: + version "6.0.6" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.6.tgz#bba4d58e884fc78c840d1539e10eddaabb8f73bd" dependencies: - chalk "^1.1.3" + chalk "^2.0.1" source-map "^0.5.6" - supports-color "^3.2.3" + supports-color "^4.1.0" prelude-ls@~1.1.2: version "1.1.2" @@ -3720,7 +3796,7 @@ promise-polyfill@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/promise-polyfill/-/promise-polyfill-6.0.2.tgz#d9c86d3dc4dc2df9016e88946defd69b49b41162" -pseudomap@^1.0.1: +pseudomap@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" @@ -3749,24 +3825,28 @@ qs@6.2.1: version "6.2.1" resolved "https://registry.yarnpkg.com/qs/-/qs-6.2.1.tgz#ce03c5ff0935bc1d9d69a9f14cbd18e568d67625" -"qs@>= 0.4.0", qs@~6.4.0: - version "6.4.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" +"qs@>= 0.4.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.0.tgz#8d04954d364def3efc55b5a0793e1e2c8b1e6e49" qs@~6.3.0: version "6.3.2" resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.2.tgz#e75bd5f6e268122a2a0e0bda630b2550c166502c" +qs@~6.4.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" + quickselect@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/quickselect/-/quickselect-1.0.0.tgz#02630818f9aae4ecab26f0103f98d061c17c58f3" randomatic@^1.1.3: - version "1.1.6" - resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.6.tgz#110dcabff397e9dcff7c0789ccc0a49adf1ec5bb" + version "1.1.7" + resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.7.tgz#c7abe9cc8b87c0baa876b19fde83fd464797e38c" dependencies: - is-number "^2.0.2" - kind-of "^3.0.2" + is-number "^3.0.0" + kind-of "^4.0.0" range-parser@~1.2.0: version "1.2.0" @@ -3802,7 +3882,7 @@ read-pkg@^1.0.0: normalize-package-data "^2.3.2" path-type "^1.0.0" -readable-stream@1.1, readable-stream@~1.1.9: +readable-stream@1.1: version "1.1.13" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.13.tgz#f6eef764f514c89e2b9e23146a75ba106756d23e" dependencies: @@ -3821,17 +3901,26 @@ readable-stream@1.1, readable-stream@~1.1.9: string_decoder "~0.10.x" readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.1.5, readable-stream@^2.2.2: - version "2.2.9" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.9.tgz#cf78ec6f4a6d1eb43d26488cac97f042e74b7fc8" + version "2.3.3" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c" dependencies: - buffer-shims "~1.0.0" core-util-is "~1.0.0" - inherits "~2.0.1" + inherits "~2.0.3" isarray "~1.0.0" process-nextick-args "~1.0.6" - string_decoder "~1.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.0.3" util-deprecate "~1.0.1" +readable-stream@~1.1.9: + version "1.1.14" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + readable-stream@~2.0.0: version "2.0.6" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.0.6.tgz#8f90341e68a53ccc928788dacfcd11b36eb9b78e" @@ -3889,8 +3978,8 @@ relateurl@0.2.x: resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" remove-trailing-separator@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.0.1.tgz#615ebb96af559552d4bf4057c8436d486ab63cc4" + version "1.0.2" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.0.2.tgz#69b062d978727ad14dc6b56ba4ab772fd8d70511" repeat-element@^1.1.2: version "1.1.2" @@ -4034,12 +4123,6 @@ rfg-api@^0.3.0: node-rest-client "^1.4.1" unzip2 "^0.2.5" -right-align@^0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" - dependencies: - align-text "^0.1.1" - rimraf@2, rimraf@^2.2.8, rimraf@^2.5.1, rimraf@^2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.1.tgz#c2338ec643df7a1b7fe5c54fa86f57428a55f33d" @@ -4060,9 +4143,9 @@ rx@4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/rx/-/rx-4.1.0.tgz#a5f13ff79ef3b740fe30aa803fb09f98805d4782" -safe-buffer@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.0.1.tgz#d263ca54696cd8a306b5ca6551e92de57918fbe7" +safe-buffer@^5.0.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" sass-graph@^2.1.1: version "2.2.4" @@ -4092,8 +4175,8 @@ sass-lint@^1.10.2: util "^0.10.3" sax@>=0.6.0, sax@~1.2.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.2.tgz#fd8631a23bc7826bef5d871bdb87378c95647828" + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" scss-tokenizer@^0.2.3: version "0.2.3" @@ -4198,8 +4281,8 @@ shelljs@^0.6.0: resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.6.1.tgz#ec6211bed1920442088fe0f70b2837232ed2c8a8" shelljs@^0.7.5: - version "0.7.7" - resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.7.tgz#b2f5c77ef97148f4b4f6e22682e10bba8667cff1" + version "0.7.8" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.8.tgz#decbcf874b0d1e5fb72e14b164a9683048e9acb3" dependencies: glob "^7.0.0" interpret "^1.0.0" @@ -4337,8 +4420,8 @@ sprintf-js@~1.0.2: resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" sshpk@^1.7.0: - version "1.13.0" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.0.tgz#ff2a3e4fd04497555fed97b39a0fd82fafb3a33c" + version "1.13.1" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.1.tgz#512df6da6287144316dc4c18fe1cf1d940739be3" dependencies: asn1 "~0.2.3" assert-plus "^1.0.0" @@ -4347,7 +4430,6 @@ sshpk@^1.7.0: optionalDependencies: bcrypt-pbkdf "^1.0.0" ecc-jsbn "~0.1.1" - jodid25519 "^1.0.0" jsbn "~0.1.0" tweetnacl "~0.14.0" @@ -4401,11 +4483,11 @@ string-width@^1.0.1, string-width@^1.0.2: strip-ansi "^3.0.0" string-width@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.0.0.tgz#635c5436cc72a6e0c387ceca278d4e2eec52687e" + version "2.1.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.0.tgz#030664561fc146c9423ec7d978fe2457437fe6d0" dependencies: is-fullwidth-code-point "^2.0.0" - strip-ansi "^3.0.0" + strip-ansi "^4.0.0" string.prototype.trim@^1.1.2: version "1.1.2" @@ -4419,11 +4501,11 @@ string_decoder@~0.10.x: version "0.10.31" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" -string_decoder@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.1.tgz#62e200f039955a6810d8df0a33ffc0f013662d98" +string_decoder@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab" dependencies: - safe-buffer "^5.0.1" + safe-buffer "~5.1.0" stringstream@~0.0.4: version "0.0.5" @@ -4435,6 +4517,12 @@ strip-ansi@^3.0.0, strip-ansi@^3.0.1: dependencies: ansi-regex "^2.0.0" +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + dependencies: + ansi-regex "^3.0.0" + strip-bom-stream@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-bom-stream/-/strip-bom-stream-1.0.0.tgz#e7144398577d51a6bed0fa1994fa05f43fd988ee" @@ -4462,10 +4550,14 @@ strip-indent@^1.0.1: dependencies: get-stdin "^4.0.1" -strip-json-comments@1.0.2, strip-json-comments@~1.0.1: +strip-json-comments@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-1.0.2.tgz#5a48ab96023dbac1b7b8d0ffabf6f63f1677be9f" +strip-json-comments@~1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-1.0.4.tgz#1e15fbcac97d3ee99bf2d73b4c656b082bbafb91" + strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" @@ -4474,13 +4566,13 @@ supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" -supports-color@^3.2.3: - version "3.2.3" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" +supports-color@^4.0.0, supports-color@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.2.0.tgz#ad986dc7eb2315d009b4d77c8169c2231a684037" dependencies: - has-flag "^1.0.0" + has-flag "^2.0.0" -svgo@0.7.x: +svgo@0.7.2: version "0.7.2" resolved "https://registry.yarnpkg.com/svgo/-/svgo-0.7.2.tgz#9f5772413952135c6fefbf40afe6a4faa88b4bb5" dependencies: @@ -4562,13 +4654,20 @@ through2-filter@^2.0.0: through2 "~2.0.0" xtend "~4.0.0" -through2@2.0.1, through2@2.X, through2@^2.0.0, through2@^2.0.1, through2@~2.0.0: +through2@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.1.tgz#384e75314d49f32de12eebb8136b8eb6b5d59da9" dependencies: readable-stream "~2.0.0" xtend "~4.0.0" +through2@2.X, through2@^2.0.0, through2@^2.0.1, through2@^2.0.3, through2@~2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be" + dependencies: + readable-stream "^2.1.5" + xtend "~4.0.1" + through2@^0.6.0, through2@~0.6.5: version "0.6.5" resolved "https://registry.yarnpkg.com/through2/-/through2-0.6.5.tgz#41ab9c67b29d57209071410e1d7a7a968cd3ad48" @@ -4576,13 +4675,6 @@ through2@^0.6.0, through2@~0.6.5: readable-stream ">=1.0.33-1 <1.1.0-0" xtend ">=4.0.0 <4.1.0-0" -through2@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be" - dependencies: - readable-stream "^2.1.5" - xtend "~4.0.1" - through@2, through@^2.3.6, through@~2.3, through@~2.3.1: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" @@ -4663,25 +4755,19 @@ ua-parser-js@0.7.12: version "0.7.12" resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.12.tgz#04c81a99bdd5dc52263ea29d24c6bf8d4818a4bb" -uglify-js@2.8.x: - version "2.8.27" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.27.tgz#47787f912b0f242e5b984343be8e35e95f694c9c" - dependencies: - source-map "~0.5.1" - yargs "~3.10.0" - optionalDependencies: - uglify-to-browserify "~1.0.0" - -uglify-js@3.0.x, uglify-js@^3.0.5: - version "3.0.13" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.0.13.tgz#1871d736aa1e550c728d7e5a6556579e70925d68" +uglify-js@3.0.15: + version "3.0.15" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.0.15.tgz#aacb323a846b234602270dead8a32441a8806f42" dependencies: commander "~2.9.0" source-map "~0.5.1" -uglify-to-browserify@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" +uglify-js@3.0.x, uglify-js@^3.0.5: + version "3.0.24" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.0.24.tgz#ee93400ad9857fb7a1671778db83f6a23f033121" + dependencies: + commander "~2.9.0" + source-map "~0.5.1" uid-number@^0.0.6: version "0.0.6" @@ -4695,7 +4781,11 @@ unc-path-regex@^0.1.0: version "0.1.2" resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" -underscore@*, underscore@1.7.x: +underscore@*: + version "1.8.3" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.8.3.tgz#4f3fb53b106e6097fcf9cb4109f2a5e9bdfa5022" + +underscore@1.7.x: version "1.7.0" resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.7.0.tgz#6bbaf0877500d36be34ecaa584e0db9fef035209" @@ -4789,8 +4879,8 @@ uuid@^2.0.1: resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a" uuid@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1" + version "3.1.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04" v8flags@^2.0.9: version "2.1.1" @@ -4859,10 +4949,6 @@ vinyl@^0.5.0: clone-stats "^0.0.1" replace-ext "0.0.1" -vlq@^0.2.1: - version "0.2.2" - resolved "https://registry.yarnpkg.com/vlq/-/vlq-0.2.2.tgz#e316d5257b40b86bb43cb8d5fea5d7f54d6b0ca1" - warning@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/warning/-/warning-3.0.0.tgz#32e5377cb572de4ab04753bdf8821c01ed605b7c" @@ -4897,10 +4983,6 @@ wide-align@^1.1.0: dependencies: string-width "^1.0.2" -window-size@0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" - window-size@^0.1.2, window-size@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.4.tgz#f8e1aa1ee5a53ec5bf151ffa09742a6ad7697876" @@ -4909,10 +4991,6 @@ window-size@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.2.0.tgz#b4315bb4214a3d7058ebeee892e13fa24d98b075" -wordwrap@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" - wordwrap@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" @@ -4981,7 +5059,7 @@ y18n@^3.2.0, y18n@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" -yallist@^2.0.0: +yallist@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" @@ -5083,15 +5161,6 @@ yargs@^7.0.0: y18n "^3.2.1" yargs-parser "^5.0.0" -yargs@~3.10.0: - version "3.10.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" - dependencies: - camelcase "^1.0.2" - cliui "^2.1.0" - decamelize "^1.0.0" - window-size "0.1.0" - yeast@0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419" From 0cbf619c13ff70a9e53335375fe9a8d442e411ca Mon Sep 17 00:00:00 2001 From: Xaver Maierhofer Date: Wed, 12 Jul 2017 23:44:42 +0200 Subject: [PATCH 011/119] [TASK] Upgrade to eslint 4 --- gulp/tasks/html.js | 2 +- lib/gui.js | 214 +++++++++++++++++++-------------------- package.json | 4 +- yarn.lock | 246 ++++++++++++++++++++++++++++++++++----------- 4 files changed, 296 insertions(+), 170 deletions(-) diff --git a/gulp/tasks/html.js b/gulp/tasks/html.js index 6f33537..5c56e72 100644 --- a/gulp/tasks/html.js +++ b/gulp/tasks/html.js @@ -15,7 +15,7 @@ module.exports = function (gulp, plugins, config, env) { .replace('', Math.random().toString(12).substring(7)) + ';' - ; + ; } })) .pipe(env.production(plugins.kyhInlineSource({ compress: false }))) diff --git a/lib/gui.js b/lib/gui.js index d317d66..d001d5f 100644 --- a/lib/gui.js +++ b/lib/gui.js @@ -2,130 +2,130 @@ define(['d3-interpolate', 'map', 'sidebar', 'tabs', 'container', 'legend', 'linklist', 'nodelist', 'simplenodelist', 'infobox/main', 'proportions', 'forcegraph', 'title', 'about', 'datadistributor', 'filters/filtergui', 'filters/hostname'], - function (d3Interpolate, Map, Sidebar, Tabs, Container, Legend, Linklist, - Nodelist, SimpleNodelist, Infobox, Proportions, ForceGraph, - Title, About, DataDistributor, FilterGUI, HostnameFilter) { - 'use strict'; +function (d3Interpolate, Map, Sidebar, Tabs, Container, Legend, Linklist, + Nodelist, SimpleNodelist, Infobox, Proportions, ForceGraph, + Title, About, DataDistributor, FilterGUI, HostnameFilter) { + 'use strict'; - return function (config, router, language) { - var self = this; - var content; - var contentDiv; + return function (config, router, language) { + var self = this; + var content; + var contentDiv; - var linkScale = d3Interpolate.interpolate('#F02311', '#04C714'); - var sidebar; + var linkScale = d3Interpolate.interpolate('#F02311', '#04C714'); + var sidebar; - var buttons = document.createElement('div'); - buttons.classList.add('buttons'); + var buttons = document.createElement('div'); + buttons.classList.add('buttons'); - var fanout = new DataDistributor(); - var fanoutUnfiltered = new DataDistributor(); - fanoutUnfiltered.add(fanout); + var fanout = new DataDistributor(); + var fanoutUnfiltered = new DataDistributor(); + fanoutUnfiltered.add(fanout); - function removeContent() { - if (!content) { - return; - } - - router.removeTarget(content); - fanout.remove(content); - - content.destroy(); - - content = null; + function removeContent() { + if (!content) { + return; } - function addContent(K) { - removeContent(); + router.removeTarget(content); + fanout.remove(content); - content = new K(config, linkScale, sidebar.getWidth, router, buttons); - content.render(contentDiv); + content.destroy(); - fanout.add(content); - router.addTarget(content); - } + content = null; + } - function mkView(K) { - return function () { - addContent(K); - }; - } + function addContent(K) { + removeContent(); - var loader = document.getElementsByClassName('loader')[0]; - loader.classList.add('hide'); + content = new K(config, linkScale, sidebar.getWidth, router, buttons); + content.render(contentDiv); - contentDiv = document.createElement('div'); - contentDiv.classList.add('content'); - document.body.appendChild(contentDiv); + fanout.add(content); + router.addTarget(content); + } - sidebar = new Sidebar(document.body); - - contentDiv.appendChild(buttons); - - var buttonToggle = document.createElement('button'); - buttonToggle.classList.add('ion-eye', 'shadow'); - buttonToggle.setAttribute('data-tooltip', _.t('button.switchView')); - buttonToggle.onclick = function onclick() { - var data; - if (content.constructor === Map) { - data = { view: 'graph', lat: undefined, lng: undefined, zoom: undefined }; - } else { - data = { view: 'map' }; - } - router.fullUrl(data, false, true); + function mkView(K) { + return function () { + addContent(K); }; + } - buttons.appendChild(buttonToggle); + var loader = document.getElementsByClassName('loader')[0]; + loader.classList.add('hide'); - var title = new Title(config); + contentDiv = document.createElement('div'); + contentDiv.classList.add('content'); + document.body.appendChild(contentDiv); - var header = new Container('header'); - var infobox = new Infobox(config, sidebar, router); - var tabs = new Tabs(); - var overview = new Container(); - var legend = new Legend(config, language); - var newnodeslist = new SimpleNodelist('new', 'firstseen', router, _.t('node.new')); - var lostnodeslist = new SimpleNodelist('lost', 'lastseen', router, _.t('node.missing')); - var nodelist = new Nodelist(router); - var linklist = new Linklist(linkScale, router); - var statistics = new Proportions(config, fanout); - var about = new About(); + sidebar = new Sidebar(document.body); - fanoutUnfiltered.add(legend); - fanoutUnfiltered.add(newnodeslist); - fanoutUnfiltered.add(lostnodeslist); - fanout.add(nodelist); - fanout.add(linklist); - fanout.add(statistics); + contentDiv.appendChild(buttons); - sidebar.add(header); - header.add(legend); - - overview.add(newnodeslist); - overview.add(lostnodeslist); - - var filterGUI = new FilterGUI(fanout); - fanout.watchFilters(filterGUI); - header.add(filterGUI); - - var hostnameFilter = new HostnameFilter(); - fanout.addFilter(hostnameFilter); - - sidebar.add(tabs); - tabs.add('sidebar.actual', overview); - tabs.add('node.nodes', nodelist); - tabs.add('node.links', linklist); - tabs.add('sidebar.stats', statistics); - tabs.add('sidebar.about', about); - - router.addTarget(title); - router.addTarget(infobox); - - router.addView('map', mkView(Map)); - router.addView('graph', mkView(ForceGraph)); - - self.setData = fanoutUnfiltered.setData; - - return self; + var buttonToggle = document.createElement('button'); + buttonToggle.classList.add('ion-eye', 'shadow'); + buttonToggle.setAttribute('data-tooltip', _.t('button.switchView')); + buttonToggle.onclick = function onclick() { + var data; + if (content.constructor === Map) { + data = { view: 'graph', lat: undefined, lng: undefined, zoom: undefined }; + } else { + data = { view: 'map' }; + } + router.fullUrl(data, false, true); }; - }); + + buttons.appendChild(buttonToggle); + + var title = new Title(config); + + var header = new Container('header'); + var infobox = new Infobox(config, sidebar, router); + var tabs = new Tabs(); + var overview = new Container(); + var legend = new Legend(config, language); + var newnodeslist = new SimpleNodelist('new', 'firstseen', router, _.t('node.new')); + var lostnodeslist = new SimpleNodelist('lost', 'lastseen', router, _.t('node.missing')); + var nodelist = new Nodelist(router); + var linklist = new Linklist(linkScale, router); + var statistics = new Proportions(config, fanout); + var about = new About(); + + fanoutUnfiltered.add(legend); + fanoutUnfiltered.add(newnodeslist); + fanoutUnfiltered.add(lostnodeslist); + fanout.add(nodelist); + fanout.add(linklist); + fanout.add(statistics); + + sidebar.add(header); + header.add(legend); + + overview.add(newnodeslist); + overview.add(lostnodeslist); + + var filterGUI = new FilterGUI(fanout); + fanout.watchFilters(filterGUI); + header.add(filterGUI); + + var hostnameFilter = new HostnameFilter(); + fanout.addFilter(hostnameFilter); + + sidebar.add(tabs); + tabs.add('sidebar.actual', overview); + tabs.add('node.nodes', nodelist); + tabs.add('node.links', linklist); + tabs.add('sidebar.stats', statistics); + tabs.add('sidebar.about', about); + + router.addTarget(title); + router.addTarget(infobox); + + router.addView('map', mkView(Map)); + router.addView('graph', mkView(ForceGraph)); + + self.setData = fanoutUnfiltered.setData; + + return self; + }; +}); diff --git a/package.json b/package.json index 083c53e..61f0d06 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "devDependencies": { "babel-eslint": "^7.2.3", "browser-sync": "^2.18.12", - "eslint": "^3.19.0", + "eslint": "^4.2.0", "eslint-config-airbnb-es5": "^1.1.0", "eslint-config-defaults": "^9.0.0", "eslint-plugin-react": "^7.0.1", @@ -20,7 +20,7 @@ "gulp-cache-bust": "^1.1.0", "gulp-cli": "^1.3.0", "gulp-environments": "^0.1.2", - "gulp-eslint": "^3.0.1", + "gulp-eslint": "^4.0.0", "gulp-htmlmin": "^3.0.0", "gulp-inject": "^4.2.0", "gulp-jsonminify": "^1.0.0", diff --git a/yarn.lock b/yarn.lock index 10c063d..a3d808b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -63,6 +63,15 @@ ajv@^4.7.0, ajv@^4.9.1: co "^4.6.0" json-stable-stringify "^1.0.1" +ajv@^5.2.0: + version "5.2.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.2.2.tgz#47c68d69e86f5d953103b0074a9430dc63da5e39" + dependencies: + co "^4.6.0" + fast-deep-equal "^1.0.0" + json-schema-traverse "^0.3.0" + json-stable-stringify "^1.0.1" + almond@^0.3.3: version "0.3.3" resolved "https://registry.yarnpkg.com/almond/-/almond-0.3.3.tgz#a0e7c95ac7624d6417b4494b1e68bff693168a20" @@ -75,6 +84,10 @@ ansi-escapes@^1.1.0: version "1.4.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" +ansi-escapes@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-2.0.0.tgz#5bae52be424878dd9783e8910e3fc2922e83c81b" + ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" @@ -286,7 +299,7 @@ aws4@^1.2.1: version "1.6.0" resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" -babel-code-frame@^6.16.0, babel-code-frame@^6.22.0: +babel-code-frame@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.22.0.tgz#027620bee567a88c32561574e7fd0801d33118e4" dependencies: @@ -503,7 +516,7 @@ buffers@~0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/buffers/-/buffers-0.1.1.tgz#b24579c3bed4d6d396aeee6d9a8ae7f5482ab7bb" -bufferstreams@^1.1.0, bufferstreams@^1.1.1: +bufferstreams@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/bufferstreams/-/bufferstreams-1.1.1.tgz#0161373060ac5988eff99058731114f6e195d51e" dependencies: @@ -588,7 +601,7 @@ chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^2.0.1: +chalk@^2.0.0, chalk@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.0.1.tgz#dbec49436d2ae15f536114e76d14656cdbc0f44d" dependencies: @@ -668,6 +681,12 @@ cli-cursor@^1.0.1: dependencies: restore-cursor "^1.0.1" +cli-cursor@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" + dependencies: + restore-cursor "^2.0.0" + cli-width@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.1.0.tgz#b234ca209b29ef66fc518d9b98d5847b00edf00a" @@ -761,7 +780,7 @@ concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" -concat-stream@^1.4.6, concat-stream@^1.5.2: +concat-stream@^1.4.6, concat-stream@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7" dependencies: @@ -1013,7 +1032,7 @@ debug@2.6.4: dependencies: ms "0.7.3" -debug@2.X, debug@^2.1.1, debug@^2.2.0: +debug@2.X, debug@^2.1.1, debug@^2.2.0, debug@^2.6.8: version "2.6.8" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc" dependencies: @@ -1374,6 +1393,13 @@ eslint-plugin-react@^7.0.1: has "^1.0.1" jsx-ast-utils "^1.4.1" +eslint-scope@^3.7.1: + version "3.7.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8" + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + eslint@^2.7.0: version "2.13.1" resolved "https://registry.yarnpkg.com/eslint/-/eslint-2.13.1.tgz#e4cc8fa0f009fb829aaae23855a29360be1f6c11" @@ -1412,47 +1438,45 @@ eslint@^2.7.0: text-table "~0.2.0" user-home "^2.0.0" -eslint@^3.0.0, eslint@^3.19.0: - version "3.19.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-3.19.0.tgz#c8fc6201c7f40dd08941b87c085767386a679acc" +eslint@^4.0.0, eslint@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.2.0.tgz#a2b3184111b198e02e9c7f3cca625a5e01c56b3d" dependencies: - babel-code-frame "^6.16.0" + ajv "^5.2.0" + babel-code-frame "^6.22.0" chalk "^1.1.3" - concat-stream "^1.5.2" - debug "^2.1.1" + concat-stream "^1.6.0" + debug "^2.6.8" doctrine "^2.0.0" - escope "^3.6.0" - espree "^3.4.0" + eslint-scope "^3.7.1" + espree "^3.4.3" esquery "^1.0.0" estraverse "^4.2.0" esutils "^2.0.2" file-entry-cache "^2.0.0" - glob "^7.0.3" - globals "^9.14.0" - ignore "^3.2.0" + glob "^7.1.2" + globals "^9.17.0" + ignore "^3.3.3" imurmurhash "^0.1.4" - inquirer "^0.12.0" - is-my-json-valid "^2.10.0" + inquirer "^3.0.6" is-resolvable "^1.0.0" - js-yaml "^3.5.1" - json-stable-stringify "^1.0.0" + js-yaml "^3.8.4" + json-stable-stringify "^1.0.1" levn "^0.3.0" - lodash "^4.0.0" - mkdirp "^0.5.0" + lodash "^4.17.4" + minimatch "^3.0.2" + mkdirp "^0.5.1" natural-compare "^1.4.0" optionator "^0.8.2" - path-is-inside "^1.0.1" - pluralize "^1.2.1" - progress "^1.1.8" - require-uncached "^1.0.2" - shelljs "^0.7.5" - strip-bom "^3.0.0" + path-is-inside "^1.0.2" + pluralize "^4.0.0" + progress "^2.0.0" + require-uncached "^1.0.3" strip-json-comments "~2.0.1" - table "^3.7.8" + table "^4.0.1" text-table "~0.2.0" - user-home "^2.0.0" -espree@^3.1.6, espree@^3.4.0: +espree@^3.1.6, espree@^3.4.3: version "3.4.3" resolved "https://registry.yarnpkg.com/espree/-/espree-3.4.3.tgz#2910b5ccd49ce893c2ffffaab4fd8b3a31b82374" dependencies: @@ -1562,6 +1586,14 @@ extend@^3.0.0, extend@~3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" +external-editor@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.0.4.tgz#1ed9199da9cbfe2ef2f7a31b2fde8b0d12368972" + dependencies: + iconv-lite "^0.4.17" + jschardet "^1.4.2" + tmp "^0.0.31" + extglob@^0.3.1: version "0.3.2" resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" @@ -1579,6 +1611,10 @@ fancy-log@^1.1.0, fancy-log@^1.2.0: chalk "^1.1.1" time-stamp "^1.0.0" +fast-deep-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz#96256a3bc975595eb36d82e9929d060d893439ff" + fast-levenshtein@~2.0.4: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" @@ -1590,6 +1626,12 @@ figures@^1.3.5: escape-string-regexp "^1.0.5" object-assign "^4.1.0" +figures@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" + dependencies: + escape-string-regexp "^1.0.5" + file-entry-cache@^1.1.1: version "1.3.1" resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-1.3.1.tgz#44c61ea607ae4be9c1402f41f44270cbfe334ff8" @@ -1907,7 +1949,7 @@ glob@^5.0.3, glob@~5.0.0: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@~7.1.1: +glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.2, glob@~7.1.1: version "7.1.2" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" dependencies: @@ -1934,7 +1976,7 @@ global-prefix@^0.1.4: is-windows "^0.2.0" which "^1.2.12" -globals@^9.0.0, globals@^9.14.0, globals@^9.2.0: +globals@^9.0.0, globals@^9.17.0, globals@^9.2.0: version "9.18.0" resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" @@ -2045,13 +2087,12 @@ gulp-environments@^0.1.2: gulp-if "^2.0.1" yargs "^5.0.0" -gulp-eslint@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/gulp-eslint/-/gulp-eslint-3.0.1.tgz#04e57e3e18c6974267c12cf6855dc717d4a313bd" +gulp-eslint@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/gulp-eslint/-/gulp-eslint-4.0.0.tgz#16d9ea4d696e7b7a9d65eeb1aa5bc4ba0a22c7f7" dependencies: - bufferstreams "^1.1.1" - eslint "^3.0.0" - gulp-util "^3.0.6" + eslint "^4.0.0" + gulp-util "^3.0.8" gulp-htmlmin@^3.0.0: version "3.0.0" @@ -2217,7 +2258,7 @@ gulp-util@3.0.7: through2 "^2.0.0" vinyl "^0.5.0" -gulp-util@^3.0, gulp-util@^3.0.0, gulp-util@^3.0.6, gulp-util@^3.0.7, gulp-util@~3.0.4, gulp-util@~3.0.6: +gulp-util@^3.0, gulp-util@^3.0.0, gulp-util@^3.0.6, gulp-util@^3.0.7, gulp-util@^3.0.8, gulp-util@~3.0.4, gulp-util@~3.0.6: version "3.0.8" resolved "https://registry.yarnpkg.com/gulp-util/-/gulp-util-3.0.8.tgz#0054e1e744502e27c04c187c3ecc505dd54bbb4f" dependencies: @@ -2410,7 +2451,11 @@ http-signature@~1.1.0: jsprim "^1.2.2" sshpk "^1.7.0" -ignore@^3.1.2, ignore@^3.2.0: +iconv-lite@^0.4.17: + version "0.4.18" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.18.tgz#23d8656b16aae6742ac29732ea8f0336a4789cf2" + +ignore@^3.1.2, ignore@^3.3.3: version "3.3.3" resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.3.tgz#432352e57accd87ab3110e82d3fea0e47812156d" @@ -2484,6 +2529,25 @@ inquirer@^0.12.0: strip-ansi "^3.0.0" through "^2.3.6" +inquirer@^3.0.6: + version "3.2.0" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.2.0.tgz#45b44c2160c729d7578c54060b3eed94487bb42b" + dependencies: + ansi-escapes "^2.0.0" + chalk "^2.0.0" + cli-cursor "^2.1.0" + cli-width "^2.0.0" + external-editor "^2.0.4" + figures "^2.0.0" + lodash "^4.3.0" + mute-stream "0.0.7" + run-async "^2.2.0" + rx-lite "^4.0.8" + rx-lite-aggregates "^4.0.8" + string-width "^2.1.0" + strip-ansi "^4.0.0" + through "^2.3.6" + interpret@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.3.tgz#cbc35c62eeee73f19ab7b10a801511401afc0f90" @@ -2652,6 +2716,10 @@ is-primitive@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" +is-promise@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" + is-property@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" @@ -2742,7 +2810,7 @@ js-tokens@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" -js-yaml@^3.4.6, js-yaml@^3.5.1, js-yaml@^3.5.4: +js-yaml@^3.4.6, js-yaml@^3.5.1, js-yaml@^3.5.4, js-yaml@^3.8.4: version "3.9.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.9.0.tgz#4ffbbf25c2ac963b8299dc74da7e3740de1c18ce" dependencies: @@ -2760,6 +2828,14 @@ jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" +jschardet@^1.4.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/jschardet/-/jschardet-1.4.2.tgz#2aa107f142af4121d145659d44f50830961e699a" + +json-schema-traverse@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" + json-schema@0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" @@ -3087,7 +3163,7 @@ lodash@^3.10.1, lodash@^3.2.0: version "3.10.1" resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" -lodash@^4.0.0, lodash@^4.13.1, lodash@^4.14.0, lodash@^4.2.0, lodash@^4.3.0, lodash@~4.17.4: +lodash@^4.0.0, lodash@^4.13.1, lodash@^4.14.0, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.3.0, lodash@~4.17.4: version "4.17.4" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" @@ -3247,6 +3323,10 @@ mime@1.3.4: version "1.3.6" resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.6.tgz#591d84d3653a6b0b4a3b9df8de5aa8108e72e5e0" +mimic-fn@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.1.0.tgz#e667783d92e89dbd342818b5230b9d62a672ad18" + "minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4, minimatch@~3.0.2: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" @@ -3313,6 +3393,10 @@ mute-stream@0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.5.tgz#8fbfabb0a98a253d3184331f9e8deb7372fac6c0" +mute-stream@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" + nan@^2.3.0, nan@^2.3.2: version "2.6.2" resolved "https://registry.yarnpkg.com/nan/-/nan-2.6.2.tgz#e4ff34e6c95fdfb5aecc08de6596f43605a7db45" @@ -3572,6 +3656,12 @@ onetime@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" +onetime@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" + dependencies: + mimic-fn "^1.0.0" + openurl@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/openurl/-/openurl-1.1.0.tgz#e2f2189d999c04823201f083f0f1a7cd8903187a" @@ -3615,7 +3705,7 @@ os-locale@^1.4.0: dependencies: lcid "^1.0.0" -os-tmpdir@^1.0.0: +os-tmpdir@^1.0.0, os-tmpdir@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" @@ -3699,7 +3789,7 @@ path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" -path-is-inside@^1.0.1: +path-is-inside@^1.0.1, path-is-inside@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" @@ -3753,6 +3843,10 @@ pluralize@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-1.2.1.tgz#d1a21483fd22bb41e58a12fa3421823140897c45" +pluralize@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-4.0.0.tgz#59b708c1c0190a2f692f1c7618c446b052fd1762" + portscanner@2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/portscanner/-/portscanner-2.1.1.tgz#eabb409e4de24950f5a2a516d35ae769343fbb96" @@ -3792,6 +3886,10 @@ progress@^1.1.8: version "1.1.8" resolved "https://registry.yarnpkg.com/progress/-/progress-1.1.8.tgz#e260c78f6161cdd9b0e56cc3e0a85de17c7a57be" +progress@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.0.tgz#8a1be366bf8fc23db2bd23f10c6fe920b4389d1f" + promise-polyfill@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/promise-polyfill/-/promise-polyfill-6.0.2.tgz#d9c86d3dc4dc2df9016e88946defd69b49b41162" @@ -4059,7 +4157,7 @@ require-main-filename@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" -require-uncached@^1.0.2: +require-uncached@^1.0.2, require-uncached@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" dependencies: @@ -4113,6 +4211,13 @@ restore-cursor@^1.0.1: exit-hook "^1.0.0" onetime "^1.0.0" +restore-cursor@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" + dependencies: + onetime "^2.0.0" + signal-exit "^3.0.2" + rfg-api@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/rfg-api/-/rfg-api-0.3.0.tgz#42745648547f254f35d70edccf7cd3f465d9390a" @@ -4135,6 +4240,22 @@ run-async@^0.1.0: dependencies: once "^1.3.0" +run-async@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" + dependencies: + is-promise "^2.1.0" + +rx-lite-aggregates@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be" + dependencies: + rx-lite "*" + +rx-lite@*, rx-lite@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" + rx-lite@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-3.1.2.tgz#19ce502ca572665f3b647b10939f97fd1615f102" @@ -4280,15 +4401,7 @@ shelljs@^0.6.0: version "0.6.1" resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.6.1.tgz#ec6211bed1920442088fe0f70b2837232ed2c8a8" -shelljs@^0.7.5: - version "0.7.8" - resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.8.tgz#decbcf874b0d1e5fb72e14b164a9683048e9acb3" - dependencies: - glob "^7.0.0" - interpret "^1.0.0" - rechoir "^0.6.2" - -signal-exit@^3.0.0: +signal-exit@^3.0.0, signal-exit@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" @@ -4482,7 +4595,7 @@ string-width@^1.0.1, string-width@^1.0.2: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -string-width@^2.0.0: +string-width@^2.0.0, string-width@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.0.tgz#030664561fc146c9423ec7d978fe2457437fe6d0" dependencies: @@ -4540,10 +4653,6 @@ strip-bom@^2.0.0: dependencies: is-utf8 "^0.2.0" -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - strip-indent@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" @@ -4595,6 +4704,17 @@ table@^3.7.8: slice-ansi "0.0.4" string-width "^2.0.0" +table@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/table/-/table-4.0.1.tgz#a8116c133fac2c61f4a420ab6cdf5c4d61f0e435" + dependencies: + ajv "^4.7.0" + ajv-keywords "^1.0.0" + chalk "^1.1.1" + lodash "^4.0.0" + slice-ansi "0.0.4" + string-width "^2.0.0" + tar-pack@^3.4.0: version "3.4.0" resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.0.tgz#23be2d7f671a8339376cbdb0b8fe3fdebf317984" @@ -4689,6 +4809,12 @@ time-stamp@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.1.0.tgz#764a5a11af50561921b133f3b44e618687e0f5c3" +tmp@^0.0.31: + version "0.0.31" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.31.tgz#8f38ab9438e17315e5dbd8b3657e8bfb277ae4a7" + dependencies: + os-tmpdir "~1.0.1" + to-absolute-glob@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/to-absolute-glob/-/to-absolute-glob-0.1.1.tgz#1cdfa472a9ef50c239ee66999b662ca0eb39937f" From ea057cf90f1917b40f08f81b14ab8f459ce65087 Mon Sep 17 00:00:00 2001 From: Xaver Maierhofer Date: Fri, 28 Jul 2017 22:54:00 +0200 Subject: [PATCH 012/119] [TASK] Upgrade dependencies --- package.json | 2 +- yarn.lock | 310 +++++++++++++++++++++++++++------------------------ 2 files changed, 164 insertions(+), 148 deletions(-) diff --git a/package.json b/package.json index 61f0d06..9166c91 100644 --- a/package.json +++ b/package.json @@ -54,6 +54,6 @@ "promise-polyfill": "^6.0.2", "rbush": "^2.0.1", "requirejs": "^2.3.2", - "snabbdom": "^0.6.9" + "snabbdom": "^0.7.0" } } diff --git a/yarn.lock b/yarn.lock index a3d808b..da61159 100644 --- a/yarn.lock +++ b/yarn.lock @@ -101,21 +101,21 @@ ansi-styles@^2.2.1: resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" ansi-styles@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.1.0.tgz#09c202d5c917ec23188caa5c9cb9179cd9547750" + version "3.2.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.0.tgz#c159b8d5be0f9e5a6f346dab94f16ce022161b88" dependencies: - color-convert "^1.0.0" + color-convert "^1.9.0" any-promise@^1.1.0: version "1.3.0" resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" anymatch@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.0.tgz#a3e52fa39168c825ff57b0248126ce5a8ff95507" + version "1.3.2" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a" dependencies: - arrify "^1.0.0" micromatch "^2.1.5" + normalize-path "^2.0.0" aproba@^1.0.3: version "1.1.2" @@ -323,8 +323,8 @@ babel-messages@^6.23.0: babel-runtime "^6.22.0" babel-runtime@^6.22.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.23.0.tgz#0a9489f144de70efb3ce4300accdb329e2fc543b" + version "6.25.0" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.25.0.tgz#33b98eaa5d482bb01a8d1aa6b437ad2b01aec41c" dependencies: core-js "^2.4.0" regenerator-runtime "^0.10.0" @@ -407,8 +407,8 @@ better-assert@~1.0.0: callsite "1.0.0" binary-extensions@^1.0.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.8.0.tgz#48ec8d16df4377eae5fa5884682480af4d95c774" + version "1.9.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.9.0.tgz#66506c16ce6f4d6928a5b3cd6a33ca41e941e37b" binary@~0.3.0: version "0.3.0" @@ -471,8 +471,8 @@ browser-sync-ui@0.6.3: weinre "^2.0.0-pre-I0Z7U9OV" browser-sync@^2.18.12: - version "2.18.12" - resolved "https://registry.yarnpkg.com/browser-sync/-/browser-sync-2.18.12.tgz#bbaa0a17a961e2b5f0a8e760e695027186664779" + version "2.18.13" + resolved "https://registry.yarnpkg.com/browser-sync/-/browser-sync-2.18.13.tgz#c28dc3eb3be67c97a907082b772a37f915c14d7d" dependencies: browser-sync-client "2.5.1" browser-sync-ui "0.6.3" @@ -486,7 +486,7 @@ browser-sync@^2.18.12: fs-extra "3.0.1" http-proxy "1.15.2" immutable "3.8.1" - localtunnel "1.8.2" + localtunnel "1.8.3" micromatch "2.3.11" opn "4.0.2" portscanner "2.1.1" @@ -502,11 +502,11 @@ browser-sync@^2.18.12: yargs "6.4.0" browserslist@^2.1.5: - version "2.1.5" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.1.5.tgz#e882550df3d1cd6d481c1a3e0038f2baf13a4711" + version "2.2.2" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.2.2.tgz#e9b4618b8a01c193f9786beea09f6fd10dbe31c3" dependencies: - caniuse-lite "^1.0.30000684" - electron-to-chromium "^1.3.14" + caniuse-lite "^1.0.30000704" + electron-to-chromium "^1.3.16" bs-recipes@1.3.4: version "1.3.4" @@ -573,13 +573,9 @@ camelcase@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" -caniuse-lite@^1.0.30000684, caniuse-lite@^1.0.30000697: - version "1.0.30000700" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000700.tgz#6084871ec75c6fa62327de97622514f95d9db26a" - -caseless@~0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7" +caniuse-lite@^1.0.30000697, caniuse-lite@^1.0.30000704: + version "1.0.30000708" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000708.tgz#71dbf388c57f379b1bb66c89a890edc04c2509b6" caseless@~0.12.0: version "0.12.0" @@ -660,8 +656,8 @@ chokidar@1.7.0, chokidar@^1.4.3: fsevents "^1.0.0" circular-json@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.1.tgz#be8b36aefccde8b3ca7aa2d6afc07a37242c0d2d" + version "0.3.3" + resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" clap@^1.0.9: version "1.2.0" @@ -670,8 +666,8 @@ clap@^1.0.9: chalk "^1.1.3" clean-css@4.1.x: - version "4.1.6" - resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.1.6.tgz#5a47beb526994cb4f7bf36188a55ed3b45528f0b" + version "4.1.7" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.1.7.tgz#b9aea4f85679889cf3eae8b40349ec4ebdfdd032" dependencies: source-map "0.5.x" @@ -730,15 +726,15 @@ collection-map@^0.1.0: is-plain-object "^2.0.1" make-iterator "^0.1.1" -color-convert@^1.0.0: +color-convert@^1.9.0: version "1.9.0" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.0.tgz#1accf97dd739b983bf994d56fec8f95853641b7a" dependencies: color-name "^1.1.1" color-name@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.2.tgz#5c8ab72b64bd2215d617ae9559ebb148475cf98d" + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" colors@~1.1.2: version "1.1.2" @@ -750,16 +746,16 @@ combined-stream@^1.0.5, combined-stream@~1.0.5: dependencies: delayed-stream "~1.0.0" -commander@2.9.x, commander@~2.9.0: +commander@2.11.x, commander@^2.2.0, commander@^2.8.1, commander@~2.11.0: + version "2.11.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.11.0.tgz#157152fd1e7a6c8d98a5b715cf376df928004563" + +commander@~2.9.0: version "2.9.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" dependencies: graceful-readlink ">= 1.0.0" -commander@^2.2.0, commander@^2.8.1, commander@^2.9.0: - version "2.11.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.11.0.tgz#157152fd1e7a6c8d98a5b715cf376df928004563" - component-bind@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/component-bind/-/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1" @@ -843,6 +839,14 @@ cross-spawn@^3.0.0: lru-cache "^4.0.1" which "^1.2.9" +cross-spawn@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + dependencies: + lru-cache "^4.0.1" + shebang-command "^1.2.0" + which "^1.2.9" + crypt@~0.0.1: version "0.0.2" resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" @@ -975,8 +979,8 @@ d3-transition@1: d3-timer "1" d3-zoom@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/d3-zoom/-/d3-zoom-1.3.1.tgz#386306072d05573e73794a3f1ee71a4d6ebb8c08" + version "1.5.0" + resolved "https://registry.yarnpkg.com/d3-zoom/-/d3-zoom-1.5.0.tgz#8417de9a077f98f9ce83b1998efb8ee12b4db26e" dependencies: d3-dispatch "1" d3-drag "1" @@ -1008,10 +1012,11 @@ dateformat@^2.0.0: resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-2.0.0.tgz#2743e3abb5c3fc2462e527dca445e04e9f4dee17" debug-fabulous@0.1.X: - version "0.1.0" - resolved "https://registry.yarnpkg.com/debug-fabulous/-/debug-fabulous-0.1.0.tgz#ad0ea07a5d519324fb55842a8f34ee59c7f8ff6c" + version "0.1.1" + resolved "https://registry.yarnpkg.com/debug-fabulous/-/debug-fabulous-0.1.1.tgz#1b970878c9fa4fbd1c88306eab323c830c58f1d6" dependencies: - debug "2.X" + debug "2.3.0" + memoizee "^0.4.5" object-assign "4.1.0" debug@2.2.0, debug@~2.2.0: @@ -1020,6 +1025,12 @@ debug@2.2.0, debug@~2.2.0: dependencies: ms "0.7.1" +debug@2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.3.0.tgz#3912dc55d7167fc3af17d2b85c13f93deaedaa43" + dependencies: + ms "0.7.2" + debug@2.3.3: version "2.3.3" resolved "https://registry.yarnpkg.com/debug/-/debug-2.3.3.tgz#40c453e67e6e13c901ddec317af8986cda9eff8c" @@ -1032,7 +1043,7 @@ debug@2.6.4: dependencies: ms "0.7.3" -debug@2.X, debug@^2.1.1, debug@^2.2.0, debug@^2.6.8: +debug@2.6.8, debug@^2.1.1, debug@^2.2.0, debug@^2.6.8: version "2.6.8" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc" dependencies: @@ -1081,10 +1092,14 @@ delegates@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" -depd@1.1.0, depd@~1.1.0: +depd@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.0.tgz#e1bd82c6aab6ced965b97b88b17ed3e528ca18c3" +depd@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.1.tgz#5783b4e1c459f06fa5ca27f991f3d06e7a310359" + destroy@~1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" @@ -1212,9 +1227,9 @@ ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" -electron-to-chromium@^1.3.14: - version "1.3.15" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.15.tgz#08397934891cbcfaebbd18b82a95b5a481138369" +electron-to-chromium@^1.3.16: + version "1.3.16" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.16.tgz#d0e026735754770901ae301a21664cba45d92f7d" emitter-steward@^1.0.0: version "1.0.0" @@ -1306,7 +1321,7 @@ es-to-primitive@^1.1.1: is-date-object "^1.0.1" is-symbol "^1.0.1" -es5-ext@^0.10.14, es5-ext@^0.10.9, es5-ext@~0.10.14: +es5-ext@^0.10.13, es5-ext@^0.10.14, es5-ext@^0.10.9, es5-ext@~0.10.14, es5-ext@~0.10.2: version "0.10.24" resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.24.tgz#a55877c9924bc0c8d9bd3c2cbe17495ac1709b14" dependencies: @@ -1439,13 +1454,14 @@ eslint@^2.7.0: user-home "^2.0.0" eslint@^4.0.0, eslint@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.2.0.tgz#a2b3184111b198e02e9c7f3cca625a5e01c56b3d" + version "4.3.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.3.0.tgz#fcd7c96376bbf34c85ee67ed0012a299642b108f" dependencies: ajv "^5.2.0" babel-code-frame "^6.22.0" chalk "^1.1.3" concat-stream "^1.6.0" + cross-spawn "^5.1.0" debug "^2.6.8" doctrine "^2.0.0" eslint-scope "^3.7.1" @@ -1454,6 +1470,7 @@ eslint@^4.0.0, eslint@^4.2.0: estraverse "^4.2.0" esutils "^2.0.2" file-entry-cache "^2.0.0" + functional-red-black-tree "^1.0.1" glob "^7.1.2" globals "^9.17.0" ignore "^3.3.3" @@ -1472,6 +1489,7 @@ eslint@^4.0.0, eslint@^4.2.0: pluralize "^4.0.0" progress "^2.0.0" require-uncached "^1.0.3" + semver "^5.3.0" strip-json-comments "~2.0.1" table "^4.0.1" text-table "~0.2.0" @@ -1516,7 +1534,7 @@ etag@^1.7.0, etag@~1.8.0: version "1.8.0" resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.0.tgz#6f631aef336d6c46362b51764044ce216be3c051" -event-emitter@~0.3.5: +event-emitter@^0.3.4, event-emitter@~0.3.5: version "0.3.5" resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" dependencies: @@ -1844,6 +1862,10 @@ function-bind@^1.0.2, function-bind@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.0.tgz#16176714c801798e4e8f2cf7f7529467bb4a5771" +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + gauge@~2.7.3: version "2.7.4" resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" @@ -2283,7 +2305,7 @@ gulp-util@^3.0, gulp-util@^3.0.0, gulp-util@^3.0.6, gulp-util@^3.0.7, gulp-util@ "gulp@github:gulpjs/gulp#4.0": version "4.0.0-alpha.2" - resolved "https://codeload.github.com/gulpjs/gulp/tar.gz/38246c3f8b6dbb8d4ef657183e92d90c8299e22f" + resolved "https://codeload.github.com/gulpjs/gulp/tar.gz/6d71a658c61edb3090221579d8f97dbe086ba2ed" dependencies: glob-watcher "^3.0.0" gulp-cli "^1.0.0" @@ -2300,15 +2322,6 @@ har-schema@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e" -har-validator@~2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d" - dependencies: - chalk "^1.1.1" - commander "^2.9.0" - is-my-json-valid "^2.12.4" - pinkie-promise "^2.0.0" - har-validator@~4.2.1: version "4.2.1" resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a" @@ -2386,12 +2399,12 @@ hosted-git-info@^2.1.4: resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.5.0.tgz#6d60e34b3abbc8313062c3b798ef8d901a07af3c" html-minifier@^3.0.3: - version "3.5.2" - resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.2.tgz#d73bc3ff448942408818ce609bf3fb0ea7ef4eb7" + version "3.5.3" + resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.3.tgz#4a275e3b1a16639abb79b4c11191ff0d0fcf1ab9" dependencies: camel-case "3.0.x" clean-css "4.1.x" - commander "2.9.x" + commander "2.11.x" he "1.1.x" ncname "1.0.x" param-case "2.1.x" @@ -2530,8 +2543,8 @@ inquirer@^0.12.0: through "^2.3.6" inquirer@^3.0.6: - version "3.2.0" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.2.0.tgz#45b44c2160c729d7578c54060b3eed94487bb42b" + version "3.2.1" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.2.1.tgz#06ceb0f540f45ca548c17d6840959878265fa175" dependencies: ansi-escapes "^2.0.0" chalk "^2.0.0" @@ -2651,7 +2664,7 @@ is-glob@^3.1.0: dependencies: is-extglob "^2.1.0" -is-my-json-valid@^2.10.0, is-my-json-valid@^2.12.4: +is-my-json-valid@^2.10.0: version "2.16.0" resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.16.0.tgz#f079dd9bfdae65ee2038aae8acbc86ab109e3693" dependencies: @@ -2716,7 +2729,7 @@ is-primitive@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" -is-promise@^2.1.0: +is-promise@^2.1, is-promise@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" @@ -2829,8 +2842,8 @@ jsbn@~0.1.0: resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" jschardet@^1.4.2: - version "1.4.2" - resolved "https://registry.yarnpkg.com/jschardet/-/jschardet-1.4.2.tgz#2aa107f142af4121d145659d44f50830961e699a" + version "1.5.0" + resolved "https://registry.yarnpkg.com/jschardet/-/jschardet-1.5.0.tgz#a61f310306a5a71188e1b1acd08add3cfbb08b1e" json-schema-traverse@^0.3.0: version "0.3.1" @@ -2967,13 +2980,13 @@ load-json-file@^1.0.0: pinkie-promise "^2.0.0" strip-bom "^2.0.0" -localtunnel@1.8.2: - version "1.8.2" - resolved "https://registry.yarnpkg.com/localtunnel/-/localtunnel-1.8.2.tgz#913051e8328b51f75ad8a22ad1f5c5b8c599a359" +localtunnel@1.8.3: + version "1.8.3" + resolved "https://registry.yarnpkg.com/localtunnel/-/localtunnel-1.8.3.tgz#dcc5922fd85651037d4bde24fd93248d0b24eb05" dependencies: - debug "2.2.0" - openurl "1.1.0" - request "2.78.0" + debug "2.6.8" + openurl "1.1.1" + request "2.81.0" yargs "3.29.0" lodash._basecopy@^3.0.0: @@ -3191,6 +3204,12 @@ lru-cache@^4.0.1: pseudomap "^1.0.2" yallist "^2.1.2" +lru-queue@0.1: + version "0.1.0" + resolved "https://registry.yarnpkg.com/lru-queue/-/lru-queue-0.1.0.tgz#2738bd9f0d3cf4f84490c5736c48699ac632cda3" + dependencies: + es5-ext "~0.10.2" + make-error-cause@^1.1.1: version "1.2.2" resolved "https://registry.yarnpkg.com/make-error-cause/-/make-error-cause-1.2.2.tgz#df0388fcd0b37816dff0a5fb8108939777dcbc9d" @@ -3249,6 +3268,19 @@ md5@^2.0.0: crypt "~0.0.1" is-buffer "~1.1.1" +memoizee@^0.4.5: + version "0.4.5" + resolved "https://registry.yarnpkg.com/memoizee/-/memoizee-0.4.5.tgz#1bc3ea1e4be056dd475d521979d7be3d5e5b21c8" + dependencies: + d "1" + es5-ext "^0.10.13" + es6-weak-map "^2.0.1" + event-emitter "^0.3.4" + is-promise "^2.1" + lru-queue "0.1" + next-tick "1" + timers-ext "0.1" + meow@^3.3.0, meow@^3.7.0: version "3.7.0" resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" @@ -3301,15 +3333,15 @@ micromatch@2.3.11, micromatch@^2.1.5, micromatch@^2.3.7, micromatch@^2.3.8: parse-glob "^3.0.4" regex-cache "^0.4.2" -mime-db@~1.27.0: - version "1.27.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.27.0.tgz#820f572296bbd20ec25ed55e5b5de869e5436eb1" +mime-db@~1.29.0: + version "1.29.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.29.0.tgz#48d26d235589651704ac5916ca06001914266878" mime-types@^2.1.12, mime-types@~2.1.11, mime-types@~2.1.7: - version "2.1.15" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.15.tgz#a4ebf5064094569237b8cf70046776d09fc92aed" + version "2.1.16" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.16.tgz#2b858a52e5ecd516db897ac2be87487830698e23" dependencies: - mime-db "~1.27.0" + mime-db "~1.29.0" mime@1.2.4: version "1.2.4" @@ -3423,7 +3455,7 @@ negotiator@0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" -next-tick@^1.0.0: +next-tick@1, next-tick@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" @@ -3504,10 +3536,6 @@ node-sass@^4.2.0: sass-graph "^2.1.1" stdout-stream "^1.4.0" -node-uuid@~1.4.7: - version "1.4.8" - resolved "https://registry.yarnpkg.com/node-uuid/-/node-uuid-1.4.8.tgz#b040eb0923968afabf8d32fb1f17f1167fdab907" - "nopt@2 || 3", nopt@3.0.x: version "3.0.6" resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" @@ -3530,7 +3558,7 @@ normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" -normalize-path@^2.0.1, normalize-path@^2.1.1: +normalize-path@^2.0.0, normalize-path@^2.0.1, normalize-path@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" dependencies: @@ -3662,9 +3690,9 @@ onetime@^2.0.0: dependencies: mimic-fn "^1.0.0" -openurl@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/openurl/-/openurl-1.1.0.tgz#e2f2189d999c04823201f083f0f1a7cd8903187a" +openurl@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/openurl/-/openurl-1.1.1.tgz#3875b4b0ef7a52c156f0db41d4609dbb0f94b387" opn@4.0.2: version "4.0.2" @@ -3859,12 +3887,12 @@ postcss-value-parser@^3.2.3: resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz#87f38f9f18f774a4ab4c8a232f5c5ce8872a9d15" postcss@^6.0.1, postcss@^6.0.6: - version "6.0.6" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.6.tgz#bba4d58e884fc78c840d1539e10eddaabb8f73bd" + version "6.0.8" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.8.tgz#89067a9ce8b11f8a84cbc5117efc30419a0857b3" dependencies: chalk "^2.0.1" source-map "^0.5.6" - supports-color "^4.1.0" + supports-color "^4.2.0" prelude-ls@~1.1.2: version "1.1.2" @@ -3927,10 +3955,6 @@ qs@6.2.1: version "6.5.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.0.tgz#8d04954d364def3efc55b5a0793e1e2c8b1e6e49" -qs@~6.3.0: - version "6.3.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.2.tgz#e75bd5f6e268122a2a0e0bda630b2550c166502c" - qs@~6.4.0: version "6.4.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" @@ -4097,7 +4121,7 @@ replace-ext@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-0.0.1.tgz#29bbd92078a739f0bcce2b4ee41e837953522924" -request@2, request@^2.79.0, request@^2.81.0: +request@2, request@2.81.0, request@^2.79.0, request@^2.81.0: version "2.81.0" resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" dependencies: @@ -4124,31 +4148,6 @@ request@2, request@^2.79.0, request@^2.81.0: tunnel-agent "^0.6.0" uuid "^3.0.0" -request@2.78.0: - version "2.78.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.78.0.tgz#e1c8dec346e1c81923b24acdb337f11decabe9cc" - dependencies: - aws-sign2 "~0.6.0" - aws4 "^1.2.1" - caseless "~0.11.0" - combined-stream "~1.0.5" - extend "~3.0.0" - forever-agent "~0.6.1" - form-data "~2.1.1" - har-validator "~2.0.6" - hawk "~3.1.3" - http-signature "~1.1.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.7" - node-uuid "~1.4.7" - oauth-sign "~0.8.1" - qs "~6.3.0" - stringstream "~0.0.4" - tough-cookie "~2.3.0" - tunnel-agent "~0.4.1" - require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" @@ -4165,8 +4164,8 @@ require-uncached@^1.0.2, require-uncached@^1.0.3: resolve-from "^1.0.0" requirejs@^2.2.0, requirejs@^2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/requirejs/-/requirejs-2.3.3.tgz#aa59fd3a0287eaf407959a138228044b5dd6a6a3" + version "2.3.4" + resolved "https://registry.yarnpkg.com/requirejs/-/requirejs-2.3.4.tgz#f45c48e66ebf0f163da57f6e0cf40fd57996ef50" requires-port@1.x.x: version "1.0.0" @@ -4188,8 +4187,8 @@ resolve-url@~0.2.1: resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" resolve@^1.1.6, resolve@^1.1.7: - version "1.3.3" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.3.3.tgz#655907c3469a8680dc2de3a275a8fdd69691f0e5" + version "1.4.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.4.0.tgz#a75be01c53da25d934a98ebd0e4c4a7312f92a86" dependencies: path-parse "^1.0.5" @@ -4317,14 +4316,18 @@ semver-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/semver-regex/-/semver-regex-1.0.0.tgz#92a4969065f9c70c694753d55248fc68f8f652c9" -"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@~5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" +"semver@2 || 3 || 4 || 5", semver@^5.3.0: + version "5.4.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e" semver@^4.2.0: version "4.3.6" resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.6.tgz#300bc6e0e86374f7ba61068b5b1ecd57fc6532da" +semver@~5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" + send@0.15.2: version "0.15.2" resolved "https://registry.yarnpkg.com/send/-/send-0.15.2.tgz#f91fab4403bcf87e716f70ceb5db2f578bdc17d6" @@ -4397,6 +4400,16 @@ setprototypeof@1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04" +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + dependencies: + shebang-regex "^1.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + shelljs@^0.6.0: version "0.6.1" resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.6.1.tgz#ec6211bed1920442088fe0f70b2837232ed2c8a8" @@ -4415,9 +4428,9 @@ slice-ansi@0.0.4: dependencies: readable-stream "~1.0.31" -snabbdom@^0.6.9: - version "0.6.9" - resolved "https://registry.yarnpkg.com/snabbdom/-/snabbdom-0.6.9.tgz#65a392f4c82ca7e8ec72aa0d2fa797cf5c73b8d7" +snabbdom@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/snabbdom/-/snabbdom-0.7.0.tgz#c09e2baa0f8d43d306a3aa7502b62fdde2b4154e" sntp@1.x.x: version "1.0.9" @@ -4596,8 +4609,8 @@ string-width@^1.0.1, string-width@^1.0.2: strip-ansi "^3.0.0" string-width@^2.0.0, string-width@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.0.tgz#030664561fc146c9423ec7d978fe2457437fe6d0" + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" dependencies: is-fullwidth-code-point "^2.0.0" strip-ansi "^4.0.0" @@ -4675,9 +4688,9 @@ supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" -supports-color@^4.0.0, supports-color@^4.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.2.0.tgz#ad986dc7eb2315d009b4d77c8169c2231a684037" +supports-color@^4.0.0, supports-color@^4.2.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.2.1.tgz#65a4bb2631e90e02420dba5554c375a4754bb836" dependencies: has-flag "^2.0.0" @@ -4809,6 +4822,13 @@ time-stamp@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.1.0.tgz#764a5a11af50561921b133f3b44e618687e0f5c3" +timers-ext@0.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/timers-ext/-/timers-ext-0.1.2.tgz#61cc47a76c1abd3195f14527f978d58ae94c5204" + dependencies: + es5-ext "~0.10.14" + next-tick "1" + tmp@^0.0.31: version "0.0.31" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.31.tgz#8f38ab9438e17315e5dbd8b3657e8bfb277ae4a7" @@ -4859,10 +4879,6 @@ tunnel-agent@^0.6.0: dependencies: safe-buffer "^5.0.1" -tunnel-agent@~0.4.1: - version "0.4.3" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb" - tweetnacl@^0.14.3, tweetnacl@~0.14.0: version "0.14.5" resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" @@ -4889,10 +4905,10 @@ uglify-js@3.0.15: source-map "~0.5.1" uglify-js@3.0.x, uglify-js@^3.0.5: - version "3.0.24" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.0.24.tgz#ee93400ad9857fb7a1671778db83f6a23f033121" + version "3.0.26" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.0.26.tgz#ba279ca597b13fe6c62c2d87dd5188e57a7a3233" dependencies: - commander "~2.9.0" + commander "~2.11.0" source-map "~0.5.1" uid-number@^0.0.6: @@ -4950,8 +4966,8 @@ unique-stream@^2.0.2: through2-filter "^2.0.0" universalify@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.0.tgz#9eb1c4651debcc670cc94f1a75762332bb967778" + version "0.1.1" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.1.tgz#fa71badd4437af4c148841e3b3b165f9e9e590b7" unpipe@~1.0.0: version "1.0.0" From 1bd72654b808980d8cadad48cab9d8ae3c41ef8b Mon Sep 17 00:00:00 2001 From: Xaver Maierhofer Date: Sun, 6 Aug 2017 14:37:33 +0200 Subject: [PATCH 013/119] [TASK] Navigo update & glup cli --- package.json | 6 +- yarn.lock | 244 +++++++++++++++++++++------------------------------ 2 files changed, 102 insertions(+), 148 deletions(-) diff --git a/package.json b/package.json index 9166c91..9b87100 100644 --- a/package.json +++ b/package.json @@ -11,14 +11,14 @@ "devDependencies": { "babel-eslint": "^7.2.3", "browser-sync": "^2.18.12", - "eslint": "^4.2.0", + "eslint": "^4.4.0", "eslint-config-airbnb-es5": "^1.1.0", "eslint-config-defaults": "^9.0.0", "eslint-plugin-react": "^7.0.1", "gulp": "github:gulpjs/gulp#4.0", "gulp-autoprefixer": "^4.0.0", "gulp-cache-bust": "^1.1.0", - "gulp-cli": "^1.3.0", + "gulp-cli": "^1.4.0", "gulp-environments": "^0.1.2", "gulp-eslint": "^4.0.0", "gulp-htmlmin": "^3.0.0", @@ -49,7 +49,7 @@ "d3-zoom": "^1.3.1", "leaflet": "^1.1.0", "moment": "^2.17.1", - "navigo": "^5.2.0", + "navigo": "^5.3.0", "node-polyglot": "^2.2.2", "promise-polyfill": "^6.0.2", "rbush": "^2.0.1", diff --git a/yarn.lock b/yarn.lock index da61159..1ee7310 100644 --- a/yarn.lock +++ b/yarn.lock @@ -44,7 +44,7 @@ acorn@^3.0.4: version "3.3.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" -acorn@^5.0.1, acorn@^5.0.3: +acorn@^5.0.3, acorn@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.1.1.tgz#53fe161111f912ab999ee887a90a0bc52822fd75" @@ -154,7 +154,7 @@ arr-flatten@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" -arr-map@^2.0.0: +arr-map@^2.0.0, arr-map@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/arr-map/-/arr-map-2.0.2.tgz#3a77345ffc1cf35e2a91825601f9e58f2e24cac4" dependencies: @@ -168,10 +168,6 @@ array-differ@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-1.0.0.tgz#eff52e3758249d33be402b8bb8e564bb2b5d4031" -array-each@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/array-each/-/array-each-0.1.1.tgz#c5d52ba8225f36d728178ba7aec413acfaddd0f9" - array-each@^1.0.0, array-each@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/array-each/-/array-each-1.0.1.tgz#a794af0c05ab1752846ee753a1f211a05ba0c44f" @@ -181,11 +177,11 @@ array-find-index@^1.0.1: resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" array-initial@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-initial/-/array-initial-1.0.0.tgz#09b13c58d56a050342e777ab6ffce595b108dad9" + version "1.0.1" + resolved "https://registry.yarnpkg.com/array-initial/-/array-initial-1.0.1.tgz#86122222a29c1ed42347f6334111afa40f8b20ec" dependencies: - array-slice "^0.2.2" - is-number "^0.1.1" + array-slice "^1.0.0" + is-number "^3.0.0" array-last@^1.1.1: version "1.1.1" @@ -193,10 +189,6 @@ array-last@^1.1.1: dependencies: is-number "^0.1.1" -array-slice@^0.2.2, array-slice@^0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-0.2.3.tgz#dd3cfb80ed7973a75117cdac69b0b99ec86186f5" - array-slice@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-1.0.0.tgz#e73034f00dcc1f40876008fd20feae77bd4b7c2f" @@ -236,12 +228,12 @@ assert-plus@^0.2.0: resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" async-done@^1.2.0, async-done@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/async-done/-/async-done-1.2.2.tgz#ba4280da55a16e15f4bb8bf3a844a91878740e31" + version "1.2.3" + resolved "https://registry.yarnpkg.com/async-done/-/async-done-1.2.3.tgz#6c7abc7d61ca27fe6f1f2ba3206ea9ae60a43983" dependencies: end-of-stream "^1.1.0" - next-tick "^1.0.0" once "^1.3.2" + process-nextick-args "^1.0.7" stream-exhaust "^1.0.1" async-each-series@0.1.1: @@ -357,8 +349,8 @@ babylon@^6.17.0, babylon@^6.17.2: resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.17.4.tgz#3e8b7402b88d22c3423e137a1577883b15ff869a" bach@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/bach/-/bach-1.1.0.tgz#cfe542db925cb37051fc490ad102c73bcb258a84" + version "1.2.0" + resolved "https://registry.yarnpkg.com/bach/-/bach-1.2.0.tgz#4b3ce96bf27134f79a1b414a51c14e34c3bd9880" dependencies: arr-filter "^1.1.1" arr-flatten "^1.0.1" @@ -368,7 +360,7 @@ bach@^1.0.0: array-last "^1.1.1" async-done "^1.2.2" async-settle "^1.0.0" - now-and-later "^1.0.0" + now-and-later "^2.0.0" backo2@1.0.2: version "1.0.2" @@ -502,11 +494,11 @@ browser-sync@^2.18.12: yargs "6.4.0" browserslist@^2.1.5: - version "2.2.2" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.2.2.tgz#e9b4618b8a01c193f9786beea09f6fd10dbe31c3" + version "2.3.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.3.0.tgz#b2aa76415c71643fe2368f6243b43bbbb4211752" dependencies: - caniuse-lite "^1.0.30000704" - electron-to-chromium "^1.3.16" + caniuse-lite "^1.0.30000710" + electron-to-chromium "^1.3.17" bs-recipes@1.3.4: version "1.3.4" @@ -573,9 +565,9 @@ camelcase@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" -caniuse-lite@^1.0.30000697, caniuse-lite@^1.0.30000704: - version "1.0.30000708" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000708.tgz#71dbf388c57f379b1bb66c89a890edc04c2509b6" +caniuse-lite@^1.0.30000697, caniuse-lite@^1.0.30000710: + version "1.0.30000710" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000710.tgz#1c249bf7c6a61161c9b10906e3ad9fa5b6761af1" caseless@~0.12.0: version "0.12.0" @@ -717,14 +709,13 @@ code-point-at@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" -collection-map@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/collection-map/-/collection-map-0.1.0.tgz#4cff91d25108d79f4edeecce6ecee3e488f267c2" +collection-map@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/collection-map/-/collection-map-1.0.0.tgz#aea0f06f8d26c780c2b75494385544b2255af18c" dependencies: - arr-map "^2.0.0" - get-values "^0.1.0" - is-plain-object "^2.0.1" - make-iterator "^0.1.1" + arr-map "^2.0.2" + for-own "^1.0.0" + make-iterator "^1.0.0" color-convert@^1.9.0: version "1.9.0" @@ -828,7 +819,7 @@ core-js@^2.4.0: version "2.4.1" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e" -core-util-is@~1.0.0: +core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" @@ -1092,11 +1083,7 @@ delegates@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" -depd@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.0.tgz#e1bd82c6aab6ced965b97b88b17ed3e528ca18c3" - -depd@~1.1.0: +depd@1.1.1, depd@~1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.1.tgz#5783b4e1c459f06fa5ca27f991f3d06e7a310359" @@ -1190,20 +1177,20 @@ duplexer@~0.1.1: resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" duplexify@^3.2.0, duplexify@^3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.5.0.tgz#1aa773002e1578457e9d9d4a50b0ccaaebcbd604" + version "3.5.1" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.5.1.tgz#4e1516be68838bc90a49994f0b39a6e5960befcd" dependencies: - end-of-stream "1.0.0" + end-of-stream "^1.0.0" inherits "^2.0.1" readable-stream "^2.0.0" stream-shift "^1.0.0" each-props@^1.2.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/each-props/-/each-props-1.3.0.tgz#7ed8031c927688aedb4a896eb91485b4487b90ea" + version "1.3.1" + resolved "https://registry.yarnpkg.com/each-props/-/each-props-1.3.1.tgz#fc138f51e3a2774286d4858e02d6e7de462de158" dependencies: is-plain-object "^2.0.1" - object-assign "^4.1.1" + object.defaults "^1.1.0" easy-extender@2.3.2: version "2.3.2" @@ -1227,9 +1214,9 @@ ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" -electron-to-chromium@^1.3.16: - version "1.3.16" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.16.tgz#d0e026735754770901ae301a21664cba45d92f7d" +electron-to-chromium@^1.3.17: + version "1.3.17" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.17.tgz#41c13457cc7166c5c15e767ae61d86a8cacdee5d" emitter-steward@^1.0.0: version "1.0.0" @@ -1239,13 +1226,7 @@ encodeurl@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.1.tgz#79e3d58655346909fe6f0f45a5de68103b294d20" -end-of-stream@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.0.0.tgz#d4596e702734a93e40e9af864319eabd99ff2f0e" - dependencies: - once "~1.3.0" - -end-of-stream@^1.1.0: +end-of-stream@^1.0.0, end-of-stream@^1.1.0: version "1.4.0" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.0.tgz#7a90d833efda6cfa6eac0f4949dbb0fad3a63206" dependencies: @@ -1305,13 +1286,14 @@ error-ex@^1.2.0: is-arrayish "^0.2.1" es-abstract@^1.5.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.7.0.tgz#dfade774e01bfcd97f96180298c449c8623fb94c" + version "1.8.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.8.0.tgz#3b00385e85729932beffa9163bbea1234e932914" dependencies: es-to-primitive "^1.1.1" function-bind "^1.1.0" + has "^1.0.1" is-callable "^1.1.3" - is-regex "^1.0.3" + is-regex "^1.0.4" es-to-primitive@^1.1.1: version "1.1.1" @@ -1322,8 +1304,8 @@ es-to-primitive@^1.1.1: is-symbol "^1.0.1" es5-ext@^0.10.13, es5-ext@^0.10.14, es5-ext@^0.10.9, es5-ext@~0.10.14, es5-ext@~0.10.2: - version "0.10.24" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.24.tgz#a55877c9924bc0c8d9bd3c2cbe17495ac1709b14" + version "0.10.26" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.26.tgz#51b2128a531b70c4f6764093a73cbebb82186372" dependencies: es6-iterator "2" es6-symbol "~3.1" @@ -1453,9 +1435,9 @@ eslint@^2.7.0: text-table "~0.2.0" user-home "^2.0.0" -eslint@^4.0.0, eslint@^4.2.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.3.0.tgz#fcd7c96376bbf34c85ee67ed0012a299642b108f" +eslint@^4.0.0, eslint@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.4.0.tgz#a3e153e704b64f78290ef03592494eaba228d3bc" dependencies: ajv "^5.2.0" babel-code-frame "^6.22.0" @@ -1465,7 +1447,7 @@ eslint@^4.0.0, eslint@^4.2.0: debug "^2.6.8" doctrine "^2.0.0" eslint-scope "^3.7.1" - espree "^3.4.3" + espree "^3.5.0" esquery "^1.0.0" estraverse "^4.2.0" esutils "^2.0.2" @@ -1477,7 +1459,7 @@ eslint@^4.0.0, eslint@^4.2.0: imurmurhash "^0.1.4" inquirer "^3.0.6" is-resolvable "^1.0.0" - js-yaml "^3.8.4" + js-yaml "^3.9.1" json-stable-stringify "^1.0.1" levn "^0.3.0" lodash "^4.17.4" @@ -1494,11 +1476,11 @@ eslint@^4.0.0, eslint@^4.2.0: table "^4.0.1" text-table "~0.2.0" -espree@^3.1.6, espree@^3.4.3: - version "3.4.3" - resolved "https://registry.yarnpkg.com/espree/-/espree-3.4.3.tgz#2910b5ccd49ce893c2ffffaab4fd8b3a31b82374" +espree@^3.1.6, espree@^3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.0.tgz#98358625bdd055861ea27e2867ea729faf463d8d" dependencies: - acorn "^5.0.1" + acorn "^5.1.1" acorn-jsx "^3.0.0" esprima@^2.6.0: @@ -1618,9 +1600,9 @@ extglob@^0.3.1: dependencies: is-extglob "^1.0.0" -extsprintf@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550" +extsprintf@1.3.0, extsprintf@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" fancy-log@^1.1.0, fancy-log@^1.2.0: version "1.3.0" @@ -1747,7 +1729,7 @@ for-in@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" -for-own@^0.1.1, for-own@^0.1.3, for-own@^0.1.4: +for-own@^0.1.4: version "0.1.5" resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" dependencies: @@ -1907,12 +1889,6 @@ get-value@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" -get-values@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/get-values/-/get-values-0.1.0.tgz#3ac035b65a44923d35db2fc2b7ba2322b6c3f29e" - dependencies: - for-own "^0.1.3" - getpass@^0.1.1: version "0.1.7" resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" @@ -2079,9 +2055,9 @@ gulp-cache-bust@^1.1.0: temp-write "^2.1.0" through2 "2.0.1" -gulp-cli@^1.0.0, gulp-cli@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/gulp-cli/-/gulp-cli-1.3.0.tgz#a6bfbb8be35341be290ae45cd3e401071216edd4" +gulp-cli@^1.0.0, gulp-cli@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/gulp-cli/-/gulp-cli-1.4.0.tgz#6f5bbe2cd0bdb4849d12cf9e1246a5861f8b4f88" dependencies: archy "^1.0.0" chalk "^1.1.0" @@ -2441,10 +2417,10 @@ http-errors@~1.5.0: statuses ">= 1.3.1 < 2" http-errors@~1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.1.tgz#5f8b8ed98aca545656bf572997387f904a722257" + version "1.6.2" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.2.tgz#0a002cc85707192a7e7946ceedc11155f60ec736" dependencies: - depd "1.1.0" + depd "1.1.1" inherits "2.0.3" setprototypeof "1.0.3" statuses ">= 1.3.1 < 2" @@ -2737,7 +2713,7 @@ is-property@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" -is-regex@^1.0.3: +is-regex@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" dependencies: @@ -2797,10 +2773,6 @@ isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" -isobject@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-1.0.2.tgz#f0f9b8ce92dd540fa0740882e3835a2e022ec78a" - isobject@^2.0.0, isobject@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" @@ -2823,9 +2795,9 @@ js-tokens@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" -js-yaml@^3.4.6, js-yaml@^3.5.1, js-yaml@^3.5.4, js-yaml@^3.8.4: - version "3.9.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.9.0.tgz#4ffbbf25c2ac963b8299dc74da7e3740de1c18ce" +js-yaml@^3.4.6, js-yaml@^3.5.1, js-yaml@^3.5.4, js-yaml@^3.9.1: + version "3.9.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.9.1.tgz#08775cebdfdd359209f0d2acd383c8f86a6904a0" dependencies: argparse "^1.0.7" esprima "^4.0.0" @@ -2892,13 +2864,13 @@ jsonpointer@^4.0.0: resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9" jsprim@^1.2.2: - version "1.4.0" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.0.tgz#a3b87e40298d8c380552d8cc7628a0bb95a22918" + version "1.4.1" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" dependencies: assert-plus "1.0.0" - extsprintf "1.0.2" + extsprintf "1.3.0" json-schema "0.2.3" - verror "1.3.6" + verror "1.10.0" jsx-ast-utils@^1.4.1: version "1.4.1" @@ -3220,12 +3192,6 @@ make-error@^1.2.0: version "1.3.0" resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.0.tgz#52ad3a339ccf10ce62b4040b708fe707244b8b96" -make-iterator@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/make-iterator/-/make-iterator-0.1.1.tgz#873d27b8198a465a81483b6f5d16da4e863ecf5b" - dependencies: - for-own "^0.1.1" - make-iterator@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/make-iterator/-/make-iterator-1.0.0.tgz#57bef5dc85d23923ba23767324d8e8f8f3d9694b" @@ -3441,9 +3407,9 @@ natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" -navigo@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/navigo/-/navigo-5.2.0.tgz#3dfb19e7e2cc64059f4317396beec30a1ee2df52" +navigo@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/navigo/-/navigo-5.3.0.tgz#1a70ea7fb447de109f3ce55c7c2ab80c960f9c31" ncname@1.0.x: version "1.0.0" @@ -3455,7 +3421,7 @@ negotiator@0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" -next-tick@1, next-tick@^1.0.0: +next-tick@1: version "1.0.0" resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" @@ -3568,9 +3534,9 @@ normalize-range@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" -now-and-later@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/now-and-later/-/now-and-later-1.0.0.tgz#23e798ccaaf0e8acbef0687f82086274746e0893" +now-and-later@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/now-and-later/-/now-and-later-2.0.0.tgz#bc61cbb456d79cb32207ce47ca05136ff2e7d6ee" dependencies: once "^1.3.2" @@ -3605,7 +3571,7 @@ object-assign@4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.0.tgz#7a3b3d0e98063d43f4c03f2e8ae6cd51a86883a0" -object-assign@4.1.1, object-assign@^4.0.0, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: +object-assign@4.1.1, object-assign@^4.0.0, object-assign@^4.0.1, object-assign@^4.1.0: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" @@ -3625,15 +3591,6 @@ object-path@^0.9.0: version "0.9.2" resolved "https://registry.yarnpkg.com/object-path/-/object-path-0.9.2.tgz#0fd9a74fc5fad1ae3968b586bda5c632bd6c05a5" -object.defaults@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/object.defaults/-/object.defaults-0.3.0.tgz#b1eb9cbc78c4c7bd56cac6cae3dead5a7113882a" - dependencies: - array-each "^0.1.0" - array-slice "^0.2.3" - for-own "^0.1.3" - isobject "^1.0.0" - object.defaults@^1.0.0, object.defaults@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/object.defaults/-/object.defaults-1.1.0.tgz#3a7f868334b407dea06da16d88d5cd29e435fecf" @@ -3656,11 +3613,12 @@ object.pick@^1.2.0: dependencies: isobject "^2.1.0" -object.reduce@^0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/object.reduce/-/object.reduce-0.1.7.tgz#d180e84f72d218348af45352b55165246b95046d" +object.reduce@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object.reduce/-/object.reduce-1.0.1.tgz#6fe348f2ac7fa0f95ca621226599096825bb03ad" dependencies: - for-own "^0.1.3" + for-own "^1.0.0" + make-iterator "^1.0.0" on-finished@~2.3.0: version "2.3.0" @@ -3674,12 +3632,6 @@ once@^1.3.0, once@^1.3.2, once@^1.3.3, once@^1.4.0: dependencies: wrappy "1" -once@~1.3.0: - version "1.3.3" - resolved "https://registry.yarnpkg.com/once/-/once-1.3.3.tgz#b2e261557ce4c314ec8304f3fa82663e4297ca20" - dependencies: - wrappy "1" - onetime@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" @@ -3906,7 +3858,7 @@ pretty-hrtime@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1" -process-nextick-args@~1.0.6: +process-nextick-args@^1.0.7, process-nextick-args@~1.0.6: version "1.0.7" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" @@ -4905,8 +4857,8 @@ uglify-js@3.0.15: source-map "~0.5.1" uglify-js@3.0.x, uglify-js@^3.0.5: - version "3.0.26" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.0.26.tgz#ba279ca597b13fe6c62c2d87dd5188e57a7a3233" + version "3.0.27" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.0.27.tgz#a97db8c8ba6b9dba4e2f88d86aa9548fa6320034" dependencies: commander "~2.11.0" source-map "~0.5.1" @@ -4936,17 +4888,17 @@ undertaker-registry@^1.0.0: resolved "https://registry.yarnpkg.com/undertaker-registry/-/undertaker-registry-1.0.0.tgz#2da716c765999d8c94b9f9ed2c006df4923b052b" undertaker@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/undertaker/-/undertaker-1.1.0.tgz#0ba00e6fb6a8afe1e928631565aaf6dba6111aeb" + version "1.2.0" + resolved "https://registry.yarnpkg.com/undertaker/-/undertaker-1.2.0.tgz#339da4646252d082dc378e708067299750e11b49" dependencies: arr-flatten "^1.0.1" arr-map "^2.0.0" bach "^1.0.0" - collection-map "^0.1.0" + collection-map "^1.0.0" es6-weak-map "^2.0.1" last-run "^1.1.0" - object.defaults "^0.3.0" - object.reduce "^0.1.7" + object.defaults "^1.0.0" + object.reduce "^1.0.0" undertaker-registry "^1.0.0" union-value@^0.2.3: @@ -5041,11 +4993,13 @@ validate-npm-package-license@^3.0.1: spdx-correct "~1.0.0" spdx-expression-parse "~1.0.0" -verror@1.3.6: - version "1.3.6" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.3.6.tgz#cff5df12946d297d2baaefaa2689e25be01c005c" +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" dependencies: - extsprintf "1.0.2" + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" vinyl-fs@^2.0.0: version "2.4.4" @@ -5114,8 +5068,8 @@ which-module@^1.0.0: resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" which@1, which@^1.2.12, which@^1.2.9: - version "1.2.14" - resolved "https://registry.yarnpkg.com/which/-/which-1.2.14.tgz#9a87c4378f03e827cecaf1acdf56c736c01c14e5" + version "1.3.0" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" dependencies: isexe "^2.0.0" From 1995855693403cc8ed48820b7dd4eb69c2b4090b Mon Sep 17 00:00:00 2001 From: Xaver Maierhofer Date: Tue, 15 Aug 2017 17:41:58 +0200 Subject: [PATCH 014/119] [TASK] Upgrade leaflet 1.2 --- package.json | 8 ++-- yarn.lock | 132 ++++++++++++++++++++++++--------------------------- 2 files changed, 65 insertions(+), 75 deletions(-) diff --git a/package.json b/package.json index 9b87100..b410ab3 100644 --- a/package.json +++ b/package.json @@ -11,10 +11,10 @@ "devDependencies": { "babel-eslint": "^7.2.3", "browser-sync": "^2.18.12", - "eslint": "^4.4.0", + "eslint": "^4.4.1", "eslint-config-airbnb-es5": "^1.1.0", "eslint-config-defaults": "^9.0.0", - "eslint-plugin-react": "^7.0.1", + "eslint-plugin-react": "^7.2.1", "gulp": "github:gulpjs/gulp#4.0", "gulp-autoprefixer": "^4.0.0", "gulp-cache-bust": "^1.1.0", @@ -47,9 +47,9 @@ "d3-force": "^1.0.6", "d3-selection": "^1.1.0", "d3-zoom": "^1.3.1", - "leaflet": "^1.1.0", + "leaflet": "^1.2.0", "moment": "^2.17.1", - "navigo": "^5.3.0", + "navigo": "^5.3.1", "node-polyglot": "^2.2.2", "promise-polyfill": "^6.0.2", "rbush": "^2.0.1", diff --git a/yarn.lock b/yarn.lock index 1ee7310..778df9d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -176,6 +176,13 @@ array-find-index@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" +array-includes@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.0.3.tgz#184b48f62d92d7452bb31b323165c7f8bd02266d" + dependencies: + define-properties "^1.1.2" + es-abstract "^1.7.0" + array-initial@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/array-initial/-/array-initial-1.0.1.tgz#86122222a29c1ed42347f6334111afa40f8b20ec" @@ -399,8 +406,8 @@ better-assert@~1.0.0: callsite "1.0.0" binary-extensions@^1.0.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.9.0.tgz#66506c16ce6f4d6928a5b3cd6a33ca41e941e37b" + version "1.10.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.10.0.tgz#9aeb9a6c5e88638aad171e167f5900abe24835d0" binary@~0.3.0: version "0.3.0" @@ -494,11 +501,11 @@ browser-sync@^2.18.12: yargs "6.4.0" browserslist@^2.1.5: - version "2.3.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.3.0.tgz#b2aa76415c71643fe2368f6243b43bbbb4211752" + version "2.3.3" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.3.3.tgz#2b0cabc4d28489f682598605858a0782f14b154c" dependencies: - caniuse-lite "^1.0.30000710" - electron-to-chromium "^1.3.17" + caniuse-lite "^1.0.30000715" + electron-to-chromium "^1.3.18" bs-recipes@1.3.4: version "1.3.4" @@ -565,9 +572,9 @@ camelcase@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" -caniuse-lite@^1.0.30000697, caniuse-lite@^1.0.30000710: - version "1.0.30000710" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000710.tgz#1c249bf7c6a61161c9b10906e3ad9fa5b6761af1" +caniuse-lite@^1.0.30000697, caniuse-lite@^1.0.30000715: + version "1.0.30000715" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000715.tgz#c327f5e6d907ebcec62cde598c3bf0dd793fb9a0" caseless@~0.12.0: version "0.12.0" @@ -589,9 +596,9 @@ chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^2.0.0, chalk@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.0.1.tgz#dbec49436d2ae15f536114e76d14656cdbc0f44d" +chalk@^2.0.0, chalk@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.1.0.tgz#ac5becf14fa21b99c6c92ca7a7d7cfd5b17e743e" dependencies: ansi-styles "^3.1.0" escape-string-regexp "^1.0.5" @@ -741,12 +748,6 @@ commander@2.11.x, commander@^2.2.0, commander@^2.8.1, commander@~2.11.0: version "2.11.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.11.0.tgz#157152fd1e7a6c8d98a5b715cf376df928004563" -commander@~2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" - dependencies: - graceful-readlink ">= 1.0.0" - component-bind@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/component-bind/-/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1" @@ -816,8 +817,8 @@ copy-props@^1.4.1: is-plain-object "^2.0.1" core-js@^2.4.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e" + version "2.5.0" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.0.tgz#569c050918be6486b3837552028ae0466b717086" core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" @@ -1214,9 +1215,9 @@ ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" -electron-to-chromium@^1.3.17: - version "1.3.17" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.17.tgz#41c13457cc7166c5c15e767ae61d86a8cacdee5d" +electron-to-chromium@^1.3.18: + version "1.3.18" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.18.tgz#3dcc99da3e6b665f6abbc71c28ad51a2cd731a9c" emitter-steward@^1.0.0: version "1.0.0" @@ -1285,7 +1286,7 @@ error-ex@^1.2.0: dependencies: is-arrayish "^0.2.1" -es-abstract@^1.5.0: +es-abstract@^1.5.0, es-abstract@^1.7.0: version "1.8.0" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.8.0.tgz#3b00385e85729932beffa9163bbea1234e932914" dependencies: @@ -1304,8 +1305,8 @@ es-to-primitive@^1.1.1: is-symbol "^1.0.1" es5-ext@^0.10.13, es5-ext@^0.10.14, es5-ext@^0.10.9, es5-ext@~0.10.14, es5-ext@~0.10.2: - version "0.10.26" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.26.tgz#51b2128a531b70c4f6764093a73cbebb82186372" + version "0.10.27" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.27.tgz#bf926b058c62b1cb5de1a887930673b6aa6d9a66" dependencies: es6-iterator "2" es6-symbol "~3.1" @@ -1382,13 +1383,13 @@ eslint-config-defaults@^9.0.0: version "9.0.0" resolved "https://registry.yarnpkg.com/eslint-config-defaults/-/eslint-config-defaults-9.0.0.tgz#a090adc13b2935e3f43b3cd048a92701654e5ad5" -eslint-plugin-react@^7.0.1: - version "7.1.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.1.0.tgz#27770acf39f5fd49cd0af4083ce58104eb390d4c" +eslint-plugin-react@^7.2.1: + version "7.2.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.2.1.tgz#c2673526ed6571b08c69c5f453d03f5f13e8ddbe" dependencies: doctrine "^2.0.0" has "^1.0.1" - jsx-ast-utils "^1.4.1" + jsx-ast-utils "^2.0.0" eslint-scope@^3.7.1: version "3.7.1" @@ -1435,9 +1436,9 @@ eslint@^2.7.0: text-table "~0.2.0" user-home "^2.0.0" -eslint@^4.0.0, eslint@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.4.0.tgz#a3e153e704b64f78290ef03592494eaba228d3bc" +eslint@^4.0.0, eslint@^4.4.1: + version "4.4.1" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.4.1.tgz#99cd7eafcffca2ff99a5c8f5f2a474d6364b4bd3" dependencies: ajv "^5.2.0" babel-code-frame "^6.22.0" @@ -2019,10 +2020,6 @@ graceful-fs@~3.0.2: dependencies: natives "^1.1.0" -"graceful-readlink@>= 1.0.0": - version "1.0.1" - resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" - group-array@^0.3.0: version "0.3.3" resolved "https://registry.yarnpkg.com/group-array/-/group-array-0.3.3.tgz#bbd9d2f718df4be33f0fb90432aaf1b4360e498f" @@ -2490,15 +2487,15 @@ ini@^1.3.4, ini@~1.3.0: resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e" inline-source@^5.0.0: - version "5.2.3" - resolved "https://registry.yarnpkg.com/inline-source/-/inline-source-5.2.3.tgz#c95da30fe7e39144e9fdff5128d821c302001433" + version "5.2.4" + resolved "https://registry.yarnpkg.com/inline-source/-/inline-source-5.2.4.tgz#f782bc52f2e2681753a46631653c09c58a19920d" dependencies: csso "3.1.1" htmlparser2 "3.9.2" is-plain-obj "1.1.0" object-assign "4.1.1" svgo "0.7.2" - uglify-js "3.0.15" + uglify-js "3.0.x" inquirer@^0.12.0: version "0.12.0" @@ -2814,8 +2811,8 @@ jsbn@~0.1.0: resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" jschardet@^1.4.2: - version "1.5.0" - resolved "https://registry.yarnpkg.com/jschardet/-/jschardet-1.5.0.tgz#a61f310306a5a71188e1b1acd08add3cfbb08b1e" + version "1.5.1" + resolved "https://registry.yarnpkg.com/jschardet/-/jschardet-1.5.1.tgz#c519f629f86b3a5bedba58a88d311309eec097f9" json-schema-traverse@^0.3.0: version "0.3.1" @@ -2872,9 +2869,11 @@ jsprim@^1.2.2: json-schema "0.2.3" verror "1.10.0" -jsx-ast-utils@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-1.4.1.tgz#3867213e8dd79bf1e8f2300c0cfc1efb182c0df1" +jsx-ast-utils@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.0.0.tgz#ec06a3d60cf307e5e119dac7bad81e89f096f0f8" + dependencies: + array-includes "^3.0.3" kind-of@^3.0.2, kind-of@^3.1.0: version "3.2.2" @@ -2913,9 +2912,9 @@ lcid@^1.0.0: dependencies: invert-kv "^1.0.0" -leaflet@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/leaflet/-/leaflet-1.1.0.tgz#63246715cfc783dca6798b843a250e8e6fd84918" +leaflet@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/leaflet/-/leaflet-1.2.0.tgz#fd5d93d9cb00091f5f8a69206d0d6744c1c82697" levn@^0.3.0, levn@~0.3.0: version "0.3.0" @@ -3407,9 +3406,9 @@ natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" -navigo@^5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/navigo/-/navigo-5.3.0.tgz#1a70ea7fb447de109f3ce55c7c2ab80c960f9c31" +navigo@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/navigo/-/navigo-5.3.1.tgz#df22c5b84ebf2a121cdaaac1387a876c9f780606" ncname@1.0.x: version "1.0.0" @@ -3839,12 +3838,12 @@ postcss-value-parser@^3.2.3: resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz#87f38f9f18f774a4ab4c8a232f5c5ce8872a9d15" postcss@^6.0.1, postcss@^6.0.6: - version "6.0.8" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.8.tgz#89067a9ce8b11f8a84cbc5117efc30419a0857b3" + version "6.0.9" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.9.tgz#54819766784a51c65b1ec4d54c2f93765438c35a" dependencies: - chalk "^2.0.1" + chalk "^2.1.0" source-map "^0.5.6" - supports-color "^4.2.0" + supports-color "^4.2.1" prelude-ls@~1.1.2: version "1.1.2" @@ -4640,7 +4639,7 @@ supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" -supports-color@^4.0.0, supports-color@^4.2.0: +supports-color@^4.0.0, supports-color@^4.2.1: version "4.2.1" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.2.1.tgz#65a4bb2631e90e02420dba5554c375a4754bb836" dependencies: @@ -4849,13 +4848,6 @@ ua-parser-js@0.7.12: version "0.7.12" resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.12.tgz#04c81a99bdd5dc52263ea29d24c6bf8d4818a4bb" -uglify-js@3.0.15: - version "3.0.15" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.0.15.tgz#aacb323a846b234602270dead8a32441a8806f42" - dependencies: - commander "~2.9.0" - source-map "~0.5.1" - uglify-js@3.0.x, uglify-js@^3.0.5: version "3.0.27" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.0.27.tgz#a97db8c8ba6b9dba4e2f88d86aa9548fa6320034" @@ -5131,17 +5123,15 @@ xml-char-classes@^1.0.0: resolved "https://registry.yarnpkg.com/xml-char-classes/-/xml-char-classes-1.0.0.tgz#64657848a20ffc5df583a42ad8a277b4512bbc4d" xml2js@>=0.2.4: - version "0.4.17" - resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.17.tgz#17be93eaae3f3b779359c795b419705a8817e868" + version "0.4.18" + resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.18.tgz#a117ec8153aeeb22f9541bfbe8805e35dae7b969" dependencies: sax ">=0.6.0" - xmlbuilder "^4.1.0" + xmlbuilder "~9.0.1" -xmlbuilder@^4.1.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-4.2.1.tgz#aa58a3041a066f90eaa16c2f5389ff19f3f461a5" - dependencies: - lodash "^4.0.0" +xmlbuilder@~9.0.1: + version "9.0.3" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.3.tgz#2b975dd9f6c7ccac84bb5d316d948f72b06ffacf" xmlhttprequest-ssl@1.5.3: version "1.5.3" From 375627ab00c5d85878374dd86b648282a9569172 Mon Sep 17 00:00:00 2001 From: wahram Date: Fri, 18 Aug 2017 20:46:13 +0200 Subject: [PATCH 015/119] [TASK] Replace Math.pow to improve performance --- lib/utils/math.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/utils/math.js b/lib/utils/math.js index e4f3572..32e2eb2 100644 --- a/lib/utils/math.js +++ b/lib/utils/math.js @@ -2,7 +2,7 @@ define(function () { var self = {}; self.distance = function distance(a, b) { - return Math.pow(a.x - b.x, 2) + Math.pow(a.y - b.y, 2); + return (a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y); }; self.distancePoint = function distancePoint(a, b) { From c24cf3cfb51af7b4e57d9206edd914ed7efcd72c Mon Sep 17 00:00:00 2001 From: Moritz Warning Date: Sat, 2 Sep 2017 23:01:42 +0200 Subject: [PATCH 016/119] [TASK] Add space between label and connection count --- lib/infobox/node.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/infobox/node.js b/lib/infobox/node.js index 871d149..612f55e 100644 --- a/lib/infobox/node.js +++ b/lib/infobox/node.js @@ -243,7 +243,7 @@ define(['sorttable', 'snabbdom', 'd3-interpolate', 'moment', 'helper'], if (d.neighbours.length > 0) { var h3 = document.createElement('h3'); - h3.textContent = _.t('node.link', d.neighbours.length) + '(' + d.neighbours.length + ')'; + h3.textContent = _.t('node.link', d.neighbours.length) + ' (' + d.neighbours.length + ')'; el.appendChild(h3); var headings = [{ From 779fa0a630cec0a2d0a99d081288686dcb856a82 Mon Sep 17 00:00:00 2001 From: Moritz Warning Date: Sat, 2 Sep 2017 23:55:00 +0200 Subject: [PATCH 017/119] [TASK] Hide stats title when table is empty --- lib/proportions.js | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/lib/proportions.js b/lib/proportions.js index 8c8af49..0c4eb15 100644 --- a/lib/proportions.js +++ b/lib/proportions.js @@ -178,14 +178,16 @@ define(['d3-interpolate', 'snabbdom', 'filters/genericnode', 'helper'], }; self.renderSingle = function renderSingle(el, heading, table) { - var h2 = document.createElement('h2'); - h2.classList.add('proportion-header'); - h2.textContent = _.t(heading); - h2.onclick = function onclick() { - table.elm.classList.toggle('hide'); - }; - el.appendChild(h2); - el.appendChild(table.elm); + if (table.children.length > 0) { + var h2 = document.createElement('h2'); + h2.classList.add('proportion-header'); + h2.textContent = _.t(heading); + h2.onclick = function onclick() { + table.elm.classList.toggle('hide'); + }; + el.appendChild(h2); + el.appendChild(table.elm); + } }; return self; }; From 329a0c44fc34db2003d2089167bc8c20466f19b1 Mon Sep 17 00:00:00 2001 From: Xaver Maierhofer Date: Mon, 4 Sep 2017 21:54:39 +0200 Subject: [PATCH 018/119] [TASK] Update map attribution --- config.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/config.json b/config.json index c645126..314c6b4 100644 --- a/config.json +++ b/config.json @@ -32,9 +32,9 @@ // Please ask Freifunk Regensburg before using its tile server c- example with retina tiles "url": "https://{s}.tiles.ffrgb.net/{z}/{x}/{y}{retina}.png", "config": { - "maxZoom": 22, + "maxZoom": 20, "subdomains": "1234", - "attribution": "© Mapbox © OpenStreetMap Improve this map", + "attribution": "© OpenMapTiles © OpenStreetMap contributors", "start": 6 } }, @@ -43,9 +43,9 @@ // Please ask Freifunk Regensburg before using its tile server - example with retina and dark tiles "url": "https://{s}.tiles.ffrgb.net/n/{z}/{x}/{y}{retina}.png", "config": { - "maxZoom": 22, + "maxZoom": 20, "subdomains": "1234", - "attribution": "© Mapbox © OpenStreetMap Improve this map", + "attribution": " © OpenMapTiles © OpenStreetMap contributors", "mode": "night", "start": 19, "end": 7 From f9892e5401720b0e5f90e2ce81ac4d2d82cac97d Mon Sep 17 00:00:00 2001 From: Xaver Maierhofer Date: Mon, 4 Sep 2017 22:21:16 +0200 Subject: [PATCH 019/119] [TASK] Upgrade dependencies --- package.json | 10 +- yarn.lock | 446 ++++++++++++++++++++++++++++----------------------- 2 files changed, 252 insertions(+), 204 deletions(-) diff --git a/package.json b/package.json index b410ab3..d792c60 100644 --- a/package.json +++ b/package.json @@ -11,10 +11,10 @@ "devDependencies": { "babel-eslint": "^7.2.3", "browser-sync": "^2.18.12", - "eslint": "^4.4.1", + "eslint": "^4.6.1", "eslint-config-airbnb-es5": "^1.1.0", "eslint-config-defaults": "^9.0.0", - "eslint-plugin-react": "^7.2.1", + "eslint-plugin-react": "^7.3.0", "gulp": "github:gulpjs/gulp#4.0", "gulp-autoprefixer": "^4.0.0", "gulp-cache-bust": "^1.1.0", @@ -29,8 +29,8 @@ "gulp-real-favicon": "^0.2.2", "gulp-requirejs-optimize": "^1.2.0", "gulp-sass": "^3.1.0", - "gulp-sass-lint": "^1.3.2", - "gulp-sourcemaps": "^2.6.0", + "gulp-sass-lint": "^1.3.3", + "gulp-sourcemaps": "^2.6.1", "gulp-uglify": "^3.0.0" }, "eslintConfig": { @@ -53,7 +53,7 @@ "node-polyglot": "^2.2.2", "promise-polyfill": "^6.0.2", "rbush": "^2.0.1", - "requirejs": "^2.3.2", + "requirejs": "^2.3.5", "snabbdom": "^0.7.0" } } diff --git a/yarn.lock b/yarn.lock index 778df9d..37d7840 100644 --- a/yarn.lock +++ b/yarn.lock @@ -23,13 +23,20 @@ abbrev@1: version "1.1.0" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.0.tgz#d0554c2256636e2f56e7c2e5ad183f859428d81f" -accepts@1.3.3, accepts@~1.3.3: +accepts@1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.3.tgz#c3ca7434938648c3e0d9c1e328dd68b622c284ca" dependencies: mime-types "~2.1.11" negotiator "0.6.1" +accepts@~1.3.3: + version "1.3.4" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.4.tgz#86246758c7dd6d21a6474ff084a4740ec05eb21f" + dependencies: + mime-types "~2.1.16" + negotiator "0.6.1" + acorn-jsx@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b" @@ -45,8 +52,8 @@ acorn@^3.0.4: resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" acorn@^5.0.3, acorn@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.1.1.tgz#53fe161111f912ab999ee887a90a0bc52822fd75" + version "5.1.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.1.2.tgz#911cb53e036807cf0fa778dc5d370fbd864246d7" after@0.8.1: version "0.8.1" @@ -191,10 +198,10 @@ array-initial@^1.0.0: is-number "^3.0.0" array-last@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/array-last/-/array-last-1.1.1.tgz#f4658f988d921326b58ad0113cf76d337c7b20aa" + version "1.2.0" + resolved "https://registry.yarnpkg.com/array-last/-/array-last-1.2.0.tgz#0884a67ec2ac2a08133fc00f66779cfedb010986" dependencies: - is-number "^0.1.1" + is-number "^3.0.0" array-slice@^1.0.0: version "1.0.0" @@ -222,6 +229,10 @@ arrify@^1.0.0, arrify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" +asap@~2.0.3: + version "2.0.6" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + asn1@~0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" @@ -280,14 +291,14 @@ atob@~1.1.0: resolved "https://registry.yarnpkg.com/atob/-/atob-1.1.3.tgz#95f13629b12c3a51a5d215abdce2aa9f32f80773" autoprefixer@^7.0.0: - version "7.1.2" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-7.1.2.tgz#fbeaf07d48fd878e0682bf7cbeeade728adb2b18" + version "7.1.3" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-7.1.3.tgz#0e8d337976d6f13644db9f8813b4c42f3d1ccc34" dependencies: - browserslist "^2.1.5" - caniuse-lite "^1.0.30000697" + browserslist "^2.4.0" + caniuse-lite "^1.0.30000718" normalize-range "^0.1.2" num2fraction "^1.2.2" - postcss "^6.0.6" + postcss "^6.0.10" postcss-value-parser "^3.2.3" aws-sign2@~0.6.0: @@ -298,13 +309,13 @@ aws4@^1.2.1: version "1.6.0" resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" -babel-code-frame@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.22.0.tgz#027620bee567a88c32561574e7fd0801d33118e4" +babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" dependencies: - chalk "^1.1.0" + chalk "^1.1.3" esutils "^2.0.2" - js-tokens "^3.0.0" + js-tokens "^3.0.2" babel-eslint@^7.2.3: version "7.2.3" @@ -321,39 +332,39 @@ babel-messages@^6.23.0: dependencies: babel-runtime "^6.22.0" -babel-runtime@^6.22.0: - version "6.25.0" - resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.25.0.tgz#33b98eaa5d482bb01a8d1aa6b437ad2b01aec41c" +babel-runtime@^6.22.0, babel-runtime@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" dependencies: core-js "^2.4.0" - regenerator-runtime "^0.10.0" + regenerator-runtime "^0.11.0" babel-traverse@^6.23.1: - version "6.25.0" - resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.25.0.tgz#2257497e2fcd19b89edc13c4c91381f9512496f1" + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" dependencies: - babel-code-frame "^6.22.0" + babel-code-frame "^6.26.0" babel-messages "^6.23.0" - babel-runtime "^6.22.0" - babel-types "^6.25.0" - babylon "^6.17.2" - debug "^2.2.0" - globals "^9.0.0" - invariant "^2.2.0" - lodash "^4.2.0" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + debug "^2.6.8" + globals "^9.18.0" + invariant "^2.2.2" + lodash "^4.17.4" -babel-types@^6.23.0, babel-types@^6.25.0: - version "6.25.0" - resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.25.0.tgz#70afb248d5660e5d18f811d91c8303b54134a18e" +babel-types@^6.23.0, babel-types@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" dependencies: - babel-runtime "^6.22.0" + babel-runtime "^6.26.0" esutils "^2.0.2" - lodash "^4.2.0" - to-fast-properties "^1.0.1" + lodash "^4.17.4" + to-fast-properties "^1.0.3" -babylon@^6.17.0, babylon@^6.17.2: - version "6.17.4" - resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.17.4.tgz#3e8b7402b88d22c3423e137a1577883b15ff869a" +babylon@^6.17.0, babylon@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" bach@^1.0.0: version "1.2.0" @@ -500,11 +511,11 @@ browser-sync@^2.18.12: ua-parser-js "0.7.12" yargs "6.4.0" -browserslist@^2.1.5: - version "2.3.3" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.3.3.tgz#2b0cabc4d28489f682598605858a0782f14b154c" +browserslist@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.4.0.tgz#693ee93d01e66468a6348da5498e011f578f87f8" dependencies: - caniuse-lite "^1.0.30000715" + caniuse-lite "^1.0.30000718" electron-to-chromium "^1.3.18" bs-recipes@1.3.4: @@ -572,9 +583,9 @@ camelcase@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" -caniuse-lite@^1.0.30000697, caniuse-lite@^1.0.30000715: - version "1.0.30000715" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000715.tgz#c327f5e6d907ebcec62cde598c3bf0dd793fb9a0" +caniuse-lite@^1.0.30000718: + version "1.0.30000723" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000723.tgz#f9db1e2868caf097b00265ac2e71ba44b608fb1e" caseless@~0.12.0: version "0.12.0" @@ -665,8 +676,8 @@ clap@^1.0.9: chalk "^1.1.3" clean-css@4.1.x: - version "4.1.7" - resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.1.7.tgz#b9aea4f85679889cf3eae8b40349ec4ebdfdd032" + version "4.1.8" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.1.8.tgz#061455b2494a750ac98f46d8d5ebb17c679ea9d1" dependencies: source-map "0.5.x" @@ -683,8 +694,8 @@ cli-cursor@^2.1.0: restore-cursor "^2.0.0" cli-width@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.1.0.tgz#b234ca209b29ef66fc518d9b98d5847b00edf00a" + version "2.2.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" cliui@^3.0.3, cliui@^3.2.0: version "3.2.0" @@ -816,9 +827,13 @@ copy-props@^1.4.1: each-props "^1.2.1" is-plain-object "^2.0.1" +core-js@^1.0.0: + version "1.2.7" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" + core-js@^2.4.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.0.tgz#569c050918be6486b3837552028ae0466b717086" + version "2.5.1" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.1.tgz#ae6874dc66937789b80754ff5428df66819ca50b" core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" @@ -956,8 +971,8 @@ d3-selection@1, d3-selection@^1.1.0: resolved "https://registry.yarnpkg.com/d3-selection/-/d3-selection-1.1.0.tgz#1998684896488f839ca0372123da34f1d318809c" d3-timer@1: - version "1.0.6" - resolved "https://registry.yarnpkg.com/d3-timer/-/d3-timer-1.0.6.tgz#4044bf15d7025c06ce7d1149f73cd07b54dbd784" + version "1.0.7" + resolved "https://registry.yarnpkg.com/d3-timer/-/d3-timer-1.0.7.tgz#df9650ca587f6c96607ff4e60cc38229e8dd8531" d3-transition@1: version "1.1.0" @@ -1003,7 +1018,7 @@ dateformat@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-2.0.0.tgz#2743e3abb5c3fc2462e527dca445e04e9f4dee17" -debug-fabulous@0.1.X: +debug-fabulous@>=0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/debug-fabulous/-/debug-fabulous-0.1.1.tgz#1b970878c9fa4fbd1c88306eab323c830c58f1d6" dependencies: @@ -1216,8 +1231,8 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" electron-to-chromium@^1.3.18: - version "1.3.18" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.18.tgz#3dcc99da3e6b665f6abbc71c28ad51a2cd731a9c" + version "1.3.20" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.20.tgz#2eedd5ccbae7ddc557f68ad1fce9c172e915e4e5" emitter-steward@^1.0.0: version "1.0.0" @@ -1227,6 +1242,12 @@ encodeurl@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.1.tgz#79e3d58655346909fe6f0f45a5de68103b294d20" +encoding@^0.1.11: + version "0.1.12" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" + dependencies: + iconv-lite "~0.4.13" + end-of-stream@^1.0.0, end-of-stream@^1.1.0: version "1.4.0" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.0.tgz#7a90d833efda6cfa6eac0f4949dbb0fad3a63206" @@ -1287,11 +1308,11 @@ error-ex@^1.2.0: is-arrayish "^0.2.1" es-abstract@^1.5.0, es-abstract@^1.7.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.8.0.tgz#3b00385e85729932beffa9163bbea1234e932914" + version "1.8.2" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.8.2.tgz#25103263dc4decbda60e0c737ca32313518027ee" dependencies: es-to-primitive "^1.1.1" - function-bind "^1.1.0" + function-bind "^1.1.1" has "^1.0.1" is-callable "^1.1.3" is-regex "^1.0.4" @@ -1304,9 +1325,9 @@ es-to-primitive@^1.1.1: is-date-object "^1.0.1" is-symbol "^1.0.1" -es5-ext@^0.10.13, es5-ext@^0.10.14, es5-ext@^0.10.9, es5-ext@~0.10.14, es5-ext@~0.10.2: - version "0.10.27" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.27.tgz#bf926b058c62b1cb5de1a887930673b6aa6d9a66" +es5-ext@^0.10.14, es5-ext@^0.10.30, es5-ext@^0.10.9, es5-ext@~0.10.14, es5-ext@~0.10.2: + version "0.10.30" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.30.tgz#7141a16836697dbabfaaaeee41495ce29f52c939" dependencies: es6-iterator "2" es6-symbol "~3.1" @@ -1347,7 +1368,7 @@ es6-symbol@3.1.1, es6-symbol@^3.1, es6-symbol@^3.1.1, es6-symbol@~3.1, es6-symbo d "1" es5-ext "~0.10.14" -es6-weak-map@^2.0.1: +es6-weak-map@^2.0.1, es6-weak-map@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.2.tgz#5e3ab32251ffd1538a1f8e5ffa1357772f92d96f" dependencies: @@ -1383,13 +1404,14 @@ eslint-config-defaults@^9.0.0: version "9.0.0" resolved "https://registry.yarnpkg.com/eslint-config-defaults/-/eslint-config-defaults-9.0.0.tgz#a090adc13b2935e3f43b3cd048a92701654e5ad5" -eslint-plugin-react@^7.2.1: - version "7.2.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.2.1.tgz#c2673526ed6571b08c69c5f453d03f5f13e8ddbe" +eslint-plugin-react@^7.3.0: + version "7.3.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.3.0.tgz#ca9368da36f733fbdc05718ae4e91f778f38e344" dependencies: doctrine "^2.0.0" has "^1.0.1" jsx-ast-utils "^2.0.0" + prop-types "^15.5.10" eslint-scope@^3.7.1: version "3.7.1" @@ -1436,13 +1458,13 @@ eslint@^2.7.0: text-table "~0.2.0" user-home "^2.0.0" -eslint@^4.0.0, eslint@^4.4.1: - version "4.4.1" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.4.1.tgz#99cd7eafcffca2ff99a5c8f5f2a474d6364b4bd3" +eslint@^4.0.0, eslint@^4.6.1: + version "4.6.1" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.6.1.tgz#ddc7fc7fd70bf93205b0b3449bb16a1e9e7d4950" dependencies: ajv "^5.2.0" babel-code-frame "^6.22.0" - chalk "^1.1.3" + chalk "^2.1.0" concat-stream "^1.6.0" cross-spawn "^5.1.0" debug "^2.6.8" @@ -1473,6 +1495,7 @@ eslint@^4.0.0, eslint@^4.4.1: progress "^2.0.0" require-uncached "^1.0.3" semver "^5.3.0" + strip-ansi "^4.0.0" strip-json-comments "~2.0.1" table "^4.0.1" text-table "~0.2.0" @@ -1517,7 +1540,7 @@ etag@^1.7.0, etag@~1.8.0: version "1.8.0" resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.0.tgz#6f631aef336d6c46362b51764044ce216be3c051" -event-emitter@^0.3.4, event-emitter@~0.3.5: +event-emitter@^0.3.5, event-emitter@~0.3.5: version "0.3.5" resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" dependencies: @@ -1620,6 +1643,18 @@ fast-levenshtein@~2.0.4: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" +fbjs@^0.8.9: + version "0.8.14" + resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.14.tgz#d1dbe2be254c35a91e09f31f9cd50a40b2a0ed1c" + dependencies: + core-js "^1.0.0" + isomorphic-fetch "^2.1.1" + loose-envify "^1.0.0" + object-assign "^4.1.0" + promise "^7.1.1" + setimmediate "^1.0.5" + ua-parser-js "^0.7.9" + figures@^1.3.5: version "1.7.0" resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" @@ -1778,9 +1813,9 @@ from@~0: version "0.1.7" resolved "https://registry.yarnpkg.com/from/-/from-0.1.7.tgz#83c60afc58b9c56997007ed1a768b3ab303a44fe" -front-matter@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/front-matter/-/front-matter-2.1.0.tgz#0bdff42cbad2b35c07ac7085811789759f9858c0" +front-matter@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/front-matter/-/front-matter-2.1.2.tgz#f75983b9f2f413be658c93dfd7bd8ce4078f5cdb" dependencies: js-yaml "^3.4.6" @@ -1788,7 +1823,7 @@ fs-exists-sync@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz#982d6893af918e72d08dec9e8673ff2b5a8d6add" -fs-extra@3.0.1: +fs-extra@3.0.1, fs-extra@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-3.0.1.tgz#3794f378c58b342ea7dbbb23095109c4b3b62291" dependencies: @@ -1796,14 +1831,6 @@ fs-extra@3.0.1: jsonfile "^3.0.0" universalify "^0.1.0" -fs-extra@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-1.0.0.tgz#cd3ce5f7e7cb6145883fcae3191e9877f8587950" - dependencies: - graceful-fs "^4.1.2" - jsonfile "^2.1.0" - klaw "^1.0.0" - fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" @@ -1841,9 +1868,9 @@ fstream@~0.1.21: mkdirp "0.5" rimraf "2" -function-bind@^1.0.2, function-bind@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.0.tgz#16176714c801798e4e8f2cf7f7529467bb4a5771" +function-bind@^1.0.2, function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" functional-red-black-tree@^1.0.1: version "1.0.1" @@ -1975,7 +2002,7 @@ global-prefix@^0.1.4: is-windows "^0.2.0" which "^1.2.12" -globals@^9.0.0, globals@^9.17.0, globals@^9.2.0: +globals@^9.17.0, globals@^9.18.0, globals@^9.2.0: version "9.18.0" resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" @@ -2004,9 +2031,9 @@ glogg@^1.0.0: dependencies: sparkles "^1.0.0" -gonzales-pe@3.4.7: - version "3.4.7" - resolved "https://registry.yarnpkg.com/gonzales-pe/-/gonzales-pe-3.4.7.tgz#17c7be67ad6caff6277a3e387ac736e983d280ec" +gonzales-pe@^4.1.1: + version "4.2.2" + resolved "https://registry.yarnpkg.com/gonzales-pe/-/gonzales-pe-4.2.2.tgz#f50a8c17842f13a9007909b7cb32188266e4d74c" dependencies: minimist "1.1.x" @@ -2173,13 +2200,13 @@ gulp-requirejs-optimize@^1.2.0: through2 "^2.0.1" vinyl-sourcemaps-apply "^0.2.1" -gulp-sass-lint@^1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/gulp-sass-lint/-/gulp-sass-lint-1.3.2.tgz#642094c5fe9b9196872f33a0d1f75ccf51cb8361" +gulp-sass-lint@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/gulp-sass-lint/-/gulp-sass-lint-1.3.3.tgz#f879d423e517a2872a8902466c0dec8146dc7874" dependencies: gulp-util "^3.0.6" - sass-lint "^1.10.2" - through2 "^2.0.0" + sass-lint "^1.11.0" + through2 "^2.0.2" gulp-sass@^3.1.0: version "3.1.0" @@ -2201,16 +2228,16 @@ gulp-sourcemaps@1.6.0: through2 "^2.0.0" vinyl "^1.0.0" -gulp-sourcemaps@^2.6.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/gulp-sourcemaps/-/gulp-sourcemaps-2.6.0.tgz#7ccce899a8a3bfca1593a3348d0fbf41dd3f51e5" +gulp-sourcemaps@^2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/gulp-sourcemaps/-/gulp-sourcemaps-2.6.1.tgz#833a4e28f0b8f4661075032cd782417f7cd8fb0b" dependencies: "@gulp-sourcemaps/identity-map" "1.X" "@gulp-sourcemaps/map-sources" "1.X" acorn "4.X" convert-source-map "1.X" css "2.X" - debug-fabulous "0.1.X" + debug-fabulous ">=0.1.1" detect-newline "2.X" graceful-fs "4.X" source-map "0.X" @@ -2437,13 +2464,13 @@ http-signature@~1.1.0: jsprim "^1.2.2" sshpk "^1.7.0" -iconv-lite@^0.4.17: +iconv-lite@^0.4.17, iconv-lite@~0.4.13: version "0.4.18" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.18.tgz#23d8656b16aae6742ac29732ea8f0336a4789cf2" ignore@^3.1.2, ignore@^3.3.3: - version "3.3.3" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.3.tgz#432352e57accd87ab3110e82d3fea0e47812156d" + version "3.3.5" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.5.tgz#c4e715455f6073a8d7e5dae72d2fc9d71663dba6" immutable@3.8.1, immutable@^3.7.6: version "3.8.1" @@ -2516,8 +2543,8 @@ inquirer@^0.12.0: through "^2.3.6" inquirer@^3.0.6: - version "3.2.1" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.2.1.tgz#06ceb0f540f45ca548c17d6840959878265fa175" + version "3.2.3" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.2.3.tgz#1c7b1731cf77b934ec47d22c9ac5aa8fe7fbe095" dependencies: ansi-escapes "^2.0.0" chalk "^2.0.0" @@ -2538,7 +2565,7 @@ interpret@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.3.tgz#cbc35c62eeee73f19ab7b10a801511401afc0f90" -invariant@^2.2.0: +invariant@^2.2.2: version "2.2.2" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360" dependencies: @@ -2638,8 +2665,8 @@ is-glob@^3.1.0: is-extglob "^2.1.0" is-my-json-valid@^2.10.0: - version "2.16.0" - resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.16.0.tgz#f079dd9bfdae65ee2038aae8acbc86ab109e3693" + version "2.16.1" + resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.16.1.tgz#5a846777e2c2620d1e69104e5d3a03b1f6088f11" dependencies: generate-function "^2.0.0" generate-object-property "^1.1.0" @@ -2652,10 +2679,6 @@ is-number-like@^1.0.3: dependencies: lodash.isfinite "^3.3.2" -is-number@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-0.1.1.tgz#69a7af116963d47206ec9bd9b48a14216f1e3806" - is-number@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" @@ -2770,7 +2793,7 @@ isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" -isobject@^2.0.0, isobject@^2.1.0: +isobject@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" dependencies: @@ -2780,6 +2803,13 @@ isobject@^3.0.0, isobject@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" +isomorphic-fetch@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" + dependencies: + node-fetch "^1.0.1" + whatwg-fetch ">=0.10.0" + isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" @@ -2788,7 +2818,7 @@ js-base64@^2.1.8: version "2.1.9" resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.1.9.tgz#f0e80ae039a4bd654b5f281fc93f04a914a7fcce" -js-tokens@^3.0.0: +js-tokens@^3.0.0, js-tokens@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" @@ -2836,12 +2866,6 @@ json3@3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" -jsonfile@^2.1.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" - optionalDependencies: - graceful-fs "^4.1.6" - jsonfile@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-3.0.1.tgz#a5ecc6f65f53f662c4415c7675a0331d0992ec66" @@ -2870,8 +2894,8 @@ jsprim@^1.2.2: verror "1.10.0" jsx-ast-utils@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.0.0.tgz#ec06a3d60cf307e5e119dac7bad81e89f096f0f8" + version "2.0.1" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz#e801b1b39985e20fffc87b40e3748080e2dcac7f" dependencies: array-includes "^3.0.3" @@ -2887,11 +2911,9 @@ kind-of@^4.0.0: dependencies: is-buffer "^1.1.5" -klaw@^1.0.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" - optionalDependencies: - graceful-fs "^4.1.9" +known-css-properties@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/known-css-properties/-/known-css-properties-0.3.0.tgz#a3d135bbfc60ee8c6eacf2f7e7e6f2d4755e49a4" last-run@^1.1.0: version "1.1.1" @@ -3147,11 +3169,11 @@ lodash@^3.10.1, lodash@^3.2.0: version "3.10.1" resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" -lodash@^4.0.0, lodash@^4.13.1, lodash@^4.14.0, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.3.0, lodash@~4.17.4: +lodash@^4.0.0, lodash@^4.13.1, lodash@^4.14.0, lodash@^4.17.4, lodash@^4.3.0, lodash@~4.17.4: version "4.17.4" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" -loose-envify@^1.0.0: +loose-envify@^1.0.0, loose-envify@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" dependencies: @@ -3234,17 +3256,17 @@ md5@^2.0.0: is-buffer "~1.1.1" memoizee@^0.4.5: - version "0.4.5" - resolved "https://registry.yarnpkg.com/memoizee/-/memoizee-0.4.5.tgz#1bc3ea1e4be056dd475d521979d7be3d5e5b21c8" + version "0.4.9" + resolved "https://registry.yarnpkg.com/memoizee/-/memoizee-0.4.9.tgz#ea1c005f5c4c31d89a4a10e24db83fbf61cdd4f3" dependencies: d "1" - es5-ext "^0.10.13" - es6-weak-map "^2.0.1" - event-emitter "^0.3.4" + es5-ext "^0.10.30" + es6-weak-map "^2.0.2" + event-emitter "^0.3.5" is-promise "^2.1" lru-queue "0.1" next-tick "1" - timers-ext "0.1" + timers-ext "^0.1.2" meow@^3.3.0, meow@^3.7.0: version "3.7.0" @@ -3298,15 +3320,15 @@ micromatch@2.3.11, micromatch@^2.1.5, micromatch@^2.3.7, micromatch@^2.3.8: parse-glob "^3.0.4" regex-cache "^0.4.2" -mime-db@~1.29.0: - version "1.29.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.29.0.tgz#48d26d235589651704ac5916ca06001914266878" +mime-db@~1.30.0: + version "1.30.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.30.0.tgz#74c643da2dd9d6a45399963465b26d5ca7d71f01" -mime-types@^2.1.12, mime-types@~2.1.11, mime-types@~2.1.7: - version "2.1.16" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.16.tgz#2b858a52e5ecd516db897ac2be87487830698e23" +mime-types@^2.1.12, mime-types@~2.1.11, mime-types@~2.1.16, mime-types@~2.1.7: + version "2.1.17" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.17.tgz#09d7a393f03e995a79f8af857b70a9e0ab16557a" dependencies: - mime-db "~1.29.0" + mime-db "~1.30.0" mime@1.2.4: version "1.2.4" @@ -3317,8 +3339,8 @@ mime@1.3.4: resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53" "mime@>= 0.0.1": - version "1.3.6" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.6.tgz#591d84d3653a6b0b4a3b9df8de5aa8108e72e5e0" + version "1.4.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.0.tgz#69e9e0db51d44f2a3b56e48b7817d7d137f1a343" mimic-fn@^1.0.0: version "1.1.0" @@ -3395,8 +3417,8 @@ mute-stream@0.0.7: resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" nan@^2.3.0, nan@^2.3.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.6.2.tgz#e4ff34e6c95fdfb5aecc08de6596f43605a7db45" + version "2.7.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.7.0.tgz#d95bf721ec877e08db276ed3fc6eb78f9083ad46" natives@^1.1.0: version "1.1.0" @@ -3430,6 +3452,13 @@ no-case@^2.2.0: dependencies: lower-case "^1.1.1" +node-fetch@^1.0.1: + version "1.7.2" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.2.tgz#c54e9aac57e432875233525f3c891c4159ffefd7" + dependencies: + encoding "^0.1.11" + is-stream "^1.0.1" + node-gyp@^3.3.1: version "3.6.2" resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.6.2.tgz#9bfbe54562286284838e750eac05295853fa1c60" @@ -3607,10 +3636,10 @@ object.omit@^2.0.0: is-extendable "^0.1.1" object.pick@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.2.0.tgz#b5392bee9782da6d9fb7d6afaf539779f1234c2b" + version "1.3.0" + resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" dependencies: - isobject "^2.1.0" + isobject "^3.0.1" object.reduce@^1.0.0: version "1.0.1" @@ -3837,12 +3866,12 @@ postcss-value-parser@^3.2.3: version "3.3.0" resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz#87f38f9f18f774a4ab4c8a232f5c5ce8872a9d15" -postcss@^6.0.1, postcss@^6.0.6: - version "6.0.9" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.9.tgz#54819766784a51c65b1ec4d54c2f93765438c35a" +postcss@^6.0.1, postcss@^6.0.10: + version "6.0.10" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.10.tgz#c311b89734483d87a91a56dc9e53f15f4e6e84e4" dependencies: chalk "^2.1.0" - source-map "^0.5.6" + source-map "^0.5.7" supports-color "^4.2.1" prelude-ls@~1.1.2: @@ -3873,6 +3902,19 @@ promise-polyfill@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/promise-polyfill/-/promise-polyfill-6.0.2.tgz#d9c86d3dc4dc2df9016e88946defd69b49b41162" +promise@^7.1.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" + dependencies: + asap "~2.0.3" + +prop-types@^15.5.10: + version "15.5.10" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.5.10.tgz#2797dfc3126182e3a95e3dfbb2e893ddd7456154" + dependencies: + fbjs "^0.8.9" + loose-envify "^1.3.1" + pseudomap@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" @@ -4035,24 +4077,23 @@ redent@^1.0.0: indent-string "^2.1.0" strip-indent "^1.0.1" -regenerator-runtime@^0.10.0: - version "0.10.5" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658" +regenerator-runtime@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz#7e54fe5b5ccd5d6624ea6255c3473be090b802e1" regex-cache@^0.4.2: - version "0.4.3" - resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.3.tgz#9b1a6c35d4d0dfcef5711ae651e8e9d3d7114145" + version "0.4.4" + resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" dependencies: is-equal-shallow "^0.1.3" - is-primitive "^2.0.0" relateurl@0.2.x: version "0.2.7" resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" remove-trailing-separator@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.0.2.tgz#69b062d978727ad14dc6b56ba4ab772fd8d70511" + version "1.1.0" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" repeat-element@^1.1.2: version "1.1.2" @@ -4114,9 +4155,9 @@ require-uncached@^1.0.2, require-uncached@^1.0.3: caller-path "^0.1.0" resolve-from "^1.0.0" -requirejs@^2.2.0, requirejs@^2.3.2: - version "2.3.4" - resolved "https://registry.yarnpkg.com/requirejs/-/requirejs-2.3.4.tgz#f45c48e66ebf0f163da57f6e0cf40fd57996ef50" +requirejs@^2.2.0, requirejs@^2.3.5: + version "2.3.5" + resolved "https://registry.yarnpkg.com/requirejs/-/requirejs-2.3.5.tgz#617b9acbbcb336540ef4914d790323a8d4b861b0" requires-port@1.x.x: version "1.0.0" @@ -4227,18 +4268,19 @@ sass-graph@^2.1.1: scss-tokenizer "^0.2.3" yargs "^7.0.0" -sass-lint@^1.10.2: - version "1.10.2" - resolved "https://registry.yarnpkg.com/sass-lint/-/sass-lint-1.10.2.tgz#825bd6b0da79ddd36a42ffae5b6d44ac4922502b" +sass-lint@^1.11.0: + version "1.11.1" + resolved "https://registry.yarnpkg.com/sass-lint/-/sass-lint-1.11.1.tgz#1ccea9be01e60fd0ca7ddf379a0096311b218240" dependencies: commander "^2.8.1" eslint "^2.7.0" - front-matter "2.1.0" - fs-extra "^1.0.0" + front-matter "2.1.2" + fs-extra "^3.0.1" glob "^7.0.0" globule "^1.0.0" - gonzales-pe "3.4.7" + gonzales-pe "^4.1.1" js-yaml "^3.5.4" + known-css-properties "^0.3.0" lodash.capitalize "^4.1.0" lodash.kebabcase "^4.0.0" merge "^1.2.0" @@ -4257,24 +4299,15 @@ scss-tokenizer@^0.2.3: source-map "^0.4.2" semver-greatest-satisfied-range@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-1.0.0.tgz#4fb441e2a8d26c40b598327557318de272a558a0" + version "1.1.0" + resolved "https://registry.yarnpkg.com/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-1.1.0.tgz#13e8c2658ab9691cb0cd71093240280d36f77a5b" dependencies: - semver "^4.2.0" - semver-regex "^1.0.0" - -semver-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/semver-regex/-/semver-regex-1.0.0.tgz#92a4969065f9c70c694753d55248fc68f8f652c9" + sver-compat "^1.5.0" "semver@2 || 3 || 4 || 5", semver@^5.3.0: version "5.4.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e" -semver@^4.2.0: - version "4.3.6" - resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.6.tgz#300bc6e0e86374f7ba61068b5b1ecd57fc6532da" - semver@~5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" @@ -4339,7 +4372,7 @@ set-value@^0.4.3: is-plain-object "^2.0.1" to-object-path "^0.3.0" -"setimmediate@>= 1.0.2 < 2", setimmediate@~1.0.1: +"setimmediate@>= 1.0.2 < 2", setimmediate@^1.0.5, setimmediate@~1.0.1: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" @@ -4446,9 +4479,9 @@ source-map-url@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.3.0.tgz#7ecaf13b57bcd09da8a40c5d269db33799d4aaf9" -source-map@0.5.x, source-map@0.X, source-map@^0.5.1, source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.1: - version "0.5.6" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" +source-map@0.5.x, source-map@0.X, source-map@^0.5.1, source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.1: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" source-map@^0.1.38: version "0.1.43" @@ -4531,8 +4564,8 @@ stream-combiner@~0.0.4: duplexer "~0.1.1" stream-exhaust@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/stream-exhaust/-/stream-exhaust-1.0.1.tgz#c0c4455e54ce5a179ca8736e73334b4e7fd67553" + version "1.0.2" + resolved "https://registry.yarnpkg.com/stream-exhaust/-/stream-exhaust-1.0.2.tgz#acdac8da59ef2bc1e17a2c0ccf6c320d120e555d" stream-shift@^1.0.0: version "1.0.0" @@ -4640,11 +4673,18 @@ supports-color@^2.0.0: resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" supports-color@^4.0.0, supports-color@^4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.2.1.tgz#65a4bb2631e90e02420dba5554c375a4754bb836" + version "4.4.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.4.0.tgz#883f7ddabc165142b2a61427f3352ded195d1a3e" dependencies: has-flag "^2.0.0" +sver-compat@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/sver-compat/-/sver-compat-1.5.0.tgz#3cf87dfeb4d07b4a3f14827bc186b3fd0c645cd8" + dependencies: + es6-iterator "^2.0.1" + es6-symbol "^3.1.1" + svgo@0.7.2: version "0.7.2" resolved "https://registry.yarnpkg.com/svgo/-/svgo-0.7.2.tgz#9f5772413952135c6fefbf40afe6a4faa88b4bb5" @@ -4745,7 +4785,7 @@ through2@2.0.1: readable-stream "~2.0.0" xtend "~4.0.0" -through2@2.X, through2@^2.0.0, through2@^2.0.1, through2@^2.0.3, through2@~2.0.0: +through2@2.X, through2@^2.0.0, through2@^2.0.1, through2@^2.0.2, through2@^2.0.3, through2@~2.0.0: version "2.0.3" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be" dependencies: @@ -4773,7 +4813,7 @@ time-stamp@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.1.0.tgz#764a5a11af50561921b133f3b44e618687e0f5c3" -timers-ext@0.1: +timers-ext@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/timers-ext/-/timers-ext-0.1.2.tgz#61cc47a76c1abd3195f14527f978d58ae94c5204" dependencies: @@ -4796,7 +4836,7 @@ to-array@0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/to-array/-/to-array-0.1.4.tgz#17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890" -to-fast-properties@^1.0.1: +to-fast-properties@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" @@ -4848,9 +4888,13 @@ ua-parser-js@0.7.12: version "0.7.12" resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.12.tgz#04c81a99bdd5dc52263ea29d24c6bf8d4818a4bb" +ua-parser-js@^0.7.9: + version "0.7.14" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.14.tgz#110d53fa4c3f326c121292bbeac904d2e03387ca" + uglify-js@3.0.x, uglify-js@^3.0.5: - version "3.0.27" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.0.27.tgz#a97db8c8ba6b9dba4e2f88d86aa9548fa6320034" + version "3.0.28" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.0.28.tgz#96b8495f0272944787b5843a1679aa326640d5f7" dependencies: commander "~2.11.0" source-map "~0.5.1" @@ -5051,6 +5095,10 @@ weinre@^2.0.0-pre-I0Z7U9OV: nopt "3.0.x" underscore "1.7.x" +whatwg-fetch@>=0.10.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz#9c84ec2dcf68187ff00bc64e1274b442176e1c84" + whet.extend@~0.9.9: version "0.9.9" resolved "https://registry.yarnpkg.com/whet.extend/-/whet.extend-0.9.9.tgz#f877d5bf648c97e5aa542fadc16d6a259b9c11a1" @@ -5123,15 +5171,15 @@ xml-char-classes@^1.0.0: resolved "https://registry.yarnpkg.com/xml-char-classes/-/xml-char-classes-1.0.0.tgz#64657848a20ffc5df583a42ad8a277b4512bbc4d" xml2js@>=0.2.4: - version "0.4.18" - resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.18.tgz#a117ec8153aeeb22f9541bfbe8805e35dae7b969" + version "0.4.19" + resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.19.tgz#686c20f213209e94abf0d1bcf1efaa291c7827a7" dependencies: sax ">=0.6.0" xmlbuilder "~9.0.1" xmlbuilder@~9.0.1: - version "9.0.3" - resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.3.tgz#2b975dd9f6c7ccac84bb5d316d948f72b06ffacf" + version "9.0.4" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.4.tgz#519cb4ca686d005a8420d3496f3f0caeecca580f" xmlhttprequest-ssl@1.5.3: version "1.5.3" From 9aff29a634f63f8afb6dec0221e0b24e42318a32 Mon Sep 17 00:00:00 2001 From: Xaver Maierhofer Date: Mon, 4 Sep 2017 23:04:05 +0200 Subject: [PATCH 020/119] [TASK] Replace Precise with Trusty in travis --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 3d2d7fe..943907e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,4 +1,5 @@ sudo: false +dist: trusty language: node_js From a5d4140bdae63fd73b1dd8ad23f9a8887f38b151 Mon Sep 17 00:00:00 2001 From: Moritz Warning Date: Tue, 5 Sep 2017 23:37:59 +0200 Subject: [PATCH 021/119] [BUGFIX] Show available firmware information --- lib/infobox/node.js | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/lib/infobox/node.js b/lib/infobox/node.js index 612f55e..a15b40a 100644 --- a/lib/infobox/node.js +++ b/lib/infobox/node.js @@ -27,14 +27,12 @@ define(['sorttable', 'snabbdom', 'd3-interpolate', 'moment', 'helper'], } function showFirmware(d) { - var release = helper.dictGet(d.nodeinfo, ['software', 'firmware', 'release']); - var base = helper.dictGet(d.nodeinfo, ['software', 'firmware', 'base']); - - if (release === null || base === null) { - return undefined; - } - - return release + ' / ' + base; + return [ + helper.dictGet(d.nodeinfo, ['software', 'firmware', 'release']), + helper.dictGet(d.nodeinfo, ['software', 'firmware', 'base']) + ].filter(function (n) { + return n !== null; + }).join(' / ') || undefined; } function showSite(d, config) { From e2a6200d7573e64b2ff4dd8789385e788b96ac8a Mon Sep 17 00:00:00 2001 From: Moritz Warning Date: Thu, 7 Sep 2017 22:07:59 +0200 Subject: [PATCH 022/119] [BUGFIX] Allow missing site --- lib/infobox/node.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/infobox/node.js b/lib/infobox/node.js index a15b40a..ce13df9 100644 --- a/lib/infobox/node.js +++ b/lib/infobox/node.js @@ -45,7 +45,7 @@ define(['sorttable', 'snabbdom', 'd3-interpolate', 'moment', 'helper'], } }); } - return rt; + return rt || undefined; } function showUptime(d) { From def55bad1577c98fdcbef6f72a48675d985c04fa Mon Sep 17 00:00:00 2001 From: Xaver Maierhofer Date: Mon, 18 Sep 2017 22:03:00 +0200 Subject: [PATCH 023/119] [TASK] Update gulp-sourcemap & eslint --- yarn.lock | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 62 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 37d7840..2368109 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1056,6 +1056,12 @@ debug@2.6.8, debug@^2.1.1, debug@^2.2.0, debug@^2.6.8: dependencies: ms "2.0.0" +debug@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.0.1.tgz#0564c612b521dc92d9f2988f0549e34f9c98db64" + dependencies: + ms "2.0.0" + decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" @@ -1458,7 +1464,7 @@ eslint@^2.7.0: text-table "~0.2.0" user-home "^2.0.0" -eslint@^4.0.0, eslint@^4.6.1: +eslint@^4.0.0: version "4.6.1" resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.6.1.tgz#ddc7fc7fd70bf93205b0b3449bb16a1e9e7d4950" dependencies: @@ -1500,6 +1506,48 @@ eslint@^4.0.0, eslint@^4.6.1: table "^4.0.1" text-table "~0.2.0" +eslint@^4.6.1: + version "4.7.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.7.0.tgz#d35fc07c472520be3de85b3da11e99c576afd515" + dependencies: + ajv "^5.2.0" + babel-code-frame "^6.22.0" + chalk "^2.1.0" + concat-stream "^1.6.0" + cross-spawn "^5.1.0" + debug "^3.0.1" + doctrine "^2.0.0" + eslint-scope "^3.7.1" + espree "^3.5.1" + esquery "^1.0.0" + estraverse "^4.2.0" + esutils "^2.0.2" + file-entry-cache "^2.0.0" + functional-red-black-tree "^1.0.1" + glob "^7.1.2" + globals "^9.17.0" + ignore "^3.3.3" + imurmurhash "^0.1.4" + inquirer "^3.0.6" + is-resolvable "^1.0.0" + js-yaml "^3.9.1" + json-stable-stringify "^1.0.1" + levn "^0.3.0" + lodash "^4.17.4" + minimatch "^3.0.2" + mkdirp "^0.5.1" + natural-compare "^1.4.0" + optionator "^0.8.2" + path-is-inside "^1.0.2" + pluralize "^7.0.0" + progress "^2.0.0" + require-uncached "^1.0.3" + semver "^5.3.0" + strip-ansi "^4.0.0" + strip-json-comments "~2.0.1" + table "^4.0.1" + text-table "~0.2.0" + espree@^3.1.6, espree@^3.5.0: version "3.5.0" resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.0.tgz#98358625bdd055861ea27e2867ea729faf463d8d" @@ -1507,6 +1555,13 @@ espree@^3.1.6, espree@^3.5.0: acorn "^5.1.1" acorn-jsx "^3.0.0" +espree@^3.5.1: + version "3.5.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.1.tgz#0c988b8ab46db53100a1954ae4ba995ddd27d87e" + dependencies: + acorn "^5.1.1" + acorn-jsx "^3.0.0" + esprima@^2.6.0: version "2.7.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" @@ -2136,8 +2191,8 @@ gulp-if@^2.0.1: through2 "^2.0.1" gulp-inject@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/gulp-inject/-/gulp-inject-4.2.0.tgz#5d6af52f24963aa0de22993dec846e1e792ab653" + version "4.3.0" + resolved "https://registry.yarnpkg.com/gulp-inject/-/gulp-inject-4.3.0.tgz#a67a5899a6c7ecf9c7c7f1ceb9f061f1c6f4b898" dependencies: arrify "^1.0.1" escape-string-regexp "^1.0.5" @@ -3855,6 +3910,10 @@ pluralize@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-4.0.0.tgz#59b708c1c0190a2f692f1c7618c446b052fd1762" +pluralize@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777" + portscanner@2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/portscanner/-/portscanner-2.1.1.tgz#eabb409e4de24950f5a2a516d35ae769343fbb96" From 93fb72788afb9b37d6eae5dc6b0f839ee3697739 Mon Sep 17 00:00:00 2001 From: Xaver Maierhofer Date: Sat, 14 Oct 2017 13:09:48 +0200 Subject: [PATCH 024/119] [TASK] Update german translation --- locale/de.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/locale/de.json b/locale/de.json index 53ddbb9..bd33558 100644 --- a/locale/de.json +++ b/locale/de.json @@ -23,7 +23,7 @@ "primaryMac": "Primäre MAC", "id": "Knoten ID", "firstSeen": "Erstmals gesehen", - "systemLoad": "Load average", + "systemLoad": "Systemlast", "ram": "Speicherauslastung", "ipAddresses": "IP Adressen", "selectedGateway": "Gewähltes Gateway", From f0789392b5568c1b69081da2d94a19891cae7ba4 Mon Sep 17 00:00:00 2001 From: Xaver Maierhofer Date: Sat, 14 Oct 2017 13:19:27 +0200 Subject: [PATCH 025/119] [TASK] Update js & scss linter --- yarn.lock | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/yarn.lock b/yarn.lock index 2368109..00c96c9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1411,8 +1411,8 @@ eslint-config-defaults@^9.0.0: resolved "https://registry.yarnpkg.com/eslint-config-defaults/-/eslint-config-defaults-9.0.0.tgz#a090adc13b2935e3f43b3cd048a92701654e5ad5" eslint-plugin-react@^7.3.0: - version "7.3.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.3.0.tgz#ca9368da36f733fbdc05718ae4e91f778f38e344" + version "7.4.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.4.0.tgz#300a95861b9729c087d362dd64abcc351a74364a" dependencies: doctrine "^2.0.0" has "^1.0.1" @@ -1507,8 +1507,8 @@ eslint@^4.0.0: text-table "~0.2.0" eslint@^4.6.1: - version "4.7.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.7.0.tgz#d35fc07c472520be3de85b3da11e99c576afd515" + version "4.8.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.8.0.tgz#229ef0e354e0e61d837c7a80fdfba825e199815e" dependencies: ajv "^5.2.0" babel-code-frame "^6.22.0" @@ -2256,11 +2256,11 @@ gulp-requirejs-optimize@^1.2.0: vinyl-sourcemaps-apply "^0.2.1" gulp-sass-lint@^1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/gulp-sass-lint/-/gulp-sass-lint-1.3.3.tgz#f879d423e517a2872a8902466c0dec8146dc7874" + version "1.3.4" + resolved "https://registry.yarnpkg.com/gulp-sass-lint/-/gulp-sass-lint-1.3.4.tgz#a9950c2dd050fd00fbf2ebc063016434a22100e2" dependencies: gulp-util "^3.0.6" - sass-lint "^1.11.0" + sass-lint "^1.12.0" through2 "^2.0.2" gulp-sass@^3.1.0: @@ -4327,9 +4327,9 @@ sass-graph@^2.1.1: scss-tokenizer "^0.2.3" yargs "^7.0.0" -sass-lint@^1.11.0: - version "1.11.1" - resolved "https://registry.yarnpkg.com/sass-lint/-/sass-lint-1.11.1.tgz#1ccea9be01e60fd0ca7ddf379a0096311b218240" +sass-lint@^1.12.0: + version "1.12.0" + resolved "https://registry.yarnpkg.com/sass-lint/-/sass-lint-1.12.0.tgz#299ec57cd158fb4afbe22cb322799cc630a3e33b" dependencies: commander "^2.8.1" eslint "^2.7.0" From cb0aa1317c9a121cfd48bdd6e13d168e149d6c71 Mon Sep 17 00:00:00 2001 From: Xaver Maierhofer Date: Sat, 14 Oct 2017 13:54:14 +0200 Subject: [PATCH 026/119] [TASK] Update navigo, d3 & moment.js --- yarn.lock | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/yarn.lock b/yarn.lock index 00c96c9..84d6abd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -936,20 +936,27 @@ d3-dispatch@1: version "1.0.3" resolved "https://registry.yarnpkg.com/d3-dispatch/-/d3-dispatch-1.0.3.tgz#46e1491eaa9b58c358fce5be4e8bed626e7871f8" -d3-drag@1, d3-drag@^1.1.1: +d3-drag@1: version "1.1.1" resolved "https://registry.yarnpkg.com/d3-drag/-/d3-drag-1.1.1.tgz#b5155304433b18ba38726b2184d0098e820dc64b" dependencies: d3-dispatch "1" d3-selection "1" +d3-drag@^1.1.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/d3-drag/-/d3-drag-1.2.1.tgz#df8dd4c502fb490fc7462046a8ad98a5c479282d" + dependencies: + d3-dispatch "1" + d3-selection "1" + d3-ease@1: version "1.0.3" resolved "https://registry.yarnpkg.com/d3-ease/-/d3-ease-1.0.3.tgz#68bfbc349338a380c44d8acc4fbc3304aa2d8c0e" d3-force@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/d3-force/-/d3-force-1.0.6.tgz#ea7e1b7730e2664cd314f594d6718c57cc132b79" + version "1.1.0" + resolved "https://registry.yarnpkg.com/d3-force/-/d3-force-1.1.0.tgz#cebf3c694f1078fcc3d4daf8e567b2fbd70d4ea3" dependencies: d3-collection "1" d3-dispatch "1" @@ -986,8 +993,8 @@ d3-transition@1: d3-timer "1" d3-zoom@^1.3.1: - version "1.5.0" - resolved "https://registry.yarnpkg.com/d3-zoom/-/d3-zoom-1.5.0.tgz#8417de9a077f98f9ce83b1998efb8ee12b4db26e" + version "1.6.0" + resolved "https://registry.yarnpkg.com/d3-zoom/-/d3-zoom-1.6.0.tgz#eb645b07fd0c37acc8b36b88476b781ed277b40e" dependencies: d3-dispatch "1" d3-drag "1" @@ -3430,8 +3437,8 @@ mkdirp@0.3.0: resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.3.0.tgz#1bbf5ab1ba827af23575143490426455f481fe1e" moment@^2.17.1: - version "2.18.1" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.18.1.tgz#c36193dd3ce1c2eed2adb7c802dbbc77a81b1c0f" + version "2.19.1" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.19.1.tgz#56da1a2d1cbf01d38b7e1afc31c10bcfa1929167" ms@0.7.1: version "0.7.1" @@ -3484,8 +3491,8 @@ natural-compare@^1.4.0: resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" navigo@^5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/navigo/-/navigo-5.3.1.tgz#df22c5b84ebf2a121cdaaac1387a876c9f780606" + version "5.3.2" + resolved "https://registry.yarnpkg.com/navigo/-/navigo-5.3.2.tgz#16f6cf3a67cb62eda9661e17108b574589709168" ncname@1.0.x: version "1.0.0" From ec4732610b19645d794ca97f06e19a7575949cd2 Mon Sep 17 00:00:00 2001 From: Xaver Maierhofer Date: Sat, 14 Oct 2017 23:01:08 +0200 Subject: [PATCH 027/119] [TASK] Drop NodeJs v4 & update babel eslint v8 --- .travis.yml | 2 - README.md | 4 +- package.json | 24 +- yarn.lock | 628 +++++++++++++++++++++++++++++---------------------- 4 files changed, 370 insertions(+), 288 deletions(-) diff --git a/.travis.yml b/.travis.yml index 943907e..a471482 100644 --- a/.travis.yml +++ b/.travis.yml @@ -18,8 +18,6 @@ matrix: env: USE_NPM=true - node_js: 6 os: linux - - node_js: 4 - os: linux cache: yarn: true diff --git a/README.md b/README.md index 9c42936..37c9a68 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ [![Build Status](https://img.shields.io/travis/ffrgb/meshviewer/develop.svg?style=flat-square)](https://travis-ci.org/ffrgb/meshviewer) [![Scrutinizer Code Quality](https://img.shields.io/scrutinizer/g/ffrgb/meshviewer/develop.svg?style=flat-square)](https://scrutinizer-ci.com/g/ffrgb/meshviewer/?branch=develop) [![Documentation](https://img.shields.io/badge/gitbooks.io-documentation-brightgreen.svg?style=flat-square)](https://meshviewer.gitbooks.io/documentation/content/) -[![License: AGPL v3](https://img.shields.io/badge/License-AGPL%20v3-blue.svg?style=flat-square)](https://www.gnu.org/licenses/agpl-3.0) +[![License: AGPL v3](https://img.shields.io/github/license/ffrgb/meshviewer.svg?style=flat-square)](https://www.gnu.org/licenses/agpl-3.0) Meshviewer is an online visualization app to represent nodes and links on a map for Freifunk open mesh network. @@ -21,7 +21,7 @@ _Some similar features might have been implemented/merged_ - Currently available: en, de, fr & ru - Gulp inline for some css and js - fewer requests and instant load indicator - Icon font with needed icons only -- Switch to Gulp (Tested with Node.js 4/6 LTS, 8 on Linux, OSX & W**) +- Switch to Gulp (Tested with Node.js 6 LTS, 8 on Linux, OSX & W**) - css and some js moved inline - Yarn/npm in favour of bower - Load only moment.js without languages (Languages are included in translations) diff --git a/package.json b/package.json index d792c60..c56ec70 100644 --- a/package.json +++ b/package.json @@ -9,12 +9,12 @@ "url": "https://github.com/ffrgb/meshviewer/issues" }, "devDependencies": { - "babel-eslint": "^7.2.3", - "browser-sync": "^2.18.12", - "eslint": "^4.6.1", - "eslint-config-airbnb-es5": "^1.1.0", + "babel-eslint": "^8.0.1", + "browser-sync": "^2.18.13", + "eslint": "^4.9.0", + "eslint-config-airbnb-es5": "^1.2.0", "eslint-config-defaults": "^9.0.0", - "eslint-plugin-react": "^7.3.0", + "eslint-plugin-react": "^7.4.0", "gulp": "github:gulpjs/gulp#4.0", "gulp-autoprefixer": "^4.0.0", "gulp-cache-bust": "^1.1.0", @@ -22,14 +22,14 @@ "gulp-environments": "^0.1.2", "gulp-eslint": "^4.0.0", "gulp-htmlmin": "^3.0.0", - "gulp-inject": "^4.2.0", + "gulp-inject": "^4.3.0", "gulp-jsonminify": "^1.0.0", "gulp-kyh-inline-source": "^3.0.2", "gulp-load-plugins": "^1.5.0", "gulp-real-favicon": "^0.2.2", "gulp-requirejs-optimize": "^1.2.0", "gulp-sass": "^3.1.0", - "gulp-sass-lint": "^1.3.3", + "gulp-sass-lint": "^1.3.4", "gulp-sourcemaps": "^2.6.1", "gulp-uglify": "^3.0.0" }, @@ -43,13 +43,13 @@ }, "dependencies": { "almond": "^0.3.3", - "d3-drag": "^1.1.1", - "d3-force": "^1.0.6", + "d3-drag": "^1.2.1", + "d3-force": "^1.1.0", "d3-selection": "^1.1.0", - "d3-zoom": "^1.3.1", + "d3-zoom": "^1.6.0", "leaflet": "^1.2.0", - "moment": "^2.17.1", - "navigo": "^5.3.1", + "moment": "^2.19.1", + "navigo": "^5.3.2", "node-polyglot": "^2.2.2", "promise-polyfill": "^6.0.2", "rbush": "^2.0.1", diff --git a/yarn.lock b/yarn.lock index 84d6abd..d7b7afa 100644 --- a/yarn.lock +++ b/yarn.lock @@ -20,8 +20,8 @@ through2 "^2.0.3" abbrev@1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.0.tgz#d0554c2256636e2f56e7c2e5ad183f859428d81f" + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" accepts@1.3.3: version "1.3.3" @@ -63,6 +63,10 @@ ajv-keywords@^1.0.0: version "1.5.1" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c" +ajv-keywords@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.0.tgz#a296e17f7bfae7c1ce4f7e0de53d29cb32162df0" + ajv@^4.7.0, ajv@^4.9.1: version "4.11.8" resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" @@ -70,9 +74,9 @@ ajv@^4.7.0, ajv@^4.9.1: co "^4.6.0" json-stable-stringify "^1.0.1" -ajv@^5.2.0: - version "5.2.2" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.2.2.tgz#47c68d69e86f5d953103b0074a9430dc63da5e39" +ajv@^5.1.0, ajv@^5.2.0, ajv@^5.2.3: + version "5.2.3" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.2.3.tgz#c06f598778c44c6b161abafe3466b81ad1814ed2" dependencies: co "^4.6.0" fast-deep-equal "^1.0.0" @@ -91,9 +95,9 @@ ansi-escapes@^1.1.0: version "1.4.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" -ansi-escapes@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-2.0.0.tgz#5bae52be424878dd9783e8910e3fc2922e83c81b" +ansi-escapes@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.0.0.tgz#ec3e8b4e9f8064fc02c3ac9b65f1c275bda8ef92" ansi-regex@^2.0.0: version "2.1.1" @@ -125,8 +129,8 @@ anymatch@^1.3.0: normalize-path "^2.0.0" aproba@^1.0.3: - version "1.1.2" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.1.2.tgz#45c6629094de4e96f693ef7eab74ae079c240fc1" + version "1.2.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" archy@^1.0.0: version "1.0.0" @@ -291,25 +295,37 @@ atob@~1.1.0: resolved "https://registry.yarnpkg.com/atob/-/atob-1.1.3.tgz#95f13629b12c3a51a5d215abdce2aa9f32f80773" autoprefixer@^7.0.0: - version "7.1.3" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-7.1.3.tgz#0e8d337976d6f13644db9f8813b4c42f3d1ccc34" + version "7.1.5" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-7.1.5.tgz#d65d14b83c7cd1dd7bc801daa00557addf5a06b2" dependencies: - browserslist "^2.4.0" - caniuse-lite "^1.0.30000718" + browserslist "^2.5.0" + caniuse-lite "^1.0.30000744" normalize-range "^0.1.2" num2fraction "^1.2.2" - postcss "^6.0.10" + postcss "^6.0.13" postcss-value-parser "^3.2.3" aws-sign2@~0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" -aws4@^1.2.1: +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + +aws4@^1.2.1, aws4@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" -babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: +babel-code-frame@7.0.0-beta.0: + version "7.0.0-beta.0" + resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-7.0.0-beta.0.tgz#418a7b5f3f7dc9a4670e61b1158b4c5661bec98d" + dependencies: + chalk "^2.0.0" + esutils "^2.0.2" + js-tokens "^3.0.0" + +babel-code-frame@^6.22.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" dependencies: @@ -317,54 +333,68 @@ babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: esutils "^2.0.2" js-tokens "^3.0.2" -babel-eslint@^7.2.3: - version "7.2.3" - resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-7.2.3.tgz#b2fe2d80126470f5c19442dc757253a897710827" +babel-eslint@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-8.0.1.tgz#5d718be7a328625d006022eb293ed3008cbd6346" dependencies: - babel-code-frame "^6.22.0" - babel-traverse "^6.23.1" - babel-types "^6.23.0" - babylon "^6.17.0" + babel-code-frame "7.0.0-beta.0" + babel-traverse "7.0.0-beta.0" + babel-types "7.0.0-beta.0" + babylon "7.0.0-beta.22" -babel-messages@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" +babel-helper-function-name@7.0.0-beta.0: + version "7.0.0-beta.0" + resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-7.0.0-beta.0.tgz#d1b6779b647e5c5c31ebeb05e13b998e4d352d56" dependencies: - babel-runtime "^6.22.0" + babel-helper-get-function-arity "7.0.0-beta.0" + babel-template "7.0.0-beta.0" + babel-traverse "7.0.0-beta.0" + babel-types "7.0.0-beta.0" -babel-runtime@^6.22.0, babel-runtime@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" +babel-helper-get-function-arity@7.0.0-beta.0: + version "7.0.0-beta.0" + resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-7.0.0-beta.0.tgz#9d1ab7213bb5efe1ef1638a8ea1489969b5a8b6e" dependencies: - core-js "^2.4.0" - regenerator-runtime "^0.11.0" + babel-types "7.0.0-beta.0" -babel-traverse@^6.23.1: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" - dependencies: - babel-code-frame "^6.26.0" - babel-messages "^6.23.0" - babel-runtime "^6.26.0" - babel-types "^6.26.0" - babylon "^6.18.0" - debug "^2.6.8" - globals "^9.18.0" - invariant "^2.2.2" - lodash "^4.17.4" +babel-messages@7.0.0-beta.0: + version "7.0.0-beta.0" + resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-7.0.0-beta.0.tgz#6df01296e49fc8fbd0637394326a167f36da817b" -babel-types@^6.23.0, babel-types@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" +babel-template@7.0.0-beta.0: + version "7.0.0-beta.0" + resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-7.0.0-beta.0.tgz#85083cf9e4395d5e48bf5154d7a8d6991cafecfb" + dependencies: + babel-traverse "7.0.0-beta.0" + babel-types "7.0.0-beta.0" + babylon "7.0.0-beta.22" + lodash "^4.2.0" + +babel-traverse@7.0.0-beta.0: + version "7.0.0-beta.0" + resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-7.0.0-beta.0.tgz#da14be9b762f62a2f060db464eaafdd8cd072a41" + dependencies: + babel-code-frame "7.0.0-beta.0" + babel-helper-function-name "7.0.0-beta.0" + babel-messages "7.0.0-beta.0" + babel-types "7.0.0-beta.0" + babylon "7.0.0-beta.22" + debug "^3.0.1" + globals "^10.0.0" + invariant "^2.2.0" + lodash "^4.2.0" + +babel-types@7.0.0-beta.0: + version "7.0.0-beta.0" + resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-7.0.0-beta.0.tgz#eb8b6e556470e6dcc4aef982d79ad229469b5169" dependencies: - babel-runtime "^6.26.0" esutils "^2.0.2" - lodash "^4.17.4" - to-fast-properties "^1.0.3" + lodash "^4.2.0" + to-fast-properties "^2.0.0" -babylon@^6.17.0, babylon@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" +babylon@7.0.0-beta.22: + version "7.0.0-beta.22" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.22.tgz#74f0ad82ed7c7c3cfeab74cf684f815104161b65" bach@^1.0.0: version "1.2.0" @@ -447,6 +477,18 @@ boom@2.x.x: dependencies: hoek "2.x.x" +boom@4.x.x: + version "4.3.1" + resolved "https://registry.yarnpkg.com/boom/-/boom-4.3.1.tgz#4f8a3005cb4a7e3889f749030fd25b96e01d2e31" + dependencies: + hoek "4.x.x" + +boom@5.x.x: + version "5.2.0" + resolved "https://registry.yarnpkg.com/boom/-/boom-5.2.0.tgz#5dd9da6ee3a5f302077436290cb717d3f4a54e02" + dependencies: + hoek "4.x.x" + brace-expansion@^1.1.7: version "1.1.8" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292" @@ -480,7 +522,7 @@ browser-sync-ui@0.6.3: stream-throttle "^0.1.3" weinre "^2.0.0-pre-I0Z7U9OV" -browser-sync@^2.18.12: +browser-sync@^2.18.13: version "2.18.13" resolved "https://registry.yarnpkg.com/browser-sync/-/browser-sync-2.18.13.tgz#c28dc3eb3be67c97a907082b772a37f915c14d7d" dependencies: @@ -511,12 +553,12 @@ browser-sync@^2.18.12: ua-parser-js "0.7.12" yargs "6.4.0" -browserslist@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.4.0.tgz#693ee93d01e66468a6348da5498e011f578f87f8" +browserslist@^2.5.0: + version "2.5.1" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.5.1.tgz#68e4bc536bbcc6086d62843a2ffccea8396821c6" dependencies: - caniuse-lite "^1.0.30000718" - electron-to-chromium "^1.3.18" + caniuse-lite "^1.0.30000744" + electron-to-chromium "^1.3.24" bs-recipes@1.3.4: version "1.3.4" @@ -583,9 +625,9 @@ camelcase@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" -caniuse-lite@^1.0.30000718: - version "1.0.30000723" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000723.tgz#f9db1e2868caf097b00265ac2e71ba44b608fb1e" +caniuse-lite@^1.0.30000744: + version "1.0.30000746" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000746.tgz#c64f95a3925cfd30207a308ed76c1ae96ea09ea0" caseless@~0.12.0: version "0.12.0" @@ -670,14 +712,14 @@ circular-json@^0.3.1: resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" clap@^1.0.9: - version "1.2.0" - resolved "https://registry.yarnpkg.com/clap/-/clap-1.2.0.tgz#59c90fe3e137104746ff19469a27a634ff68c857" + version "1.2.3" + resolved "https://registry.yarnpkg.com/clap/-/clap-1.2.3.tgz#4f36745b32008492557f46412d66d50cb99bce51" dependencies: chalk "^1.1.3" clean-css@4.1.x: - version "4.1.8" - resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.1.8.tgz#061455b2494a750ac98f46d8d5ebb17c679ea9d1" + version "4.1.9" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.1.9.tgz#35cee8ae7687a49b98034f70de00c4edd3826301" dependencies: source-map "0.5.x" @@ -788,8 +830,8 @@ concat-stream@^1.4.6, concat-stream@^1.6.0: typedarray "^0.0.6" connect-history-api-fallback@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.3.0.tgz#e51d17f8f0ef0db90a64fdb47de3051556e9f169" + version "1.4.0" + resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.4.0.tgz#3db24f973f4b923b0e82f619ce0df02411ca623d" connect@1.x: version "1.9.2" @@ -831,10 +873,6 @@ core-js@^1.0.0: version "1.2.7" resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" -core-js@^2.4.0: - version "2.5.1" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.1.tgz#ae6874dc66937789b80754ff5428df66819ca50b" - core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" @@ -864,6 +902,12 @@ cryptiles@2.x.x: dependencies: boom "2.x.x" +cryptiles@3.x.x: + version "3.1.2" + resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-3.1.2.tgz#a89fbb220f5ce25ec56e8c4aa8a4fd7b5b0d29fe" + dependencies: + boom "5.x.x" + css-select@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.0.0.tgz#b1121ca51848dd264e2244d058cee254deeb44b0" @@ -936,14 +980,7 @@ d3-dispatch@1: version "1.0.3" resolved "https://registry.yarnpkg.com/d3-dispatch/-/d3-dispatch-1.0.3.tgz#46e1491eaa9b58c358fce5be4e8bed626e7871f8" -d3-drag@1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/d3-drag/-/d3-drag-1.1.1.tgz#b5155304433b18ba38726b2184d0098e820dc64b" - dependencies: - d3-dispatch "1" - d3-selection "1" - -d3-drag@^1.1.1: +d3-drag@1, d3-drag@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/d3-drag/-/d3-drag-1.2.1.tgz#df8dd4c502fb490fc7462046a8ad98a5c479282d" dependencies: @@ -954,7 +991,7 @@ d3-ease@1: version "1.0.3" resolved "https://registry.yarnpkg.com/d3-ease/-/d3-ease-1.0.3.tgz#68bfbc349338a380c44d8acc4fbc3304aa2d8c0e" -d3-force@^1.0.6: +d3-force@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/d3-force/-/d3-force-1.1.0.tgz#cebf3c694f1078fcc3d4daf8e567b2fbd70d4ea3" dependencies: @@ -992,7 +1029,7 @@ d3-transition@1: d3-selection "^1.1.0" d3-timer "1" -d3-zoom@^1.3.1: +d3-zoom@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/d3-zoom/-/d3-zoom-1.6.0.tgz#eb645b07fd0c37acc8b36b88476b781ed277b40e" dependencies: @@ -1022,16 +1059,16 @@ dateformat@^1.0.11: meow "^3.3.0" dateformat@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-2.0.0.tgz#2743e3abb5c3fc2462e527dca445e04e9f4dee17" + version "2.2.0" + resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-2.2.0.tgz#4065e2013cf9fb916ddfd82efb506ad4c6769062" debug-fabulous@>=0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/debug-fabulous/-/debug-fabulous-0.1.1.tgz#1b970878c9fa4fbd1c88306eab323c830c58f1d6" + version "0.2.1" + resolved "https://registry.yarnpkg.com/debug-fabulous/-/debug-fabulous-0.2.1.tgz#57e1164ba0e9ad6d9a65f20075ff3c2bd6bde0dc" dependencies: - debug "2.3.0" - memoizee "^0.4.5" - object-assign "4.1.0" + debug "3.X" + memoizee "0.4.X" + object-assign "4.X" debug@2.2.0, debug@~2.2.0: version "2.2.0" @@ -1039,12 +1076,6 @@ debug@2.2.0, debug@~2.2.0: dependencies: ms "0.7.1" -debug@2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.3.0.tgz#3912dc55d7167fc3af17d2b85c13f93deaedaa43" - dependencies: - ms "0.7.2" - debug@2.3.3: version "2.3.3" resolved "https://registry.yarnpkg.com/debug/-/debug-2.3.3.tgz#40c453e67e6e13c901ddec317af8986cda9eff8c" @@ -1057,15 +1088,21 @@ debug@2.6.4: dependencies: ms "0.7.3" -debug@2.6.8, debug@^2.1.1, debug@^2.2.0, debug@^2.6.8: +debug@2.6.8: version "2.6.8" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc" dependencies: ms "2.0.0" -debug@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.0.1.tgz#0564c612b521dc92d9f2988f0549e34f9c98db64" +debug@3.X, debug@^3.0.1: + version "3.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + dependencies: + ms "2.0.0" + +debug@^2.1.1, debug@^2.2.0: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" dependencies: ms "2.0.0" @@ -1243,9 +1280,9 @@ ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" -electron-to-chromium@^1.3.18: - version "1.3.20" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.20.tgz#2eedd5ccbae7ddc557f68ad1fce9c172e915e4e5" +electron-to-chromium@^1.3.24: + version "1.3.26" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.26.tgz#996427294861a74d9c7c82b9260ea301e8c02d66" emitter-steward@^1.0.0: version "1.0.0" @@ -1321,8 +1358,8 @@ error-ex@^1.2.0: is-arrayish "^0.2.1" es-abstract@^1.5.0, es-abstract@^1.7.0: - version "1.8.2" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.8.2.tgz#25103263dc4decbda60e0c737ca32313518027ee" + version "1.9.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.9.0.tgz#690829a07cae36b222e7fd9b75c0d0573eb25227" dependencies: es-to-primitive "^1.1.1" function-bind "^1.1.1" @@ -1339,13 +1376,13 @@ es-to-primitive@^1.1.1: is-symbol "^1.0.1" es5-ext@^0.10.14, es5-ext@^0.10.30, es5-ext@^0.10.9, es5-ext@~0.10.14, es5-ext@~0.10.2: - version "0.10.30" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.30.tgz#7141a16836697dbabfaaaeee41495ce29f52c939" + version "0.10.35" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.35.tgz#18ee858ce6a3c45c7d79e91c15fcca9ec568494f" dependencies: - es6-iterator "2" - es6-symbol "~3.1" + es6-iterator "~2.0.1" + es6-symbol "~3.1.1" -es6-iterator@2, es6-iterator@^2.0.1, es6-iterator@~2.0.1: +es6-iterator@^2.0.1, es6-iterator@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.1.tgz#8e319c9f0453bf575d374940a655920e59ca5512" dependencies: @@ -1374,7 +1411,7 @@ es6-set@~0.1.5: es6-symbol "3.1.1" event-emitter "~0.3.5" -es6-symbol@3.1.1, es6-symbol@^3.1, es6-symbol@^3.1.1, es6-symbol@~3.1, es6-symbol@~3.1.1: +es6-symbol@3.1.1, es6-symbol@^3.1, es6-symbol@^3.1.1, es6-symbol@~3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77" dependencies: @@ -1407,7 +1444,7 @@ escope@^3.6.0: esrecurse "^4.1.0" estraverse "^4.1.1" -eslint-config-airbnb-es5@^1.1.0: +eslint-config-airbnb-es5@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/eslint-config-airbnb-es5/-/eslint-config-airbnb-es5-1.2.0.tgz#9518808fd876e2ce8294d51166b6b1359bd51f28" dependencies: @@ -1417,7 +1454,7 @@ eslint-config-defaults@^9.0.0: version "9.0.0" resolved "https://registry.yarnpkg.com/eslint-config-defaults/-/eslint-config-defaults-9.0.0.tgz#a090adc13b2935e3f43b3cd048a92701654e5ad5" -eslint-plugin-react@^7.3.0: +eslint-plugin-react@^7.4.0: version "7.4.0" resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.4.0.tgz#300a95861b9729c087d362dd64abcc351a74364a" dependencies: @@ -1471,51 +1508,9 @@ eslint@^2.7.0: text-table "~0.2.0" user-home "^2.0.0" -eslint@^4.0.0: - version "4.6.1" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.6.1.tgz#ddc7fc7fd70bf93205b0b3449bb16a1e9e7d4950" - dependencies: - ajv "^5.2.0" - babel-code-frame "^6.22.0" - chalk "^2.1.0" - concat-stream "^1.6.0" - cross-spawn "^5.1.0" - debug "^2.6.8" - doctrine "^2.0.0" - eslint-scope "^3.7.1" - espree "^3.5.0" - esquery "^1.0.0" - estraverse "^4.2.0" - esutils "^2.0.2" - file-entry-cache "^2.0.0" - functional-red-black-tree "^1.0.1" - glob "^7.1.2" - globals "^9.17.0" - ignore "^3.3.3" - imurmurhash "^0.1.4" - inquirer "^3.0.6" - is-resolvable "^1.0.0" - js-yaml "^3.9.1" - json-stable-stringify "^1.0.1" - levn "^0.3.0" - lodash "^4.17.4" - minimatch "^3.0.2" - mkdirp "^0.5.1" - natural-compare "^1.4.0" - optionator "^0.8.2" - path-is-inside "^1.0.2" - pluralize "^4.0.0" - progress "^2.0.0" - require-uncached "^1.0.3" - semver "^5.3.0" - strip-ansi "^4.0.0" - strip-json-comments "~2.0.1" - table "^4.0.1" - text-table "~0.2.0" - -eslint@^4.6.1: - version "4.8.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.8.0.tgz#229ef0e354e0e61d837c7a80fdfba825e199815e" +eslint@^4.0.0, eslint@^4.9.0: + version "4.9.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.9.0.tgz#76879d274068261b191fe0f2f56c74c2f4208e8b" dependencies: ajv "^5.2.0" babel-code-frame "^6.22.0" @@ -1555,14 +1550,7 @@ eslint@^4.6.1: table "^4.0.1" text-table "~0.2.0" -espree@^3.1.6, espree@^3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.0.tgz#98358625bdd055861ea27e2867ea729faf463d8d" - dependencies: - acorn "^5.1.1" - acorn-jsx "^3.0.0" - -espree@^3.5.1: +espree@^3.1.6, espree@^3.5.1: version "3.5.1" resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.1.tgz#0c988b8ab46db53100a1954ae4ba995ddd27d87e" dependencies: @@ -1599,8 +1587,8 @@ esutils@^2.0.2: resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" etag@^1.7.0, etag@~1.8.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.0.tgz#6f631aef336d6c46362b51764044ce216be3c051" + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" event-emitter@^0.3.5, event-emitter@~0.3.5: version "0.3.5" @@ -1668,17 +1656,17 @@ extend-shallow@^2.0.1: dependencies: is-extendable "^0.1.0" -extend@^3.0.0, extend@~3.0.0: +extend@^3.0.0, extend@~3.0.0, extend@~3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" external-editor@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.0.4.tgz#1ed9199da9cbfe2ef2f7a31b2fde8b0d12368972" + version "2.0.5" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.0.5.tgz#52c249a3981b9ba187c7cacf5beb50bf1d91a6bc" dependencies: iconv-lite "^0.4.17" jschardet "^1.4.2" - tmp "^0.0.31" + tmp "^0.0.33" extglob@^0.3.1: version "0.3.2" @@ -1705,9 +1693,9 @@ fast-levenshtein@~2.0.4: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" -fbjs@^0.8.9: - version "0.8.14" - resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.14.tgz#d1dbe2be254c35a91e09f31f9cd50a40b2a0ed1c" +fbjs@^0.8.16: + version "0.8.16" + resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.16.tgz#5e67432f550dc41b572bf55847b8aca64e5337db" dependencies: core-js "^1.0.0" isomorphic-fetch "^2.1.1" @@ -1809,8 +1797,8 @@ flagged-respawn@^0.3.2: resolved "https://registry.yarnpkg.com/flagged-respawn/-/flagged-respawn-0.3.2.tgz#ff191eddcd7088a675b2610fffc976be9b8074b5" flat-cache@^1.2.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.2.2.tgz#fa86714e72c21db88601761ecf2f555d1abc6b96" + version "1.3.0" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.0.tgz#d3030b32b38154f4e3b7e9c709f490f7ef97c481" dependencies: circular-json "^0.3.1" del "^2.0.2" @@ -1859,6 +1847,14 @@ form-data@~2.1.1: combined-stream "^1.0.5" mime-types "^2.1.12" +form-data@~2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.1.tgz#6fb94fbd71885306d73d15cc497fe4cc4ecd44bf" + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.5" + mime-types "^2.1.12" + formidable@1.0.x: version "1.0.17" resolved "https://registry.yarnpkg.com/formidable/-/formidable-1.0.17.tgz#ef5491490f9433b705faa77249c99029ae348559" @@ -2064,7 +2060,11 @@ global-prefix@^0.1.4: is-windows "^0.2.0" which "^1.2.12" -globals@^9.17.0, globals@^9.18.0, globals@^9.2.0: +globals@^10.0.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-10.1.0.tgz#4425a1881be0d336b4a823a82a7be725d5dd987c" + +globals@^9.17.0, globals@^9.2.0: version "9.18.0" resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" @@ -2197,7 +2197,7 @@ gulp-if@^2.0.1: ternary-stream "^2.0.1" through2 "^2.0.1" -gulp-inject@^4.2.0: +gulp-inject@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/gulp-inject/-/gulp-inject-4.3.0.tgz#a67a5899a6c7ecf9c7c7f1ceb9f061f1c6f4b898" dependencies: @@ -2262,7 +2262,7 @@ gulp-requirejs-optimize@^1.2.0: through2 "^2.0.1" vinyl-sourcemaps-apply "^0.2.1" -gulp-sass-lint@^1.3.3: +gulp-sass-lint@^1.3.4: version "1.3.4" resolved "https://registry.yarnpkg.com/gulp-sass-lint/-/gulp-sass-lint-1.3.4.tgz#a9950c2dd050fd00fbf2ebc063016434a22100e2" dependencies: @@ -2384,6 +2384,10 @@ har-schema@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e" +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + har-validator@~4.2.1: version "4.2.1" resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a" @@ -2391,6 +2395,13 @@ har-validator@~4.2.1: ajv "^4.9.1" har-schema "^1.0.5" +har-validator@~5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.0.3.tgz#ba402c266194f15956ef15e0fcf242993f6a7dfd" + dependencies: + ajv "^5.1.0" + har-schema "^2.0.0" + has-ansi@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" @@ -2433,7 +2444,7 @@ has@^1.0.1: dependencies: function-bind "^1.0.2" -hawk@~3.1.3: +hawk@3.1.3, hawk@~3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" dependencies: @@ -2442,6 +2453,15 @@ hawk@~3.1.3: hoek "2.x.x" sntp "1.x.x" +hawk@~6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/hawk/-/hawk-6.0.2.tgz#af4d914eb065f9b5ce4d9d11c1cb2126eecc3038" + dependencies: + boom "4.x.x" + cryptiles "3.x.x" + hoek "4.x.x" + sntp "2.x.x" + he@1.1.x: version "1.1.1" resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd" @@ -2450,6 +2470,10 @@ hoek@2.x.x: version "2.16.3" resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" +hoek@4.x.x: + version "4.2.0" + resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.0.tgz#72d9d0754f7fe25ca2d01ad8f8f9a9449a89526d" + homedir-polyfill@^1.0.0, homedir-polyfill@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz#4c2bbc8a758998feebf5ed68580f76d46768b4bc" @@ -2461,8 +2485,8 @@ hosted-git-info@^2.1.4: resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.5.0.tgz#6d60e34b3abbc8313062c3b798ef8d901a07af3c" html-minifier@^3.0.3: - version "3.5.3" - resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.3.tgz#4a275e3b1a16639abb79b4c11191ff0d0fcf1ab9" + version "3.5.5" + resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.5.tgz#3bdc9427e638bbe3dbde96c0eb988b044f02739e" dependencies: camel-case "3.0.x" clean-css "4.1.x" @@ -2471,7 +2495,7 @@ html-minifier@^3.0.3: ncname "1.0.x" param-case "2.1.x" relateurl "0.2.x" - uglify-js "3.0.x" + uglify-js "3.1.x" htmlparser2@3.9.2, htmlparser2@^3.9.1: version "3.9.2" @@ -2526,18 +2550,30 @@ http-signature@~1.1.0: jsprim "^1.2.2" sshpk "^1.7.0" +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + iconv-lite@^0.4.17, iconv-lite@~0.4.13: - version "0.4.18" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.18.tgz#23d8656b16aae6742ac29732ea8f0336a4789cf2" + version "0.4.19" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" ignore@^3.1.2, ignore@^3.3.3: version "3.3.5" resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.5.tgz#c4e715455f6073a8d7e5dae72d2fc9d71663dba6" -immutable@3.8.1, immutable@^3.7.6: +immutable@3.8.1: version "3.8.1" resolved "https://registry.yarnpkg.com/immutable/-/immutable-3.8.1.tgz#200807f11ab0f72710ea485542de088075f68cd2" +immutable@^3.7.6: + version "3.8.2" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-3.8.2.tgz#c2439951455bb39913daf281376f1530e104adf3" + imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" @@ -2605,10 +2641,10 @@ inquirer@^0.12.0: through "^2.3.6" inquirer@^3.0.6: - version "3.2.3" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.2.3.tgz#1c7b1731cf77b934ec47d22c9ac5aa8fe7fbe095" + version "3.3.0" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9" dependencies: - ansi-escapes "^2.0.0" + ansi-escapes "^3.0.0" chalk "^2.0.0" cli-cursor "^2.1.0" cli-width "^2.0.0" @@ -2624,10 +2660,10 @@ inquirer@^3.0.6: through "^2.3.6" interpret@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.3.tgz#cbc35c62eeee73f19ab7b10a801511401afc0f90" + version "1.0.4" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.4.tgz#820cdd588b868ffb191a809506d6c9c8f212b1b0" -invariant@^2.2.2: +invariant@^2.2.0: version "2.2.2" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360" dependencies: @@ -2877,16 +2913,16 @@ isstream@~0.1.2: resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" js-base64@^2.1.8: - version "2.1.9" - resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.1.9.tgz#f0e80ae039a4bd654b5f281fc93f04a914a7fcce" + version "2.3.2" + resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.3.2.tgz#a79a923666372b580f8e27f51845c6f7e8fbfbaf" js-tokens@^3.0.0, js-tokens@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" js-yaml@^3.4.6, js-yaml@^3.5.1, js-yaml@^3.5.4, js-yaml@^3.9.1: - version "3.9.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.9.1.tgz#08775cebdfdd359209f0d2acd383c8f86a6904a0" + version "3.10.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.10.0.tgz#2e78441646bd4682e963f22b6e92823c309c62dc" dependencies: argparse "^1.0.7" esprima "^4.0.0" @@ -3231,7 +3267,7 @@ lodash@^3.10.1, lodash@^3.2.0: version "3.10.1" resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" -lodash@^4.0.0, lodash@^4.13.1, lodash@^4.14.0, lodash@^4.17.4, lodash@^4.3.0, lodash@~4.17.4: +lodash@^4.0.0, lodash@^4.13.1, lodash@^4.14.0, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.3.0, lodash@~4.17.4: version "4.17.4" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" @@ -3317,9 +3353,9 @@ md5@^2.0.0: crypt "~0.0.1" is-buffer "~1.1.1" -memoizee@^0.4.5: - version "0.4.9" - resolved "https://registry.yarnpkg.com/memoizee/-/memoizee-0.4.9.tgz#ea1c005f5c4c31d89a4a10e24db83fbf61cdd4f3" +memoizee@0.4.X: + version "0.4.11" + resolved "https://registry.yarnpkg.com/memoizee/-/memoizee-0.4.11.tgz#bde9817663c9e40fdb2a4ea1c367296087ae8c8f" dependencies: d "1" es5-ext "^0.10.30" @@ -3386,7 +3422,7 @@ mime-db@~1.30.0: version "1.30.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.30.0.tgz#74c643da2dd9d6a45399963465b26d5ca7d71f01" -mime-types@^2.1.12, mime-types@~2.1.11, mime-types@~2.1.16, mime-types@~2.1.7: +mime-types@^2.1.12, mime-types@~2.1.11, mime-types@~2.1.16, mime-types@~2.1.17, mime-types@~2.1.7: version "2.1.17" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.17.tgz#09d7a393f03e995a79f8af857b70a9e0ab16557a" dependencies: @@ -3401,8 +3437,8 @@ mime@1.3.4: resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53" "mime@>= 0.0.1": - version "1.4.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.0.tgz#69e9e0db51d44f2a3b56e48b7817d7d137f1a343" + version "2.0.3" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.0.3.tgz#4353337854747c48ea498330dc034f9f4bbbcc0b" mimic-fn@^1.0.0: version "1.1.0" @@ -3436,7 +3472,7 @@ mkdirp@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.3.0.tgz#1bbf5ab1ba827af23575143490426455f481fe1e" -moment@^2.17.1: +moment@^2.19.1: version "2.19.1" resolved "https://registry.yarnpkg.com/moment/-/moment-2.19.1.tgz#56da1a2d1cbf01d38b7e1afc31c10bcfa1929167" @@ -3490,7 +3526,7 @@ natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" -navigo@^5.3.1: +navigo@^5.3.2: version "5.3.2" resolved "https://registry.yarnpkg.com/navigo/-/navigo-5.3.2.tgz#16f6cf3a67cb62eda9661e17108b574589709168" @@ -3509,14 +3545,14 @@ next-tick@1: resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" no-case@^2.2.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.1.tgz#7aeba1c73a52184265554b7dc03baf720df80081" + version "2.3.2" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.2.tgz#60b813396be39b3f1288a4c1ed5d1e7d28b464ac" dependencies: lower-case "^1.1.1" node-fetch@^1.0.1: - version "1.7.2" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.2.tgz#c54e9aac57e432875233525f3c891c4159ffefd7" + version "1.7.3" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" dependencies: encoding "^0.1.11" is-stream "^1.0.1" @@ -3549,14 +3585,15 @@ node-polyglot@^2.2.2: warning "^3.0.0" node-pre-gyp@^0.6.36: - version "0.6.36" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.36.tgz#db604112cb74e0d477554e9b505b17abddfab786" + version "0.6.38" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.38.tgz#e92a20f83416415bb4086f6d1fb78b3da73d113d" dependencies: + hawk "3.1.3" mkdirp "^0.5.1" nopt "^4.0.1" npmlog "^4.0.2" rc "^1.1.7" - request "^2.81.0" + request "2.81.0" rimraf "^2.6.1" semver "^5.3.0" tar "^2.2.1" @@ -3653,7 +3690,7 @@ number-is-nan@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" -oauth-sign@~0.8.1: +oauth-sign@~0.8.1, oauth-sign@~0.8.2: version "0.8.2" resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" @@ -3661,7 +3698,7 @@ object-assign@4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.0.tgz#7a3b3d0e98063d43f4c03f2e8ae6cd51a86883a0" -object-assign@4.1.1, object-assign@^4.0.0, object-assign@^4.0.1, object-assign@^4.1.0: +object-assign@4.1.1, object-assign@4.X, object-assign@^4.0.0, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" @@ -3775,7 +3812,7 @@ os-locale@^1.4.0: dependencies: lcid "^1.0.0" -os-tmpdir@^1.0.0, os-tmpdir@~1.0.1: +os-tmpdir@^1.0.0, os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" @@ -3842,8 +3879,8 @@ parseuri@0.0.5: better-assert "~1.0.0" parseurl@~1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.1.tgz#c8ab8c9223ba34888aa64a297b28853bec18da56" + version "1.3.2" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" path-dirname@^1.0.0: version "1.0.2" @@ -3895,6 +3932,10 @@ performance-now@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + pify@^2.0.0, pify@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" @@ -3913,10 +3954,6 @@ pluralize@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-1.2.1.tgz#d1a21483fd22bb41e58a12fa3421823140897c45" -pluralize@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-4.0.0.tgz#59b708c1c0190a2f692f1c7618c446b052fd1762" - pluralize@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777" @@ -3932,13 +3969,13 @@ postcss-value-parser@^3.2.3: version "3.3.0" resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz#87f38f9f18f774a4ab4c8a232f5c5ce8872a9d15" -postcss@^6.0.1, postcss@^6.0.10: - version "6.0.10" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.10.tgz#c311b89734483d87a91a56dc9e53f15f4e6e84e4" +postcss@^6.0.1, postcss@^6.0.13: + version "6.0.13" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.13.tgz#b9ecab4ee00c89db3ec931145bd9590bbf3f125f" dependencies: chalk "^2.1.0" - source-map "^0.5.7" - supports-color "^4.2.1" + source-map "^0.6.1" + supports-color "^4.4.0" prelude-ls@~1.1.2: version "1.1.2" @@ -3975,11 +4012,12 @@ promise@^7.1.1: asap "~2.0.3" prop-types@^15.5.10: - version "15.5.10" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.5.10.tgz#2797dfc3126182e3a95e3dfbb2e893ddd7456154" + version "15.6.0" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.0.tgz#ceaf083022fc46b4a35f69e13ef75aed0d639856" dependencies: - fbjs "^0.8.9" + fbjs "^0.8.16" loose-envify "^1.3.1" + object-assign "^4.1.1" pseudomap@^1.0.2: version "1.0.2" @@ -4010,9 +4048,9 @@ qs@6.2.1: version "6.2.1" resolved "https://registry.yarnpkg.com/qs/-/qs-6.2.1.tgz#ce03c5ff0935bc1d9d69a9f14cbd18e568d67625" -"qs@>= 0.4.0": - version "6.5.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.0.tgz#8d04954d364def3efc55b5a0793e1e2c8b1e6e49" +"qs@>= 0.4.0", qs@~6.5.1: + version "6.5.1" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8" qs@~6.4.0: version "6.4.0" @@ -4040,8 +4078,8 @@ rbush@^2.0.1: quickselect "^1.0.0" rc@^1.1.7: - version "1.2.1" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.1.tgz#2e03e8e42ee450b8cb3dce65be1bf8974e1dfd95" + version "1.2.2" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.2.tgz#d8ce9cb57e8d64d9c7badd9876c7c34cbe3c7077" dependencies: deep-extend "~0.4.0" ini "~1.3.0" @@ -4143,10 +4181,6 @@ redent@^1.0.0: indent-string "^2.1.0" strip-indent "^1.0.1" -regenerator-runtime@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz#7e54fe5b5ccd5d6624ea6255c3473be090b802e1" - regex-cache@^0.4.2: version "0.4.4" resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" @@ -4179,7 +4213,34 @@ replace-ext@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-0.0.1.tgz#29bbd92078a739f0bcce2b4ee41e837953522924" -request@2, request@2.81.0, request@^2.79.0, request@^2.81.0: +request@2, request@^2.79.0: + version "2.83.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.83.0.tgz#ca0b65da02ed62935887808e6f510381034e3356" + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.6.0" + caseless "~0.12.0" + combined-stream "~1.0.5" + extend "~3.0.1" + forever-agent "~0.6.1" + form-data "~2.3.1" + har-validator "~5.0.3" + hawk "~6.0.2" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.17" + oauth-sign "~0.8.2" + performance-now "^2.1.0" + qs "~6.5.1" + safe-buffer "^5.1.1" + stringstream "~0.0.5" + tough-cookie "~2.3.3" + tunnel-agent "^0.6.0" + uuid "^3.1.0" + +request@2.81.0: version "2.81.0" resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" dependencies: @@ -4286,8 +4347,8 @@ rfg-api@^0.3.0: unzip2 "^0.2.5" rimraf@2, rimraf@^2.2.8, rimraf@^2.5.1, rimraf@^2.6.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.1.tgz#c2338ec643df7a1b7fe5c54fa86f57428a55f33d" + version "2.6.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" dependencies: glob "^7.0.5" @@ -4321,7 +4382,7 @@ rx@4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/rx/-/rx-4.1.0.tgz#a5f13ff79ef3b740fe30aa803fb09f98805d4782" -safe-buffer@^5.0.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: +safe-buffer@^5.0.1, safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" @@ -4472,6 +4533,12 @@ slice-ansi@0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" +slice-ansi@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d" + dependencies: + is-fullwidth-code-point "^2.0.0" + "slice-stream@>= 1.0.0 < 2": version "1.0.0" resolved "https://registry.yarnpkg.com/slice-stream/-/slice-stream-1.0.0.tgz#5b33bd66f013b1a7f86460b03d463dec39ad3ea0" @@ -4488,6 +4555,12 @@ sntp@1.x.x: dependencies: hoek "2.x.x" +sntp@2.x.x: + version "2.0.2" + resolved "https://registry.yarnpkg.com/sntp/-/sntp-2.0.2.tgz#5064110f0af85f7cfdb7d6b67a40028ce52b4b2b" + dependencies: + hoek "4.x.x" + socket.io-adapter@0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-0.5.0.tgz#cb6d4bb8bec81e1078b99677f9ced0046066bb8b" @@ -4545,10 +4618,14 @@ source-map-url@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.3.0.tgz#7ecaf13b57bcd09da8a40c5d269db33799d4aaf9" -source-map@0.5.x, source-map@0.X, source-map@^0.5.1, source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.1: +source-map@0.5.x, source-map@^0.5.1, source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.1: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" +source-map@0.X, source-map@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + source-map@^0.1.38: version "0.1.43" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.43.tgz#c24bc146ca517c1471f5dacbe2571b2b7f9e3346" @@ -4658,7 +4735,7 @@ string-width@^1.0.1, string-width@^1.0.2: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -string-width@^2.0.0, string-width@^2.1.0: +string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" dependencies: @@ -4683,7 +4760,7 @@ string_decoder@~1.0.3: dependencies: safe-buffer "~5.1.0" -stringstream@~0.0.4: +stringstream@~0.0.4, stringstream@~0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" @@ -4738,7 +4815,7 @@ supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" -supports-color@^4.0.0, supports-color@^4.2.1: +supports-color@^4.0.0, supports-color@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.4.0.tgz#883f7ddabc165142b2a61427f3352ded195d1a3e" dependencies: @@ -4775,15 +4852,15 @@ table@^3.7.8: string-width "^2.0.0" table@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/table/-/table-4.0.1.tgz#a8116c133fac2c61f4a420ab6cdf5c4d61f0e435" + version "4.0.2" + resolved "https://registry.yarnpkg.com/table/-/table-4.0.2.tgz#a33447375391e766ad34d3486e6e2aedc84d2e36" dependencies: - ajv "^4.7.0" - ajv-keywords "^1.0.0" - chalk "^1.1.1" - lodash "^4.0.0" - slice-ansi "0.0.4" - string-width "^2.0.0" + ajv "^5.2.3" + ajv-keywords "^2.1.0" + chalk "^2.1.0" + lodash "^4.17.4" + slice-ansi "1.0.0" + string-width "^2.1.1" tar-pack@^3.4.0: version "3.4.0" @@ -4886,11 +4963,11 @@ timers-ext@^0.1.2: es5-ext "~0.10.14" next-tick "1" -tmp@^0.0.31: - version "0.0.31" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.31.tgz#8f38ab9438e17315e5dbd8b3657e8bfb277ae4a7" +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" dependencies: - os-tmpdir "~1.0.1" + os-tmpdir "~1.0.2" to-absolute-glob@^0.1.1: version "0.1.1" @@ -4902,9 +4979,9 @@ to-array@0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/to-array/-/to-array-0.1.4.tgz#17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890" -to-fast-properties@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" to-object-path@^0.3.0: version "0.3.0" @@ -4912,9 +4989,9 @@ to-object-path@^0.3.0: dependencies: kind-of "^3.0.2" -tough-cookie@~2.3.0: - version "2.3.2" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a" +tough-cookie@~2.3.0, tough-cookie@~2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.3.tgz#0b618a5565b6dea90bf3425d04d55edc475a7561" dependencies: punycode "^1.4.1" @@ -4955,16 +5032,23 @@ ua-parser-js@0.7.12: resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.12.tgz#04c81a99bdd5dc52263ea29d24c6bf8d4818a4bb" ua-parser-js@^0.7.9: - version "0.7.14" - resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.14.tgz#110d53fa4c3f326c121292bbeac904d2e03387ca" + version "0.7.17" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.17.tgz#e9ec5f9498b9ec910e7ae3ac626a805c4d09ecac" -uglify-js@3.0.x, uglify-js@^3.0.5: +uglify-js@3.0.x: version "3.0.28" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.0.28.tgz#96b8495f0272944787b5843a1679aa326640d5f7" dependencies: commander "~2.11.0" source-map "~0.5.1" +uglify-js@3.1.x, uglify-js@^3.0.5: + version "3.1.3" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.1.3.tgz#d61f0453b4718cab01581f3162aa90bab7520b42" + dependencies: + commander "~2.11.0" + source-map "~0.5.1" + uid-number@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" @@ -4986,8 +5070,8 @@ underscore@1.7.x: resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.7.0.tgz#6bbaf0877500d36be34ecaa584e0db9fef035209" undertaker-registry@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/undertaker-registry/-/undertaker-registry-1.0.0.tgz#2da716c765999d8c94b9f9ed2c006df4923b052b" + version "1.0.1" + resolved "https://registry.yarnpkg.com/undertaker-registry/-/undertaker-registry-1.0.1.tgz#5e4bda308e4a8a2ae584f9b9a4359a499825cc50" undertaker@^1.0.0: version "1.2.0" @@ -5074,7 +5158,7 @@ uuid@^2.0.1: version "2.0.3" resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a" -uuid@^3.0.0: +uuid@^3.0.0, uuid@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04" From 24abeb74bd8b4736227769e9ee74223cb355eef2 Mon Sep 17 00:00:00 2001 From: Xaver Maierhofer Date: Sun, 15 Oct 2017 22:01:15 +0200 Subject: [PATCH 028/119] [TASK] Move changelog to gitbooks --- CHANGELOG.md | 66 ---------------------------------------------------- README.md | 33 +++----------------------- 2 files changed, 3 insertions(+), 96 deletions(-) delete mode 100644 CHANGELOG.md diff --git a/CHANGELOG.md b/CHANGELOG.md deleted file mode 100644 index c96a7a7..0000000 --- a/CHANGELOG.md +++ /dev/null @@ -1,66 +0,0 @@ -# Change Log - -## Switched to rolling release - -- All major changes can be found in README.md and everything else in git history https://github.com/ffrgb/meshviewer -- Lot of parts of codebase have been changed - -## v4 - -- add a legend (map) -- new graph theme -- performance improvements in graph view -- various UI changes -- various map fixes -- moved config from config.js to config.json -- online/offline statistics -- define layers for map in config -- graph: zoom by keyboard (+ and - keys) -- direct links to graph and map views - -### Bugfixes - -- map works with little or no nodes - -## v3 - -### Implemented enhancements: - -- Make clients in map start at a random angle -- On statistics page: show how many nodes supply geoinformation -- Allow additional statistics (global and per node) configured in config.js -- Improve node count information (total, online, clients, ...) -- Show hardware model in link infobox -- Introduce maxAge setting -- Graph: show VPN links in grayscale - -### Removed features: - -- Don't show contact information in node lists - -### Fixed bugs: - -- Fixed off-by-one when drawing clients -- Match labels order to node order in map -- Statistics: count only nodes that are present - -## v2 - -### General changes: - -- License change from GPL 3 to AGPL 3 - -### Implemented enhancements: - -- Improved performance on Firefox -- Labels in graph view -- infobox: link to geouri with node's coordinates -- infobox: show node id -- map: locate user -- map: adding custom layers from leaflet.providers -- nodelist: sort by uptime fixed -- graph: circles for clients - -### Fixed bugs: - -- Links disappeared on graph on refresh diff --git a/README.md b/README.md index 37c9a68..55959d1 100644 --- a/README.md +++ b/README.md @@ -6,35 +6,6 @@ Meshviewer is an online visualization app to represent nodes and links on a map for Freifunk open mesh network. -#### Main differences to https://github.com/ffnord/meshviewer -_Some similar features might have been implemented/merged_ - -- Replaced router - including language, mode, node, link, location -- Leaflet upgraded to v1 - faster on mobile -- Forcegraph rewrite with d3.js v4 -- Map layer modes (Allow to set a default layer based on time combined with a stylesheet) -- Automatic updates for selected node or list (incl. image stats cache-breaker) -- Node filter -- Zoom level for clicking on a node (`nodeZoom`) is definable independently from the maximum zoom level 22 -- Formatted Code -- Translation support - https://crowdin.com/project/meshviewer - Contact us for new languages - - Currently available: en, de, fr & ru -- Gulp inline for some css and js - fewer requests and instant load indicator -- Icon font with needed icons only -- Switch to Gulp (Tested with Node.js 6 LTS, 8 on Linux, OSX & W**) - - css and some js moved inline -- Yarn/npm in favour of bower - - Load only moment.js without languages (Languages are included in translations) - - unneeded components removed (es6-shim, tablesort, numeraljs, leaflet-providers, leaflet-label jshashes, chroma-js) -- RBush v2 - performance boost in last versions (positions, labels and clients on the map) -- Ruby dependency removed -- FixedCenter is required -- Sass-lint, scss and variables rewritten for easy customizations/adjustments -- Cross browser/device support improved (THX@BrowserStack) -- Yarn package manager in favour of npm (npm still works) -- Configurable reverse geocoding server -- [A lot more in the commit history](https://github.com/ffrgb/meshviewer/commits/develop) - ### Demo Embedded: https://regensburg.freifunk.net/netz/karte/ @@ -47,7 +18,9 @@ Documentation moved to [meshviewer.gitbooks.io](https://meshviewer.gitbooks.io/d - Read: https://meshviewer.gitbooks.io/documentation/content/ - PDF, Mobi, ePub & edit: https://www.gitbook.com/book/meshviewer/documentation/details -#### Why move the documentation? +### [Changelog](https://meshviewer.gitbooks.io/documentation/content/changelog.html) + +#### Why move the documentation/changelog? - Search available - Multiple pages From 7c8456b18a157c1c4d70b6ddfd594542bff1de6f Mon Sep 17 00:00:00 2001 From: Xaver Maierhofer Date: Sun, 15 Oct 2017 22:53:00 +0200 Subject: [PATCH 029/119] [TASK] Remove unused moment --- lib/map/button.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/map/button.js b/lib/map/button.js index 4352fa5..e2199e4 100644 --- a/lib/map/button.js +++ b/lib/map/button.js @@ -1,5 +1,5 @@ -define(['map/clientlayer', 'map/labellayer', 'leaflet', 'moment', 'map/locationmarker'], - function (ClientLayer, LabelLayer, L, moment, LocationMarker) { +define(['map/clientlayer', 'map/labellayer', 'leaflet', 'map/locationmarker'], + function (ClientLayer, LabelLayer, L, LocationMarker) { 'use strict'; var self = {}; From db16ea83753ea06bb3fe8543121773f3e28e96cb Mon Sep 17 00:00:00 2001 From: Xaver Maierhofer Date: Sun, 29 Oct 2017 15:11:24 +0100 Subject: [PATCH 030/119] [!!!][TASK] Refactor to meshviewer.json --- lib/filters/hostname.js | 2 +- lib/forcegraph.js | 29 ++-- lib/forcegraph/draw.js | 18 +- lib/gui.js | 3 +- lib/infobox/link.js | 91 ++++++---- lib/infobox/main.js | 22 ++- lib/infobox/node.js | 328 ++++++++++++++++++------------------- lib/legend.js | 4 +- lib/linklist.js | 8 +- lib/main.js | 109 ++++-------- lib/map.js | 4 +- lib/map/clientlayer.js | 10 +- lib/map/labellayer.js | 20 +-- lib/nodelist.js | 22 +-- lib/proportions.js | 32 ++-- lib/simplenodelist.js | 8 +- lib/title.js | 4 +- lib/utils/helper.js | 71 +++----- lib/utils/router.js | 4 +- locale/en.json | 1 + scss/modules/_sidebar.scss | 2 +- 21 files changed, 382 insertions(+), 410 deletions(-) diff --git a/lib/filters/hostname.js b/lib/filters/hostname.js index b311c07..5da75f3 100644 --- a/lib/filters/hostname.js +++ b/lib/filters/hostname.js @@ -16,7 +16,7 @@ define(function () { } function run(d) { - return (d.nodeinfo !== undefined ? d.nodeinfo.hostname.toLowerCase().includes(input.value.toLowerCase()) : ''); + return (d !== undefined ? d.hostname.toLowerCase().includes(input.value.toLowerCase()) : ''); } function setRefresh(f) { diff --git a/lib/forcegraph.js b/lib/forcegraph.js index 2cc5d34..dd49757 100644 --- a/lib/forcegraph.js +++ b/lib/forcegraph.js @@ -82,7 +82,7 @@ define(['d3-selection', 'd3-force', 'd3-zoom', 'd3-drag', 'd3-timer', 'd3-ease', var n = force.find(e[0], e[1], NODE_RADIUS_SELECT); if (n !== undefined) { - router.fullUrl({ node: n.o.node.nodeinfo.node_id }); + router.fullUrl({ node: n.o.node_id }); return; } @@ -121,16 +121,16 @@ define(['d3-selection', 'd3-force', 'd3-zoom', 'd3-drag', 'd3-timer', 'd3-ease', forceLink = d3Force.forceLink() .distance(function (d) { - if (d.o.vpn) { + if (d.o.type === 'vpn') { return 0; } return 75; }) .strength(function (d) { - if (d.o.vpn) { + if (d.o.type === 'vpn') { return 0.02; } - return Math.max(0.5, 1 / d.o.tq); + return Math.max(0.5, d.o.source_tq); }); var zoom = d3Zoom.zoom() @@ -197,13 +197,13 @@ define(['d3-selection', 'd3-force', 'd3-zoom', 'd3-drag', 'd3-timer', 'd3-ease', }); self.setData = function setData(data) { - intNodes = data.graph.nodes.map(function (d) { + intNodes = data.nodes.all.map(function (d) { var e; - if (d.id in dictNodes) { - e = dictNodes[d.id]; + if (d.node_id in dictNodes) { + e = dictNodes[d.node_id]; } else { e = {}; - dictNodes[d.id] = e; + dictNodes[d.node_id] = e; } e.o = d; @@ -211,12 +211,13 @@ define(['d3-selection', 'd3-force', 'd3-zoom', 'd3-drag', 'd3-timer', 'd3-ease', return e; }); - intLinks = data.graph.links.map(function (d) { + intLinks = data.links.map(function (d) { var e = {}; e.o = d; - e.source = dictNodes[d.source.id]; - e.target = dictNodes[d.target.id]; - e.color = linkScale(1 / d.tq); + e.source = dictNodes[d.source.node_id]; + e.target = dictNodes[d.target.node_id]; + e.color = linkScale(d.source_tq); + e.color_to = linkScale(d.target_tq); return e; }); @@ -239,10 +240,10 @@ define(['d3-selection', 'd3-force', 'd3-zoom', 'd3-drag', 'd3-timer', 'd3-ease', moveTo(function calcToNode() { for (var i = 0; i < intNodes.length; i++) { var n = intNodes[i]; - if (n.o.node.nodeinfo.node_id !== d.nodeinfo.node_id) { + if (n.o.node_id !== d.node_id) { continue; } - draw.setHighlight({ type: 'node', o: n.o.node }); + draw.setHighlight({ type: 'node', o: n.o }); return [n.x, n.y, (ZOOM_MAX + 1) / 2]; } return [0, 0, (ZOOM_MIN + 1) / 2]; diff --git a/lib/forcegraph/draw.js b/lib/forcegraph/draw.js index 62b0eff..c10c4d1 100644 --- a/lib/forcegraph/draw.js +++ b/lib/forcegraph/draw.js @@ -21,13 +21,13 @@ define(['helper'], function (helper) { function drawDetailNode(d) { if (transform.k > 1) { ctx.beginPath(); - helper.positionClients(ctx, d, Math.PI, d.o.node.statistics.clients, 15); + helper.positionClients(ctx, d, Math.PI, d.o.clients, 15); ctx.fillStyle = clientColor; ctx.fill(); ctx.beginPath(); var name = d.o.node_id; - if (d.o.node && d.o.node.nodeinfo) { - name = d.o.node.nodeinfo.hostname; + if (d.o) { + name = d.o.hostname; } ctx.textAlign = 'center'; ctx.fillStyle = labelColor; @@ -36,7 +36,7 @@ define(['helper'], function (helper) { } function drawHighlightNode(d) { - if (highlight && highlight.type === 'node' && d.o.node === highlight.o) { + if (highlight && highlight.type === 'node' && d.o === highlight.o) { ctx.arc(d.x, d.y, NODE_RADIUS * 1.5, 0, 2 * Math.PI); ctx.fillStyle = highlightColor; ctx.fill(); @@ -76,7 +76,7 @@ define(['helper'], function (helper) { var zero = transform.invert([0, 0]); var area = transform.invert([width, height]); if (d.source.x < zero[0] && d.target.x < zero[0] || d.source.y < zero[1] && d.target.y < zero[1] || - d.source.x > area[0] && d.target.x > area[0] || d.source.y > area[1] && d.target.y > area[1]) { + d.source.x > area[0] && d.target.x > area[0] || d.source.y > area[1] && d.target.y > area[1]) { return; } ctx.beginPath(); @@ -85,9 +85,13 @@ define(['helper'], function (helper) { to = drawHighlightLink(d, to); + var grd = ctx.createLinearGradient(d.source.x, d.source.y, d.target.x, d.target.y); + grd.addColorStop(0.45, d.color); + grd.addColorStop(0.55, d.color_to); + ctx.lineTo(to[0], to[1]); - ctx.strokeStyle = d.color; - if (d.o.vpn) { + ctx.strokeStyle = grd; + if (d.o.type === 'vpn') { ctx.globalAlpha = 0.2; ctx.lineWidth = 1.5; } else { diff --git a/lib/gui.js b/lib/gui.js index d001d5f..a8faab2 100644 --- a/lib/gui.js +++ b/lib/gui.js @@ -80,7 +80,7 @@ function (d3Interpolate, Map, Sidebar, Tabs, Container, Legend, Linklist, var title = new Title(config); var header = new Container('header'); - var infobox = new Infobox(config, sidebar, router); + var infobox = new Infobox(config, sidebar, router, linkScale); var tabs = new Tabs(); var overview = new Container(); var legend = new Legend(config, language); @@ -94,6 +94,7 @@ function (d3Interpolate, Map, Sidebar, Tabs, Container, Legend, Linklist, fanoutUnfiltered.add(legend); fanoutUnfiltered.add(newnodeslist); fanoutUnfiltered.add(lostnodeslist); + fanoutUnfiltered.add(infobox); fanout.add(nodelist); fanout.add(linklist); fanout.add(statistics); diff --git a/lib/infobox/link.js b/lib/infobox/link.js index 017e5dc..8457c9c 100644 --- a/lib/infobox/link.js +++ b/lib/infobox/link.js @@ -1,53 +1,76 @@ -define(['helper'], function (helper) { +define(['helper', 'snabbdom'], function (helper, V) { 'use strict'; + V = V.default; function showStatImg(o, d, time) { var subst = {}; subst['{SOURCE_ID}'] = d.source.node_id; - subst['{SOURCE_NAME}'] = d.source.node.nodeinfo.hostname.replace(/[^a-z0-9\-]/ig, '_'); + subst['{SOURCE_NAME}'] = d.source.hostname.replace(/[^a-z0-9\-]/ig, '_'); subst['{TARGET_ID}'] = d.target.node_id; - subst['{TARGET_NAME}'] = d.target.node.nodeinfo.hostname.replace(/[^a-z0-9\-]/ig, '_'); + subst['{TARGET_NAME}'] = d.target.hostname.replace(/[^a-z0-9\-]/ig, '_'); subst['{TIME}'] = time; subst['{LOCALE}'] = _.locale(); - return helper.showStat(o, subst); + return helper.showStat(V, o, subst); } - return function (config, el, router, d) { - var h2 = document.createElement('h2'); - var a1 = document.createElement('a'); - a1.href = router.generateLink({ node: d.source.node_id }); - a1.textContent = d.source.node.nodeinfo.hostname; - h2.appendChild(a1); + return function (config, el, router, d, linkScale) { + var self = this; + var header = document.createElement('div'); + var table = document.createElement('table'); + var images = document.createElement('div'); + el.appendChild(header); + el.appendChild(table); + el.appendChild(images); - var arrow = document.createElement('span'); - arrow.classList.add('ion-arrow-right-c'); - h2.appendChild(arrow); + self.render = function render() { + var children = []; + var headers = []; + headers.push(V.h('h2', [ + V.h('a', { + props: { href: router.generateLink({ node: d.source.node_id }) } + }, d.source.hostname), + V.h('span', ' - '), + V.h('a', { + props: { href: router.generateLink({ node: d.target.node_id }) } + }, d.target.hostname) + ])); - var a2 = document.createElement('a'); - a2.href = router.generateLink({ node: d.target.node_id }); - a2.textContent = d.target.node.nodeinfo.hostname; - h2.appendChild(a2); - el.appendChild(h2); + header = V.patch(header, V.h('div', headers)); - var attributes = document.createElement('table'); - attributes.classList.add('attributes'); + children.push(helper.attributeEntry(V, 'node.connectionType', d.type)); + children.push(helper.attributeEntry(V, 'node.tq', V.h('span', + { + style: + { + color: linkScale((d.source_tq + d.target_tq) / 2) + } + }, helper.showTq(d.source_tq) + ' - ' + helper.showTq(d.target_tq)))); + children.push(helper.attributeEntry(V, 'node.distance', helper.showDistance(d))); + children.push(helper.attributeEntry(V, 'node.hardware', + helper.dictGet(d.source, ['model']) + ' – ' + helper.dictGet(d.target, ['model'])) + ); - helper.attributeEntry(attributes, 'node.tq', helper.showTq(d)); - helper.attributeEntry(attributes, 'node.distance', helper.showDistance(d)); - var hw1 = helper.dictGet(d.source.node.nodeinfo, ['hardware', 'model']); - var hw2 = helper.dictGet(d.target.node.nodeinfo, ['hardware', 'model']); - helper.attributeEntry(attributes, 'node.hardware', hw1 + ' – ' + hw2); + var elNew = V.h('table', children); + table = V.patch(table, elNew); + table.elm.classList.add('attributes'); - el.appendChild(attributes); + if (config.linkInfos) { + var time = d.target.lastseen.format('DDMMYYYYHmmss'); + var img = []; + config.linkInfos.forEach(function (linkInfo) { + img.push(V.h('h4', linkInfo.name)); + img.push(showStatImg(linkInfo, d, time)); + }); + images = V.patch(images, V.h('div', img)); + } + }; - if (config.linkInfos) { - var time = d.target.node.lastseen.format('DDMMYYYYHmmss'); - config.linkInfos.forEach(function (linkInfo) { - var h4 = document.createElement('h4'); - h4.textContent = linkInfo.name; - el.appendChild(h4); - el.appendChild(showStatImg(linkInfo, d, time)); + self.setData = function setData(data) { + d = data.links.find(function (a) { + return a.id === d.id; }); - } + self.render(); + }; + return self; }; }); diff --git a/lib/infobox/main.js b/lib/infobox/main.js index e436efd..564c794 100644 --- a/lib/infobox/main.js +++ b/lib/infobox/main.js @@ -1,9 +1,11 @@ -define(['infobox/link', 'infobox/node', 'infobox/location'], function (link, node, location) { +define(['infobox/link', 'infobox/node', 'infobox/location'], function (Link, Node, location) { 'use strict'; - return function (config, sidebar, router) { + return function (config, sidebar, router, linkScale) { var self = this; var el; + var node; + var link; function destroy() { if (el && el.parentNode) { @@ -38,12 +40,14 @@ define(['infobox/link', 'infobox/node', 'infobox/location'], function (link, nod self.gotoNode = function gotoNode(d, gateways) { create(); - node(config, el, router, d, gateways); + node = new Node(config, el, router, d, linkScale, gateways); + node.render(); }; self.gotoLink = function gotoLink(d) { create(); - link(config, el, router, d); + link = new Link(config, el, router, d, linkScale); + link.render(); }; self.gotoLocation = function gotoLocation(d) { @@ -51,6 +55,16 @@ define(['infobox/link', 'infobox/node', 'infobox/location'], function (link, nod location(config, el, router, d); }; + self.setData = function setData(d) { + if (typeof node === 'object') { + node.setData(d); + } + if (typeof link === 'object') { + link.setData(d); + } + }; + + return self; }; }); diff --git a/lib/infobox/node.js b/lib/infobox/node.js index ce13df9..edddd68 100644 --- a/lib/infobox/node.js +++ b/lib/infobox/node.js @@ -8,35 +8,34 @@ define(['sorttable', 'snabbdom', 'd3-interpolate', 'moment', 'helper'], return undefined; } - return function (el) { - var a = document.createElement('a'); - a.textContent = Number(d.nodeinfo.location.latitude.toFixed(6)) + ', ' + Number(d.nodeinfo.location.longitude.toFixed(6)); - a.href = 'geo:' + d.nodeinfo.location.latitude + ',' + d.nodeinfo.location.longitude; - el.appendChild(a); - }; + return V.h('td', + V.h('a', + { props: { href: 'geo:' + d.location.latitude + ',' + d.location.longitude } }, + Number(d.location.latitude.toFixed(6)) + ', ' + Number(d.location.longitude.toFixed(6)) + ) + ); } function showStatus(d) { - return function (el) { - el.classList.add(d.flags.unseen ? 'unseen' : (d.flags.online ? 'online' : 'offline')); - el.textContent = _.t((d.flags.online ? 'node.lastOnline' : 'node.lastOffline'), { + return V.h('td', + { props: { className: d.is_unseen ? 'unseen' : (d.is_online ? 'online' : 'offline') } }, + _.t((d.is_online ? 'node.lastOnline' : 'node.lastOffline'), { time: d.lastseen.fromNow(), date: d.lastseen.format('DD.MM.YYYY, H:mm:ss') - }); - }; + })); } function showFirmware(d) { return [ - helper.dictGet(d.nodeinfo, ['software', 'firmware', 'release']), - helper.dictGet(d.nodeinfo, ['software', 'firmware', 'base']) + helper.dictGet(d, ['firmware', 'release']), + helper.dictGet(d, ['firmware', 'base']) ].filter(function (n) { return n !== null; }).join(' / ') || undefined; } function showSite(d, config) { - var site = helper.dictGet(d.nodeinfo, ['system', 'site_code']); + var site = helper.dictGet(d, ['site_code']); var rt = site; if (config.siteNames) { config.siteNames.forEach(function (t) { @@ -49,11 +48,11 @@ define(['sorttable', 'snabbdom', 'd3-interpolate', 'moment', 'helper'], } function showUptime(d) { - if (!('uptime' in d.statistics)) { + if (!('uptime' in d)) { return undefined; } - return moment.duration(d.statistics.uptime, 'seconds').humanize(); + return moment.duration(d.uptime, 'seconds').humanize(); } function showFirstseen(d) { @@ -65,101 +64,89 @@ define(['sorttable', 'snabbdom', 'd3-interpolate', 'moment', 'helper'], } function showClients(d) { - if (!d.flags.online) { + if (!d.is_online) { return undefined; } - return function (el) { - el.appendChild(document.createTextNode(d.statistics.clients > 0 ? d.statistics.clients : _.t('none'))); - el.appendChild(document.createElement('br')); + var clients = [ + d.clients > 0 ? d.clients : _.t('none'), + V.h('br') + ]; - var span = document.createElement('span'); - span.classList.add('clients'); - span.innerHTML = ''.repeat(d.statistics.clients); - el.appendChild(span); - }; + for (var i = 0; i < d.clients; i++) { + clients.push(V.h('i', { props: { className: 'ion-person' } })); + } + return V.h('td', clients); } function showIPs(d) { - var ips = helper.dictGet(d.nodeinfo, ['network', 'addresses']); + var ips = helper.dictGet(d, ['network', 'addresses']); if (ips === null) { return undefined; } ips.sort(); - return function (el) { - ips.forEach(function (ip, i) { - var link = !ip.startsWith('fe80:'); + var string = []; + ips.forEach(function (ip, i) { + var link = !ip.startsWith('fe80:'); - if (i > 0) { - el.appendChild(document.createElement('br')); - } + if (i > 0) { + string.push(V.h('br')); + } - if (link) { - var a = document.createElement('a'); - a.href = 'http://[' + ip + ']/'; - a.textContent = ip; - el.appendChild(a); - } else { - el.appendChild(document.createTextNode(ip)); - } - }); - }; + if (link) { + string.push(V.h('a', { props: { href: 'http://[' + ip + ']/', target: '_blank' } }, ip)); + } else { + string.push(ip); + } + }); + return V.h('td', string); } function showBar(v, width, warning) { - var span = document.createElement('span'); - span.classList.add('bar'); - - var bar = document.createElement('span'); - bar.style.width = (width * 100) + '%'; - if (warning) { - span.classList.add('warning'); - } - span.appendChild(bar); - - var label = document.createElement('label'); - label.textContent = v; - span.appendChild(label); - - return span; + return V.h('span', + { props: { className: 'bar' + (warning ? ' warning' : '') } }, + [ + V.h('span', + { + style: { width: (width * 100) + '%' } + }), + V.h('label', v) + ] + ); } function showLoad(d) { - if (!('loadavg' in d.statistics)) { + if (!('loadavg' in d)) { return undefined; } - return function (el) { - var value = d.statistics.loadavg.toFixed(2); - var width = d.statistics.loadavg % 1; - var warning = false; - if (d.statistics.loadavg >= d.nodeinfo.hardware.nproc) { - warning = true; - } - el.appendChild(showBar(value, width, warning)); - }; + var value = d.loadavg.toFixed(2); + var width = d.loadavg % 1; + var warning = false; + if (d.loadavg >= d.nproc) { + warning = true; + } + return showBar(value, width, warning); } function showRAM(d) { - if (!('memory_usage' in d.statistics)) { + if (!('memory_usage' in d)) { return undefined; } - return function (el) { - var value = Math.round(d.statistics.memory_usage * 100) + ' %'; - var width = d.statistics.memory_usage; - var warning = false; - if (d.statistics.memory_usage >= 0.8) { - warning = true; - } - el.appendChild(showBar(value, width, warning)); - }; + var value = Math.round(d.memory_usage * 100) + ' %'; + var width = d.memory_usage; + var warning = false; + if (d.memory_usage >= 0.8) { + warning = true; + } + return showBar(value, width, warning); } function showAutoupdate(d) { - var au = helper.dictGet(d.nodeinfo, ['software', 'autoupdater']); + var au = helper.dictGet(d, ['autoupdater']); if (!au) { return undefined; } @@ -169,16 +156,14 @@ define(['sorttable', 'snabbdom', 'd3-interpolate', 'moment', 'helper'], function showStatImg(o, d) { var subst = {}; - subst['{NODE_ID}'] = d.nodeinfo.node_id; - subst['{NODE_NAME}'] = d.nodeinfo.hostname.replace(/[^a-z0-9\-]/ig, '_'); + subst['{NODE_ID}'] = d.node_id; + subst['{NODE_NAME}'] = d.hostname.replace(/[^a-z0-9\-]/ig, '_'); subst['{TIME}'] = d.lastseen.format('DDMMYYYYHmmss'); subst['{LOCALE}'] = _.locale(); - return helper.showStat(o, subst); + return helper.showStat(V, o, subst); } - return function (config, el, router, d, gateways) { - var linkScale = d3Interpolate.interpolate('#F02311', '#04C714'); - + return function (config, el, router, d, linkScale, gateways) { function renderNeighbourRow(n) { var icons = []; icons.push(V.h('span', { props: { className: n.incoming ? 'ion-arrow-left-c' : 'ion-arrow-right-c' } })); @@ -189,107 +174,122 @@ define(['sorttable', 'snabbdom', 'd3-interpolate', 'moment', 'helper'], var name = V.h('a', { props: { className: 'online', - href: router.generateLink({ node: n.node.nodeinfo.node_id }) + href: router.generateLink({ node: n.node.node_id }) }, on: { click: function (e) { - router.fullUrl({ node: n.node.nodeinfo.node_id }, e); + router.fullUrl({ node: n.node.node_id }, e); } } - }, n.node.nodeinfo.hostname); + }, n.node.hostname); var td1 = V.h('td', icons); var td2 = V.h('td', name); - var td3 = V.h('td', (n.node.statistics.clients ? n.node.statistics.clients.toString() : '0')); - var td4 = V.h('td', { style: { color: linkScale(1 / n.link.tq) } }, helper.showTq(n.link)); + var td3 = V.h('td', (n.node.clients ? n.node.clients.toString() : '0')); + var td4 = V.h('td', { style: { color: linkScale((n.link.source_tq + n.link.target_tq) / 2) } }, helper.showTq(n.link.source_tq) + ' - ' + helper.showTq(n.link.target_tq)); var td5 = V.h('td', helper.showDistance(n.link)); return V.h('tr', [td1, td2, td3, td4, td5]); } - var h2 = document.createElement('h2'); - h2.textContent = d.nodeinfo.hostname; - el.appendChild(h2); + var self = this; + var header = document.createElement('h2'); + var table = document.createElement('table'); + var images = document.createElement('div'); + var neighbours = document.createElement('h3'); + var headings = [{ + name: '' + }, { + name: 'node.nodes', + sort: function (a, b) { + return a.node.hostname.localeCompare(b.node.hostname); + }, + reverse: false + }, { + name: 'node.clients', + class: 'ion-people', + sort: function (a, b) { + return ('clients' in a.node ? a.node.clients : -1) - + ('clients' in b.node ? b.node.clients : -1); + }, + reverse: true + }, { + name: 'node.tq', + class: 'ion-connection-bars', + sort: function (a, b) { + return a.link.source_tq - b.link.source_tq; + }, + reverse: true + }, { + name: 'node.distance', + class: 'ion-arrow-resize', + sort: function (a, b) { + return (a.link.distance === undefined ? -1 : a.link.distance) - + (b.link.distance === undefined ? -1 : b.link.distance); + }, + reverse: true + }]; + var tableNeighbour = new SortTable(headings, 1, renderNeighbourRow); - var attributes = document.createElement('table'); - attributes.classList.add('attributes'); + el.appendChild(header); + el.appendChild(table); + el.appendChild(neighbours); + el.appendChild(tableNeighbour.el); + el.appendChild(images); - helper.attributeEntry(attributes, 'node.status', showStatus(d)); - helper.attributeEntry(attributes, 'node.gateway', d.flags.gateway ? 'ja' : null); - helper.attributeEntry(attributes, 'node.coordinates', showGeoURI(d)); + self.render = function render() { + V.patch(header, V.h('h2', d.hostname)); - if (config.nodeInfobox && config.nodeInfobox.contact) { - helper.attributeEntry(attributes, 'node.contact', helper.dictGet(d.nodeinfo, ['owner', 'contact'])); - } + var children = []; - helper.attributeEntry(attributes, 'node.hardware', helper.dictGet(d.nodeinfo, ['hardware', 'model'])); - helper.attributeEntry(attributes, 'node.primaryMac', helper.dictGet(d.nodeinfo, ['network', 'mac'])); - helper.attributeEntry(attributes, 'node.id', helper.dictGet(d.nodeinfo, ['node_id'])); - helper.attributeEntry(attributes, 'node.firmware', showFirmware(d)); - helper.attributeEntry(attributes, 'node.site', showSite(d, config)); - helper.attributeEntry(attributes, 'node.uptime', showUptime(d)); - helper.attributeEntry(attributes, 'node.firstSeen', showFirstseen(d)); - if (config.nodeInfobox && config.nodeInfobox.hardwareUsage) { - helper.attributeEntry(attributes, 'node.systemLoad', showLoad(d)); - helper.attributeEntry(attributes, 'node.ram', showRAM(d)); - } - helper.attributeEntry(attributes, 'node.ipAddresses', showIPs(d)); - helper.attributeEntry(attributes, 'node.selectedGateway', gateways[helper.dictGet(d.statistics, ['gateway'])]); - helper.attributeEntry(attributes, 'node.update', showAutoupdate(d)); - helper.attributeEntry(attributes, 'node.clients', showClients(d)); + children.push(helper.attributeEntry(V, 'node.status', showStatus(d))); + children.push(helper.attributeEntry(V, 'node.gateway', d.is_gateway ? 'ja' : null)); + children.push(helper.attributeEntry(V, 'node.coordinates', showGeoURI(d))); - el.appendChild(attributes); + if (config.nodeInfobox && config.nodeInfobox.contact) { + children.push(helper.attributeEntry(V, 'node.contact', helper.dictGet(d, ['owner', 'contact']))); + } - if (d.neighbours.length > 0) { - var h3 = document.createElement('h3'); - h3.textContent = _.t('node.link', d.neighbours.length) + ' (' + d.neighbours.length + ')'; - el.appendChild(h3); + children.push(helper.attributeEntry(V, 'node.hardware', helper.dictGet(d, ['model']))); + children.push(helper.attributeEntry(V, 'node.primaryMac', helper.dictGet(d, ['network', 'mac']))); + children.push(helper.attributeEntry(V, 'node.firmware', showFirmware(d))); + children.push(helper.attributeEntry(V, 'node.site', showSite(d, config))); + children.push(helper.attributeEntry(V, 'node.uptime', showUptime(d))); + children.push(helper.attributeEntry(V, 'node.firstSeen', showFirstseen(d))); + if (config.nodeInfobox && config.nodeInfobox.hardwareUsage) { + children.push(helper.attributeEntry(V, 'node.systemLoad', showLoad(d))); + children.push(helper.attributeEntry(V, 'node.ram', showRAM(d))); + } + children.push(helper.attributeEntry(V, 'node.ipAddresses', showIPs(d))); + children.push(helper.attributeEntry(V, 'node.selectedGateway', gateways[helper.dictGet(d, ['gateway'])])); + children.push(helper.attributeEntry(V, 'node.update', showAutoupdate(d))); + children.push(helper.attributeEntry(V, 'node.clients', showClients(d))); - var headings = [{ - name: '' - }, { - name: 'node.nodes', - sort: function (a, b) { - return a.node.nodeinfo.hostname.localeCompare(b.node.nodeinfo.hostname); - }, - reverse: false - }, { - name: 'node.clients', - class: 'ion-people', - sort: function (a, b) { - return ('clients' in a.node.statistics ? a.node.statistics.clients : -1) - - ('clients' in b.node.statistics ? b.node.statistics.clients : -1); - }, - reverse: true - }, { - name: 'node.tq', - class: 'ion-connection-bars', - sort: function (a, b) { - return a.link.tq - b.link.tq; - }, - reverse: true - }, { - name: 'node.distance', - class: 'ion-arrow-resize', - sort: function (a, b) { - return (a.link.distance === undefined ? -1 : a.link.distance) - - (b.link.distance === undefined ? -1 : b.link.distance); - }, - reverse: true - }]; + var elNew = V.h('table', children); + table = V.patch(table, elNew); + table.elm.classList.add('attributes'); - var table = new SortTable(headings, 1, renderNeighbourRow); - table.setData(d.neighbours); - table.el.elm.classList.add('node-links'); - el.appendChild(table.el.elm); - } + V.patch(neighbours, V.h('h3', _.t('node.link', d.neighbours.length) + ' (' + d.neighbours.length + ')')); + if (d.neighbours.length > 0) { + tableNeighbour.setData(d.neighbours); + tableNeighbour.el.elm.classList.add('node-links'); + } - if (config.nodeInfos) { - config.nodeInfos.forEach(function (nodeInfo) { - var h4 = document.createElement('h4'); - h4.textContent = nodeInfo.name; - el.appendChild(h4); - el.appendChild(showStatImg(nodeInfo, d)); + if (config.nodeInfos) { + var img = []; + config.nodeInfos.forEach(function (nodeInfo) { + img.push(V.h('h4', nodeInfo.name)); + img.push(showStatImg(nodeInfo, d)); + }); + images = V.patch(images, V.h('div', img)); + } + }; + + self.setData = function setData(data) { + d = data.nodes.all.find(function (a) { + return a.node_id === d.node_id; }); - } + self.render(); + }; + return self; }; }); diff --git a/lib/legend.js b/lib/legend.js index fca8a4f..530accf 100644 --- a/lib/legend.js +++ b/lib/legend.js @@ -10,10 +10,10 @@ define(['helper'], function (helper) { var totalNodes = helper.sum(d.nodes.all.map(helper.one)); var totalOnlineNodes = helper.sum(d.nodes.all.filter(helper.online).map(helper.one)); var totalClients = helper.sum(d.nodes.all.filter(helper.online).map(function (n) { - return n.statistics.clients ? n.statistics.clients : 0; + return n.clients ? n.clients : 0; })); var totalGateways = helper.sum(d.nodes.all.filter(helper.online).filter(function (n) { - return n.flags.gateway; + return n.is_gateway; }).map(helper.one)); stats.textContent = _.t('sidebar.nodes', { total: totalNodes, online: totalOnlineNodes }) + ' ' + diff --git a/lib/linklist.js b/lib/linklist.js index bb8eb75..d96da21 100644 --- a/lib/linklist.js +++ b/lib/linklist.js @@ -2,7 +2,7 @@ define(['sorttable', 'snabbdom', 'helper'], function (SortTable, V, helper) { 'use strict'; function linkName(d) { - return (d.source.node ? d.source.node.nodeinfo.hostname : d.source.id) + ' – ' + d.target.node.nodeinfo.hostname; + return (d.source ? d.source.hostname : d.source.id) + ' – ' + d.target.hostname; } var headings = [{ @@ -15,7 +15,7 @@ define(['sorttable', 'snabbdom', 'helper'], function (SortTable, V, helper) { name: 'node.tq', class: 'ion-connection-bars', sort: function (a, b) { - return a.tq - b.tq; + return (a.source_tq + a.target_tq) / 2 - (b.source_tq + b.target_tq) / 2; }, reverse: true }, { @@ -44,7 +44,7 @@ define(['sorttable', 'snabbdom', 'helper'], function (SortTable, V, helper) { }, linkName(d))]; var td1 = V.h('td', td1Content); - var td2 = V.h('td', { style: { color: linkScale(1 / d.tq) } }, helper.showTq(d)); + var td2 = V.h('td', { style: { color: linkScale((d.source_tq + d.target_tq) / 2) } }, helper.showTq(d.source_tq) + ' - ' + helper.showTq(d.target_tq)); var td3 = V.h('td', helper.showDistance(d)); return V.h('tr', [td1, td2, td3]); @@ -59,7 +59,7 @@ define(['sorttable', 'snabbdom', 'helper'], function (SortTable, V, helper) { }; this.setData = function setData(d) { - table.setData(d.graph.links); + table.setData(d.links); }; }; }); diff --git a/lib/main.js b/lib/main.js index 887dfbc..5c8b569 100644 --- a/lib/main.js +++ b/lib/main.js @@ -4,44 +4,19 @@ define(['moment', 'utils/router', 'leaflet', 'gui', 'helper', 'utils/language'], return function (config) { function handleData(data) { - var dataNodes = {}; - dataNodes.nodes = []; - var dataGraph = {}; - dataGraph.batadv = {}; - dataGraph.batadv.nodes = []; - dataGraph.batadv.links = []; + var timestamp; + var nodes = []; + var links = []; var gateways = {}; - function rearrangeLinks(d) { - d.source += dataGraph.batadv.nodes.length; - d.target += dataGraph.batadv.nodes.length; - } - for (var i = 0; i < data.length; ++i) { - var vererr; - if (i % 2) { - if (data[i].version !== 1) { - vererr = 'Unsupported graph version: ' + data[i].version; - console.error(vererr); // silent fail - } else { - data[i].batadv.links.forEach(rearrangeLinks); - dataGraph.batadv.nodes = dataGraph.batadv.nodes.concat(data[i].batadv.nodes); - dataGraph.batadv.links = dataGraph.batadv.links.concat(data[i].batadv.links); - dataGraph.timestamp = data[i].timestamp; - } - } else if (data[i].version !== 2) { - vererr = 'Unsupported nodes version: ' + data[i].version; - console.error(vererr); // silent fail - } else { - dataNodes.nodes = dataNodes.nodes.concat(data[i].nodes); - dataNodes.timestamp = data[i].timestamp; - } + nodes = nodes.concat(data[i].nodes); + timestamp = data[i].timestamp; + links = links.concat(data[i].links.filter(function (d) { + return d.source !== undefined; + })); } - var nodes = dataNodes.nodes.filter(function (d) { - return 'firstseen' in d && 'lastseen' in d; - }); - nodes.forEach(function (node) { node.firstseen = moment.utc(node.firstseen).local(); node.lastseen = moment.utc(node.lastseen).local(); @@ -53,44 +28,12 @@ define(['moment', 'utils/router', 'leaflet', 'gui', 'helper', 'utils/language'], var newnodes = helper.limit('firstseen', age, helper.sortByKey('firstseen', nodes).filter(helper.online)); var lostnodes = helper.limit('lastseen', age, helper.sortByKey('lastseen', nodes).filter(helper.offline)); - var graphnodes = {}; - - dataNodes.nodes.forEach(function (d) { - graphnodes[d.nodeinfo.node_id] = d; - }); - - var graph = dataGraph.batadv; - - graph.nodes.forEach(function (d) { - if (d.node_id in graphnodes) { - d.node = graphnodes[d.node_id]; - if (d.unseen) { - d.node.flags.online = true; - d.node.flags.unseen = true; - } - } - }); - - graph.links.forEach(function (d) { - d.source = graph.nodes[d.source]; - - if (graph.nodes[d.target].node) { - d.target = graph.nodes[d.target]; - } else { - d.target = undefined; - } - }); - - var links = graph.links.filter(function (d) { - return d.target !== undefined; - }); - nodes.forEach(function (d) { d.neighbours = []; - if (d.flags.gateway && d.nodeinfo.network.mesh) { - var mesh = d.nodeinfo.network.mesh; + if (d.is_gateway && d.network.mesh) { + var mesh = d.network.mesh; mesh[Object.keys(mesh)[0]].interfaces.tunnel.forEach(function (mac) { - gateways[mac] = d.nodeinfo.hostname; + gateways[mac] = d.hostname; }); } }); @@ -98,16 +41,24 @@ define(['moment', 'utils/router', 'leaflet', 'gui', 'helper', 'utils/language'], links.forEach(function (d) { var ids; - ids = [d.source.node.nodeinfo.node_id, d.target.node.nodeinfo.node_id]; - d.source.node.neighbours.push({ node: d.target.node, link: d, incoming: false }); - d.target.node.neighbours.push({ node: d.source.node, link: d, incoming: true }); + d.source = nodes.find(function (a) { + return a.node_id === d.source; + }); + + d.target = nodes.find(function (a) { + return a.node_id === d.target; + }); + + ids = [d.source.node_id, d.target.node_id]; + d.source.neighbours.push({ node: d.target, link: d, incoming: false }); + d.target.neighbours.push({ node: d.source, link: d, incoming: true }); d.id = ids.join('-'); try { d.latlngs = []; - d.latlngs.push(L.latLng(d.source.node.nodeinfo.location.latitude, d.source.node.nodeinfo.location.longitude)); - d.latlngs.push(L.latLng(d.target.node.nodeinfo.location.latitude, d.target.node.nodeinfo.location.longitude)); + d.latlngs.push(L.latLng(d.source.location.latitude, d.source.location.longitude)); + d.latlngs.push(L.latLng(d.target.location.latitude, d.target.location.longitude)); d.distance = d.latlngs[0].distanceTo(d.latlngs[1]); } catch (e) { @@ -116,20 +67,21 @@ define(['moment', 'utils/router', 'leaflet', 'gui', 'helper', 'utils/language'], }); links.sort(function (a, b) { - return b.tq - a.tq; + return b.source_tq - a.source_tq; }); return { now: now, - timestamp: moment.utc(dataNodes.timestamp).local(), + timestamp: moment.utc(timestamp).local(), nodes: { all: nodes, new: newnodes, lost: lostnodes }, + links: links, graph: { - links: links, - nodes: graph.nodes + links: [], + nodes: [] }, gateways: gateways }; @@ -146,8 +98,7 @@ define(['moment', 'utils/router', 'leaflet', 'gui', 'helper', 'utils/language'], for (var i in config.dataPath) { if (config.dataPath.hasOwnProperty(i)) { - urls.push(config.dataPath[i] + 'nodes.json'); - urls.push(config.dataPath[i] + 'graph.json'); + urls.push(config.dataPath[i] + 'meshviewer.json'); } } diff --git a/lib/map.js b/lib/map.js index d82c4fd..9974c1f 100644 --- a/lib/map.js +++ b/lib/map.js @@ -142,8 +142,8 @@ define(['map/clientlayer', 'map/labellayer', 'map/button', 'leaflet'], var m; if (highlight !== undefined) { - if (highlight.type === 'node' && nodeDict[highlight.o.nodeinfo.node_id]) { - m = nodeDict[highlight.o.nodeinfo.node_id]; + if (highlight.type === 'node' && nodeDict[highlight.o.node_id]) { + m = nodeDict[highlight.o.node_id]; m.setStyle({ color: 'orange', weight: 20, fillOpacity: 1, opacity: 0.7, className: 'stroke-first' }); } else if (highlight.type === 'link' && linkDict[highlight.o.id]) { m = linkDict[highlight.o.id]; diff --git a/lib/map/clientlayer.js b/lib/map/clientlayer.js index ac09e33..aa25553 100644 --- a/lib/map/clientlayer.js +++ b/lib/map/clientlayer.js @@ -5,8 +5,8 @@ define(['leaflet', 'rbush', 'helper'], return L.GridLayer.extend({ mapRTree: function mapRTree(d) { return { - minX: d.nodeinfo.location.latitude, minY: d.nodeinfo.location.longitude, - maxX: d.nodeinfo.location.latitude, maxY: d.nodeinfo.location.longitude, + minX: d.location.latitude, minY: d.location.longitude, + maxX: d.location.latitude, maxY: d.location.longitude, node: d }; }, @@ -17,7 +17,7 @@ define(['leaflet', 'rbush', 'helper'], // pre-calculate start angles this.data.all().forEach(function (n) { - n.startAngle = (parseInt(n.node.nodeinfo.node_id.substr(10, 2), 16) / 255) * 2 * Math.PI; + n.startAngle = (parseInt(n.node.node_id.substr(10, 2), 16) / 255) * 2 * Math.PI; }); this.redraw(); }, @@ -49,12 +49,12 @@ define(['leaflet', 'rbush', 'helper'], ctx.beginPath(); nodes.forEach(function (d) { - var p = map.project([d.node.nodeinfo.location.latitude, d.node.nodeinfo.location.longitude]); + var p = map.project([d.node.location.latitude, d.node.location.longitude]); p.x -= s.x; p.y -= s.y; - helper.positionClients(ctx, p, d.startAngle, d.node.statistics.clients, startDistance); + helper.positionClients(ctx, p, d.startAngle, d.node.clients, startDistance); }); ctx.fillStyle = 'rgba(220, 0, 103, 0.7)'; diff --git a/lib/map/labellayer.js b/lib/map/labellayer.js index 92b6550..78a4774 100644 --- a/lib/map/labellayer.js +++ b/lib/map/labellayer.js @@ -35,14 +35,14 @@ define(['leaflet', 'rbush', 'helper', 'moment'], return function (d) { var font = fontSize + 'px ' + bodyStyle.fontFamily; return { - position: L.latLng(d.nodeinfo.location.latitude, d.nodeinfo.location.longitude), - label: d.nodeinfo.hostname, + position: L.latLng(d.location.latitude, d.location.longitude), + label: d.hostname, offset: offset, fillStyle: fillStyle, height: fontSize * 1.2, font: font, stroke: stroke, - width: measureText(font, d.nodeinfo.hostname).width + width: measureText(font, d.hostname).width }; }; } @@ -78,18 +78,18 @@ define(['leaflet', 'rbush', 'helper', 'moment'], function mkMarker(dict, iconFunc, router) { return function (d) { - var m = L.circleMarker([d.nodeinfo.location.latitude, d.nodeinfo.location.longitude], iconFunc(d)); + var m = L.circleMarker([d.location.latitude, d.location.longitude], iconFunc(d)); m.resetStyle = function resetStyle() { m.setStyle(iconFunc(d)); }; m.on('click', function () { - router.fullUrl({ node: d.nodeinfo.node_id }); + router.fullUrl({ node: d.node_id }); }); - m.bindTooltip(d.nodeinfo.hostname); + m.bindTooltip(d.hostname); - dict[d.nodeinfo.node_id] = m; + dict[d.node_id] = m; return m; }; @@ -102,7 +102,7 @@ define(['leaflet', 'rbush', 'helper', 'moment'], return graph.map(function (d) { var opts = { - color: linkScale(1 / d.tq), + color: linkScale((d.source_tq + d.target_tq) / 2), weight: 4, opacity: 0.5, dashArray: 'none' @@ -114,7 +114,7 @@ define(['leaflet', 'rbush', 'helper', 'moment'], line.setStyle(opts); }; - line.bindTooltip(d.source.node.nodeinfo.hostname + ' – ' + d.target.node.nodeinfo.hostname + '
' + helper.showDistance(d) + ' / ' + helper.showTq(d) + ''); + line.bindTooltip(d.source.hostname + ' – ' + d.target.hostname + '
' + helper.showDistance(d) + ' / ' + helper.showTq(d.source_tq) + ' - ' + helper.showTq(d.target_tq) + ''); line.on('click', function () { router.fullUrl({ link: d.id }); }); @@ -151,7 +151,7 @@ define(['leaflet', 'rbush', 'helper', 'moment'], groupLines.clearLayers(); } - var lines = addLinksToMap(linkDict, linkScale, data.graph.links, router); + var lines = addLinksToMap(linkDict, linkScale, data.links, router); groupLines = L.featureGroup(lines).addTo(map); var nodesOnline = helper.subtract(data.nodes.all.filter(helper.online), data.nodes.new); diff --git a/lib/nodelist.js b/lib/nodelist.js index b16c9c3..392324a 100644 --- a/lib/nodelist.js +++ b/lib/nodelist.js @@ -3,9 +3,9 @@ define(['sorttable', 'snabbdom', 'helper'], function (SortTable, V, helper) { V = V.default; function getUptime(now, d) { - if (d.flags.online && 'uptime' in d.statistics) { - return Math.round(d.statistics.uptime); - } else if (!d.flags.online && 'lastseen' in d) { + if (d.is_online && 'uptime' in d) { + return Math.round(d.uptime); + } else if (!d.is_online && 'lastseen' in d) { return Math.round(-(now.unix() - d.lastseen.unix())); } return 0; @@ -31,7 +31,7 @@ define(['sorttable', 'snabbdom', 'helper'], function (SortTable, V, helper) { }, { name: 'node.nodes', sort: function (a, b) { - return a.nodeinfo.hostname.localeCompare(b.nodeinfo.hostname); + return a.hostname.localeCompare(b.hostname); }, reverse: false }, { @@ -52,8 +52,8 @@ define(['sorttable', 'snabbdom', 'helper'], function (SortTable, V, helper) { name: 'node.clients', class: 'ion-people', sort: function (a, b) { - return ('clients' in a.statistics ? a.statistics.clients : -1) - - ('clients' in b.statistics ? b.statistics.clients : -1); + return ('clients' in a ? a.clients : -1) - + ('clients' in b ? b.clients : -1); }, reverse: true }]; @@ -62,18 +62,18 @@ define(['sorttable', 'snabbdom', 'helper'], function (SortTable, V, helper) { function renderRow(d) { var td0Content = []; var td1Content = []; - var aClass = ['hostname', d.flags.online ? 'online' : 'offline']; + var aClass = ['hostname', d.is_online ? 'online' : 'offline']; td1Content.push(V.h('a', { props: { className: aClass.join(' '), - href: router.generateLink({ node: d.nodeinfo.node_id }) + href: router.generateLink({ node: d.node_id }) }, on: { click: function (e) { - router.fullUrl({ node: d.nodeinfo.node_id }, e); + router.fullUrl({ node: d.node_id }, e); } } - }, d.nodeinfo.hostname)); + }, d.hostname)); if (helper.hasLocation(d)) { td0Content.push(V.h('span', { props: { className: 'icon ion-location' } })); @@ -83,7 +83,7 @@ define(['sorttable', 'snabbdom', 'helper'], function (SortTable, V, helper) { var td1 = V.h('td', td1Content); var td2 = V.h('td', showUptime(d.uptime)); var td3 = V.h('td', d.neighbours.length); - var td4 = V.h('td', Number('clients' in d.statistics ? d.statistics.clients : 0).toFixed(0)); + var td4 = V.h('td', Number('clients' in d ? d.clients : 0).toFixed(0)); return V.h('tr', [td0, td1, td2, td3, td4]); } diff --git a/lib/proportions.js b/lib/proportions.js index 0c4eb15..611543b 100644 --- a/lib/proportions.js +++ b/lib/proportions.js @@ -15,11 +15,6 @@ define(['d3-interpolate', 'snabbdom', 'filters/genericnode', 'helper'], var gatewayTable; var siteTable; - - function showStatGlobal(o) { - return helper.showStat(o); - } - function count(nodes, key, f) { var dict = {}; @@ -86,19 +81,19 @@ define(['d3-interpolate', 'snabbdom', 'filters/genericnode', 'helper'], var nodeDict = {}; data.nodes.all.forEach(function (d) { - nodeDict[d.nodeinfo.node_id] = d; + nodeDict[d.node_id] = d; }); - var statusDict = count(nodes, ['flags', 'online'], function (d) { + var statusDict = count(nodes, ['is_online'], function (d) { return d ? 'online' : 'offline'; }); - var fwDict = count(nodes, ['nodeinfo', 'software', 'firmware', 'release']); - var hwDict = count(nodes, ['nodeinfo', 'hardware', 'model']); - var geoDict = count(nodes, ['nodeinfo', 'location'], function (d) { + var fwDict = count(nodes, ['firmware', 'release']); + var hwDict = count(nodes, ['model']); + var geoDict = count(nodes, ['location'], function (d) { return d && d.longitude && d.latitude ? _.t('yes') : _.t('no'); }); - var autoDict = count(nodes, ['nodeinfo', 'software', 'autoupdater'], function (d) { + var autoDict = count(nodes, ['autoupdater'], function (d) { if (d === null) { return null; } else if (d.enabled) { @@ -107,7 +102,7 @@ define(['d3-interpolate', 'snabbdom', 'filters/genericnode', 'helper'], return _.t('node.deactivated'); }); - var gatewayDict = count(nodes, ['statistics', 'gateway'], function (d) { + var gatewayDict = count(nodes, ['is_gateway'], function (d) { for (var mac in data.gateways) { if (data.gateways.hasOwnProperty(mac) && mac === d) { d = data.gateways[mac]; @@ -117,7 +112,7 @@ define(['d3-interpolate', 'snabbdom', 'filters/genericnode', 'helper'], return null; }); - var siteDict = count(nodes, ['nodeinfo', 'system', 'site_code'], function (d) { + var siteDict = count(nodes, ['nodeinfo', 'site_code'], function (d) { if (config.siteNames) { config.siteNames.forEach(function (t) { if (d === t.site) { @@ -158,7 +153,6 @@ define(['d3-interpolate', 'snabbdom', 'filters/genericnode', 'helper'], }; self.render = function render(el) { - var h2; self.renderSingle(el, 'node.status', statusTable); self.renderSingle(el, 'node.firmware', fwTable); self.renderSingle(el, 'node.hardware', hwTable); @@ -168,12 +162,14 @@ define(['d3-interpolate', 'snabbdom', 'filters/genericnode', 'helper'], self.renderSingle(el, 'node.site', siteTable); if (config.globalInfos) { + var images = document.createElement('div'); + el.appendChild(images); + var img = []; config.globalInfos.forEach(function (globalInfo) { - h2 = document.createElement('h2'); - h2.textContent = globalInfo.name; - el.appendChild(h2); - el.appendChild(showStatGlobal(globalInfo)); + img.push(V.h('h2', globalInfo.name)); + img.push(helper.showStat(V, globalInfo)); }); + V.patch(images, V.h('div', img)); } }; diff --git a/lib/simplenodelist.js b/lib/simplenodelist.js index ea2c6cf..89b4bda 100644 --- a/lib/simplenodelist.js +++ b/lib/simplenodelist.js @@ -38,18 +38,18 @@ define(['moment', 'snabbdom', 'helper'], function (moment, V, helper) { var td0Content = []; var td1Content = []; - var aClass = ['hostname', d.flags.online ? 'online' : 'offline']; + var aClass = ['hostname', d.is_online ? 'online' : 'offline']; td1Content.push(V.h('a', { props: { className: aClass.join(' '), - href: router.generateLink({ node: d.nodeinfo.node_id }) + href: router.generateLink({ node: d.node_id }) }, on: { click: function (e) { - router.fullUrl({ node: d.nodeinfo.node_id }, e); + router.fullUrl({ node: d.node_id }, e); } } - }, d.nodeinfo.hostname)); + }, d.hostname)); if (helper.hasLocation(d)) { td0Content.push(V.h('span', { props: { className: 'icon ion-location' } })); diff --git a/lib/title.js b/lib/title.js index 1602c08..b3855a3 100644 --- a/lib/title.js +++ b/lib/title.js @@ -17,11 +17,11 @@ define(function () { }; this.gotoNode = function gotoNode(d) { - setTitle(d.nodeinfo.hostname); + setTitle(d.hostname); }; this.gotoLink = function gotoLink(d) { - setTitle((d.source.node ? d.source.node.nodeinfo.hostname : d.source.id) + ' \u21D4 ' + d.target.node.nodeinfo.hostname); + setTitle((d.source ? d.source.hostname : d.source.id) + ' \u21D4 ' + d.target.hostname); }; this.gotoLocation = function gotoLocation() { diff --git a/lib/utils/helper.js b/lib/utils/helper.js index 3587542..6264990 100644 --- a/lib/utils/helper.js +++ b/lib/utils/helper.js @@ -73,30 +73,29 @@ define({ }, /* Helpers working with nodes */ - offline: function offline(d) { - return !d.flags.online; + return !d.is_online; }, online: function online(d) { - return d.flags.online; + return d.is_online; }, hasLocation: function hasLocation(d) { - return 'location' in d.nodeinfo && - Math.abs(d.nodeinfo.location.latitude) < 90 && - Math.abs(d.nodeinfo.location.longitude) < 180; + return 'location' in d && + Math.abs(d.location.latitude) < 90 && + Math.abs(d.location.longitude) < 180; }, subtract: function subtract(a, b) { var ids = {}; b.forEach(function (d) { - ids[d.nodeinfo.node_id] = true; + ids[d.node_id] = true; }); return a.filter(function (d) { - return !(d.nodeinfo.node_id in ids); + return !(d.node_id in ids); }); }, @@ -111,59 +110,41 @@ define({ }, showTq: function showTq(d) { - return (1 / d.tq * 100).toFixed(0) + '%'; + return (d * 100).toFixed(0) + '%'; }, - attributeEntry: function attributeEntry(el, label, value) { + attributeEntry: function attributeEntry(V, label, value) { if (value === null || value === undefined) { return ''; } - var tr = document.createElement('tr'); - var th = document.createElement('th'); - th.textContent = _.t(label); - tr.appendChild(th); - - var td = document.createElement('td'); - - if (typeof value === 'function') { - value(td); - } else { - td.appendChild(document.createTextNode(value)); + if (typeof value !== 'object') { + value = V.h('td', value); } - tr.appendChild(td); - - el.appendChild(tr); - - return td; + return V.h('tr', [ + V.h('th', _.t(label)), + value + ]); }, - showStat: function showStat(o, subst) { + showStat: function showStat(V, o, subst) { var content; subst = typeof subst !== 'undefined' ? subst : {}; - content = document.createElement('img'); - content.src = require('helper').listReplace(o.image, subst); - - var p = document.createElement('p'); + content = V.h('img', { attrs: { src: require('helper').listReplace(o.image, subst) } }); if (o.href) { - var link = document.createElement('a'); - link.target = '_blank'; - link.href = require('helper').listReplace(o.href, subst); - link.appendChild(content); - - if (o.title) { - link.title = require('helper').listReplace(o.title, subst); - } - - p.appendChild(link); - } else { - p.appendChild(content); + return V.h('p', V.h('a', { + attrs: + { + href: require('helper').listReplace(o.href, subst), + target: '_blank', + title: require('helper').listReplace(o.title, subst) + } + }, content)); } - - return p; + return V.h('p', content); }, getTileBBox: function getTileBBox(s, map, tileSize, margin) { diff --git a/lib/utils/router.js b/lib/utils/router.js index 55ba478..1e52204 100644 --- a/lib/utils/router.js +++ b/lib/utils/router.js @@ -144,10 +144,10 @@ define(['Navigo'], function (Navigo) { objects.gateways = data.gateways; data.nodes.all.forEach(function (d) { - objects.nodes[d.nodeinfo.node_id] = d; + objects.nodes[d.node_id] = d; }); - data.graph.links.forEach(function (d) { + data.links.forEach(function (d) { objects.links[d.id] = d; }); }; diff --git a/locale/en.json b/locale/en.json index 9452ff3..6745724 100644 --- a/locale/en.json +++ b/locale/en.json @@ -6,6 +6,7 @@ "links": "Links", "clients": "Clients", "distance": "Distance", + "connectionType": "Connection type", "tq": "Transmit quality", "lastOnline": "online, last message %{time} (%{date})", "lastOffline": "offline, last message %{time} (%{date})", diff --git a/scss/modules/_sidebar.scss b/scss/modules/_sidebar.scss index 9ab49fb..bc021f3 100644 --- a/scss/modules/_sidebar.scss +++ b/scss/modules/_sidebar.scss @@ -58,7 +58,7 @@ overflow: hidden; text-overflow: ellipsis; white-space: nowrap; - width: 66%; + width: 60%; } } } From 77ac4ca3f54e0966088955dca71edbf54d191602 Mon Sep 17 00:00:00 2001 From: Xaver Maierhofer Date: Sun, 15 Oct 2017 21:59:31 +0200 Subject: [PATCH 031/119] [TASK] Split clients into 2,4 Ghz, 5 Ghz & others --- lib/infobox/main.js | 3 +-- lib/infobox/node.js | 27 +++++++++++++++++++++------ locale/en.json | 1 + scss/modules/_infobox.scss | 12 ++++++++++-- 4 files changed, 33 insertions(+), 10 deletions(-) diff --git a/lib/infobox/main.js b/lib/infobox/main.js index 564c794..bf81540 100644 --- a/lib/infobox/main.js +++ b/lib/infobox/main.js @@ -55,7 +55,7 @@ define(['infobox/link', 'infobox/node', 'infobox/location'], function (Link, Nod location(config, el, router, d); }; - self.setData = function setData(d) { + self.setData = function setData(d) { if (typeof node === 'object') { node.setData(d); } @@ -64,7 +64,6 @@ define(['infobox/link', 'infobox/node', 'infobox/location'], function (Link, Nod } }; - return self; }; }); diff --git a/lib/infobox/node.js b/lib/infobox/node.js index edddd68..9c8a17a 100644 --- a/lib/infobox/node.js +++ b/lib/infobox/node.js @@ -69,14 +69,29 @@ define(['sorttable', 'snabbdom', 'd3-interpolate', 'moment', 'helper'], } var clients = [ - d.clients > 0 ? d.clients : _.t('none'), - V.h('br') + V.h('span', [ + d.clients > 0 ? d.clients : _.t('none'), + V.h('br'), + V.h('i', { props: { className: 'ion-people', title: _.t('node.clients') } }) + ]), + V.h('span', [ + d.clients_wifi24, + V.h('br'), + '2,4 Ghz' + ]), + V.h('span', [ + d.clients_wifi5, + V.h('br'), + '5 Ghz' + ]), + V.h('span', [ + d.clients_other, + V.h('br'), + _.t('other') + ]) ]; - for (var i = 0; i < d.clients; i++) { - clients.push(V.h('i', { props: { className: 'ion-person' } })); - } - return V.h('td', clients); + return V.h('td', { props: { className: 'clients' } }, clients); } function showIPs(d) { diff --git a/locale/en.json b/locale/en.json index 6745724..02444e6 100644 --- a/locale/en.json +++ b/locale/en.json @@ -86,5 +86,6 @@ "yes": "yes", "no": "no", "unknown": "unknown", + "others": "others", "none": "none" } diff --git a/scss/modules/_infobox.scss b/scss/modules/_infobox.scss index 3a66c45..5bf25e3 100644 --- a/scss/modules/_infobox.scss +++ b/scss/modules/_infobox.scss @@ -1,7 +1,15 @@ .infobox { .clients { - color: $color-online; - font-family: $font-family-icons; + display: flex; + + span { + flex-grow: 1; + text-align: center; + } + + .ion-people { + font-size: 1.5em; + } } input, From 4787aa7f624f191511023311648cc8ddd90198f7 Mon Sep 17 00:00:00 2001 From: Martin Geno Date: Thu, 26 Oct 2017 15:58:28 +0200 Subject: [PATCH 032/119] [BUGFIX] Fix uptime in nodelist --- lib/infobox/node.js | 2 +- lib/nodelist.js | 36 +++++++++++++++--------------------- 2 files changed, 16 insertions(+), 22 deletions(-) diff --git a/lib/infobox/node.js b/lib/infobox/node.js index 9c8a17a..b54829e 100644 --- a/lib/infobox/node.js +++ b/lib/infobox/node.js @@ -52,7 +52,7 @@ define(['sorttable', 'snabbdom', 'd3-interpolate', 'moment', 'helper'], return undefined; } - return moment.duration(d.uptime, 'seconds').humanize(); + return moment.utc(d.uptime).local().fromNow(true); } function showFirstseen(d) { diff --git a/lib/nodelist.js b/lib/nodelist.js index 392324a..4064425 100644 --- a/lib/nodelist.js +++ b/lib/nodelist.js @@ -2,28 +2,18 @@ define(['sorttable', 'snabbdom', 'helper'], function (SortTable, V, helper) { 'use strict'; V = V.default; - function getUptime(now, d) { - if (d.is_online && 'uptime' in d) { - return Math.round(d.uptime); - } else if (!d.is_online && 'lastseen' in d) { - return Math.round(-(now.unix() - d.lastseen.unix())); - } - return 0; - } - function showUptime(uptime) { - var s = ''; - uptime /= 3600; - - if (uptime !== undefined) { - if (Math.abs(uptime) >= 24) { - s = Math.round(uptime / 24) + 'd'; - } else { - s = Math.round(uptime) + 'h'; - } + // 1000ms are 1 second and 60 second are 1min: 60 * 1000 = 60000 + var s = uptime / 60000; + if (Math.abs(s) < 60) { + return Math.round(s) + ' m'; } - - return s; + s /= 60; + if (Math.abs(s) < 24) { + return Math.round(s) + ' h'; + } + s /= 24; + return Math.round(s) + ' d'; } var headings = [{ @@ -101,7 +91,11 @@ define(['sorttable', 'snabbdom', 'helper'], function (SortTable, V, helper) { this.setData = function setData(d) { var data = d.nodes.all.map(function (e) { var n = Object.create(e); - n.uptime = getUptime(d.now, e); + if (e.is_online) { + n.uptime = d.now - new Date(e.uptime).getTime(); + } else { + n.uptime = e.lastseen - d.now; + } n.neighbours = e.neighbours; return n; }); From 2a3dbc9842dcf49079ab8727e699d6219cb4b6f7 Mon Sep 17 00:00:00 2001 From: Xaver Maierhofer Date: Thu, 26 Oct 2017 21:40:55 +0200 Subject: [PATCH 033/119] [TASK] Remove box-shadow css --- lib/gui.js | 2 +- lib/map/button.js | 4 ++-- lib/sidebar.js | 2 +- scss/main.scss | 1 - scss/mixins/_shadow.scss | 14 -------------- scss/modules/_button.scss | 17 ----------------- scss/modules/_sidebar.scss | 11 ++--------- scss/modules/_tabs.scss | 8 ++------ scss/modules/_variables.scss | 3 --- scss/night.scss | 2 +- 10 files changed, 9 insertions(+), 55 deletions(-) delete mode 100644 scss/mixins/_shadow.scss diff --git a/lib/gui.js b/lib/gui.js index a8faab2..8def2fd 100644 --- a/lib/gui.js +++ b/lib/gui.js @@ -63,7 +63,7 @@ function (d3Interpolate, Map, Sidebar, Tabs, Container, Legend, Linklist, contentDiv.appendChild(buttons); var buttonToggle = document.createElement('button'); - buttonToggle.classList.add('ion-eye', 'shadow'); + buttonToggle.classList.add('ion-eye'); buttonToggle.setAttribute('data-tooltip', _.t('button.switchView')); buttonToggle.onclick = function onclick() { var data; diff --git a/lib/map/button.js b/lib/map/button.js index e2199e4..aee508c 100644 --- a/lib/map/button.js +++ b/lib/map/button.js @@ -28,7 +28,7 @@ define(['map/clientlayer', 'map/labellayer', 'leaflet', 'map/locationmarker'], var LocateButton = ButtonBase.extend({ onAdd: function () { - var button = L.DomUtil.create('button', 'ion-locate shadow'); + var button = L.DomUtil.create('button', 'ion-locate'); button.setAttribute('data-tooltip', _.t('button.tracking')); L.DomEvent.disableClickPropagation(button); L.DomEvent.addListener(button, 'click', this.onClick, this); @@ -45,7 +45,7 @@ define(['map/clientlayer', 'map/labellayer', 'leaflet', 'map/locationmarker'], var CoordsPickerButton = ButtonBase.extend({ onAdd: function () { - var button = L.DomUtil.create('button', 'ion-pin shadow'); + var button = L.DomUtil.create('button', 'ion-pin'); button.setAttribute('data-tooltip', _.t('button.location')); // Click propagation isn't disabled as this causes problems with the diff --git a/lib/sidebar.js b/lib/sidebar.js index d9742fb..b252126 100644 --- a/lib/sidebar.js +++ b/lib/sidebar.js @@ -17,7 +17,7 @@ define(function () { var button = document.createElement('button'); sidebar.appendChild(button); - button.classList.add('sidebarhandle', 'shadow'); + button.classList.add('sidebarhandle'); button.onclick = function onclick() { sidebar.classList.toggle('hidden'); }; diff --git a/scss/main.scss b/scss/main.scss index 5af40ee..351edeb 100644 --- a/scss/main.scss +++ b/scss/main.scss @@ -3,7 +3,6 @@ @import 'custom/variables'; // Mixins -@import 'mixins/shadow'; @import 'mixins/icon'; @import 'mixins/font'; diff --git a/scss/mixins/_shadow.scss b/scss/mixins/_shadow.scss deleted file mode 100644 index 1275832..0000000 --- a/scss/mixins/_shadow.scss +++ /dev/null @@ -1,14 +0,0 @@ -// Original is in LESS and can be found here: https://gist.github.com/gefangenimnetz/3ef3e18364edf105c5af -@mixin shadow($level: 1) { - @if $level == 1 { - box-shadow: 0 1px 3px transparentize($color-black, .88), 0 1px 2px transparentize($color-black, .76); - } @else if $level == 2 { - box-shadow: 0 3px 6px transparentize($color-black, .84), 0 3px 6px transparentize($color-black, .77); - } @else if $level == 3 { - box-shadow: 0 10px 20px transparentize($color-black, .81), 0 6px 6px transparentize($color-black, .77); - } @else if $level == 4 { - box-shadow: 0 14px 28px transparentize($color-black, .75), 0 10px 10px transparentize($color-black, .78); - } @else if $level == 5 { - box-shadow: 0 19px 38px transparentize($color-black, .7), 0 15px 12px transparentize($color-black, .78); - } -} diff --git a/scss/modules/_button.scss b/scss/modules/_button.scss index 21a7cb5..4df73b5 100644 --- a/scss/modules/_button.scss +++ b/scss/modules/_button.scss @@ -37,20 +37,6 @@ button { color: $color-primary; } - @if $shadows == 1 { - &.shadow { - @include shadow(1); - - &:hover { - @include shadow(2); - } - - &:active { - box-shadow: inset 0 5px 20px transparentize($color-black, .81), inset 0 3px 6px transparentize($color-black, .77); - } - } - } - // Tooltip &[data-tooltip] { &::after { @@ -78,9 +64,6 @@ button { &.close { background-color: transparent; border-radius: 0; - @if $shadows == 1 { - box-shadow: none; - } color: transparentize($color-black, .5); float: right; font-size: $button-font-size; diff --git a/scss/modules/_sidebar.scss b/scss/modules/_sidebar.scss index bc021f3..cbb13f1 100644 --- a/scss/modules/_sidebar.scss +++ b/scss/modules/_sidebar.scss @@ -64,12 +64,8 @@ } .container { - @if $shadows == 1 { - @include shadow(2); - } @else { - border-right: 1px solid darken($color-white, 10%); - } background: transparentize($color-white, .03); + border-right: 1px solid darken($color-white, 10%); min-height: 100vh; overflow-y: visible; @@ -91,9 +87,6 @@ .container, .infobox { border-radius: 0; - @if $shadows == 1 { - box-shadow: none; - } margin: 0; } } @@ -120,7 +113,7 @@ left: $sidebar-width + 2 * $button-distance; position: fixed; top: $button-distance; - transition: left .5s, box-shadow .5s, color .5s, transform .5s; + transition: left .5s, color .5s, transform .5s; z-index: 1010; &::after { diff --git a/scss/modules/_tabs.scss b/scss/modules/_tabs.scss index 2065139..ee21caf 100644 --- a/scss/modules/_tabs.scss +++ b/scss/modules/_tabs.scss @@ -1,11 +1,7 @@ .tabs { - @if $shadows == 1 { - @include shadow(1); - } @else { - border: 0 solid darken($color-white, 10%); - border-bottom-width: 1px; - } background: transparentize($color-black, .98); + border: 0 solid darken($color-white, 10%); + border-bottom-width: 1px; display: flex; display: -webkit-flex; // sass-lint:disable-line no-vendor-prefixes no-duplicate-properties list-style: none; diff --git a/scss/modules/_variables.scss b/scss/modules/_variables.scss index 6e405eb..8992af2 100644 --- a/scss/modules/_variables.scss +++ b/scss/modules/_variables.scss @@ -43,8 +43,5 @@ $grid-breakpoints: ( $sidebar-width: map-get($grid-breakpoints, xl) * .45 !default; $sidebar-width-small: map-get($grid-breakpoints, lg) * .45 !default; -// En/disable box-shadows -$shadows: 0 !default; - // En/disable included font $use-included-font: 1 !default; diff --git a/scss/night.scss b/scss/night.scss index e942057..38a7adf 100644 --- a/scss/night.scss +++ b/scss/night.scss @@ -1,4 +1,4 @@ -// Overwrite normal style (colors) - shadows are ignored +// Overwrite normal style (colors) @import 'modules/variables'; @import 'custom/variables'; From a9630ffa78a094a98a5535cda51d3ec1af53d38f Mon Sep 17 00:00:00 2001 From: Xaver Maierhofer Date: Sat, 21 Oct 2017 02:06:42 +0200 Subject: [PATCH 034/119] [TASK] Improve accessbility --- html/index.html | 2 +- lib/filters/filtergui.js | 1 + lib/filters/hostname.js | 1 + lib/gui.js | 2 +- lib/infobox/location.js | 4 ++++ lib/infobox/main.js | 1 + lib/legend.js | 6 +++--- lib/main.js | 2 +- lib/map.js | 7 +++++++ lib/map/button.js | 4 ++-- lib/sidebar.js | 1 + lib/utils/language.js | 1 + locale/en.json | 7 +++++-- scss/modules/_base.scss | 23 ++++++++++++++++++----- scss/modules/_button.scss | 33 ++++++++++++++++++++++++++++++++- scss/modules/_filter.scss | 4 ++++ scss/modules/_legend.scss | 2 +- scss/modules/_sidebar.scss | 15 ++++++++++++++- 18 files changed, 98 insertions(+), 18 deletions(-) diff --git a/html/index.html b/html/index.html index c731ef5..6413fd4 100644 --- a/html/index.html +++ b/html/index.html @@ -16,7 +16,7 @@

Lade
- + Loading ...
Karten & Knoten...

diff --git a/lib/filters/filtergui.js b/lib/filters/filtergui.js index 5dc033e..767d5f9 100644 --- a/lib/filters/filtergui.js +++ b/lib/filters/filtergui.js @@ -22,6 +22,7 @@ define(function () { var button = document.createElement('button'); button.classList.add('ion-close'); + button.setAttribute('aria-label', _.t('remove')); button.onclick = function onclick() { distributor.removeFilter(d); }; diff --git a/lib/filters/hostname.js b/lib/filters/hostname.js index 5da75f3..c269d54 100644 --- a/lib/filters/hostname.js +++ b/lib/filters/hostname.js @@ -26,6 +26,7 @@ define(function () { function render(el) { input.type = 'search'; input.placeholder = _.t('sidebar.nodeFilter'); + input.setAttribute('aria-label', _.t('sidebar.nodeFilter')); input.addEventListener('input', refresh); el.classList.add('filter-node'); el.classList.add('ion-filter'); diff --git a/lib/gui.js b/lib/gui.js index 8def2fd..01736b9 100644 --- a/lib/gui.js +++ b/lib/gui.js @@ -64,7 +64,7 @@ function (d3Interpolate, Map, Sidebar, Tabs, Container, Legend, Linklist, var buttonToggle = document.createElement('button'); buttonToggle.classList.add('ion-eye'); - buttonToggle.setAttribute('data-tooltip', _.t('button.switchView')); + buttonToggle.setAttribute('aria-label', _.t('button.switchView')); buttonToggle.onclick = function onclick() { var data; if (content.constructor === Map) { diff --git a/lib/infobox/location.js b/lib/infobox/location.js index ba09a7e..e313f83 100644 --- a/lib/infobox/location.js +++ b/lib/infobox/location.js @@ -14,16 +14,19 @@ define(['helper'], function (helper) { }); var editLat = document.createElement('input'); + editLat.setAttribute('aria-label', _.t('location.latitude')); editLat.type = 'text'; editLat.value = d.lat.toFixed(9); el.appendChild(createBox('lat', _.t('location.latitude'), editLat)); var editLng = document.createElement('input'); + editLng.setAttribute('aria-label', _.t('location.longitude')); editLng.type = 'text'; editLng.value = d.lng.toFixed(9); el.appendChild(createBox('lng', _.t('location.longitude'), editLng)); var editUci = document.createElement('textarea'); + editUci.setAttribute('aria-label', 'Uci'); editUci.value = "uci set gluon-node-info.@location[0]='location'; " + "uci set gluon-node-info.@location[0].share_location='1';" + @@ -41,6 +44,7 @@ define(['helper'], function (helper) { var btn = document.createElement('button'); btn.classList.add('ion-clipboard'); btn.title = _.t('location.copy'); + btn.setAttribute('aria-label', _.t('location.copy')); btn.onclick = function onclick() { copy2clip(inputElem.id); }; diff --git a/lib/infobox/main.js b/lib/infobox/main.js index bf81540..3e51e61 100644 --- a/lib/infobox/main.js +++ b/lib/infobox/main.js @@ -30,6 +30,7 @@ define(['infobox/link', 'infobox/node', 'infobox/location'], function (Link, Nod var closeButton = document.createElement('button'); closeButton.classList.add('close'); closeButton.classList.add('ion-close'); + closeButton.setAttribute('aria-label', _.t('close')); closeButton.onclick = function () { router.fullUrl(); }; diff --git a/lib/legend.js b/lib/legend.js index 530accf..8450270 100644 --- a/lib/legend.js +++ b/lib/legend.js @@ -24,9 +24,9 @@ define(['helper'], function (helper) { }; self.render = function render(el) { - var h2 = document.createElement('h2'); - h2.textContent = config.siteName; - el.appendChild(h2); + var h1 = document.createElement('h1'); + h1.textContent = config.siteName; + el.appendChild(h1); language.languageSelect(el); diff --git a/lib/main.js b/lib/main.js index 5c8b569..9d8c017 100644 --- a/lib/main.js +++ b/lib/main.js @@ -124,7 +124,7 @@ define(['moment', 'utils/router', 'leaflet', 'gui', 'helper', 'utils/language'], }) .catch(function (e) { document.querySelector('.loader').innerHTML += e.message - + '


or report to your community'; + + '


or report to your community'; console.warn(e); }); }; diff --git a/lib/map.js b/lib/map.js index 9974c1f..4f3ac1f 100644 --- a/lib/map.js +++ b/lib/map.js @@ -105,6 +105,13 @@ define(['map/clientlayer', 'map/labellayer', 'map/button', 'leaflet'], } }); + map.on('load', function () { + document.querySelectorAll('.leaflet-control-layers-selector').forEach(function (input) { + input.setAttribute('role', 'radiogroup'); + input.setAttribute('aria-label', input.nextSibling.innerHTML.trim()); + }); + }); + var nodeDict = {}; var linkDict = {}; var highlight; diff --git a/lib/map/button.js b/lib/map/button.js index aee508c..b7020eb 100644 --- a/lib/map/button.js +++ b/lib/map/button.js @@ -29,7 +29,7 @@ define(['map/clientlayer', 'map/labellayer', 'leaflet', 'map/locationmarker'], var LocateButton = ButtonBase.extend({ onAdd: function () { var button = L.DomUtil.create('button', 'ion-locate'); - button.setAttribute('data-tooltip', _.t('button.tracking')); + button.setAttribute('aria-label', _.t('button.tracking')); L.DomEvent.disableClickPropagation(button); L.DomEvent.addListener(button, 'click', this.onClick, this); @@ -46,7 +46,7 @@ define(['map/clientlayer', 'map/labellayer', 'leaflet', 'map/locationmarker'], var CoordsPickerButton = ButtonBase.extend({ onAdd: function () { var button = L.DomUtil.create('button', 'ion-pin'); - button.setAttribute('data-tooltip', _.t('button.location')); + button.setAttribute('aria-label', _.t('button.location')); // Click propagation isn't disabled as this causes problems with the // location picking mode; instead propagation is stopped in onClick(). diff --git a/lib/sidebar.js b/lib/sidebar.js index b252126..9e52726 100644 --- a/lib/sidebar.js +++ b/lib/sidebar.js @@ -18,6 +18,7 @@ define(function () { sidebar.appendChild(button); button.classList.add('sidebarhandle'); + button.setAttribute('aria-label', _.t('sidebar.toggle')); button.onclick = function onclick() { sidebar.classList.toggle('hidden'); }; diff --git a/lib/utils/language.js b/lib/utils/language.js index 572c2be..66f1685 100644 --- a/lib/utils/language.js +++ b/lib/utils/language.js @@ -6,6 +6,7 @@ define(['polyglot', 'moment', 'helper'], function (Polyglot, moment, helper) { function languageSelect(el) { var select = document.createElement('select'); select.className = 'language-switch'; + select.setAttribute('aria-label', 'Language'); select.addEventListener('change', setSelectLocale); el.appendChild(select); diff --git a/locale/en.json b/locale/en.json index 02444e6..ee59a8a 100644 --- a/locale/en.json +++ b/locale/en.json @@ -51,7 +51,8 @@ "aboutInfo": "

About Meshviewer

You can zoom in with double-click and zoom out with shift+double-click

", "actual": "Current", "stats": "Statistics", - "about": "About" + "about": "About", + "toggle" : "Toggle Sidebar" }, "button": { "switchView": "Switch view", @@ -87,5 +88,7 @@ "no": "no", "unknown": "unknown", "others": "others", - "none": "none" + "none": "none", + "remove": "remove", + "close": "close" } diff --git a/scss/modules/_base.scss b/scss/modules/_base.scss index 933e3c7..35b8ffa 100644 --- a/scss/modules/_base.scss +++ b/scss/modules/_base.scss @@ -22,11 +22,7 @@ h6 { font-weight: bold; } -h1 { - font-size: 2em; - padding: .67em 0; -} - +h1, h2 { font-size: 1.5em; padding: .83em 0; @@ -37,6 +33,7 @@ h3 { padding: 1em 0; } +h1, h2, h3 { padding-left: $button-distance; @@ -57,6 +54,10 @@ img { a { color: $color-online; text-decoration: none; + + &:focus { + color: darken($color-online, 15%); + } } p { @@ -70,3 +71,15 @@ strong { .hide { display: none !important; // sass-lint:disable-line no-important } + +.sr-only { + border: 0; + clip: rect(0, 0, 0, 0); + clip-path: inset(50%); + height: 1px; + overflow: hidden; + padding: 0; + position: absolute; + white-space: nowrap; + width: 1px; +} diff --git a/scss/modules/_button.scss b/scss/modules/_button.scss index 4df73b5..4987235 100644 --- a/scss/modules/_button.scss +++ b/scss/modules/_button.scss @@ -29,7 +29,8 @@ button { } } - &.active { + &.active, + &:focus { box-shadow: 0 0 0 2px $color-primary; } @@ -73,3 +74,33 @@ button { width: auto; } } + +// Tooltip +// sass-lint:disable-block nesting-depth +.content, +.sidebar > { + button { + &[aria-label] { + &::after { + background: $color-black; + border-radius: 3px; + color: $color-white; + content: attr(aria-label); + font-family: $font-family; + font-size: $font-size; + padding: 0 12px; + position: absolute; + transform: translate(45px, 52px); + visibility: hidden; + white-space: nowrap; + } + + &:hover { + &::after { + transition: visibility 0s linear .3s; + visibility: visible; + } + } + } + } +} diff --git a/scss/modules/_filter.scss b/scss/modules/_filter.scss index 8e209b0..c484f59 100644 --- a/scss/modules/_filter.scss +++ b/scss/modules/_filter.scss @@ -57,6 +57,10 @@ outline: none; padding: 0 2px; width: 100%; + + &:focus { + background: transparentize($color-primary, .95); + } } button { diff --git a/scss/modules/_legend.scss b/scss/modules/_legend.scss index 50e96c1..01f730f 100644 --- a/scss/modules/_legend.scss +++ b/scss/modules/_legend.scss @@ -1,5 +1,5 @@ header { - h2 { + h1 { display: inline-block; } } diff --git a/scss/modules/_sidebar.scss b/scss/modules/_sidebar.scss index cbb13f1..58cf3ca 100644 --- a/scss/modules/_sidebar.scss +++ b/scss/modules/_sidebar.scss @@ -12,6 +12,13 @@ .sidebarhandle { left: $button-distance; transform: scale(-1, 1); + + // sass-lint:disable-block nesting-depth + &[aria-label] { + &::after { + transform: scale(-1, 1) translate(105px, 52px) !important; // sass-lint:disable-line no-important + } + } } @media screen and (max-width: map-get($grid-breakpoints, lg) - 1) { width: auto; @@ -116,10 +123,16 @@ transition: left .5s, color .5s, transform .5s; z-index: 1010; - &::after { + &::before { content: '\f124'; padding-right: .125em; } + + &[aria-label] { + &::after { + transform: translate(-45px, 52px) !important; // sass-lint:disable-line no-important + } + } } .online { From b3ef2460b37c904096fe7bc9215c87dffd7ebf23 Mon Sep 17 00:00:00 2001 From: Xaver Maierhofer Date: Fri, 27 Oct 2017 21:17:43 +0200 Subject: [PATCH 035/119] [TASK] Remove outdated link filter --- lib/main.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/lib/main.js b/lib/main.js index 9d8c017..89322af 100644 --- a/lib/main.js +++ b/lib/main.js @@ -12,9 +12,7 @@ define(['moment', 'utils/router', 'leaflet', 'gui', 'helper', 'utils/language'], for (var i = 0; i < data.length; ++i) { nodes = nodes.concat(data[i].nodes); timestamp = data[i].timestamp; - links = links.concat(data[i].links.filter(function (d) { - return d.source !== undefined; - })); + links = links.concat(data[i].links); } nodes.forEach(function (node) { From 10ab1ead2c1c0e57674dc1d81be4bfccdcbc6877 Mon Sep 17 00:00:00 2001 From: Geno Date: Sun, 29 Oct 2017 01:38:43 +0200 Subject: [PATCH 036/119] [TASK] Different colors on map and forcegraph for clients --- lib/about.js | 13 ++++++++++++- lib/forcegraph/draw.js | 2 +- lib/infobox/node.js | 36 ++++++++++++++++++++--------------- lib/legend.js | 5 +---- lib/map.js | 2 +- lib/map/clientlayer.js | 10 +++++----- lib/utils/helper.js | 20 +++++++++++++++---- locale/en.json | 8 ++++---- scss/modules/_legend.scss | 37 +++++++++++++++++++++++++++--------- scss/modules/_variables.scss | 4 ++++ 10 files changed, 93 insertions(+), 44 deletions(-) diff --git a/lib/about.js b/lib/about.js index b23e640..8d48ca6 100644 --- a/lib/about.js +++ b/lib/about.js @@ -4,7 +4,18 @@ define(function () { return function () { this.render = function render(d) { d.innerHTML = _.t('sidebar.aboutInfo') + - + '

' + _.t('node.nodes') + '

' + + '

' + + ' ' + _.t('sidebar.nodeNew') + '' + + ' ' + _.t('sidebar.nodeOnline') + '' + + ' ' + _.t('sidebar.nodeOffline') + '' + + '

' + + '

' + _.t('node.clients') + '

' + + '

' + + ' 2.4 Ghz' + + ' 5 Ghz' + + ' ' + _.t('others') + '' + + '

' + '

AGPL 3

' + '

Copyright (C) Milan Pässler

' + diff --git a/lib/forcegraph/draw.js b/lib/forcegraph/draw.js index c10c4d1..2fddc4e 100644 --- a/lib/forcegraph/draw.js +++ b/lib/forcegraph/draw.js @@ -21,8 +21,8 @@ define(['helper'], function (helper) { function drawDetailNode(d) { if (transform.k > 1) { ctx.beginPath(); - helper.positionClients(ctx, d, Math.PI, d.o.clients, 15); ctx.fillStyle = clientColor; + helper.positionClients(ctx, d, Math.PI, d.o, 15); ctx.fill(); ctx.beginPath(); var name = d.o.node_id; diff --git a/lib/infobox/node.js b/lib/infobox/node.js index b54829e..ab7c7c6 100644 --- a/lib/infobox/node.js +++ b/lib/infobox/node.js @@ -74,21 +74,27 @@ define(['sorttable', 'snabbdom', 'd3-interpolate', 'moment', 'helper'], V.h('br'), V.h('i', { props: { className: 'ion-people', title: _.t('node.clients') } }) ]), - V.h('span', [ - d.clients_wifi24, - V.h('br'), - '2,4 Ghz' - ]), - V.h('span', [ - d.clients_wifi5, - V.h('br'), - '5 Ghz' - ]), - V.h('span', [ - d.clients_other, - V.h('br'), - _.t('other') - ]) + V.h('span', + { props: { className: 'legend-24ghz'}}, + [ + d.clients_wifi24, + V.h('br'), + V.h('span', { props: { className: 'symbol', title: '2,4 Ghz'}}) + ]), + V.h('span', + { props: { className: 'legend-5ghz'}}, + [ + d.clients_wifi5, + V.h('br'), + V.h('span', { props: { className: 'symbol', title: '5 Ghz'}}) + ]), + V.h('span', + { props: { className: 'legend-others'}}, + [ + d.clients_other, + V.h('br'), + V.h('span', { props: { className: 'symbol', title: _.t('others')}}) + ]) ]; return V.h('td', { props: { className: 'clients' } }, clients); diff --git a/lib/legend.js b/lib/legend.js index 8450270..fa8daf6 100644 --- a/lib/legend.js +++ b/lib/legend.js @@ -32,15 +32,12 @@ define(['helper'], function (helper) { var p = document.createElement('p'); p.classList.add('legend'); - p.innerHTML = ' ' + _.t('sidebar.nodeNew') + '' + - ' ' + _.t('sidebar.nodeOnline') + '' + - ' ' + _.t('sidebar.nodeOffline') + ''; - el.appendChild(p); p.appendChild(document.createElement('br')); p.appendChild(stats); p.appendChild(document.createElement('br')); p.appendChild(timestamp); + el.appendChild(p); }; return self; diff --git a/lib/map.js b/lib/map.js index 4f3ac1f..6c8dd1c 100644 --- a/lib/map.js +++ b/lib/map.js @@ -151,7 +151,7 @@ define(['map/clientlayer', 'map/labellayer', 'map/button', 'leaflet'], if (highlight !== undefined) { if (highlight.type === 'node' && nodeDict[highlight.o.node_id]) { m = nodeDict[highlight.o.node_id]; - m.setStyle({ color: 'orange', weight: 20, fillOpacity: 1, opacity: 0.7, className: 'stroke-first' }); + m.setStyle({ color: '#ad2358', weight: 8, fillOpacity: 1, opacity: 0.4, className: 'stroke-first' }); } else if (highlight.type === 'link' && linkDict[highlight.o.id]) { m = linkDict[highlight.o.id]; m.setStyle({ weight: 4, opacity: 1, dashArray: '5, 10' }); diff --git a/lib/map/clientlayer.js b/lib/map/clientlayer.js index aa25553..9bc5281 100644 --- a/lib/map/clientlayer.js +++ b/lib/map/clientlayer.js @@ -45,20 +45,20 @@ define(['leaflet', 'rbush', 'helper'], return tile; } - var startDistance = 12; + var startDistance = 10; - ctx.beginPath(); nodes.forEach(function (d) { var p = map.project([d.node.location.latitude, d.node.location.longitude]); p.x -= s.x; p.y -= s.y; - helper.positionClients(ctx, p, d.startAngle, d.node.clients, startDistance); + ctx.beginPath(); + ctx.fillStyle = 'rgba(220, 0, 103, 0.7)'; + helper.positionClients(ctx, p, d.startAngle, d.node, startDistance); + ctx.fill(); }); - ctx.fillStyle = 'rgba(220, 0, 103, 0.7)'; - ctx.fill(); return tile; } diff --git a/lib/utils/helper.js b/lib/utils/helper.js index 6264990..dfcc9f5 100644 --- a/lib/utils/helper.js +++ b/lib/utils/helper.js @@ -153,20 +153,32 @@ define({ return { minX: br.lat, minY: tl.lng, maxX: tl.lat, maxY: br.lng }; }, - positionClients: function positionClients(ctx, p, startAngle, clients, startDistance) { - if (clients === 0) { + positionClients: function positionClients(ctx, p, startAngle, node, startDistance) { + if (node.clients === 0) { return; } var radius = 3; var a = 1.2; + var mode = 0; - for (var orbit = 0, i = 0; i < clients; orbit++) { + for (var orbit = 0, i = 0; i < node.clients; orbit++) { var distance = startDistance + orbit * 2 * radius * a; var n = Math.floor((Math.PI * distance) / (a * radius)); - var delta = clients - i; + var delta = node.clients - i; for (var j = 0; j < Math.min(delta, n); i++, j++) { + if (mode !== 1 && i >= (node.clients_wifi24 + node.clients_wifi5)) { + mode = 1; + ctx.fill(); + ctx.beginPath(); + ctx.fillStyle = 'rgba(10, 156, 146, 0.7)'; + } else if (mode === 0 && i >= node.clients_wifi24) { + mode = 2; + ctx.fill(); + ctx.beginPath(); + ctx.fillStyle = 'rgba(227, 166, 25, 0.7)'; + } var angle = 2 * Math.PI / n * j; var x = p.x + distance * Math.cos(angle + startAngle); var y = p.y + distance * Math.sin(angle + startAngle); diff --git a/locale/en.json b/locale/en.json index ee59a8a..da3dc05 100644 --- a/locale/en.json +++ b/locale/en.json @@ -45,9 +45,9 @@ "clients": "with %{smart_count} client |||| with %{smart_count} clients", "gateway": "on %{smart_count} gateway |||| on %{smart_count} gateways", "lastUpdate": "Last update", - "nodeNew": "Node is new", - "nodeOnline": "Node is online", - "nodeOffline": "Node is offline", + "nodeNew": "new", + "nodeOnline": "online", + "nodeOffline": "offline", "aboutInfo": "

About Meshviewer

You can zoom in with double-click and zoom out with shift+double-click

", "actual": "Current", "stats": "Statistics", @@ -87,7 +87,7 @@ "yes": "yes", "no": "no", "unknown": "unknown", - "others": "others", + "others": "other", "none": "none", "remove": "remove", "close": "close" diff --git a/scss/modules/_legend.scss b/scss/modules/_legend.scss index 01f730f..d359c74 100644 --- a/scss/modules/_legend.scss +++ b/scss/modules/_legend.scss @@ -17,15 +17,21 @@ header { } .legend { - .symbol { - border-radius: 50%; - display: inline-block; - height: 1em; - vertical-align: -5%; - width: 1em; + span { + &:not(:first-child) { + margin-left: 1em; + } } } +.symbol { + border-radius: 50%; + display: inline-block; + height: 1em; + vertical-align: -5%; + width: 1em; +} + // Dot looks compared to thin font a bit darker - lighten it 10% .legend-new { .symbol { @@ -45,7 +51,20 @@ header { } } -.legend-online, -.legend-offline { - margin-left: 1em; +.legend-24ghz { + .symbol { + background-color: $color-24ghz; + } +} + +.legend-5ghz { + .symbol { + background-color: $color-5ghz; + } +} + +.legend-others { + .symbol { + background-color: $color-others; + } } diff --git a/scss/modules/_variables.scss b/scss/modules/_variables.scss index 8992af2..81003ef 100644 --- a/scss/modules/_variables.scss +++ b/scss/modules/_variables.scss @@ -11,6 +11,10 @@ $color-online: #1566a9 !default; $color-offline: #cf3e2a !default; $color-unseen: #d89100 !default; +$color-24ghz: $color-primary !default; +$color-5ghz: #e3a619 !default; +$color-others: #0a9c92 !default; + $color-map-background: #f8f4f0 !default; $font-family: Assistant, sans-serif !default; From 914f6a344bc993d1fbc83e147a2ec8deaf10c79c Mon Sep 17 00:00:00 2001 From: Geno Date: Sun, 29 Oct 2017 11:00:22 +0100 Subject: [PATCH 037/119] [TASK] Show last update relativ to now --- lib/legend.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/legend.js b/lib/legend.js index fa8daf6..93da01f 100644 --- a/lib/legend.js +++ b/lib/legend.js @@ -20,7 +20,7 @@ define(['helper'], function (helper) { _.t('sidebar.clients', { smart_count: totalClients }) + ' ' + _.t('sidebar.gateway', { smart_count: totalGateways }); - timestamp.textContent = _.t('sidebar.lastUpdate') + ': ' + d.timestamp.format('DD.MM.Y HH:mm'); + timestamp.textContent = _.t('sidebar.lastUpdate') + ' ' + d.timestamp.fromNow(); }; self.render = function render(el) { @@ -33,7 +33,6 @@ define(['helper'], function (helper) { var p = document.createElement('p'); p.classList.add('legend'); - p.appendChild(document.createElement('br')); p.appendChild(stats); p.appendChild(document.createElement('br')); p.appendChild(timestamp); From 35fd75e4f6bb76edf021c52f7bac9b8e624d9bf1 Mon Sep 17 00:00:00 2001 From: Geno Date: Sun, 29 Oct 2017 11:21:55 +0100 Subject: [PATCH 038/119] [BUGFIX] forcegraph show only online nodes --- lib/forcegraph.js | 31 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/lib/forcegraph.js b/lib/forcegraph.js index dd49757..76955f7 100644 --- a/lib/forcegraph.js +++ b/lib/forcegraph.js @@ -1,5 +1,5 @@ -define(['d3-selection', 'd3-force', 'd3-zoom', 'd3-drag', 'd3-timer', 'd3-ease', 'd3-interpolate', 'utils/math', 'forcegraph/draw'], - function (d3Selection, d3Force, d3Zoom, d3Drag, d3Timer, d3Ease, d3Interpolate, math, draw) { +define(['d3-selection', 'd3-force', 'd3-zoom', 'd3-drag', 'd3-timer', 'd3-ease', 'd3-interpolate', 'helper', 'utils/math', 'forcegraph/draw'], + function (d3Selection, d3Force, d3Zoom, d3Drag, d3Timer, d3Ease, d3Interpolate, helper, math, draw) { 'use strict'; return function (config, linkScale, sidebar, router) { @@ -197,11 +197,9 @@ define(['d3-selection', 'd3-force', 'd3-zoom', 'd3-drag', 'd3-timer', 'd3-ease', }); self.setData = function setData(data) { - intNodes = data.nodes.all.map(function (d) { - var e; - if (d.node_id in dictNodes) { - e = dictNodes[d.node_id]; - } else { + intNodes = data.nodes.all.filter(helper.online).map(function (d) { + var e = dictNodes[d.node_id]; + if (!e) { e = {}; dictNodes[d.node_id] = e; } @@ -211,15 +209,16 @@ define(['d3-selection', 'd3-force', 'd3-zoom', 'd3-drag', 'd3-timer', 'd3-ease', return e; }); - intLinks = data.links.map(function (d) { - var e = {}; - e.o = d; - e.source = dictNodes[d.source.node_id]; - e.target = dictNodes[d.target.node_id]; - e.color = linkScale(d.source_tq); - e.color_to = linkScale(d.target_tq); - - return e; + intLinks = data.links.filter(function (d) { + return dictNodes[d.source.node_id] && dictNodes[d.target.node_id]; + }).map(function (d) { + return { + o: d, + source: dictNodes[d.source.node_id], + target: dictNodes[d.target.node_id], + color: linkScale(d.source_tq), + color_to: linkScale(d.target_tq) + }; }); force.nodes(intNodes); From e0630808e3aad2bf8711137817a4577f4e6a61b9 Mon Sep 17 00:00:00 2001 From: Xaver Maierhofer Date: Sun, 29 Oct 2017 11:36:29 +0100 Subject: [PATCH 039/119] [TASK] Put clients drawing together --- lib/forcegraph/draw.js | 4 ---- lib/map/clientlayer.js | 3 --- lib/utils/helper.js | 4 ++++ 3 files changed, 4 insertions(+), 7 deletions(-) diff --git a/lib/forcegraph/draw.js b/lib/forcegraph/draw.js index 2fddc4e..fa18a83 100644 --- a/lib/forcegraph/draw.js +++ b/lib/forcegraph/draw.js @@ -10,7 +10,6 @@ define(['helper'], function (helper) { var highlight; var nodeColor = '#fff'; - var clientColor = '#e6324b'; var highlightColor = 'rgba(255, 255, 255, 0.2)'; var labelColor = '#fff'; @@ -20,10 +19,7 @@ define(['helper'], function (helper) { function drawDetailNode(d) { if (transform.k > 1) { - ctx.beginPath(); - ctx.fillStyle = clientColor; helper.positionClients(ctx, d, Math.PI, d.o, 15); - ctx.fill(); ctx.beginPath(); var name = d.o.node_id; if (d.o) { diff --git a/lib/map/clientlayer.js b/lib/map/clientlayer.js index 9bc5281..c970bfa 100644 --- a/lib/map/clientlayer.js +++ b/lib/map/clientlayer.js @@ -53,10 +53,7 @@ define(['leaflet', 'rbush', 'helper'], p.x -= s.x; p.y -= s.y; - ctx.beginPath(); - ctx.fillStyle = 'rgba(220, 0, 103, 0.7)'; helper.positionClients(ctx, p, d.startAngle, d.node, startDistance); - ctx.fill(); }); diff --git a/lib/utils/helper.js b/lib/utils/helper.js index dfcc9f5..ee6a211 100644 --- a/lib/utils/helper.js +++ b/lib/utils/helper.js @@ -162,6 +162,9 @@ define({ var a = 1.2; var mode = 0; + ctx.beginPath(); + ctx.fillStyle = 'rgba(220, 0, 103, 0.7)'; + for (var orbit = 0, i = 0; i < node.clients; orbit++) { var distance = startDistance + orbit * 2 * radius * a; var n = Math.floor((Math.PI * distance) / (a * radius)); @@ -187,5 +190,6 @@ define({ ctx.arc(x, y, radius, 0, 2 * Math.PI); } } + ctx.fill(); } }); From 13eacf5fa882744d0f0d08c342a775fff96193c2 Mon Sep 17 00:00:00 2001 From: Martin Geno Date: Sun, 29 Oct 2017 12:36:57 +0100 Subject: [PATCH 040/119] [BUGFIX] Remove link direction --- lib/infobox/node.js | 1 - lib/main.js | 10 +++------- scss/modules/_sidebar.scss | 2 +- 3 files changed, 4 insertions(+), 9 deletions(-) diff --git a/lib/infobox/node.js b/lib/infobox/node.js index ab7c7c6..a090dfd 100644 --- a/lib/infobox/node.js +++ b/lib/infobox/node.js @@ -187,7 +187,6 @@ define(['sorttable', 'snabbdom', 'd3-interpolate', 'moment', 'helper'], return function (config, el, router, d, linkScale, gateways) { function renderNeighbourRow(n) { var icons = []; - icons.push(V.h('span', { props: { className: n.incoming ? 'ion-arrow-left-c' : 'ion-arrow-right-c' } })); if (helper.hasLocation(n.node)) { icons.push(V.h('span', { props: { className: 'ion-location' } })); } diff --git a/lib/main.js b/lib/main.js index 89322af..789ce60 100644 --- a/lib/main.js +++ b/lib/main.js @@ -37,8 +37,6 @@ define(['moment', 'utils/router', 'leaflet', 'gui', 'helper', 'utils/language'], }); links.forEach(function (d) { - var ids; - d.source = nodes.find(function (a) { return a.node_id === d.source; }); @@ -47,11 +45,9 @@ define(['moment', 'utils/router', 'leaflet', 'gui', 'helper', 'utils/language'], return a.node_id === d.target; }); - ids = [d.source.node_id, d.target.node_id]; - d.source.neighbours.push({ node: d.target, link: d, incoming: false }); - d.target.neighbours.push({ node: d.source, link: d, incoming: true }); - - d.id = ids.join('-'); + d.id = [d.source.node_id, d.target.node_id].join('-'); + d.source.neighbours.push({ node: d.target, link: d }); + d.target.neighbours.push({ node: d.source, link: d }); try { d.latlngs = []; diff --git a/scss/modules/_sidebar.scss b/scss/modules/_sidebar.scss index 58cf3ca..8d7971a 100644 --- a/scss/modules/_sidebar.scss +++ b/scss/modules/_sidebar.scss @@ -53,7 +53,7 @@ th, td { &:first-child { - width: 50px; + width: 25px; } } } From b4bd94119797d813af2b59947e0371a59639fe63 Mon Sep 17 00:00:00 2001 From: Geno Date: Sun, 29 Oct 2017 16:10:25 +0100 Subject: [PATCH 041/119] [TASK] display & filter gateways IP4/6 and nexthop --- lib/infobox/main.js | 4 +-- lib/infobox/node.js | 72 +++++++++++++++++++++++++++----------- lib/main.js | 11 ++---- lib/map/clientlayer.js | 1 - lib/proportions.js | 33 ++++++++--------- lib/utils/router.js | 6 ++-- locale/en.json | 4 ++- scss/modules/_infobox.scss | 6 ++-- 8 files changed, 84 insertions(+), 53 deletions(-) diff --git a/lib/infobox/main.js b/lib/infobox/main.js index 3e51e61..f2984b7 100644 --- a/lib/infobox/main.js +++ b/lib/infobox/main.js @@ -39,9 +39,9 @@ define(['infobox/link', 'infobox/node', 'infobox/location'], function (Link, Nod self.resetView = destroy; - self.gotoNode = function gotoNode(d, gateways) { + self.gotoNode = function gotoNode(d, nodeDict) { create(); - node = new Node(config, el, router, d, linkScale, gateways); + node = new Node(config, el, router, d, linkScale, nodeDict); node.render(); }; diff --git a/lib/infobox/node.js b/lib/infobox/node.js index a090dfd..98c8b10 100644 --- a/lib/infobox/node.js +++ b/lib/infobox/node.js @@ -75,25 +75,25 @@ define(['sorttable', 'snabbdom', 'd3-interpolate', 'moment', 'helper'], V.h('i', { props: { className: 'ion-people', title: _.t('node.clients') } }) ]), V.h('span', - { props: { className: 'legend-24ghz'}}, + { props: { className: 'legend-24ghz' } }, [ d.clients_wifi24, V.h('br'), - V.h('span', { props: { className: 'symbol', title: '2,4 Ghz'}}) + V.h('span', { props: { className: 'symbol', title: '2,4 Ghz' } }) ]), V.h('span', - { props: { className: 'legend-5ghz'}}, + { props: { className: 'legend-5ghz' } }, [ d.clients_wifi5, V.h('br'), - V.h('span', { props: { className: 'symbol', title: '5 Ghz'}}) + V.h('span', { props: { className: 'symbol', title: '5 Ghz' } }) ]), V.h('span', - { props: { className: 'legend-others'}}, + { props: { className: 'legend-others' } }, [ d.clients_other, V.h('br'), - V.h('span', { props: { className: 'symbol', title: _.t('others')}}) + V.h('span', { props: { className: 'symbol', title: _.t('others') } }) ]) ]; @@ -184,26 +184,58 @@ define(['sorttable', 'snabbdom', 'd3-interpolate', 'moment', 'helper'], return helper.showStat(V, o, subst); } - return function (config, el, router, d, linkScale, gateways) { + return function (config, el, router, d, linkScale, nodeDict) { + function nodeLink(node) { + return V.h('a', { + props: { + className: node.is_online ? 'online' : 'offline', + href: router.generateLink({ node: node.node_id }) + }, on: { + click: function (e) { + router.fullUrl({ node: node.node_id }, e); + } + } + }, node.hostname); + } + + function nodeidLink(nodeid) { + if (nodeDict[nodeid]) { + return nodeLink(nodeDict[nodeid]); + } + return nodeid; + } + + function showGateway(node) { + var gatewayCols = [ + V.h('span', [ + nodeidLink(node.gateway_nexthop), + V.h('br'), + _.t('node.nexthop') + ]), + V.h('span', { props: { className: 'ion-arrow-right-c' } }), + V.h('span', [ + nodeidLink(node.gateway), + V.h('br'), + 'IPv4' + ]), + V.h('span', [ + nodeidLink(node.gateway6), + V.h('br'), + 'IPv6' + ]) + ]; + + return V.h('td', { props: { className: 'gateway' } }, gatewayCols); + } + function renderNeighbourRow(n) { var icons = []; if (helper.hasLocation(n.node)) { icons.push(V.h('span', { props: { className: 'ion-location' } })); } - var name = V.h('a', { - props: { - className: 'online', - href: router.generateLink({ node: n.node.node_id }) - }, on: { - click: function (e) { - router.fullUrl({ node: n.node.node_id }, e); - } - } - }, n.node.hostname); - var td1 = V.h('td', icons); - var td2 = V.h('td', name); + var td2 = V.h('td', nodeLink(n.node)); var td3 = V.h('td', (n.node.clients ? n.node.clients.toString() : '0')); var td4 = V.h('td', { style: { color: linkScale((n.link.source_tq + n.link.target_tq) / 2) } }, helper.showTq(n.link.source_tq) + ' - ' + helper.showTq(n.link.target_tq)); var td5 = V.h('td', helper.showDistance(n.link)); @@ -280,9 +312,9 @@ define(['sorttable', 'snabbdom', 'd3-interpolate', 'moment', 'helper'], children.push(helper.attributeEntry(V, 'node.ram', showRAM(d))); } children.push(helper.attributeEntry(V, 'node.ipAddresses', showIPs(d))); - children.push(helper.attributeEntry(V, 'node.selectedGateway', gateways[helper.dictGet(d, ['gateway'])])); children.push(helper.attributeEntry(V, 'node.update', showAutoupdate(d))); children.push(helper.attributeEntry(V, 'node.clients', showClients(d))); + children.push(helper.attributeEntry(V, 'node.gateway', showGateway(d))); var elNew = V.h('table', children); table = V.patch(table, elNew); diff --git a/lib/main.js b/lib/main.js index 789ce60..bf74dda 100644 --- a/lib/main.js +++ b/lib/main.js @@ -7,7 +7,7 @@ define(['moment', 'utils/router', 'leaflet', 'gui', 'helper', 'utils/language'], var timestamp; var nodes = []; var links = []; - var gateways = {}; + var nodeDict = {}; for (var i = 0; i < data.length; ++i) { nodes = nodes.concat(data[i].nodes); @@ -28,12 +28,7 @@ define(['moment', 'utils/router', 'leaflet', 'gui', 'helper', 'utils/language'], nodes.forEach(function (d) { d.neighbours = []; - if (d.is_gateway && d.network.mesh) { - var mesh = d.network.mesh; - mesh[Object.keys(mesh)[0]].interfaces.tunnel.forEach(function (mac) { - gateways[mac] = d.hostname; - }); - } + nodeDict[d.node_id] = d; }); links.forEach(function (d) { @@ -77,7 +72,7 @@ define(['moment', 'utils/router', 'leaflet', 'gui', 'helper', 'utils/language'], links: [], nodes: [] }, - gateways: gateways + nodeDict: nodeDict }; } diff --git a/lib/map/clientlayer.js b/lib/map/clientlayer.js index c970bfa..42e57ef 100644 --- a/lib/map/clientlayer.js +++ b/lib/map/clientlayer.js @@ -56,7 +56,6 @@ define(['leaflet', 'rbush', 'helper'], helper.positionClients(ctx, p, d.startAngle, d.node, startDistance); }); - return tile; } }); diff --git a/lib/proportions.js b/lib/proportions.js index 611543b..260a761 100644 --- a/lib/proportions.js +++ b/lib/proportions.js @@ -13,6 +13,7 @@ define(['d3-interpolate', 'snabbdom', 'filters/genericnode', 'helper'], var geoTable; var autoTable; var gatewayTable; + var gateway6Table; var siteTable; function count(nodes, key, f) { @@ -78,11 +79,17 @@ define(['d3-interpolate', 'snabbdom', 'filters/genericnode', 'helper'], self.setData = function setData(data) { var onlineNodes = data.nodes.all.filter(helper.online); var nodes = onlineNodes.concat(data.nodes.lost); - var nodeDict = {}; - data.nodes.all.forEach(function (d) { - nodeDict[d.node_id] = d; - }); + function hostnameOfNodeID(nodeid) { + var gateway = data.nodeDict[nodeid]; + if (gateway) { + return gateway.hostname; + } + return null; + } + + var gatewayDict = count(nodes, ['gateway'], hostnameOfNodeID); + var gateway6Dict = count(nodes, ['gateway6'], hostnameOfNodeID); var statusDict = count(nodes, ['is_online'], function (d) { return d ? 'online' : 'offline'; @@ -102,16 +109,6 @@ define(['d3-interpolate', 'snabbdom', 'filters/genericnode', 'helper'], return _.t('node.deactivated'); }); - var gatewayDict = count(nodes, ['is_gateway'], function (d) { - for (var mac in data.gateways) { - if (data.gateways.hasOwnProperty(mac) && mac === d) { - d = data.gateways[mac]; - return d; - } - } - return null; - }); - var siteDict = count(nodes, ['nodeinfo', 'site_code'], function (d) { if (config.siteNames) { config.siteNames.forEach(function (t) { @@ -144,7 +141,10 @@ define(['d3-interpolate', 'snabbdom', 'filters/genericnode', 'helper'], autoTable = fillTable('node.update', autoTable, autoDict.sort(function (a, b) { return b[1] - a[1]; })); - gatewayTable = fillTable('node.gateway', gatewayTable, gatewayDict.sort(function (a, b) { + gatewayTable = fillTable('node.selectedGatewayIPv4', gatewayTable, gatewayDict.sort(function (a, b) { + return b[1] - a[1]; + })); + gateway6Table = fillTable('node.selectedGatewayIPv6', gateway6Table, gateway6Dict.sort(function (a, b) { return b[1] - a[1]; })); siteTable = fillTable('node.site', siteTable, siteDict.sort(function (a, b) { @@ -158,7 +158,8 @@ define(['d3-interpolate', 'snabbdom', 'filters/genericnode', 'helper'], self.renderSingle(el, 'node.hardware', hwTable); self.renderSingle(el, 'node.visible', geoTable); self.renderSingle(el, 'node.update', autoTable); - self.renderSingle(el, 'node.gateway', gatewayTable); + self.renderSingle(el, 'node.selectedGatewayIPv4', gatewayTable); + self.renderSingle(el, 'node.selectedGatewayIPv6', gateway6Table); self.renderSingle(el, 'node.site', siteTable); if (config.globalInfos) { diff --git a/lib/utils/router.js b/lib/utils/router.js index 1e52204..7d144a4 100644 --- a/lib/utils/router.js +++ b/lib/utils/router.js @@ -3,7 +3,7 @@ define(['Navigo'], function (Navigo) { return function (language) { var init = false; - var objects = { nodes: {}, links: {}, gateways: {} }; + var objects = { nodes: {}, links: {}, nodeDict: {} }; var targets = []; var views = {}; var current = {}; @@ -18,7 +18,7 @@ define(['Navigo'], function (Navigo) { function gotoNode(d) { if (d.nodeId in objects.nodes) { targets.forEach(function (t) { - t.gotoNode(objects.nodes[d.nodeId], objects.gateways); + t.gotoNode(objects.nodes[d.nodeId], objects.nodeDict); }); } } @@ -141,7 +141,7 @@ define(['Navigo'], function (Navigo) { router.setData = function setData(data) { objects.nodes = {}; objects.links = {}; - objects.gateways = data.gateways; + objects.nodeDict = data.nodeDict; data.nodes.all.forEach(function (d) { objects.nodes[d.node_id] = d; diff --git a/locale/en.json b/locale/en.json index da3dc05..db65150 100644 --- a/locale/en.json +++ b/locale/en.json @@ -27,7 +27,9 @@ "systemLoad": "Load average", "ram": "Memory usage", "ipAddresses": "IP addresses", - "selectedGateway": "Selected gateway", + "nexthop": "Nexthop", + "selectedGatewayIPv4": "Selected ipv4-gateway", + "selectedGatewayIPv6": "Selected ipv6-gateway", "link": "Link |||| Links", "node": "Node |||| Nodes", "new": "New nodes", diff --git a/scss/modules/_infobox.scss b/scss/modules/_infobox.scss index 5bf25e3..6e97048 100644 --- a/scss/modules/_infobox.scss +++ b/scss/modules/_infobox.scss @@ -1,5 +1,6 @@ .infobox { - .clients { + .clients, + .gateway { display: flex; span { @@ -7,7 +8,8 @@ text-align: center; } - .ion-people { + .ion-people, + .ion-arrow-right-c { font-size: 1.5em; } } From fb857717fd0055e1afe544a2db7145c645a1798f Mon Sep 17 00:00:00 2001 From: Geno Date: Sun, 29 Oct 2017 19:04:02 +0100 Subject: [PATCH 042/119] [BUGFIX] Forcegraph delete and add nodes again on same position --- lib/forcegraph.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/forcegraph.js b/lib/forcegraph.js index 76955f7..beda51c 100644 --- a/lib/forcegraph.js +++ b/lib/forcegraph.js @@ -1,5 +1,5 @@ -define(['d3-selection', 'd3-force', 'd3-zoom', 'd3-drag', 'd3-timer', 'd3-ease', 'd3-interpolate', 'helper', 'utils/math', 'forcegraph/draw'], - function (d3Selection, d3Force, d3Zoom, d3Drag, d3Timer, d3Ease, d3Interpolate, helper, math, draw) { +define(['d3-selection', 'd3-force', 'd3-zoom', 'd3-drag', 'd3-timer', 'd3-ease', 'd3-interpolate', 'utils/math', 'forcegraph/draw'], + function (d3Selection, d3Force, d3Zoom, d3Drag, d3Timer, d3Ease, d3Interpolate, math, draw) { 'use strict'; return function (config, linkScale, sidebar, router) { @@ -197,7 +197,7 @@ define(['d3-selection', 'd3-force', 'd3-zoom', 'd3-drag', 'd3-timer', 'd3-ease', }); self.setData = function setData(data) { - intNodes = data.nodes.all.filter(helper.online).map(function (d) { + intNodes = data.nodes.all.map(function (d) { var e = dictNodes[d.node_id]; if (!e) { e = {}; @@ -207,10 +207,10 @@ define(['d3-selection', 'd3-force', 'd3-zoom', 'd3-drag', 'd3-timer', 'd3-ease', e.o = d; return e; - }); + }).filter(function (e) { return e.o.is_online;}); intLinks = data.links.filter(function (d) { - return dictNodes[d.source.node_id] && dictNodes[d.target.node_id]; + return dictNodes[d.source.node_id].o.is_online && dictNodes[d.target.node_id].o.is_online; }).map(function (d) { return { o: d, From d6b84eba22ced96e37a0de22f522f9ebf847198f Mon Sep 17 00:00:00 2001 From: Geno Date: Sun, 29 Oct 2017 20:14:09 +0100 Subject: [PATCH 043/119] [BUGFIX] Filter links by node + perfomance using dict/map --- lib/filters/nodefilter.js | 22 ++-------------------- lib/infobox/node.js | 4 ++-- lib/main.js | 13 ++----------- 3 files changed, 6 insertions(+), 33 deletions(-) diff --git a/lib/filters/nodefilter.js b/lib/filters/nodefilter.js index 0cf7fd0..b8e24a8 100644 --- a/lib/filters/nodefilter.js +++ b/lib/filters/nodefilter.js @@ -12,26 +12,8 @@ define(function () { } } - var filteredIds = new Set(); - - n.graph = {}; - n.graph.nodes = data.graph.nodes.filter(function (d) { - var r; - if (d.node) { - r = filter(d.node); - } else { - r = filter({}); - } - - if (r) { - filteredIds.add(d.id); - } - - return r; - }); - - n.graph.links = data.graph.links.filter(function (d) { - return filteredIds.has(d.source.id) && filteredIds.has(d.target.id); + n.links = data.links.filter(function (d) { + return filter(d.source) && filter(d.target); }); return n; diff --git a/lib/infobox/node.js b/lib/infobox/node.js index 98c8b10..04f0f2e 100644 --- a/lib/infobox/node.js +++ b/lib/infobox/node.js @@ -229,9 +229,9 @@ define(['sorttable', 'snabbdom', 'd3-interpolate', 'moment', 'helper'], } function renderNeighbourRow(n) { - var icons = []; + var icons = ''; if (helper.hasLocation(n.node)) { - icons.push(V.h('span', { props: { className: 'ion-location' } })); + icons = V.h('span', { props: { className: 'ion-location' } }); } var td1 = V.h('td', icons); diff --git a/lib/main.js b/lib/main.js index bf74dda..1003216 100644 --- a/lib/main.js +++ b/lib/main.js @@ -32,13 +32,8 @@ define(['moment', 'utils/router', 'leaflet', 'gui', 'helper', 'utils/language'], }); links.forEach(function (d) { - d.source = nodes.find(function (a) { - return a.node_id === d.source; - }); - - d.target = nodes.find(function (a) { - return a.node_id === d.target; - }); + d.source = nodeDict[d.source]; + d.target = nodeDict[d.target]; d.id = [d.source.node_id, d.target.node_id].join('-'); d.source.neighbours.push({ node: d.target, link: d }); @@ -68,10 +63,6 @@ define(['moment', 'utils/router', 'leaflet', 'gui', 'helper', 'utils/language'], lost: lostnodes }, links: links, - graph: { - links: [], - nodes: [] - }, nodeDict: nodeDict }; } From af589ee2274a59bbd8a3bca039b57936cb351554 Mon Sep 17 00:00:00 2001 From: Xaver Maierhofer Date: Sun, 29 Oct 2017 20:52:17 +0100 Subject: [PATCH 044/119] [TASK] Remove outdated code --- lib/filters/hostname.js | 2 +- lib/infobox/link.js | 5 +- lib/infobox/node.js | 104 ++++++++++------------------------- lib/legend.js | 2 +- lib/linklist.js | 10 ++-- lib/map.js | 2 +- lib/nodelist.js | 34 +++++------- lib/simplenodelist.js | 29 ++++------ lib/utils/helper.js | 2 +- scss/modules/_sidebar.scss | 4 -- scss/modules/_variables.scss | 1 - 11 files changed, 68 insertions(+), 127 deletions(-) diff --git a/lib/filters/hostname.js b/lib/filters/hostname.js index c269d54..6fbc932 100644 --- a/lib/filters/hostname.js +++ b/lib/filters/hostname.js @@ -16,7 +16,7 @@ define(function () { } function run(d) { - return (d !== undefined ? d.hostname.toLowerCase().includes(input.value.toLowerCase()) : ''); + return d.hostname.toLowerCase().includes(input.value.toLowerCase()); } function setRefresh(f) { diff --git a/lib/infobox/link.js b/lib/infobox/link.js index 8457c9c..521a7f3 100644 --- a/lib/infobox/link.js +++ b/lib/infobox/link.js @@ -46,9 +46,8 @@ define(['helper', 'snabbdom'], function (helper, V) { } }, helper.showTq(d.source_tq) + ' - ' + helper.showTq(d.target_tq)))); children.push(helper.attributeEntry(V, 'node.distance', helper.showDistance(d))); - children.push(helper.attributeEntry(V, 'node.hardware', - helper.dictGet(d.source, ['model']) + ' – ' + helper.dictGet(d.target, ['model'])) - ); + children.push(helper.attributeEntry(V, 'node.hardware', (d.source.model ? d.source.model + ' – ' : '') + + (d.target.model ? d.target.model : ''))); var elNew = V.h('table', children); table = V.patch(table, elNew); diff --git a/lib/infobox/node.js b/lib/infobox/node.js index 04f0f2e..8410286 100644 --- a/lib/infobox/node.js +++ b/lib/infobox/node.js @@ -18,7 +18,7 @@ define(['sorttable', 'snabbdom', 'd3-interpolate', 'moment', 'helper'], function showStatus(d) { return V.h('td', - { props: { className: d.is_unseen ? 'unseen' : (d.is_online ? 'online' : 'offline') } }, + { props: { className: d.is_online ? 'online' : 'offline' } }, _.t((d.is_online ? 'node.lastOnline' : 'node.lastOffline'), { time: d.lastseen.fromNow(), date: d.lastseen.format('DD.MM.YYYY, H:mm:ss') @@ -35,32 +35,15 @@ define(['sorttable', 'snabbdom', 'd3-interpolate', 'moment', 'helper'], } function showSite(d, config) { - var site = helper.dictGet(d, ['site_code']); - var rt = site; + var rt = d.site_code; if (config.siteNames) { config.siteNames.forEach(function (t) { - if (site === t.site) { + if (d.site_code === t.site) { rt = t.name; } }); } - return rt || undefined; - } - - function showUptime(d) { - if (!('uptime' in d)) { - return undefined; - } - - return moment.utc(d.uptime).local().fromNow(true); - } - - function showFirstseen(d) { - if (!('firstseen' in d)) { - return undefined; - } - - return d.firstseen.fromNow(true); + return rt; } function showClients(d) { @@ -101,22 +84,15 @@ define(['sorttable', 'snabbdom', 'd3-interpolate', 'moment', 'helper'], } function showIPs(d) { - var ips = helper.dictGet(d, ['network', 'addresses']); - if (ips === null) { - return undefined; - } - - ips.sort(); - var string = []; + var ips = d.network.addresses; + ips.sort(); ips.forEach(function (ip, i) { - var link = !ip.startsWith('fe80:'); - if (i > 0) { string.push(V.h('br')); } - if (link) { + if (!ip.startsWith('fe80:')) { string.push(V.h('a', { props: { href: 'http://[' + ip + ']/', target: '_blank' } }, ip)); } else { string.push(ip); @@ -142,37 +118,18 @@ define(['sorttable', 'snabbdom', 'd3-interpolate', 'moment', 'helper'], if (!('loadavg' in d)) { return undefined; } - - var value = d.loadavg.toFixed(2); - var width = d.loadavg % 1; - var warning = false; - if (d.loadavg >= d.nproc) { - warning = true; - } - return showBar(value, width, warning); + return showBar(d.loadavg.toFixed(2), d.loadavg % 1, d.loadavg >= d.nproc); } function showRAM(d) { if (!('memory_usage' in d)) { return undefined; } - - var value = Math.round(d.memory_usage * 100) + ' %'; - var width = d.memory_usage; - var warning = false; - if (d.memory_usage >= 0.8) { - warning = true; - } - return showBar(value, width, warning); + return showBar(Math.round(d.memory_usage * 100) + ' %', d.memory_usage, d.memory_usage >= 0.8); } function showAutoupdate(d) { - var au = helper.dictGet(d, ['autoupdater']); - if (!au) { - return undefined; - } - - return au.enabled ? _.t('node.activated', { branch: au.branch }) : _.t('node.deactivated'); + return d.autoupdater.enabled ? _.t('node.activated', { branch: d.autoupdater.branch }) : _.t('node.deactivated'); } function showStatImg(o, d) { @@ -198,28 +155,28 @@ define(['sorttable', 'snabbdom', 'd3-interpolate', 'moment', 'helper'], }, node.hostname); } - function nodeidLink(nodeid) { - if (nodeDict[nodeid]) { - return nodeLink(nodeDict[nodeid]); + function nodeIdLink(nodeId) { + if (nodeDict[nodeId]) { + return nodeLink(nodeDict[nodeId]); } - return nodeid; + return nodeId; } function showGateway(node) { var gatewayCols = [ V.h('span', [ - nodeidLink(node.gateway_nexthop), + nodeIdLink(node.gateway_nexthop), V.h('br'), _.t('node.nexthop') ]), V.h('span', { props: { className: 'ion-arrow-right-c' } }), V.h('span', [ - nodeidLink(node.gateway), + nodeIdLink(node.gateway), V.h('br'), 'IPv4' ]), V.h('span', [ - nodeidLink(node.gateway6), + nodeIdLink(node.gateway6), V.h('br'), 'IPv6' ]) @@ -234,13 +191,13 @@ define(['sorttable', 'snabbdom', 'd3-interpolate', 'moment', 'helper'], icons = V.h('span', { props: { className: 'ion-location' } }); } - var td1 = V.h('td', icons); - var td2 = V.h('td', nodeLink(n.node)); - var td3 = V.h('td', (n.node.clients ? n.node.clients.toString() : '0')); - var td4 = V.h('td', { style: { color: linkScale((n.link.source_tq + n.link.target_tq) / 2) } }, helper.showTq(n.link.source_tq) + ' - ' + helper.showTq(n.link.target_tq)); - var td5 = V.h('td', helper.showDistance(n.link)); - - return V.h('tr', [td1, td2, td3, td4, td5]); + return V.h('tr', [ + V.h('td', icons), + V.h('td', nodeLink(n.node)), + V.h('td', n.node.clients), + V.h('td', { style: { color: linkScale((n.link.source_tq + n.link.target_tq) / 2) } }, helper.showTq(n.link.source_tq) + ' - ' + helper.showTq(n.link.target_tq)), + V.h('td', helper.showDistance(n.link)) + ]); } var self = this; @@ -260,8 +217,7 @@ define(['sorttable', 'snabbdom', 'd3-interpolate', 'moment', 'helper'], name: 'node.clients', class: 'ion-people', sort: function (a, b) { - return ('clients' in a.node ? a.node.clients : -1) - - ('clients' in b.node ? b.node.clients : -1); + return a.node.clients - b.node.clients; }, reverse: true }, { @@ -294,19 +250,19 @@ define(['sorttable', 'snabbdom', 'd3-interpolate', 'moment', 'helper'], var children = []; children.push(helper.attributeEntry(V, 'node.status', showStatus(d))); - children.push(helper.attributeEntry(V, 'node.gateway', d.is_gateway ? 'ja' : null)); + children.push(helper.attributeEntry(V, 'node.gateway', d.is_gateway ? 'ja' : undefined)); children.push(helper.attributeEntry(V, 'node.coordinates', showGeoURI(d))); if (config.nodeInfobox && config.nodeInfobox.contact) { children.push(helper.attributeEntry(V, 'node.contact', helper.dictGet(d, ['owner', 'contact']))); } - children.push(helper.attributeEntry(V, 'node.hardware', helper.dictGet(d, ['model']))); - children.push(helper.attributeEntry(V, 'node.primaryMac', helper.dictGet(d, ['network', 'mac']))); + children.push(helper.attributeEntry(V, 'node.hardware', d.model)); + children.push(helper.attributeEntry(V, 'node.primaryMac', d.network.mac)); children.push(helper.attributeEntry(V, 'node.firmware', showFirmware(d))); children.push(helper.attributeEntry(V, 'node.site', showSite(d, config))); - children.push(helper.attributeEntry(V, 'node.uptime', showUptime(d))); - children.push(helper.attributeEntry(V, 'node.firstSeen', showFirstseen(d))); + children.push(helper.attributeEntry(V, 'node.uptime', moment.utc(d.uptime).local().fromNow(true))); + children.push(helper.attributeEntry(V, 'node.firstSeen', d.firstseen.fromNow(true))); if (config.nodeInfobox && config.nodeInfobox.hardwareUsage) { children.push(helper.attributeEntry(V, 'node.systemLoad', showLoad(d))); children.push(helper.attributeEntry(V, 'node.ram', showRAM(d))); diff --git a/lib/legend.js b/lib/legend.js index 93da01f..5ccac00 100644 --- a/lib/legend.js +++ b/lib/legend.js @@ -10,7 +10,7 @@ define(['helper'], function (helper) { var totalNodes = helper.sum(d.nodes.all.map(helper.one)); var totalOnlineNodes = helper.sum(d.nodes.all.filter(helper.online).map(helper.one)); var totalClients = helper.sum(d.nodes.all.filter(helper.online).map(function (n) { - return n.clients ? n.clients : 0; + return n.clients; })); var totalGateways = helper.sum(d.nodes.all.filter(helper.online).filter(function (n) { return n.is_gateway; diff --git a/lib/linklist.js b/lib/linklist.js index d96da21..b6d2cf3 100644 --- a/lib/linklist.js +++ b/lib/linklist.js @@ -43,11 +43,11 @@ define(['sorttable', 'snabbdom', 'helper'], function (SortTable, V, helper) { } }, linkName(d))]; - var td1 = V.h('td', td1Content); - var td2 = V.h('td', { style: { color: linkScale((d.source_tq + d.target_tq) / 2) } }, helper.showTq(d.source_tq) + ' - ' + helper.showTq(d.target_tq)); - var td3 = V.h('td', helper.showDistance(d)); - - return V.h('tr', [td1, td2, td3]); + return V.h('tr', [ + V.h('td', td1Content), + V.h('td', { style: { color: linkScale((d.source_tq + d.target_tq) / 2) } }, helper.showTq(d.source_tq) + ' - ' + helper.showTq(d.target_tq)), + V.h('td', helper.showDistance(d)) + ]); } this.render = function render(d) { diff --git a/lib/map.js b/lib/map.js index 6c8dd1c..6f45e56 100644 --- a/lib/map.js +++ b/lib/map.js @@ -47,7 +47,7 @@ define(['map/clientlayer', 'map/labellayer', 'map/button', 'leaflet'], var layers = config.mapLayers.map(function (d) { return { 'name': d.name, - 'layer': 'url' in d ? L.tileLayer(d.url.replace('{retina}', L.Browser.retina ? '@2x' : ''), d.config) : console.warn('Missing map url') + 'layer': L.tileLayer(d.url.replace('{retina}', L.Browser.retina ? '@2x' : ''), d.config) }; }); diff --git a/lib/nodelist.js b/lib/nodelist.js index 4064425..dd65309 100644 --- a/lib/nodelist.js +++ b/lib/nodelist.js @@ -42,40 +42,36 @@ define(['sorttable', 'snabbdom', 'helper'], function (SortTable, V, helper) { name: 'node.clients', class: 'ion-people', sort: function (a, b) { - return ('clients' in a ? a.clients : -1) - - ('clients' in b ? b.clients : -1); + return a.clients - b.clients; }, reverse: true }]; return function (router) { function renderRow(d) { - var td0Content = []; - var td1Content = []; - var aClass = ['hostname', d.is_online ? 'online' : 'offline']; + var td0Content = ''; + if (helper.hasLocation(d)) { + td0Content = V.h('span', { props: { className: 'icon ion-location' } }); + } - td1Content.push(V.h('a', { + var td1Content = V.h('a', { props: { - className: aClass.join(' '), + className: ['hostname', d.is_online ? 'online' : 'offline'].join(' '), href: router.generateLink({ node: d.node_id }) }, on: { click: function (e) { router.fullUrl({ node: d.node_id }, e); } } - }, d.hostname)); + }, d.hostname); - if (helper.hasLocation(d)) { - td0Content.push(V.h('span', { props: { className: 'icon ion-location' } })); - } - - var td0 = V.h('td', td0Content); - var td1 = V.h('td', td1Content); - var td2 = V.h('td', showUptime(d.uptime)); - var td3 = V.h('td', d.neighbours.length); - var td4 = V.h('td', Number('clients' in d ? d.clients : 0).toFixed(0)); - - return V.h('tr', [td0, td1, td2, td3, td4]); + return V.h('tr', [ + V.h('td', td0Content), + V.h('td', td1Content), + V.h('td', showUptime(d.uptime)), + V.h('td', d.neighbours.length), + V.h('td', d.clients) + ]); } var table = new SortTable(headings, 1, renderRow); diff --git a/lib/simplenodelist.js b/lib/simplenodelist.js index 89b4bda..e7f710e 100644 --- a/lib/simplenodelist.js +++ b/lib/simplenodelist.js @@ -34,32 +34,27 @@ define(['moment', 'snabbdom', 'helper'], function (moment, V, helper) { } var items = list.map(function (d) { - var time = moment(d[field]).from(data.now); - var td0Content = []; - var td1Content = []; + var td0Content = ''; + if (helper.hasLocation(d)) { + td0Content = V.h('span', { props: { className: 'icon ion-location' } }); + } - var aClass = ['hostname', d.is_online ? 'online' : 'offline']; - - td1Content.push(V.h('a', { + var td1Content = V.h('a', { props: { - className: aClass.join(' '), + className: ['hostname', d.is_online ? 'online' : 'offline'].join(' '), href: router.generateLink({ node: d.node_id }) }, on: { click: function (e) { router.fullUrl({ node: d.node_id }, e); } } - }, d.hostname)); + }, d.hostname); - if (helper.hasLocation(d)) { - td0Content.push(V.h('span', { props: { className: 'icon ion-location' } })); - } - - var td0 = V.h('td', td0Content); - var td1 = V.h('td', td1Content); - var td2 = V.h('td', time); - - return V.h('tr', [td0, td1, td2]); + return V.h('tr', [ + V.h('td', td0Content), + V.h('td', td1Content), + V.h('td', moment(d[field]).from(data.now)) + ]); }); var tbodyNew = V.h('tbody', items); diff --git a/lib/utils/helper.js b/lib/utils/helper.js index ee6a211..212f5a5 100644 --- a/lib/utils/helper.js +++ b/lib/utils/helper.js @@ -114,7 +114,7 @@ define({ }, attributeEntry: function attributeEntry(V, label, value) { - if (value === null || value === undefined) { + if (value === undefined) { return ''; } diff --git a/scss/modules/_sidebar.scss b/scss/modules/_sidebar.scss index 8d7971a..4dfd2db 100644 --- a/scss/modules/_sidebar.scss +++ b/scss/modules/_sidebar.scss @@ -142,7 +142,3 @@ .offline { color: $color-offline; } - -.unseen { - color: $color-unseen; -} diff --git a/scss/modules/_variables.scss b/scss/modules/_variables.scss index 81003ef..59e702a 100644 --- a/scss/modules/_variables.scss +++ b/scss/modules/_variables.scss @@ -9,7 +9,6 @@ $color-primary: #dc0067 !default; $color-new: #459c18 !default; $color-online: #1566a9 !default; $color-offline: #cf3e2a !default; -$color-unseen: #d89100 !default; $color-24ghz: $color-primary !default; $color-5ghz: #e3a619 !default; From 57ee21f8ec91106288c98f16885ae97b2228bffc Mon Sep 17 00:00:00 2001 From: Xaver Maierhofer Date: Mon, 30 Oct 2017 03:14:08 +0100 Subject: [PATCH 045/119] [BUGFIX] Use less force after init --- lib/forcegraph.js | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/lib/forcegraph.js b/lib/forcegraph.js index beda51c..1d4cf67 100644 --- a/lib/forcegraph.js +++ b/lib/forcegraph.js @@ -15,6 +15,7 @@ define(['d3-selection', 'd3-force', 'd3-zoom', 'd3-drag', 'd3-timer', 'd3-ease', var dictNodes = {}; var intLinks = []; var movetoTimer; + var initial = 1.8; var NODE_RADIUS_DRAG = 10; var NODE_RADIUS_SELECT = 15; @@ -24,7 +25,7 @@ define(['d3-selection', 'd3-force', 'd3-zoom', 'd3-drag', 'd3-timer', 'd3-ease', var ZOOM_MIN = 1 / 8; var ZOOM_MAX = 3; - var FORCE_ALPHA = 0.3; + var FORCE_ALPHA = 0.01; draw.setTransform(transform); @@ -148,7 +149,7 @@ define(['d3-selection', 'd3-force', 'd3-zoom', 'd3-drag', 'd3-timer', 'd3-ease', .force('y', d3Force.forceY().strength(0.02)) .force('collide', d3Force.forceCollide()) .on('tick', redraw) - .alphaDecay(0.015); + .alphaDecay(0.025); var drag = d3Drag.drag() .subject(function () { @@ -207,7 +208,9 @@ define(['d3-selection', 'd3-force', 'd3-zoom', 'd3-drag', 'd3-timer', 'd3-ease', e.o = d; return e; - }).filter(function (e) { return e.o.is_online;}); + }).filter(function (e) { + return e.o.is_online; + }); intLinks = data.links.filter(function (d) { return dictNodes[d.source.node_id].o.is_online && dictNodes[d.target.node_id].o.is_online; @@ -224,7 +227,11 @@ define(['d3-selection', 'd3-force', 'd3-zoom', 'd3-drag', 'd3-timer', 'd3-ease', force.nodes(intNodes); forceLink.links(intLinks); - force.alpha(1).restart(); + force.alpha(initial).velocityDecay(0.15).restart(); + if (initial === 1.8) { + initial = 0.5; + } + resizeCanvas(); }; From f060884b04bde9d30939f150c40f9272fc3f6d36 Mon Sep 17 00:00:00 2001 From: Xaver Maierhofer Date: Mon, 30 Oct 2017 21:01:38 +0100 Subject: [PATCH 046/119] [BUGFIX] Long hostname in node detail links --- scss/modules/_infobox.scss | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/scss/modules/_infobox.scss b/scss/modules/_infobox.scss index 6e97048..50b22ec 100644 --- a/scss/modules/_infobox.scss +++ b/scss/modules/_infobox.scss @@ -14,6 +14,18 @@ } } + .node-links { + table-layout: fixed; + + th, + td { + &:nth-child(3), + &:nth-child(5) { + width: 12%; + } + } + } + input, textarea { border: 1px solid $color-gray-light; From da029735cf2a2ef27b86d4838dfb42ce0f4b6211 Mon Sep 17 00:00:00 2001 From: Xaver Maierhofer Date: Mon, 30 Oct 2017 22:24:37 +0100 Subject: [PATCH 047/119] [TASK] Update d3 zoom & navigo fix --- yarn.lock | 194 ++++++++++++++++++++++++++++-------------------------- 1 file changed, 100 insertions(+), 94 deletions(-) diff --git a/yarn.lock b/yarn.lock index d7b7afa..b5d4945 100644 --- a/yarn.lock +++ b/yarn.lock @@ -52,8 +52,8 @@ acorn@^3.0.4: resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" acorn@^5.0.3, acorn@^5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.1.2.tgz#911cb53e036807cf0fa778dc5d370fbd864246d7" + version "5.2.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.2.1.tgz#317ac7821826c22c702d66189ab8359675f135d7" after@0.8.1: version "0.8.1" @@ -64,8 +64,8 @@ ajv-keywords@^1.0.0: resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c" ajv-keywords@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.0.tgz#a296e17f7bfae7c1ce4f7e0de53d29cb32162df0" + version "2.1.1" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762" ajv@^4.7.0, ajv@^4.9.1: version "4.11.8" @@ -75,13 +75,13 @@ ajv@^4.7.0, ajv@^4.9.1: json-stable-stringify "^1.0.1" ajv@^5.1.0, ajv@^5.2.0, ajv@^5.2.3: - version "5.2.3" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.2.3.tgz#c06f598778c44c6b161abafe3466b81ad1814ed2" + version "5.3.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.3.0.tgz#4414ff74a50879c208ee5fdc826e32c303549eda" dependencies: co "^4.6.0" fast-deep-equal "^1.0.0" + fast-json-stable-stringify "^2.0.0" json-schema-traverse "^0.3.0" - json-stable-stringify "^1.0.1" almond@^0.3.3: version "0.3.3" @@ -295,11 +295,11 @@ atob@~1.1.0: resolved "https://registry.yarnpkg.com/atob/-/atob-1.1.3.tgz#95f13629b12c3a51a5d215abdce2aa9f32f80773" autoprefixer@^7.0.0: - version "7.1.5" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-7.1.5.tgz#d65d14b83c7cd1dd7bc801daa00557addf5a06b2" + version "7.1.6" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-7.1.6.tgz#fb933039f74af74a83e71225ce78d9fd58ba84d7" dependencies: - browserslist "^2.5.0" - caniuse-lite "^1.0.30000744" + browserslist "^2.5.1" + caniuse-lite "^1.0.30000748" normalize-range "^0.1.2" num2fraction "^1.2.2" postcss "^6.0.13" @@ -553,12 +553,12 @@ browser-sync@^2.18.13: ua-parser-js "0.7.12" yargs "6.4.0" -browserslist@^2.5.0: - version "2.5.1" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.5.1.tgz#68e4bc536bbcc6086d62843a2ffccea8396821c6" +browserslist@^2.5.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.6.1.tgz#cc65a05ad6131ebda26f076f2822ba1bc826376b" dependencies: - caniuse-lite "^1.0.30000744" - electron-to-chromium "^1.3.24" + caniuse-lite "^1.0.30000755" + electron-to-chromium "^1.3.27" bs-recipes@1.3.4: version "1.3.4" @@ -625,9 +625,9 @@ camelcase@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" -caniuse-lite@^1.0.30000744: - version "1.0.30000746" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000746.tgz#c64f95a3925cfd30207a308ed76c1ae96ea09ea0" +caniuse-lite@^1.0.30000748, caniuse-lite@^1.0.30000755: + version "1.0.30000756" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000756.tgz#3da701c1521b9fab87004c6de7c97fa47dbeaad2" caseless@~0.12.0: version "0.12.0" @@ -650,8 +650,8 @@ chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3: supports-color "^2.0.0" chalk@^2.0.0, chalk@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.1.0.tgz#ac5becf14fa21b99c6c92ca7a7d7cfd5b17e743e" + version "2.3.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.0.tgz#b5ea48efc9c1793dccc9b4767c93914d3f2d52ba" dependencies: ansi-styles "^3.1.0" escape-string-regexp "^1.0.5" @@ -926,10 +926,11 @@ css-select@~1.2.0: domutils "1.5.1" nth-check "~1.0.1" -css-tree@1.0.0-alpha19: - version "1.0.0-alpha19" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha19.tgz#949aa846c2c15b3979792e8fce05f6b6e3ebcad4" +css-tree@1.0.0-alpha25: + version "1.0.0-alpha25" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha25.tgz#1bbfabfbf6eeef4f01d9108ff2edd0be2fe35597" dependencies: + mdn-data "^1.0.0" source-map "^0.5.3" css-what@1.0: @@ -949,11 +950,11 @@ css@2.X, css@^2.2.1: source-map-resolve "^0.3.0" urix "^0.1.0" -csso@3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/csso/-/csso-3.1.1.tgz#ab427584486c2e02e180327511b0b02a9179c272" +csso@3.3.x: + version "3.3.1" + resolved "https://registry.yarnpkg.com/csso/-/csso-3.3.1.tgz#e069a8f52adcf53685a8a7374256ccbc22c6ce3e" dependencies: - css-tree "1.0.0-alpha19" + css-tree "1.0.0-alpha25" csso@~2.3.1: version "2.3.2" @@ -1030,8 +1031,8 @@ d3-transition@1: d3-timer "1" d3-zoom@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/d3-zoom/-/d3-zoom-1.6.0.tgz#eb645b07fd0c37acc8b36b88476b781ed277b40e" + version "1.7.1" + resolved "https://registry.yarnpkg.com/d3-zoom/-/d3-zoom-1.7.1.tgz#02f43b3c3e2db54f364582d7e4a236ccc5506b63" dependencies: d3-dispatch "1" d3-drag "1" @@ -1280,9 +1281,9 @@ ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" -electron-to-chromium@^1.3.24: - version "1.3.26" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.26.tgz#996427294861a74d9c7c82b9260ea301e8c02d66" +electron-to-chromium@^1.3.27: + version "1.3.27" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.27.tgz#78ecb8a399066187bb374eede35d9c70565a803d" emitter-steward@^1.0.0: version "1.0.0" @@ -1375,7 +1376,7 @@ es-to-primitive@^1.1.1: is-date-object "^1.0.1" is-symbol "^1.0.1" -es5-ext@^0.10.14, es5-ext@^0.10.30, es5-ext@^0.10.9, es5-ext@~0.10.14, es5-ext@~0.10.2: +es5-ext@^0.10.14, es5-ext@^0.10.30, es5-ext@^0.10.35, es5-ext@^0.10.9, es5-ext@~0.10.14, es5-ext@~0.10.2: version "0.10.35" resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.35.tgz#18ee858ce6a3c45c7d79e91c15fcca9ec568494f" dependencies: @@ -1383,12 +1384,12 @@ es5-ext@^0.10.14, es5-ext@^0.10.30, es5-ext@^0.10.9, es5-ext@~0.10.14, es5-ext@~ es6-symbol "~3.1.1" es6-iterator@^2.0.1, es6-iterator@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.1.tgz#8e319c9f0453bf575d374940a655920e59ca5512" + version "2.0.3" + resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" dependencies: d "1" - es5-ext "^0.10.14" - es6-symbol "^3.1" + es5-ext "^0.10.35" + es6-symbol "^3.1.1" es6-map@^0.1.3: version "0.1.5" @@ -1411,7 +1412,7 @@ es6-set@~0.1.5: es6-symbol "3.1.1" event-emitter "~0.3.5" -es6-symbol@3.1.1, es6-symbol@^3.1, es6-symbol@^3.1.1, es6-symbol@~3.1.1: +es6-symbol@3.1.1, es6-symbol@^3.1.1, es6-symbol@~3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77" dependencies: @@ -1509,8 +1510,8 @@ eslint@^2.7.0: user-home "^2.0.0" eslint@^4.0.0, eslint@^4.9.0: - version "4.9.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.9.0.tgz#76879d274068261b191fe0f2f56c74c2f4208e8b" + version "4.10.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.10.0.tgz#f25d0d7955c81968c2309aa5c9a229e045176bb7" dependencies: ajv "^5.2.0" babel-code-frame "^6.22.0" @@ -1689,6 +1690,10 @@ fast-deep-equal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz#96256a3bc975595eb36d82e9929d060d893439ff" +fast-json-stable-stringify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" + fast-levenshtein@~2.0.4: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" @@ -2061,8 +2066,8 @@ global-prefix@^0.1.4: which "^1.2.12" globals@^10.0.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-10.1.0.tgz#4425a1881be0d336b4a823a82a7be725d5dd987c" + version "10.2.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-10.2.0.tgz#69490789091fcaa7f7d512c668c8eb73894a4ef2" globals@^9.17.0, globals@^9.2.0: version "9.18.0" @@ -2093,9 +2098,9 @@ glogg@^1.0.0: dependencies: sparkles "^1.0.0" -gonzales-pe@^4.1.1: - version "4.2.2" - resolved "https://registry.yarnpkg.com/gonzales-pe/-/gonzales-pe-4.2.2.tgz#f50a8c17842f13a9007909b7cb32188266e4d74c" +gonzales-pe-sl@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/gonzales-pe-sl/-/gonzales-pe-sl-4.2.3.tgz#6a868bc380645f141feeb042c6f97fcc71b59fe6" dependencies: minimist "1.1.x" @@ -2485,8 +2490,8 @@ hosted-git-info@^2.1.4: resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.5.0.tgz#6d60e34b3abbc8313062c3b798ef8d901a07af3c" html-minifier@^3.0.3: - version "3.5.5" - resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.5.tgz#3bdc9427e638bbe3dbde96c0eb988b044f02739e" + version "3.5.6" + resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.6.tgz#7e4e661a09999599c7d8e8a2b8d7fb7430bb5c3e" dependencies: camel-case "3.0.x" clean-css "4.1.x" @@ -2497,7 +2502,7 @@ html-minifier@^3.0.3: relateurl "0.2.x" uglify-js "3.1.x" -htmlparser2@3.9.2, htmlparser2@^3.9.1: +htmlparser2@3.9.x, htmlparser2@^3.9.1: version "3.9.2" resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.9.2.tgz#1bdf87acca0f3f9e53fa4fcceb0f4b4cbb00b338" dependencies: @@ -2563,8 +2568,8 @@ iconv-lite@^0.4.17, iconv-lite@~0.4.13: resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" ignore@^3.1.2, ignore@^3.3.3: - version "3.3.5" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.5.tgz#c4e715455f6073a8d7e5dae72d2fc9d71663dba6" + version "3.3.7" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.7.tgz#612289bfb3c220e186a58118618d5be8c1bab021" immutable@3.8.1: version "3.8.1" @@ -2612,15 +2617,15 @@ ini@^1.3.4, ini@~1.3.0: resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e" inline-source@^5.0.0: - version "5.2.4" - resolved "https://registry.yarnpkg.com/inline-source/-/inline-source-5.2.4.tgz#f782bc52f2e2681753a46631653c09c58a19920d" + version "5.2.5" + resolved "https://registry.yarnpkg.com/inline-source/-/inline-source-5.2.5.tgz#2d5be7f3dd4305a4b31086245bf6079edd29c862" dependencies: - csso "3.1.1" - htmlparser2 "3.9.2" - is-plain-obj "1.1.0" - object-assign "4.1.1" - svgo "0.7.2" - uglify-js "3.0.x" + csso "3.3.x" + htmlparser2 "3.9.x" + is-plain-obj "1.1.x" + object-assign "4.1.x" + svgo "0.7.x" + uglify-js "3.1.x" inquirer@^0.12.0: version "0.12.0" @@ -2691,8 +2696,8 @@ is-binary-path@^1.0.0: binary-extensions "^1.0.0" is-buffer@^1.1.5, is-buffer@~1.1.1: - version "1.1.5" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.5.tgz#1f3b26ef613b214b88cbca23cc6c01d87961eecc" + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" is-builtin-module@^1.0.0: version "1.0.0" @@ -2805,7 +2810,7 @@ is-path-inside@^1.0.0: dependencies: path-is-inside "^1.0.1" -is-plain-obj@1.1.0: +is-plain-obj@1.1.x: version "1.1.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" @@ -2939,8 +2944,8 @@ jsbn@~0.1.0: resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" jschardet@^1.4.2: - version "1.5.1" - resolved "https://registry.yarnpkg.com/jschardet/-/jschardet-1.5.1.tgz#c519f629f86b3a5bedba58a88d311309eec097f9" + version "1.6.0" + resolved "https://registry.yarnpkg.com/jschardet/-/jschardet-1.6.0.tgz#c7d1a71edcff2839db2f9ec30fc5d5ebd3c1a678" json-schema-traverse@^0.3.0: version "0.3.1" @@ -3353,6 +3358,10 @@ md5@^2.0.0: crypt "~0.0.1" is-buffer "~1.1.1" +mdn-data@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-1.0.0.tgz#a69d9da76847b4d5834c1465ea25c0653a1fbf66" + memoizee@0.4.X: version "0.4.11" resolved "https://registry.yarnpkg.com/memoizee/-/memoizee-0.4.11.tgz#bde9817663c9e40fdb2a4ea1c367296087ae8c8f" @@ -3527,8 +3536,8 @@ natural-compare@^1.4.0: resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" navigo@^5.3.2: - version "5.3.2" - resolved "https://registry.yarnpkg.com/navigo/-/navigo-5.3.2.tgz#16f6cf3a67cb62eda9661e17108b574589709168" + version "5.3.3" + resolved "https://registry.yarnpkg.com/navigo/-/navigo-5.3.3.tgz#1404782f9ef5cb2a5dd5e3aed5d54562356e9893" ncname@1.0.x: version "1.0.0" @@ -3698,7 +3707,7 @@ object-assign@4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.0.tgz#7a3b3d0e98063d43f4c03f2e8ae6cd51a86883a0" -object-assign@4.1.1, object-assign@4.X, object-assign@^4.0.0, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: +object-assign@4.1.x, object-assign@4.X, object-assign@^4.0.0, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" @@ -4037,8 +4046,8 @@ punycode@^1.4.1: resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" q@^1.1.2: - version "1.5.0" - resolved "https://registry.yarnpkg.com/q/-/q-1.5.0.tgz#dd01bac9d06d30e6f219aecb8253ee9ebdc308f1" + version "1.5.1" + resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" qs@0.4.x: version "0.4.2" @@ -4306,8 +4315,8 @@ resolve-url@~0.2.1: resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" resolve@^1.1.6, resolve@^1.1.7: - version "1.4.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.4.0.tgz#a75be01c53da25d934a98ebd0e4c4a7312f92a86" + version "1.5.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.5.0.tgz#1f09acce796c9a762579f31b2c1cc4c3cddf9f36" dependencies: path-parse "^1.0.5" @@ -4396,8 +4405,8 @@ sass-graph@^2.1.1: yargs "^7.0.0" sass-lint@^1.12.0: - version "1.12.0" - resolved "https://registry.yarnpkg.com/sass-lint/-/sass-lint-1.12.0.tgz#299ec57cd158fb4afbe22cb322799cc630a3e33b" + version "1.12.1" + resolved "https://registry.yarnpkg.com/sass-lint/-/sass-lint-1.12.1.tgz#630f69c216aa206b8232fb2aa907bdf3336b6d83" dependencies: commander "^2.8.1" eslint "^2.7.0" @@ -4405,7 +4414,7 @@ sass-lint@^1.12.0: fs-extra "^3.0.1" glob "^7.0.0" globule "^1.0.0" - gonzales-pe "^4.1.1" + gonzales-pe-sl "^4.2.3" js-yaml "^3.5.4" known-css-properties "^0.3.0" lodash.capitalize "^4.1.0" @@ -4556,8 +4565,8 @@ sntp@1.x.x: hoek "2.x.x" sntp@2.x.x: - version "2.0.2" - resolved "https://registry.yarnpkg.com/sntp/-/sntp-2.0.2.tgz#5064110f0af85f7cfdb7d6b67a40028ce52b4b2b" + version "2.1.0" + resolved "https://registry.yarnpkg.com/sntp/-/sntp-2.1.0.tgz#2c6cec14fedc2222739caf9b5c3d85d1cc5a2cc8" dependencies: hoek "4.x.x" @@ -4618,11 +4627,11 @@ source-map-url@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.3.0.tgz#7ecaf13b57bcd09da8a40c5d269db33799d4aaf9" -source-map@0.5.x, source-map@^0.5.1, source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.1: +source-map@0.5.x, source-map@^0.5.1, source-map@^0.5.3, source-map@^0.5.6: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" -source-map@0.X, source-map@^0.6.1: +source-map@0.X, source-map@^0.6.1, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" @@ -4690,7 +4699,11 @@ stack-trace@0.0.9: version "0.0.9" resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.9.tgz#a8f6eaeca90674c333e7c43953f275b451510695" -"statuses@>= 1.3.1 < 2", statuses@~1.3.0, statuses@~1.3.1: +"statuses@>= 1.3.1 < 2": + version "1.4.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087" + +statuses@~1.3.0, statuses@~1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e" @@ -4816,8 +4829,8 @@ supports-color@^2.0.0: resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" supports-color@^4.0.0, supports-color@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.4.0.tgz#883f7ddabc165142b2a61427f3352ded195d1a3e" + version "4.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b" dependencies: has-flag "^2.0.0" @@ -4828,7 +4841,7 @@ sver-compat@^1.5.0: es6-iterator "^2.0.1" es6-symbol "^3.1.1" -svgo@0.7.2: +svgo@0.7.x: version "0.7.2" resolved "https://registry.yarnpkg.com/svgo/-/svgo-0.7.2.tgz#9f5772413952135c6fefbf40afe6a4faa88b4bb5" dependencies: @@ -4863,8 +4876,8 @@ table@^4.0.1: string-width "^2.1.1" tar-pack@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.0.tgz#23be2d7f671a8339376cbdb0b8fe3fdebf317984" + version "3.4.1" + resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.1.tgz#e1dbc03a9b9d3ba07e896ad027317eb679a10a1f" dependencies: debug "^2.2.0" fstream "^1.0.10" @@ -5035,19 +5048,12 @@ ua-parser-js@^0.7.9: version "0.7.17" resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.17.tgz#e9ec5f9498b9ec910e7ae3ac626a805c4d09ecac" -uglify-js@3.0.x: - version "3.0.28" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.0.28.tgz#96b8495f0272944787b5843a1679aa326640d5f7" - dependencies: - commander "~2.11.0" - source-map "~0.5.1" - uglify-js@3.1.x, uglify-js@^3.0.5: - version "3.1.3" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.1.3.tgz#d61f0453b4718cab01581f3162aa90bab7520b42" + version "3.1.6" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.1.6.tgz#918832602036e95d2318e11f27ee8461a8592c5d" dependencies: commander "~2.11.0" - source-map "~0.5.1" + source-map "~0.6.1" uid-number@^0.0.6: version "0.0.6" From 8d6d508bba969f0b74f12c7595ea5c523eaa1c19 Mon Sep 17 00:00:00 2001 From: Xaver Maierhofer Date: Tue, 31 Oct 2017 08:34:18 +0100 Subject: [PATCH 048/119] [BUGFIX] Only request locale file once --- lib/main.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/main.js b/lib/main.js index 1003216..3f18c4e 100644 --- a/lib/main.js +++ b/lib/main.js @@ -82,8 +82,9 @@ define(['moment', 'utils/router', 'leaflet', 'gui', 'helper', 'utils/language'], } } + language.init(router); + function update() { - language.init(router); return Promise.all(urls.map(helper.getJSON)) .then(handleData); } From 1909eb291e128d19e65d13515a372ec20435f157 Mon Sep 17 00:00:00 2001 From: Ruben Barkow Date: Tue, 31 Oct 2017 10:01:32 +0100 Subject: [PATCH 049/119] [DOC] Improve grammar in CONTRIBUTING.md --- .github/CONTRIBUTING.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 87332fb..c5507b7 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -1,5 +1,6 @@ ## Contributing is welcome -Pull requests are welcome without an opening an issue. If you unsure about the feature or implementation open an issue and -discuss your suggested changes. Meshviewer is a frontend application and the code needs to be loaded and -perform on slow mobile devices with many nodes and clients. +Pull requests are welcome without the need of opening an issue. If you're unsure +about your feature or your implementation open an issue and discuss your +suggested changes. Meshviewer is a frontend application and the code needs to be +loaded fast and perform with many nodes and clients on slow mobile devices. From 519f37cd142662af48f2bb4618f6a481233a2647 Mon Sep 17 00:00:00 2001 From: Xaver Maierhofer Date: Tue, 31 Oct 2017 10:16:04 +0100 Subject: [PATCH 050/119] [BUGFIX] Calc width for proportion bars --- lib/proportions.js | 5 ++--- scss/modules/_proportion.scss | 1 + 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/proportions.js b/lib/proportions.js index 260a761..1a54987 100644 --- a/lib/proportions.js +++ b/lib/proportions.js @@ -64,9 +64,8 @@ define(['d3-interpolate', 'snabbdom', 'filters/genericnode', 'helper'], var th = V.h('th', a); var td = V.h('td', V.h('span', { style: { - width: Math.round(v * 100) + '%', - backgroundColor: scale(v), - color: 'white' + width: 'calc(25px + ' + Math.round(v * 90) + '%)', + backgroundColor: scale(v) } }, d[1].toFixed(0))); diff --git a/scss/modules/_proportion.scss b/scss/modules/_proportion.scss index a057c49..754dde8 100644 --- a/scss/modules/_proportion.scss +++ b/scss/modules/_proportion.scss @@ -16,6 +16,7 @@ span { box-sizing: border-box; + color: $color-white; display: inline-block; font-weight: bold; min-width: 1.5em; From a0378348b5f413d27cdb6fe6b64b398e206134fe Mon Sep 17 00:00:00 2001 From: Geno Date: Tue, 31 Oct 2017 10:19:22 +0100 Subject: [PATCH 051/119] [BUGFIX] Highlighting in forcegraph --- lib/forcegraph/draw.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/forcegraph/draw.js b/lib/forcegraph/draw.js index fa18a83..6976297 100644 --- a/lib/forcegraph/draw.js +++ b/lib/forcegraph/draw.js @@ -32,7 +32,7 @@ define(['helper'], function (helper) { } function drawHighlightNode(d) { - if (highlight && highlight.type === 'node' && d.o === highlight.o) { + if (highlight && highlight.type === 'node' && d.o.node_id === highlight.o.node_id) { ctx.arc(d.x, d.y, NODE_RADIUS * 1.5, 0, 2 * Math.PI); ctx.fillStyle = highlightColor; ctx.fill(); @@ -41,7 +41,7 @@ define(['helper'], function (helper) { } function drawHighlightLink(d, to) { - if (highlight && highlight.type === 'link' && d.o === highlight.o) { + if (highlight && highlight.type === 'link' && d.o.id === highlight.o.id) { ctx.lineTo(to[0], to[1]); ctx.strokeStyle = highlightColor; ctx.lineWidth = LINE_RADIUS * 2; From 4caf38e99015b65438828e64589d9d0aa438ac07 Mon Sep 17 00:00:00 2001 From: Xaver Maierhofer Date: Tue, 31 Oct 2017 13:32:39 +0100 Subject: [PATCH 052/119] [TASK] Cleanup old code --- config.json | 6 ++++-- lib/forcegraph.js | 9 ++------- lib/infobox/node.js | 6 +++--- lib/legend.js | 8 ++++---- lib/main.js | 33 +++++++++++++++------------------ lib/map/clientlayer.js | 2 +- lib/map/labellayer.js | 4 ++-- lib/nodelist.js | 1 - lib/proportions.js | 2 +- lib/utils/helper.js | 17 ++++------------- lib/utils/router.js | 25 +++++++++---------------- 11 files changed, 45 insertions(+), 68 deletions(-) diff --git a/config.json b/config.json index 314c6b4..527e2ef 100644 --- a/config.json +++ b/config.json @@ -23,8 +23,10 @@ "title": "Jahresstatistik - weiteren Statistiken" } ], - // String or array of data provider are supported - "dataPath": "https://regensburg.freifunk.net/data/", + // Array of data provider are supported + "dataPath": [ + "https://regensburg.freifunk.net/data/" + ], "siteName": "Freifunk Regensburg", "mapLayers": [ { diff --git a/lib/forcegraph.js b/lib/forcegraph.js index 1d4cf67..7346c5e 100644 --- a/lib/forcegraph.js +++ b/lib/forcegraph.js @@ -198,7 +198,7 @@ define(['d3-selection', 'd3-force', 'd3-zoom', 'd3-drag', 'd3-timer', 'd3-ease', }); self.setData = function setData(data) { - intNodes = data.nodes.all.map(function (d) { + intNodes = data.nodes.online.map(function (d) { var e = dictNodes[d.node_id]; if (!e) { e = {}; @@ -208,12 +208,10 @@ define(['d3-selection', 'd3-force', 'd3-zoom', 'd3-drag', 'd3-timer', 'd3-ease', e.o = d; return e; - }).filter(function (e) { - return e.o.is_online; }); intLinks = data.links.filter(function (d) { - return dictNodes[d.source.node_id].o.is_online && dictNodes[d.target.node_id].o.is_online; + return data.nodeDict[d.source.node_id].is_online && data.nodeDict[d.target.node_id].is_online; }).map(function (d) { return { o: d, @@ -261,9 +259,6 @@ define(['d3-selection', 'd3-force', 'd3-zoom', 'd3-drag', 'd3-timer', 'd3-ease', draw.setHighlight({ type: 'link', o: d }); for (var i = 0; i < intLinks.length; i++) { var l = intLinks[i]; - if (l.o !== d) { - continue; - } return [(l.source.x + l.target.x) / 2, (l.source.y + l.target.y) / 2, (ZOOM_MAX / 2) + ZOOM_MIN]; } return [0, 0, (ZOOM_MIN + 1) / 2]; diff --git a/lib/infobox/node.js b/lib/infobox/node.js index 8410286..da69edc 100644 --- a/lib/infobox/node.js +++ b/lib/infobox/node.js @@ -293,9 +293,9 @@ define(['sorttable', 'snabbdom', 'd3-interpolate', 'moment', 'helper'], }; self.setData = function setData(data) { - d = data.nodes.all.find(function (a) { - return a.node_id === d.node_id; - }); + if (data.nodeDict[d.node_id]) { + d = data.nodeDict[d.node_id]; + } self.render(); }; return self; diff --git a/lib/legend.js b/lib/legend.js index 5ccac00..549b87a 100644 --- a/lib/legend.js +++ b/lib/legend.js @@ -7,12 +7,12 @@ define(['helper'], function (helper) { var timestamp = document.createTextNode(''); self.setData = function setData(d) { - var totalNodes = helper.sum(d.nodes.all.map(helper.one)); - var totalOnlineNodes = helper.sum(d.nodes.all.filter(helper.online).map(helper.one)); - var totalClients = helper.sum(d.nodes.all.filter(helper.online).map(function (n) { + var totalNodes = Object.keys(d.nodeDict).length; + var totalOnlineNodes = d.nodes.online.length; + var totalClients = helper.sum(d.nodes.online.map(function (n) { return n.clients; })); - var totalGateways = helper.sum(d.nodes.all.filter(helper.online).filter(function (n) { + var totalGateways = helper.sum(d.nodes.online.filter(function (n) { return n.is_gateway; }).map(helper.one)); diff --git a/lib/main.js b/lib/main.js index 3f18c4e..45bf4f0 100644 --- a/lib/main.js +++ b/lib/main.js @@ -23,8 +23,15 @@ define(['moment', 'utils/router', 'leaflet', 'gui', 'helper', 'utils/language'], var now = moment(); var age = moment(now).subtract(config.maxAge, 'days'); - var newnodes = helper.limit('firstseen', age, helper.sortByKey('firstseen', nodes).filter(helper.online)); - var lostnodes = helper.limit('lastseen', age, helper.sortByKey('lastseen', nodes).filter(helper.offline)); + var online = nodes.filter(function (d) { + return d.is_online; + }); + var offline = nodes.filter(function (d) { + return !d.is_online; + }); + + var newnodes = helper.limit('firstseen', age, helper.sortByKey('firstseen', online)); + var lostnodes = helper.limit('lastseen', age, helper.sortByKey('lastseen', offline)); nodes.forEach(function (d) { d.neighbours = []; @@ -50,15 +57,13 @@ define(['moment', 'utils/router', 'leaflet', 'gui', 'helper', 'utils/language'], } }); - links.sort(function (a, b) { - return b.source_tq - a.source_tq; - }); - return { now: now, timestamp: moment.utc(timestamp).local(), nodes: { all: nodes, + online: online, + offline: offline, new: newnodes, lost: lostnodes }, @@ -70,22 +75,14 @@ define(['moment', 'utils/router', 'leaflet', 'gui', 'helper', 'utils/language'], var language = new Language(config); var router = new Router(language); - var urls = []; - - if (typeof config.dataPath === 'string' || config.dataPath instanceof String) { - config.dataPath = [config.dataPath]; - } - - for (var i in config.dataPath) { - if (config.dataPath.hasOwnProperty(i)) { - urls.push(config.dataPath[i] + 'meshviewer.json'); - } - } + config.dataPath.forEach(function (d, i) { + config.dataPath[i] += 'meshviewer.json'; + }); language.init(router); function update() { - return Promise.all(urls.map(helper.getJSON)) + return Promise.all(config.dataPath.map(helper.getJSON)) .then(handleData); } diff --git a/lib/map/clientlayer.js b/lib/map/clientlayer.js index 42e57ef..dad1f07 100644 --- a/lib/map/clientlayer.js +++ b/lib/map/clientlayer.js @@ -13,7 +13,7 @@ define(['leaflet', 'rbush', 'helper'], setData: function (data) { var rtreeOnlineAll = rbush(9); - this.data = rtreeOnlineAll.load(data.nodes.all.filter(helper.online).filter(helper.hasLocation).map(this.mapRTree)); + this.data = rtreeOnlineAll.load(data.nodes.online.filter(helper.hasLocation).map(this.mapRTree)); // pre-calculate start angles this.data.all().forEach(function (n) { diff --git a/lib/map/labellayer.js b/lib/map/labellayer.js index 78a4774..fbfef01 100644 --- a/lib/map/labellayer.js +++ b/lib/map/labellayer.js @@ -154,8 +154,8 @@ define(['leaflet', 'rbush', 'helper', 'moment'], var lines = addLinksToMap(linkDict, linkScale, data.links, router); groupLines = L.featureGroup(lines).addTo(map); - var nodesOnline = helper.subtract(data.nodes.all.filter(helper.online), data.nodes.new); - var nodesOffline = helper.subtract(data.nodes.all.filter(helper.offline), data.nodes.lost); + var nodesOnline = helper.subtract(data.nodes.online, data.nodes.new); + var nodesOffline = helper.subtract(data.nodes.offline, data.nodes.lost); var markersOnline = nodesOnline.filter(helper.hasLocation) .map(mkMarker(nodeDict, function () { diff --git a/lib/nodelist.js b/lib/nodelist.js index dd65309..f55fc81 100644 --- a/lib/nodelist.js +++ b/lib/nodelist.js @@ -92,7 +92,6 @@ define(['sorttable', 'snabbdom', 'helper'], function (SortTable, V, helper) { } else { n.uptime = e.lastseen - d.now; } - n.neighbours = e.neighbours; return n; }); diff --git a/lib/proportions.js b/lib/proportions.js index 1a54987..95e496b 100644 --- a/lib/proportions.js +++ b/lib/proportions.js @@ -76,7 +76,7 @@ define(['d3-interpolate', 'snabbdom', 'filters/genericnode', 'helper'], } self.setData = function setData(data) { - var onlineNodes = data.nodes.all.filter(helper.online); + var onlineNodes = data.nodes.online; var nodes = onlineNodes.concat(data.nodes.lost); function hostnameOfNodeID(nodeid) { diff --git a/lib/utils/helper.js b/lib/utils/helper.js index 212f5a5..8d4da14 100644 --- a/lib/utils/helper.js +++ b/lib/utils/helper.js @@ -27,9 +27,9 @@ define({ }, sortByKey: function sortByKey(key, d) { - return d.slice().sort(function (a, b) { - return a[key] - b[key]; - }).reverse(); + return d.sort(function (a, b) { + return b[key] - a[key]; + }); }, limit: function limit(key, m, d) { @@ -72,15 +72,6 @@ define({ return s; }, - /* Helpers working with nodes */ - offline: function offline(d) { - return !d.is_online; - }, - - online: function online(d) { - return d.is_online; - }, - hasLocation: function hasLocation(d) { return 'location' in d && Math.abs(d.location.latitude) < 90 && @@ -95,7 +86,7 @@ define({ }); return a.filter(function (d) { - return !(d.node_id in ids); + return !ids[d.node_id]; }); }, diff --git a/lib/utils/router.js b/lib/utils/router.js index 7d144a4..04ae87c 100644 --- a/lib/utils/router.js +++ b/lib/utils/router.js @@ -3,7 +3,7 @@ define(['Navigo'], function (Navigo) { return function (language) { var init = false; - var objects = { nodes: {}, links: {}, nodeDict: {} }; + var objects = {}; var targets = []; var views = {}; var current = {}; @@ -16,17 +16,20 @@ define(['Navigo'], function (Navigo) { } function gotoNode(d) { - if (d.nodeId in objects.nodes) { + if (objects.nodeDict[d.nodeId]) { targets.forEach(function (t) { - t.gotoNode(objects.nodes[d.nodeId], objects.nodeDict); + t.gotoNode(objects.nodeDict[d.nodeId], objects.nodeDict); }); } } function gotoLink(d) { - if (d.linkId in objects.links) { + var link = objects.links.find(function (value) { + return value.id === d.linkId; + }); + if (link) { targets.forEach(function (t) { - t.gotoLink(objects.links[d.linkId]); + t.gotoLink(link); }); } } @@ -139,17 +142,7 @@ define(['Navigo'], function (Navigo) { }; router.setData = function setData(data) { - objects.nodes = {}; - objects.links = {}; - objects.nodeDict = data.nodeDict; - - data.nodes.all.forEach(function (d) { - objects.nodes[d.node_id] = d; - }); - - data.links.forEach(function (d) { - objects.links[d.id] = d; - }); + objects = data; }; return router; From 31e8667658fbe59277d2ed5081d7dfc55bc4e847 Mon Sep 17 00:00:00 2001 From: Martin Geno Date: Tue, 31 Oct 2017 14:22:00 +0100 Subject: [PATCH 053/119] [TASK] Show different vpn-links --- lib/forcegraph.js | 4 ++-- lib/forcegraph/draw.js | 2 +- lib/map/labellayer.js | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/forcegraph.js b/lib/forcegraph.js index 7346c5e..d3f0b88 100644 --- a/lib/forcegraph.js +++ b/lib/forcegraph.js @@ -122,13 +122,13 @@ define(['d3-selection', 'd3-force', 'd3-zoom', 'd3-drag', 'd3-timer', 'd3-ease', forceLink = d3Force.forceLink() .distance(function (d) { - if (d.o.type === 'vpn') { + if (d.o.type.indexOf('vpn') === 0) { return 0; } return 75; }) .strength(function (d) { - if (d.o.type === 'vpn') { + if (d.o.type.indexOf('vpn') === 0) { return 0.02; } return Math.max(0.5, d.o.source_tq); diff --git a/lib/forcegraph/draw.js b/lib/forcegraph/draw.js index 6976297..f5c2ed2 100644 --- a/lib/forcegraph/draw.js +++ b/lib/forcegraph/draw.js @@ -87,7 +87,7 @@ define(['helper'], function (helper) { ctx.lineTo(to[0], to[1]); ctx.strokeStyle = grd; - if (d.o.type === 'vpn') { + if (d.o.type.indexOf('vpn') === 0) { ctx.globalAlpha = 0.2; ctx.lineWidth = 1.5; } else { diff --git a/lib/map/labellayer.js b/lib/map/labellayer.js index fbfef01..7a49146 100644 --- a/lib/map/labellayer.js +++ b/lib/map/labellayer.js @@ -97,7 +97,7 @@ define(['leaflet', 'rbush', 'helper', 'moment'], function addLinksToMap(dict, linkScale, graph, router) { graph = graph.filter(function (d) { - return 'distance' in d && !d.vpn; + return 'distance' in d && d.type.indexOf('vpn') !== 0; }); return graph.map(function (d) { From 1ec81fd45c8cfc749ed4b7c62639dd1cae30a525 Mon Sep 17 00:00:00 2001 From: Xaver Maierhofer Date: Tue, 31 Oct 2017 20:19:30 +0100 Subject: [PATCH 054/119] [TASK] Remove unused polyfill --- lib/infobox/node.js | 2 +- polyfill.js | 48 --------------------------------------------- 2 files changed, 1 insertion(+), 49 deletions(-) diff --git a/lib/infobox/node.js b/lib/infobox/node.js index da69edc..97b0660 100644 --- a/lib/infobox/node.js +++ b/lib/infobox/node.js @@ -92,7 +92,7 @@ define(['sorttable', 'snabbdom', 'd3-interpolate', 'moment', 'helper'], string.push(V.h('br')); } - if (!ip.startsWith('fe80:')) { + if (ip.indexOf('fe80:') !== 0) { string.push(V.h('a', { props: { href: 'http://[' + ip + ']/', target: '_blank' } }, ip)); } else { string.push(ip); diff --git a/polyfill.js b/polyfill.js index dd5c71f..856beb2 100644 --- a/polyfill.js +++ b/polyfill.js @@ -7,54 +7,6 @@ if (!String.prototype.includes) { }; } -if (!String.prototype.startsWith) { - String.prototype.startsWith = function (searchString, position) { - position = position || 0; - return this.substr(position, searchString.length) === searchString; - }; -} - -if (!String.prototype.repeat) { - String.prototype.repeat = function (count) { - 'use strict'; - if (this === null) { - throw new TypeError('can\'t convert ' + this + ' to object'); - } - var str = '' + this; - count = +count; - if (count < 0) { - throw new RangeError('repeat count must be non-negative'); - } - if (count === Infinity) { - throw new RangeError('repeat count must be less than infinity'); - } - count = Math.floor(count); - if (str.length === 0 || count === 0) { - return ''; - } - // Ensuring count is a 31-bit integer allows us to heavily optimize the - // main part. But anyway, most current (August 2014) browsers can't handle - // strings 1 << 28 chars or longer, so: - if (str.length * count >= 1 << 28) { - throw new RangeError('repeat count must not overflow maximum string size'); - } - var rpt = ''; - for (; ;) { - if ((count & 1) === 1) { - rpt += str; - } - count >>>= 1; - if (count === 0) { - break; - } - str += str; - } - // Could we try: - // return Array(count + 1).join(this); - return rpt; - }; -} - if (typeof Object.assign !== 'function') { Object.assign = function(target, varArgs) { // .length of function is 2 if (target == null) { // TypeError if undefined or null From 9f95fa9c95e3bfed880089e02af439ae90cfa38b Mon Sep 17 00:00:00 2001 From: Geno Date: Wed, 1 Nov 2017 11:43:20 +0100 Subject: [PATCH 055/119] [BUGFIX] Select correct goto link --- lib/forcegraph.js | 17 ++++++++--------- lib/forcegraph/draw.js | 4 ++-- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/lib/forcegraph.js b/lib/forcegraph.js index d3f0b88..ceecedc 100644 --- a/lib/forcegraph.js +++ b/lib/forcegraph.js @@ -242,12 +242,9 @@ define(['d3-selection', 'd3-force', 'd3-zoom', 'd3-drag', 'd3-timer', 'd3-ease', self.gotoNode = function gotoNode(d) { moveTo(function calcToNode() { - for (var i = 0; i < intNodes.length; i++) { - var n = intNodes[i]; - if (n.o.node_id !== d.node_id) { - continue; - } - draw.setHighlight({ type: 'node', o: n.o }); + draw.setHighlight({ type: 'node', id: d.node_id }); + var n = dictNodes[d.node_id]; + if (n) { return [n.x, n.y, (ZOOM_MAX + 1) / 2]; } return [0, 0, (ZOOM_MIN + 1) / 2]; @@ -256,9 +253,11 @@ define(['d3-selection', 'd3-force', 'd3-zoom', 'd3-drag', 'd3-timer', 'd3-ease', self.gotoLink = function gotoLink(d) { moveTo(function calcToLink() { - draw.setHighlight({ type: 'link', o: d }); - for (var i = 0; i < intLinks.length; i++) { - var l = intLinks[i]; + draw.setHighlight({ type: 'link', id: d.id }); + var l = intLinks.find(function (link) { + return link.o.id === d.id; + }); + if (l) { return [(l.source.x + l.target.x) / 2, (l.source.y + l.target.y) / 2, (ZOOM_MAX / 2) + ZOOM_MIN]; } return [0, 0, (ZOOM_MIN + 1) / 2]; diff --git a/lib/forcegraph/draw.js b/lib/forcegraph/draw.js index f5c2ed2..38323f7 100644 --- a/lib/forcegraph/draw.js +++ b/lib/forcegraph/draw.js @@ -32,7 +32,7 @@ define(['helper'], function (helper) { } function drawHighlightNode(d) { - if (highlight && highlight.type === 'node' && d.o.node_id === highlight.o.node_id) { + if (highlight && highlight.type === 'node' && d.o.node_id === highlight.id) { ctx.arc(d.x, d.y, NODE_RADIUS * 1.5, 0, 2 * Math.PI); ctx.fillStyle = highlightColor; ctx.fill(); @@ -41,7 +41,7 @@ define(['helper'], function (helper) { } function drawHighlightLink(d, to) { - if (highlight && highlight.type === 'link' && d.o.id === highlight.o.id) { + if (highlight && highlight.type === 'link' && d.o.id === highlight.id) { ctx.lineTo(to[0], to[1]); ctx.strokeStyle = highlightColor; ctx.lineWidth = LINE_RADIUS * 2; From 1887a3270c56a1cf9c2e64c370e7ebad194941ad Mon Sep 17 00:00:00 2001 From: Xaver Maierhofer Date: Thu, 2 Nov 2017 00:31:48 +0100 Subject: [PATCH 056/119] [TASK] Update locale --- locale/de.json | 19 +++++++++++++------ locale/en.json | 2 +- locale/fr.json | 13 ++++++++++--- locale/ru.json | 13 ++++++++++--- 4 files changed, 34 insertions(+), 13 deletions(-) diff --git a/locale/de.json b/locale/de.json index bd33558..de06b9e 100644 --- a/locale/de.json +++ b/locale/de.json @@ -6,6 +6,7 @@ "links": "Verbindungen", "clients": "Nutzer", "distance": "Entfernung", + "connectionType": "Verbindungsart", "tq": "Übertragungsqualität", "lastOnline": "online, letzte Nachricht %{time} (%{date})", "lastOffline": "offline, letzte Nachricht %{time} (%{date})", @@ -26,7 +27,9 @@ "systemLoad": "Systemlast", "ram": "Speicherauslastung", "ipAddresses": "IP Adressen", - "selectedGateway": "Gewähltes Gateway", + "nexthop": "Nächster Sprung", + "selectedGatewayIPv4": "Gewähltes ipv4 Gateway", + "selectedGatewayIPv6": "Gewähltes ipv6 Gateway", "link": "Verbindung |||| Verbindungen", "node": "Knoten", "new": "Neue Knoten", @@ -44,13 +47,14 @@ "clients": "mit %{smart_count} Nutzer |||| mit %{smart_count} Nutzern", "gateway": "auf %{smart_count} Gateway |||| auf %{smart_count} Gateways", "lastUpdate": "Letzte Aktualisierung", - "nodeNew": "Knoten ist neu", - "nodeOnline": "Knoten ist online", - "nodeOffline": "Knoten ist offline", + "nodeNew": "neu", + "nodeOnline": "online", + "nodeOffline": "offline", "aboutInfo": "

Über Meshviewer

Mit Doppelklick kann man in die Karte hinein zoomen und Shift+Doppelklick heraus zoomen.

", "actual": "Aktuell", "stats": "Statistiken", - "about": "Über" + "about": "Über", + "toggle": "Seitenleiste anzeigen/ausblenden" }, "button": { "switchView": "Ansicht wechseln", @@ -85,5 +89,8 @@ "yes": "ja", "no": "nein", "unknown": "unbekannt", - "none": "keine" + "others": "andere", + "none": "keine", + "remove": "entfernen", + "close": "schließen" } diff --git a/locale/en.json b/locale/en.json index db65150..ecaf07b 100644 --- a/locale/en.json +++ b/locale/en.json @@ -54,7 +54,7 @@ "actual": "Current", "stats": "Statistics", "about": "About", - "toggle" : "Toggle Sidebar" + "toggle": "Toggle Sidebar" }, "button": { "switchView": "Switch view", diff --git a/locale/fr.json b/locale/fr.json index 42409b5..9843c24 100644 --- a/locale/fr.json +++ b/locale/fr.json @@ -6,6 +6,7 @@ "links": "Connexion", "clients": "Clients", "distance": "Distance", + "connectionType": "Type de connexion", "tq": "Qualité de transmission", "lastOnline": "en ligne, dernier message %{time} (%{date})", "lastOffline": "hors ligne, dernier message %{time} (%{date})", @@ -26,7 +27,9 @@ "systemLoad": "Charge moyenne", "ram": "Utilisation de la mémoire", "ipAddresses": "Adresse IP", - "selectedGateway": "Passerelle sélectionné", + "nexthop": "Nexthop", + "selectedGatewayIPv4": "Selected ipv4-gateway", + "selectedGatewayIPv6": "Selected ipv6-gateway", "link": "Connexion |||| Connexions", "node": "Nœud |||| Nœuds", "new": "Nouveaux nœuds", @@ -50,7 +53,8 @@ "aboutInfo": "

Sur Meshviewer

Vous pouvez zoomer avec double-clic et effectuer un zoom arrière avec shift + double-clic

", "actual": "Actuel", "stats": "Statistiques", - "about": "À propros" + "about": "À propros", + "toggle": "Toggle Sidebar" }, "button": { "switchView": "Basculer l’affichage", @@ -85,5 +89,8 @@ "yes": "oui", "no": "non", "unknown": "inconnu", - "none": "aucun" + "others": "autres", + "none": "aucun", + "remove": "supprimer", + "close": "fermer" } diff --git a/locale/ru.json b/locale/ru.json index 71a427e..b88f15c 100644 --- a/locale/ru.json +++ b/locale/ru.json @@ -6,6 +6,7 @@ "links": "Ссылки", "clients": "Клиенты", "distance": "Расстояние", + "connectionType": "Тип подключения", "tq": "Качество связи", "lastOnline": "в сети, последнее сообщение %{time} (%{date})", "lastOffline": "не в сети, последнее сообщение %{time} (%{date})", @@ -26,7 +27,9 @@ "systemLoad": "Средняя загрузка", "ram": "Используемая память", "ipAddresses": "IP адреса", - "selectedGateway": "Выбранный шлюз", + "nexthop": "Следующий скачок", + "selectedGatewayIPv4": "Выбранный шлюз ipv4", + "selectedGatewayIPv6": "Выбранный шлюз ipv6", "link": "Ссылка |||| Ссылки", "node": "Узел |||| Узлы", "new": "Новые узлы", @@ -50,7 +53,8 @@ "aboutInfo": "

О Meshviewer

Вы можете увеличить масштаб двойным щелчком мыши и уменьшить с shift + двойной щелчок

", "actual": "Текущее", "stats": "Статистика", - "about": "О продукте" + "about": "О продукте", + "toggle": "Включить панель" }, "button": { "switchView": "Переключить вид", @@ -85,5 +89,8 @@ "yes": "да", "no": "нет", "unknown": "неизвестно", - "none": "нет" + "others": "другие", + "none": "нет", + "remove": "убрать", + "close": "закрыть" } From aa89f063423825504e12080462de0860ef757a1f Mon Sep 17 00:00:00 2001 From: Xaver Maierhofer Date: Wed, 1 Nov 2017 19:51:30 +0100 Subject: [PATCH 057/119] [TASK] Simplify labellayer & remove unnessary condition --- lib/map/labellayer.js | 56 +++++++++++++++++++++---------------------- lib/proportions.js | 4 +--- 2 files changed, 28 insertions(+), 32 deletions(-) diff --git a/lib/map/labellayer.js b/lib/map/labellayer.js index 7a49146..fae9c20 100644 --- a/lib/map/labellayer.js +++ b/lib/map/labellayer.js @@ -154,35 +154,33 @@ define(['leaflet', 'rbush', 'helper', 'moment'], var lines = addLinksToMap(linkDict, linkScale, data.links, router); groupLines = L.featureGroup(lines).addTo(map); - var nodesOnline = helper.subtract(data.nodes.online, data.nodes.new); - var nodesOffline = helper.subtract(data.nodes.offline, data.nodes.lost); + var nodesOnline = helper.subtract(data.nodes.online, data.nodes.new).filter(helper.hasLocation); + var nodesOffline = helper.subtract(data.nodes.offline, data.nodes.lost).filter(helper.hasLocation); + var nodesNew = data.nodes.new.filter(helper.hasLocation); + var nodesLost = data.nodes.lost.filter(helper.hasLocation); - var markersOnline = nodesOnline.filter(helper.hasLocation) - .map(mkMarker(nodeDict, function () { - return iconOnline; - }, router)); + var markersOnline = nodesOnline.map(mkMarker(nodeDict, function () { + return iconOnline; + }, router)); - var markersOffline = nodesOffline.filter(helper.hasLocation) - .map(mkMarker(nodeDict, function () { - return iconOffline; - }, router)); + var markersOffline = nodesOffline.map(mkMarker(nodeDict, function () { + return iconOffline; + }, router)); - var markersNew = data.nodes.new.filter(helper.hasLocation) - .map(mkMarker(nodeDict, function () { - return iconNew; - }, router)); + var markersNew = nodesNew.map(mkMarker(nodeDict, function () { + return iconNew; + }, router)); - var markersLost = data.nodes.lost.filter(helper.hasLocation) - .map(mkMarker(nodeDict, function (d) { - if (d.lastseen.isAfter(moment(data.now).subtract(config.maxAgeAlert, 'days'))) { - return iconAlert; - } - - if (d.lastseen.isAfter(moment(data.now).subtract(config.maxAge, 'days'))) { - return iconLost; - } - return null; - }, router)); + var markersLost = nodesLost.map(mkMarker(nodeDict, function (d) { + var age = moment(data.now).diff(d.lastseen, 'days', true); + if (age <= config.maxAgeAlert) { + return iconAlert; + } + if (age <= config.maxAge) { + return iconLost; + } + return null; + }, router)); groupOffline = L.featureGroup(markersOffline).addTo(map); groupLost = L.featureGroup(markersLost).addTo(map); @@ -190,10 +188,10 @@ define(['leaflet', 'rbush', 'helper', 'moment'], groupNew = L.featureGroup(markersNew).addTo(map); this.data = { - online: nodesOnline.filter(helper.hasLocation), - offline: nodesOffline.filter(helper.hasLocation), - new: data.nodes.new.filter(helper.hasLocation), - lost: data.nodes.lost.filter(helper.hasLocation) + online: nodesOnline, + offline: nodesOffline, + new: nodesNew, + lost: nodesLost }; this.updateLayer(); }, diff --git a/lib/proportions.js b/lib/proportions.js index 95e496b..27dd7e3 100644 --- a/lib/proportions.js +++ b/lib/proportions.js @@ -100,9 +100,7 @@ define(['d3-interpolate', 'snabbdom', 'filters/genericnode', 'helper'], }); var autoDict = count(nodes, ['autoupdater'], function (d) { - if (d === null) { - return null; - } else if (d.enabled) { + if (d.enabled) { return d.branch; } return _.t('node.deactivated'); From ed93a202d6938571eb2ac5afbf71598154120aff Mon Sep 17 00:00:00 2001 From: Xaver Maierhofer Date: Thu, 2 Nov 2017 01:06:59 +0100 Subject: [PATCH 058/119] [TASK] Add NodeJs 9 test --- .travis.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index a471482..ca99d8f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,7 +4,7 @@ dist: trusty language: node_js node_js: - - "8" + - "9" os: - linux @@ -13,9 +13,11 @@ os: matrix: include: - - node_js: 8 + - node_js: 9 os: linux env: USE_NPM=true + - node_js: 8 + os: linux - node_js: 6 os: linux From 4315f18efe835ec248fdedcaa38219f41f4195c4 Mon Sep 17 00:00:00 2001 From: Martin Geno Date: Thu, 2 Nov 2017 14:59:45 +0100 Subject: [PATCH 059/119] [BUGFIX] site_code attribute in statistics --- lib/proportions.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/proportions.js b/lib/proportions.js index 27dd7e3..f0acdf6 100644 --- a/lib/proportions.js +++ b/lib/proportions.js @@ -106,7 +106,7 @@ define(['d3-interpolate', 'snabbdom', 'filters/genericnode', 'helper'], return _.t('node.deactivated'); }); - var siteDict = count(nodes, ['nodeinfo', 'site_code'], function (d) { + var siteDict = count(nodes, ['site_code'], function (d) { if (config.siteNames) { config.siteNames.forEach(function (t) { if (d === t.site) { From 9a4836257f1da0f82526a8ea159b36a1202d6476 Mon Sep 17 00:00:00 2001 From: Xaver Maierhofer Date: Thu, 2 Nov 2017 22:38:22 +0100 Subject: [PATCH 060/119] [BUGFIX] Safari querySelector foreach --- lib/map.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/map.js b/lib/map.js index 6f45e56..9502ad6 100644 --- a/lib/map.js +++ b/lib/map.js @@ -106,7 +106,8 @@ define(['map/clientlayer', 'map/labellayer', 'map/button', 'leaflet'], }); map.on('load', function () { - document.querySelectorAll('.leaflet-control-layers-selector').forEach(function (input) { + var inputs = document.querySelectorAll('.leaflet-control-layers-selector'); + [].forEach.call(inputs, function (input) { input.setAttribute('role', 'radiogroup'); input.setAttribute('aria-label', input.nextSibling.innerHTML.trim()); }); From c407f2e33462b6cfe8742af97d2111c1a6bdf85c Mon Sep 17 00:00:00 2001 From: Geno Date: Fri, 3 Nov 2017 20:44:13 +0100 Subject: [PATCH 061/119] [BUGFIX] Show contact --- lib/infobox/node.js | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/lib/infobox/node.js b/lib/infobox/node.js index 97b0660..b08c8f9 100644 --- a/lib/infobox/node.js +++ b/lib/infobox/node.js @@ -252,11 +252,7 @@ define(['sorttable', 'snabbdom', 'd3-interpolate', 'moment', 'helper'], children.push(helper.attributeEntry(V, 'node.status', showStatus(d))); children.push(helper.attributeEntry(V, 'node.gateway', d.is_gateway ? 'ja' : undefined)); children.push(helper.attributeEntry(V, 'node.coordinates', showGeoURI(d))); - - if (config.nodeInfobox && config.nodeInfobox.contact) { - children.push(helper.attributeEntry(V, 'node.contact', helper.dictGet(d, ['owner', 'contact']))); - } - + children.push(helper.attributeEntry(V, 'node.contact', d.owner)); children.push(helper.attributeEntry(V, 'node.hardware', d.model)); children.push(helper.attributeEntry(V, 'node.primaryMac', d.network.mac)); children.push(helper.attributeEntry(V, 'node.firmware', showFirmware(d))); From 6091a8b82cc20abdbc8affc97c09bb3902f2d0a6 Mon Sep 17 00:00:00 2001 From: Xaver Maierhofer Date: Fri, 3 Nov 2017 22:07:22 +0100 Subject: [PATCH 062/119] [TASK] Dynamic node attributes via config --- app.js | 4 +- config.default.json | 67 +++++++++++++++- lib/forcegraph.js | 2 +- lib/gui.js | 20 ++--- lib/infobox/link.js | 2 +- lib/infobox/location.js | 2 +- lib/infobox/main.js | 8 +- lib/infobox/node.js | 170 +++++----------------------------------- lib/legend.js | 2 +- lib/linklist.js | 2 +- lib/main.js | 8 +- lib/map.js | 6 +- lib/map/button.js | 2 +- lib/map/labellayer.js | 28 +++---- lib/nodelist.js | 2 +- lib/proportions.js | 2 +- lib/simplenodelist.js | 2 +- lib/title.js | 2 +- lib/utils/helper.js | 1 - lib/utils/language.js | 3 +- lib/utils/node.js | 149 +++++++++++++++++++++++++++++++++++ 21 files changed, 283 insertions(+), 201 deletions(-) create mode 100644 lib/utils/node.js diff --git a/app.js b/app.js index 5390671..84316b2 100644 --- a/app.js +++ b/app.js @@ -37,5 +37,7 @@ require.config({ }); require(['main'], function (main) { - main(jsonData); + /** global: config */ + window.config = jsonData; + main(); }); diff --git a/config.default.json b/config.default.json index 39f1abc..f59737d 100644 --- a/config.default.json +++ b/config.default.json @@ -6,10 +6,69 @@ "nodeZoom": 18, "labelZoom": 13, "clientZoom": 15, - "nodeInfobox": { - "contact": false, - "hardwareUsage": true - }, + "nodeAttr": [ + // value can be a node attribute (1 depth) or a a function in utils/node with prefix show + { + "name": "node.status", + "value": "Status" + }, + { + "name": "node.gateway", + "value": "Gateway" + }, + { + "name": "node.coordinates", + "value": "GeoURI" + }, +// { +// "name": "node.contact", +// "value": "owner" +// }, + { + "name": "node.hardware", + "value": "model" + }, + { + "name": "node.primaryMac", + "value": "mac" + }, + { + "name": "node.firmware", + "value": "Firmware" + }, + { + "name": "node.uptime", + "value": "Uptime" + }, + { + "name": "node.firstSeen", + "value": "FirstSeen" + }, + { + "name": "node.systemLoad", + "value": "Load" + }, + { + "name": "node.ram", + "value": "RAM" + }, + { + "name": "node.ipAddresses", + "value": "IPs" + }, + { + "name": "node.update", + "value": "Autoupdate" + }, + { + "name": "node.site", + "value": "Site" + }, + { + "name": "node.clients", + "value": "Clients" + } + ], "supportedLocale": [ "en", "de", diff --git a/lib/forcegraph.js b/lib/forcegraph.js index ceecedc..b96010c 100644 --- a/lib/forcegraph.js +++ b/lib/forcegraph.js @@ -2,7 +2,7 @@ define(['d3-selection', 'd3-force', 'd3-zoom', 'd3-drag', 'd3-timer', 'd3-ease', function (d3Selection, d3Force, d3Zoom, d3Drag, d3Timer, d3Ease, d3Interpolate, math, draw) { 'use strict'; - return function (config, linkScale, sidebar, router) { + return function (linkScale, sidebar) { var self = this; var el; var canvas; diff --git a/lib/gui.js b/lib/gui.js index 01736b9..a6d5639 100644 --- a/lib/gui.js +++ b/lib/gui.js @@ -7,7 +7,7 @@ function (d3Interpolate, Map, Sidebar, Tabs, Container, Legend, Linklist, Title, About, DataDistributor, FilterGUI, HostnameFilter) { 'use strict'; - return function (config, router, language) { + return function (language) { var self = this; var content; var contentDiv; @@ -38,7 +38,7 @@ function (d3Interpolate, Map, Sidebar, Tabs, Container, Legend, Linklist, function addContent(K) { removeContent(); - content = new K(config, linkScale, sidebar.getWidth, router, buttons); + content = new K(linkScale, sidebar.getWidth, buttons); content.render(contentDiv); fanout.add(content); @@ -77,18 +77,18 @@ function (d3Interpolate, Map, Sidebar, Tabs, Container, Legend, Linklist, buttons.appendChild(buttonToggle); - var title = new Title(config); + var title = new Title(); var header = new Container('header'); - var infobox = new Infobox(config, sidebar, router, linkScale); + var infobox = new Infobox(sidebar, linkScale); var tabs = new Tabs(); var overview = new Container(); - var legend = new Legend(config, language); - var newnodeslist = new SimpleNodelist('new', 'firstseen', router, _.t('node.new')); - var lostnodeslist = new SimpleNodelist('lost', 'lastseen', router, _.t('node.missing')); - var nodelist = new Nodelist(router); - var linklist = new Linklist(linkScale, router); - var statistics = new Proportions(config, fanout); + var legend = new Legend(language); + var newnodeslist = new SimpleNodelist('new', 'firstseen', _.t('node.new')); + var lostnodeslist = new SimpleNodelist('lost', 'lastseen', _.t('node.missing')); + var nodelist = new Nodelist(); + var linklist = new Linklist(linkScale); + var statistics = new Proportions(fanout); var about = new About(); fanoutUnfiltered.add(legend); diff --git a/lib/infobox/link.js b/lib/infobox/link.js index 521a7f3..27e3827 100644 --- a/lib/infobox/link.js +++ b/lib/infobox/link.js @@ -13,7 +13,7 @@ define(['helper', 'snabbdom'], function (helper, V) { return helper.showStat(V, o, subst); } - return function (config, el, router, d, linkScale) { + return function (el, d, linkScale) { var self = this; var header = document.createElement('div'); var table = document.createElement('table'); diff --git a/lib/infobox/location.js b/lib/infobox/location.js index e313f83..cc4bcf5 100644 --- a/lib/infobox/location.js +++ b/lib/infobox/location.js @@ -1,7 +1,7 @@ define(['helper'], function (helper) { 'use strict'; - return function (config, el, router, d) { + return function (el, d) { var sidebarTitle = document.createElement('h2'); sidebarTitle.textContent = _.t('location.location'); el.appendChild(sidebarTitle); diff --git a/lib/infobox/main.js b/lib/infobox/main.js index f2984b7..c2076e4 100644 --- a/lib/infobox/main.js +++ b/lib/infobox/main.js @@ -1,7 +1,7 @@ define(['infobox/link', 'infobox/node', 'infobox/location'], function (Link, Node, location) { 'use strict'; - return function (config, sidebar, router, linkScale) { + return function (sidebar, linkScale) { var self = this; var el; var node; @@ -41,19 +41,19 @@ define(['infobox/link', 'infobox/node', 'infobox/location'], function (Link, Nod self.gotoNode = function gotoNode(d, nodeDict) { create(); - node = new Node(config, el, router, d, linkScale, nodeDict); + node = new Node(el, d, linkScale, nodeDict); node.render(); }; self.gotoLink = function gotoLink(d) { create(); - link = new Link(config, el, router, d, linkScale); + link = new Link(el, d, linkScale); link.render(); }; self.gotoLocation = function gotoLocation(d) { create(); - location(config, el, router, d); + location(el, d); }; self.setData = function setData(d) { diff --git a/lib/infobox/node.js b/lib/infobox/node.js index b08c8f9..e997106 100644 --- a/lib/infobox/node.js +++ b/lib/infobox/node.js @@ -1,137 +1,8 @@ -define(['sorttable', 'snabbdom', 'd3-interpolate', 'moment', 'helper'], - function (SortTable, V, d3Interpolate, moment, helper) { +define(['sorttable', 'snabbdom', 'd3-interpolate', 'moment', 'helper', 'utils/node'], + function (SortTable, V, d3Interpolate, moment, helper, nodef) { 'use strict'; V = V.default; - function showGeoURI(d) { - if (!helper.hasLocation(d)) { - return undefined; - } - - return V.h('td', - V.h('a', - { props: { href: 'geo:' + d.location.latitude + ',' + d.location.longitude } }, - Number(d.location.latitude.toFixed(6)) + ', ' + Number(d.location.longitude.toFixed(6)) - ) - ); - } - - function showStatus(d) { - return V.h('td', - { props: { className: d.is_online ? 'online' : 'offline' } }, - _.t((d.is_online ? 'node.lastOnline' : 'node.lastOffline'), { - time: d.lastseen.fromNow(), - date: d.lastseen.format('DD.MM.YYYY, H:mm:ss') - })); - } - - function showFirmware(d) { - return [ - helper.dictGet(d, ['firmware', 'release']), - helper.dictGet(d, ['firmware', 'base']) - ].filter(function (n) { - return n !== null; - }).join(' / ') || undefined; - } - - function showSite(d, config) { - var rt = d.site_code; - if (config.siteNames) { - config.siteNames.forEach(function (t) { - if (d.site_code === t.site) { - rt = t.name; - } - }); - } - return rt; - } - - function showClients(d) { - if (!d.is_online) { - return undefined; - } - - var clients = [ - V.h('span', [ - d.clients > 0 ? d.clients : _.t('none'), - V.h('br'), - V.h('i', { props: { className: 'ion-people', title: _.t('node.clients') } }) - ]), - V.h('span', - { props: { className: 'legend-24ghz' } }, - [ - d.clients_wifi24, - V.h('br'), - V.h('span', { props: { className: 'symbol', title: '2,4 Ghz' } }) - ]), - V.h('span', - { props: { className: 'legend-5ghz' } }, - [ - d.clients_wifi5, - V.h('br'), - V.h('span', { props: { className: 'symbol', title: '5 Ghz' } }) - ]), - V.h('span', - { props: { className: 'legend-others' } }, - [ - d.clients_other, - V.h('br'), - V.h('span', { props: { className: 'symbol', title: _.t('others') } }) - ]) - ]; - - return V.h('td', { props: { className: 'clients' } }, clients); - } - - function showIPs(d) { - var string = []; - var ips = d.network.addresses; - ips.sort(); - ips.forEach(function (ip, i) { - if (i > 0) { - string.push(V.h('br')); - } - - if (ip.indexOf('fe80:') !== 0) { - string.push(V.h('a', { props: { href: 'http://[' + ip + ']/', target: '_blank' } }, ip)); - } else { - string.push(ip); - } - }); - return V.h('td', string); - } - - function showBar(v, width, warning) { - return V.h('span', - { props: { className: 'bar' + (warning ? ' warning' : '') } }, - [ - V.h('span', - { - style: { width: (width * 100) + '%' } - }), - V.h('label', v) - ] - ); - } - - function showLoad(d) { - if (!('loadavg' in d)) { - return undefined; - } - return showBar(d.loadavg.toFixed(2), d.loadavg % 1, d.loadavg >= d.nproc); - } - - function showRAM(d) { - if (!('memory_usage' in d)) { - return undefined; - } - return showBar(Math.round(d.memory_usage * 100) + ' %', d.memory_usage, d.memory_usage >= 0.8); - } - - function showAutoupdate(d) { - return d.autoupdater.enabled ? _.t('node.activated', { branch: d.autoupdater.branch }) : _.t('node.deactivated'); - } - function showStatImg(o, d) { var subst = {}; subst['{NODE_ID}'] = d.node_id; @@ -141,7 +12,7 @@ define(['sorttable', 'snabbdom', 'd3-interpolate', 'moment', 'helper'], return helper.showStat(V, o, subst); } - return function (config, el, router, d, linkScale, nodeDict) { + return function (el, d, linkScale, nodeDict) { function nodeLink(node) { return V.h('a', { props: { @@ -249,23 +120,24 @@ define(['sorttable', 'snabbdom', 'd3-interpolate', 'moment', 'helper'], var children = []; - children.push(helper.attributeEntry(V, 'node.status', showStatus(d))); - children.push(helper.attributeEntry(V, 'node.gateway', d.is_gateway ? 'ja' : undefined)); - children.push(helper.attributeEntry(V, 'node.coordinates', showGeoURI(d))); - children.push(helper.attributeEntry(V, 'node.contact', d.owner)); - children.push(helper.attributeEntry(V, 'node.hardware', d.model)); - children.push(helper.attributeEntry(V, 'node.primaryMac', d.network.mac)); - children.push(helper.attributeEntry(V, 'node.firmware', showFirmware(d))); - children.push(helper.attributeEntry(V, 'node.site', showSite(d, config))); - children.push(helper.attributeEntry(V, 'node.uptime', moment.utc(d.uptime).local().fromNow(true))); - children.push(helper.attributeEntry(V, 'node.firstSeen', d.firstseen.fromNow(true))); - if (config.nodeInfobox && config.nodeInfobox.hardwareUsage) { - children.push(helper.attributeEntry(V, 'node.systemLoad', showLoad(d))); - children.push(helper.attributeEntry(V, 'node.ram', showRAM(d))); - } - children.push(helper.attributeEntry(V, 'node.ipAddresses', showIPs(d))); - children.push(helper.attributeEntry(V, 'node.update', showAutoupdate(d))); - children.push(helper.attributeEntry(V, 'node.clients', showClients(d))); + config.nodeAttr.forEach(function (row) { + var field = d[row.value]; + if (nodef['show' + row.value] !== undefined) { + field = nodef['show' + row.value](d); + } + + if (field) { + if (typeof field !== 'object') { + field = V.h('td', field); + } + + children.push(V.h('tr', [ + V.h('th', _.t(row.name)), + field + ])); + } + }); + children.push(helper.attributeEntry(V, 'node.gateway', showGateway(d))); var elNew = V.h('table', children); diff --git a/lib/legend.js b/lib/legend.js index 549b87a..71c1011 100644 --- a/lib/legend.js +++ b/lib/legend.js @@ -1,7 +1,7 @@ define(['helper'], function (helper) { 'use strict'; - return function (config, language) { + return function (language) { var self = this; var stats = document.createTextNode(''); var timestamp = document.createTextNode(''); diff --git a/lib/linklist.js b/lib/linklist.js index b6d2cf3..20cc364 100644 --- a/lib/linklist.js +++ b/lib/linklist.js @@ -28,7 +28,7 @@ define(['sorttable', 'snabbdom', 'helper'], function (SortTable, V, helper) { reverse: true }]; - return function (linkScale, router) { + return function (linkScale) { var table = new SortTable(headings, 2, renderRow); V = V.default; diff --git a/lib/main.js b/lib/main.js index 45bf4f0..bcd9a8b 100644 --- a/lib/main.js +++ b/lib/main.js @@ -2,7 +2,7 @@ define(['moment', 'utils/router', 'leaflet', 'gui', 'helper', 'utils/language'], function (moment, Router, L, GUI, helper, Language) { 'use strict'; - return function (config) { + return function () { function handleData(data) { var timestamp; var nodes = []; @@ -72,8 +72,8 @@ define(['moment', 'utils/router', 'leaflet', 'gui', 'helper', 'utils/language'], }; } - var language = new Language(config); - var router = new Router(language); + var language = new Language(); + window.router = new Router(language); config.dataPath.forEach(function (d, i) { config.dataPath[i] += 'meshviewer.json'; @@ -88,7 +88,7 @@ define(['moment', 'utils/router', 'leaflet', 'gui', 'helper', 'utils/language'], update() .then(function (d) { - var gui = new GUI(config, router, language); + var gui = new GUI(language); gui.setData(d); router.setData(d); router.resolve(); diff --git a/lib/map.js b/lib/map.js index 9502ad6..6b1d9fd 100644 --- a/lib/map.js +++ b/lib/map.js @@ -8,7 +8,7 @@ define(['map/clientlayer', 'map/labellayer', 'map/button', 'leaflet'], minZoom: 0 }; - return function (config, linkScale, sidebar, router, buttons) { + return function (linkScale, sidebar, buttons) { var self = this; var savedView; @@ -57,7 +57,7 @@ define(['map/clientlayer', 'map/labellayer', 'map/button', 'leaflet'], baseLayers[d.name] = d.layer; }); - var button = new Button(config, map, router, buttons); + var button = new Button(map, buttons); map.on('locationfound', button.locationFound); map.on('locationerror', button.locationError); @@ -175,7 +175,7 @@ define(['map/clientlayer', 'map/labellayer', 'map/button', 'leaflet'], linkDict = {}; clientLayer.setData(data); - labelLayer.setData(data, map, nodeDict, linkDict, linkScale, router, config); + labelLayer.setData(data, map, nodeDict, linkDict, linkScale); updateView(true); }; diff --git a/lib/map/button.js b/lib/map/button.js index b7020eb..b0a2f33 100644 --- a/lib/map/button.js +++ b/lib/map/button.js @@ -63,7 +63,7 @@ define(['map/clientlayer', 'map/labellayer', 'leaflet', 'map/locationmarker'], } }); - return function (config, map, router, buttons) { + return function (map, buttons) { var userLocation; var locateUserButton = new LocateButton(function (d) { diff --git a/lib/map/labellayer.js b/lib/map/labellayer.js index fae9c20..fdd4742 100644 --- a/lib/map/labellayer.js +++ b/lib/map/labellayer.js @@ -76,7 +76,7 @@ define(['leaflet', 'rbush', 'helper', 'moment'], return { minX: x, minY: y, maxX: x + width, maxY: y + height }; } - function mkMarker(dict, iconFunc, router) { + function mkMarker(dict, iconFunc) { return function (d) { var m = L.circleMarker([d.location.latitude, d.location.longitude], iconFunc(d)); @@ -95,7 +95,7 @@ define(['leaflet', 'rbush', 'helper', 'moment'], }; } - function addLinksToMap(dict, linkScale, graph, router) { + function addLinksToMap(dict, linkScale, graph) { graph = graph.filter(function (d) { return 'distance' in d && d.type.indexOf('vpn') !== 0; }); @@ -125,7 +125,7 @@ define(['leaflet', 'rbush', 'helper', 'moment'], }); } - function getIcon(config, color) { + function getIcon(color) { return Object.assign({}, config.icon.base, config.icon[color]); } @@ -136,12 +136,12 @@ define(['leaflet', 'rbush', 'helper', 'moment'], this.prepareLabels(); } }, - setData: function (data, map, nodeDict, linkDict, linkScale, router, config) { - var iconOnline = getIcon(config, 'online'); - var iconOffline = getIcon(config, 'offline'); - var iconLost = getIcon(config, 'lost'); - var iconAlert = getIcon(config, 'alert'); - var iconNew = getIcon(config, 'new'); + setData: function (data, map, nodeDict, linkDict, linkScale) { + var iconOnline = getIcon('online'); + var iconOffline = getIcon('offline'); + var iconLost = getIcon('lost'); + var iconAlert = getIcon('alert'); + var iconNew = getIcon('new'); // Check if init or data is already set if (groupLines) { groupOffline.clearLayers(); @@ -151,7 +151,7 @@ define(['leaflet', 'rbush', 'helper', 'moment'], groupLines.clearLayers(); } - var lines = addLinksToMap(linkDict, linkScale, data.links, router); + var lines = addLinksToMap(linkDict, linkScale, data.links); groupLines = L.featureGroup(lines).addTo(map); var nodesOnline = helper.subtract(data.nodes.online, data.nodes.new).filter(helper.hasLocation); @@ -161,15 +161,15 @@ define(['leaflet', 'rbush', 'helper', 'moment'], var markersOnline = nodesOnline.map(mkMarker(nodeDict, function () { return iconOnline; - }, router)); + })); var markersOffline = nodesOffline.map(mkMarker(nodeDict, function () { return iconOffline; - }, router)); + })); var markersNew = nodesNew.map(mkMarker(nodeDict, function () { return iconNew; - }, router)); + })); var markersLost = nodesLost.map(mkMarker(nodeDict, function (d) { var age = moment(data.now).diff(d.lastseen, 'days', true); @@ -180,7 +180,7 @@ define(['leaflet', 'rbush', 'helper', 'moment'], return iconLost; } return null; - }, router)); + })); groupOffline = L.featureGroup(markersOffline).addTo(map); groupLost = L.featureGroup(markersLost).addTo(map); diff --git a/lib/nodelist.js b/lib/nodelist.js index f55fc81..383e15e 100644 --- a/lib/nodelist.js +++ b/lib/nodelist.js @@ -47,7 +47,7 @@ define(['sorttable', 'snabbdom', 'helper'], function (SortTable, V, helper) { reverse: true }]; - return function (router) { + return function () { function renderRow(d) { var td0Content = ''; if (helper.hasLocation(d)) { diff --git a/lib/proportions.js b/lib/proportions.js index f0acdf6..44afa8e 100644 --- a/lib/proportions.js +++ b/lib/proportions.js @@ -2,7 +2,7 @@ define(['d3-interpolate', 'snabbdom', 'filters/genericnode', 'helper'], function (d3Interpolate, V, Filter, helper) { 'use strict'; - return function (config, filterManager) { + return function (filterManager) { var self = this; var scale = d3Interpolate.interpolate('#770038', '#dc0067'); V = V.default; diff --git a/lib/simplenodelist.js b/lib/simplenodelist.js index e7f710e..25cb7c4 100644 --- a/lib/simplenodelist.js +++ b/lib/simplenodelist.js @@ -2,7 +2,7 @@ define(['moment', 'snabbdom', 'helper'], function (moment, V, helper) { 'use strict'; V = V.default; - return function (nodes, field, router, title) { + return function (nodes, field, title) { var self = this; var el; var tbody; diff --git a/lib/title.js b/lib/title.js index b3855a3..b161973 100644 --- a/lib/title.js +++ b/lib/title.js @@ -1,7 +1,7 @@ define(function () { 'use strict'; - return function (config) { + return function () { function setTitle(d) { var title = [config.siteName]; diff --git a/lib/utils/helper.js b/lib/utils/helper.js index 8d4da14..6dd04b5 100644 --- a/lib/utils/helper.js +++ b/lib/utils/helper.js @@ -118,7 +118,6 @@ define({ value ]); }, - showStat: function showStat(V, o, subst) { var content; subst = typeof subst !== 'undefined' ? subst : {}; diff --git a/lib/utils/language.js b/lib/utils/language.js index 66f1685..1435406 100644 --- a/lib/utils/language.js +++ b/lib/utils/language.js @@ -1,6 +1,6 @@ define(['polyglot', 'moment', 'helper'], function (Polyglot, moment, helper) { 'use strict'; - return function (config) { + return function () { var router; function languageSelect(el) { @@ -60,6 +60,7 @@ define(['polyglot', 'moment', 'helper'], function (Polyglot, moment, helper) { function init(r) { router = r; + /** global: _ */ window._ = new Polyglot({ locale: getLocale(router.getLang()), allowMissing: true }); helper.getJSON('locale/' + _.locale() + '.json?' + config.cacheBreaker).then(setTranslation); document.querySelector('html').setAttribute('lang', _.locale()); diff --git a/lib/utils/node.js b/lib/utils/node.js new file mode 100644 index 0000000..114decb --- /dev/null +++ b/lib/utils/node.js @@ -0,0 +1,149 @@ +define(['snabbdom', 'helper', 'moment'], function (V, helper, moment) { + 'use strict'; + V = V.default; + + var self = {}; + + function showBar(v, width, warning) { + return V.h('span', + { props: { className: 'bar' + (warning ? ' warning' : '') } }, + [ + V.h('span', + { + style: { width: (width * 100) + '%' } + }), + V.h('label', v) + ] + ); + } + + self.showStatus = function showStatus(d) { + return V.h('td', + { props: { className: d.is_online ? 'online' : 'offline' } }, + _.t((d.is_online ? 'node.lastOnline' : 'node.lastOffline'), { + time: d.lastseen.fromNow(), + date: d.lastseen.format('DD.MM.YYYY, H:mm:ss') + })); + }; + + self.showGeoURI = function showGeoURI(d) { + if (!helper.hasLocation(d)) { + return undefined; + } + + return V.h('td', + V.h('a', + { props: { href: 'geo:' + d.location.latitude + ',' + d.location.longitude } }, + Number(d.location.latitude.toFixed(6)) + ', ' + Number(d.location.longitude.toFixed(6)) + ) + ); + }; + + self.showGateway = function showGateway(d) { + return d.is_gateway ? _.t('yes') : undefined; + }; + + self.showFirmware = function showFirmware(d) { + return [ + helper.dictGet(d, ['firmware', 'release']), + helper.dictGet(d, ['firmware', 'base']) + ].filter(function (n) { + return n !== null; + }).join(' / ') || undefined; + }; + + self.showUptime = function showUptime(d) { + return moment.utc(d.uptime).local().fromNow(true); + }; + + self.showFirstSeen = function showFirstSeen(d) { + return d.firstseen.fromNow(true); + }; + + self.showLoad = function showLoad(d) { + if (!d.loadavg) { + return undefined; + } + return showBar(d.loadavg.toFixed(2), d.loadavg % 1, d.loadavg >= d.nproc); + }; + + self.showRAM = function showRAM(d) { + if (!d.memory_usage) { + return undefined; + } + return showBar(Math.round(d.memory_usage * 100) + ' %', d.memory_usage, d.memory_usage >= 0.8); + }; + + self.showSite = function showSite(d) { + var rt = d.site_code; + if (config.siteNames) { + config.siteNames.forEach(function (t) { + if (d.site_code === t.site) { + rt = t.name; + } + }); + } + return rt; + }; + + self.showClients = function showClients(d) { + if (!d.is_online) { + return undefined; + } + + var clients = [ + V.h('span', [ + d.clients > 0 ? d.clients : _.t('none'), + V.h('br'), + V.h('i', { props: { className: 'ion-people', title: _.t('node.clients') } }) + ]), + V.h('span', + { props: { className: 'legend-24ghz' } }, + [ + d.clients_wifi24, + V.h('br'), + V.h('span', { props: { className: 'symbol', title: '2,4 Ghz' } }) + ]), + V.h('span', + { props: { className: 'legend-5ghz' } }, + [ + d.clients_wifi5, + V.h('br'), + V.h('span', { props: { className: 'symbol', title: '5 Ghz' } }) + ]), + V.h('span', + { props: { className: 'legend-others' } }, + [ + d.clients_other, + V.h('br'), + V.h('span', { props: { className: 'symbol', title: _.t('others') } }) + ]) + ]; + + return V.h('td', { props: { className: 'clients' } }, clients); + }; + + self.showIPs = function showIPs(d) { + var string = []; + var ips = d.network.addresses; + ips.sort(); + ips.forEach(function (ip, i) { + if (i > 0) { + string.push(V.h('br')); + } + + if (ip.indexOf('fe80:') !== 0) { + string.push(V.h('a', { props: { href: 'http://[' + ip + ']/', target: '_blank' } }, ip)); + } else { + string.push(ip); + } + }); + return V.h('td', string); + }; + + self.showAutoupdate = function showAutoupdate(d) { + return d.autoupdater.enabled ? _.t('node.activated', { branch: d.autoupdater.branch }) : _.t('node.deactivated'); + }; + + return self; +}); From fd6c7c7f1e2f8b9eec8cb68fcb094f4d0750d987 Mon Sep 17 00:00:00 2001 From: Xaver Maierhofer Date: Sat, 4 Nov 2017 16:23:17 +0100 Subject: [PATCH 063/119] [TASK] Pass children to attributeEntry --- config.default.json | 8 ++++---- lib/infobox/link.js | 13 +++++++------ lib/infobox/node.js | 6 +++++- lib/utils/helper.js | 20 +++++++++----------- 4 files changed, 25 insertions(+), 22 deletions(-) diff --git a/config.default.json b/config.default.json index f59737d..367aaa0 100644 --- a/config.default.json +++ b/config.default.json @@ -20,10 +20,10 @@ "name": "node.coordinates", "value": "GeoURI" }, -// { -// "name": "node.contact", -// "value": "owner" -// }, + // { + // "name": "node.contact", + // "value": "owner" + // }, { "name": "node.hardware", "value": "model" diff --git a/lib/infobox/link.js b/lib/infobox/link.js index 27e3827..a019d94 100644 --- a/lib/infobox/link.js +++ b/lib/infobox/link.js @@ -37,17 +37,18 @@ define(['helper', 'snabbdom'], function (helper, V) { header = V.patch(header, V.h('div', headers)); - children.push(helper.attributeEntry(V, 'node.connectionType', d.type)); - children.push(helper.attributeEntry(V, 'node.tq', V.h('span', + helper.attributeEntry(V, children, 'node.connectionType', d.type); + helper.attributeEntry(V, children, 'node.tq', V.h('span', { style: { color: linkScale((d.source_tq + d.target_tq) / 2) } - }, helper.showTq(d.source_tq) + ' - ' + helper.showTq(d.target_tq)))); - children.push(helper.attributeEntry(V, 'node.distance', helper.showDistance(d))); - children.push(helper.attributeEntry(V, 'node.hardware', (d.source.model ? d.source.model + ' – ' : '') + - (d.target.model ? d.target.model : ''))); + }, helper.showTq(d.source_tq) + ' - ' + helper.showTq(d.target_tq)) + ); + helper.attributeEntry(V, children, 'node.distance', helper.showDistance(d)); + helper.attributeEntry(V, children, 'node.hardware', (d.source.model ? d.source.model + ' – ' : '') + + (d.target.model ? d.target.model : '')); var elNew = V.h('table', children); table = V.patch(table, elNew); diff --git a/lib/infobox/node.js b/lib/infobox/node.js index e997106..bc5ac69 100644 --- a/lib/infobox/node.js +++ b/lib/infobox/node.js @@ -138,7 +138,11 @@ define(['sorttable', 'snabbdom', 'd3-interpolate', 'moment', 'helper', 'utils/no } }); - children.push(helper.attributeEntry(V, 'node.gateway', showGateway(d))); + + children.push(V.h('tr', [ + V.h('th', _.t('node.gateway')), + showGateway(d) + ])); var elNew = V.h('table', children); table = V.patch(table, elNew); diff --git a/lib/utils/helper.js b/lib/utils/helper.js index 6dd04b5..e53caa8 100644 --- a/lib/utils/helper.js +++ b/lib/utils/helper.js @@ -104,19 +104,17 @@ define({ return (d * 100).toFixed(0) + '%'; }, - attributeEntry: function attributeEntry(V, label, value) { - if (value === undefined) { - return ''; - } + attributeEntry: function attributeEntry(V, children, label, value) { + if (value !== undefined) { + if (typeof value !== 'object') { + value = V.h('td', value); + } - if (typeof value !== 'object') { - value = V.h('td', value); + children.push(V.h('tr', [ + V.h('th', _.t(label)), + value + ])); } - - return V.h('tr', [ - V.h('th', _.t(label)), - value - ]); }, showStat: function showStat(V, o, subst) { var content; From b89e99b79e4c85431ef4eb2c97f391c538c41e02 Mon Sep 17 00:00:00 2001 From: Xaver Maierhofer Date: Sat, 4 Nov 2017 19:47:05 +0100 Subject: [PATCH 064/119] [TASK] Adjust depth for network --- lib/utils/node.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/utils/node.js b/lib/utils/node.js index 114decb..dd9e8e8 100644 --- a/lib/utils/node.js +++ b/lib/utils/node.js @@ -125,7 +125,7 @@ define(['snabbdom', 'helper', 'moment'], function (V, helper, moment) { self.showIPs = function showIPs(d) { var string = []; - var ips = d.network.addresses; + var ips = d.addresses; ips.sort(); ips.forEach(function (ip, i) { if (i > 0) { From 6add4f0916be4c08714acdbd4fdb482123de952d Mon Sep 17 00:00:00 2001 From: Xaver Maierhofer Date: Sun, 5 Nov 2017 16:58:41 +0100 Subject: [PATCH 065/119] [TASK] Wait for loaded language --- lib/linklist.js | 2 +- lib/main.js | 15 +++++++++++++++ lib/proportions.js | 2 +- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/lib/linklist.js b/lib/linklist.js index 20cc364..5e77348 100644 --- a/lib/linklist.js +++ b/lib/linklist.js @@ -1,5 +1,6 @@ define(['sorttable', 'snabbdom', 'helper'], function (SortTable, V, helper) { 'use strict'; + V = V.default; function linkName(d) { return (d.source ? d.source.hostname : d.source.id) + ' – ' + d.target.hostname; @@ -30,7 +31,6 @@ define(['sorttable', 'snabbdom', 'helper'], function (SortTable, V, helper) { return function (linkScale) { var table = new SortTable(headings, 2, renderRow); - V = V.default; function renderRow(d) { var td1Content = [V.h('a', { diff --git a/lib/main.js b/lib/main.js index bcd9a8b..b0b0fc8 100644 --- a/lib/main.js +++ b/lib/main.js @@ -87,6 +87,21 @@ define(['moment', 'utils/router', 'leaflet', 'gui', 'helper', 'utils/language'], } update() + .then(function (d) { + return new Promise(function (resolve, reject) { + var count = 0; + (function waitForLanguage() { + if (Object.keys(_.phrases).length > 0) { + resolve(d); + } else if (count > 500) { + reject(new Error('translation not loaded after 10 seconds')); + } else { + setTimeout(waitForLanguage.bind(this), 20); + } + count++; + })(); + }); + }) .then(function (d) { var gui = new GUI(language); gui.setData(d); diff --git a/lib/proportions.js b/lib/proportions.js index 44afa8e..0176564 100644 --- a/lib/proportions.js +++ b/lib/proportions.js @@ -1,11 +1,11 @@ define(['d3-interpolate', 'snabbdom', 'filters/genericnode', 'helper'], function (d3Interpolate, V, Filter, helper) { 'use strict'; + V = V.default; return function (filterManager) { var self = this; var scale = d3Interpolate.interpolate('#770038', '#dc0067'); - V = V.default; var statusTable; var fwTable; From cc18e53430b5107ec62a132463268f585b18a4a5 Mon Sep 17 00:00:00 2001 From: Xaver Maierhofer Date: Sun, 5 Nov 2017 17:01:31 +0100 Subject: [PATCH 066/119] [TASK] Upgrade packages for faster sass build in nodejs v9 --- yarn.lock | 49 +++++++++++++++++++++++++++---------------------- 1 file changed, 27 insertions(+), 22 deletions(-) diff --git a/yarn.lock b/yarn.lock index b5d4945..0495f75 100644 --- a/yarn.lock +++ b/yarn.lock @@ -554,10 +554,10 @@ browser-sync@^2.18.13: yargs "6.4.0" browserslist@^2.5.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.6.1.tgz#cc65a05ad6131ebda26f076f2822ba1bc826376b" + version "2.7.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.7.0.tgz#dc375dc70048fec3d989042a35022342902eff00" dependencies: - caniuse-lite "^1.0.30000755" + caniuse-lite "^1.0.30000757" electron-to-chromium "^1.3.27" bs-recipes@1.3.4: @@ -625,9 +625,9 @@ camelcase@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" -caniuse-lite@^1.0.30000748, caniuse-lite@^1.0.30000755: - version "1.0.30000756" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000756.tgz#3da701c1521b9fab87004c6de7c97fa47dbeaad2" +caniuse-lite@^1.0.30000748, caniuse-lite@^1.0.30000757: + version "1.0.30000758" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000758.tgz#e261140076651049cf6891ed4bc649b5c8c26c69" caseless@~0.12.0: version "0.12.0" @@ -649,7 +649,7 @@ chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^2.0.0, chalk@^2.1.0: +chalk@^2.0.0, chalk@^2.1.0, chalk@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.0.tgz#b5ea48efc9c1793dccc9b4767c93914d3f2d52ba" dependencies: @@ -1164,6 +1164,10 @@ detect-file@^0.1.0: dependencies: fs-exists-sync "^0.1.0" +detect-libc@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.2.tgz#71ad5d204bf17a6a6ca8f450c61454066ef461e1" + detect-newline@2.X: version "2.1.0" resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" @@ -2066,8 +2070,8 @@ global-prefix@^0.1.4: which "^1.2.12" globals@^10.0.0: - version "10.2.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-10.2.0.tgz#69490789091fcaa7f7d512c668c8eb73894a4ef2" + version "10.3.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-10.3.0.tgz#716aba93657b56630b5a0e77de5ea8ac6215afaa" globals@^9.17.0, globals@^9.2.0: version "9.18.0" @@ -2617,8 +2621,8 @@ ini@^1.3.4, ini@~1.3.0: resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e" inline-source@^5.0.0: - version "5.2.5" - resolved "https://registry.yarnpkg.com/inline-source/-/inline-source-5.2.5.tgz#2d5be7f3dd4305a4b31086245bf6079edd29c862" + version "5.2.6" + resolved "https://registry.yarnpkg.com/inline-source/-/inline-source-5.2.6.tgz#bae79302f4945822d536d365c9de67528c90b959" dependencies: csso "3.3.x" htmlparser2 "3.9.x" @@ -3594,9 +3598,10 @@ node-polyglot@^2.2.2: warning "^3.0.0" node-pre-gyp@^0.6.36: - version "0.6.38" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.38.tgz#e92a20f83416415bb4086f6d1fb78b3da73d113d" + version "0.6.39" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.39.tgz#c00e96860b23c0e1420ac7befc5044e1d78d8649" dependencies: + detect-libc "^1.0.2" hawk "3.1.3" mkdirp "^0.5.1" nopt "^4.0.1" @@ -3616,8 +3621,8 @@ node-rest-client@^1.4.1: xml2js ">=0.2.4" node-sass@^4.2.0: - version "4.5.3" - resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.5.3.tgz#d09c9d1179641239d1b97ffc6231fdcec53e1568" + version "4.6.0" + resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.6.0.tgz#1a54f5f4502e3cde310a26d6346266fd667271d9" dependencies: async-foreach "^0.1.3" chalk "^1.1.1" @@ -3635,7 +3640,7 @@ node-sass@^4.2.0: node-gyp "^3.3.1" npmlog "^4.0.0" request "^2.79.0" - sass-graph "^2.1.1" + sass-graph "^2.2.4" stdout-stream "^1.4.0" "nopt@2 || 3", nopt@3.0.x: @@ -3979,10 +3984,10 @@ postcss-value-parser@^3.2.3: resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz#87f38f9f18f774a4ab4c8a232f5c5ce8872a9d15" postcss@^6.0.1, postcss@^6.0.13: - version "6.0.13" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.13.tgz#b9ecab4ee00c89db3ec931145bd9590bbf3f125f" + version "6.0.14" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.14.tgz#5534c72114739e75d0afcf017db853099f562885" dependencies: - chalk "^2.1.0" + chalk "^2.3.0" source-map "^0.6.1" supports-color "^4.4.0" @@ -4395,7 +4400,7 @@ safe-buffer@^5.0.1, safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" -sass-graph@^2.1.1: +sass-graph@^2.2.4: version "2.2.4" resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.2.4.tgz#13fbd63cd1caf0908b9fd93476ad43a51d1e0b49" dependencies: @@ -5049,8 +5054,8 @@ ua-parser-js@^0.7.9: resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.17.tgz#e9ec5f9498b9ec910e7ae3ac626a805c4d09ecac" uglify-js@3.1.x, uglify-js@^3.0.5: - version "3.1.6" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.1.6.tgz#918832602036e95d2318e11f27ee8461a8592c5d" + version "3.1.7" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.1.7.tgz#13379168b7fcf132ed977254a7802e0a294b1ffb" dependencies: commander "~2.11.0" source-map "~0.6.1" From 2c7500f1bbbb7bfb0522343fb18a51df1a254d9d Mon Sep 17 00:00:00 2001 From: Xaver Maierhofer Date: Sun, 5 Nov 2017 18:23:40 +0100 Subject: [PATCH 067/119] [TASK] Make more colors configurable --- app.js | 2 -- config.default.json | 58 +++++++++++++++++++++++++++++++++++++++ gulp/tasks/html.js | 2 +- lib/forcegraph/draw.js | 15 +++------- lib/gui.js | 2 +- lib/map.js | 4 +-- lib/map/labellayer.js | 6 ++-- lib/map/locationmarker.js | 35 ++--------------------- lib/proportions.js | 2 +- lib/utils/helper.js | 6 ++-- 10 files changed, 76 insertions(+), 56 deletions(-) diff --git a/app.js b/app.js index 84316b2..5e6d0b0 100644 --- a/app.js +++ b/app.js @@ -37,7 +37,5 @@ require.config({ }); require(['main'], function (main) { - /** global: config */ - window.config = jsonData; main(); }); diff --git a/config.default.json b/config.default.json index 367aaa0..9ad9529 100644 --- a/config.default.json +++ b/config.default.json @@ -75,6 +75,7 @@ "fr", "ru" ], + // Color configs "icon": { "base": { "fillOpacity": 0.6, @@ -107,5 +108,62 @@ "fillColor": "#93E929" } }, + "client": { + "wifi24": "rgba(220, 0, 103, 0.7)", + "wifi5": "rgba(10, 156, 146, 0.7)", + "other": "rgba(227, 166, 25, 0.7)" + }, + "map": { + "labelNewColor": "#459c18", + "tqFrom": "#F02311", + "tqTo": "#04C714", + "highlightNode": { + "color": "#ad2358", + "weight": 8, + "fillOpacity": 1, + "opacity": 0.4, + "className": "stroke-first" + }, + "highlightLink": { + "weight": 4, + "opacity": 1, + "dashArray": "5, 10" + } + }, + "forceGraph": { + "nodeColor": "#fff", + "highlightColor": "rgba(255, 255, 255, 0.2)", + "labelColor": "#fff", + "tqFrom": "#770038", + "tqTo": "#dc0067" + }, + "locate": { + "outerCircle": { + "stroke": false, + "color": "#4285F4", + "opacity": 1, + "fillOpacity": 0.3, + "clickable": false, + "radius": 16 + }, + "innerCircle": { + "stroke:": true, + "color": "#ffffff", + "fillColor": "#4285F4", + "weight": 1.5, + "clickable": false, + "opacity": 1, + "fillOpacity": 1, + "radius": 7 + }, + "accuracyCircle": { + "stroke": true, + "color": "#4285F4", + "weight": 1, + "clickable": false, + "opacity": 0.7, + "fillOpacity": 0.2 + } + }, "cacheBreaker": "" } diff --git a/gulp/tasks/html.js b/gulp/tasks/html.js index 5c56e72..2c1aa0e 100644 --- a/gulp/tasks/html.js +++ b/gulp/tasks/html.js @@ -10,7 +10,7 @@ module.exports = function (gulp, plugins, config, env) { JSON.parse(JSON.minify(defaultConfig)), JSON.parse(JSON.minify(customConfig.contents.toString('utf8'))) ); - return '' - ; + ';'; } })) .pipe(env.production(plugins.kyhInlineSource({ compress: false }))) diff --git a/lib/infobox/node.js b/lib/infobox/node.js index c11c50c..da0379e 100644 --- a/lib/infobox/node.js +++ b/lib/infobox/node.js @@ -123,7 +123,9 @@ define(['sorttable', 'snabbdom', 'd3-interpolate', 'moment', 'helper', 'utils/no config.nodeAttr.forEach(function (row) { var field = d[row.value]; - if (nodef['show' + row.value] !== undefined) { + if (typeof row.value === 'function') { + field = row.value(d, nodeDict); + } else if (nodef['show' + row.value] !== undefined) { field = nodef['show' + row.value](d); } @@ -131,9 +133,8 @@ define(['sorttable', 'snabbdom', 'd3-interpolate', 'moment', 'helper', 'utils/no if (typeof field !== 'object') { field = V.h('td', field); } - children.push(V.h('tr', [ - V.h('th', _.t(row.name)), + row.name !== undefined ? V.h('th', _.t(row.name)) : null, field ])); } From 844bf99641ccb50d5c84013f5d7be78783e3df08 Mon Sep 17 00:00:00 2001 From: Xaver Maierhofer Date: Fri, 10 Nov 2017 22:58:35 +0100 Subject: [PATCH 072/119] [TASK] Add connection type to tooltip --- lib/map/labellayer.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/map/labellayer.js b/lib/map/labellayer.js index 3bceeb6..a32ce9c 100644 --- a/lib/map/labellayer.js +++ b/lib/map/labellayer.js @@ -114,7 +114,9 @@ define(['leaflet', 'rbush', 'helper', 'moment'], line.setStyle(opts); }; - line.bindTooltip(d.source.hostname + ' – ' + d.target.hostname + '
' + helper.showDistance(d) + ' / ' + helper.showTq(d.source_tq) + ' - ' + helper.showTq(d.target_tq) + ''); + line.bindTooltip(d.source.hostname + ' – ' + d.target.hostname + + '
' + helper.showDistance(d) + ' / ' + helper.showTq(d.source_tq) + ' - ' + helper.showTq(d.target_tq) + '
' + d.type + '
'); + line.on('click', function () { router.fullUrl({ link: d.id }); }); From 338c90a2d16d6259d6260a5e33fa9bb16092222b Mon Sep 17 00:00:00 2001 From: Xaver Maierhofer Date: Sun, 12 Nov 2017 02:20:48 +0100 Subject: [PATCH 073/119] [TASK] Remove crowdin --- crowdin.yml | 3 --- 1 file changed, 3 deletions(-) delete mode 100644 crowdin.yml diff --git a/crowdin.yml b/crowdin.yml deleted file mode 100644 index d043b23..0000000 --- a/crowdin.yml +++ /dev/null @@ -1,3 +0,0 @@ -files: - - source: /locale/en.json - translation: /locale/%two_letters_code%.json From 72674fd6da04cfc25459e19ad5d2a603e94125d6 Mon Sep 17 00:00:00 2001 From: Xaver Maierhofer Date: Sun, 12 Nov 2017 02:29:30 +0100 Subject: [PATCH 074/119] [DOC] Update Sponsoring/Support section --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 55959d1..65b3d05 100644 --- a/README.md +++ b/README.md @@ -32,6 +32,7 @@ Documentation moved to [meshviewer.gitbooks.io](https://meshviewer.gitbooks.io/d - [BrowserStack](https://www.browserstack.com/) for providing an awesome testing service for hundreds of browsers - [Travis CI](https://travis-ci.org/) for building meshviewer on every push and pull request - [Scrutinizer CI](https://scrutinizer-ci.com/g/ffrgb/meshviewer/) for testing code quality on every push and pull request -- [Crowdin](https://crowdin.com/) for providing an easy non-developer translation environment +- [POEditor](https://poeditor.com/join/project/VZBjPNNic9) for providing an easy non-developer translation environment +- [Netlify](https://app.netlify.com/sites/meshviewer/deploys) preview for every PR and also provide a [page with current develop branch](https://meshviewer.netlify.com/) These tools need a lot of infrastructures and provide a free account for open source software. From 7bfbb1b9094b5afce3608b89c355d3cad041619e Mon Sep 17 00:00:00 2001 From: Xaver Maierhofer Date: Sun, 12 Nov 2017 00:54:50 +0100 Subject: [PATCH 075/119] [TASK] Add title to html (before js) --- gulp/tasks/html.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/gulp/tasks/html.js b/gulp/tasks/html.js index 7149d5d..ede1677 100644 --- a/gulp/tasks/html.js +++ b/gulp/tasks/html.js @@ -26,7 +26,8 @@ module.exports = function (gulp, plugins, config, env) { delete require.cache[require.resolve('../../config.default')]; delete require.cache[require.resolve('../../config')]; var buildConfig = Object.assign({}, require('../../config.default')(), require('../../config')()); - return '