diff --git a/README.md b/README.md index cb7ca2942..e62f1ba1c 100644 --- a/README.md +++ b/README.md @@ -207,21 +207,38 @@ By default, tests run against our Staging instance, but you can pass in a differ location with the ROOT_URL environment variable (see below) if you want to run the tests against another location--for instance, your local build. -We are transitioning from using TAP to using Jest as our testing framework, -so for the time being our tests run using both. +All of our integration tests use Jest as our testing framework. #### Running the tests To run all integration tests from the command-line: ```bash -SMOKE_USERNAME=username SMOKE_PASSWORD=password ROOT_URL=https://scratch.mit.edu TEST_PROJECT_ID=1 npm run test:integration +SMOKE_USERNAME=username SMOKE_PASSWORD=password ROOT_URL=https://scratch.mit.edu UNOWNED_SHARED_PROJECT_ID=# UNOWNED_UNSHARED_PROJECT_ID=# OWNED_SHARED_PROJECT_ID=# OWNED_UNSHARED_PROJECT_ID=# npm run test:integration ``` -Both the TAP and Jest tests use the same username and password. The Jest tests will also use the the username you give with a 1 (soon to be higher numbers as well) appended to the end of it. So if you use the username "test" it will also use the username "test1." Make sure you have created accounts with this pattern and use the same password for all accounts involved. -The project page tests require a project id included as an environment variable to pass. The project must be shared and must have at least one remix. At this time, the project does not need to be owned by one of the test users, but that is likely to change. +#### Usernames/Password for the tests +The tests use multiple users with similar usernames and the same password. They use the the username you pass in with SMOKE_USERNAME as well as the same username with a 1, 2, 3, 4, 5, and 6 (soon to be higher numbers as well) appended to the end of it. So if you use the username "test" it will also use the username "test1", "test2", "test3", etc. Make sure you have created accounts with this pattern and use the same password for all accounts involved. + +You can use any set of usernames that fit this pattern. Each account needs to share the same password, which is passed in as SMOKE_PASSWORD. + +#### Environment Variables +Several environment variables need to be passed in for the tests to run. Most of them have defaults that point to the staging server. + + * SMOKE_USERNAME - Root username used for tests that sign in. See the Usernames section above + * SMOKE_PASSWORD - Password for all accounts used in the tests + * UNOWNED_SHARED_PROJECT_ID - ID for a shared project owned by [testuser]2 This project should have at least one remix. Remix it with another of the [testuser] accounts. Used in the project-page tests. + * OWNED_SHARED_PROJECT_ID - ID for a shared project owned by [testuser]6. Used in the project-page tests. + * UNOWNED_UNSHARED_PROJECT_ID - ID for an unshared project owned by [testuser]2. It is used in tests where it is opened by [testuser]6 in the project-page tests. + * OWNED_UNSHARED_PROJECT_ID - ID for an unshared project owned by [testuser]6. It will be opened by its owner in the project-page tests. + * SAUCE_USERNAME - Username for a saucelabs account. Only used when running tests remotely with test:integration:remote + * SAUCE_ACCESS_KEY - Access token used by the saucelabs account included. Only used when running tests remotely with test:integration:remote + * SMOKE_REMOTE - Boolean to set whether to use saucelabs to run tests remotely. Set to true automatically when running tests with test:integration:remote, otherwise defaults to false. + * RATE_LIMIT_CHECK - A URL that triggers clearing the studio creation rate limit for very specific accounts. This is needed for the my-stuff tests to test studio creation, ensuring they run the same every time. This needs to be setup separately. + +### Run a single test file To run a single file from the command-line using Jest: ```bash diff --git a/package-lock.json b/package-lock.json index 6235e4b8a..d273cefbd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -99,8 +99,8 @@ "regenerator-runtime": "0.13.9", "sass": "1.49.7", "sass-loader": "10.2.1", - "scratch-gui": "0.1.0-prerelease.20220426200048", - "scratch-l10n": "3.14.20220427031558", + "scratch-gui": "0.1.0-prerelease.20220504060134", + "scratch-l10n": "3.14.20220504031551", "selenium-webdriver": "4.1.0", "slick-carousel": "1.6.0", "style-loader": "0.12.3", @@ -22850,21 +22850,21 @@ } }, "node_modules/scratch-blocks": { - "version": "0.1.0-prerelease.20220329103322", - "resolved": "https://registry.npmjs.org/scratch-blocks/-/scratch-blocks-0.1.0-prerelease.20220329103322.tgz", - "integrity": "sha512-grVZZ41HsHVEpHFkWWkfJ6ukjSFqa6hiGReM5AI00pwDfbiHb9Nlti5R+pHs1kQljE9fsH7BUAwEKBGp1TTi0w==", + "version": "0.1.0-prerelease.20220501111245", + "resolved": "https://registry.npmjs.org/scratch-blocks/-/scratch-blocks-0.1.0-prerelease.20220501111245.tgz", + "integrity": "sha512-OVebiUFtr/15yjEq4gd+6GI4JPAs5UG2SGe+/Zx+z3gVuIRjgkusCmAc5QexNOGypf91nnQQCVCocvk7QdhB8Q==", "dev": true, "dependencies": { "exports-loader": "0.6.3", "google-closure-library": "20190301.0.0", "imports-loader": "0.6.5", - "scratch-l10n": "3.14.20220329031539" + "scratch-l10n": "3.14.20220428031608" } }, "node_modules/scratch-blocks/node_modules/scratch-l10n": { - "version": "3.14.20220329031539", - "resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-3.14.20220329031539.tgz", - "integrity": "sha512-mR425IM+JPXv0ByuIOw5QZP5Md9JIKLGaI348pgKMdOYZ0hZhJ5OZ3umVUs64LdZbDwnfsQRnIWA8WYYy6UiDg==", + "version": "3.14.20220428031608", + "resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-3.14.20220428031608.tgz", + "integrity": "sha512-FloINfIeRWPVnhdLV+gwStq6Zo2JkK0StjVraA1ueLj0Qf42owSWpn0ByYUHPfRx50KoB9hvMr6f0JYZuMzjMg==", "dev": true, "dependencies": { "@babel/cli": "^7.1.2", @@ -22878,9 +22878,9 @@ } }, "node_modules/scratch-gui": { - "version": "0.1.0-prerelease.20220426200048", - "resolved": "https://registry.npmjs.org/scratch-gui/-/scratch-gui-0.1.0-prerelease.20220426200048.tgz", - "integrity": "sha512-sGT8bPuoySfu6GJ+73DeUdxIcigmgApdVX0nfaQmAbUjyCjxDFxMibkCTCtIfi+DMaEMUOflvGs/cZmX+PZ44Q==", + "version": "0.1.0-prerelease.20220504060134", + "resolved": "https://registry.npmjs.org/scratch-gui/-/scratch-gui-0.1.0-prerelease.20220504060134.tgz", + "integrity": "sha512-MVFfuAxDAZG7s+apaGyGLom2WiH2R7gBBesYJl3tkMFDa28BBquasHuEBMaNYGj4Bt+rWqIIiBVyysY7RpiYLw==", "dev": true, "dependencies": { "arraybuffer-loader": "^1.0.6", @@ -22931,14 +22931,14 @@ "redux": "3.7.2", "redux-throttle": "0.1.1", "scratch-audio": "0.1.0-prerelease.20200528195344", - "scratch-blocks": "0.1.0-prerelease.20220329103322", - "scratch-l10n": "3.14.20220426031558", - "scratch-paint": "0.2.0-prerelease.20220426120240", + "scratch-blocks": "0.1.0-prerelease.20220501111245", + "scratch-l10n": "3.14.20220504031551", + "scratch-paint": "0.2.0-prerelease.20220429193038", "scratch-render": "0.1.0-prerelease.20211028200436", "scratch-render-fonts": "1.0.0-prerelease.20210401210003", "scratch-storage": "1.3.5", "scratch-svg-renderer": "0.2.0-prerelease.20210727023023", - "scratch-vm": "0.2.0-prerelease.20220426104209", + "scratch-vm": "0.2.0-prerelease.20220501145413", "startaudiocontext": "1.2.1", "style-loader": "^0.23.0", "text-encoding": "0.7.0", @@ -23227,26 +23227,10 @@ "symbol-observable": "^1.0.3" } }, - "node_modules/scratch-gui/node_modules/scratch-l10n": { - "version": "3.14.20220426031558", - "resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-3.14.20220426031558.tgz", - "integrity": "sha512-SgQ4Zd4LX9rTYvRpRhJitV7I0BIJFLBAyISogpDZNKIA7OAx3Fr5FvUofarUumZxoTmSdjzqDezZJpP4/u7+7w==", - "dev": true, - "dependencies": { - "@babel/cli": "^7.1.2", - "@babel/core": "^7.1.2", - "babel-plugin-react-intl": "^3.0.1", - "transifex": "1.6.6" - }, - "bin": { - "build-i18n-src": "scripts/build-i18n-src.js", - "tx-push-src": "scripts/tx-push-src.js" - } - }, "node_modules/scratch-gui/node_modules/scratch-paint": { - "version": "0.2.0-prerelease.20220426120240", - "resolved": "https://registry.npmjs.org/scratch-paint/-/scratch-paint-0.2.0-prerelease.20220426120240.tgz", - "integrity": "sha512-0hxmE9qHg+8Kka3Dc29Jml2PbUjrji0bS4sYXkh2JRMO1IZVUyWLcr9ju+rvu4DjiZee2X0bVTUGeGc73qSpHw==", + "version": "0.2.0-prerelease.20220429193038", + "resolved": "https://registry.npmjs.org/scratch-paint/-/scratch-paint-0.2.0-prerelease.20220429193038.tgz", + "integrity": "sha512-1jCa4ieYjMOc/nKrOlcGCG0DtseR+YAapIYHlraUO6DGHTBm2frB//CDkEHwOIlN54ZPOak2WS4oJYKDuFgqEQ==", "dev": true, "dependencies": { "@scratch/paper": "0.11.20200728195508", @@ -23346,9 +23330,9 @@ } }, "node_modules/scratch-l10n": { - "version": "3.14.20220427031558", - "resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-3.14.20220427031558.tgz", - "integrity": "sha512-0qdms1YJ4cZyHVpdLhfDU4c2VGbPWtGDCm+pfFUCkP3dpkFLn20iJwzIlNTzznVXMqa4WsC/qDfaMyLtGNcEtw==", + "version": "3.14.20220504031551", + "resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-3.14.20220504031551.tgz", + "integrity": "sha512-X65xULMmmUrSrKf+dEplskLg+HcFQWc6hzAJN7x8/j5O252v5z7SKrJbLhH1lzmtHyGfeLgiy6aHOfzt1TmCnA==", "dev": true, "dependencies": { "@babel/cli": "^7.1.2", @@ -23544,9 +23528,9 @@ "dev": true }, "node_modules/scratch-vm": { - "version": "0.2.0-prerelease.20220426104209", - "resolved": "https://registry.npmjs.org/scratch-vm/-/scratch-vm-0.2.0-prerelease.20220426104209.tgz", - "integrity": "sha512-8k1EHPStDNWDMm459z+FmBE3P17Qfivdo4ThHtMPJysWCBLLG65DPl4fQ4+Wl9AgP/XHhO1nwTdZiNkVHxetCQ==", + "version": "0.2.0-prerelease.20220501145413", + "resolved": "https://registry.npmjs.org/scratch-vm/-/scratch-vm-0.2.0-prerelease.20220501145413.tgz", + "integrity": "sha512-M6uETr2H3mnroeTAdO23TsQSg25yLXjmCzARj6Nrj4uZLHgxEmOx94kJItjdfYZ/N/+koGELSj9xzvL2gxalxA==", "dev": true, "dependencies": { "@vernier/godirect": "1.5.0", @@ -50759,21 +50743,21 @@ } }, "scratch-blocks": { - "version": "0.1.0-prerelease.20220329103322", - "resolved": "https://registry.npmjs.org/scratch-blocks/-/scratch-blocks-0.1.0-prerelease.20220329103322.tgz", - "integrity": "sha512-grVZZ41HsHVEpHFkWWkfJ6ukjSFqa6hiGReM5AI00pwDfbiHb9Nlti5R+pHs1kQljE9fsH7BUAwEKBGp1TTi0w==", + "version": "0.1.0-prerelease.20220501111245", + "resolved": "https://registry.npmjs.org/scratch-blocks/-/scratch-blocks-0.1.0-prerelease.20220501111245.tgz", + "integrity": "sha512-OVebiUFtr/15yjEq4gd+6GI4JPAs5UG2SGe+/Zx+z3gVuIRjgkusCmAc5QexNOGypf91nnQQCVCocvk7QdhB8Q==", "dev": true, "requires": { "exports-loader": "0.6.3", "google-closure-library": "20190301.0.0", "imports-loader": "0.6.5", - "scratch-l10n": "3.14.20220329031539" + "scratch-l10n": "3.14.20220428031608" }, "dependencies": { "scratch-l10n": { - "version": "3.14.20220329031539", - "resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-3.14.20220329031539.tgz", - "integrity": "sha512-mR425IM+JPXv0ByuIOw5QZP5Md9JIKLGaI348pgKMdOYZ0hZhJ5OZ3umVUs64LdZbDwnfsQRnIWA8WYYy6UiDg==", + "version": "3.14.20220428031608", + "resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-3.14.20220428031608.tgz", + "integrity": "sha512-FloINfIeRWPVnhdLV+gwStq6Zo2JkK0StjVraA1ueLj0Qf42owSWpn0ByYUHPfRx50KoB9hvMr6f0JYZuMzjMg==", "dev": true, "requires": { "@babel/cli": "^7.1.2", @@ -50785,9 +50769,9 @@ } }, "scratch-gui": { - "version": "0.1.0-prerelease.20220426200048", - "resolved": "https://registry.npmjs.org/scratch-gui/-/scratch-gui-0.1.0-prerelease.20220426200048.tgz", - "integrity": "sha512-sGT8bPuoySfu6GJ+73DeUdxIcigmgApdVX0nfaQmAbUjyCjxDFxMibkCTCtIfi+DMaEMUOflvGs/cZmX+PZ44Q==", + "version": "0.1.0-prerelease.20220504060134", + "resolved": "https://registry.npmjs.org/scratch-gui/-/scratch-gui-0.1.0-prerelease.20220504060134.tgz", + "integrity": "sha512-MVFfuAxDAZG7s+apaGyGLom2WiH2R7gBBesYJl3tkMFDa28BBquasHuEBMaNYGj4Bt+rWqIIiBVyysY7RpiYLw==", "dev": true, "requires": { "arraybuffer-loader": "^1.0.6", @@ -50838,14 +50822,14 @@ "redux": "3.7.2", "redux-throttle": "0.1.1", "scratch-audio": "0.1.0-prerelease.20200528195344", - "scratch-blocks": "0.1.0-prerelease.20220329103322", - "scratch-l10n": "3.14.20220426031558", - "scratch-paint": "0.2.0-prerelease.20220426120240", + "scratch-blocks": "0.1.0-prerelease.20220501111245", + "scratch-l10n": "3.14.20220504031551", + "scratch-paint": "0.2.0-prerelease.20220429193038", "scratch-render": "0.1.0-prerelease.20211028200436", "scratch-render-fonts": "1.0.0-prerelease.20210401210003", "scratch-storage": "1.3.5", "scratch-svg-renderer": "0.2.0-prerelease.20210727023023", - "scratch-vm": "0.2.0-prerelease.20220426104209", + "scratch-vm": "0.2.0-prerelease.20220501145413", "startaudiocontext": "1.2.1", "style-loader": "^0.23.0", "text-encoding": "0.7.0", @@ -51080,22 +51064,10 @@ "symbol-observable": "^1.0.3" } }, - "scratch-l10n": { - "version": "3.14.20220426031558", - "resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-3.14.20220426031558.tgz", - "integrity": "sha512-SgQ4Zd4LX9rTYvRpRhJitV7I0BIJFLBAyISogpDZNKIA7OAx3Fr5FvUofarUumZxoTmSdjzqDezZJpP4/u7+7w==", - "dev": true, - "requires": { - "@babel/cli": "^7.1.2", - "@babel/core": "^7.1.2", - "babel-plugin-react-intl": "^3.0.1", - "transifex": "1.6.6" - } - }, "scratch-paint": { - "version": "0.2.0-prerelease.20220426120240", - "resolved": "https://registry.npmjs.org/scratch-paint/-/scratch-paint-0.2.0-prerelease.20220426120240.tgz", - "integrity": "sha512-0hxmE9qHg+8Kka3Dc29Jml2PbUjrji0bS4sYXkh2JRMO1IZVUyWLcr9ju+rvu4DjiZee2X0bVTUGeGc73qSpHw==", + "version": "0.2.0-prerelease.20220429193038", + "resolved": "https://registry.npmjs.org/scratch-paint/-/scratch-paint-0.2.0-prerelease.20220429193038.tgz", + "integrity": "sha512-1jCa4ieYjMOc/nKrOlcGCG0DtseR+YAapIYHlraUO6DGHTBm2frB//CDkEHwOIlN54ZPOak2WS4oJYKDuFgqEQ==", "dev": true, "requires": { "@scratch/paper": "0.11.20200728195508", @@ -51176,9 +51148,9 @@ } }, "scratch-l10n": { - "version": "3.14.20220427031558", - "resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-3.14.20220427031558.tgz", - "integrity": "sha512-0qdms1YJ4cZyHVpdLhfDU4c2VGbPWtGDCm+pfFUCkP3dpkFLn20iJwzIlNTzznVXMqa4WsC/qDfaMyLtGNcEtw==", + "version": "3.14.20220504031551", + "resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-3.14.20220504031551.tgz", + "integrity": "sha512-X65xULMmmUrSrKf+dEplskLg+HcFQWc6hzAJN7x8/j5O252v5z7SKrJbLhH1lzmtHyGfeLgiy6aHOfzt1TmCnA==", "dev": true, "requires": { "@babel/cli": "^7.1.2", @@ -51368,9 +51340,9 @@ "dev": true }, "scratch-vm": { - "version": "0.2.0-prerelease.20220426104209", - "resolved": "https://registry.npmjs.org/scratch-vm/-/scratch-vm-0.2.0-prerelease.20220426104209.tgz", - "integrity": "sha512-8k1EHPStDNWDMm459z+FmBE3P17Qfivdo4ThHtMPJysWCBLLG65DPl4fQ4+Wl9AgP/XHhO1nwTdZiNkVHxetCQ==", + "version": "0.2.0-prerelease.20220501145413", + "resolved": "https://registry.npmjs.org/scratch-vm/-/scratch-vm-0.2.0-prerelease.20220501145413.tgz", + "integrity": "sha512-M6uETr2H3mnroeTAdO23TsQSg25yLXjmCzARj6Nrj4uZLHgxEmOx94kJItjdfYZ/N/+koGELSj9xzvL2gxalxA==", "dev": true, "requires": { "@vernier/godirect": "1.5.0", diff --git a/package.json b/package.json index 37d888ec5..b68c9077b 100644 --- a/package.json +++ b/package.json @@ -134,8 +134,8 @@ "regenerator-runtime": "0.13.9", "sass": "1.49.7", "sass-loader": "10.2.1", - "scratch-gui": "0.1.0-prerelease.20220426200048", - "scratch-l10n": "3.14.20220427031558", + "scratch-gui": "0.1.0-prerelease.20220504060134", + "scratch-l10n": "3.14.20220504031551", "selenium-webdriver": "4.1.0", "slick-carousel": "1.6.0", "style-loader": "0.12.3", diff --git a/src/components/tag/tag.jsx b/src/components/tag/tag.jsx new file mode 100644 index 000000000..e3b8f5fe7 --- /dev/null +++ b/src/components/tag/tag.jsx @@ -0,0 +1,18 @@ +const PropTypes = require('prop-types'); +const React = require('react'); + +require('./tag.scss'); + +const Tag = props => ( +
+ {props.text} +
+); + +Tag.propTypes = { + type: PropTypes.string, + text: PropTypes.string, + color: PropTypes.string +}; + +module.exports = Tag; diff --git a/src/components/tag/tag.scss b/src/components/tag/tag.scss new file mode 100644 index 000000000..263caa202 --- /dev/null +++ b/src/components/tag/tag.scss @@ -0,0 +1,74 @@ +@import "../../colors"; + +$green: #2B732B; + +.bubble { + background-color: rgba(0,0,0,.15); + color: #fff; + font-weight: 500; + border-radius: 50px; + padding: 8px 36px; + font-size: 1rem; + margin: 15px auto; + width: max-content; + display: flex; + justify-content: center; + align-items: center; + img{ + margin: 0px 8px; + width: 30px; + height: 30px; + } + &.increase{ + span{ + display: flex; + justify-content: center; + align-items: center; + &:before{ + content: ''; + width: 30px; + height: 30px; + background-image: url("/images/annual-report/2020/Symbols-UI/Arrow_up.svg"); + background-size: contain; + display: inline-block; + margin-right: 10px; + } + } + } + &.spotlight{ + &:before{ + content: ''; + width: 30px; + height: 30px; + background-image: url("/images/annual-report/2020/Symbols-UI/LightBulb_spotlightstory.svg"); + background-size: contain; + display: inline-block; + margin-right: 10px; + } + } + &.snapshot{ + &:before{ + content: ''; + width: 30px; + height: 30px; + background-image: url("/images/annual-report/2020/Symbols-UI/Camera_snapshots.svg"); + background-size: contain; + display: inline-block; + margin-right: 10px; + } + } + + &.darken{ + background-color: rgba(0, 0, 0, 0.15); + } + &.blue{ + background-color: $motion-blue-3; + } + + &.purple{ + background-color: $ui-purple-dark; + } + &.green{ + background-color: $green; + } +} \ No newline at end of file diff --git a/src/components/timeline-card/timeline-card.scss b/src/components/timeline-card/timeline-card.scss index 8e643d3d9..699d364b6 100644 --- a/src/components/timeline-card/timeline-card.scss +++ b/src/components/timeline-card/timeline-card.scss @@ -4,6 +4,7 @@ $timeline-breakpoint: "only screen and (max-width : 1030px)"; .timeline-card{ max-width: 460px; + z-index: 2; @media #{$small} { max-width: 300px; @@ -12,7 +13,6 @@ $timeline-breakpoint: "only screen and (max-width : 1030px)"; background-color: $ui-white; border-radius: 8px; position: relative; - z-index: 1; margin-bottom: 30px; .timeline-content { @@ -24,8 +24,8 @@ $timeline-breakpoint: "only screen and (max-width : 1030px)"; } a{ position: absolute; - right: 15px; - top: 15px; + right: 12px; + top: 1px; } img{ diff --git a/src/routes.json b/src/routes.json index 85733c247..82d57f4f7 100644 --- a/src/routes.json +++ b/src/routes.json @@ -12,6 +12,7 @@ "routeAlias": "/annual-report/?$", "view": "annual-report/2020/annual-report", "title": "Annual Report 2020", + "intlName": "annual-report-2020", "viewportWidth": "device-width" }, { diff --git a/src/template.ejs b/src/template.ejs index 19105dd6f..cfafbc05f 100644 --- a/src/template.ejs +++ b/src/template.ejs @@ -79,7 +79,7 @@ - + diff --git a/src/views/annual-report/2021/annual-report.jsx b/src/views/annual-report/2021/annual-report.jsx index 20d65ccab..82ebf1c33 100644 --- a/src/views/annual-report/2021/annual-report.jsx +++ b/src/views/annual-report/2021/annual-report.jsx @@ -17,7 +17,9 @@ const TextAndMediaSnippet = require('../../../components/text-and-media-snippet/ const TimelineCard = require('../../../components/timeline-card/timeline-card.jsx'); const PeopleGrid = require('../../../components/people-grid/people-grid.jsx'); const People = require('./people.json'); +const Tag = require('../../../components/tag/tag.jsx'); const VideoPreview = require('../../../components/video-preview/video-preview.jsx'); +const VideoPreviewYouTube = require('./video-preview-youtube/video-preview-youtube.jsx'); const Supporters = require('./supporters.json'); import {TwitterTweetEmbed} from 'react-twitter-embed'; const Organizations = require('./orgs.json'); @@ -70,21 +72,22 @@ const COUNTRIES2 = [ ]; const CountryOrgList = props => ( -