From b42229140c0a5c52f916b79d43813ab3fe5493cc Mon Sep 17 00:00:00 2001 From: Adam Harvey Date: Wed, 5 Jun 2019 09:49:24 -0500 Subject: press -> news --- site/public/datasets/brainwash/index.html | 2 +- site/public/datasets/duke_mtmc/index.html | 2 +- site/public/datasets/hrt_transgender/index.html | 2 +- site/public/datasets/ijb_c/index.html | 2 +- site/public/datasets/index.html | 2 +- site/public/datasets/msceleb/assets/notes/index.html | 2 +- site/public/datasets/msceleb/index.html | 2 +- site/public/datasets/oxford_town_centre/index.html | 2 +- site/public/datasets/uccs/assets/notes/index.html | 2 +- site/public/datasets/uccs/index.html | 2 +- 10 files changed, 10 insertions(+), 10 deletions(-) (limited to 'site/public/datasets') diff --git a/site/public/datasets/brainwash/index.html b/site/public/datasets/brainwash/index.html index 0337dd0b..7d9232ce 100644 --- a/site/public/datasets/brainwash/index.html +++ b/site/public/datasets/brainwash/index.html @@ -49,7 +49,7 @@
diff --git a/site/public/datasets/duke_mtmc/index.html b/site/public/datasets/duke_mtmc/index.html index 4f8f3505..86dc60af 100644 --- a/site/public/datasets/duke_mtmc/index.html +++ b/site/public/datasets/duke_mtmc/index.html @@ -49,7 +49,7 @@
diff --git a/site/public/datasets/hrt_transgender/index.html b/site/public/datasets/hrt_transgender/index.html index 9f6db5de..4f046aa7 100644 --- a/site/public/datasets/hrt_transgender/index.html +++ b/site/public/datasets/hrt_transgender/index.html @@ -49,7 +49,7 @@
diff --git a/site/public/datasets/ijb_c/index.html b/site/public/datasets/ijb_c/index.html index 3ebe4362..5dbad086 100644 --- a/site/public/datasets/ijb_c/index.html +++ b/site/public/datasets/ijb_c/index.html @@ -49,7 +49,7 @@
diff --git a/site/public/datasets/index.html b/site/public/datasets/index.html index c5ec18d8..a5c9c14a 100644 --- a/site/public/datasets/index.html +++ b/site/public/datasets/index.html @@ -49,7 +49,7 @@
diff --git a/site/public/datasets/msceleb/assets/notes/index.html b/site/public/datasets/msceleb/assets/notes/index.html index e957deae..e9751129 100644 --- a/site/public/datasets/msceleb/assets/notes/index.html +++ b/site/public/datasets/msceleb/assets/notes/index.html @@ -49,7 +49,7 @@
diff --git a/site/public/datasets/msceleb/index.html b/site/public/datasets/msceleb/index.html index 79529496..416f19c8 100644 --- a/site/public/datasets/msceleb/index.html +++ b/site/public/datasets/msceleb/index.html @@ -49,7 +49,7 @@
diff --git a/site/public/datasets/oxford_town_centre/index.html b/site/public/datasets/oxford_town_centre/index.html index 34495b6b..d681741a 100644 --- a/site/public/datasets/oxford_town_centre/index.html +++ b/site/public/datasets/oxford_town_centre/index.html @@ -49,7 +49,7 @@
diff --git a/site/public/datasets/uccs/assets/notes/index.html b/site/public/datasets/uccs/assets/notes/index.html index bfc44088..8746ed70 100644 --- a/site/public/datasets/uccs/assets/notes/index.html +++ b/site/public/datasets/uccs/assets/notes/index.html @@ -49,7 +49,7 @@
diff --git a/site/public/datasets/uccs/index.html b/site/public/datasets/uccs/index.html index 62326ab9..c9ef82e7 100644 --- a/site/public/datasets/uccs/index.html +++ b/site/public/datasets/uccs/index.html @@ -49,7 +49,7 @@
-- cgit v1.2.3-70-g09d2 From b3ed0f95eb94a4e7cb5e137bb8196db8c36aa50d Mon Sep 17 00:00:00 2001 From: Adam Harvey Date: Wed, 5 Jun 2019 10:44:12 -0500 Subject: fix? --- site/public/about/assets/LICENSE/index.html | 4 - site/public/about/attribution/index.html | 4 - site/public/about/index.html | 4 - site/public/about/legal/index.html | 4 - site/public/about/news/index.html | 4 - site/public/assets/css/applets.css | 246 ++++ site/public/assets/css/css.css | 1270 ++++++++++++++++++++ site/public/assets/css/fonts.css | 41 + site/public/assets/css/leaflet.css | 635 ++++++++++ site/public/assets/css/mobile.css | 172 +++ site/public/assets/css/splash.css | 134 +++ site/public/assets/css/tabulator.css | 759 ++++++++++++ site/public/assets/data/3dlm_0_10.json | 1 + site/public/assets/data/faces/brad_smith_1_0.drc | Bin 0 -> 160603 bytes site/public/assets/data/faces/bush_1_0.drc | Bin 0 -> 165255 bytes site/public/assets/data/faces/george_tenet_1_0.drc | Bin 0 -> 156334 bytes .../public/assets/data/faces/john_ashcroft_1_0.drc | Bin 0 -> 167825 bytes site/public/assets/data/faces/macron_1_0.drc | Bin 0 -> 141367 bytes site/public/assets/data/faces/macron_2_0.drc | Bin 0 -> 150209 bytes site/public/assets/data/faces/macron_4_0.drc | Bin 0 -> 148036 bytes site/public/assets/data/faces/may.drc | Bin 0 -> 175998 bytes site/public/assets/data/faces/putin.drc | Bin 0 -> 188140 bytes site/public/assets/data/faces/putin_0.drc | Bin 0 -> 150530 bytes site/public/assets/data/faces/putin_1_0.drc | Bin 0 -> 184203 bytes site/public/assets/data/faces/putin_2_0.drc | Bin 0 -> 168179 bytes site/public/assets/data/faces/putin_3_0.drc | Bin 0 -> 143099 bytes site/public/assets/data/faces/putin_4_0.drc | Bin 0 -> 168568 bytes site/public/assets/data/faces/trudeau_1_0.drc | Bin 0 -> 170508 bytes site/public/assets/data/faces/trudeau_2_0.drc | Bin 0 -> 160676 bytes site/public/assets/data/faces/trudeau_3_0.drc | Bin 0 -> 166457 bytes site/public/assets/data/faces/trudeau_4_0.drc | Bin 0 -> 161956 bytes site/public/assets/data/faces/trudeau_5_0.drc | Bin 0 -> 144156 bytes site/public/assets/data/faces/trump_1_0.drc | Bin 0 -> 148636 bytes site/public/assets/data/faces/trump_2_0.drc | Bin 0 -> 173206 bytes site/public/assets/data/faces/trump_3_0.drc | Bin 0 -> 170969 bytes site/public/assets/data/faces/trump_3_1.drc | Bin 0 -> 124027 bytes site/public/assets/data/faces/trump_4_0.drc | Bin 0 -> 147021 bytes site/public/assets/data/faces/xi.drc | Bin 0 -> 157325 bytes site/public/assets/data/faces/xi_1_0.drc | Bin 0 -> 150777 bytes site/public/assets/data/faces/xi_2_0.drc | Bin 0 -> 155786 bytes site/public/assets/demo/cloud/.gitignore | 1 + site/public/assets/demo/cloud/.npmignore | 4 + site/public/assets/demo/cloud/LICENSE | 21 + site/public/assets/demo/cloud/README.md | 109 ++ site/public/assets/demo/cloud/THREE.TextSprite.js | 1 + site/public/assets/demo/cloud/demo/script.js | 129 ++ site/public/assets/demo/cloud/index.html | 31 + site/public/assets/demo/cloud/package.json | 40 + site/public/assets/demo/cloud/rollup.config.js | 25 + .../assets/demo/cloud/src/getOptimalFontSize.js | 18 + site/public/assets/demo/cloud/src/index.js | 78 ++ site/public/assets/demo/splash/index.html | 58 + site/public/assets/fonts/Roboto_300.eot | Bin 0 -> 17481 bytes site/public/assets/fonts/Roboto_300.svg | 312 +++++ site/public/assets/fonts/Roboto_300.ttf | Bin 0 -> 35468 bytes site/public/assets/fonts/Roboto_300.woff | Bin 0 -> 19916 bytes site/public/assets/fonts/Roboto_300.woff2 | Bin 0 -> 15440 bytes site/public/assets/fonts/Roboto_400.eot | Bin 0 -> 17405 bytes site/public/assets/fonts/Roboto_400.svg | 308 +++++ site/public/assets/fonts/Roboto_400.ttf | Bin 0 -> 35408 bytes site/public/assets/fonts/Roboto_400.woff | Bin 0 -> 19824 bytes site/public/assets/fonts/Roboto_400.woff2 | Bin 0 -> 15344 bytes site/public/assets/fonts/Roboto_500.eot | Bin 0 -> 17596 bytes site/public/assets/fonts/Roboto_500.svg | 305 +++++ site/public/assets/fonts/Roboto_500.ttf | Bin 0 -> 35588 bytes site/public/assets/fonts/Roboto_500.woff | Bin 0 -> 20012 bytes site/public/assets/fonts/Roboto_500.woff2 | Bin 0 -> 15552 bytes site/public/assets/fonts/Roboto_700.eot | Bin 0 -> 17391 bytes site/public/assets/fonts/Roboto_700.svg | 309 +++++ site/public/assets/fonts/Roboto_700.ttf | Bin 0 -> 35236 bytes site/public/assets/fonts/Roboto_700.woff | Bin 0 -> 19888 bytes site/public/assets/fonts/Roboto_700.woff2 | Bin 0 -> 15436 bytes site/public/assets/fonts/Roboto_Mono_300.eot | Bin 0 -> 18064 bytes site/public/assets/fonts/Roboto_Mono_300.svg | 392 ++++++ site/public/assets/fonts/Roboto_Mono_300.ttf | Bin 0 -> 32160 bytes site/public/assets/fonts/Roboto_Mono_300.woff | Bin 0 -> 19884 bytes site/public/assets/fonts/Roboto_Mono_300.woff2 | Bin 0 -> 16380 bytes site/public/assets/fonts/Roboto_Mono_400.eot | Bin 0 -> 17757 bytes site/public/assets/fonts/Roboto_Mono_400.svg | 390 ++++++ site/public/assets/fonts/Roboto_Mono_400.ttf | Bin 0 -> 31052 bytes site/public/assets/fonts/Roboto_Mono_400.woff | Bin 0 -> 19576 bytes site/public/assets/fonts/Roboto_Mono_400.woff2 | Bin 0 -> 16028 bytes site/public/assets/fonts/Roboto_Mono_500.eot | Bin 0 -> 17909 bytes site/public/assets/fonts/Roboto_Mono_500.svg | 387 ++++++ site/public/assets/fonts/Roboto_Mono_500.ttf | Bin 0 -> 31168 bytes site/public/assets/fonts/Roboto_Mono_500.woff | Bin 0 -> 19656 bytes site/public/assets/fonts/Roboto_Mono_500.woff2 | Bin 0 -> 16016 bytes site/public/assets/img/arrow-left-black.png | Bin 0 -> 3336 bytes site/public/assets/img/arrow-left.png | Bin 0 -> 2183 bytes site/public/assets/img/arrow-right-black.png | Bin 0 -> 3380 bytes site/public/assets/img/arrow-right.png | Bin 0 -> 2183 bytes site/public/assets/img/close-black.png | Bin 0 -> 1511 bytes site/public/assets/img/close.png | Bin 0 -> 3738 bytes .../assets/img/favicon/android-icon-144x144.png | Bin 0 -> 1004 bytes .../assets/img/favicon/android-icon-192x192.png | Bin 0 -> 504 bytes .../assets/img/favicon/android-icon-36x36.png | Bin 0 -> 848 bytes .../assets/img/favicon/android-icon-48x48.png | Bin 0 -> 887 bytes .../assets/img/favicon/android-icon-72x72.png | Bin 0 -> 881 bytes .../assets/img/favicon/android-icon-96x96.png | Bin 0 -> 925 bytes .../assets/img/favicon/apple-icon-114x114.png | Bin 0 -> 956 bytes .../assets/img/favicon/apple-icon-120x120.png | Bin 0 -> 962 bytes .../assets/img/favicon/apple-icon-144x144.png | Bin 0 -> 1004 bytes .../assets/img/favicon/apple-icon-152x152.png | Bin 0 -> 1069 bytes .../assets/img/favicon/apple-icon-180x180.png | Bin 0 -> 1112 bytes .../public/assets/img/favicon/apple-icon-57x57.png | Bin 0 -> 859 bytes .../public/assets/img/favicon/apple-icon-60x60.png | Bin 0 -> 859 bytes .../public/assets/img/favicon/apple-icon-72x72.png | Bin 0 -> 881 bytes .../public/assets/img/favicon/apple-icon-76x76.png | Bin 0 -> 871 bytes .../assets/img/favicon/apple-icon-precomposed.png | Bin 0 -> 1076 bytes site/public/assets/img/favicon/apple-icon.png | Bin 0 -> 1076 bytes site/public/assets/img/favicon/browserconfig.xml | 2 + site/public/assets/img/favicon/favicon-16x16.png | Bin 0 -> 779 bytes site/public/assets/img/favicon/favicon-32x32.png | Bin 0 -> 837 bytes site/public/assets/img/favicon/favicon-96x96.png | Bin 0 -> 925 bytes site/public/assets/img/favicon/favicon.ico | Bin 0 -> 1150 bytes site/public/assets/img/favicon/manifest.json | 41 + site/public/assets/img/favicon/ms-icon-144x144.png | Bin 0 -> 1004 bytes site/public/assets/img/favicon/ms-icon-150x150.png | Bin 0 -> 1018 bytes site/public/assets/img/favicon/ms-icon-310x310.png | Bin 0 -> 1825 bytes site/public/assets/img/favicon/ms-icon-70x70.png | Bin 0 -> 878 bytes site/public/assets/img/icon-search.png | Bin 0 -> 1196 bytes site/public/assets/img/icon_camera.svg | 2 + site/public/assets/img/loader.gif | Bin 0 -> 1849 bytes site/public/assets/img/megapixels-share.png | Bin 0 -> 102573 bytes site/public/assets/img/megapixels_logo_black.png | Bin 0 -> 1269 bytes site/public/assets/img/megapixels_logo_black.svg | 58 + site/public/assets/img/megapixels_logo_white.svg | 10 + site/public/assets/img/reddot.png | Bin 0 -> 1102 bytes site/public/assets/js/app/face.js | 254 ++++ site/public/assets/js/app/prototypes.js | 1 + site/public/assets/js/dist/index.js | 88 ++ .../public/assets/js/vendor/draco/draco_decoder.js | 32 + .../assets/js/vendor/draco/draco_decoder.wasm | Bin 0 -> 331539 bytes .../assets/js/vendor/draco/draco_decoder_gltf.js | 31 + .../assets/js/vendor/draco/draco_decoder_gltf.wasm | Bin 0 -> 228970 bytes .../public/assets/js/vendor/draco/draco_encoder.js | 33 + .../assets/js/vendor/draco/draco_wasm_wrapper.js | 119 ++ .../js/vendor/draco/draco_wasm_wrapper_gltf.js | 119 ++ site/public/assets/js/vendor/oktween.js | 159 +++ site/public/assets/js/vendor/three.meshline.js | 486 ++++++++ site/public/assets/js/vendor/three.min.js | 963 +++++++++++++++ site/public/assets/legal/megapixels_license.pdf | Bin 0 -> 42860 bytes site/public/assets/test/face.html | 227 ++++ site/public/datasets/brainwash/index.html | 4 - site/public/datasets/duke_mtmc/index.html | 4 - site/public/datasets/hrt_transgender/index.html | 4 - site/public/datasets/ijb_c/index.html | 4 - site/public/datasets/index.html | 4 - .../datasets/msceleb/assets/notes/index.html | 4 - site/public/datasets/msceleb/index.html | 4 - site/public/datasets/oxford_town_centre/index.html | 4 - site/public/datasets/uccs/assets/notes/index.html | 4 - site/public/datasets/uccs/index.html | 4 - site/public/info/index.html | 4 - site/public/research/00_introduction/index.html | 4 - .../research/01_from_1_to_100_pixels/index.html | 4 - .../research/02_what_computers_can_see/index.html | 4 - site/public/research/index.html | 4 - site/public/test/chart/index.html | 4 - site/public/test/citations/index.html | 4 - site/public/test/csv/index.html | 4 - site/public/test/datasets/index.html | 4 - site/public/test/face_search/index.html | 4 - site/public/test/gallery/index.html | 4 - site/public/test/index.html | 4 - site/public/test/map/index.html | 4 - site/public/test/name_search/index.html | 4 - site/public/test/pie_chart/index.html | 4 - site/templates/layout.html | 4 - 169 files changed, 8801 insertions(+), 124 deletions(-) create mode 100644 site/public/assets/css/applets.css create mode 100644 site/public/assets/css/css.css create mode 100644 site/public/assets/css/fonts.css create mode 100644 site/public/assets/css/leaflet.css create mode 100644 site/public/assets/css/mobile.css create mode 100644 site/public/assets/css/splash.css create mode 100755 site/public/assets/css/tabulator.css create mode 100644 site/public/assets/data/3dlm_0_10.json create mode 100644 site/public/assets/data/faces/brad_smith_1_0.drc create mode 100644 site/public/assets/data/faces/bush_1_0.drc create mode 100644 site/public/assets/data/faces/george_tenet_1_0.drc create mode 100644 site/public/assets/data/faces/john_ashcroft_1_0.drc create mode 100644 site/public/assets/data/faces/macron_1_0.drc create mode 100644 site/public/assets/data/faces/macron_2_0.drc create mode 100644 site/public/assets/data/faces/macron_4_0.drc create mode 100644 site/public/assets/data/faces/may.drc create mode 100644 site/public/assets/data/faces/putin.drc create mode 100644 site/public/assets/data/faces/putin_0.drc create mode 100644 site/public/assets/data/faces/putin_1_0.drc create mode 100644 site/public/assets/data/faces/putin_2_0.drc create mode 100644 site/public/assets/data/faces/putin_3_0.drc create mode 100644 site/public/assets/data/faces/putin_4_0.drc create mode 100644 site/public/assets/data/faces/trudeau_1_0.drc create mode 100644 site/public/assets/data/faces/trudeau_2_0.drc create mode 100644 site/public/assets/data/faces/trudeau_3_0.drc create mode 100644 site/public/assets/data/faces/trudeau_4_0.drc create mode 100644 site/public/assets/data/faces/trudeau_5_0.drc create mode 100644 site/public/assets/data/faces/trump_1_0.drc create mode 100644 site/public/assets/data/faces/trump_2_0.drc create mode 100644 site/public/assets/data/faces/trump_3_0.drc create mode 100644 site/public/assets/data/faces/trump_3_1.drc create mode 100644 site/public/assets/data/faces/trump_4_0.drc create mode 100644 site/public/assets/data/faces/xi.drc create mode 100644 site/public/assets/data/faces/xi_1_0.drc create mode 100644 site/public/assets/data/faces/xi_2_0.drc create mode 100644 site/public/assets/demo/cloud/.gitignore create mode 100644 site/public/assets/demo/cloud/.npmignore create mode 100644 site/public/assets/demo/cloud/LICENSE create mode 100644 site/public/assets/demo/cloud/README.md create mode 100644 site/public/assets/demo/cloud/THREE.TextSprite.js create mode 100644 site/public/assets/demo/cloud/demo/script.js create mode 100644 site/public/assets/demo/cloud/index.html create mode 100644 site/public/assets/demo/cloud/package.json create mode 100644 site/public/assets/demo/cloud/rollup.config.js create mode 100644 site/public/assets/demo/cloud/src/getOptimalFontSize.js create mode 100644 site/public/assets/demo/cloud/src/index.js create mode 100644 site/public/assets/demo/splash/index.html create mode 100644 site/public/assets/fonts/Roboto_300.eot create mode 100644 site/public/assets/fonts/Roboto_300.svg create mode 100644 site/public/assets/fonts/Roboto_300.ttf create mode 100644 site/public/assets/fonts/Roboto_300.woff create mode 100644 site/public/assets/fonts/Roboto_300.woff2 create mode 100644 site/public/assets/fonts/Roboto_400.eot create mode 100644 site/public/assets/fonts/Roboto_400.svg create mode 100644 site/public/assets/fonts/Roboto_400.ttf create mode 100644 site/public/assets/fonts/Roboto_400.woff create mode 100644 site/public/assets/fonts/Roboto_400.woff2 create mode 100644 site/public/assets/fonts/Roboto_500.eot create mode 100644 site/public/assets/fonts/Roboto_500.svg create mode 100644 site/public/assets/fonts/Roboto_500.ttf create mode 100644 site/public/assets/fonts/Roboto_500.woff create mode 100644 site/public/assets/fonts/Roboto_500.woff2 create mode 100644 site/public/assets/fonts/Roboto_700.eot create mode 100644 site/public/assets/fonts/Roboto_700.svg create mode 100644 site/public/assets/fonts/Roboto_700.ttf create mode 100644 site/public/assets/fonts/Roboto_700.woff create mode 100644 site/public/assets/fonts/Roboto_700.woff2 create mode 100644 site/public/assets/fonts/Roboto_Mono_300.eot create mode 100644 site/public/assets/fonts/Roboto_Mono_300.svg create mode 100644 site/public/assets/fonts/Roboto_Mono_300.ttf create mode 100644 site/public/assets/fonts/Roboto_Mono_300.woff create mode 100644 site/public/assets/fonts/Roboto_Mono_300.woff2 create mode 100644 site/public/assets/fonts/Roboto_Mono_400.eot create mode 100644 site/public/assets/fonts/Roboto_Mono_400.svg create mode 100644 site/public/assets/fonts/Roboto_Mono_400.ttf create mode 100644 site/public/assets/fonts/Roboto_Mono_400.woff create mode 100644 site/public/assets/fonts/Roboto_Mono_400.woff2 create mode 100644 site/public/assets/fonts/Roboto_Mono_500.eot create mode 100644 site/public/assets/fonts/Roboto_Mono_500.svg create mode 100644 site/public/assets/fonts/Roboto_Mono_500.ttf create mode 100644 site/public/assets/fonts/Roboto_Mono_500.woff create mode 100644 site/public/assets/fonts/Roboto_Mono_500.woff2 create mode 100644 site/public/assets/img/arrow-left-black.png create mode 100644 site/public/assets/img/arrow-left.png create mode 100644 site/public/assets/img/arrow-right-black.png create mode 100644 site/public/assets/img/arrow-right.png create mode 100644 site/public/assets/img/close-black.png create mode 100644 site/public/assets/img/close.png create mode 100644 site/public/assets/img/favicon/android-icon-144x144.png create mode 100644 site/public/assets/img/favicon/android-icon-192x192.png create mode 100644 site/public/assets/img/favicon/android-icon-36x36.png create mode 100644 site/public/assets/img/favicon/android-icon-48x48.png create mode 100644 site/public/assets/img/favicon/android-icon-72x72.png create mode 100644 site/public/assets/img/favicon/android-icon-96x96.png create mode 100644 site/public/assets/img/favicon/apple-icon-114x114.png create mode 100644 site/public/assets/img/favicon/apple-icon-120x120.png create mode 100644 site/public/assets/img/favicon/apple-icon-144x144.png create mode 100644 site/public/assets/img/favicon/apple-icon-152x152.png create mode 100644 site/public/assets/img/favicon/apple-icon-180x180.png create mode 100644 site/public/assets/img/favicon/apple-icon-57x57.png create mode 100644 site/public/assets/img/favicon/apple-icon-60x60.png create mode 100644 site/public/assets/img/favicon/apple-icon-72x72.png create mode 100644 site/public/assets/img/favicon/apple-icon-76x76.png create mode 100644 site/public/assets/img/favicon/apple-icon-precomposed.png create mode 100644 site/public/assets/img/favicon/apple-icon.png create mode 100644 site/public/assets/img/favicon/browserconfig.xml create mode 100644 site/public/assets/img/favicon/favicon-16x16.png create mode 100644 site/public/assets/img/favicon/favicon-32x32.png create mode 100644 site/public/assets/img/favicon/favicon-96x96.png create mode 100644 site/public/assets/img/favicon/favicon.ico create mode 100644 site/public/assets/img/favicon/manifest.json create mode 100644 site/public/assets/img/favicon/ms-icon-144x144.png create mode 100644 site/public/assets/img/favicon/ms-icon-150x150.png create mode 100644 site/public/assets/img/favicon/ms-icon-310x310.png create mode 100644 site/public/assets/img/favicon/ms-icon-70x70.png create mode 100644 site/public/assets/img/icon-search.png create mode 100644 site/public/assets/img/icon_camera.svg create mode 100644 site/public/assets/img/loader.gif create mode 100644 site/public/assets/img/megapixels-share.png create mode 100644 site/public/assets/img/megapixels_logo_black.png create mode 100644 site/public/assets/img/megapixels_logo_black.svg create mode 100755 site/public/assets/img/megapixels_logo_white.svg create mode 100644 site/public/assets/img/reddot.png create mode 100644 site/public/assets/js/app/face.js create mode 100644 site/public/assets/js/app/prototypes.js create mode 100644 site/public/assets/js/dist/index.js create mode 100644 site/public/assets/js/vendor/draco/draco_decoder.js create mode 100644 site/public/assets/js/vendor/draco/draco_decoder.wasm create mode 100644 site/public/assets/js/vendor/draco/draco_decoder_gltf.js create mode 100644 site/public/assets/js/vendor/draco/draco_decoder_gltf.wasm create mode 100644 site/public/assets/js/vendor/draco/draco_encoder.js create mode 100644 site/public/assets/js/vendor/draco/draco_wasm_wrapper.js create mode 100644 site/public/assets/js/vendor/draco/draco_wasm_wrapper_gltf.js create mode 100644 site/public/assets/js/vendor/oktween.js create mode 100644 site/public/assets/js/vendor/three.meshline.js create mode 100644 site/public/assets/js/vendor/three.min.js create mode 100755 site/public/assets/legal/megapixels_license.pdf create mode 100644 site/public/assets/test/face.html (limited to 'site/public/datasets') diff --git a/site/public/about/assets/LICENSE/index.html b/site/public/about/assets/LICENSE/index.html index 95cc54d7..bfc3d80e 100644 --- a/site/public/about/assets/LICENSE/index.html +++ b/site/public/about/assets/LICENSE/index.html @@ -49,11 +49,7 @@
diff --git a/site/public/about/attribution/index.html b/site/public/about/attribution/index.html index fc3f7a8f..5c3a4ec4 100644 --- a/site/public/about/attribution/index.html +++ b/site/public/about/attribution/index.html @@ -49,11 +49,7 @@
diff --git a/site/public/about/index.html b/site/public/about/index.html index 8635622a..32947b63 100644 --- a/site/public/about/index.html +++ b/site/public/about/index.html @@ -49,11 +49,7 @@
diff --git a/site/public/about/legal/index.html b/site/public/about/legal/index.html index 34bfc008..e3465054 100644 --- a/site/public/about/legal/index.html +++ b/site/public/about/legal/index.html @@ -49,11 +49,7 @@
diff --git a/site/public/about/news/index.html b/site/public/about/news/index.html index 15f8dfde..3dd7c5a2 100644 --- a/site/public/about/news/index.html +++ b/site/public/about/news/index.html @@ -49,11 +49,7 @@
diff --git a/site/public/assets/css/applets.css b/site/public/assets/css/applets.css new file mode 100644 index 00000000..ef9f09e2 --- /dev/null +++ b/site/public/assets/css/applets.css @@ -0,0 +1,246 @@ +/* applets */ + +.applet_container { + min-height: 340px; + clear: left; + margin: 20px auto 40px auto; +} +.applet_container.autosize { + min-height: 0; +} +.applet { + margin-bottom: 60px; + transition: opacity 0.2s cubic-bezier(0,0,1,1); + opacity: 0; +} +.applet.map { + width: 100vw; + height: 50vh; +} +.applet.loaded { + opacity: 1; +} + +.row { + display: flex; + flex-direction: row; + justify-content: flex-start; +} +.q { + width: 100%; + padding: 8px 12px; + font-size: 13pt; + color:#333; +} +.timing { + font-size: 9pt; + padding-top: 10px; +} + +/* search results */ + +.name_search, .face_search { + box-shadow: inset 0 0 40px #000; + background: #111; + padding: 20px 0; + /*background: black;*/ + width: 100%; +} +.name_search { + margin-top: 0px; + margin-bottom: 20px; +} +.face_search .applet { + max-width: 640px; + margin: 0 auto; +} +.name_search .applet { + max-width: 640px; + margin: 0 auto; +} +.results { + margin-top: 10px; + padding-bottom: 10px; + display: flex; + flex-direction: row; + flex-wrap: wrap; +} +.results > div { + width: 200px; + margin-left: 20px; + margin-bottom: 40px; + font-size: 8pt; + background: #000; + padding: 5px; + font-weight: 500; +} +.results > div img { + display: block; + margin-bottom: 4px; + width: 190px; + height: 190px; + background: rgba(255,255,255,0.05); +} +.results > div:nth-child(3n+1) { + margin-left: 0; +} +.applet h2 { + font-size: 20pt; +} +.query h2 { + margin-top: 0; padding-top: 0; +} +.img { + position: relative; +} +.img .bbox { + position: absolute; + color: rgba(255,255,255,1); + background: rgba(255,255,255,0.05); + border: 1px solid; +} +.cta { + padding-left: 20px; + font-size: 10pt; +} +.cta ol { + margin: 0; + padding: 0 0 20px 20px; +} + +.searchContainer { + padding-top: 20px; +} + +.uploadContainer > div { + position: relative; + width: 300px; + height: 300px; + display: flex; + align-items: center; + justify-content: center; + background: #333; + border: 3px dashed #fff; + border-radius: 10px; + opacity: 0.3; + transition: opacity 0.2s cubic-bezier(0,0,1,1); +} +.uploadContainer.active, +.desktop .uploadContainer > div:hover { + opacity: 1; +} +.uploadContainer input { + position: absolute; + top: 0; left: 0; + width: 100%; height: 100%; + opacity: 0; + cursor: pointer; +} +.uploadContainer img { + max-width: 40px; +} + +/* map */ + +.map, .map .applet { + height: 500px; +} +.map { + margin-bottom: 20px; +} +.map_cover { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + cursor: pointer; + background: rgba(0,0,0,0.8); + z-index: 9998; /* site header is 9999 */ + display: flex; + justify-content: center; + align-items: center; + font-size: 36px; + transition: opacity 0.4s cubic-bezier(0,0,1,1); + opacity: 1; +} +.desktop .map_cover { + opacity: 0; +} +.desktop .map_cover:hover { + opacity: 1; +} +.leaflet-popup-content-wrapper { + max-height: 230px; + overflow-y: auto; +} +.leaflet-popup-content a { + color: #0078A8; + border-bottom: 1px solid rgba(0, 128, 160, 0.4); +} +.desktop .leaflet-popup-content a:hover { + color: #0078A8; + border-bottom: 1px solid rgba(0, 128, 160, 0.9); +} + +/* tabulator */ + +.tabulator { + font-family: 'Roboto', sans-serif; +} +.tabulator-row { + transition: background-color 100ms cubic-bezier(0,0,1,1); + background-color: rgba(255,255,255,0.0); +} +.desktop .tabulator-row:hover { + background-color: rgba(255,255,255,0.2); +} +.tabulator-row.tabulator-row-odd { + background-color: rgba(255,255,255,0.05); +} +.tabulator-row.tabulator-row-even { + background-color: rgba(255,255,255,0.1); +} + +/* analysis results */ + +.analysisContainer .results div { + width: 256px; + text-align: center; + padding: 10px; + margin: 10px; +} +.analysisContainer .results div img { + max-width: 100%; +} + +/* chart */ + +.piechart .chart { + display: flex; + flex-direction: row; + justify-content: space-around; + align-items: flex-start; +} +.piechart .chart > div { + width: 50%; + display: flex; + flex-direction: column; + justify-content: space-between; + align-items: center; +} +.piechart .chart .c3-chart-arc text { + fill: #fff; +} +.piechart .chart .c3-chart-arc.c3-target-Academic text { + fill: #333; +} +.piechart .c3 path, .piechart .c3 line { + stroke: rgba(64,64,64,0.3); +} +.piechart .chartCaption { + color: #888; + font-size: 12px; + font-family: 'Roboto', sans-serif; + font-weight: 400; +} diff --git a/site/public/assets/css/css.css b/site/public/assets/css/css.css new file mode 100644 index 00000000..f59556f8 --- /dev/null +++ b/site/public/assets/css/css.css @@ -0,0 +1,1270 @@ +* { box-sizing: border-box; outline: 0; } +@media (prefers-reduced-motion: reduce) { + * { + animation-duration: 0.001s !important; + transition-duration: 0.001s !important; + } +} +html, body { + margin: 0; + padding: 0; + width: 100%; + min-height: 100%; + /*font-family: 'Roboto Mono', sans-serif;*/ + font-family: 'Roboto', sans-serif; + color: #eee; + overflow-x: hidden; +} +html { + background: #181818; +} +a { outline: none; } +img { border: 0; } +.content { + opacity: 0; + transition: opacity 0.1s cubic-bezier(0,1,1,1); +} +html.desktop .content, +html.mobile .content { + opacity: 1; + margin-top: 50px; +} +html.mobile .content{ +} + +/* header */ + +header { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 70px; + z-index: 9999; + background: #1e1e1e; + display: flex; + flex-direction: row; + align-items: center; + justify-content: space-between; + box-shadow: 0 0 4px rgba(0,0,0,0.3); +} +header .slogan { + display: flex; + flex-direction: row; + align-items: center; + /*padding-left: 56px;*/ + padding-left: 36px; + text-decoration: none; +} +header .logo { + background-image: url(../img/megapixels_logo_white.svg); + background-size: contain; + background-repeat: no-repeat; + margin-top: 0px; + margin-right: 8px; + width: 20px; + height: 20px; + flex: 0 0 20px; +} +header .site_name { + font-family: 'Roboto', sans-serif; + font-weight: 600; + text-transform: uppercase;; + color: #fff; + font-size: 11px; + line-height: 11px; + letter-spacing: 3px; +} +header .page_name { + font-size: 22px; + font-weight: 400; + color: #eee; + opacity: 0; + transition: 0.3s opacity cubic-bezier(0,0,1,1); + margin-left:18px; +} +.scrolled header .page_name { + opacity: 1; +} +header .links { + font-size: 18px; + line-height: 18px; +} +.home header .links a { + background-color: rgba(24,24,24,0.9); + border-bottom: 2px solid transparent; + padding: 3px; +} +header .sub { + margin-left: 4px; + margin-top: 2px; + transition: color 0.1s cubic-bezier(0,0,1,1); +} +.sub { + color: #666; + font-size: 10pt; +} +.desktop header .slogan:hover .site_name { + color: #fff; +} +.desktop header .slogan:hover .sub { + color: #666; +} +header .links { + display: flex; + flex-direction: row; + font-family: 'Roboto Mono', monospace; +} +header .links span, +header .links a { + display: block; + color: #dedede; + text-decoration: none; + text-transform: uppercase; + margin-right: 32px; + transition: color 0.1s cubic-bezier(0,0,1,1), border-color 0.05s cubic-bezier(0,0,1,1); + border-bottom: 1px solid rgba(255,255,255,0); + padding-bottom: 3px; + padding-top: 2px; + font-weight: 400; +} +header .links a.active { + color: #fff; + border-bottom: 2px solid rgba(255,255,255,1); +} +.desktop header .links a:hover { + color: #fff; + border-bottom: 2px solid rgba(255,255,255,1); +} +.desktop header .links a.active:hover { + color: #fff; + border-bottom: 2px solid rgba(255,255,255,1); +} +.home header .links a { + margin-right: 26px; + margin-left: 0; +} +.home header .links a:last-child { + margin-right: 29px; +} +/* footer */ + +footer { + width: 100%; + background: #000; + display: flex; + flex-direction: row; + justify-content: space-between; + color: #666; + font-size: 13px; + /*line-height: 17px;*/ + padding: 15px; + font-family: "Roboto", sans-serif; +} +footer > div { + display: flex; + flex-direction: row; +} +footer > div:nth-child(1) { + padding-left: 75px; +} +footer > div:nth-child(2) { + padding-right: 75px; +} +footer a { + display: inline-block; + color: #aaa; + transition: all 0.1s cubic-bezier(0,0,1,1); + padding-bottom: 1px; + text-decoration: none; +} +.desktop footer a:hover { + color: #fff; + border-bottom:1px solid #999; +} +footer ul { + margin: 0; + display: flex; + flex-direction: row; + color: #888; + font-size: 11px; +} +footer ul li { + margin-bottom: 0; + font-size: 11px; + font-weight: 400; + color:#666; +} +footer ul li:last-child { + margin-right: 0px; +} +footer ul:first-child li { + margin-right: 8px; +} +footer ul:last-child li { + margin-left: 8px; +} +.desktop footer a:hover { + color: #fff; +} + +/* headings */ + +h1 { + color: #eee; + font-weight: 400; + font-size: 34pt; + margin: 20px auto 10px auto; + padding: 0; + transition: color 0.1s cubic-bezier(0,0,1,1); + font-family: 'Roboto Mono', monospace; +} +h2 { + color: #eee; + font-weight: 400; + font-size: 34px; + line-height: 43px; + margin: 20px auto 20px auto; + padding: 0; + transition: color 0.1s cubic-bezier(0,0,1,1); + font-family: 'Roboto Mono', monospace; +} +h3 { + margin: 20px auto 10px auto; + font-size: 28px; + font-weight: 400; + transition: color 0.1s cubic-bezier(0,0,1,1); + font-family: 'Roboto Mono', monospace; +} +h4 { + margin: 6px auto 10px auto; + padding: 0; + font-size: 18pt; + font-weight: 400; + transition: color 0.1s cubic-bezier(0,0,1,1); + font-family: 'Roboto Mono', monospace; +} +h5 { + margin: 6px auto 10px auto; + padding: 0; + font-size: 14pt; + font-weight: 400; + transition: color 0.1s cubic-bezier(0,0,1,1); + font-family: 'Roboto Mono', monospace; +} +.content h3 a { + color: #888; + text-decoration: none; +} +.desktop .content h3 a:hover { + color: #fff; + text-decoration: underline; +} +.right-sidebar h3 { + margin: 0; + padding: 0 0 10px 0; + font-family: 'Roboto Mono'; + font-weight: 400; + font-size: 13px; + text-transform: uppercase; + letter-spacing: 2px; +} +.right-sidebar ul li a { + border-bottom: 0; +} +th, .gray { + font-family: 'Roboto', monospace; + font-weight: 500; + text-transform: uppercase; + letter-spacing: .15rem; + color: #777; +} +th, .gray { + font-size: 9pt; +} + +/* splash teaser */ + +.teaser { + position: absolute; + top: 50%; + left: 100px; + transform: translateY(-50%); +} +.teaser b { + font-family: 'Roboto', sans-serif; + font-weight: 500; + color: #fff; + font-size: 40px; + background: #181818; + box-shadow: -3px -3px #181818, 3px -3px #181818, -3px 3px #181818, 3px 3px #181818; + box-decoration-break: clone; +} +.teaser tt { + font-family: 'Roboto Mono', monospace; + color: #ddd; + font-size: 16px; + line-height: 1.7; + display: block; + max-width: 340px; + margin: 10px 0 30px 0; +} +.teaser tt span { + background: #181818; + box-shadow: -3px -3px #181818, 3px -3px #181818, -3px 3px #181818, 3px 3px #181818; + box-decoration-break: clone; +} +.teaser .btn { + color: #ddd; + background: #444; + padding: 14px 20px; + font-size: 16px; + border-radius: 4px; + text-decoration: none; + box-shadow: 0 1px 2px #181818; + transition: all 0.1s; +} +.desktop .teaser .btn:hover { + color: #fff; + background: #666; +} + +/* content */ + +.content { + padding-top: 20px; + padding-bottom: 100px; + min-height: calc(100vh - 55px); + line-height: 1.8; +} +section { + width: 960px; + margin: 0 auto; +} +.home section { + width: 960px; +} +.content .first_paragraph { + font-weight: 300; + font-size: 16pt; + color: #ddd; + margin-bottom: 20px; + margin-top: 30px; + line-height: 36px; +} +section p { + margin: 10px auto 20px auto; + line-height: 1.9rem; + font-size: 17px; + font-weight: 400; + color: #cdcdcd; +} +section ul { + margin: 10px auto 20px auto; + max-width: 720px; +} +section h1, section h2, section h3, section h4, section h5, section h6, section p{ + max-width: 720px; +} + +.content-dataset section:nth-child(2) p:first-child{ + font-size:19px; + color:red; +} +p.subp{ + font-size: 14px; +} +.content a { + color: #dedede; + text-decoration: none; + border-bottom: 2px solid #666; + padding-bottom: 1px; + transition: color 0.1s cubic-bezier(0,0,1,1); +} +.desktop .content a:hover { + color: #fff; + border-bottom: 2px solid #ccc; +} + +/* top of post metadata */ + +.meta { + display: flex; + flex-direction: row; + justify-content: flex-start; + align-items: flex-start; + font-size: 12px; + color: #ccc; + margin-bottom: 20px; + font-family: 'Roboto', sans-serif; + margin-right: 20px; + line-height: 17px +} +.meta .gray { + font-size: 9pt; + padding-bottom: 5px; + line-height: 14px +} +.mobile .meta .gray { + font-size: 10px; + padding-bottom: 0px; +} +.right-sidebar { + float: right; + width: 200px; + margin: 0px 20px 20px 20px; + padding-top: 12px; + padding-left: 20px; + border-left: 1px solid #333; + font-family: 'Roboto'; + font-size: 14px; + font-weight: 400; +} +.left-sidebar { + float: left; + width: 200px; + padding-top: 10px; + padding-right: 20px; + /*margin-right: 20px;*/ + margin-bottom: 10px; + /*border-right: 1px solid #444;*/ + font-family: 'Roboto'; + font-size: 14px; + font-weight: 400; + clear:left; +} +.left-sidebar .meta, .right-sidebar .meta { + flex-direction: column; +} +.mobile .left-sidebar .meta, .right-sidebar .meta { + display: inline-block; + border-bottom: 1px solid #333; + padding:10px 10px 10px 0; + margin: 0 4px 4px 0; + color: #bbb; +} +.right-sidebar ul { + margin-bottom: 10px; + color: #aaa; +} +.left-sidebar ul { + margin-bottom: 10px; + color: #aaa; +} +.right-sidebar ul:first-child a { + text-decoration: none; + border-bottom: 1px solid; +} +.left-sidebar ul:first-child a { + text-decoration: none; + border-bottom: 1px solid; +} +.left-sidebar a, .right-sidebar a { + border-bottom: 1px solid #666; +} +.desktop .content .left-sidebar a:hover, +.desktop .content .right-sidebar a:hover { + border-bottom: 1px solid #ccc; +} + +/* lists */ + +ul { + list-style-type: none; + margin: 0 0 30px 0; + padding: 0; +} +ul li { + margin-bottom: 8px; + color: #dedede; + font-weight: 400; + font-size: 14px; +} + +/* misc formatting */ + +code { + font-family: 'Roboto Mono', monospace; + font-size: 9pt; + padding: 2px 4px; + background: rgba(255,255,255,0.1); +} +pre { + margin: 0 auto 20px auto; + max-width: 720px; + border: 1px solid #666; + border-radius: 2px; + padding: 10px; + display: block; + background: #333; + overflow: auto +} +pre code { + display: block; + max-height: 400px; + max-width: 960px; + overflow: scroll; + padding: 4px 10px; +} +table { + margin-bottom: 40px; +} +table thead{ + text-align: left; +} +table, tr, td, th { + border: none; + border-collapse:collapse; +} +.chart table tr{ + width: auto; +} +table tr{ + display:table; + table-layout: fixed; + width:100%; +} +table td, table th{ + padding:10px; + +} +table tr td{ + font-size:12px; +} +table tbody tr:nth-child(odd){ + background-color:#292929; +} +table tbody tr:nth-child(even){ + background-color:#333; +} + +hr { + height: 1px; + background: #888; + border: 0; + width: 80px; +} +hr.supp{ + width:100%; + margin:70px 0 30px 0; +} +blockquote { + margin: 0 auto; + max-width: 720px; + padding: 0 0 0 10px; + border-left: 2px solid #555; +} + +/* Buttons */ + +.citation-opts { +} +.citation-opts li{ + display: inline-block; + margin-right:10px; +} +.desktop .content a.btn{ + display: inline-block; + background: #333; + padding: 6px 10px; + font-size: 10px; + border-radius: 6px; + font-weight: 400; + border:0px; +} +.desktop .content a.btn:hover{ + background: #444; + border:0px; +} + +/* footnotes */ + +.footnotes hr { + display: none; +} +ul.footnotes { + max-width: 720px; + margin: 0 auto; + font-size: 12px; +} +ul.footnotes li { + font-size: 12px; + list-style-type: none; + margin-bottom: 12px; +} +ul.footnotes p { + font-size: 12px; +} +.footnotes ol:before { + content: 'Footnotes'; + margin: 0 0 10px -40px; + padding-bottom: 0; + display: block; + font-family: 'Roboto Mono', monospace; + font-weight: 400; + text-transform: uppercase; + color: #666; + font-size: 11pt; +} + +/* images */ + +section img { + max-width: 100%; + display: block; + margin: 0 auto; +} +.image img { + cursor: pointer; +} +section .image { + margin-bottom: 20px; +} +section.images { + display: flex; + flex-direction: row; + align-items: flex-start; + justify-content: center; + clear: both; +} +.image:only-child { + width: 100%; +} +.image:first-child { + margin-left: 0; + /*margin-top:10px;*/ +} +.image:nth-child(2), +.image:nth-child(3) { + margin-left: 40px; +} +.image:nth-child(4) { + margin-left: 20px; +} +.image:first-child:nth-last-child(2), +.image:first-child:nth-last-child(2) ~ .image { + width: 300px; +} +.image:first-child:nth-last-child(3), +.image:first-child:nth-last-child(3) ~ .image { + width: 186px; +} +.image:first-child:nth-last-child(4) ~ .image { + width: 100px; +} +section.wide { + width: 960px; +} +section.wide .image { + max-width: 960px; +} +section.fullwidth { + width: 100%; +} +section.fullwidth .image { + max-width: 100%; +} +.image .caption{ + text-align: center; +} +.image .caption.intro-caption{ + text-align: center; +} +.caption { + text-align: center; + font-size: 10pt; + color: #999; + max-width: 960px; + margin: 10px auto 10px auto; + font-family: 'Roboto'; +} +.caption a { + color: #ccc; + border: 0; +} +.desktop .caption a:hover { + color: #fff; + border: 0; +} + + + +.sideimage { + margin: 0px 0 40px 0; + display: flex; + flex-direction: row; + justify-content: flex-start; + align-items: flex-start; +} +.sideimage p{ + margin-top:0px; + padding-top:0px; + font-size:14px; +} +.sideimage strong{ + display: block; + font-size:26px; + line-height: 26px; + font-weight: 400; + font-family: 'Roboto'; + margin-bottom: 16px; +} +.sideimage img { + margin-right: 40px; + width: 200px; + height: 200px; +} + +/* blog index */ + +.research_index { + margin-top: 40px; +} +.research_index a { + text-decoration: none; +} +.research_index h1 { + margin-top: 20px; + text-decoration: underline; +} +.desktop .research_index section:hover h1 { + color: #fff; +} +.research_index section:hover h2 { + color: #ddd; +} + +/* home page */ + +.hero { + width: 100%; + background: black; + background: linear-gradient(#000,#222); + height: 50vw; + max-height: 70vh; +} +.hero .inner { + position: relative; + width: 100%; + max-width: 1200px; + height: 100%; + display: flex; + align-items: center; + margin: 0 auto; +} +#face_container { + pointer-events: none; + position: absolute; + width: 66vw; + height: 50vw; + max-height: 70vh; + top: 0; + right: -16vw; + z-index: 0; + text-align: center; + perspective: 500px; + perspective-origin: 50% 80%; +} +.currentFace { + position: absolute; + bottom: 50px; + width: 100%; + left: 0; + text-align: center; + font-size: 26px; +} +.intro { + max-width: 960px; + padding: 75px 0 75px 10px; + z-index: 1; +} +.intro .headline { + font-family: 'Roboto Mono', monospace; + font-size: 24pt; + line-height: 40pt; +} +.intro .buttons { + margin: 40px 0; +} +.intro button { + font-family: 'Roboto', sans-serif; + padding: 15px 20px; + border-radius: 8px; + border: 1px solid transparent; + cursor: pointer; + font-size: 12pt; + margin-right: 10px; + transition: color 0.1s cubic-bezier(0,0,1,1), background-color 0.1s cubic-bezier(0,0,1,1); +} +.intro button.normal { + background: #191919; + border-color: #444; + color: #ddd; +} +.intro button.important { + background: #444; + border-color: #444; + color: #ddd; +} +.desktop .intro button:hover { + background: #666; + border-color: #666; + color: #fff; +} +.intro .under { + font-size: 12px; + color: #888; +} +.intro .under a { + color: #bbb; +} +.desktop .intro .under a:hover { + color: #fff; +} +.dataset-intro h2 { + margin-top: 40px; +} +.content .dataset-intro .first_paragraph { + margin-top: 10px; + font-size: 18px; +} + +/* intro - list of datasets */ + +.dataset-heading { + /*background: #000;*/ + width: 100%; + padding: 0 25px; +} +.dataset-heading p{ + max-width: none; +} +.dataset-heading h1{ + max-width: none; +} +.dataset-list { + display: flex; + flex-direction: row; + flex-wrap: wrap; + margin: 20px 0 0 0; +} +.dataset-list a { + text-decoration: none; + transition: border 0.1s cubic-bezier(0,0,1,1); + margin: 0 11px 22px 0; + border: 1px solid #333; + border-radius: 4px; +} +.dataset-list .dataset { + width: 300px; + padding: 12px; + color: white; + font-weight: 400; + font-family: 'Roboto'; + position: relative; +} +.dataset-list .dataset-image { + background-size: cover; + width: auto; + height: 178px; +} +.desktop .content .dataset-list a { + border: 1px solid #333; + +} +.desktop .dataset-list a:hover { + border: 1px solid #666; +} +.dataset-list .fields { + font-size: 12px; + color: #ccc; +} +.dataset-list .dataset .title{ + font-size: 16px; + line-height: 20px; + margin-bottom: 4px; + font-weight: 400; + display: block; +} +.dataset-list .fields div { + display: block; +} +.dataset-list .sort-options { + margin: 0; + padding: 0; +} +.dataset-list .sort-options:before { + content: 'Browse list by:'; + opacity: 0.7; + display: block; + padding-bottom: 10px; +} +.dataset-list .sort-options li { + display: inline-block; + margin: 0; + cursor: pointer; + margin-right: 10px; + transition: background 0.2s; + background: #555; + color: #fff; + padding: 7px 11px; + border-radius: 4px; + font-weight: 400; + font-size: 14px; + cursor: pointer; + user-select: none; + -moz-user-select: none; + -khtml-user-select: none; + -webkit-user-select: none; + -o-user-select: none; +} +.dataset-list .sort-options li:last-child { + margin-right:0; +} +.dataset-list .sort-options li.active { + background: #fff; + color: #000; +} +.desktop .dataset-list .sort-options li:hover { + background: #888; +} +.desktop .dataset-list .sort-options li.active:hover { + background: #fff; +} +.dataset_list .applet { + margin-bottom: 15px; +} + + + +/* intro section for datasets */ + +section.intro_section { + font-family: 'Roboto Mono'; + width: 100%; + background-size: cover; + background-position: center left; + /*padding: 50px 0;*/ + min-height: 40vh; + display: flex; + justify-content: center; + align-items: center; + background-color: #111111; + margin-bottom: 20px; + padding: 0; +} +.intro_section .inner { + max-width: 960px; + margin: 3rem auto; +} +.intro_section .hero_desc { + font-size: 38px; + line-height: 60px; + margin-bottom: 30px; + color: #ddd; + font-weight: 400; +} +.mobile .intro_section .hero_desc{ + font-size: 16px; + line-height: 32px; + margin-bottom: 20px; +} +.intro_section .hero_desc .dataset-name{ + color:#fff; +} +.intro_section .hero_subdesc { + font-size: 17px; + line-height: 36px; + max-width: 80%; + font-weight: 400; + color: #ddd; +} +.mobile .intro_section .hero_subdesc { + font-size: 14px; + line-height: 28px; +} +.intro_section .hero_desc .bgpad { + box-shadow: -10px -10px #181818, 10px -10px #181818, 10px 10px #181818, -10px 10px #181818; + background: #181818; +} +.intro_section .hero_subdesc .bgpad { + box-shadow: -10px -10px #181818, 10px -10px #181818, 10px 10px #181818, -10px 10px #181818; + background: #181818; +} +.mobile .intro_section .hero_desc .bgpad { + box-shadow: -6px -6px #181818, 6px -6px #181818, 6px 6px #181818, -6px 6px #181818; + background: #181818; +} +.mobile .intro_section .hero_subdesc .bgpad { + box-shadow: -6px -6px #181818, 6px -6px #181818, 6px 6px #181818, -6px 6px #181818; + background: #181818; +} + + +.firefox .intro_section div > span { + box-decoration-break: clone; +} + +/* ----------------------------------------------------- +page-specific formatting +----------------------------------------------------- */ + +/* Dataset */ + +.leaflet-container{ + margin-bottom: 10px +} + +.hr-wave-holder { + /* Clip edges, as some of the lines don't terminate nicely. */ + overflow: hidden; + position: relative; + width: 100%; + height: 50px; + margin-top:50px; +} + +.hr-wave-line1 { + background: linear-gradient(45deg, transparent, transparent 49%, #fff 49%, transparent 51%); +} +.hr-wave-line2 { + background: linear-gradient(-45deg, transparent, transparent 49%, #fff 49%, transparent 51%); +} +.hr-wave-line { + background-size: 20px 20px; + position: absolute; + width: 100%; + height: 10px; +} + + +/* map */ + +ul.map-legend{ + display: inline-block; + margin: 0; + font-size: 14px; +} +ul.map-legend li { + margin-right: 10px; + padding-top: 4px; + display: inline-block; + cursor: pointer; +} +.desktop ul.map-legend li:hover { + text-decoration: underline; +} +ul.map-legend li:before { + content: ''; + display: inline-block; + width: 10px; + height: 10px; + margin-right: 6px; +} +ul.map-legend li.active { + text-decoration: underline; + color: #fff; +} +ul.map-legend li.edu:before { + background-color: #f2f293; +} +ul.map-legend li.com:before { + background-color: #3264f6; +} +ul.map-legend li.gov:before { + background-color: #f30000; +} +ul.map-legend li.source:before { + content: none; + display: inline-block; + width: 0px; + margin-right: 10px; +} + +/* about */ +.desktop a.ahrefmoz{ + color:#DE5825; +} +.desktop a.ahrefmoz:hover{ + color:#EF6D3B; +} + +.content-about { + color: #fff; +} +.content-about p { + font-size: 16px; +} +.content-about ul{ + font-size: 14px; + font-weight: 300; +} +.content-about section:first-of-type > p:first-of-type { + font-size: 22px; + line-height: 40px; +} +.content-about .about-menu ul li { + display: inline-block; + font-size: 14px; + font-weight: 400; + text-transform: uppercase; + margin-right: 15px; + font-family: 'Roboto'; +} +.content-about .about-menu ul li a { + border-bottom: 0; + color: #aaa; +} + +.content-about .about-menu ul li a.current { + border-bottom: 1px solid #ddd; + color: #ddd; +} + +/* columns */ + +.columns { + display: flex; + flex-direction: row; + justify-content: flex-start; +} +.content-about .columns .column{ + /* on the about page use padding and bg color */ + background: #202020; + padding: 20px; +} +.columns .column { + font-family: Roboto, sans-serif; + font-weight: 400; + margin: 10px; +} +.columns .column:first-of-type { + margin-left: 0; +} +.columns-2 .column { + width: 50%; +} +.columns-3 .column { + width: 33%; +} +.columns-4 .column { + width: 25%; +} + +/* about page */ + + +.flex-container { + padding: 0; + margin: 0; + list-style: none; + + display: -webkit-box; + display: -moz-box; + display: -ms-flexbox; + display: -webkit-flex; + display: flex; + + -webkit-flex-flow: row wrap; + justify-content: space-around; +} + +.content-about .team-photos-container{ + margin:40px 0; +} +.content-about .team-member { + height: auto; + margin-top: 10px; + color: white; + width: 400px; + font-weight: bold; + flex-grow: 1; + margin:0 40px 0 0; + padding:20px; + border-radius:6px; + background: #202020; +} +.content-about .team-member&:last-child{ + margin:0 0 0 40px; +} +.content-about .team-member p{ + font-size:16px; +} +.content-about .team-member img{ + margin:0; + display: block; +} +.content-about .team-member h3{ + font-size:20px; +} + + + +/* footnotes */ + +a.footnote { + font-size: 9px; + line-height: 0px; + position: relative; + /*display: inline-block;*/ + bottom: 7px; + text-decoration: none; + color: #ff8; + border: 0; + left: -1px; + transition-duration: 0s; +} +a.footnote_shim { + /*display: inline-block;*/ + width: 1px; height: 1px; + overflow: hidden; + position: relative; + top: -90px; + visibility: hidden; +} +.right-sidebar a.footnote { + bottom: 8px; +} +.desktop a.footnote:hover { + /*background-color: #ff8;*/ + color: #fff; + border: 0; +} +.backlinks { + margin-right: 10px; +} +.content .backlinks a { + color: #ff8; + font-size: 10px; + text-decoration: none; + border: 0; + font-weight: bold; + position: relative; + bottom: 5px; + margin-right: 2px; +} +.content .footnotes .backlinks a { + bottom: 3px; +} +li p { + margin: 0; padding: 0; + display: inline; +} + +/* citation browser */ + +.citationHeader { + max-width: 720px; + margin: 10px auto; + padding-bottom: 10px +} +.download-btn { + display: inline-block; + font-size: 13px; + color: #ddd; + cursor: pointer; + background: #333; + padding: 8px 10px; + border-radius: 5px; + transition: all 0.1s; +} diff --git a/site/public/assets/css/fonts.css b/site/public/assets/css/fonts.css new file mode 100644 index 00000000..8db01fbd --- /dev/null +++ b/site/public/assets/css/fonts.css @@ -0,0 +1,41 @@ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 300; + src: url("../fonts/Roboto_300.eot?#iefix") format("embedded-opentype"), url("../fonts/Roboto_300.woff") format("woff"), url("../fonts/Roboto_300.woff2") format("woff2"), url("../fonts/Roboto_300.svg#Roboto") format("svg"), url("../fonts/Roboto_300.ttf") format("truetype"); +} + +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 400; + src: url("../fonts/Roboto_400.eot?#iefix") format("embedded-opentype"), url("../fonts/Roboto_400.woff") format("woff"), url("../fonts/Roboto_400.woff2") format("woff2"), url("../fonts/Roboto_400.svg#Roboto") format("svg"), url("../fonts/Roboto_400.ttf") format("truetype"); +} + +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 500; + src: url("../fonts/Roboto_500.eot?#iefix") format("embedded-opentype"), url("../fonts/Roboto_500.woff") format("woff"), url("../fonts/Roboto_500.woff2") format("woff2"), url("../fonts/Roboto_500.svg#Roboto") format("svg"), url("../fonts/Roboto_500.ttf") format("truetype"); +} + +@font-face { + font-family: 'Roboto Mono'; + font-style: normal; + font-weight: 300; + src: url("../fonts/Roboto_Mono_300.eot?#iefix") format("embedded-opentype"), url("../fonts/Roboto_Mono_300.woff") format("woff"), url("../fonts/Roboto_Mono_300.woff2") format("woff2"), url("../fonts/Roboto_Mono_300.svg#RobotoMono") format("svg"), url("../fonts/Roboto_Mono_300.ttf") format("truetype"); +} + +@font-face { + font-family: 'Roboto Mono'; + font-style: normal; + font-weight: 400; + src: url("../fonts/Roboto_Mono_400.eot?#iefix") format("embedded-opentype"), url("../fonts/Roboto_Mono_400.woff") format("woff"), url("../fonts/Roboto_Mono_400.woff2") format("woff2"), url("../fonts/Roboto_Mono_400.svg#RobotoMono") format("svg"), url("../fonts/Roboto_Mono_400.ttf") format("truetype"); +} + +@font-face { + font-family: 'Roboto Mono'; + font-style: normal; + font-weight: 500; + src: local("Roboto-Mono Medium"), local("RobotoMono-Medium"), url("../fonts/Roboto_Mono_500.eot?#iefix") format("embedded-opentype"), url("../fonts/Roboto_Mono_500.woff") format("woff"), url("../fonts/Roboto_Mono_500.woff2") format("woff2"), url("../fonts/Roboto_Mono_500.svg#RobotoMono") format("svg"), url("../fonts/Roboto_Mono_500.ttf") format("truetype"); +} diff --git a/site/public/assets/css/leaflet.css b/site/public/assets/css/leaflet.css new file mode 100644 index 00000000..a0932d57 --- /dev/null +++ b/site/public/assets/css/leaflet.css @@ -0,0 +1,635 @@ +/* required styles */ + +.leaflet-pane, +.leaflet-tile, +.leaflet-marker-icon, +.leaflet-marker-shadow, +.leaflet-tile-container, +.leaflet-pane > svg, +.leaflet-pane > canvas, +.leaflet-zoom-box, +.leaflet-image-layer, +.leaflet-layer { + position: absolute; + left: 0; + top: 0; + } +.leaflet-container { + overflow: hidden; + } +.leaflet-tile, +.leaflet-marker-icon, +.leaflet-marker-shadow { + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; + -webkit-user-drag: none; + } +/* Safari renders non-retina tile on retina better with this, but Chrome is worse */ +.leaflet-safari .leaflet-tile { + image-rendering: -webkit-optimize-contrast; + } +/* hack that prevents hw layers "stretching" when loading new tiles */ +.leaflet-safari .leaflet-tile-container { + width: 1600px; + height: 1600px; + -webkit-transform-origin: 0 0; + } +.leaflet-marker-icon, +.leaflet-marker-shadow { + display: block; + } +/* .leaflet-container svg: reset svg max-width decleration shipped in Joomla! (joomla.org) 3.x */ +/* .leaflet-container img: map is broken in FF if you have max-width: 100% on tiles */ +.leaflet-container .leaflet-overlay-pane svg, +.leaflet-container .leaflet-marker-pane img, +.leaflet-container .leaflet-shadow-pane img, +.leaflet-container .leaflet-tile-pane img, +.leaflet-container img.leaflet-image-layer, +.leaflet-container .leaflet-tile { + max-width: none !important; + max-height: none !important; + } + +.leaflet-container.leaflet-touch-zoom { + -ms-touch-action: pan-x pan-y; + touch-action: pan-x pan-y; + } +.leaflet-container.leaflet-touch-drag { + -ms-touch-action: pinch-zoom; + /* Fallback for FF which doesn't support pinch-zoom */ + touch-action: none; + touch-action: pinch-zoom; +} +.leaflet-container.leaflet-touch-drag.leaflet-touch-zoom { + -ms-touch-action: none; + touch-action: none; +} +.leaflet-container { + -webkit-tap-highlight-color: transparent; +} +.leaflet-container a { + -webkit-tap-highlight-color: rgba(51, 181, 229, 0.4); +} +.leaflet-tile { + filter: inherit; + visibility: hidden; + } +.leaflet-tile-loaded { + visibility: inherit; + } +.leaflet-zoom-box { + width: 0; + height: 0; + -moz-box-sizing: border-box; + box-sizing: border-box; + z-index: 800; + } +/* workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=888319 */ +.leaflet-overlay-pane svg { + -moz-user-select: none; + } + +.leaflet-pane { z-index: 400; } + +.leaflet-tile-pane { z-index: 200; } +.leaflet-overlay-pane { z-index: 400; } +.leaflet-shadow-pane { z-index: 500; } +.leaflet-marker-pane { z-index: 600; } +.leaflet-tooltip-pane { z-index: 650; } +.leaflet-popup-pane { z-index: 700; } + +.leaflet-map-pane canvas { z-index: 100; } +.leaflet-map-pane svg { z-index: 200; } + +.leaflet-vml-shape { + width: 1px; + height: 1px; + } +.lvml { + behavior: url(#default#VML); + display: inline-block; + position: absolute; + } + + +/* control positioning */ + +.leaflet-control { + position: relative; + z-index: 800; + pointer-events: visiblePainted; /* IE 9-10 doesn't have auto */ + pointer-events: auto; + } +.leaflet-top, +.leaflet-bottom { + position: absolute; + z-index: 1000; + pointer-events: none; + } +.leaflet-top { + top: 0; + } +.leaflet-right { + right: 0; + } +.leaflet-bottom { + bottom: 0; + } +.leaflet-left { + left: 0; + } +.leaflet-control { + float: left; + clear: both; + } +.leaflet-right .leaflet-control { + float: right; + } +.leaflet-top .leaflet-control { + margin-top: 10px; + } +.leaflet-bottom .leaflet-control { + margin-bottom: 10px; + } +.leaflet-left .leaflet-control { + margin-left: 10px; + } +.leaflet-right .leaflet-control { + margin-right: 10px; + } + + +/* zoom and fade animations */ + +.leaflet-fade-anim .leaflet-tile { + will-change: opacity; + } +.leaflet-fade-anim .leaflet-popup { + opacity: 0; + -webkit-transition: opacity 0.2s linear; + -moz-transition: opacity 0.2s linear; + transition: opacity 0.2s linear; + } +.leaflet-fade-anim .leaflet-map-pane .leaflet-popup { + opacity: 1; + } +.leaflet-zoom-animated { + -webkit-transform-origin: 0 0; + -ms-transform-origin: 0 0; + transform-origin: 0 0; + } +.leaflet-zoom-anim .leaflet-zoom-animated { + will-change: transform; + } +.leaflet-zoom-anim .leaflet-zoom-animated { + -webkit-transition: -webkit-transform 0.25s cubic-bezier(0,0,0.25,1); + -moz-transition: -moz-transform 0.25s cubic-bezier(0,0,0.25,1); + transition: transform 0.25s cubic-bezier(0,0,0.25,1); + } +.leaflet-zoom-anim .leaflet-tile, +.leaflet-pan-anim .leaflet-tile { + -webkit-transition: none; + -moz-transition: none; + transition: none; + } + +.leaflet-zoom-anim .leaflet-zoom-hide { + visibility: hidden; + } + + +/* cursors */ + +.leaflet-interactive { + cursor: pointer; + } +.leaflet-grab { + cursor: -webkit-grab; + cursor: -moz-grab; + cursor: grab; + } +.leaflet-crosshair, +.leaflet-crosshair .leaflet-interactive { + cursor: crosshair; + } +.leaflet-popup-pane, +.leaflet-control { + cursor: auto; + } +.leaflet-dragging .leaflet-grab, +.leaflet-dragging .leaflet-grab .leaflet-interactive, +.leaflet-dragging .leaflet-marker-draggable { + cursor: move; + cursor: -webkit-grabbing; + cursor: -moz-grabbing; + cursor: grabbing; + } + +/* marker & overlays interactivity */ +.leaflet-marker-icon, +.leaflet-marker-shadow, +.leaflet-image-layer, +.leaflet-pane > svg path, +.leaflet-tile-container { + pointer-events: none; + } + +.leaflet-marker-icon.leaflet-interactive, +.leaflet-image-layer.leaflet-interactive, +.leaflet-pane > svg path.leaflet-interactive { + pointer-events: visiblePainted; /* IE 9-10 doesn't have auto */ + pointer-events: auto; + } + +/* visual tweaks */ + +.leaflet-container { + background: #ddd; + outline: 0; + } +.leaflet-container a { + color: #0078A8; + } +.leaflet-container a.leaflet-active { + outline: 2px solid orange; + } +.leaflet-zoom-box { + border: 2px dotted #38f; + background: rgba(255,255,255,0.5); + } + + +/* general typography */ +.leaflet-container { + font: 12px/1.5 "Helvetica Neue", Arial, Helvetica, sans-serif; + } + + +/* general toolbar styles */ + +.leaflet-bar { + box-shadow: 0 1px 5px rgba(0,0,0,0.65); + border-radius: 4px; + } +.leaflet-bar a, +.leaflet-bar a:hover { + background-color: #fff; + border-bottom: 1px solid #ccc; + width: 26px; + height: 26px; + line-height: 26px; + display: block; + text-align: center; + text-decoration: none; + color: black; + } +.leaflet-bar a, +.leaflet-control-layers-toggle { + background-position: 50% 50%; + background-repeat: no-repeat; + display: block; + } +.leaflet-bar a:hover { + background-color: #f4f4f4; + } +.leaflet-bar a:first-child { + border-top-left-radius: 4px; + border-top-right-radius: 4px; + } +.leaflet-bar a:last-child { + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + border-bottom: none; + } +.leaflet-bar a.leaflet-disabled { + cursor: default; + background-color: #f4f4f4; + color: #bbb; + } + +.leaflet-touch .leaflet-bar a { + width: 30px; + height: 30px; + line-height: 30px; + } +.leaflet-touch .leaflet-bar a:first-child { + border-top-left-radius: 2px; + border-top-right-radius: 2px; + } +.leaflet-touch .leaflet-bar a:last-child { + border-bottom-left-radius: 2px; + border-bottom-right-radius: 2px; + } + +/* zoom control */ + +.leaflet-control-zoom-in, +.leaflet-control-zoom-out { + font: bold 18px 'Lucida Console', Monaco, monospace; + text-indent: 1px; + } + +.leaflet-touch .leaflet-control-zoom-in, .leaflet-touch .leaflet-control-zoom-out { + font-size: 22px; + } + + +/* layers control */ + +.leaflet-control-layers { + box-shadow: 0 1px 5px rgba(0,0,0,0.4); + background: #fff; + border-radius: 5px; + } +.leaflet-control-layers-toggle { + background-image: url(images/layers.png); + width: 36px; + height: 36px; + } +.leaflet-retina .leaflet-control-layers-toggle { + background-image: url(images/layers-2x.png); + background-size: 26px 26px; + } +.leaflet-touch .leaflet-control-layers-toggle { + width: 44px; + height: 44px; + } +.leaflet-control-layers .leaflet-control-layers-list, +.leaflet-control-layers-expanded .leaflet-control-layers-toggle { + display: none; + } +.leaflet-control-layers-expanded .leaflet-control-layers-list { + display: block; + position: relative; + } +.leaflet-control-layers-expanded { + padding: 6px 10px 6px 6px; + color: #333; + background: #fff; + } +.leaflet-control-layers-scrollbar { + overflow-y: scroll; + overflow-x: hidden; + padding-right: 5px; + } +.leaflet-control-layers-selector { + margin-top: 2px; + position: relative; + top: 1px; + } +.leaflet-control-layers label { + display: block; + } +.leaflet-control-layers-separator { + height: 0; + border-top: 1px solid #ddd; + margin: 5px -10px 5px -6px; + } + +/* Default icon URLs */ +.leaflet-default-icon-path { + background-image: url(images/marker-icon.png); + } + + +/* attribution and scale controls */ + +.leaflet-container .leaflet-control-attribution { + background: #fff; + background: rgba(255, 255, 255, 0.7); + margin: 0; + } +.leaflet-control-attribution, +.leaflet-control-scale-line { + padding: 0 5px; + color: #333; + } +.leaflet-control-attribution a { + text-decoration: none; + } +.leaflet-control-attribution a:hover { + text-decoration: underline; + } +.leaflet-container .leaflet-control-attribution, +.leaflet-container .leaflet-control-scale { + font-size: 11px; + } +.leaflet-left .leaflet-control-scale { + margin-left: 5px; + } +.leaflet-bottom .leaflet-control-scale { + margin-bottom: 5px; + } +.leaflet-control-scale-line { + border: 2px solid #777; + border-top: none; + line-height: 1.1; + padding: 2px 5px 1px; + font-size: 11px; + white-space: nowrap; + overflow: hidden; + -moz-box-sizing: border-box; + box-sizing: border-box; + + background: #fff; + background: rgba(255, 255, 255, 0.5); + } +.leaflet-control-scale-line:not(:first-child) { + border-top: 2px solid #777; + border-bottom: none; + margin-top: -2px; + } +.leaflet-control-scale-line:not(:first-child):not(:last-child) { + border-bottom: 2px solid #777; + } + +.leaflet-touch .leaflet-control-attribution, +.leaflet-touch .leaflet-control-layers, +.leaflet-touch .leaflet-bar { + box-shadow: none; + } +.leaflet-touch .leaflet-control-layers, +.leaflet-touch .leaflet-bar { + border: 2px solid rgba(0,0,0,0.2); + background-clip: padding-box; + } + + +/* popup */ + +.leaflet-popup { + position: absolute; + text-align: center; + margin-bottom: 20px; + } +.leaflet-popup-content-wrapper { + padding: 1px; + text-align: left; + border-radius: 12px; + } +.leaflet-popup-content { + margin: 13px 19px; + line-height: 1.4; + } +.leaflet-popup-content p { + margin: 18px 0; + } +.leaflet-popup-tip-container { + width: 40px; + height: 20px; + position: absolute; + left: 50%; + margin-left: -20px; + overflow: hidden; + pointer-events: none; + } +.leaflet-popup-tip { + width: 17px; + height: 17px; + padding: 1px; + + margin: -10px auto 0; + + -webkit-transform: rotate(45deg); + -moz-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); + } +.leaflet-popup-content-wrapper, +.leaflet-popup-tip { + background: white; + color: #333; + box-shadow: 0 3px 14px rgba(0,0,0,0.4); + } +.leaflet-container a.leaflet-popup-close-button { + position: absolute; + top: 0; + right: 0; + padding: 4px 4px 0 0; + border: none; + text-align: center; + width: 18px; + height: 14px; + font: 16px/14px Tahoma, Verdana, sans-serif; + color: #c3c3c3; + text-decoration: none; + font-weight: bold; + background: transparent; + } +.leaflet-container a.leaflet-popup-close-button:hover { + color: #999; + } +.leaflet-popup-scrolled { + overflow: auto; + border-bottom: 1px solid #ddd; + border-top: 1px solid #ddd; + } + +.leaflet-oldie .leaflet-popup-content-wrapper { + zoom: 1; + } +.leaflet-oldie .leaflet-popup-tip { + width: 24px; + margin: 0 auto; + + -ms-filter: "progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678)"; + filter: progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678); + } +.leaflet-oldie .leaflet-popup-tip-container { + margin-top: -1px; + } + +.leaflet-oldie .leaflet-control-zoom, +.leaflet-oldie .leaflet-control-layers, +.leaflet-oldie .leaflet-popup-content-wrapper, +.leaflet-oldie .leaflet-popup-tip { + border: 1px solid #999; + } + + +/* div icon */ + +.leaflet-div-icon { + background: #fff; + border: 1px solid #666; + } + + +/* Tooltip */ +/* Base styles for the element that has a tooltip */ +.leaflet-tooltip { + position: absolute; + padding: 6px; + background-color: #fff; + border: 1px solid #fff; + border-radius: 3px; + color: #222; + white-space: nowrap; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + pointer-events: none; + box-shadow: 0 1px 3px rgba(0,0,0,0.4); + } +.leaflet-tooltip.leaflet-clickable { + cursor: pointer; + pointer-events: auto; + } +.leaflet-tooltip-top:before, +.leaflet-tooltip-bottom:before, +.leaflet-tooltip-left:before, +.leaflet-tooltip-right:before { + position: absolute; + pointer-events: none; + border: 6px solid transparent; + background: transparent; + content: ""; + } + +/* Directions */ + +.leaflet-tooltip-bottom { + margin-top: 6px; +} +.leaflet-tooltip-top { + margin-top: -6px; +} +.leaflet-tooltip-bottom:before, +.leaflet-tooltip-top:before { + left: 50%; + margin-left: -6px; + } +.leaflet-tooltip-top:before { + bottom: 0; + margin-bottom: -12px; + border-top-color: #fff; + } +.leaflet-tooltip-bottom:before { + top: 0; + margin-top: -12px; + margin-left: -6px; + border-bottom-color: #fff; + } +.leaflet-tooltip-left { + margin-left: -6px; +} +.leaflet-tooltip-right { + margin-left: 6px; +} +.leaflet-tooltip-left:before, +.leaflet-tooltip-right:before { + top: 50%; + margin-top: -6px; + } +.leaflet-tooltip-left:before { + right: 0; + margin-right: -12px; + border-left-color: #fff; + } +.leaflet-tooltip-right:before { + left: 0; + margin-left: -12px; + border-right-color: #fff; + } diff --git a/site/public/assets/css/mobile.css b/site/public/assets/css/mobile.css new file mode 100644 index 00000000..124b9d42 --- /dev/null +++ b/site/public/assets/css/mobile.css @@ -0,0 +1,172 @@ +/* MOBILE - iphone/ipad css */ + +softbr { + display: none; +} + +@media all and (max-device-width: 1024px) { + softbr { + display: block; + height: 10px; + } + + /* header / footer */ + + header .slogan { + padding-left: 10px; + } + header .splash { + display: none; + } + .home header .links a { + margin-right: 0; + } + header .links a { + padding-right: 0; + margin-right: 14px; + font-size: 14px; + } + footer { + font-size: 14px; + line-height: 1.6; + } + footer > div:nth-child(1) { + padding: 0; + color: #ccc; + margin-bottom: 15px; + } + footer > div:nth-child(2) { + padding: 0; + color: #ccc; + margin-bottom: 15px; + } + footer a { + color: #eee; + border-color: #ccc; + } + footer ul { + flex-wrap: wrap; + } + h1 { + font-size: 32px; + line-height: 44px; + } + + /* MOBILE content */ + + .intro_section { + padding: 50px 0 20px 0; + } + .intro_section .hero_desc { + font-size: 28px; + line-height: 50px; + margin-bottom: 20px; + } + .intro_section .inner { + margin: 0; + max-width: 100%; + padding: 20px; + } + .intro_section .hero_subdesc { + max-width: 100%; + } + section h1, section h2, section h3, section h4, section h5, section h6, section p { + max-width: 100%; + } + section { + width: 100%; + padding: 0 25px; + } + section p{ + font-size: 15px; + } + section.about-menu { + padding: 0; + } + .content-about .about-menu ul li{ + font-size: 12px; + } + .content-about .team-member p{ + font-size: 13px; + line-height: 26px; + } + .content-about section:first-of-type > p:first-of-type { + font-size: 16px; + line-height: 30px; + } + .meta { + margin-right: 0px; + margin-bottom: 10px; + } + .modal img { + max-width: 100%; + display: block; + } + th { + overflow: hidden; + text-overflow: ellipsis; + } + section.wide { + width: 100%; + } + .map, .map .applet { + height: 360px; + } + .dataset-heading section { + padding: 0; + } + .dataset-list .dataset { + width: 100%; + } + .dataset-list a { + width: 100%; + } + + .content td a { + text-overflow: ellipsis; + max-width: 100%; + overflow: hidden; + display: inline-block; + } + + .content-about .team-member { + margin: 0 0 10px 0; + padding: 15px; + margin-bottom: 25px; + } + .page_name { + display: none; + } +} + +/* iphone-specific */ +@media all and (max-device-width: 640px) { + .right-sidebar { + float: none; + width: 100%; + border: 0; + margin: 0 0 14px 0; + padding: 0 2px; + } + .map, .map .applet { + height: 360px; + } + .citationBrowser input.q { + max-width: 180px; + } + .columns { + flex-direction: column; + } + .columns .column { + margin: 0; + margin-bottom: 25px; + } + .columns-2 .column, + .columns-3 .column, + .columns-4 .column { + width: 100%; + } + .teaser { + display: none; + } +} \ No newline at end of file diff --git a/site/public/assets/css/splash.css b/site/public/assets/css/splash.css new file mode 100644 index 00000000..6089f10d --- /dev/null +++ b/site/public/assets/css/splash.css @@ -0,0 +1,134 @@ +/* splash */ + +html, body { + overflow: hidden; + width: 100%; height: 100%; +} +header { + position: absolute; + background: transparent; + box-shadow: none; +} +footer { + background: transparent; + position: absolute; + bottom: 0; left: 0; + padding: 20px; +} +footer div { + z-index: 2; +} +footer { + background: #111; +} +header .links a.activeLink { + color: white; + border-bottom-color: white; +} +.splash { +} +#three_container { + position: absolute; + top: 0; left: 0; + width: 100%; height: 100%; +} + +.about.open { + pointer-events: auto; + opacity: 1; + cursor: pointer; +} +.about { + position: absolute; + top: 0; left: 0; + width: 100%; height: 100%; + display: flex; + align-items: center; + justify-content: center; + background: rgba(0,0,0,0.5); + opacity: 0; + pointer-events: none; + transition: opacity 400ms; + overflow-y: scroll; +} +.about .inner { + padding: 40px; + background: #000; + color: #eee; + max-width: 600px; + line-height: 1.5; + cursor: text; +} +.about .inner b { + color: #fff; +} +.about a { + color: #fff; +} +p { + margin: 0 10px 20px 0; + line-height: 1.5; + font-size: 14px; + font-weight: 300; +} + +@media screen and (max-width: 700px) { + header, footer { + transition: background 0.4s; + } + .modalOpen header, + .modalOpen footer { + background: rgba(25, 25, 25, 1.0); + } + header .slogan { + padding-left: 10px; + } + footer { + display: block; + background: rgba(25, 25, 25, 0.8); + padding: 10px 20px; + } + footer div { + background: transparent; + text-align: center; + width: 100%; + display: block; + padding: 0; + } + header .links { + display: block; + text-align: right; + padding: 0; + padding-right: 10px; + } + header .links span, + header .links a { + display: inline-block; + text-align: right; + margin: 0; + font-size: 12px; + background: rgba(25, 25, 25, 0.5); + text-shadow: 0 0 0 rgba(0,0,0,0); + border-bottom: 0; + } + .about { + display: block; + } + .about .inner { + max-width: 100%; + padding: 20px; + padding-top: 80px; + padding-bottom: 50px; + } +} +@media screen and (max-height: 500px) { + .about { + display: block; + } + .about .inner { + max-width: 100%; + padding: 20px; + padding-top: 70px; + padding-bottom: 50px; + } +} diff --git a/site/public/assets/css/tabulator.css b/site/public/assets/css/tabulator.css new file mode 100755 index 00000000..d26b5cfc --- /dev/null +++ b/site/public/assets/css/tabulator.css @@ -0,0 +1,759 @@ +/* Tabulator v4.1.3 (c) Oliver Folkerd */ +.tabulator { + position: relative; + font-size: 13px; + text-align: left; + overflow: hidden; + -ms-transform: translatez(0); + transform: translatez(0); +} + +.tabulator[tabulator-layout="fitDataFill"] .tabulator-tableHolder .tabulator-table { + min-width: 100%; +} + +.tabulator.tabulator-block-select { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.tabulator .tabulator-header { + position: relative; + box-sizing: border-box; + width: 100%; + border-bottom: 1px solid #333; + color: #ddd; + white-space: nowrap; + overflow: hidden; + -moz-user-select: none; + -khtml-user-select: none; + -webkit-user-select: none; + -o-user-select: none; +} + +.tabulator .tabulator-header .tabulator-col { + display: inline-block; + position: relative; + box-sizing: border-box; + border-right: 1px solid #333; + text-align: left; + vertical-align: bottom; + overflow: hidden; + padding: 5px 0; +} + +.tabulator .tabulator-header .tabulator-col.tabulator-moving { + position: absolute; + border: 1px solid #333; + background: rgba(80,20,10,0.2); + pointer-events: none; +} + +.tabulator .tabulator-header .tabulator-col .tabulator-col-content { + box-sizing: border-box; + position: relative; + padding: 4px; +} + +.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title { + box-sizing: border-box; + width: 100%; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + vertical-align: bottom; + /* AH */ + font-weight: 500; + font-size:14px; +} + +.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor { + box-sizing: border-box; + width: 100%; + border: 1px solid #333; + padding: 1px; + background: #fff; +} + +.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-arrow { + display: inline-block; + position: absolute; + top: 11px; + right: 8px; + width: 0; + height: 0; + border-left: 6px solid transparent; + border-right: 6px solid transparent; + border-bottom: 6px solid #666; +} + +.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols { + position: relative; + display: -ms-flexbox; + display: flex; + border-top: 1px solid #333; + overflow: hidden; +} + +.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols .tabulator-col:last-child { + margin-right: -1px; +} + +.tabulator .tabulator-header .tabulator-col:first-child .tabulator-col-resize-handle.prev { + display: none; +} + +.tabulator .tabulator-header .tabulator-col.ui-sortable-helper { + position: absolute; + border: 1px solid #333; +} + +.tabulator .tabulator-header .tabulator-col .tabulator-header-filter { + position: relative; + box-sizing: border-box; + margin-top: 2px; + width: 100%; + text-align: center; +} + +.tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea { + height: auto !important; +} + +.tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg { + margin-top: 3px; +} + +.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input::-ms-clear { + width: 0; + height: 0; +} + +.tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title { + padding-right: 25px; + padding-left: 6px; +} + +.tabulator .tabulator-header .tabulator-col.tabulator-sortable:hover { + cursor: pointer; +} + +.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="none"] .tabulator-col-content .tabulator-arrow { + border-top: none; + border-bottom: 6px solid #666; +} + +.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="asc"] .tabulator-col-content .tabulator-arrow { + border-top: none; + border-bottom: 6px solid #666; +} + +.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="desc"] .tabulator-col-content .tabulator-arrow { + border-top: 6px solid #666; + border-bottom: none; +} + +.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title { + -webkit-writing-mode: vertical-rl; + -ms-writing-mode: tb-rl; + writing-mode: vertical-rl; + text-orientation: mixed; + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + align-items: center; + -ms-flex-pack: center; + justify-content: center; +} + +.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-col-vertical-flip .tabulator-col-title { + -ms-transform: rotate(180deg); + transform: rotate(180deg); +} + +.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-title { + padding-right: 0; + padding-top: 20px; +} + +.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable.tabulator-col-vertical-flip .tabulator-col-title { + padding-right: 0; + padding-bottom: 20px; +} + +.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-arrow { + right: calc(50% - 6px); +} + +.tabulator .tabulator-header .tabulator-frozen { + display: inline-block; + position: absolute; + z-index: 10; +} + +.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left { + border-right: 2px solid #333; +} + +.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right { + border-left: 2px solid #333; +} + +.tabulator .tabulator-header .tabulator-calcs-holder { + box-sizing: border-box; + min-width: 400%; + background: rgba(80,20,10,0.2); + border-top: 1px solid #333; + border-bottom: 1px solid #333; + overflow: hidden; +} + +.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row { + background: rgba(80,20,10,0.2); +} + +.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle { + display: none; +} + +.tabulator .tabulator-header .tabulator-frozen-rows-holder { + min-width: 400%; +} + +.tabulator .tabulator-header .tabulator-frozen-rows-holder:empty { + display: none; +} + +.tabulator .tabulator-tableHolder { + position: relative; + width: 100%; + white-space: nowrap; + overflow: auto; + -webkit-overflow-scrolling: touch; +} + +.tabulator .tabulator-tableHolder:focus { + outline: none; +} + +.tabulator .tabulator-tableHolder .tabulator-placeholder { + box-sizing: border-box; + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + align-items: center; + width: 100%; +} + +.tabulator .tabulator-tableHolder .tabulator-placeholder[tabulator-render-mode="virtual"] { + position: absolute; + top: 0; + left: 0; + height: 100%; +} + +.tabulator .tabulator-tableHolder .tabulator-placeholder span { + display: inline-block; + margin: 0 auto; + padding: 10px; + color: #ccc; + font-weight: bold; + font-size: 20px; +} + +.tabulator .tabulator-tableHolder .tabulator-table { + position: relative; + display: inline-block; + white-space: nowrap; + overflow: visible; +} + +.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs { + font-weight: bold; + background: rgba(80,20,10,0.2); +} + +.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top { + border-bottom: 2px solid #333; +} + +.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom { + border-top: 2px solid #333; +} + +.tabulator .tabulator-footer { + padding: 5px 10px; + border-top: 1px solid #999; + text-align: right; + color: #555; + font-weight: bold; + white-space: nowrap; + -ms-user-select: none; + user-select: none; + -moz-user-select: none; + -khtml-user-select: none; + -webkit-user-select: none; + -o-user-select: none; +} + +.tabulator .tabulator-footer .tabulator-calcs-holder { + box-sizing: border-box; + width: calc(100% + 20px); + margin: -5px -10px 5px -10px; + text-align: left; + background: rgba(80,20,10,0.2); + border-bottom: 1px solid #333; + border-top: 1px solid #333; + overflow: hidden; +} + +.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row { + background: rgba(80,20,10,0.2); +} + +.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle { + display: none; +} + +.tabulator .tabulator-footer .tabulator-calcs-holder:only-child { + margin-bottom: -5px; + border-bottom: none; +} + +.tabulator .tabulator-footer .tabulator-pages { + margin: 0 7px; +} + +.tabulator .tabulator-footer .tabulator-page { + display: inline-block; + margin: 0 2px; + padding: 2px 5px; + border: 1px solid #333; + border-radius: 3px; + background: rgba(255, 255, 255, 0.2); + color: #555; + font-family: inherit; + font-weight: inherit; + font-size: inherit; +} + +.tabulator .tabulator-footer .tabulator-page.active { + color: #d00; +} + +.tabulator .tabulator-footer .tabulator-page:disabled { + opacity: .5; +} + +.tabulator .tabulator-footer .tabulator-page:not(.disabled):hover { + cursor: pointer; + background: rgba(0, 0, 0, 0.2); + color: #fff; +} + +.tabulator .tabulator-col-resize-handle { + position: absolute; + right: 0; + top: 0; + bottom: 0; + width: 5px; +} + +.tabulator .tabulator-col-resize-handle.prev { + left: 0; + right: auto; +} + +.tabulator .tabulator-col-resize-handle:hover { + cursor: ew-resize; +} + +.tabulator .tabulator-loader { + position: absolute; + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + align-items: center; + top: 0; + left: 0; + z-index: 100; + height: 100%; + width: 100%; + background: rgba(0, 0, 0, 0.4); + text-align: center; +} + +.tabulator .tabulator-loader .tabulator-loader-msg { + display: inline-block; + margin: 0 auto; + padding: 10px 20px; + border-radius: 4px; + background: #fff; + font-weight: bold; + font-size: 16px; +} + +.tabulator .tabulator-loader .tabulator-loader-msg.tabulator-loading { + border: 4px solid #333; + color: #000; +} + +.tabulator .tabulator-loader .tabulator-loader-msg.tabulator-error { + color: #000; +} + +.tabulator-row { + position: relative; + box-sizing: border-box; + min-height: 22px; +} + +.tabulator-row.tabulator-row-even { +} + +.tabulator-row.tabulator-selectable:hover { + cursor: pointer; +} + +.tabulator-row.tabulator-selected { + background-color: #9ABCEA; +} + +.tabulator-row.tabulator-selected:hover { + background-color: #555; + cursor: pointer; +} + +.tabulator-row.tabulator-row-moving { + border: 1px solid #000; + background: #fff; +} + +.tabulator-row.tabulator-moving { + position: absolute; + border-top: 1px solid #333; + border-bottom: 1px solid #333; + pointer-events: none; + z-index: 15; +} + +.tabulator-row .tabulator-row-resize-handle { + position: absolute; + right: 0; + bottom: 0; + left: 0; + height: 5px; +} + +.tabulator-row .tabulator-row-resize-handle.prev { + top: 0; + bottom: auto; +} + +.tabulator-row .tabulator-row-resize-handle:hover { + cursor: ns-resize; +} + +.tabulator-row .tabulator-frozen { + display: inline-block; + position: absolute; + background-color: inherit; + z-index: 10; +} + +.tabulator-row .tabulator-frozen.tabulator-frozen-left { + border-right: 2px solid #333; +} + +.tabulator-row .tabulator-frozen.tabulator-frozen-right { + border-left: 2px solid #333; +} + +.tabulator-row .tabulator-responsive-collapse { + box-sizing: border-box; + padding: 5px; + border-top: 1px solid #333; + border-bottom: 1px solid #333; +} + +.tabulator-row .tabulator-responsive-collapse:empty { + display: none; +} + +.tabulator-row .tabulator-responsive-collapse table { + font-size: 13px; +} + +.tabulator-row .tabulator-responsive-collapse table tr td { + position: relative; +} + +.tabulator-row .tabulator-responsive-collapse table tr td:first-of-type { + padding-right: 10px; +} + +.tabulator-row .tabulator-cell { + display: inline-block; + position: relative; + box-sizing: border-box; + padding: 10px; + border-right: 1px solid #333; + vertical-align: middle; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.tabulator-row .tabulator-cell.tabulator-editing { + border: 1px solid #1D68CD; + padding: 0; +} + +.tabulator-row .tabulator-cell.tabulator-editing input, .tabulator-row .tabulator-cell.tabulator-editing select { + border: 1px; + background: transparent; +} + +.tabulator-row .tabulator-cell.tabulator-validation-fail { + border: 1px solid #dd0000; +} + +.tabulator-row .tabulator-cell.tabulator-validation-fail input, .tabulator-row .tabulator-cell.tabulator-validation-fail select { + border: 1px; + background: transparent; + color: #dd0000; +} + +.tabulator-row .tabulator-cell:first-child .tabulator-col-resize-handle.prev { + display: none; +} + +.tabulator-row .tabulator-cell.tabulator-row-handle { + display: -ms-inline-flexbox; + display: inline-flex; + -ms-flex-align: center; + align-items: center; + -ms-flex-pack: center; + justify-content: center; + -moz-user-select: none; + -khtml-user-select: none; + -webkit-user-select: none; + -o-user-select: none; +} + +.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box { + width: 80%; +} + +.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar { + width: 100%; + height: 3px; + margin-top: 2px; + background: #666; +} + +.tabulator-row .tabulator-cell .tabulator-data-tree-branch { + display: inline-block; + vertical-align: middle; + height: 9px; + width: 7px; + margin-top: -9px; + margin-right: 5px; + border-bottom-left-radius: 1px; + border-left: 2px solid #333; + border-bottom: 2px solid #333; +} + +.tabulator-row .tabulator-cell .tabulator-data-tree-control { + display: -ms-inline-flexbox; + display: inline-flex; + -ms-flex-pack: center; + justify-content: center; + -ms-flex-align: center; + align-items: center; + vertical-align: middle; + height: 11px; + width: 11px; + margin-right: 5px; + border: 1px solid #333; + border-radius: 2px; + background: rgba(0, 0, 0, 0.1); + overflow: hidden; +} + +.tabulator-row .tabulator-cell .tabulator-data-tree-control:hover { + cursor: pointer; + background: rgba(0, 0, 0, 0.2); +} + +.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse { + display: inline-block; + position: relative; + height: 7px; + width: 1px; + background: transparent; +} + +.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after { + position: absolute; + content: ""; + left: -3px; + top: 3px; + height: 1px; + width: 7px; +} + +.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand { + display: inline-block; + position: relative; + height: 7px; + width: 1px; + background: #333; +} + +.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after { + position: absolute; + content: ""; + left: -3px; + top: 3px; + height: 1px; + width: 7px; + background: #333; +} + +.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle { + display: -ms-inline-flexbox; + display: inline-flex; + -ms-flex-align: center; + align-items: center; + -ms-flex-pack: center; + justify-content: center; + -moz-user-select: none; + -khtml-user-select: none; + -webkit-user-select: none; + -o-user-select: none; + height: 15px; + width: 15px; + border-radius: 4px; + background: #666; + color: #fff; + font-weight: bold; + font-size: 1.1em; +} + +.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle:hover { + opacity: .7; +} + +.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-close { + display: initial; +} + +.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-open { + display: none; +} + +.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle .tabulator-responsive-collapse-toggle-close { + display: none; +} + +.tabulator-row.tabulator-group { + box-sizing: border-box; + border-bottom: 1px solid #999; + border-right: 1px solid #333; + border-top: 1px solid #999; + padding: 5px; + padding-left: 10px; + background: #333; + font-weight: bold; + min-width: 100%; +} + +.tabulator-row.tabulator-group:hover { + cursor: pointer; + background-color: rgba(0, 0, 0, 0.1); +} + +.tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow { + margin-right: 10px; + border-left: 6px solid transparent; + border-right: 6px solid transparent; + border-top: 6px solid #666; + border-bottom: 0; +} + +.tabulator-row.tabulator-group.tabulator-group-level-1 .tabulator-arrow { + margin-left: 20px; +} + +.tabulator-row.tabulator-group.tabulator-group-level-2 .tabulator-arrow { + margin-left: 40px; +} + +.tabulator-row.tabulator-group.tabulator-group-level-3 .tabulator-arrow { + margin-left: 60px; +} + +.tabulator-row.tabulator-group.tabulator-group-level-4 .tabulator-arrow { + margin-left: 80px; +} + +.tabulator-row.tabulator-group.tabulator-group-level-5 .tabulator-arrow { + margin-left: 100px; +} + +.tabulator-row.tabulator-group .tabulator-arrow { + display: inline-block; + width: 0; + height: 0; + margin-right: 16px; + border-top: 6px solid transparent; + border-bottom: 6px solid transparent; + border-right: 0; + border-left: 6px solid #666; + vertical-align: middle; +} + +.tabulator-row.tabulator-group span { + margin-left: 10px; + color: #d00; +} + +.tabulator-edit-select-list { + position: absolute; + display: inline-block; + box-sizing: border-box; + max-height: 200px; + background: #fff; + border: 1px solid #333; + font-size: 13px; + overflow-y: auto; + -webkit-overflow-scrolling: touch; + z-index: 10000; +} + +.tabulator-edit-select-list .tabulator-edit-select-list-item { + padding: 4px; + color: #333; +} + +.tabulator-edit-select-list .tabulator-edit-select-list-item.active { + color: #fff; + background: #1D68CD; +} + +.tabulator-edit-select-list .tabulator-edit-select-list-item:hover { + cursor: pointer; + color: #fff; + background: #1D68CD; +} + +.tabulator-edit-select-list .tabulator-edit-select-list-group { + border-bottom: 1px solid #333; + padding: 4px; + padding-top: 6px; + color: #333; + font-weight: bold; +} diff --git a/site/public/assets/data/3dlm_0_10.json b/site/public/assets/data/3dlm_0_10.json new file mode 100644 index 00000000..1f747008 --- /dev/null +++ b/site/public/assets/data/3dlm_0_10.json @@ -0,0 +1 @@ +{"Daisy_Fuentes_0004_2737.png":[[54.0,88.0,-86.4166488647461],[61.0,117.0,-94.31047821044922],[67.0,139.0,-100.80580139160156],[74.0,158.0,-104.98035430908203],[80.0,183.0,-102.41091918945312],[86.0,206.0,-88.20156860351562],[93.0,225.0,-67.11590576171875],[105.0,247.0,-44.081058502197266],[131.0,256.0,-27.08724594116211],[159.0,247.0,-24.630205154418945],[188.0,228.0,-33.128997802734375],[207.0,209.0,-43.85726547241211],[223.0,183.0,-49.67991256713867],[232.0,158.0,-47.00068664550781],[236.0,136.0,-39.36989212036133],[239.0,113.0,-29.353200912475586],[239.0,88.0,-19.166582107543945],[45.0,94.0,9.0930757522583],[48.0,94.0,28.99441146850586],[61.0,94.0,43.41041564941406],[70.0,101.0,52.37288284301758],[80.0,104.0,56.78023910522461],[128.0,104.0,73.55677795410156],[137.0,98.0,77.24374389648438],[153.0,94.0,77.57779693603516],[172.0,94.0,73.60804748535156],[188.0,94.0,61.270816802978516],[105.0,132.0,54.630958557128906],[102.0,155.0,56.62538146972656],[99.0,171.0,60.56704330444336],[102.0,183.0,56.47877883911133],[96.0,180.0,22.875110626220703],[102.0,183.0,28.277494430541992],[112.0,187.0,32.87094497680664],[121.0,183.0,35.1693115234375],[128.0,180.0,34.83551025390625],[61.0,113.0,16.009923934936523],[64.0,113.0,29.9821834564209],[77.0,113.0,34.802860260009766],[89.0,120.0,32.677188873291016],[77.0,123.0,31.01885223388672],[67.0,123.0,24.31825828552246],[134.0,123.0,50.15107727050781],[143.0,117.0,60.02939987182617],[156.0,117.0,63.61414337158203],[169.0,120.0,55.770992279052734],[159.0,126.0,57.6904411315918],[147.0,126.0,55.69097900390625],[86.0,193.0,-17.841793060302734],[93.0,196.0,4.937897682189941],[105.0,196.0,22.647642135620117],[115.0,199.0,26.378101348876953],[121.0,196.0,29.354434967041016],[143.0,196.0,24.816020965576172],[166.0,193.0,10.712540626525879],[147.0,212.0,12.046388626098633],[134.0,221.0,11.838120460510254],[118.0,225.0,8.037301063537598],[105.0,221.0,2.2057247161865234],[96.0,212.0,-6.710599899291992],[89.0,193.0,-17.244544982910156],[105.0,202.0,12.899520874023438],[115.0,202.0,19.937997817993164],[131.0,202.0,22.065942764282227],[163.0,193.0,9.6935396194458],[131.0,212.0,14.528266906738281],[118.0,212.0,11.355504035949707],[105.0,212.0,5.307169437408447]],"George_W_Bush_0521_4871.png":[[52.0,92.0,-45.72012710571289],[49.0,113.0,-46.65034866333008],[52.0,135.0,-47.51322555541992],[54.0,151.0,-46.91441345214844],[57.0,173.0,-40.902000427246094],[68.0,189.0,-28.678600311279297],[78.0,205.0,-13.592384338378906],[95.0,219.0,-1.2501835823059082],[116.0,229.0,1.177125334739685],[140.0,227.0,-9.77007007598877],[157.0,216.0,-27.030227661132812],[165.0,205.0,-46.50547790527344],[176.0,189.0,-62.202232360839844],[184.0,170.0,-69.46493530273438],[192.0,154.0,-70.83147430419922],[197.0,138.0,-70.83583068847656],[202.0,116.0,-70.05885314941406],[81.0,81.0,17.92914390563965],[95.0,78.0,27.789169311523438],[108.0,78.0,33.28635025024414],[116.0,81.0,35.898231506347656],[127.0,84.0,36.1664924621582],[162.0,89.0,30.671188354492188],[173.0,89.0,27.389225006103516],[181.0,89.0,21.40380096435547],[192.0,92.0,12.476249694824219],[197.0,97.0,-0.4335915446281433],[143.0,105.0,32.26004409790039],[143.0,119.0,38.66748809814453],[140.0,132.0,46.93293380737305],[140.0,143.0,47.69198226928711],[122.0,149.0,31.083112716674805],[127.0,151.0,33.54079055786133],[135.0,154.0,34.166015625],[143.0,154.0,31.159467697143555],[149.0,154.0,27.037282943725586],[97.0,100.0,21.734798431396484],[105.0,97.0,28.1799373626709],[114.0,97.0,27.063697814941406],[122.0,103.0,22.652997970581055],[114.0,105.0,26.08942985534668],[103.0,103.0,25.867576599121094],[159.0,108.0,17.47022819519043],[167.0,105.0,19.028751373291016],[176.0,108.0,17.09029769897461],[181.0,111.0,7.996582984924316],[176.0,113.0,14.536516189575195],[165.0,111.0,18.149005889892578],[105.0,178.0,22.76020050048828],[116.0,170.0,33.3117561340332],[127.0,167.0,37.994598388671875],[132.0,167.0,38.12085723876953],[138.0,167.0,36.27274703979492],[149.0,175.0,27.961029052734375],[151.0,184.0,13.815584182739258],[143.0,194.0,20.624553680419922],[135.0,197.0,24.53580093383789],[127.0,197.0,26.357908248901367],[119.0,194.0,27.084375381469727],[111.0,186.0,25.804853439331055],[108.0,175.0,22.580766677856445],[124.0,173.0,33.42163848876953],[132.0,175.0,34.26499557495117],[138.0,175.0,31.121870040893555],[149.0,184.0,14.480358123779297],[135.0,189.0,25.04640769958496],[130.0,189.0,26.659072875976562],[122.0,184.0,27.26160430908203]],"Jean_Chretien_0048_6598.png":[[30.0,125.0,-40.58317947387695],[36.0,147.0,-38.26982498168945],[43.0,166.0,-36.6230583190918],[49.0,188.0,-33.90769577026367],[62.0,210.0,-26.04215431213379],[80.0,229.0,-13.205296516418457],[103.0,242.0,1.227866530418396],[128.0,251.0,11.785074234008789],[156.0,257.0,10.845030784606934],[178.0,245.0,-6.119598865509033],[188.0,232.0,-29.136899948120117],[191.0,223.0,-53.54594039916992],[194.0,201.0,-74.41848754882812],[194.0,179.0,-85.97528076171875],[194.0,156.0,-90.91073608398438],[194.0,134.0,-94.51874542236328],[194.0,112.0,-97.60952758789062],[71.0,93.0,19.528913497924805],[84.0,84.0,26.82400894165039],[96.0,78.0,30.234058380126953],[109.0,78.0,31.37984848022461],[122.0,78.0,30.30535888671875],[159.0,74.0,16.718530654907227],[169.0,71.0,10.688024520874023],[181.0,71.0,1.7389824390411377],[191.0,74.0,-9.972139358520508],[197.0,81.0,-24.279382705688477],[144.0,100.0,25.824087142944336],[150.0,112.0,34.62986373901367],[153.0,125.0,45.06562042236328],[156.0,137.0,47.438385009765625],[134.0,153.0,33.16469955444336],[144.0,153.0,34.75723648071289],[153.0,153.0,34.24925231933594],[159.0,150.0,29.585615158081055],[163.0,150.0,24.086299896240234],[90.0,109.0,23.489126205444336],[103.0,106.0,28.661333084106445],[109.0,103.0,25.710494995117188],[118.0,106.0,20.149057388305664],[112.0,109.0,25.589101791381836],[103.0,112.0,27.14316749572754],[159.0,103.0,6.047369956970215],[169.0,100.0,5.07871675491333],[178.0,100.0,1.128143072128296],[185.0,100.0,-9.351521492004395],[178.0,106.0,-0.28687334060668945],[172.0,106.0,5.514134407043457],[122.0,197.0,28.512418746948242],[131.0,175.0,37.198204040527344],[147.0,166.0,39.9262580871582],[153.0,169.0,39.13956832885742],[159.0,166.0,35.968048095703125],[172.0,175.0,26.046375274658203],[178.0,191.0,10.3086576461792],[175.0,210.0,20.745849609375],[169.0,220.0,27.28376579284668],[159.0,223.0,30.989892959594727],[147.0,220.0,32.862693786621094],[134.0,213.0,31.60837173461914],[122.0,197.0,27.478269577026367],[144.0,179.0,36.26493453979492],[153.0,175.0,36.0021858215332],[163.0,175.0,31.556718826293945],[175.0,191.0,11.229880332946777],[166.0,210.0,26.56795883178711],[156.0,210.0,29.762998580932617],[147.0,210.0,31.160558700561523]],"Jose_Maria_Aznar_0012_7639.png":[[52.0,117.0,-85.36373138427734],[58.0,142.0,-89.13520050048828],[64.0,163.0,-91.57649993896484],[70.0,181.0,-90.67222595214844],[76.0,205.0,-81.6866683959961],[86.0,224.0,-63.06562042236328],[95.0,236.0,-39.47830581665039],[110.0,248.0,-15.760049819946289],[134.0,251.0,-0.7411996126174927],[158.0,242.0,-3.497490644454956],[180.0,227.0,-18.777170181274414],[201.0,211.0,-35.454566955566406],[213.0,190.0,-47.65032196044922],[222.0,166.0,-52.36196517944336],[225.0,145.0,-50.47983932495117],[225.0,120.0,-45.808433532714844],[225.0,96.0,-40.67475128173828],[52.0,108.0,-2.9392600059509277],[58.0,108.0,12.7117338180542],[67.0,105.0,24.29625701904297],[79.0,105.0,31.84514617919922],[89.0,105.0,35.80921173095703],[131.0,99.0,48.1629753112793],[140.0,96.0,49.877891540527344],[155.0,93.0,48.81587600708008],[171.0,93.0,44.32658767700195],[186.0,96.0,33.5164909362793],[110.0,123.0,35.202392578125],[110.0,139.0,39.387237548828125],[107.0,154.0,46.361717224121094],[110.0,163.0,45.361881256103516],[104.0,175.0,21.95050048828125],[110.0,175.0,25.979686737060547],[116.0,175.0,29.28858184814453],[125.0,172.0,29.773151397705078],[131.0,169.0,28.43248176574707],[67.0,123.0,6.034923076629639],[73.0,120.0,17.086734771728516],[82.0,120.0,20.637174606323242],[95.0,123.0,19.039827346801758],[86.0,126.0,18.763216018676758],[76.0,129.0,13.737027168273926],[140.0,117.0,31.881677627563477],[146.0,111.0,38.8029670715332],[158.0,111.0,41.307891845703125],[168.0,114.0,34.02800750732422],[158.0,120.0,37.281280517578125],[146.0,120.0,36.33848571777344],[95.0,202.0,7.3154730796813965],[101.0,199.0,19.637798309326172],[113.0,196.0,28.106361389160156],[119.0,196.0,30.175378799438477],[125.0,193.0,30.934680938720703],[140.0,196.0,26.531757354736328],[155.0,196.0,18.057851791381836],[143.0,205.0,25.4660587310791],[131.0,208.0,27.901447296142578],[122.0,211.0,26.784423828125],[113.0,211.0,23.835683822631836],[104.0,208.0,18.039756774902344],[98.0,202.0,8.314102172851562],[113.0,202.0,22.491792678833008],[122.0,202.0,25.67093276977539],[131.0,202.0,25.65959930419922],[152.0,196.0,17.607336044311523],[131.0,199.0,27.57944679260254],[122.0,202.0,26.80080223083496],[113.0,202.0,24.226303100585938]],"Martin_Bandier_0001_9412.png":[[63.0,121.0,-65.37309265136719],[63.0,143.0,-64.64505004882812],[65.0,162.0,-63.10131072998047],[68.0,179.0,-58.94812774658203],[74.0,201.0,-47.4974250793457],[85.0,215.0,-28.67585563659668],[96.0,223.0,-6.62316370010376],[109.0,228.0,15.033751487731934],[134.0,234.0,26.035844802856445],[159.0,228.0,17.08003044128418],[178.0,223.0,-2.46199893951416],[192.0,217.0,-23.39816665649414],[205.0,204.0,-41.04132843017578],[214.0,187.0,-51.08419418334961],[219.0,171.0,-54.11995315551758],[225.0,151.0,-54.73630905151367],[227.0,132.0,-54.683284759521484],[76.0,102.0,5.609401226043701],[87.0,96.0,17.809030532836914],[98.0,96.0,25.773998260498047],[109.0,96.0,30.63453483581543],[120.0,96.0,32.800411224365234],[156.0,96.0,36.425437927246094],[167.0,96.0,35.66188049316406],[181.0,96.0,32.42750930786133],[192.0,99.0,26.462549209594727],[203.0,105.0,15.327049255371094],[137.0,118.0,33.622276306152344],[137.0,129.0,40.19166946411133],[134.0,140.0,49.35963439941406],[134.0,151.0,50.38871765136719],[120.0,160.0,31.231637954711914],[128.0,162.0,34.355201721191406],[134.0,162.0,36.49223327636719],[145.0,162.0,35.185462951660156],[150.0,160.0,32.73931121826172],[93.0,118.0,14.13566780090332],[101.0,116.0,22.39512825012207],[109.0,113.0,23.741657257080078],[117.0,118.0,21.19973373413086],[109.0,121.0,23.268537521362305],[101.0,121.0,20.586299896240234],[161.0,118.0,25.45779800415039],[170.0,113.0,29.320659637451172],[178.0,116.0,29.50352668762207],[186.0,118.0,21.957426071166992],[178.0,121.0,27.270540237426758],[167.0,121.0,28.569705963134766],[107.0,182.0,21.56089973449707],[115.0,179.0,31.159202575683594],[128.0,176.0,37.602928161621094],[134.0,179.0,38.916873931884766],[142.0,179.0,38.50923538208008],[156.0,182.0,33.15263748168945],[170.0,184.0,24.19475555419922],[156.0,190.0,34.02751159667969],[145.0,193.0,38.550209045410156],[134.0,193.0,39.023250579833984],[126.0,193.0,37.37254333496094],[117.0,190.0,31.93663787841797],[109.0,182.0,21.735275268554688],[126.0,184.0,33.94630813598633],[137.0,184.0,35.99415588378906],[145.0,184.0,34.99856948852539],[167.0,184.0,24.027576446533203],[145.0,184.0,36.92888259887695],[134.0,184.0,37.362281799316406],[126.0,184.0,35.78881072998047]],"Mel_Gibson_0002_9636.png":[[31.0,118.0,-2.9550893306732178],[36.0,139.0,-2.667202949523926],[41.0,158.0,-3.309368848800659],[47.0,173.0,-2.8674466609954834],[60.0,195.0,0.5379531979560852],[78.0,208.0,6.8468451499938965],[102.0,218.0,13.661532402038574],[129.0,226.0,16.51202392578125],[152.0,232.0,7.737005710601807],[166.0,224.0,-14.849297523498535],[166.0,216.0,-40.139617919921875],[160.0,205.0,-63.4443359375],[155.0,189.0,-82.52007293701172],[152.0,171.0,-92.49539947509766],[152.0,152.0,-96.97915649414062],[152.0,131.0,-100.56412506103516],[150.0,110.0,-102.95475006103516],[86.0,91.0,38.37003707885742],[102.0,86.0,41.894866943359375],[115.0,83.0,40.397464752197266],[126.0,83.0,37.24525451660156],[137.0,86.0,32.68013381958008],[166.0,83.0,8.698038101196289],[171.0,83.0,0.9768905639648438],[176.0,83.0,-9.498381614685059],[181.0,86.0,-22.676668167114258],[179.0,91.0,-38.2049674987793],[155.0,105.0,23.144948959350586],[160.0,118.0,29.64549446105957],[166.0,128.0,36.738407135009766],[168.0,139.0,37.75069046020508],[142.0,150.0,28.878965377807617],[150.0,150.0,27.837158203125],[158.0,152.0,24.27781105041504],[163.0,150.0,17.583341598510742],[166.0,147.0,10.795087814331055],[102.0,107.0,34.878822326660156],[113.0,102.0,36.4377555847168],[121.0,102.0,30.94145393371582],[126.0,107.0,23.007049560546875],[121.0,110.0,30.338083267211914],[113.0,110.0,35.04257583618164],[158.0,105.0,-2.0924415588378906],[166.0,102.0,-5.603616237640381],[174.0,102.0,-12.036636352539062],[174.0,105.0,-22.998979568481445],[174.0,107.0,-13.557750701904297],[166.0,107.0,-5.3837785720825195],[118.0,176.0,26.663448333740234],[137.0,168.0,30.426334381103516],[152.0,163.0,27.21775245666504],[158.0,163.0,23.104822158813477],[166.0,163.0,17.77894401550293],[171.0,165.0,1.9621200561523438],[171.0,171.0,-16.41786766052246],[168.0,181.0,-0.7907894849777222],[166.0,187.0,10.164527893066406],[158.0,189.0,17.966917037963867],[150.0,189.0,23.715682983398438],[137.0,184.0,25.680715560913086],[121.0,173.0,24.89003562927246],[147.0,171.0,25.607192993164062],[158.0,168.0,20.765199661254883],[163.0,168.0,12.706995964050293],[168.0,171.0,-15.33692741394043],[163.0,179.0,9.691545486450195],[158.0,181.0,17.176071166992188],[147.0,179.0,22.25572395324707]],"Miguel_Angel_Rodriguez_0001_9912.png":[[54.0,68.0,-42.45979309082031],[54.0,92.0,-49.5826301574707],[54.0,115.0,-55.79332733154297],[57.0,135.0,-59.33116912841797],[60.0,159.0,-57.03142547607422],[72.0,182.0,-45.75932312011719],[89.0,200.0,-29.281789779663086],[110.0,217.0,-13.761648178100586],[139.0,229.0,-9.994528770446777],[168.0,223.0,-22.58154296875],[185.0,208.0,-43.570491790771484],[200.0,194.0,-64.46328735351562],[209.0,176.0,-79.13212585449219],[217.0,156.0,-82.86824035644531],[223.0,135.0,-80.2246322631836],[232.0,115.0,-74.78620147705078],[238.0,92.0,-67.80895233154297],[92.0,74.0,37.68389892578125],[104.0,77.0,52.043670654296875],[118.0,77.0,59.127376556396484],[133.0,83.0,61.828956604003906],[142.0,86.0,61.20265197753906],[182.0,92.0,55.284610748291016],[194.0,89.0,52.78497314453125],[209.0,89.0,46.65754699707031],[220.0,92.0,36.06510925292969],[229.0,92.0,18.42976188659668],[159.0,109.0,52.191322326660156],[159.0,127.0,55.90726089477539],[159.0,141.0,60.87660217285156],[159.0,153.0,58.1236457824707],[136.0,147.0,32.37248992919922],[145.0,153.0,34.84940719604492],[153.0,156.0,35.226722717285156],[165.0,156.0,32.414764404296875],[171.0,153.0,28.114261627197266],[107.0,95.0,36.662654876708984],[115.0,98.0,45.565467834472656],[127.0,101.0,44.66267013549805],[136.0,103.0,38.028995513916016],[127.0,106.0,41.371986389160156],[115.0,103.0,40.59615707397461],[180.0,109.0,32.01942443847656],[191.0,109.0,35.80430221557617],[200.0,109.0,33.73044967651367],[209.0,109.0,22.261281967163086],[200.0,115.0,28.547409057617188],[188.0,115.0,32.59733963012695],[107.0,162.0,7.68004035949707],[124.0,162.0,21.82286834716797],[145.0,165.0,29.717941284179688],[150.0,165.0,29.215816497802734],[162.0,165.0,28.041715621948242],[177.0,168.0,16.328580856323242],[185.0,170.0,-1.8884063959121704],[171.0,185.0,8.578341484069824],[159.0,191.0,14.658515930175781],[147.0,191.0,16.984785079956055],[136.0,188.0,17.13002586364746],[124.0,179.0,13.756457328796387],[110.0,162.0,7.356316566467285],[139.0,168.0,23.039575576782227],[150.0,170.0,23.86418914794922],[162.0,173.0,20.56334686279297],[182.0,170.0,-1.3613767623901367],[159.0,182.0,16.720003128051758],[147.0,182.0,19.093835830688477],[139.0,179.0,19.065034866333008]],"Owen_Wilson_0002_10664.png":[[59.0,102.0,-21.243762969970703],[64.0,123.0,-25.366979598999023],[67.0,141.0,-29.538850784301758],[72.0,159.0,-31.87116813659668],[82.0,179.0,-29.50519561767578],[98.0,197.0,-21.61178207397461],[116.0,207.0,-10.408528327941895],[136.0,220.0,-1.885507583618164],[162.0,228.0,-4.386058807373047],[180.0,218.0,-20.011940002441406],[185.0,202.0,-39.94613265991211],[188.0,189.0,-59.84038162231445],[190.0,169.0,-74.894287109375],[193.0,148.0,-80.55574798583984],[195.0,130.0,-80.55134582519531],[200.0,115.0,-78.93417358398438],[200.0,94.0,-75.78621673583984],[100.0,94.0,38.169158935546875],[113.0,89.0,46.922264099121094],[128.0,87.0,50.022220611572266],[139.0,87.0,49.92811584472656],[149.0,89.0,47.58958435058594],[185.0,87.0,34.57915496826172],[193.0,82.0,30.142242431640625],[200.0,79.0,22.56153678894043],[208.0,79.0,11.584891319274902],[211.0,82.0,-3.6469027996063232],[170.0,110.0,37.8112907409668],[172.0,128.0,42.05117416381836],[177.0,141.0,47.863712310791016],[177.0,151.0,46.86157989501953],[154.0,153.0,31.895654678344727],[162.0,156.0,32.64586639404297],[170.0,159.0,31.2083740234375],[177.0,156.0,26.80669403076172],[180.0,153.0,21.87879753112793],[116.0,110.0,36.50224304199219],[126.0,107.0,41.755741119384766],[136.0,107.0,38.944122314453125],[141.0,110.0,32.12401580810547],[136.0,112.0,36.855350494384766],[126.0,112.0,38.63181686401367],[180.0,107.0,18.915437698364258],[190.0,102.0,19.264719009399414],[198.0,102.0,15.433978080749512],[200.0,105.0,4.7589192390441895],[198.0,107.0,11.944266319274902],[188.0,110.0,17.54715347290039],[134.0,174.0,22.057518005371094],[149.0,171.0,30.601415634155273],[164.0,166.0,32.62217712402344],[170.0,169.0,30.74959945678711],[175.0,166.0,27.59368133544922],[185.0,169.0,14.901169776916504],[185.0,174.0,-2.4239187240600586],[182.0,187.0,7.878442287445068],[177.0,195.0,14.520737648010254],[167.0,197.0,19.051616668701172],[157.0,197.0,22.247385025024414],[146.0,189.0,22.729080200195312],[136.0,174.0,21.341617584228516],[159.0,174.0,28.571256637573242],[167.0,174.0,26.78837776184082],[175.0,174.0,21.358505249023438],[185.0,174.0,-1.5108582973480225],[175.0,187.0,16.332590103149414],[167.0,189.0,20.710247039794922],[157.0,187.0,23.43580436706543]],"Sadie_Frost_0002_12236.png":[[43.0,110.0,-46.02598190307617],[49.0,134.0,-50.22691345214844],[55.0,154.0,-54.00772476196289],[64.0,171.0,-55.88381576538086],[73.0,192.0,-51.39228820800781],[90.0,209.0,-38.368595123291016],[108.0,221.0,-21.556013107299805],[131.0,233.0,-6.431150436401367],[160.0,239.0,-1.1526600122451782],[187.0,224.0,-13.746787071228027],[198.0,207.0,-33.85028839111328],[207.0,189.0,-53.560306549072266],[213.0,169.0,-68.61043548583984],[216.0,145.0,-74.07164764404297],[219.0,125.0,-73.03618621826172],[219.0,104.0,-70.54234313964844],[219.0,81.0,-66.82637786865234],[73.0,96.0,35.09419250488281],[84.0,90.0,48.202972412109375],[99.0,87.0,55.006980895996094],[114.0,87.0,57.74137878417969],[125.0,87.0,57.095542907714844],[169.0,78.0,52.34587860107422],[181.0,72.0,50.398277282714844],[192.0,66.0,44.81260299682617],[204.0,66.0,35.284515380859375],[213.0,66.0,19.477773666381836],[151.0,107.0,48.60774612426758],[154.0,125.0,53.40505599975586],[157.0,139.0,60.78512191772461],[160.0,151.0,59.40488052368164],[140.0,157.0,36.827823638916016],[149.0,157.0,38.765625],[157.0,157.0,39.05522537231445],[166.0,154.0,36.21161651611328],[172.0,148.0,32.36823272705078],[93.0,110.0,38.026493072509766],[105.0,107.0,46.511924743652344],[114.0,104.0,45.97248077392578],[122.0,107.0,39.76427459716797],[116.0,110.0,43.69316101074219],[105.0,113.0,43.01232147216797],[172.0,98.0,34.90428161621094],[181.0,93.0,38.591400146484375],[192.0,90.0,36.841041564941406],[198.0,93.0,26.039823532104492],[192.0,98.0,32.86278533935547],[181.0,98.0,36.44768524169922],[114.0,180.0,13.682698249816895],[131.0,174.0,29.0455265045166],[151.0,169.0,37.02834701538086],[157.0,169.0,36.82743835449219],[166.0,166.0,34.820980072021484],[181.0,166.0,20.959548950195312],[189.0,169.0,0.6888017654418945],[184.0,189.0,10.8884859085083],[175.0,201.0,18.23310089111328],[163.0,204.0,21.218435287475586],[149.0,204.0,21.746076583862305],[134.0,198.0,18.20676040649414],[116.0,180.0,12.841014862060547],[146.0,177.0,31.248977661132812],[157.0,174.0,32.05494689941406],[169.0,171.0,27.548999786376953],[187.0,169.0,0.3560405969619751],[172.0,189.0,19.1156005859375],[160.0,192.0,22.56888771057129],[149.0,192.0,22.62162971496582]],"Tony_Blair_0133_13648.png":[[28.0,35.0,-114.78353118896484],[28.0,56.0,-117.0096206665039],[30.0,77.0,-117.85218048095703],[28.0,95.0,-116.64053344726562],[25.0,119.0,-109.63522338867188],[20.0,142.0,-91.96292877197266],[12.0,163.0,-69.02586364746094],[4.0,179.0,-43.47087860107422],[17.0,192.0,-19.292436599731445],[38.0,187.0,-4.95521354675293],[67.0,179.0,-3.8730266094207764],[93.0,166.0,-5.7884602546691895],[114.0,145.0,-5.7592878341674805],[127.0,121.0,-3.3975744247436523],[132.0,103.0,0.7643616795539856],[135.0,80.0,6.597561359405518],[138.0,56.0,11.115669250488281],[-13.0,30.0,-47.145782470703125],[-21.0,30.0,-29.913450241088867],[-19.0,30.0,-14.542082786560059],[-16.0,32.0,-2.5428059101104736],[-11.0,38.0,6.405983924865723],[17.0,43.0,36.266361236572266],[25.0,40.0,42.780643463134766],[38.0,40.0,48.210636138916016],[54.0,43.0,51.576744079589844],[70.0,48.0,48.710269927978516],[1.0,64.0,18.72914695739746],[-6.0,82.0,22.138294219970703],[-11.0,101.0,25.75322723388672],[-13.0,114.0,24.547555923461914],[-6.0,116.0,-4.2706618309021],[-6.0,121.0,2.8793535232543945],[0.0,124.0,9.930088996887207],[7.0,121.0,14.941959381103516],[14.0,121.0,16.764404296875],[-8.0,51.0,-33.40031051635742],[-11.0,48.0,-21.259601593017578],[-6.0,51.0,-13.4171781539917],[4.0,56.0,-9.602275848388672],[-3.0,59.0,-14.66192626953125],[-8.0,56.0,-24.096799850463867],[30.0,64.0,21.700273513793945],[35.0,61.0,31.827836990356445],[43.0,64.0,38.890464782714844],[54.0,66.0,37.976531982421875],[46.0,69.0,35.73036193847656],[35.0,66.0,29.375158309936523],[-6.0,135.0,-31.20798683166504],[-8.0,137.0,-14.465958595275879],[-3.0,140.0,0.3486156761646271],[1.0,142.0,5.642735481262207],[4.0,140.0,10.870265007019043],[20.0,142.0,16.053525924682617],[35.0,145.0,15.69095516204834],[20.0,150.0,13.479714393615723],[9.0,156.0,9.445561408996582],[1.0,153.0,2.799577236175537],[-3.0,150.0,-5.415865898132324],[-6.0,145.0,-15.440103530883789],[-6.0,135.0,-29.30402183532715],[0.0,145.0,-5.810694694519043],[4.0,145.0,2.0995430946350098],[12.0,145.0,7.975824356079102],[33.0,145.0,13.971905708312988],[9.0,145.0,8.455390930175781],[1.0,145.0,2.259183406829834],[-3.0,142.0,-5.021042823791504]]} \ No newline at end of file diff --git a/site/public/assets/data/faces/brad_smith_1_0.drc b/site/public/assets/data/faces/brad_smith_1_0.drc new file mode 100644 index 00000000..8266f10e Binary files /dev/null and b/site/public/assets/data/faces/brad_smith_1_0.drc differ diff --git a/site/public/assets/data/faces/bush_1_0.drc b/site/public/assets/data/faces/bush_1_0.drc new file mode 100644 index 00000000..95251f4f Binary files /dev/null and b/site/public/assets/data/faces/bush_1_0.drc differ diff --git a/site/public/assets/data/faces/george_tenet_1_0.drc b/site/public/assets/data/faces/george_tenet_1_0.drc new file mode 100644 index 00000000..e6ebdf03 Binary files /dev/null and b/site/public/assets/data/faces/george_tenet_1_0.drc differ diff --git a/site/public/assets/data/faces/john_ashcroft_1_0.drc b/site/public/assets/data/faces/john_ashcroft_1_0.drc new file mode 100644 index 00000000..8cfe1f9e Binary files /dev/null and b/site/public/assets/data/faces/john_ashcroft_1_0.drc differ diff --git a/site/public/assets/data/faces/macron_1_0.drc b/site/public/assets/data/faces/macron_1_0.drc new file mode 100644 index 00000000..abe068f4 Binary files /dev/null and b/site/public/assets/data/faces/macron_1_0.drc differ diff --git a/site/public/assets/data/faces/macron_2_0.drc b/site/public/assets/data/faces/macron_2_0.drc new file mode 100644 index 00000000..b3af9d9d Binary files /dev/null and b/site/public/assets/data/faces/macron_2_0.drc differ diff --git a/site/public/assets/data/faces/macron_4_0.drc b/site/public/assets/data/faces/macron_4_0.drc new file mode 100644 index 00000000..964822ff Binary files /dev/null and b/site/public/assets/data/faces/macron_4_0.drc differ diff --git a/site/public/assets/data/faces/may.drc b/site/public/assets/data/faces/may.drc new file mode 100644 index 00000000..819ebbf6 Binary files /dev/null and b/site/public/assets/data/faces/may.drc differ diff --git a/site/public/assets/data/faces/putin.drc b/site/public/assets/data/faces/putin.drc new file mode 100644 index 00000000..d50fb2ca Binary files /dev/null and b/site/public/assets/data/faces/putin.drc differ diff --git a/site/public/assets/data/faces/putin_0.drc b/site/public/assets/data/faces/putin_0.drc new file mode 100644 index 00000000..6d4ada4c Binary files /dev/null and b/site/public/assets/data/faces/putin_0.drc differ diff --git a/site/public/assets/data/faces/putin_1_0.drc b/site/public/assets/data/faces/putin_1_0.drc new file mode 100644 index 00000000..e1acb6e2 Binary files /dev/null and b/site/public/assets/data/faces/putin_1_0.drc differ diff --git a/site/public/assets/data/faces/putin_2_0.drc b/site/public/assets/data/faces/putin_2_0.drc new file mode 100644 index 00000000..e539d799 Binary files /dev/null and b/site/public/assets/data/faces/putin_2_0.drc differ diff --git a/site/public/assets/data/faces/putin_3_0.drc b/site/public/assets/data/faces/putin_3_0.drc new file mode 100644 index 00000000..b4aa4382 Binary files /dev/null and b/site/public/assets/data/faces/putin_3_0.drc differ diff --git a/site/public/assets/data/faces/putin_4_0.drc b/site/public/assets/data/faces/putin_4_0.drc new file mode 100644 index 00000000..f93bdfdc Binary files /dev/null and b/site/public/assets/data/faces/putin_4_0.drc differ diff --git a/site/public/assets/data/faces/trudeau_1_0.drc b/site/public/assets/data/faces/trudeau_1_0.drc new file mode 100644 index 00000000..a76c4244 Binary files /dev/null and b/site/public/assets/data/faces/trudeau_1_0.drc differ diff --git a/site/public/assets/data/faces/trudeau_2_0.drc b/site/public/assets/data/faces/trudeau_2_0.drc new file mode 100644 index 00000000..45fc9588 Binary files /dev/null and b/site/public/assets/data/faces/trudeau_2_0.drc differ diff --git a/site/public/assets/data/faces/trudeau_3_0.drc b/site/public/assets/data/faces/trudeau_3_0.drc new file mode 100644 index 00000000..a4de31c7 Binary files /dev/null and b/site/public/assets/data/faces/trudeau_3_0.drc differ diff --git a/site/public/assets/data/faces/trudeau_4_0.drc b/site/public/assets/data/faces/trudeau_4_0.drc new file mode 100644 index 00000000..dbc74557 Binary files /dev/null and b/site/public/assets/data/faces/trudeau_4_0.drc differ diff --git a/site/public/assets/data/faces/trudeau_5_0.drc b/site/public/assets/data/faces/trudeau_5_0.drc new file mode 100644 index 00000000..958db58b Binary files /dev/null and b/site/public/assets/data/faces/trudeau_5_0.drc differ diff --git a/site/public/assets/data/faces/trump_1_0.drc b/site/public/assets/data/faces/trump_1_0.drc new file mode 100644 index 00000000..2f78607b Binary files /dev/null and b/site/public/assets/data/faces/trump_1_0.drc differ diff --git a/site/public/assets/data/faces/trump_2_0.drc b/site/public/assets/data/faces/trump_2_0.drc new file mode 100644 index 00000000..129b6c61 Binary files /dev/null and b/site/public/assets/data/faces/trump_2_0.drc differ diff --git a/site/public/assets/data/faces/trump_3_0.drc b/site/public/assets/data/faces/trump_3_0.drc new file mode 100644 index 00000000..bd4956a4 Binary files /dev/null and b/site/public/assets/data/faces/trump_3_0.drc differ diff --git a/site/public/assets/data/faces/trump_3_1.drc b/site/public/assets/data/faces/trump_3_1.drc new file mode 100644 index 00000000..79ddca44 Binary files /dev/null and b/site/public/assets/data/faces/trump_3_1.drc differ diff --git a/site/public/assets/data/faces/trump_4_0.drc b/site/public/assets/data/faces/trump_4_0.drc new file mode 100644 index 00000000..dd4c8756 Binary files /dev/null and b/site/public/assets/data/faces/trump_4_0.drc differ diff --git a/site/public/assets/data/faces/xi.drc b/site/public/assets/data/faces/xi.drc new file mode 100644 index 00000000..ef90c1c7 Binary files /dev/null and b/site/public/assets/data/faces/xi.drc differ diff --git a/site/public/assets/data/faces/xi_1_0.drc b/site/public/assets/data/faces/xi_1_0.drc new file mode 100644 index 00000000..feb96781 Binary files /dev/null and b/site/public/assets/data/faces/xi_1_0.drc differ diff --git a/site/public/assets/data/faces/xi_2_0.drc b/site/public/assets/data/faces/xi_2_0.drc new file mode 100644 index 00000000..38a30922 Binary files /dev/null and b/site/public/assets/data/faces/xi_2_0.drc differ diff --git a/site/public/assets/demo/cloud/.gitignore b/site/public/assets/demo/cloud/.gitignore new file mode 100644 index 00000000..2ccbe465 --- /dev/null +++ b/site/public/assets/demo/cloud/.gitignore @@ -0,0 +1 @@ +/node_modules/ diff --git a/site/public/assets/demo/cloud/.npmignore b/site/public/assets/demo/cloud/.npmignore new file mode 100644 index 00000000..dcaf4a28 --- /dev/null +++ b/site/public/assets/demo/cloud/.npmignore @@ -0,0 +1,4 @@ +/demo/ +/index.html +/rollup.config.js +/src/ diff --git a/site/public/assets/demo/cloud/LICENSE b/site/public/assets/demo/cloud/LICENSE new file mode 100644 index 00000000..edeba37c --- /dev/null +++ b/site/public/assets/demo/cloud/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2017-2018 Sergej Sintschilin + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/site/public/assets/demo/cloud/README.md b/site/public/assets/demo/cloud/README.md new file mode 100644 index 00000000..de6e882e --- /dev/null +++ b/site/public/assets/demo/cloud/README.md @@ -0,0 +1,109 @@ +# THREE.TextSprite + +`class THREE.TextSprite extends THREE.Sprite` + +An instance of `TextSprite` automatically computes the optimal font size depending on the distance to the camera and the size of the renderer canvas. + +## demo + +[Try it out!](https://seregpie.github.io/THREE.TextSprite/) + +## dependencies + +- [THREE.TextTexture](https://github.com/SeregPie/THREE.TextTexture) + +## setup + +### npm + +```shell +npm install three.textsprite +``` + +### ES module + +```javascript +import TextSprite from 'three.textsprite'; +``` + +### browser + +```html + + + +``` + +The class `TextSprite` will be available under the namespace `THREE`. + +## members + +``` +.constructor({ + material, + maxFontSize, + minFontSize, + redrawInterval, + textSize, + texture, +}) +``` + +| argument | description | +| ---: | :--- | +| `material` | The parameters to pass to the constructor of [`SpriteMaterial`](https://threejs.org/docs/index.html#api/materials/SpriteMaterial). | +| `texture` | The parameters to pass to the constructor of [`TextTexture`](https://github.com/SeregPie/THREE.TextTexture). | + +```javascript +let sprite = new THREE.TextSprite({ + material: { + color: 0xffbbff, + fog: true, + }, + redrawInterval: 250, + textSize: 10, + texture: { + text: 'Carpe Diem', + fontFamily: 'Arial, Helvetica, sans-serif', + }, +}); +scene.add(sprite); +``` + +--- + +`.isTextSprite = true` + +Used to check whether this is an instance of `TextSprite`. + +You should not change this, as it is used internally for optimisation. + +--- + +`.textSize = 1` + +The size of the text. + +--- + +`.redrawInterval = 1` + +The minimum time that must elapse before the canvas is redrawn. If 0, the canvas is redrawn immediately whenever `TextSprite` is rendered, otherwise the redrawing is deferred. + +--- + +`.minFontSize = 0` + +The minimum font size. + +--- + +`.maxFontSize = Infinity` + +The maximum font size. + +--- + +`.dispose()` + +Disposes the texture and the material. diff --git a/site/public/assets/demo/cloud/THREE.TextSprite.js b/site/public/assets/demo/cloud/THREE.TextSprite.js new file mode 100644 index 00000000..525d22cd --- /dev/null +++ b/site/public/assets/demo/cloud/THREE.TextSprite.js @@ -0,0 +1 @@ +(function(a,b){"object"==typeof exports&&"undefined"!=typeof module?module.exports=b(require("three"),require("three.texttexture")):"function"==typeof define&&define.amd?define(["three","three.texttexture"],b):(a.THREE=a.THREE||{},a.THREE.TextSprite=b(a.THREE,a.THREE.TextTexture))})(this,function(a,b){"use strict";function c(a,b,c){var g=Math.round;if(b.domElement.width&&b.domElement.height&&a.material.map.textLines.length){var h=a.getWorldPosition(d).distanceTo(c.getWorldPosition(e));if(h){var i=a.getWorldScale(f).y*b.domElement.height/h;if(i)return g(i/a.material.map.imageHeight)}}return 0}b=b&&b.hasOwnProperty("default")?b["default"]:b;var d=new a.Vector3,e=new a.Vector3,f=new a.Vector3,g=function(d){function e(c){void 0===c&&(c={});var e=c.textSize;void 0===e&&(e=1);var f=c.redrawInterval;void 0===f&&(f=1);var g=c.minFontSize;void 0===g&&(g=0);var h=c.maxFontSize;void 0===h&&(h=1/0);var i=c.material;void 0===i&&(i={});var j=c.texture;void 0===j&&(j={}),d.call(this,new a.SpriteMaterial(Object.assign({},i,{map:new b(j)}))),this.textSize=e,this.redrawInterval=f,this.minFontSize=g,this.maxFontSize=h,this.lastRedraw=0}d&&(e.__proto__=d),e.prototype=Object.create(d&&d.prototype),e.prototype.constructor=e;var f={isTextSprite:{configurable:!0}};return f.isTextSprite.get=function(){return!0},e.prototype.onBeforeRender=function(a,b,c){this.redraw(a,c)},e.prototype.updateScale=function(){this.scale.set(this.material.map.imageAspect,1,1).multiplyScalar(this.textSize*this.material.map.imageHeight)},e.prototype.updateMatrix=function(){for(var a=[],b=arguments.length;b--;)a[b]=arguments[b];return this.updateScale(),d.prototype.updateMatrix.apply(this,a)},e.prototype.redraw=function(a,b){var c=this;this.lastRedraw+this.redrawInterval + + + + + Megapixels Datasets + + + + + + + + + + + + diff --git a/site/public/assets/demo/cloud/package.json b/site/public/assets/demo/cloud/package.json new file mode 100644 index 00000000..f7556104 --- /dev/null +++ b/site/public/assets/demo/cloud/package.json @@ -0,0 +1,40 @@ +{ + "name": "three.textsprite", + "version": "18.10.24", + "description": "Automatically computes the optimal font size depending on the distance to the camera and the size of the renderer canvas.", + "keywords": [ + "3d", + "canvas", + "class", + "font", + "group", + "object", + "plugin", + "resolution", + "scale", + "size", + "text", + "texture", + "three" + ], + "license": "MIT", + "author": "Sergej Sintschilin ", + "main": "THREE.TextSprite.js", + "repository": "https://github.com/SeregPie/THREE.TextSprite.git", + "scripts": { + "build": "rollup -c", + "dev": "rollup -c -w", + "prepublishOnly": "npm run build" + }, + "dependencies": { + "three.texttexture": "^18.10.24" + }, + "devDependencies": { + "rollup": "^0.66.6", + "rollup-plugin-babel-minify": "^6.1.1", + "rollup-plugin-buble": "^0.19.4" + }, + "peerDependencies": { + "three": "^0.97.0" + } +} diff --git a/site/public/assets/demo/cloud/rollup.config.js b/site/public/assets/demo/cloud/rollup.config.js new file mode 100644 index 00000000..57415169 --- /dev/null +++ b/site/public/assets/demo/cloud/rollup.config.js @@ -0,0 +1,25 @@ +import buble from 'rollup-plugin-buble'; +import minify from 'rollup-plugin-babel-minify'; +import path from 'path'; + +import {main} from './package.json'; + +let globals = { + 'three': 'THREE', + 'three.texttexture': 'THREE.TextTexture', +}; + +export default { + input: 'src/index.js', + external: Object.keys(globals), + output: { + file: main, + format: 'umd', + name: path.basename(main, path.extname(main)), + globals, + }, + plugins: [ + buble({objectAssign: 'Object.assign'}), + minify({comments: false}), + ], +}; diff --git a/site/public/assets/demo/cloud/src/getOptimalFontSize.js b/site/public/assets/demo/cloud/src/getOptimalFontSize.js new file mode 100644 index 00000000..02787516 --- /dev/null +++ b/site/public/assets/demo/cloud/src/getOptimalFontSize.js @@ -0,0 +1,18 @@ +import {Vector3} from 'three'; + +let objectWorldPosition = new Vector3(); +let cameraWorldPosition = new Vector3(); +let objectWorldScale = new Vector3(); + +export default function(object, renderer, camera) { + if (renderer.domElement.width && renderer.domElement.height && object.material.map.textLines.length) { + let distance = object.getWorldPosition(objectWorldPosition).distanceTo(camera.getWorldPosition(cameraWorldPosition)); + if (distance) { + let heightInPixels = object.getWorldScale(objectWorldScale).y * renderer.domElement.height / distance; + if (heightInPixels) { + return Math.round(heightInPixels / object.material.map.imageHeight); + } + } + } + return 0; +} diff --git a/site/public/assets/demo/cloud/src/index.js b/site/public/assets/demo/cloud/src/index.js new file mode 100644 index 00000000..270891d5 --- /dev/null +++ b/site/public/assets/demo/cloud/src/index.js @@ -0,0 +1,78 @@ +import { + Math as THREE_Math, + Sprite, + SpriteMaterial, +} from 'three'; +import TextTexture from 'three.texttexture'; + +import getOptimalFontSize from './getOptimalFontSize'; + +export default class extends Sprite { + constructor({ + textSize = 1, + redrawInterval = 1, + minFontSize = 0, + maxFontSize = Infinity, + material = {}, + texture = {}, + } = {}) { + super(new SpriteMaterial({ + ...material, + map: new TextTexture(texture), + })); + this.textSize = textSize; + this.redrawInterval = redrawInterval; + this.minFontSize = minFontSize; + this.maxFontSize = maxFontSize; + this.lastRedraw = 0; + } + + get isTextSprite() { + return true; + } + + onBeforeRender(renderer, scene, camera) { + this.redraw(renderer, camera); + } + + updateScale() { + this.scale + .set(this.material.map.imageAspect, 1, 1) + .multiplyScalar(this.textSize * this.material.map.imageHeight); + } + + updateMatrix(...args) { + this.updateScale(); + return super.updateMatrix(...args); + } + + redraw(renderer, camera) { + if (this.lastRedraw + this.redrawInterval < Date.now()) { + if (this.redrawInterval) { + setTimeout(() => { + this.redrawNow(renderer, camera); + }, 1); + } else { + this.redrawNow(renderer, camera); + } + } + } + + redrawNow(renderer, camera) { + this.updateScale(); + this.material.map.autoRedraw = true; + this.material.map.fontSize = THREE_Math.clamp( + THREE_Math.ceilPowerOfTwo( + getOptimalFontSize(this, renderer, camera) + ), + this.minFontSize, + this.maxFontSize, + ); + this.lastRedraw = Date.now(); + } + + dispose() { + this.material.map.dispose(); + this.material.dispose(); + } +} diff --git a/site/public/assets/demo/splash/index.html b/site/public/assets/demo/splash/index.html new file mode 100644 index 00000000..32517d97 --- /dev/null +++ b/site/public/assets/demo/splash/index.html @@ -0,0 +1,58 @@ + + + + MegaPixels + + + + + + + + + + +
+ + +
MegaPixels
+
+ +
+
+
+
+
+
+
+

+ MegaPixels is an online art project that explores the history of face recognition from the perspective of datasets. MegaPixels aims to unravel the meanings behind the data and expose the darker corners of the biometric industry that have contributed to its growth. +

+

+ Through a mix of case studies, visualizations, and interactive tools, Megapixels will use face recognition datasets to tell the history of modern biometrics. Many people have contributed to the development of face recognition technology, both wittingly and unwittingly. Not only scientists, but also celebrities and regular internet users have played a part. +

+

+ Face recognition is a mess of contradictions. It works, yet it doesn't actually work. It's cheap and accessible, but also expensive and out of control. Face recognition research has achieved headline grabbing superhuman accuracies over 99.9%, yet in practice it's also dangerously inaccurate. +

+

+ During a trial installation at Sudkreuz station in Berlin in 2018, 20% of the matches were wrong, a number so low that it should not have any connection to law enforcement or justice. And in London, the Metropolitan police had been using face recognition software that mistakenly identified an alarming 98% of people as criminals, which perhaps is a crime itself. +

+

+ MegaPixels was created by Adam Harvey and will launch in May 2019. +

+
+
+
+
+
+
+ MegaPixels ©2017-19 Adam R. Harvey /  + ahprojects.com +
+
+ + + \ No newline at end of file diff --git a/site/public/assets/fonts/Roboto_300.eot b/site/public/assets/fonts/Roboto_300.eot new file mode 100644 index 00000000..17b7d5cd Binary files /dev/null and b/site/public/assets/fonts/Roboto_300.eot differ diff --git a/site/public/assets/fonts/Roboto_300.svg b/site/public/assets/fonts/Roboto_300.svg new file mode 100644 index 00000000..4ded944a --- /dev/null +++ b/site/public/assets/fonts/Roboto_300.svg @@ -0,0 +1,312 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/site/public/assets/fonts/Roboto_300.ttf b/site/public/assets/fonts/Roboto_300.ttf new file mode 100644 index 00000000..a22188ee Binary files /dev/null and b/site/public/assets/fonts/Roboto_300.ttf differ diff --git a/site/public/assets/fonts/Roboto_300.woff b/site/public/assets/fonts/Roboto_300.woff new file mode 100644 index 00000000..96663f07 Binary files /dev/null and b/site/public/assets/fonts/Roboto_300.woff differ diff --git a/site/public/assets/fonts/Roboto_300.woff2 b/site/public/assets/fonts/Roboto_300.woff2 new file mode 100644 index 00000000..52c5845a Binary files /dev/null and b/site/public/assets/fonts/Roboto_300.woff2 differ diff --git a/site/public/assets/fonts/Roboto_400.eot b/site/public/assets/fonts/Roboto_400.eot new file mode 100644 index 00000000..a0780d6e Binary files /dev/null and b/site/public/assets/fonts/Roboto_400.eot differ diff --git a/site/public/assets/fonts/Roboto_400.svg b/site/public/assets/fonts/Roboto_400.svg new file mode 100644 index 00000000..627f5a36 --- /dev/null +++ b/site/public/assets/fonts/Roboto_400.svg @@ -0,0 +1,308 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/site/public/assets/fonts/Roboto_400.ttf b/site/public/assets/fonts/Roboto_400.ttf new file mode 100644 index 00000000..b91bf3f7 Binary files /dev/null and b/site/public/assets/fonts/Roboto_400.ttf differ diff --git a/site/public/assets/fonts/Roboto_400.woff b/site/public/assets/fonts/Roboto_400.woff new file mode 100644 index 00000000..92dfacc6 Binary files /dev/null and b/site/public/assets/fonts/Roboto_400.woff differ diff --git a/site/public/assets/fonts/Roboto_400.woff2 b/site/public/assets/fonts/Roboto_400.woff2 new file mode 100644 index 00000000..7e854e66 Binary files /dev/null and b/site/public/assets/fonts/Roboto_400.woff2 differ diff --git a/site/public/assets/fonts/Roboto_500.eot b/site/public/assets/fonts/Roboto_500.eot new file mode 100644 index 00000000..849f4a50 Binary files /dev/null and b/site/public/assets/fonts/Roboto_500.eot differ diff --git a/site/public/assets/fonts/Roboto_500.svg b/site/public/assets/fonts/Roboto_500.svg new file mode 100644 index 00000000..67eecf44 --- /dev/null +++ b/site/public/assets/fonts/Roboto_500.svg @@ -0,0 +1,305 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/site/public/assets/fonts/Roboto_500.ttf b/site/public/assets/fonts/Roboto_500.ttf new file mode 100644 index 00000000..55b559f6 Binary files /dev/null and b/site/public/assets/fonts/Roboto_500.ttf differ diff --git a/site/public/assets/fonts/Roboto_500.woff b/site/public/assets/fonts/Roboto_500.woff new file mode 100644 index 00000000..2633e152 Binary files /dev/null and b/site/public/assets/fonts/Roboto_500.woff differ diff --git a/site/public/assets/fonts/Roboto_500.woff2 b/site/public/assets/fonts/Roboto_500.woff2 new file mode 100644 index 00000000..8dceabcf Binary files /dev/null and b/site/public/assets/fonts/Roboto_500.woff2 differ diff --git a/site/public/assets/fonts/Roboto_700.eot b/site/public/assets/fonts/Roboto_700.eot new file mode 100644 index 00000000..0df88af1 Binary files /dev/null and b/site/public/assets/fonts/Roboto_700.eot differ diff --git a/site/public/assets/fonts/Roboto_700.svg b/site/public/assets/fonts/Roboto_700.svg new file mode 100644 index 00000000..11db87dd --- /dev/null +++ b/site/public/assets/fonts/Roboto_700.svg @@ -0,0 +1,309 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/site/public/assets/fonts/Roboto_700.ttf b/site/public/assets/fonts/Roboto_700.ttf new file mode 100644 index 00000000..031bf06c Binary files /dev/null and b/site/public/assets/fonts/Roboto_700.ttf differ diff --git a/site/public/assets/fonts/Roboto_700.woff b/site/public/assets/fonts/Roboto_700.woff new file mode 100644 index 00000000..a0d26516 Binary files /dev/null and b/site/public/assets/fonts/Roboto_700.woff differ diff --git a/site/public/assets/fonts/Roboto_700.woff2 b/site/public/assets/fonts/Roboto_700.woff2 new file mode 100644 index 00000000..e327dc95 Binary files /dev/null and b/site/public/assets/fonts/Roboto_700.woff2 differ diff --git a/site/public/assets/fonts/Roboto_Mono_300.eot b/site/public/assets/fonts/Roboto_Mono_300.eot new file mode 100644 index 00000000..f44d93dd Binary files /dev/null and b/site/public/assets/fonts/Roboto_Mono_300.eot differ diff --git a/site/public/assets/fonts/Roboto_Mono_300.svg b/site/public/assets/fonts/Roboto_Mono_300.svg new file mode 100644 index 00000000..e8645765 --- /dev/null +++ b/site/public/assets/fonts/Roboto_Mono_300.svg @@ -0,0 +1,392 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/site/public/assets/fonts/Roboto_Mono_300.ttf b/site/public/assets/fonts/Roboto_Mono_300.ttf new file mode 100644 index 00000000..6c101fe4 Binary files /dev/null and b/site/public/assets/fonts/Roboto_Mono_300.ttf differ diff --git a/site/public/assets/fonts/Roboto_Mono_300.woff b/site/public/assets/fonts/Roboto_Mono_300.woff new file mode 100644 index 00000000..68d8403e Binary files /dev/null and b/site/public/assets/fonts/Roboto_Mono_300.woff differ diff --git a/site/public/assets/fonts/Roboto_Mono_300.woff2 b/site/public/assets/fonts/Roboto_Mono_300.woff2 new file mode 100644 index 00000000..ab64df38 Binary files /dev/null and b/site/public/assets/fonts/Roboto_Mono_300.woff2 differ diff --git a/site/public/assets/fonts/Roboto_Mono_400.eot b/site/public/assets/fonts/Roboto_Mono_400.eot new file mode 100644 index 00000000..550df22a Binary files /dev/null and b/site/public/assets/fonts/Roboto_Mono_400.eot differ diff --git a/site/public/assets/fonts/Roboto_Mono_400.svg b/site/public/assets/fonts/Roboto_Mono_400.svg new file mode 100644 index 00000000..f384d9ce --- /dev/null +++ b/site/public/assets/fonts/Roboto_Mono_400.svg @@ -0,0 +1,390 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/site/public/assets/fonts/Roboto_Mono_400.ttf b/site/public/assets/fonts/Roboto_Mono_400.ttf new file mode 100644 index 00000000..27363d17 Binary files /dev/null and b/site/public/assets/fonts/Roboto_Mono_400.ttf differ diff --git a/site/public/assets/fonts/Roboto_Mono_400.woff b/site/public/assets/fonts/Roboto_Mono_400.woff new file mode 100644 index 00000000..0ea5db89 Binary files /dev/null and b/site/public/assets/fonts/Roboto_Mono_400.woff differ diff --git a/site/public/assets/fonts/Roboto_Mono_400.woff2 b/site/public/assets/fonts/Roboto_Mono_400.woff2 new file mode 100644 index 00000000..6163de7b Binary files /dev/null and b/site/public/assets/fonts/Roboto_Mono_400.woff2 differ diff --git a/site/public/assets/fonts/Roboto_Mono_500.eot b/site/public/assets/fonts/Roboto_Mono_500.eot new file mode 100644 index 00000000..fb603779 Binary files /dev/null and b/site/public/assets/fonts/Roboto_Mono_500.eot differ diff --git a/site/public/assets/fonts/Roboto_Mono_500.svg b/site/public/assets/fonts/Roboto_Mono_500.svg new file mode 100644 index 00000000..34c55b65 --- /dev/null +++ b/site/public/assets/fonts/Roboto_Mono_500.svg @@ -0,0 +1,387 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/site/public/assets/fonts/Roboto_Mono_500.ttf b/site/public/assets/fonts/Roboto_Mono_500.ttf new file mode 100644 index 00000000..036a9907 Binary files /dev/null and b/site/public/assets/fonts/Roboto_Mono_500.ttf differ diff --git a/site/public/assets/fonts/Roboto_Mono_500.woff b/site/public/assets/fonts/Roboto_Mono_500.woff new file mode 100644 index 00000000..b12f6a1e Binary files /dev/null and b/site/public/assets/fonts/Roboto_Mono_500.woff differ diff --git a/site/public/assets/fonts/Roboto_Mono_500.woff2 b/site/public/assets/fonts/Roboto_Mono_500.woff2 new file mode 100644 index 00000000..125f0983 Binary files /dev/null and b/site/public/assets/fonts/Roboto_Mono_500.woff2 differ diff --git a/site/public/assets/img/arrow-left-black.png b/site/public/assets/img/arrow-left-black.png new file mode 100644 index 00000000..377a696f Binary files /dev/null and b/site/public/assets/img/arrow-left-black.png differ diff --git a/site/public/assets/img/arrow-left.png b/site/public/assets/img/arrow-left.png new file mode 100644 index 00000000..3ddd4781 Binary files /dev/null and b/site/public/assets/img/arrow-left.png differ diff --git a/site/public/assets/img/arrow-right-black.png b/site/public/assets/img/arrow-right-black.png new file mode 100644 index 00000000..12dbe37c Binary files /dev/null and b/site/public/assets/img/arrow-right-black.png differ diff --git a/site/public/assets/img/arrow-right.png b/site/public/assets/img/arrow-right.png new file mode 100644 index 00000000..0cb2588f Binary files /dev/null and b/site/public/assets/img/arrow-right.png differ diff --git a/site/public/assets/img/close-black.png b/site/public/assets/img/close-black.png new file mode 100644 index 00000000..191442ac Binary files /dev/null and b/site/public/assets/img/close-black.png differ diff --git a/site/public/assets/img/close.png b/site/public/assets/img/close.png new file mode 100644 index 00000000..529d7302 Binary files /dev/null and b/site/public/assets/img/close.png differ diff --git a/site/public/assets/img/favicon/android-icon-144x144.png b/site/public/assets/img/favicon/android-icon-144x144.png new file mode 100644 index 00000000..341ece89 Binary files /dev/null and b/site/public/assets/img/favicon/android-icon-144x144.png differ diff --git a/site/public/assets/img/favicon/android-icon-192x192.png b/site/public/assets/img/favicon/android-icon-192x192.png new file mode 100644 index 00000000..de4c5e42 Binary files /dev/null and b/site/public/assets/img/favicon/android-icon-192x192.png differ diff --git a/site/public/assets/img/favicon/android-icon-36x36.png b/site/public/assets/img/favicon/android-icon-36x36.png new file mode 100644 index 00000000..d1929dfd Binary files /dev/null and b/site/public/assets/img/favicon/android-icon-36x36.png differ diff --git a/site/public/assets/img/favicon/android-icon-48x48.png b/site/public/assets/img/favicon/android-icon-48x48.png new file mode 100644 index 00000000..433c679c Binary files /dev/null and b/site/public/assets/img/favicon/android-icon-48x48.png differ diff --git a/site/public/assets/img/favicon/android-icon-72x72.png b/site/public/assets/img/favicon/android-icon-72x72.png new file mode 100644 index 00000000..3254f659 Binary files /dev/null and b/site/public/assets/img/favicon/android-icon-72x72.png differ diff --git a/site/public/assets/img/favicon/android-icon-96x96.png b/site/public/assets/img/favicon/android-icon-96x96.png new file mode 100644 index 00000000..8bab32b4 Binary files /dev/null and b/site/public/assets/img/favicon/android-icon-96x96.png differ diff --git a/site/public/assets/img/favicon/apple-icon-114x114.png b/site/public/assets/img/favicon/apple-icon-114x114.png new file mode 100644 index 00000000..54c91340 Binary files /dev/null and b/site/public/assets/img/favicon/apple-icon-114x114.png differ diff --git a/site/public/assets/img/favicon/apple-icon-120x120.png b/site/public/assets/img/favicon/apple-icon-120x120.png new file mode 100644 index 00000000..78fa8236 Binary files /dev/null and b/site/public/assets/img/favicon/apple-icon-120x120.png differ diff --git a/site/public/assets/img/favicon/apple-icon-144x144.png b/site/public/assets/img/favicon/apple-icon-144x144.png new file mode 100644 index 00000000..341ece89 Binary files /dev/null and b/site/public/assets/img/favicon/apple-icon-144x144.png differ diff --git a/site/public/assets/img/favicon/apple-icon-152x152.png b/site/public/assets/img/favicon/apple-icon-152x152.png new file mode 100644 index 00000000..1f0d9e00 Binary files /dev/null and b/site/public/assets/img/favicon/apple-icon-152x152.png differ diff --git a/site/public/assets/img/favicon/apple-icon-180x180.png b/site/public/assets/img/favicon/apple-icon-180x180.png new file mode 100644 index 00000000..ab9d8f82 Binary files /dev/null and b/site/public/assets/img/favicon/apple-icon-180x180.png differ diff --git a/site/public/assets/img/favicon/apple-icon-57x57.png b/site/public/assets/img/favicon/apple-icon-57x57.png new file mode 100644 index 00000000..4a45472b Binary files /dev/null and b/site/public/assets/img/favicon/apple-icon-57x57.png differ diff --git a/site/public/assets/img/favicon/apple-icon-60x60.png b/site/public/assets/img/favicon/apple-icon-60x60.png new file mode 100644 index 00000000..631aeb61 Binary files /dev/null and b/site/public/assets/img/favicon/apple-icon-60x60.png differ diff --git a/site/public/assets/img/favicon/apple-icon-72x72.png b/site/public/assets/img/favicon/apple-icon-72x72.png new file mode 100644 index 00000000..3254f659 Binary files /dev/null and b/site/public/assets/img/favicon/apple-icon-72x72.png differ diff --git a/site/public/assets/img/favicon/apple-icon-76x76.png b/site/public/assets/img/favicon/apple-icon-76x76.png new file mode 100644 index 00000000..b31e92b5 Binary files /dev/null and b/site/public/assets/img/favicon/apple-icon-76x76.png differ diff --git a/site/public/assets/img/favicon/apple-icon-precomposed.png b/site/public/assets/img/favicon/apple-icon-precomposed.png new file mode 100644 index 00000000..188d62bf Binary files /dev/null and b/site/public/assets/img/favicon/apple-icon-precomposed.png differ diff --git a/site/public/assets/img/favicon/apple-icon.png b/site/public/assets/img/favicon/apple-icon.png new file mode 100644 index 00000000..188d62bf Binary files /dev/null and b/site/public/assets/img/favicon/apple-icon.png differ diff --git a/site/public/assets/img/favicon/browserconfig.xml b/site/public/assets/img/favicon/browserconfig.xml new file mode 100644 index 00000000..c5541482 --- /dev/null +++ b/site/public/assets/img/favicon/browserconfig.xml @@ -0,0 +1,2 @@ + +#ffffff \ No newline at end of file diff --git a/site/public/assets/img/favicon/favicon-16x16.png b/site/public/assets/img/favicon/favicon-16x16.png new file mode 100644 index 00000000..9db00ab0 Binary files /dev/null and b/site/public/assets/img/favicon/favicon-16x16.png differ diff --git a/site/public/assets/img/favicon/favicon-32x32.png b/site/public/assets/img/favicon/favicon-32x32.png new file mode 100644 index 00000000..0e7082ce Binary files /dev/null and b/site/public/assets/img/favicon/favicon-32x32.png differ diff --git a/site/public/assets/img/favicon/favicon-96x96.png b/site/public/assets/img/favicon/favicon-96x96.png new file mode 100644 index 00000000..8bab32b4 Binary files /dev/null and b/site/public/assets/img/favicon/favicon-96x96.png differ diff --git a/site/public/assets/img/favicon/favicon.ico b/site/public/assets/img/favicon/favicon.ico new file mode 100644 index 00000000..93bc04b4 Binary files /dev/null and b/site/public/assets/img/favicon/favicon.ico differ diff --git a/site/public/assets/img/favicon/manifest.json b/site/public/assets/img/favicon/manifest.json new file mode 100644 index 00000000..013d4a6a --- /dev/null +++ b/site/public/assets/img/favicon/manifest.json @@ -0,0 +1,41 @@ +{ + "name": "App", + "icons": [ + { + "src": "\/android-icon-36x36.png", + "sizes": "36x36", + "type": "image\/png", + "density": "0.75" + }, + { + "src": "\/android-icon-48x48.png", + "sizes": "48x48", + "type": "image\/png", + "density": "1.0" + }, + { + "src": "\/android-icon-72x72.png", + "sizes": "72x72", + "type": "image\/png", + "density": "1.5" + }, + { + "src": "\/android-icon-96x96.png", + "sizes": "96x96", + "type": "image\/png", + "density": "2.0" + }, + { + "src": "\/android-icon-144x144.png", + "sizes": "144x144", + "type": "image\/png", + "density": "3.0" + }, + { + "src": "\/android-icon-192x192.png", + "sizes": "192x192", + "type": "image\/png", + "density": "4.0" + } + ] +} \ No newline at end of file diff --git a/site/public/assets/img/favicon/ms-icon-144x144.png b/site/public/assets/img/favicon/ms-icon-144x144.png new file mode 100644 index 00000000..341ece89 Binary files /dev/null and b/site/public/assets/img/favicon/ms-icon-144x144.png differ diff --git a/site/public/assets/img/favicon/ms-icon-150x150.png b/site/public/assets/img/favicon/ms-icon-150x150.png new file mode 100644 index 00000000..452f3971 Binary files /dev/null and b/site/public/assets/img/favicon/ms-icon-150x150.png differ diff --git a/site/public/assets/img/favicon/ms-icon-310x310.png b/site/public/assets/img/favicon/ms-icon-310x310.png new file mode 100644 index 00000000..78f5888a Binary files /dev/null and b/site/public/assets/img/favicon/ms-icon-310x310.png differ diff --git a/site/public/assets/img/favicon/ms-icon-70x70.png b/site/public/assets/img/favicon/ms-icon-70x70.png new file mode 100644 index 00000000..df71e3ea Binary files /dev/null and b/site/public/assets/img/favicon/ms-icon-70x70.png differ diff --git a/site/public/assets/img/icon-search.png b/site/public/assets/img/icon-search.png new file mode 100644 index 00000000..43684627 Binary files /dev/null and b/site/public/assets/img/icon-search.png differ diff --git a/site/public/assets/img/icon_camera.svg b/site/public/assets/img/icon_camera.svg new file mode 100644 index 00000000..605fcfe1 --- /dev/null +++ b/site/public/assets/img/icon_camera.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/site/public/assets/img/loader.gif b/site/public/assets/img/loader.gif new file mode 100644 index 00000000..dc21df18 Binary files /dev/null and b/site/public/assets/img/loader.gif differ diff --git a/site/public/assets/img/megapixels-share.png b/site/public/assets/img/megapixels-share.png new file mode 100644 index 00000000..a40dfaca Binary files /dev/null and b/site/public/assets/img/megapixels-share.png differ diff --git a/site/public/assets/img/megapixels_logo_black.png b/site/public/assets/img/megapixels_logo_black.png new file mode 100644 index 00000000..64bc6659 Binary files /dev/null and b/site/public/assets/img/megapixels_logo_black.png differ diff --git a/site/public/assets/img/megapixels_logo_black.svg b/site/public/assets/img/megapixels_logo_black.svg new file mode 100644 index 00000000..8eb610e7 --- /dev/null +++ b/site/public/assets/img/megapixels_logo_black.svg @@ -0,0 +1,58 @@ + + + +image/svg+xml \ No newline at end of file diff --git a/site/public/assets/img/megapixels_logo_white.svg b/site/public/assets/img/megapixels_logo_white.svg new file mode 100755 index 00000000..00aa430f --- /dev/null +++ b/site/public/assets/img/megapixels_logo_white.svg @@ -0,0 +1,10 @@ + + + + + + + + + diff --git a/site/public/assets/img/reddot.png b/site/public/assets/img/reddot.png new file mode 100644 index 00000000..c414a464 Binary files /dev/null and b/site/public/assets/img/reddot.png differ diff --git a/site/public/assets/js/app/face.js b/site/public/assets/js/app/face.js new file mode 100644 index 00000000..0a87d2b2 --- /dev/null +++ b/site/public/assets/js/app/face.js @@ -0,0 +1,254 @@ +/* eslint-disable */ +var faceInit = function () { + var container = document.querySelector("#face_container") + var camera, controls, scene, renderer + var mouse = new THREE.Vector2(0.5, 0.5) + var mouseTarget = new THREE.Vector2(0.5, 0.5) + var POINT_SCALE = 1.8 + var FACE_POINT_COUNT = 68 + var SWAP_TIME = 500 + var cubes = [], meshes = [] + var currentFace = document.querySelector('.currentFace') + var introEl = document.querySelector('.intro') + var faceBuffer = (function () { + var a = new Array(FACE_POINT_COUNT) + for (let i = 0; i < FACE_POINT_COUNT; i++) { + a[i] = new THREE.Vector3() + } + return a + })() + var lastSprite + var last_t = 0, start_t = 0 + var bgColor = 0x000000 // 0x191919 + var colors = [ + 0xff3333, + 0xff8833, + 0xffff33, + 0x338833, + 0x3388ff, + 0x3333ff, + 0x8833ff, + 0xff3388, + 0xffffff, + ] + var swapping = false, swap_count = 0, swapFrom, swapTo, face_names, faces + init() + + function init() { + fetch("/assets/data/3dlm_0_10.json") + .then(req => req.json()) + .then(data => { + face_names = Object.keys(data) + faces = face_names.map(name => recenter(data[name])) + setup() + build(faces[0]) + updateFace(faces[0]) + setCurrentFace(face_names[0]) + swapTo = faces[0] + animate() + }) + } + function setup() { + var w = window.innerWidth * 2/3 + var h = Math.min(window.innerWidth / 2, window.innerHeight * 0.7) + camera = new THREE.PerspectiveCamera(70, w/h, 1, 10000) + camera.position.x = 0 + camera.position.y = 0 + camera.position.z = 200 + + scene = new THREE.Scene() + // scene.background = new THREE.Color(bgColor) + + renderer = new THREE.WebGLRenderer({ antialias: true, alpha: true }) + renderer.setPixelRatio(window.devicePixelRatio) + renderer.setSize(w, h) + renderer.setClearColor(0x000000, 0); + container.appendChild(renderer.domElement) + document.body.addEventListener('mousemove', onMouseMove) + // renderer.domElement.addEventListener('mousedown', swap) + // oktween.add({ + // obj: el.style, + // units: "px", + // from: { left: 0 }, + // to: { left: 100 }, + // duration: 1000, + // easing: oktween.easing.circ_out, + // update: function(obj){ + // console.log(obj.left) + // } + // finished: function(){ + // console.log("done") + // } + // }) + swap() + } + function build(points) { + var matrix = new THREE.Matrix4() + var quaternion = new THREE.Quaternion() + + for (var i = 0; i < FACE_POINT_COUNT; i++) { + var p = points[i] + var geometry = new THREE.BoxBufferGeometry() + var position = new THREE.Vector3(p[0], p[1], p[2]) + var rotation = new THREE.Euler() + var scale = new THREE.Vector3() + var color = new THREE.Color() + scale.x = scale.y = scale.z = POINT_SCALE + quaternion.setFromEuler(rotation, false) + matrix.compose(position, quaternion, scale) + geometry.applyMatrix(matrix) + material = new THREE.MeshBasicMaterial({ color: color.setHex(0xffffff) }) + cube = new THREE.Mesh(geometry, material) + scene.add(cube) + cubes.push(cube) + } + + meshes = getLineGeometry(points).map((geometry, i) => { + var color = new THREE.Color() + var material = new MeshLineMaterial({ + color: color.setHex(colors[i % colors.length]), + }) + var line = new MeshLine() + line.setGeometry(geometry, _ => 1.5) + var mesh = new THREE.Mesh(line.geometry, material) + mesh.geometry.dynamic = true + scene.add(mesh) + return [line, mesh] + }) + } + function lerpPoints(n, A, B, C) { + for (let i = 0, len = A.length; i < len; i++) { + lerpPoint(n, A[i], B[i], C[i]) + } + } + function lerpPoint(n, A, B, C) { + C.x = lerp(n, A.x, B.x) + C.y = lerp(n, A.y, B.y) + C.z = lerp(n, A.z, B.z) + } + function lerp(n, a, b) { + return (b-a) * n + a + } + function swap(){ + swap_count = (swap_count + 1) % faces.length + swapFrom = swapTo || faces[0] + swapTo = faces[swap_count] + setCurrentFace(face_names[swap_count]) + oktween.add({ + from: { n: 0 }, + to: { n: 1 }, + duration: 1000, + easing: oktween.easing.quad_in_out, + update: function(obj){ + lerpPoints(obj.n, swapFrom, swapTo, faceBuffer) + updateFace(faceBuffer) + }, + finished: function(){ + setTimeout(swap, 2000) + } + }) + } + function setCurrentFace(name) { + name = name.replace('.png', '').split('_').filter(s => !s.match(/\d+/)).join(' ') + currentFace.innerHTML = name + // if (lastSprite) { + // scene.remove(lastSprite) + // } + // var sprite = new THREE.TextSprite({ + // textSize: 12, + // redrawInterval: 1000, + // material: { + // color: 0xcccccc, + // }, + // texture: { + // text: name, + // fontFamily: '"Roboto", "Helvetica", sans-serif', + // }, + // }); + // sprite.position + // .setX(0) + // .setY(0) + // .setZ(0) + // scene.add(sprite); + // lastSprite = sprite + } + function updateFace(points) { + updateCubeGeometry(points) + updateLineGeometry(points) + } + function updateCubeGeometry(points) { + cubes.forEach((cube, i) => { + const p = points[i] + cube.position.set(p.x, p.y, p.z) + }) + } + function updateLineGeometry(points) { + getLineGeometry(points).map((geometry, i) => { + var [line, mesh] = meshes[i] + line.setGeometry(geometry, _ => 1.5) + mesh.geometry.vertices = line.geometry.vertices + mesh.geometry.verticesNeedUpdate = true + }) + } + function getLineGeometry(points) { + return [ + points.slice(0, 17), + points.slice(17, 22), + points.slice(22, 27), + points.slice(27, 31), + points.slice(31, 36), + points.slice(36, 42), + points.slice(42, 48), + points.slice(48) + ].map((a, i) => { + var geometry = new THREE.Geometry() + a.forEach(p => geometry.vertices.push(p)) + if (i > 4) { + geometry.vertices.push(a[0]) + } + return geometry + }) + } + function getBounds(obj) { + return obj.reduce((a, p) => { + return [ + Math.min(a[0], p[0]), + Math.max(a[1], p[0]), + Math.min(a[2], p[1]), + Math.max(a[3], p[1]), + Math.min(a[4], p[2]), + Math.max(a[5], p[2]), + ] + }, [Infinity, -Infinity, Infinity, -Infinity, Infinity, -Infinity]) + } + function recenter(obj) { + const bounds = getBounds(obj) + const x_width = (bounds[1] - bounds[0]) / 2 + const y_width = (bounds[3] - bounds[2]) / -3 + const z_width = (bounds[5] - bounds[4]) / 2 + return obj.map(p => { + p[0] = p[0] - bounds[0] - x_width + p[1] = -p[1] + bounds[1] + y_width + p[2] = p[2] - bounds[2] + z_width + return new THREE.Vector3(p[0], p[1], p[2]) + }) + } + // + function onMouseMove(e) { + mouse.x = e.clientX / window.innerWidth + mouse.y = e.clientY / window.innerHeight + } + function animate(t) { + requestAnimationFrame(animate) + renderer.render(scene, camera) + // scene.rotation.y += 0.01 * Math.PI + mouseTarget.x += (mouse.x - mouseTarget.x) * 0.1 + mouseTarget.y += (mouse.y - mouseTarget.y) * 0.1 + scene.rotation.x = (mouseTarget.y - 0.5) * Math.PI / 2 + scene.rotation.y = (mouseTarget.x - 0.5) * Math.PI + currentFace.style.transform = "translateZ(0) rotateY(" + (scene.rotation.y/2) + "rad)" + // scene.rotation.y += 0.01 + last_t = t + } +} +faceInit() \ No newline at end of file diff --git a/site/public/assets/js/app/prototypes.js b/site/public/assets/js/app/prototypes.js new file mode 100644 index 00000000..a7da2e46 --- /dev/null +++ b/site/public/assets/js/app/prototypes.js @@ -0,0 +1 @@ +prototypes.js \ No newline at end of file diff --git a/site/public/assets/js/dist/index.js b/site/public/assets/js/dist/index.js new file mode 100644 index 00000000..a1c2304c --- /dev/null +++ b/site/public/assets/js/dist/index.js @@ -0,0 +1,88 @@ +!function(t){var e={};function n(i){if(e[i])return e[i].exports;var o=e[i]={i:i,l:!1,exports:{}};return t[i].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=t,n.c=e,n.d=function(t,e,i){n.o(t,e)||Object.defineProperty(t,e,{configurable:!1,enumerable:!0,get:i})},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=183)}([function(t,e,n){"use strict";e.a=function(t,e){if(arguments.length<1)throw new TypeError("1 argument required, but only "+arguments.length+" present");if(null===t)return new Date(NaN);var n=e||{},c=null==n.additionalDigits?s:Object(i.a)(n.additionalDigits);if(2!==c&&1!==c&&0!==c)throw new RangeError("additionalDigits must be 0, 1 or 2");if(t instanceof Date||"object"==typeof t&&"[object Date]"===Object.prototype.toString.call(t))return new Date(t.getTime());if("number"==typeof t||"[object Number]"===Object.prototype.toString.call(t))return new Date(t);if("string"!=typeof t&&"[object String]"!==Object.prototype.toString.call(t))return new Date(NaN);var h=function(t){var e,n={},i=t.split(l.dateTimeDelimeter);l.plainTime.test(i[0])?(n.date=null,e=i[0]):(n.date=i[0],e=i[1],l.timeZoneDelimeter.test(n.date)&&(n.date=t.split(l.timeZoneDelimeter)[0],e=t.substr(n.date.length,t.length)));if(e){var o=l.timezone.exec(e);o?(n.time=e.replace(o[1],""),n.timezone=o[1]):n.time=e}return n}(t),v=function(t,e){var n,i=l.YYY[e],o=l.YYYYY[e];if(n=l.YYYY.exec(t)||o.exec(t)){var r=n[1];return{year:parseInt(r,10),restDateString:t.slice(r.length)}}if(n=l.YY.exec(t)||i.exec(t)){var a=n[1];return{year:100*parseInt(a,10),restDateString:t.slice(a.length)}}return{year:null}}(h.date,c),y=v.year,b=function(t,e){if(null===e)return null;var n,i,o,r;if(0===t.length)return(i=new Date(0)).setUTCFullYear(e),i;if(n=l.MM.exec(t))return i=new Date(0),o=parseInt(n[1],10)-1,f(e,o)?(i.setUTCFullYear(e,o),i):new Date(NaN);if(n=l.DDD.exec(t)){i=new Date(0);var a=parseInt(n[1],10);return function(t,e){if(e<1)return!1;var n=d(t);if(n&&e>366)return!1;if(!n&&e>365)return!1;return!0}(e,a)?(i.setUTCFullYear(e,0,a),i):new Date(NaN)}if(n=l.MMDD.exec(t)){i=new Date(0),o=parseInt(n[1],10)-1;var s=parseInt(n[2],10);return f(e,o,s)?(i.setUTCFullYear(e,o,s),i):new Date(NaN)}if(n=l.Www.exec(t))return r=parseInt(n[1],10)-1,p(e,r)?u(e,r):new Date(NaN);if(n=l.WwwD.exec(t)){r=parseInt(n[1],10)-1;var c=parseInt(n[2],10)-1;return p(e,r,c)?u(e,r,c):new Date(NaN)}return null}(v.restDateString,y);if(isNaN(b))return new Date(NaN);if(b){var w,_=b.getTime(),x=0;if(h.time&&(x=function(t){var e,n,i;if(e=l.HH.exec(t))return g(n=parseFloat(e[1].replace(",",".")))?n%24*r:NaN;if(e=l.HHMM.exec(t))return n=parseInt(e[1],10),i=parseFloat(e[2].replace(",",".")),g(n,i)?n%24*r+i*a:NaN;if(e=l.HHMMSS.exec(t)){n=parseInt(e[1],10),i=parseInt(e[2],10);var o=parseFloat(e[3].replace(",","."));return g(n,i,o)?n%24*r+i*a+1e3*o:NaN}return null}(h.time),isNaN(x)))return new Date(NaN);if(h.timezone){if(w=function(t){var e,n,i;if(e=l.timezoneZ.exec(t))return 0;if(e=l.timezoneHH.exec(t))return m(i=parseInt(e[2],10))?(n=i*r,"+"===e[1]?-n:n):NaN;if(e=l.timezoneHHMM.exec(t)){i=parseInt(e[2],10);var o=parseInt(e[3],10);return m(i,o)?(n=i*r+o*a,"+"===e[1]?-n:n):NaN}return 0}(h.timezone),isNaN(w))return new Date(NaN)}else w=Object(o.a)(new Date(_+x)),w=Object(o.a)(new Date(_+x+w));return new Date(_+x+w)}return new Date(NaN)};var i=n(1),o=n(19),r=36e5,a=6e4,s=2,l={dateTimeDelimeter:/[T ]/,plainTime:/:/,timeZoneDelimeter:/[Z ]/i,YY:/^(\d{2})$/,YYY:[/^([+-]\d{2})$/,/^([+-]\d{3})$/,/^([+-]\d{4})$/],YYYY:/^(\d{4})/,YYYYY:[/^([+-]\d{4})/,/^([+-]\d{5})/,/^([+-]\d{6})/],MM:/^-(\d{2})$/,DDD:/^-?(\d{3})$/,MMDD:/^-?(\d{2})-?(\d{2})$/,Www:/^-?W(\d{2})$/,WwwD:/^-?W(\d{2})-?(\d{1})$/,HH:/^(\d{2}([.,]\d*)?)$/,HHMM:/^(\d{2}):?(\d{2}([.,]\d*)?)$/,HHMMSS:/^(\d{2}):?(\d{2}):?(\d{2}([.,]\d*)?)$/,timezone:/([Z+-].*)$/,timezoneZ:/^(Z)$/,timezoneHH:/^([+-])(\d{2})$/,timezoneHHMM:/^([+-])(\d{2}):?(\d{2})$/};function u(t,e,n){e=e||0,n=n||0;var i=new Date(0);i.setUTCFullYear(t,0,4);var o=7*e+n+1-(i.getUTCDay()||7);return i.setUTCDate(i.getUTCDate()+o),i}var c=[31,28,31,30,31,30,31,31,30,31,30,31],h=[31,29,31,30,31,30,31,31,30,31,30,31];function d(t){return t%400==0||t%4==0&&t%100!=0}function f(t,e,n){if(e<0||e>11)return!1;if(null!=n){if(n<1)return!1;var i=d(t);if(i&&n>h[e])return!1;if(!i&&n>c[e])return!1}return!0}function p(t,e,n){return!(e<0||e>52)&&(null==n||!(n<0||n>6))}function g(t,e,n){return(null==t||!(t<0||t>=25))&&((null==e||!(e<0||e>=60))&&(null==n||!(n<0||n>=60)))}function m(t,e){return null==e||!(e<0||e>59)}},function(t,e,n){"use strict";e.a=function(t){if(null===t||!0===t||!1===t)return NaN;var e=Number(t);if(isNaN(e))return e;return e<0?Math.ceil(e):Math.floor(e)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),n.d(e,"version",function(){return a}),n.d(e,"DOM",function(){return P}),n.d(e,"Children",function(){return T}),n.d(e,"render",function(){return y}),n.d(e,"createClass",function(){return H}),n.d(e,"createPortal",function(){return x}),n.d(e,"createFactory",function(){return M}),n.d(e,"createElement",function(){return k}),n.d(e,"cloneElement",function(){return R}),n.d(e,"isValidElement",function(){return D}),n.d(e,"findDOMNode",function(){return I}),n.d(e,"unmountComponentAtNode",function(){return S}),n.d(e,"Component",function(){return Y}),n.d(e,"PureComponent",function(){return X}),n.d(e,"unstable_renderSubtreeIntoContainer",function(){return w}),n.d(e,"unstable_batchedUpdates",function(){return Z}),n.d(e,"__spread",function(){return z});var i=n(33),o=n.n(i);n.d(e,"PropTypes",function(){return o.a});var r=n(207),a="15.1.0",s="a abbr address area article aside audio b base bdi bdo big blockquote body br button canvas caption cite code col colgroup data datalist dd del details dfn dialog div dl dt em embed fieldset figcaption figure footer form h1 h2 h3 h4 h5 h6 head header hgroup hr html i iframe img input ins kbd keygen label legend li link main map mark menu menuitem meta meter nav noscript object ol optgroup option output p param picture pre progress q rp rt ruby s samp script section select small source span strong style sub summary sup table tbody td textarea tfoot th thead time title tr track u ul var video wbr circle clipPath defs ellipse g image line linearGradient mask path pattern polygon polyline radialGradient rect stop svg text tspan".split(" "),l="undefined"!=typeof Symbol&&Symbol.for&&Symbol.for("react.element")||60103,u="undefined"!=typeof Symbol&&Symbol.for?Symbol.for("__preactCompatWrapper"):"__preactCompatWrapper",c={constructor:1,render:1,shouldComponentUpdate:1,componentWillReceiveProps:1,componentWillUpdate:1,componentDidUpdate:1,componentWillMount:1,componentDidMount:1,componentWillUnmount:1,componentDidUnmount:1},h=/^(?:accent|alignment|arabic|baseline|cap|clip|color|fill|flood|font|glyph|horiz|marker|overline|paint|stop|strikethrough|stroke|text|underline|unicode|units|v|vector|vert|word|writing|x)[A-Z]/,d={},f=!1;try{f=!1}catch(t){}function p(){return null}var g=Object(r.c)("a",null).constructor;g.prototype.$$typeof=l,g.prototype.preactCompatUpgraded=!1,g.prototype.preactCompatNormalized=!1,Object.defineProperty(g.prototype,"type",{get:function(){return this.nodeName},set:function(t){this.nodeName=t},configurable:!0}),Object.defineProperty(g.prototype,"props",{get:function(){return this.attributes},set:function(t){this.attributes=t},configurable:!0});var m=r.d.event;r.d.event=function(t){return m&&(t=m(t)),t.persist=Object,t.nativeEvent=t,t};var v=r.d.vnode;function y(t,e,n){var i=e&&e._preactCompatRendered&&e._preactCompatRendered.base;i&&i.parentNode!==e&&(i=null),!i&&e&&(i=e.firstElementChild);for(var o=e.childNodes.length;o--;)e.childNodes[o]!==i&&e.removeChild(e.childNodes[o]);var a=Object(r.e)(t,e,i);return e&&(e._preactCompatRendered=a&&(a._component||{base:a})),"function"==typeof n&&n(),a&&a._component||a}r.d.vnode=function(t){if(!t.preactCompatUpgraded){t.preactCompatUpgraded=!0;var e=t.nodeName,n=t.attributes=null==t.attributes?{}:z({},t.attributes);"function"==typeof e?(!0===e[u]||e.prototype&&"isReactComponent"in e.prototype)&&(t.children&&""===String(t.children)&&(t.children=void 0),t.children&&(n.children=t.children),t.preactCompatNormalized||O(t),function(t){var e=t.nodeName,n=t.attributes;t.attributes={},e.defaultProps&&z(t.attributes,e.defaultProps);n&&z(t.attributes,n)}(t)):(t.children&&""===String(t.children)&&(t.children=void 0),t.children&&(n.children=t.children),n.defaultValue&&(n.value||0===n.value||(n.value=n.defaultValue),delete n.defaultValue),function(t,e){var n,i,o;if(e){for(o in e)if(n=h.test(o))break;if(n)for(o in i=t.attributes={},e)e.hasOwnProperty(o)&&(i[h.test(o)?o.replace(/([A-Z0-9])/,"-$1").toLowerCase():o]=e[o])}}(t,n))}v&&v(t)};var b=function(){};function w(t,e,n,i){var o=y(Object(r.c)(b,{context:t.context},e),n),a=o._component||o.base;return i&&i.call(a,o),a}function _(t){w(this,t.vnode,t.container)}function x(t,e){return Object(r.c)(_,{vnode:t,container:e})}function S(t){var e=t._preactCompatRendered&&t._preactCompatRendered.base;return!(!e||e.parentNode!==t)&&(Object(r.e)(Object(r.c)(p),t,e),!0)}b.prototype.getChildContext=function(){return this.props.context},b.prototype.render=function(t){return t.children[0]};var E,C=[],T={map:function(t,e,n){return null==t?null:(t=T.toArray(t),n&&n!==t&&(e=e.bind(n)),t.map(e))},forEach:function(t,e,n){if(null==t)return null;t=T.toArray(t),n&&n!==t&&(e=e.bind(n)),t.forEach(e)},count:function(t){return t&&t.length||0},only:function(t){if(1!==(t=T.toArray(t)).length)throw new Error("Children.only() expects only one child.");return t[0]},toArray:function(t){return null==t?[]:C.concat(t)}};function M(t){return k.bind(null,t)}for(var P={},L=s.length;L--;)P[s[L]]=M(s[L]);function A(t){var e=t[u];return e?!0===e?t:e:(e=function(t){return H({displayName:t.displayName||t.name,render:function(){return t(this.props,this.context)}})}(t),Object.defineProperty(e,u,{configurable:!0,value:!0}),e.displayName=t.displayName,e.propTypes=t.propTypes,e.defaultProps=t.defaultProps,Object.defineProperty(t,u,{configurable:!0,value:e}),e)}function k(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];return function t(e,n){for(var i=n||0;i0;)n[i]=arguments[i+2];if(!D(t))return t;var o=t.attributes||t.props,a=[Object(r.c)(t.nodeName||t.type,z({},o),t.children||o&&o.children),e];return n&&n.length?a.push(n):e&&e.children&&a.push(e.children),O(r.b.apply(void 0,a))}function D(t){return t&&(t instanceof g||t.$$typeof===l)}var j={configurable:!0,get:function(){return this.class},set:function(t){this.class=t}};function z(t,e){for(var n=arguments,i=1,o=void 0;i0&&void 0!==arguments[0]?arguments[0]:0;t/=arguments.length>1&&void 0!==arguments[1]?arguments[1]:25;var e=g(Math.round(t)%60);return(t=Math.floor(t/60))>60?Math.floor(t/60)+":"+g(t%60)+":"+e:t%60+":"+e},e.percent=function(t){return(100*t).toFixed(1)+"%"},e.px=function(t,e){return Math.round(t*e)+"px"},e.clamp=function(t,e,n){return t2&&2==e[e.length-2].length?e.slice(-3).join("."):e.slice(-2).join(".")},e.preloadImage=function(t){var e=t.verified,n=t.hash,i=t.frame,o=t.url;n&&i&&(o=imageUrl(e,n,i,"md"));var r=new Image,a=!1;r.onload=function(){a||(a=!0,r.onload=null)},r.crossOrigin="anonymous",r.src=o,r.complete&&r.onload()},e.get=function(t,e){return fetch(t,{method:"GET",body:e,headers:{Accept:"application/json, application/xml, text/play, text/html, *.*"}}).then(function(t){return t.json()})},e.post=function(t,e){var n=void 0;return e instanceof FormData?n={Accept:"application/json, application/xml, text/play, text/html, *.*"}:(n={Accept:"application/json, application/xml, text/play, text/html, *.*","Content-Type":"application/json; charset=utf-8"},e=(0,i.default)(e)),fetch(t,{method:"POST",body:e,headers:n}).then(function(t){return t.json()})}},function(t,e,n){t.exports={default:n(233),__esModule:!0}},function(t,e,n){"use strict";e.__esModule=!0;var i=function(t){return t&&t.__esModule?t:{default:t}}(n(56));e.default=function(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!==(void 0===e?"undefined":(0,i.default)(e))&&"function"!=typeof e?t:e}},function(t,e,n){"use strict";e.__esModule=!0;var i=a(n(247)),o=a(n(251)),r=a(n(56));function a(t){return t&&t.__esModule?t:{default:t}}e.default=function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+(void 0===e?"undefined":(0,r.default)(e)));t.prototype=(0,o.default)(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(i.default?(0,i.default)(t,e):t.__proto__=e)}},function(t,e,n){var i=n(10);t.exports=function(t){if(!i(t))throw TypeError(t+" is not an object!");return t}},function(t,e,n){t.exports=!n(23)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=n(210),o=n(117),r=n(216);n.d(e,"Provider",function(){return i.b}),n.d(e,"createProvider",function(){return i.a}),n.d(e,"connectAdvanced",function(){return o.a}),n.d(e,"connect",function(){return r.a})},function(t,e,n){var i=n(40);t.exports=function(t,e,n){if(i(t),void 0===e)return t;switch(n){case 1:return function(n){return t.call(e,n)};case 2:return function(n,i){return t.call(e,n,i)};case 3:return function(n,i,o){return t.call(e,n,i,o)}}return function(){return t.apply(e,arguments)}}},function(t,e,n){"use strict";e.a=function(t){var e=new Date(t.getTime()),n=e.getTimezoneOffset();e.setSeconds(0,0);var o=e.getTime()%i;return n*i+o};var i=6e4},function(t,e,n){var i=n(9),o=n(41);t.exports=n(16)?function(t,e,n){return i.f(t,e,o(1,n))}:function(t,e,n){return t[e]=n,t}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),n.d(e,"createStore",function(){return s}),n.d(e,"combineReducers",function(){return u}),n.d(e,"bindActionCreators",function(){return h}),n.d(e,"applyMiddleware",function(){return p}),n.d(e,"compose",function(){return f}),n.d(e,"__DO_NOT_USE__ActionTypes",function(){return r});var i=n(219),o=function(){return Math.random().toString(36).substring(7).split("").join(".")},r={INIT:"@@redux/INIT"+o(),REPLACE:"@@redux/REPLACE"+o(),PROBE_UNKNOWN_ACTION:function(){return"@@redux/PROBE_UNKNOWN_ACTION"+o()}};function a(t){if("object"!=typeof t||null===t)return!1;for(var e=t;null!==Object.getPrototypeOf(e);)e=Object.getPrototypeOf(e);return Object.getPrototypeOf(t)===e}function s(t,e,n){var o;if("function"==typeof e&&"function"==typeof n||"function"==typeof n&&"function"==typeof arguments[3])throw new Error("It looks like you are passing several store enhancers to createStore(). This is not supported. Instead, compose them together to a single function");if("function"==typeof e&&void 0===n&&(n=e,e=void 0),void 0!==n){if("function"!=typeof n)throw new Error("Expected the enhancer to be a function.");return n(s)(t,e)}if("function"!=typeof t)throw new Error("Expected the reducer to be a function.");var l=t,u=e,c=[],h=c,d=!1;function f(){h===c&&(h=c.slice())}function p(){if(d)throw new Error("You may not call store.getState() while the reducer is executing. The reducer has already received the state as an argument. Pass it down from the top reducer instead of reading it from the store.");return u}function g(t){if("function"!=typeof t)throw new Error("Expected the listener to be a function.");if(d)throw new Error("You may not call store.subscribe() while the reducer is executing. If you would like to be notified after the store has been updated, subscribe from a component and invoke store.getState() in the callback to access the latest state. See https://redux.js.org/api-reference/store#subscribe(listener) for more details.");var e=!0;return f(),h.push(t),function(){if(e){if(d)throw new Error("You may not unsubscribe from a store listener while the reducer is executing. See https://redux.js.org/api-reference/store#subscribe(listener) for more details.");e=!1,f();var n=h.indexOf(t);h.splice(n,1)}}}function m(t){if(!a(t))throw new Error("Actions must be plain objects. Use custom middleware for async actions.");if(void 0===t.type)throw new Error('Actions may not have an undefined "type" property. Have you misspelled a constant?');if(d)throw new Error("Reducers may not dispatch actions.");try{d=!0,u=l(u,t)}finally{d=!1}for(var e=c=h,n=0;n=0&&l<=6))throw new RangeError("weekStartsOn must be between 0 and 6 inclusively");var u=Object(o.a)(t,n),c=u.getDay(),h=(c=0&&l.splice(e,1)}function p(t){var e=document.createElement("style");return void 0===t.attrs.type&&(t.attrs.type="text/css"),g(e,t.attrs),d(t,e),e}function g(t,e){Object.keys(e).forEach(function(n){t.setAttribute(n,e[n])})}function m(t,e){var n,i,o,r;if(e.transform&&t.css){if(!(r=e.transform(t.css)))return function(){};t.css=r}if(e.singleton){var l=s++;n=a||(a=p(e)),i=y.bind(null,n,l,!1),o=y.bind(null,n,l,!0)}else t.sourceMap&&"function"==typeof URL&&"function"==typeof URL.createObjectURL&&"function"==typeof URL.revokeObjectURL&&"function"==typeof Blob&&"function"==typeof btoa?(n=function(t){var e=document.createElement("link");return void 0===t.attrs.type&&(t.attrs.type="text/css"),t.attrs.rel="stylesheet",g(e,t.attrs),d(t,e),e}(e),i=function(t,e,n){var i=n.css,o=n.sourceMap,r=void 0===e.convertToAbsoluteUrls&&o;(e.convertToAbsoluteUrls||r)&&(i=u(i));o&&(i+="\n/*# sourceMappingURL=data:application/json;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(o))))+" */");var a=new Blob([i],{type:"text/css"}),s=t.href;t.href=URL.createObjectURL(a),s&&URL.revokeObjectURL(s)}.bind(null,n,e),o=function(){f(n),n.href&&URL.revokeObjectURL(n.href)}):(n=p(e),i=function(t,e){var n=e.css,i=e.media;i&&t.setAttribute("media",i);if(t.styleSheet)t.styleSheet.cssText=n;else{for(;t.firstChild;)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(n))}}.bind(null,n),o=function(){f(n)});return i(t),function(e){if(e){if(e.css===t.css&&e.media===t.media&&e.sourceMap===t.sourceMap)return;i(t=e)}else o()}}t.exports=function(t,e){if("undefined"!=typeof DEBUG&&DEBUG&&"object"!=typeof document)throw new Error("The style-loader cannot be used in a non-browser environment");(e=e||{}).attrs="object"==typeof e.attrs?e.attrs:{},e.singleton||"boolean"==typeof e.singleton||(e.singleton=o()),e.insertInto||(e.insertInto="head"),e.insertAt||(e.insertAt="bottom");var n=h(t,e);return c(n,e),function(t){for(var o=[],r=0;r0?1:a};var i=n(0)},function(t,e){t.exports={}},function(t,e,n){var i=n(67),o=n(68);t.exports=function(t){return i(o(t))}},function(t,e,n){var i=n(68);t.exports=function(t){return Object(i(t))}},function(t,e,n){"use strict";var i=n(192)(!0);n(69)(String,"String",function(t){this._t=String(t),this._i=0},function(){var t,e=this._t,n=this._i;return n>=e.length?{value:void 0,done:!0}:(t=i(e,n),this._i+=t.length,{value:t,done:!1})})},function(t,e,n){t.exports=n(205)()},function(t,e,n){"use strict";e.a=function(t,e){if(arguments.length<1)throw new TypeError("1 argument required, but only "+arguments.length+" present");var n=Object(i.a)(t,e),r=n.getFullYear(),a=new Date(0);a.setFullYear(r+1,0,4),a.setHours(0,0,0,0);var s=Object(o.a)(a,e),l=new Date(0);l.setFullYear(r,0,4),l.setHours(0,0,0,0);var u=Object(o.a)(l,e);return n.getTime()>=s.getTime()?r+1:n.getTime()>=u.getTime()?r:r-1};var i=n(0),o=n(27)},function(t,e,n){"use strict";e.a=function(t){t=t||{};var e={};for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n]);return e}},function(t,e,n){"use strict";e.a=function(t,e,n){if(arguments.length<2)throw new TypeError("2 arguments required, but only "+arguments.length+" present");var a=Object(o.a)(t,n),s=Object(o.a)(e,n),l=a.getTime()-Object(i.a)(a),u=s.getTime()-Object(i.a)(s);return Math.round((l-u)/r)};var i=n(19),o=n(90),r=864e5},function(t,e,n){n(186);for(var i=n(5),o=n(20),r=n(29),a=n(6)("toStringTag"),s="CSSRuleList,CSSStyleDeclaration,CSSValueList,ClientRectList,DOMRectList,DOMStringList,DOMTokenList,DataTransferItemList,FileList,HTMLAllCollection,HTMLCollection,HTMLFormElement,HTMLSelectElement,MediaList,MimeTypeArray,NamedNodeMap,NodeList,PaintRequestList,Plugin,PluginArray,SVGLengthList,SVGNumberList,SVGPathSegList,SVGPointList,SVGStringList,SVGTransformList,SourceBufferList,StyleSheetList,TextTrackCueList,TextTrackList,TouchList".split(","),l=0;lb;b++)if((m=e?y(a(p=t[b])[0],p[1]):y(t[b]))===u||m===c)return m}else for(g=v.call(t);!(p=g.next()).done;)if((m=o(g,y,p.value,e))===u||m===c)return m}).BREAK=u,e.RETURN=c},function(t,e,n){t.exports={default:n(230),__esModule:!0}},function(t,e,n){"use strict";e.__esModule=!0;var i=n(2),o=n(2);e.clone=function(t){return JSON.parse(JSON.stringify(t))},e.isSameArray=function(t,e){var n=t.length;if(n!==e.length)return!1;for(;n--;)if(t[n]!==e[n])return!1;return!0},e.reactFormatter=function(t){return function(e,n,r){return r(function(){var n=e.getElement(),r=i.cloneElement(t,{cell:e});o.render(r,n.querySelector(".formatterCell"))}),'
'}}},function(t,e,n){"use strict";e.a=function(t,e,n){if(arguments.length<2)throw new TypeError("2 arguments required, but only "+arguments.length+" present");var r=Object(o.a)(t,n),a=Object(i.a)(e);return r.setDate(r.getDate()+a),r};var i=n(1),o=n(0)},function(t,e,n){"use strict";e.a=function(t,e,n){if(arguments.length<2)throw new TypeError("2 arguments required, but only "+arguments.length+" present");var r=Object(o.a)(t,n).getTime(),a=Object(i.a)(e);return new Date(r+a)};var i=n(1),o=n(0)},function(t,e,n){"use strict";e.a=function(t,e){if(arguments.length<1)throw new TypeError("1 argument required, but only "+arguments.length+" present");var n=Object(i.a)(t,e),r=new Date(0);return r.setFullYear(n,0,4),r.setHours(0,0,0,0),Object(o.a)(r,e)};var i=n(34),o=n(27)},function(t,e,n){"use strict";var i=n(311),o=n(312),r=n(314),a=n(315),s=n(317),l={formatDistance:i.a,formatLong:o.a,formatRelative:r.a,localize:a.a,match:s.a,options:{weekStartsOn:0,firstWeekContainsDate:1}};e.a=l},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Video=e.DetectionBoxes=e.DetectionList=e.Classifier=e.TableCell=e.TableRow=e.TableTuples=e.TableArray=e.TableObject=e.Gate=e.UploadImage=e.Loader=e.Sidebar=void 0;var i=d(n(408)),o=d(n(409)),r=d(n(410)),a=d(n(411)),s=d(n(414)),l=d(n(430)),u=d(n(431)),c=d(n(436)),h=n(437);function d(t){return t&&t.__esModule?t:{default:t}}n(439),e.Sidebar=l.default,e.Loader=a.default,e.UploadImage=s.default,e.Gate=u.default,e.TableObject=h.TableObject,e.TableArray=h.TableArray,e.TableTuples=h.TableTuples,e.TableRow=h.TableRow,e.TableCell=h.TableCell,e.Classifier=i.default,e.DetectionList=r.default,e.DetectionBoxes=o.default,e.Video=c.default},function(t,e,n){var i=n(15),o=n(189),r=n(75),a=n(73)("IE_PROTO"),s=function(){},l=function(){var t,e=n(70)("iframe"),i=r.length;for(e.style.display="none",n(105).appendChild(e),e.src="javascript:",(t=e.contentWindow.document).open(),t.write(" + + + + + \ No newline at end of file diff --git a/site/public/datasets/brainwash/index.html b/site/public/datasets/brainwash/index.html index e1717179..28f8ccc6 100644 --- a/site/public/datasets/brainwash/index.html +++ b/site/public/datasets/brainwash/index.html @@ -49,11 +49,7 @@
diff --git a/site/public/datasets/duke_mtmc/index.html b/site/public/datasets/duke_mtmc/index.html index c12f1522..adb81953 100644 --- a/site/public/datasets/duke_mtmc/index.html +++ b/site/public/datasets/duke_mtmc/index.html @@ -49,11 +49,7 @@
diff --git a/site/public/datasets/hrt_transgender/index.html b/site/public/datasets/hrt_transgender/index.html index 1859e830..4f046aa7 100644 --- a/site/public/datasets/hrt_transgender/index.html +++ b/site/public/datasets/hrt_transgender/index.html @@ -49,11 +49,7 @@
diff --git a/site/public/datasets/ijb_c/index.html b/site/public/datasets/ijb_c/index.html index 511420b9..2b00e5d5 100644 --- a/site/public/datasets/ijb_c/index.html +++ b/site/public/datasets/ijb_c/index.html @@ -49,11 +49,7 @@
diff --git a/site/public/datasets/index.html b/site/public/datasets/index.html index 4c50ceb5..a5c9c14a 100644 --- a/site/public/datasets/index.html +++ b/site/public/datasets/index.html @@ -49,11 +49,7 @@
diff --git a/site/public/datasets/msceleb/assets/notes/index.html b/site/public/datasets/msceleb/assets/notes/index.html index 469a7bca..e9751129 100644 --- a/site/public/datasets/msceleb/assets/notes/index.html +++ b/site/public/datasets/msceleb/assets/notes/index.html @@ -49,11 +49,7 @@
diff --git a/site/public/datasets/msceleb/index.html b/site/public/datasets/msceleb/index.html index a8172dff..61c32385 100644 --- a/site/public/datasets/msceleb/index.html +++ b/site/public/datasets/msceleb/index.html @@ -49,11 +49,7 @@
diff --git a/site/public/datasets/oxford_town_centre/index.html b/site/public/datasets/oxford_town_centre/index.html index 0bf0e1be..f77b6b08 100644 --- a/site/public/datasets/oxford_town_centre/index.html +++ b/site/public/datasets/oxford_town_centre/index.html @@ -49,11 +49,7 @@
diff --git a/site/public/datasets/uccs/assets/notes/index.html b/site/public/datasets/uccs/assets/notes/index.html index e611476b..8746ed70 100644 --- a/site/public/datasets/uccs/assets/notes/index.html +++ b/site/public/datasets/uccs/assets/notes/index.html @@ -49,11 +49,7 @@
diff --git a/site/public/datasets/uccs/index.html b/site/public/datasets/uccs/index.html index 24544205..0ece4c6e 100644 --- a/site/public/datasets/uccs/index.html +++ b/site/public/datasets/uccs/index.html @@ -49,11 +49,7 @@
diff --git a/site/public/info/index.html b/site/public/info/index.html index 7d3d47e8..d1c2fb02 100644 --- a/site/public/info/index.html +++ b/site/public/info/index.html @@ -49,11 +49,7 @@
diff --git a/site/public/research/00_introduction/index.html b/site/public/research/00_introduction/index.html index e736f056..e056bc62 100644 --- a/site/public/research/00_introduction/index.html +++ b/site/public/research/00_introduction/index.html @@ -49,11 +49,7 @@
diff --git a/site/public/research/01_from_1_to_100_pixels/index.html b/site/public/research/01_from_1_to_100_pixels/index.html index 09503074..90efd707 100644 --- a/site/public/research/01_from_1_to_100_pixels/index.html +++ b/site/public/research/01_from_1_to_100_pixels/index.html @@ -49,11 +49,7 @@
diff --git a/site/public/research/02_what_computers_can_see/index.html b/site/public/research/02_what_computers_can_see/index.html index 7c07c72b..f8a36624 100644 --- a/site/public/research/02_what_computers_can_see/index.html +++ b/site/public/research/02_what_computers_can_see/index.html @@ -49,11 +49,7 @@
diff --git a/site/public/research/index.html b/site/public/research/index.html index c64a1096..569857c5 100644 --- a/site/public/research/index.html +++ b/site/public/research/index.html @@ -49,11 +49,7 @@
diff --git a/site/public/test/chart/index.html b/site/public/test/chart/index.html index 1c8af1a5..87067a28 100644 --- a/site/public/test/chart/index.html +++ b/site/public/test/chart/index.html @@ -49,11 +49,7 @@
diff --git a/site/public/test/citations/index.html b/site/public/test/citations/index.html index d14475d6..685395f0 100644 --- a/site/public/test/citations/index.html +++ b/site/public/test/citations/index.html @@ -49,11 +49,7 @@
diff --git a/site/public/test/csv/index.html b/site/public/test/csv/index.html index c4927b4e..9fbda1c6 100644 --- a/site/public/test/csv/index.html +++ b/site/public/test/csv/index.html @@ -49,11 +49,7 @@
diff --git a/site/public/test/datasets/index.html b/site/public/test/datasets/index.html index 43f84766..2270349f 100644 --- a/site/public/test/datasets/index.html +++ b/site/public/test/datasets/index.html @@ -49,11 +49,7 @@
diff --git a/site/public/test/face_search/index.html b/site/public/test/face_search/index.html index b756dd67..15a6899d 100644 --- a/site/public/test/face_search/index.html +++ b/site/public/test/face_search/index.html @@ -49,11 +49,7 @@
diff --git a/site/public/test/gallery/index.html b/site/public/test/gallery/index.html index c3efa57e..6746fe6a 100644 --- a/site/public/test/gallery/index.html +++ b/site/public/test/gallery/index.html @@ -49,11 +49,7 @@
diff --git a/site/public/test/index.html b/site/public/test/index.html index 26d48053..a0989be1 100644 --- a/site/public/test/index.html +++ b/site/public/test/index.html @@ -49,11 +49,7 @@
diff --git a/site/public/test/map/index.html b/site/public/test/map/index.html index 6d786724..9229abc5 100644 --- a/site/public/test/map/index.html +++ b/site/public/test/map/index.html @@ -49,11 +49,7 @@
diff --git a/site/public/test/name_search/index.html b/site/public/test/name_search/index.html index ecf003d0..d900e565 100644 --- a/site/public/test/name_search/index.html +++ b/site/public/test/name_search/index.html @@ -49,11 +49,7 @@
diff --git a/site/public/test/pie_chart/index.html b/site/public/test/pie_chart/index.html index 14d7c179..72dc0290 100644 --- a/site/public/test/pie_chart/index.html +++ b/site/public/test/pie_chart/index.html @@ -49,11 +49,7 @@
diff --git a/site/templates/layout.html b/site/templates/layout.html index a98eaaba..39de27a6 100644 --- a/site/templates/layout.html +++ b/site/templates/layout.html @@ -49,11 +49,7 @@
-- cgit v1.2.3-70-g09d2 From 85a5300921e1b3d46311161d2069d94326ee5776 Mon Sep 17 00:00:00 2001 From: Adam Harvey Date: Wed, 5 Jun 2019 23:38:00 -0500 Subject: update datasets --- site/content/pages/datasets/index.md | 4 +++- site/content/pages/datasets/msceleb/index.md | 35 ++++++++++++++-------------- site/public/datasets/index.html | 3 ++- site/public/datasets/msceleb/index.html | 33 +++++++++++++------------- 4 files changed, 38 insertions(+), 37 deletions(-) (limited to 'site/public/datasets') diff --git a/site/content/pages/datasets/index.md b/site/content/pages/datasets/index.md index 6e96f19e..8dbee237 100644 --- a/site/content/pages/datasets/index.md +++ b/site/content/pages/datasets/index.md @@ -13,4 +13,6 @@ sync: false # Dataset Analyses -Explore face and person recognition datasets contributing to the growing crisis of authoritarian biometric surveillance. This first group of 5 datasets focuses on image usage connected to foreign surveillance and defense organizations. Since publishing this project in April 2019, the [Brainwash](https://purl.stanford.edu/sx925dc9385), [Duke MTMC](http://vision.cs.duke.edu/DukeMTMC/), and [MS Celeb](http://msceleb.org/) datasets have been taken down by their authors. The [UCCS](https://vast.uccs.edu/Opensetface/) dataset was temporarily deactivated due to metadata exposure and the [Town Centre data](http://www.robots.ox.ac.uk/ActiveVision/Research/Projects/2009bbenfold_headpose/project.html) remains active. +Explore face and person recognition datasets contributing to the growing crisis of authoritarian biometric surveillance. This first group of 5 datasets focuses on image usage connected to foreign surveillance and defense organizations. + +Since publishing this project in April 2019, the [Brainwash](https://purl.stanford.edu/sx925dc9385), [Duke MTMC](http://vision.cs.duke.edu/DukeMTMC/), and [MS Celeb](http://msceleb.org/) datasets have been taken down by their authors. The [UCCS](https://vast.uccs.edu/Opensetface/) dataset was temporarily deactivated due to metadata exposure and the [Town Centre data](http://www.robots.ox.ac.uk/ActiveVision/Research/Projects/2009bbenfold_headpose/project.html) remains active. diff --git a/site/content/pages/datasets/msceleb/index.md b/site/content/pages/datasets/msceleb/index.md index 22a799e0..84d09604 100644 --- a/site/content/pages/datasets/msceleb/index.md +++ b/site/content/pages/datasets/msceleb/index.md @@ -19,17 +19,17 @@ authors: Adam Harvey ### sidebar ### end sidebar -Microsoft Celeb (MS Celeb or MS-Celeb-1M) is a dataset of 10 million face images harvested from the Internet for the purpose of developing face recognition technologies. According to Microsoft Research, who created and published the [dataset](https://www.microsoft.com/en-us/research/publication/ms-celeb-1m-dataset-benchmark-large-scale-face-recognition-2/) in 2016, MS Celeb is the largest publicly available face recognition dataset in the world, containing over 10 million images of nearly 100,000 individuals. Microsoft's goal in building this dataset was to distribute an initial training dataset of 100,000 individuals' biometric data to accelerate research into recognizing a larger target list of one million people "using all the possibly collected face images of this individual on the web as training data".[^msceleb_orig] +Microsoft Celeb (MS-Celeb-1M) is a dataset of 10 million face images harvested from the Internet for the purpose of developing face recognition technologies. According to Microsoft Research, who created and published the [dataset](https://www.microsoft.com/en-us/research/publication/ms-celeb-1m-dataset-benchmark-large-scale-face-recognition-2/) in 2016, MS Celeb is the largest publicly available face recognition dataset in the world, containing over 10 million images of nearly 100,000 individuals. Microsoft's goal in building this dataset was to distribute an initial training dataset of 100,000 individuals' biometric data to accelerate research into recognizing a larger target list of one million people "using all the possibly collected face images of this individual on the web as training data".[^msceleb_orig] While the majority of people in this dataset are American and British actors, the exploitative use of the term "celebrity" extends far beyond Hollywood. Many of the names in the MS Celeb face recognition dataset are merely people who must maintain an online presence for their professional lives: journalists, artists, musicians, activists, policy makers, writers, and academics. Many people in the target list are even vocal critics of the very technology Microsoft is using their name and biometric information to build. It includes digital rights activists like Jillian York; artists critical of surveillance including Trevor Paglen, Jill Magid, and Aram Bartholl; Intercept founders Laura Poitras, Jeremy Scahill, and Glenn Greenwald; Data and Society founder danah boyd; Shoshana Zuboff, author of *Surveillance Capitalism*; and even Julie Brill, the former FTC commissioner responsible for protecting consumer privacy. ### Microsoft's 1 Million Target List -Microsoft Research distributed two main digital assets: a dataset of approximately 10,000,000 images of 100,000 individuals and a target list of exactly 1 million names. The 900,000 names without images are the target list, which is used to gather more images for these individuals. +Microsoft Research distributed two main digital assets: a dataset of approximately 10,000,000 images of 100,000 individuals and a target list of exactly 1 million names. The 900,000 names without images are the target list, which is used to gather more images for each subject. -For example in a research project authored by researchers from SenseTime's Joint Lab at the Chinese University of Hong Kong called "[Consensus-Driven Propagation in Massive Unlabeled Data for Face Recognition](https://arxiv.org/pdf/1809.01407.pdf)", approximately 7 million images from an additional 285,000 subjects were added to their dataset. The images were obtained by crawling the internet using the MS Celeb target list as the search query. +For example in a research project authored by researchers from SenseTime's Joint Lab at the Chinese University of Hong Kong called "[Consensus-Driven Propagation in Massive Unlabeled Data for Face Recognition](https://arxiv.org/pdf/1809.01407.pdf)", approximately 7 million images from an additional 285,000 subjects were added to their dataset. The images were obtained by crawling the internet using the MS Celeb target list as search queries. -Below is a selection of 24 names from both the target list and image list curated to illustrate Microsoft's expansive and exploitative practice of scraping the Internet for biometric training data. Names with a number indicate how many images were distributed by Microsoft. Since publishing the analysis, Microsoft has quietly taken down their [msceleb.org](https://msceleb.org) website but a partial list of the identifiers is still available on [github.com/JinRC/C-MS-Celeb/](https://github.com/JinRC/C-MS-Celeb/). The IDs are in the format "m.abc123" and can be accessed through [Google's Knowledge Graph](https://developers.google.com/knowledge-graph/reference/rest/v1/) as "/m/abc123" to obtain the subject names. +Below is a selection of 24 names from both the target list and image list curated to illustrate Microsoft's expansive and exploitative practice of scraping the Internet for biometric training data for "celebrities". Names with a number indicate how many images were distributed by Microsoft. Since publishing the analysis, Microsoft has quietly taken down their [msceleb.org](https://msceleb.org) website but a partial list of the identifiers is still available on [github.com/JinRC/C-MS-Celeb/](https://github.com/JinRC/C-MS-Celeb/). The IDs are in the format "m.abc123" and can be accessed through [Google's Knowledge Graph](https://developers.google.com/knowledge-graph/reference/rest/v1/) as "/m/abc123" to obtain the subject names. === columns 2 @@ -78,40 +78,39 @@ One of the 4 SenseTime papers, "[Exploring Disentangled Feature Representation B Earlier in 2019, Microsoft President and Chief Legal Officer [Brad Smith](https://blogs.microsoft.com/on-the-issues/2018/12/06/facial-recognition-its-time-for-action/) called for the governmental regulation of face recognition, citing the potential for misuse, a rare admission that Microsoft's surveillance-driven business model had lost its bearing. More recently Smith also [announced](https://www.reuters.com/article/us-microsoft-ai/microsoft-turned-down-facial-recognition-sales-on-human-rights-concerns-idUSKCN1RS2FV) that Microsoft would seemingly take a stand against such potential misuse, and had decided to not sell face recognition to an unnamed United States agency, citing a lack of accuracy. In effect, Microsoft's face recognition software was not suitable to be used on minorities because it was trained mostly on white male faces. -What the decision to block the sale announces is not so much that Microsoft had upgraded their ethics policy, but that Microsoft publicly acknowledged it can't sell a data-driven product without data. In other words, Microsoft can't sell face recognition if they don't have enough data to build it. +What the decision to block the sale announces is not so much that Microsoft had upgraded their ethics policy, but that Microsoft publicly acknowledged it can't sell a data-driven product without data. In other words, Microsoft can't sell face recognition if they don't have enough face training data to build it. -Until now, that data has been freely harvested from the Internet and packaged in training sets like MS Celeb, which are overwhelmingly [white](https://www.nytimes.com/2018/02/09/technology/facial-recognition-race-artificial-intelligence.html) and [male](https://gendershades.org). Without balanced data, facial recognition contains blind spots. But without the large-scale datasets like MS Celeb, the powerful yet inaccurate facial recognition services like Microsoft's Azure Cognitive would be even less usable. +Until now, that data has been freely harvested from the Internet and packaged in training sets like MS Celeb, which are overwhelmingly [white](https://www.nytimes.com/2018/02/09/technology/facial-recognition-race-artificial-intelligence.html) and [male](https://gendershades.org). Without balanced data, facial recognition contains blind spots. But without the large-scale datasets like MS Celeb, the powerful yet inaccurate facial recognition services like Microsoft Azure Cognitive would be even less usable. ![caption: A visualization of 2,000 of the 100,000 identities included in the MS-Celeb-1M dataset distributed by Microsoft Research. License: Open Data Commons Public Domain Dedication (PDDL)](assets/msceleb_montage.jpg) Microsoft didn't only create MS Celeb for other researchers to use, they also used it internally. In a publicly available 2017 Microsoft Research project called "[One-shot Face Recognition by Promoting Underrepresented Classes](https://www.microsoft.com/en-us/research/publication/one-shot-face-recognition-promoting-underrepresented-classes/)," Microsoft used the MS Celeb face dataset to build their algorithms and advertise the results. Interestingly, Microsoft's [corporate version](https://www.microsoft.com/en-us/research/publication/one-shot-face-recognition-promoting-underrepresented-classes/) of the paper does not mention they used the MS Celeb datset, but the [open-access version](https://www.semanticscholar.org/paper/One-shot-Face-Recognition-by-Promoting-Classes-Guo/6cacda04a541d251e8221d70ac61fda88fb61a70) published on arxiv.org does. It states that Microsoft Research analyzed their algorithms using "the MS-Celeb-1M low-shot learning benchmark task."[^one_shot] -Typically researchers will phrase this differently and say they use data to validate their algorithm. But in reality neural network algorithms without data are only blueprints for how to use the data. Neural network algorithms are used to extract knowledge and distill it into an active format where it can be used for inference. Passing a face image through a face recognition neural network is to pass that image through the entire dataset. +Typically researchers will phrase this differently and say that they only use a dataset to validate their algorithm. But validation data can't be easily seperated from the training process. To develop a neural network model, image training datasets are split into three parts: train, test, and validation. Training data is used to fit a model, and the validation and test data are used to provide feedback about the hyperparameters, biases, and outputs. In reality, test and validation data steers and influences the final results of neural networks. ## Runaway Data -Despite Microsoft's recent action to quietly shut down their large scale distribution of non-cooperative biometrics on the [MS Celeb](https://msceleb.org) website, the dataset still exists in several repositories on GitHub, the hard drives of countless researchers, and will likely continue to be used in research projects around the world. +Despite the recent termination of the [msceleb.org](https://msceleb.org) website, the dataset still exists in several repositories on GitHub, the hard drives of countless researchers, and will likely continue to be used in research projects around the world. -The most recent of which is a paper uploaded to arxiv.org on April 2, 2019 jointly authored by researchers from IIIT-Delhi and IBM TJ Watson Research Center. In their paper titled [Deep Learning for Face Recognition: Pride or Prejudiced?](https://arxiv.org/abs/1904.01219), the researchers use a new dataset, called *Racial Faces in the Wild* (RFW), made entirely from the original images of the MS Celeb dataset. To create it, the RFW authors uploaded everyone's image from the MS Celeb dataset to Face++ and used the inferred racial scores to segregate people into four subsets: Caucasian, Asian, Indian, and African each with 3,000 subjects. +For example, on October 28, 2019, the MS Celeb dataset will be used for a new competition called "[Lightweight Face Recognition Challenge & Workshop](https://ibug.doc.ic.ac.uk/resources/lightweight-face-recognition-challenge-workshop/)" where the best face recognition entries will be awarded $5,000 from Huawei and $3,000 from DeepGlint. The competition is part of the [ICCV 2019 conference](http://iccv2019.thecvf.com/program/workshops). This time the challenge is no longer being organized by Microsoft, who created the dataset, but instead by Imperial College London (UK) and [InsightFace](https://github.com/deepinsight/insightface) (CN). -Face++ is a face recognition product from Megvii Inc. who has been repeatedly linked to the oppressive surveillance of Uighur Muslims in Xinjiang, China. According to posts from the [ChinAI Newsletter](https://chinai.substack.com/p/chinai-newsletter-11-companies-involved-in-expanding-chinas-public-security-apparatus-in-xinjiang) and [BuzzFeedNews](https://www.buzzfeednews.com/article/ryanmac/us-money-funding-facial-recognition-sensetime-megvii), Megvii announced in 2017 at the China-Eurasia Security Expo in Ürümqi, Xinjiang, that it would be the official technical support unit of the "Public Security Video Laboratory" in Xinjiang, China. +And earlier in 2019 images from the MS Celeb were repackaged into another face dataset called *Racial Faces in the Wild (RFW)*. To create it, the RFW authors uploaded face images from the MS Celeb dataset to the Face++ API and used the inferred racial scores to segregate people into four subsets: Caucasian, Asian, Indian, and African each with 3,000 subjects. That dataset then appeared in a subsequent research project from researchers affilliated with IIIT-Delhi and IBM TJ Watson called [Deep Learning for Face Recognition: Pride or Prejudiced?](https://arxiv.org/abs/1904.01219), which aims to reduce bias but also inadvertently furthers racist language and ideologies in the paper. -## Commercial Usage +The technology used to compute the estimated racial scores for the for the MS Celeb face images used in the RFW dataset is owned by Megvii Inc, who has been repeatedly linked to the oppressive surveillance of Uighur Muslims in Xinjiang, China. According to posts from the [ChinAI Newsletter](https://chinai.substack.com/p/chinai-newsletter-11-companies-involved-in-expanding-chinas-public-security-apparatus-in-xinjiang) and [BuzzFeedNews](https://www.buzzfeednews.com/article/ryanmac/us-money-funding-facial-recognition-sensetime-megvii), Megvii announced in 2017 at the China-Eurasia Security Expo in Ürümqi, Xinjiang, that it would be the official technical support unit of the "Public Security Video Laboratory" in Xinjiang, China. If they didn't already, it's highly likely that Megvii has a copy of everyone's biometric faceprint from the MS Celeb dataset. -Megvii publicly acknowledges using the MS Celeb face dataset in their 2018 research project called [GridFace: Face Rectification via Learning Local Homography Transformations](https://arxiv.org/pdf/1808.06210.pdf). The paper has three authors, all of whom were associated with Megvii, indicating that the dataset has been used for research associated with commercial activity. However, on Microsoft's [website](http://web.archive.org/web/20180218212120/http://www.msceleb.org/download/sampleset) they state that the dataset was released "for non-commercial research purpose only." +Megvii also publicly acknowledges using the MS Celeb face dataset in their 2018 research project called [GridFace: Face Rectification via Learning Local Homography Transformations](https://arxiv.org/pdf/1808.06210.pdf). The paper has three authors, all of whom were associated with Megvii. -A more clear example of commercial use happened in 2017 when Microsoft Research organized a face recognition competition at the International Conference on Computer Vision (ICCV), one of the top 2 computer vision conferences worldwide, where industry and academia compete to achieve the highest performance using their recognition technology. In 2017, the winner of the MS-Celeb-1M challenge was Beijing-based OrionStar Technology Co., Ltd.. In their [press release](https://www.prnewswire.com/news-releases/orionstar-wins-challenge-to-recognize-one-million-celebrity-faces-with-artificial-intelligence-300494265.html), OrionStar boast 13% increase on the difficult set over last year's winner. +## Commercial Usage -Microsoft Research also ran a similar competition in 2016 that with other commercial participants including Beijing Faceall Technology Co., Ltd., a company providing face recognition for "smart city" applications. -On October 28, 2019, the MS Celeb dataset will be used for yet competition called "[Lightweight Face Recognition Challenge & Workshop](https://ibug.doc.ic.ac.uk/resources/lightweight-face-recognition-challenge-workshop/)" where the best face recognition entry will be awarded $5,000 from Huawei and $3,000 from DeepGlint. The competition is part of the [ICCV 2019 conference](http://iccv2019.thecvf.com/program/workshops). This time the challenge is no longer being organized by Microsoft, who created the dataset, but instead by Imperial College London (UK) and [InsightFace](https://github.com/deepinsight/insightface) (CN). +The Microsoft Celeb dataset [website](http://web.archive.org/web/20180218212120/http://www.msceleb.org/download/sampleset) says it was created for "non-commercial research purpose only." Publicly available research citations and competitions show otherwise. -Even though Microsoft has shuttered access to the official distribution website [msceleb.org](https://msceleb.org) the dataset can still be easily downloaded from [https://ibug.doc.ic.ac.uk/resources/lightweight-face-recognition-challenge-workshop/](https://ibug.doc.ic.ac.uk/resources/lightweight-face-recognition-challenge-workshop/) without agreeing to any terms for usage or further distribution. +In 2017 Microsoft Research organized a face recognition competition at the International Conference on Computer Vision (ICCV), one of the top 2 computer vision conferences worldwide, where industry and academia used the MS Celeb dataset to compete for the higest performance scores. The winner was Beijing-based OrionStar Technology Co., Ltd.. In their [press release](https://www.prnewswire.com/news-releases/orionstar-wins-challenge-to-recognize-one-million-celebrity-faces-with-artificial-intelligence-300494265.html), OrionStar boast 13% increase on the difficult set over last year's winner. The prior year's competitors included Beijing-based Faceall Technology Co., Ltd., a company providing face recognition for "smart city" applications. -Considering the multiple citations from commercial organizations (Canon, Hitachi, IBM, Megvii, Microsoft, Microsoft Asia, SenseTime), military use (National University of Defense Technology in China), and the proliferation of subsets being used for new face recognition competitions it's fairly clear that Microsoft is no longer in control of their MS Celeb dataset nor the biometric data of nearly 10 million images of 100,000 individuals whose images were distributed in the dataset. +Considering the multiple citations from commercial organizations (Canon, Hitachi, IBM, Megvii/Face++, Microsoft, Microsoft Asia, SenseTime), military use (National University of Defense Technology in China), and the proliferation of subset data (Racial Faces in the Wild) being used to develop face recognition technology for commercial or defense purposes it's fairly clear that Microsoft has lost control of their MS Celeb dataset and biometric data of nearly 100,000 individuals. -To provide insight into where these 10 million faces images have traveled, we mapped all the publicly available research citations to show who used the dataset and where it was used. +To provide insight into where these 10 million faces images have traveled, over 100 research papers have been verified and geolocated to show who used the dataset and where it was used. {% include 'dashboard.html' %} diff --git a/site/public/datasets/index.html b/site/public/datasets/index.html index a5c9c14a..0a702c10 100644 --- a/site/public/datasets/index.html +++ b/site/public/datasets/index.html @@ -57,7 +57,8 @@

Dataset Analyses

-

Explore face and person recognition datasets contributing to the growing crisis of authoritarian biometric surveillance. This first group of 5 datasets focuses on image usage connected to foreign surveillance and defense organizations. Since publishing this project in April 2019, the Brainwash, Duke MTMC, and MS Celeb datasets have been taken down by their authors. The UCCS dataset was temporarily deactivated due to metadata exposure and the Town Centre data remains active.

+

Explore face and person recognition datasets contributing to the growing crisis of authoritarian biometric surveillance. This first group of 5 datasets focuses on image usage connected to foreign surveillance and defense organizations.

+

Since publishing this project in April 2019, the Brainwash, Duke MTMC, and MS Celeb datasets have been taken down by their authors. The UCCS dataset was temporarily deactivated due to metadata exposure and the Town Centre data remains active.

diff --git a/site/public/datasets/msceleb/index.html b/site/public/datasets/msceleb/index.html index 61c32385..7c3ac86c 100644 --- a/site/public/datasets/msceleb/index.html +++ b/site/public/datasets/msceleb/index.html @@ -77,12 +77,12 @@
Website
-

Microsoft Celeb (MS Celeb or MS-Celeb-1M) is a dataset of 10 million face images harvested from the Internet for the purpose of developing face recognition technologies. According to Microsoft Research, who created and published the dataset in 2016, MS Celeb is the largest publicly available face recognition dataset in the world, containing over 10 million images of nearly 100,000 individuals. Microsoft's goal in building this dataset was to distribute an initial training dataset of 100,000 individuals' biometric data to accelerate research into recognizing a larger target list of one million people "using all the possibly collected face images of this individual on the web as training data". 1

+

Microsoft Celeb (MS-Celeb-1M) is a dataset of 10 million face images harvested from the Internet for the purpose of developing face recognition technologies. According to Microsoft Research, who created and published the dataset in 2016, MS Celeb is the largest publicly available face recognition dataset in the world, containing over 10 million images of nearly 100,000 individuals. Microsoft's goal in building this dataset was to distribute an initial training dataset of 100,000 individuals' biometric data to accelerate research into recognizing a larger target list of one million people "using all the possibly collected face images of this individual on the web as training data". 1

While the majority of people in this dataset are American and British actors, the exploitative use of the term "celebrity" extends far beyond Hollywood. Many of the names in the MS Celeb face recognition dataset are merely people who must maintain an online presence for their professional lives: journalists, artists, musicians, activists, policy makers, writers, and academics. Many people in the target list are even vocal critics of the very technology Microsoft is using their name and biometric information to build. It includes digital rights activists like Jillian York; artists critical of surveillance including Trevor Paglen, Jill Magid, and Aram Bartholl; Intercept founders Laura Poitras, Jeremy Scahill, and Glenn Greenwald; Data and Society founder danah boyd; Shoshana Zuboff, author of Surveillance Capitalism; and even Julie Brill, the former FTC commissioner responsible for protecting consumer privacy.

Microsoft's 1 Million Target List

-

Microsoft Research distributed two main digital assets: a dataset of approximately 10,000,000 images of 100,000 individuals and a target list of exactly 1 million names. The 900,000 names without images are the target list, which is used to gather more images for these individuals.

-

For example in a research project authored by researchers from SenseTime's Joint Lab at the Chinese University of Hong Kong called "Consensus-Driven Propagation in Massive Unlabeled Data for Face Recognition", approximately 7 million images from an additional 285,000 subjects were added to their dataset. The images were obtained by crawling the internet using the MS Celeb target list as the search query.

-

Below is a selection of 24 names from both the target list and image list curated to illustrate Microsoft's expansive and exploitative practice of scraping the Internet for biometric training data. Names with a number indicate how many images were distributed by Microsoft. Since publishing the analysis, Microsoft has quietly taken down their msceleb.org website but a partial list of the identifiers is still available on github.com/JinRC/C-MS-Celeb/. The IDs are in the format "m.abc123" and can be accessed through Google's Knowledge Graph as "/m/abc123" to obtain the subject names.

+

Microsoft Research distributed two main digital assets: a dataset of approximately 10,000,000 images of 100,000 individuals and a target list of exactly 1 million names. The 900,000 names without images are the target list, which is used to gather more images for each subject.

+

For example in a research project authored by researchers from SenseTime's Joint Lab at the Chinese University of Hong Kong called "Consensus-Driven Propagation in Massive Unlabeled Data for Face Recognition", approximately 7 million images from an additional 285,000 subjects were added to their dataset. The images were obtained by crawling the internet using the MS Celeb target list as search queries.

+

Below is a selection of 24 names from both the target list and image list curated to illustrate Microsoft's expansive and exploitative practice of scraping the Internet for biometric training data for "celebrities". Names with a number indicate how many images were distributed by Microsoft. Since publishing the analysis, Microsoft has quietly taken down their msceleb.org website but a partial list of the identifiers is still available on github.com/JinRC/C-MS-Celeb/. The IDs are in the format "m.abc123" and can be accessed through Google's Knowledge Graph as "/m/abc123" to obtain the subject names.

@@ -202,22 +202,21 @@

Four more papers published by SenseTime that also use the MS Celeb dataset raise similar flags. SenseTime is a computer vision surveillance company that until April 2019 provided surveillance to Chinese authorities to monitor and track Uighur Muslims in Xinjiang province, and had been flagged numerous times as having potential links to human rights violations.

One of the 4 SenseTime papers, "Exploring Disentangled Feature Representation Beyond Face Identification", shows how SenseTime was developing automated face analysis technology to infer race, narrow eyes, nose size, and chin size, all of which could be used to target vulnerable ethnic groups based on their facial appearances, and using the MS Celeb dataset to build their technology.

Earlier in 2019, Microsoft President and Chief Legal Officer Brad Smith called for the governmental regulation of face recognition, citing the potential for misuse, a rare admission that Microsoft's surveillance-driven business model had lost its bearing. More recently Smith also announced that Microsoft would seemingly take a stand against such potential misuse, and had decided to not sell face recognition to an unnamed United States agency, citing a lack of accuracy. In effect, Microsoft's face recognition software was not suitable to be used on minorities because it was trained mostly on white male faces.

-

What the decision to block the sale announces is not so much that Microsoft had upgraded their ethics policy, but that Microsoft publicly acknowledged it can't sell a data-driven product without data. In other words, Microsoft can't sell face recognition if they don't have enough data to build it.

-

Until now, that data has been freely harvested from the Internet and packaged in training sets like MS Celeb, which are overwhelmingly white and male. Without balanced data, facial recognition contains blind spots. But without the large-scale datasets like MS Celeb, the powerful yet inaccurate facial recognition services like Microsoft's Azure Cognitive would be even less usable.

+

What the decision to block the sale announces is not so much that Microsoft had upgraded their ethics policy, but that Microsoft publicly acknowledged it can't sell a data-driven product without data. In other words, Microsoft can't sell face recognition if they don't have enough face training data to build it.

+

Until now, that data has been freely harvested from the Internet and packaged in training sets like MS Celeb, which are overwhelmingly white and male. Without balanced data, facial recognition contains blind spots. But without the large-scale datasets like MS Celeb, the powerful yet inaccurate facial recognition services like Microsoft Azure Cognitive would be even less usable.

 A visualization of 2,000 of the 100,000 identities included in the MS-Celeb-1M dataset distributed by Microsoft Research. License: Open Data Commons Public Domain Dedication (PDDL)
A visualization of 2,000 of the 100,000 identities included in the MS-Celeb-1M dataset distributed by Microsoft Research. License: Open Data Commons Public Domain Dedication (PDDL)

Microsoft didn't only create MS Celeb for other researchers to use, they also used it internally. In a publicly available 2017 Microsoft Research project called "One-shot Face Recognition by Promoting Underrepresented Classes," Microsoft used the MS Celeb face dataset to build their algorithms and advertise the results. Interestingly, Microsoft's corporate version of the paper does not mention they used the MS Celeb datset, but the open-access version published on arxiv.org does. It states that Microsoft Research analyzed their algorithms using "the MS-Celeb-1M low-shot learning benchmark task." 5

-

Typically researchers will phrase this differently and say they use data to validate their algorithm. But in reality neural network algorithms without data are only blueprints for how to use the data. Neural network algorithms are used to extract knowledge and distill it into an active format where it can be used for inference. Passing a face image through a face recognition neural network is to pass that image through the entire dataset.

+

Typically researchers will phrase this differently and say that they only use a dataset to validate their algorithm. But validation data can't be easily seperated from the training process. To develop a neural network model, image training datasets are split into three parts: train, test, and validation. Training data is used to fit a model, and the validation and test data are used to provide feedback about the hyperparameters, biases, and outputs. In reality, test and validation data steers and influences the final results of neural networks.

Runaway Data

-

Despite Microsoft's recent action to quietly shut down their large scale distribution of non-cooperative biometrics on the MS Celeb website, the dataset still exists in several repositories on GitHub, the hard drives of countless researchers, and will likely continue to be used in research projects around the world.

-

The most recent of which is a paper uploaded to arxiv.org on April 2, 2019 jointly authored by researchers from IIIT-Delhi and IBM TJ Watson Research Center. In their paper titled Deep Learning for Face Recognition: Pride or Prejudiced?, the researchers use a new dataset, called Racial Faces in the Wild (RFW), made entirely from the original images of the MS Celeb dataset. To create it, the RFW authors uploaded everyone's image from the MS Celeb dataset to Face++ and used the inferred racial scores to segregate people into four subsets: Caucasian, Asian, Indian, and African each with 3,000 subjects.

-

Face++ is a face recognition product from Megvii Inc. who has been repeatedly linked to the oppressive surveillance of Uighur Muslims in Xinjiang, China. According to posts from the ChinAI Newsletter and BuzzFeedNews, Megvii announced in 2017 at the China-Eurasia Security Expo in Ürümqi, Xinjiang, that it would be the official technical support unit of the "Public Security Video Laboratory" in Xinjiang, China.

+

Despite the recent termination of the msceleb.org website, the dataset still exists in several repositories on GitHub, the hard drives of countless researchers, and will likely continue to be used in research projects around the world.

+

For example, on October 28, 2019, the MS Celeb dataset will be used for a new competition called "Lightweight Face Recognition Challenge & Workshop" where the best face recognition entries will be awarded $5,000 from Huawei and $3,000 from DeepGlint. The competition is part of the ICCV 2019 conference. This time the challenge is no longer being organized by Microsoft, who created the dataset, but instead by Imperial College London (UK) and InsightFace (CN).

+

And earlier in 2019 images from the MS Celeb were repackaged into another face dataset called Racial Faces in the Wild (RFW). To create it, the RFW authors uploaded face images from the MS Celeb dataset to the Face++ API and used the inferred racial scores to segregate people into four subsets: Caucasian, Asian, Indian, and African each with 3,000 subjects. That dataset then appeared in a subsequent research project from researchers affilliated with IIIT-Delhi and IBM TJ Watson called Deep Learning for Face Recognition: Pride or Prejudiced?, which aims to reduce bias but also inadvertently furthers racist language and ideologies in the paper.

+

The technology used to compute the estimated racial scores for the for the MS Celeb face images used in the RFW dataset is owned by Megvii Inc, who has been repeatedly linked to the oppressive surveillance of Uighur Muslims in Xinjiang, China. According to posts from the ChinAI Newsletter and BuzzFeedNews, Megvii announced in 2017 at the China-Eurasia Security Expo in Ürümqi, Xinjiang, that it would be the official technical support unit of the "Public Security Video Laboratory" in Xinjiang, China. If they didn't already, it's highly likely that Megvii has a copy of everyone's biometric faceprint from the MS Celeb dataset.

+

Megvii also publicly acknowledges using the MS Celeb face dataset in their 2018 research project called GridFace: Face Rectification via Learning Local Homography Transformations. The paper has three authors, all of whom were associated with Megvii.

Commercial Usage

-

Megvii publicly acknowledges using the MS Celeb face dataset in their 2018 research project called GridFace: Face Rectification via Learning Local Homography Transformations. The paper has three authors, all of whom were associated with Megvii, indicating that the dataset has been used for research associated with commercial activity. However, on Microsoft's website they state that the dataset was released "for non-commercial research purpose only."

-

A more clear example of commercial use happened in 2017 when Microsoft Research organized a face recognition competition at the International Conference on Computer Vision (ICCV), one of the top 2 computer vision conferences worldwide, where industry and academia compete to achieve the highest performance using their recognition technology. In 2017, the winner of the MS-Celeb-1M challenge was Beijing-based OrionStar Technology Co., Ltd.. In their press release, OrionStar boast 13% increase on the difficult set over last year's winner.

-

Microsoft Research also ran a similar competition in 2016 that with other commercial participants including Beijing Faceall Technology Co., Ltd., a company providing face recognition for "smart city" applications.

-

On October 28, 2019, the MS Celeb dataset will be used for yet competition called "Lightweight Face Recognition Challenge & Workshop" where the best face recognition entry will be awarded $5,000 from Huawei and $3,000 from DeepGlint. The competition is part of the ICCV 2019 conference. This time the challenge is no longer being organized by Microsoft, who created the dataset, but instead by Imperial College London (UK) and InsightFace (CN).

-

Even though Microsoft has shuttered access to the official distribution website msceleb.org the dataset can still be easily downloaded from https://ibug.doc.ic.ac.uk/resources/lightweight-face-recognition-challenge-workshop/ without agreeing to any terms for usage or further distribution.

-

Considering the multiple citations from commercial organizations (Canon, Hitachi, IBM, Megvii, Microsoft, Microsoft Asia, SenseTime), military use (National University of Defense Technology in China), and the proliferation of subsets being used for new face recognition competitions it's fairly clear that Microsoft is no longer in control of their MS Celeb dataset nor the biometric data of nearly 10 million images of 100,000 individuals whose images were distributed in the dataset.

-

To provide insight into where these 10 million faces images have traveled, we mapped all the publicly available research citations to show who used the dataset and where it was used.

+

The Microsoft Celeb dataset website says it was created for "non-commercial research purpose only." Publicly available research citations and competitions show otherwise.

+

In 2017 Microsoft Research organized a face recognition competition at the International Conference on Computer Vision (ICCV), one of the top 2 computer vision conferences worldwide, where industry and academia used the MS Celeb dataset to compete for the higest performance scores. The winner was Beijing-based OrionStar Technology Co., Ltd.. In their press release, OrionStar boast 13% increase on the difficult set over last year's winner. The prior year's competitors included Beijing-based Faceall Technology Co., Ltd., a company providing face recognition for "smart city" applications.

+

Considering the multiple citations from commercial organizations (Canon, Hitachi, IBM, Megvii/Face++, Microsoft, Microsoft Asia, SenseTime), military use (National University of Defense Technology in China), and the proliferation of subset data (Racial Faces in the Wild) being used to develop face recognition technology for commercial or defense purposes it's fairly clear that Microsoft has lost control of their MS Celeb dataset and biometric data of nearly 100,000 individuals.

+

To provide insight into where these 10 million faces images have traveled, over 100 research papers have been verified and geolocated to show who used the dataset and where it was used.

Who used Microsoft Celeb?

-- cgit v1.2.3-70-g09d2
Name (images)