mirror of
https://github.com/scratchfoundation/scratch-www.git
synced 2024-11-22 15:17:53 -05:00
Merge pull request #3811 from LLK/release/2020-04-16
[Master] Release/2020 04 16
This commit is contained in:
commit
f80f96c641
17 changed files with 808 additions and 573 deletions
950
package-lock.json
generated
950
package-lock.json
generated
|
@ -4,6 +4,475 @@
|
||||||
"lockfileVersion": 1,
|
"lockfileVersion": 1,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"@babel/cli": {
|
||||||
|
"version": "7.8.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.8.4.tgz",
|
||||||
|
"integrity": "sha512-XXLgAm6LBbaNxaGhMAznXXaxtCWfuv6PIDJ9Alsy9JYTOh+j2jJz+L/162kkfU1j/pTSxK1xGmlwI4pdIMkoag==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"chokidar": "^2.1.8",
|
||||||
|
"commander": "^4.0.1",
|
||||||
|
"convert-source-map": "^1.1.0",
|
||||||
|
"fs-readdir-recursive": "^1.1.0",
|
||||||
|
"glob": "^7.0.0",
|
||||||
|
"lodash": "^4.17.13",
|
||||||
|
"make-dir": "^2.1.0",
|
||||||
|
"slash": "^2.0.0",
|
||||||
|
"source-map": "^0.5.0"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"anymatch": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
|
||||||
|
"integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
|
"requires": {
|
||||||
|
"micromatch": "^3.1.4",
|
||||||
|
"normalize-path": "^2.1.1"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"normalize-path": {
|
||||||
|
"version": "2.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
|
||||||
|
"integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
|
"requires": {
|
||||||
|
"remove-trailing-separator": "^1.0.1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"arr-diff": {
|
||||||
|
"version": "4.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
|
||||||
|
"integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"array-unique": {
|
||||||
|
"version": "0.3.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
|
||||||
|
"integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"braces": {
|
||||||
|
"version": "2.3.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
|
||||||
|
"integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
|
"requires": {
|
||||||
|
"arr-flatten": "^1.1.0",
|
||||||
|
"array-unique": "^0.3.2",
|
||||||
|
"extend-shallow": "^2.0.1",
|
||||||
|
"fill-range": "^4.0.0",
|
||||||
|
"isobject": "^3.0.1",
|
||||||
|
"repeat-element": "^1.1.2",
|
||||||
|
"snapdragon": "^0.8.1",
|
||||||
|
"snapdragon-node": "^2.0.1",
|
||||||
|
"split-string": "^3.0.2",
|
||||||
|
"to-regex": "^3.0.1"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"extend-shallow": {
|
||||||
|
"version": "2.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
|
||||||
|
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
|
"requires": {
|
||||||
|
"is-extendable": "^0.1.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"chokidar": {
|
||||||
|
"version": "2.1.8",
|
||||||
|
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz",
|
||||||
|
"integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
|
"requires": {
|
||||||
|
"anymatch": "^2.0.0",
|
||||||
|
"async-each": "^1.0.1",
|
||||||
|
"braces": "^2.3.2",
|
||||||
|
"fsevents": "^1.2.7",
|
||||||
|
"glob-parent": "^3.1.0",
|
||||||
|
"inherits": "^2.0.3",
|
||||||
|
"is-binary-path": "^1.0.0",
|
||||||
|
"is-glob": "^4.0.0",
|
||||||
|
"normalize-path": "^3.0.0",
|
||||||
|
"path-is-absolute": "^1.0.0",
|
||||||
|
"readdirp": "^2.2.1",
|
||||||
|
"upath": "^1.1.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"commander": {
|
||||||
|
"version": "4.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
|
||||||
|
"integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"debug": {
|
||||||
|
"version": "2.6.9",
|
||||||
|
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
|
||||||
|
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
|
"requires": {
|
||||||
|
"ms": "2.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"expand-brackets": {
|
||||||
|
"version": "2.1.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
|
||||||
|
"integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
|
"requires": {
|
||||||
|
"debug": "^2.3.3",
|
||||||
|
"define-property": "^0.2.5",
|
||||||
|
"extend-shallow": "^2.0.1",
|
||||||
|
"posix-character-classes": "^0.1.0",
|
||||||
|
"regex-not": "^1.0.0",
|
||||||
|
"snapdragon": "^0.8.1",
|
||||||
|
"to-regex": "^3.0.1"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"define-property": {
|
||||||
|
"version": "0.2.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
|
||||||
|
"integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
|
"requires": {
|
||||||
|
"is-descriptor": "^0.1.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"extend-shallow": {
|
||||||
|
"version": "2.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
|
||||||
|
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
|
"requires": {
|
||||||
|
"is-extendable": "^0.1.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"is-accessor-descriptor": {
|
||||||
|
"version": "0.1.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
|
||||||
|
"integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
|
"requires": {
|
||||||
|
"kind-of": "^3.0.2"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"kind-of": {
|
||||||
|
"version": "3.2.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
|
||||||
|
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
|
"requires": {
|
||||||
|
"is-buffer": "^1.1.5"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"is-data-descriptor": {
|
||||||
|
"version": "0.1.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
|
||||||
|
"integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
|
"requires": {
|
||||||
|
"kind-of": "^3.0.2"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"kind-of": {
|
||||||
|
"version": "3.2.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
|
||||||
|
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
|
"requires": {
|
||||||
|
"is-buffer": "^1.1.5"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"is-descriptor": {
|
||||||
|
"version": "0.1.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
|
||||||
|
"integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
|
"requires": {
|
||||||
|
"is-accessor-descriptor": "^0.1.6",
|
||||||
|
"is-data-descriptor": "^0.1.4",
|
||||||
|
"kind-of": "^5.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"kind-of": {
|
||||||
|
"version": "5.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
|
||||||
|
"integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"extglob": {
|
||||||
|
"version": "2.0.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
|
||||||
|
"integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
|
"requires": {
|
||||||
|
"array-unique": "^0.3.2",
|
||||||
|
"define-property": "^1.0.0",
|
||||||
|
"expand-brackets": "^2.1.4",
|
||||||
|
"extend-shallow": "^2.0.1",
|
||||||
|
"fragment-cache": "^0.2.1",
|
||||||
|
"regex-not": "^1.0.0",
|
||||||
|
"snapdragon": "^0.8.1",
|
||||||
|
"to-regex": "^3.0.1"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"define-property": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
|
||||||
|
"integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
|
"requires": {
|
||||||
|
"is-descriptor": "^1.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"extend-shallow": {
|
||||||
|
"version": "2.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
|
||||||
|
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
|
"requires": {
|
||||||
|
"is-extendable": "^0.1.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"fill-range": {
|
||||||
|
"version": "4.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
|
||||||
|
"integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
|
"requires": {
|
||||||
|
"extend-shallow": "^2.0.1",
|
||||||
|
"is-number": "^3.0.0",
|
||||||
|
"repeat-string": "^1.6.1",
|
||||||
|
"to-regex-range": "^2.1.0"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"extend-shallow": {
|
||||||
|
"version": "2.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
|
||||||
|
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
|
"requires": {
|
||||||
|
"is-extendable": "^0.1.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"glob": {
|
||||||
|
"version": "7.1.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
|
||||||
|
"integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"fs.realpath": "^1.0.0",
|
||||||
|
"inflight": "^1.0.4",
|
||||||
|
"inherits": "2",
|
||||||
|
"minimatch": "^3.0.4",
|
||||||
|
"once": "^1.3.0",
|
||||||
|
"path-is-absolute": "^1.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"glob-parent": {
|
||||||
|
"version": "3.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
|
||||||
|
"integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
|
"requires": {
|
||||||
|
"is-glob": "^3.1.0",
|
||||||
|
"path-dirname": "^1.0.0"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"is-glob": {
|
||||||
|
"version": "3.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
|
||||||
|
"integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
|
"requires": {
|
||||||
|
"is-extglob": "^2.1.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"is-accessor-descriptor": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
|
||||||
|
"integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
|
"requires": {
|
||||||
|
"kind-of": "^6.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"is-data-descriptor": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
|
||||||
|
"integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
|
"requires": {
|
||||||
|
"kind-of": "^6.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"is-descriptor": {
|
||||||
|
"version": "1.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
|
||||||
|
"integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
|
"requires": {
|
||||||
|
"is-accessor-descriptor": "^1.0.0",
|
||||||
|
"is-data-descriptor": "^1.0.0",
|
||||||
|
"kind-of": "^6.0.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"is-extglob": {
|
||||||
|
"version": "2.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
|
||||||
|
"integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"is-glob": {
|
||||||
|
"version": "4.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
|
||||||
|
"integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
|
"requires": {
|
||||||
|
"is-extglob": "^2.1.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"is-number": {
|
||||||
|
"version": "3.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
|
||||||
|
"integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
|
"requires": {
|
||||||
|
"kind-of": "^3.0.2"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"kind-of": {
|
||||||
|
"version": "3.2.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
|
||||||
|
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
|
"requires": {
|
||||||
|
"is-buffer": "^1.1.5"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"isobject": {
|
||||||
|
"version": "3.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
|
||||||
|
"integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"kind-of": {
|
||||||
|
"version": "6.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
|
||||||
|
"integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"make-dir": {
|
||||||
|
"version": "2.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
|
||||||
|
"integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"pify": "^4.0.1",
|
||||||
|
"semver": "^5.6.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"micromatch": {
|
||||||
|
"version": "3.1.10",
|
||||||
|
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
|
||||||
|
"integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
|
"requires": {
|
||||||
|
"arr-diff": "^4.0.0",
|
||||||
|
"array-unique": "^0.3.2",
|
||||||
|
"braces": "^2.3.1",
|
||||||
|
"define-property": "^2.0.2",
|
||||||
|
"extend-shallow": "^3.0.2",
|
||||||
|
"extglob": "^2.0.4",
|
||||||
|
"fragment-cache": "^0.2.1",
|
||||||
|
"kind-of": "^6.0.2",
|
||||||
|
"nanomatch": "^1.2.9",
|
||||||
|
"object.pick": "^1.3.0",
|
||||||
|
"regex-not": "^1.0.0",
|
||||||
|
"snapdragon": "^0.8.1",
|
||||||
|
"to-regex": "^3.0.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"ms": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
|
||||||
|
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"normalize-path": {
|
||||||
|
"version": "3.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
|
||||||
|
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"slash": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz",
|
||||||
|
"integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"source-map": {
|
||||||
|
"version": "0.5.7",
|
||||||
|
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
|
||||||
|
"integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
|
||||||
|
"dev": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"@babel/code-frame": {
|
"@babel/code-frame": {
|
||||||
"version": "7.0.0",
|
"version": "7.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz",
|
||||||
|
@ -15788,490 +16257,21 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"scratch-gui": {
|
"scratch-gui": {
|
||||||
"version": "0.1.0-prerelease.20200409194558",
|
"version": "0.1.0-prerelease.20200415195503",
|
||||||
"resolved": "https://registry.npmjs.org/scratch-gui/-/scratch-gui-0.1.0-prerelease.20200409194558.tgz",
|
"resolved": "https://registry.npmjs.org/scratch-gui/-/scratch-gui-0.1.0-prerelease.20200415195503.tgz",
|
||||||
"integrity": "sha512-b75+cyM8Q2akia0OPK8gJu/2UFZkl0b7DlgwfcwnkoRzY577ei2+/ry/iBxmML8OEerNxUVa4YLbcg7yRwm4lA==",
|
"integrity": "sha512-QYZGxVmQj8QDbmgNvVtF7zAXi+QB+skK/wCnG/9o+ivFiZBAGpMh8hSqVvJe5lAen3ptVQ7yjJ1dEm1urjk7kw==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"scratch-l10n": {
|
"scratch-l10n": {
|
||||||
"version": "3.8.20200407213553",
|
"version": "3.8.20200414213430",
|
||||||
"resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-3.8.20200407213553.tgz",
|
"resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-3.8.20200414213430.tgz",
|
||||||
"integrity": "sha512-OYnuBuxKuCpxjxd/hNXNBefIuMfwNV7Cy0PAEcEZkj2S1iBcD/GqLdOBYu1FBSyieQaYaogeUNRpjoGU5y4wSA==",
|
"integrity": "sha512-+oLlx3wIWWubx1yGh4nMWSUzP9y3nArGXrMZf9x1oCO2b3k835oMfuhUZSZ7vi8gsruhw1iNQp+H1HkM9cKi+A==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"@babel/cli": "^7.1.2",
|
"@babel/cli": "^7.1.2",
|
||||||
"@babel/core": "^7.1.2",
|
"@babel/core": "^7.1.2",
|
||||||
"babel-plugin-react-intl": "^3.0.1",
|
"babel-plugin-react-intl": "^3.0.1",
|
||||||
"transifex": "1.6.6"
|
"transifex": "1.6.6"
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"@babel/cli": {
|
|
||||||
"version": "7.8.4",
|
|
||||||
"resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.8.4.tgz",
|
|
||||||
"integrity": "sha512-XXLgAm6LBbaNxaGhMAznXXaxtCWfuv6PIDJ9Alsy9JYTOh+j2jJz+L/162kkfU1j/pTSxK1xGmlwI4pdIMkoag==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"chokidar": "^2.1.8",
|
|
||||||
"commander": "^4.0.1",
|
|
||||||
"convert-source-map": "^1.1.0",
|
|
||||||
"fs-readdir-recursive": "^1.1.0",
|
|
||||||
"glob": "^7.0.0",
|
|
||||||
"lodash": "^4.17.13",
|
|
||||||
"make-dir": "^2.1.0",
|
|
||||||
"slash": "^2.0.0",
|
|
||||||
"source-map": "^0.5.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"anymatch": {
|
|
||||||
"version": "2.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
|
|
||||||
"integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"requires": {
|
|
||||||
"micromatch": "^3.1.4",
|
|
||||||
"normalize-path": "^2.1.1"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"normalize-path": {
|
|
||||||
"version": "2.1.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
|
|
||||||
"integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"requires": {
|
|
||||||
"remove-trailing-separator": "^1.0.1"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"arr-diff": {
|
|
||||||
"version": "4.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
|
|
||||||
"integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true
|
|
||||||
},
|
|
||||||
"array-unique": {
|
|
||||||
"version": "0.3.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
|
|
||||||
"integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true
|
|
||||||
},
|
|
||||||
"braces": {
|
|
||||||
"version": "2.3.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
|
|
||||||
"integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"requires": {
|
|
||||||
"arr-flatten": "^1.1.0",
|
|
||||||
"array-unique": "^0.3.2",
|
|
||||||
"extend-shallow": "^2.0.1",
|
|
||||||
"fill-range": "^4.0.0",
|
|
||||||
"isobject": "^3.0.1",
|
|
||||||
"repeat-element": "^1.1.2",
|
|
||||||
"snapdragon": "^0.8.1",
|
|
||||||
"snapdragon-node": "^2.0.1",
|
|
||||||
"split-string": "^3.0.2",
|
|
||||||
"to-regex": "^3.0.1"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"extend-shallow": {
|
|
||||||
"version": "2.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
|
|
||||||
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"requires": {
|
|
||||||
"is-extendable": "^0.1.0"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"chokidar": {
|
|
||||||
"version": "2.1.8",
|
|
||||||
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz",
|
|
||||||
"integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"requires": {
|
|
||||||
"anymatch": "^2.0.0",
|
|
||||||
"async-each": "^1.0.1",
|
|
||||||
"braces": "^2.3.2",
|
|
||||||
"fsevents": "^1.2.7",
|
|
||||||
"glob-parent": "^3.1.0",
|
|
||||||
"inherits": "^2.0.3",
|
|
||||||
"is-binary-path": "^1.0.0",
|
|
||||||
"is-glob": "^4.0.0",
|
|
||||||
"normalize-path": "^3.0.0",
|
|
||||||
"path-is-absolute": "^1.0.0",
|
|
||||||
"readdirp": "^2.2.1",
|
|
||||||
"upath": "^1.1.1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"commander": {
|
|
||||||
"version": "4.1.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
|
|
||||||
"integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"debug": {
|
|
||||||
"version": "2.6.9",
|
|
||||||
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
|
|
||||||
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"requires": {
|
|
||||||
"ms": "2.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"expand-brackets": {
|
|
||||||
"version": "2.1.4",
|
|
||||||
"resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
|
|
||||||
"integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"requires": {
|
|
||||||
"debug": "^2.3.3",
|
|
||||||
"define-property": "^0.2.5",
|
|
||||||
"extend-shallow": "^2.0.1",
|
|
||||||
"posix-character-classes": "^0.1.0",
|
|
||||||
"regex-not": "^1.0.0",
|
|
||||||
"snapdragon": "^0.8.1",
|
|
||||||
"to-regex": "^3.0.1"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"define-property": {
|
|
||||||
"version": "0.2.5",
|
|
||||||
"resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
|
|
||||||
"integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"requires": {
|
|
||||||
"is-descriptor": "^0.1.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"extend-shallow": {
|
|
||||||
"version": "2.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
|
|
||||||
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"requires": {
|
|
||||||
"is-extendable": "^0.1.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"is-accessor-descriptor": {
|
|
||||||
"version": "0.1.6",
|
|
||||||
"resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
|
|
||||||
"integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"requires": {
|
|
||||||
"kind-of": "^3.0.2"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"kind-of": {
|
|
||||||
"version": "3.2.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
|
|
||||||
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"requires": {
|
|
||||||
"is-buffer": "^1.1.5"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"is-data-descriptor": {
|
|
||||||
"version": "0.1.4",
|
|
||||||
"resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
|
|
||||||
"integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"requires": {
|
|
||||||
"kind-of": "^3.0.2"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"kind-of": {
|
|
||||||
"version": "3.2.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
|
|
||||||
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"requires": {
|
|
||||||
"is-buffer": "^1.1.5"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"is-descriptor": {
|
|
||||||
"version": "0.1.6",
|
|
||||||
"resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
|
|
||||||
"integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"requires": {
|
|
||||||
"is-accessor-descriptor": "^0.1.6",
|
|
||||||
"is-data-descriptor": "^0.1.4",
|
|
||||||
"kind-of": "^5.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"kind-of": {
|
|
||||||
"version": "5.1.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
|
|
||||||
"integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"extglob": {
|
|
||||||
"version": "2.0.4",
|
|
||||||
"resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
|
|
||||||
"integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"requires": {
|
|
||||||
"array-unique": "^0.3.2",
|
|
||||||
"define-property": "^1.0.0",
|
|
||||||
"expand-brackets": "^2.1.4",
|
|
||||||
"extend-shallow": "^2.0.1",
|
|
||||||
"fragment-cache": "^0.2.1",
|
|
||||||
"regex-not": "^1.0.0",
|
|
||||||
"snapdragon": "^0.8.1",
|
|
||||||
"to-regex": "^3.0.1"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"define-property": {
|
|
||||||
"version": "1.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
|
|
||||||
"integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"requires": {
|
|
||||||
"is-descriptor": "^1.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"extend-shallow": {
|
|
||||||
"version": "2.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
|
|
||||||
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"requires": {
|
|
||||||
"is-extendable": "^0.1.0"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"fill-range": {
|
|
||||||
"version": "4.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
|
|
||||||
"integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"requires": {
|
|
||||||
"extend-shallow": "^2.0.1",
|
|
||||||
"is-number": "^3.0.0",
|
|
||||||
"repeat-string": "^1.6.1",
|
|
||||||
"to-regex-range": "^2.1.0"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"extend-shallow": {
|
|
||||||
"version": "2.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
|
|
||||||
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"requires": {
|
|
||||||
"is-extendable": "^0.1.0"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"glob": {
|
|
||||||
"version": "7.1.6",
|
|
||||||
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
|
|
||||||
"integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"fs.realpath": "^1.0.0",
|
|
||||||
"inflight": "^1.0.4",
|
|
||||||
"inherits": "2",
|
|
||||||
"minimatch": "^3.0.4",
|
|
||||||
"once": "^1.3.0",
|
|
||||||
"path-is-absolute": "^1.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"glob-parent": {
|
|
||||||
"version": "3.1.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
|
|
||||||
"integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"requires": {
|
|
||||||
"is-glob": "^3.1.0",
|
|
||||||
"path-dirname": "^1.0.0"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"is-glob": {
|
|
||||||
"version": "3.1.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
|
|
||||||
"integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"requires": {
|
|
||||||
"is-extglob": "^2.1.0"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"is-accessor-descriptor": {
|
|
||||||
"version": "1.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
|
|
||||||
"integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"requires": {
|
|
||||||
"kind-of": "^6.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"is-data-descriptor": {
|
|
||||||
"version": "1.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
|
|
||||||
"integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"requires": {
|
|
||||||
"kind-of": "^6.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"is-descriptor": {
|
|
||||||
"version": "1.0.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
|
|
||||||
"integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"requires": {
|
|
||||||
"is-accessor-descriptor": "^1.0.0",
|
|
||||||
"is-data-descriptor": "^1.0.0",
|
|
||||||
"kind-of": "^6.0.2"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"is-extglob": {
|
|
||||||
"version": "2.1.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
|
|
||||||
"integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true
|
|
||||||
},
|
|
||||||
"is-glob": {
|
|
||||||
"version": "4.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
|
|
||||||
"integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"requires": {
|
|
||||||
"is-extglob": "^2.1.1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"is-number": {
|
|
||||||
"version": "3.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
|
|
||||||
"integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"requires": {
|
|
||||||
"kind-of": "^3.0.2"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"kind-of": {
|
|
||||||
"version": "3.2.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
|
|
||||||
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"requires": {
|
|
||||||
"is-buffer": "^1.1.5"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"isobject": {
|
|
||||||
"version": "3.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
|
|
||||||
"integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true
|
|
||||||
},
|
|
||||||
"kind-of": {
|
|
||||||
"version": "6.0.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
|
|
||||||
"integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true
|
|
||||||
},
|
|
||||||
"make-dir": {
|
|
||||||
"version": "2.1.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
|
|
||||||
"integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"pify": "^4.0.1",
|
|
||||||
"semver": "^5.6.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"micromatch": {
|
|
||||||
"version": "3.1.10",
|
|
||||||
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
|
|
||||||
"integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"requires": {
|
|
||||||
"arr-diff": "^4.0.0",
|
|
||||||
"array-unique": "^0.3.2",
|
|
||||||
"braces": "^2.3.1",
|
|
||||||
"define-property": "^2.0.2",
|
|
||||||
"extend-shallow": "^3.0.2",
|
|
||||||
"extglob": "^2.0.4",
|
|
||||||
"fragment-cache": "^0.2.1",
|
|
||||||
"kind-of": "^6.0.2",
|
|
||||||
"nanomatch": "^1.2.9",
|
|
||||||
"object.pick": "^1.3.0",
|
|
||||||
"regex-not": "^1.0.0",
|
|
||||||
"snapdragon": "^0.8.1",
|
|
||||||
"to-regex": "^3.0.2"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"ms": {
|
|
||||||
"version": "2.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
|
|
||||||
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true
|
|
||||||
},
|
|
||||||
"normalize-path": {
|
|
||||||
"version": "3.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
|
|
||||||
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true
|
|
||||||
},
|
|
||||||
"slash": {
|
|
||||||
"version": "2.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz",
|
|
||||||
"integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"source-map": {
|
|
||||||
"version": "0.5.7",
|
|
||||||
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
|
|
||||||
"integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
|
|
||||||
"dev": true
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"scratch-parser": {
|
"scratch-parser": {
|
||||||
|
|
|
@ -128,7 +128,7 @@
|
||||||
"redux-mock-store": "^1.2.3",
|
"redux-mock-store": "^1.2.3",
|
||||||
"redux-thunk": "2.0.1",
|
"redux-thunk": "2.0.1",
|
||||||
"sass-loader": "6.0.6",
|
"sass-loader": "6.0.6",
|
||||||
"scratch-gui": " 0.1.0-prerelease.20200409194558",
|
"scratch-gui": "0.1.0-prerelease.20200415195503",
|
||||||
"scratch-l10n": "latest",
|
"scratch-l10n": "latest",
|
||||||
"selenium-webdriver": "3.6.0",
|
"selenium-webdriver": "3.6.0",
|
||||||
"slick-carousel": "1.6.0",
|
"slick-carousel": "1.6.0",
|
||||||
|
|
|
@ -7,8 +7,6 @@ const HelpForm = props => {
|
||||||
const prefix = 'https://mitscratch.freshdesk.com/widgets/feedback_widget/new?&widgetType=embedded&widgetView=yes&screenshot=No&searchArea=No';
|
const prefix = 'https://mitscratch.freshdesk.com/widgets/feedback_widget/new?&widgetType=embedded&widgetView=yes&screenshot=No&searchArea=No';
|
||||||
const title = `formTitle=${props.title}`;
|
const title = `formTitle=${props.title}`;
|
||||||
const username = `helpdesk_ticket[custom_field][cf_scratch_name_40167]=${props.user.username || ''}`;
|
const username = `helpdesk_ticket[custom_field][cf_scratch_name_40167]=${props.user.username || ''}`;
|
||||||
const agentText = encodeURIComponent(window.navigator.userAgent);
|
|
||||||
const browser = `helpdesk_ticket[custom_field][cf_browser_40167]=${agentText}`;
|
|
||||||
const formSubject = `helpdesk_ticket[subject]=${props.subject}`;
|
const formSubject = `helpdesk_ticket[subject]=${props.subject}`;
|
||||||
const formDescription = `helpdesk_ticket[description]=${props.body}`;
|
const formDescription = `helpdesk_ticket[description]=${props.body}`;
|
||||||
return (
|
return (
|
||||||
|
@ -28,10 +26,10 @@ const HelpForm = props => {
|
||||||
<iframe
|
<iframe
|
||||||
className="freshwidget-embedded-form"
|
className="freshwidget-embedded-form"
|
||||||
frameBorder="0"
|
frameBorder="0"
|
||||||
height="744px"
|
height="594px"
|
||||||
id="freshwidget-embedded-form"
|
id="freshwidget-embedded-form"
|
||||||
scrolling="no"
|
scrolling="no"
|
||||||
src={`${prefix}&${title}&${username}&${browser}&${formSubject}&${formDescription}`}
|
src={`${prefix}&${title}&${username}&${formSubject}&${formDescription}`}
|
||||||
title={<FormattedMessage id="contactUs.questionsForum" />}
|
title={<FormattedMessage id="contactUs.questionsForum" />}
|
||||||
width="100%"
|
width="100%"
|
||||||
/>
|
/>
|
||||||
|
|
119
src/components/helpwidget/helpwidget.jsx
Normal file
119
src/components/helpwidget/helpwidget.jsx
Normal file
|
@ -0,0 +1,119 @@
|
||||||
|
const FormattedMessage = require('react-intl').FormattedMessage;
|
||||||
|
const injectIntl = require('react-intl').injectIntl;
|
||||||
|
const intlShape = require('react-intl').intlShape;
|
||||||
|
const bindAll = require('lodash.bindall');
|
||||||
|
const connect = require('react-redux').connect;
|
||||||
|
const PropTypes = require('prop-types');
|
||||||
|
const React = require('react');
|
||||||
|
|
||||||
|
const Button = require('../forms/button.jsx');
|
||||||
|
/**
|
||||||
|
* Footer link that opens Freshdesk help widger
|
||||||
|
*/
|
||||||
|
class HelpWidget extends React.Component {
|
||||||
|
constructor (props) {
|
||||||
|
super(props);
|
||||||
|
bindAll(this, [
|
||||||
|
'handleOpenWidget',
|
||||||
|
'openPopup'
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
componentDidMount () {
|
||||||
|
// don't add the script to the page more than once
|
||||||
|
if (document.getElementById('helpwidgetscript') === null) {
|
||||||
|
const script = document.createElement('script');
|
||||||
|
script.id = 'helpwidgetscript';
|
||||||
|
script.src = 'https://widget.freshworks.com/widgets/4000000089.js';
|
||||||
|
script.async = true;
|
||||||
|
script.defer = true;
|
||||||
|
script.onload = () => this.scriptLoaded();
|
||||||
|
|
||||||
|
window.fwSettings = {
|
||||||
|
widget_id: 4000000089,
|
||||||
|
locale: this.props.intl.locale
|
||||||
|
};
|
||||||
|
document.body.appendChild(script);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
scriptLoaded () {
|
||||||
|
// freshdesk widget embed code
|
||||||
|
/* eslint-disable */
|
||||||
|
!(function(){if("function"!=typeof window.FreshworksWidget){var n=function(){n.q.push(arguments)};n.q=[],window.FreshworksWidget=n}}())
|
||||||
|
/* eslint-enable */
|
||||||
|
// don't show the Freshdesk button
|
||||||
|
window.FreshworksWidget('hide', 'launcher');
|
||||||
|
window.FreshworksWidget('setLabels', {
|
||||||
|
fr: {
|
||||||
|
banner: 'Bienvenue a Support',
|
||||||
|
contact_form: {
|
||||||
|
title: this.props.intl.formatMessage({id: 'contactUs.contactScratch'})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if (this.props.subject !== '') {
|
||||||
|
// open the popup already on the form if passed Inappropriate content params
|
||||||
|
this.openPopup(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
handleOpenWidget (e) {
|
||||||
|
e.preventDefault();
|
||||||
|
this.openPopup();
|
||||||
|
}
|
||||||
|
openPopup (formOpen) {
|
||||||
|
if (typeof window.FreshworksWidget === 'function') {
|
||||||
|
window.FreshworksWidget('prefill', 'ticketForm', {
|
||||||
|
subject: this.props.subject,
|
||||||
|
description: this.props.body,
|
||||||
|
custom_fields: {
|
||||||
|
cf_scratch_name: this.props.user.username
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if (formOpen) {
|
||||||
|
window.FreshworksWidget('open', 'ticketForm');
|
||||||
|
} else {
|
||||||
|
window.FreshworksWidget('open');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
render () {
|
||||||
|
return (
|
||||||
|
<a
|
||||||
|
href="#"
|
||||||
|
onClick={this.handleOpenWidget}
|
||||||
|
>
|
||||||
|
{this.props.button ? (
|
||||||
|
<Button className="gethelp-button">
|
||||||
|
<FormattedMessage id="general.getHelp" />
|
||||||
|
</Button>
|
||||||
|
) : (<FormattedMessage id="general.getHelp" />)
|
||||||
|
}
|
||||||
|
</a>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
HelpWidget.propTypes = {
|
||||||
|
body: PropTypes.string,
|
||||||
|
button: PropTypes.bool,
|
||||||
|
intl: intlShape,
|
||||||
|
subject: PropTypes.string,
|
||||||
|
user: PropTypes.shape({
|
||||||
|
classroomId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
|
||||||
|
thumbnailUrl: PropTypes.string,
|
||||||
|
username: PropTypes.string
|
||||||
|
})
|
||||||
|
};
|
||||||
|
|
||||||
|
HelpWidget.defaultProps = {
|
||||||
|
body: '',
|
||||||
|
button: false,
|
||||||
|
subject: '',
|
||||||
|
user: {username: ''}
|
||||||
|
};
|
||||||
|
|
||||||
|
const mapStateToProps = state => ({
|
||||||
|
user: state.session.session.user
|
||||||
|
});
|
||||||
|
|
||||||
|
const ConnectedHelpWidget = connect(mapStateToProps)(HelpWidget);
|
||||||
|
module.exports = injectIntl(ConnectedHelpWidget);
|
|
@ -12,6 +12,7 @@
|
||||||
"general.community": "Community",
|
"general.community": "Community",
|
||||||
"general.confirmEmail": "Confirm Email",
|
"general.confirmEmail": "Confirm Email",
|
||||||
"general.contactUs": "Contact Us",
|
"general.contactUs": "Contact Us",
|
||||||
|
"general.getHelp": "Get Help",
|
||||||
"general.contact": "Contact",
|
"general.contact": "Contact",
|
||||||
"general.done": "Done",
|
"general.done": "Done",
|
||||||
"general.downloadPDF": "Download PDF",
|
"general.downloadPDF": "Download PDF",
|
||||||
|
|
|
@ -8,5 +8,6 @@ const flagInUrl = flag => {
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
CHROME_APP_RELEASED: true
|
CHROME_APP_RELEASED: true,
|
||||||
|
CONTACT_US_POPUP: isStaging() && flagInUrl('CONTACT_US_POPUP')
|
||||||
};
|
};
|
||||||
|
|
15
src/lib/route.js
Normal file
15
src/lib/route.js
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
module.exports = {};
|
||||||
|
|
||||||
|
// try to extract classroom token from either of two routes
|
||||||
|
module.exports.getURIClassroomToken = uriPathname => {
|
||||||
|
// first try to match /classes/CLASSROOM_ID/register/CLASSROOM_TOKEN
|
||||||
|
const classRegisterRegexp = /^\/?classes\/\d*\/register\/([a-zA-Z0-9]*)\/?$/;
|
||||||
|
const classRegisterMatch = classRegisterRegexp.exec(uriPathname);
|
||||||
|
if (classRegisterMatch) return classRegisterMatch[1];
|
||||||
|
// if regex match failed, try to match /signup/CLASSROOM_TOKEN
|
||||||
|
const signupTokenRegexp = /^\/?signup\/([a-zA-Z0-9]*)\/?$/;
|
||||||
|
const signupTokenMatch = signupTokenRegexp.exec(uriPathname);
|
||||||
|
if (signupTokenMatch) return signupTokenMatch[1];
|
||||||
|
// if neither matched
|
||||||
|
return null;
|
||||||
|
};
|
|
@ -280,6 +280,13 @@
|
||||||
"view": "studentregistration/studentregistration",
|
"view": "studentregistration/studentregistration",
|
||||||
"title": "Class Registration"
|
"title": "Class Registration"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "student-registration-token-only",
|
||||||
|
"pattern": "^/signup/:token",
|
||||||
|
"routeAlias": "/signup/.+",
|
||||||
|
"view": "studentregistration/studentregistration",
|
||||||
|
"title": "Class Registration"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "teacher-faq",
|
"name": "teacher-faq",
|
||||||
"pattern": "^/educators/faq/?$",
|
"pattern": "^/educators/faq/?$",
|
||||||
|
|
|
@ -28,7 +28,8 @@ const ConferenceSplash = () => (
|
||||||
<div className="inner">
|
<div className="inner">
|
||||||
<section className="conf2020-panel mod-desc">
|
<section className="conf2020-panel mod-desc">
|
||||||
<p className="conf2020-panel-desc">
|
<p className="conf2020-panel-desc">
|
||||||
<FormattedMessage id="conference-2020.desc1" />
|
<FormattedMessage id="conference-2020.desc1" />{' '}
|
||||||
|
<strong><FormattedMessage id="conference-2020.desc1a" /></strong>
|
||||||
<br />
|
<br />
|
||||||
<br />
|
<br />
|
||||||
<FormattedMessage id="conference-2020.desc2" />
|
<FormattedMessage id="conference-2020.desc2" />
|
||||||
|
@ -51,14 +52,14 @@ const ConferenceSplash = () => (
|
||||||
<FormattedDate
|
<FormattedDate
|
||||||
day="2-digit"
|
day="2-digit"
|
||||||
month="long"
|
month="long"
|
||||||
value={new Date(2020, 6, 23)}
|
value={new Date(2021, 6, 22)}
|
||||||
year="numeric"
|
year="numeric"
|
||||||
/>
|
/>
|
||||||
{' - '}
|
{' - '}
|
||||||
<FormattedDate
|
<FormattedDate
|
||||||
day="2-digit"
|
day="2-digit"
|
||||||
month="long"
|
month="long"
|
||||||
value={new Date(2020, 6, 25)}
|
value={new Date(2021, 6, 24)}
|
||||||
year="numeric"
|
year="numeric"
|
||||||
/>
|
/>
|
||||||
<FormattedMessage id="conference-2020.dateDescMore" />
|
<FormattedMessage id="conference-2020.dateDescMore" />
|
||||||
|
@ -91,6 +92,16 @@ const ConferenceSplash = () => (
|
||||||
<br />
|
<br />
|
||||||
<br />
|
<br />
|
||||||
<FormattedMessage id="conference-2020.registrationDelayed" />
|
<FormattedMessage id="conference-2020.registrationDelayed" />
|
||||||
|
<br />
|
||||||
|
<br />
|
||||||
|
<FormattedMessage
|
||||||
|
id="conference-2020.connectNow"
|
||||||
|
values={{
|
||||||
|
scratchInPracticeLink: <a href="https://sip.scratch.mit.edu/">
|
||||||
|
<FormattedMessage id="conference-2020.scratchInPracticeText" />
|
||||||
|
</a>
|
||||||
|
}}
|
||||||
|
/>
|
||||||
</p>
|
</p>
|
||||||
<a
|
<a
|
||||||
className="button mod-2020-panel"
|
className="button mod-2020-panel"
|
||||||
|
@ -101,14 +112,7 @@ const ConferenceSplash = () => (
|
||||||
</section>
|
</section>
|
||||||
<section className="conf2020-panel mod-stay">
|
<section className="conf2020-panel mod-stay">
|
||||||
<p className="conf2020-panel-desc">
|
<p className="conf2020-panel-desc">
|
||||||
<FormattedMessage
|
<FormattedMessage id="conference-2020.stayDesc1" />
|
||||||
id="conference-2020.stayDesc1"
|
|
||||||
values={{
|
|
||||||
hyattLink: <a href="https://www.hyatt.com/en-US/group-booking/BOSRC/G-SCRA">Hyatt Regency Cambridge Hotel</a>,
|
|
||||||
acLink: <a href="https://www.marriott.com/event-reservations/reservation-link.mi?id=1582152189255&key=GRP&app=resvlink">AC Hotel Boston Cambridge</a>,
|
|
||||||
allstonLink: <a href="https://hotelstudioallston.reztrip.com/ext/promoRate?property=1604&mode=b&pm=true&sr=556197&vr=3">Studio Allston Hotel</a>
|
|
||||||
}}
|
|
||||||
/>
|
|
||||||
<br />
|
<br />
|
||||||
<br />
|
<br />
|
||||||
<FormattedMessage
|
<FormattedMessage
|
||||||
|
@ -116,9 +120,6 @@ const ConferenceSplash = () => (
|
||||||
values={{
|
values={{
|
||||||
emailLink: <a href="mailto:conference@scratch.mit.edu">
|
emailLink: <a href="mailto:conference@scratch.mit.edu">
|
||||||
conference@scratch.mit.edu
|
conference@scratch.mit.edu
|
||||||
</a>,
|
|
||||||
registrationLink: <a href="http://scratch2020.eventbrite.com/">
|
|
||||||
<FormattedMessage id="conference-2020.registrationLinkText" />
|
|
||||||
</a>
|
</a>
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
|
|
|
@ -1,26 +1,27 @@
|
||||||
{
|
{
|
||||||
"conference-2020.title": "Scratch Conference 2020:",
|
"conference-2020.title": "Scratch Conference 2021:",
|
||||||
"conference-2020.subtitle": "Let's Create Together!",
|
"conference-2020.subtitle": "Let's Create Together!",
|
||||||
"conference-2020.dateDesc": "July 23-25, 2020 | Cambridge, MA, USA",
|
"conference-2020.dateDesc": "July 22-24, 2021 | Cambridge, MA, USA",
|
||||||
"conference-2020.dateDescMore": " (with opening reception the evening of July 22)",
|
"conference-2020.dateDescMore": " (with opening reception the evening of July 21)",
|
||||||
"conference-2020.locationDetails": "MIT Media Lab, Cambridge, MA",
|
"conference-2020.locationDetails": "MIT Media Lab, Cambridge, MA",
|
||||||
"conference-2020.seeBelow": "Learn more about conference dates and locations below.",
|
|
||||||
|
|
||||||
"conference-2020.date": "When:",
|
"conference-2020.date": "When:",
|
||||||
"conference-2020.location": "Where:",
|
"conference-2020.location": "Where:",
|
||||||
|
|
||||||
"conference-2020.desc1": "Join us for the Scratch Conference, an international gathering where educators, researchers, and developers share ideas for supporting creative learning with Scratch.",
|
"conference-2020.desc1": "Join us for the Scratch Conference, an international gathering where educators, researchers, and developers share ideas for supporting creative learning with Scratch.",
|
||||||
|
"conference-2020.desc1a": "Due to the global health crisis, we have delayed the conference for one year, to July 22-24, 2021.",
|
||||||
"conference-2020.desc2": "Scratch has become the world's largest coding community for children around the world. The conference offers hands-on workshops, panel discussions, and interactive demonstrations to explore ways for using Scratch to expand creative learning experiences for diverse learners across subject areas.",
|
"conference-2020.desc2": "Scratch has become the world's largest coding community for children around the world. The conference offers hands-on workshops, panel discussions, and interactive demonstrations to explore ways for using Scratch to expand creative learning experiences for diverse learners across subject areas.",
|
||||||
"conference-2020.desc3": "Together we'll exchange ideas and strategies on how to use Scratch to engage students in learning to think creatively, reason systematically, and work collaboratively—essential skills for everyone in today’s society.",
|
"conference-2020.desc3": "Together we'll exchange ideas and strategies on how to use Scratch to engage students in learning to think creatively, reason systematically, and work collaboratively—essential skills for everyone in today’s society.",
|
||||||
|
|
||||||
"conference-2020.registrationTitle": "Registration:",
|
"conference-2020.registrationTitle": "Registration:",
|
||||||
"conference-2020.registrationFee": "Conference Fee: $250",
|
"conference-2020.registrationFee": "Conference Fee: $250",
|
||||||
"conference-2020.registrationOpen": "The conference fee includes 7 meals (3 breakfast, 3 lunches, 1 dinner) plus refreshments during the day.",
|
"conference-2020.registrationOpen": "The conference fee includes 7 meals (3 breakfast, 3 lunches, 1 dinner) plus refreshments during the day.",
|
||||||
"conference-2020.registrationDelayed": "We have delayed the opening of registration until April 3. We’re excited to gather together as a community in July, but we are closely monitoring the situation around the Coronavirus (COVID-19) to determine how it might impact our plans. We will provide more information as it becomes available.",
|
"conference-2020.registrationDelayed": "In response to the coronavirus crisis (COVID-19), we have decided to delay the Scratch conference for one year, to July 22-24, 2021. We are sending well wishes to our entire global community and hope you can join us then!",
|
||||||
|
"conference-2020.connectNow": "Want to connect now? We invite you to learn more about our online conversations, resources, and events at {scratchInPracticeLink}.",
|
||||||
|
"conference-2020.scratchInPracticeText": "Scratch in Practice",
|
||||||
"conference-2020.register": "Go to registration page",
|
"conference-2020.register": "Go to registration page",
|
||||||
|
|
||||||
"conference-2020.stayDesc1": "We have organized for conference rates at three hotels in the area for Scratch Conference participants, including: {hyattLink} (1.2 miles: 24 minute walk), {acLink} (2.3 miles, 25 minutes by subway), and the {allstonLink} (4.4 miles, 35 minutes by bus+subway). To reserve a room, click the link for that hotel. We recommend booking as soon as possible as the discounted rates are subject to availability. We're also planning to offer a lower-cost, college dormitory option; we'll post information as soon as it's available. You can also explore other hotel and housing options that work best for you.",
|
"conference-2020.stayDesc1": "We will be posting revised lodging options at the beginning of 2021.",
|
||||||
"conference-2020.stayDesc2": "Please see the {registrationLink} for more details. For additional questions, contact the Scratch Conference Team at {emailLink}",
|
"conference-2020.stayDesc2": "For additional questions, contact the Scratch Conference Team at {emailLink}",
|
||||||
"conference-2020.registrationLinkText": "Registration page",
|
|
||||||
"conference-2020.organizedBy": "The Scratch Conference is organized by the Lifelong Kindergarten group at the MIT Media Lab in collaboration with the Scratch Foundation."
|
"conference-2020.organizedBy": "The Scratch Conference is organized by the Lifelong Kindergarten group at the MIT Media Lab in collaboration with the Scratch Foundation."
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,8 +7,11 @@ const Page = require('../../components/page/www/page.jsx');
|
||||||
const render = require('../../lib/render.jsx');
|
const render = require('../../lib/render.jsx');
|
||||||
|
|
||||||
const HelpForm = require('../../components/helpform/helpform.jsx');
|
const HelpForm = require('../../components/helpform/helpform.jsx');
|
||||||
|
const HelpWidget = require('../../components/helpwidget/helpwidget.jsx');
|
||||||
|
const {CONTACT_US_POPUP} = require('../../lib/feature-flags.js');
|
||||||
|
|
||||||
const InformationPage = require('../../components/informationpage/informationpage.jsx');
|
const InformationPage = require('../../components/informationpage/informationpage.jsx');
|
||||||
|
require('./contact-us.scss');
|
||||||
|
|
||||||
class ContactUs extends React.Component {
|
class ContactUs extends React.Component {
|
||||||
constructor (props) {
|
constructor (props) {
|
||||||
|
@ -18,65 +21,123 @@ class ContactUs extends React.Component {
|
||||||
body: ''
|
body: ''
|
||||||
};
|
};
|
||||||
const query = window.location.search;
|
const query = window.location.search;
|
||||||
// assumes that scratchr2 will only ever send one parameter
|
let scratchId = '';
|
||||||
// The subject is not localized because sending in English is easier for Scratch Team
|
// The subject is not localized because sending in English is easier for Scratch Team
|
||||||
if (query.indexOf('studio=') !== -1) {
|
if (query.indexOf('studio=') !== -1) {
|
||||||
this.state.subject = `Inappropriate content reported in studio ${query.split('=')[1]}`;
|
scratchId = query.match(/studio=([0-9]+)/)[1];
|
||||||
this.state.body = `https://scratch.mit.edu/studios/${query.split('=')[1]}`;
|
this.state.subject = `Inappropriate content reported in studio ${scratchId}`;
|
||||||
|
this.state.body = `https://scratch.mit.edu/studios/${scratchId}`;
|
||||||
} else if (query.indexOf('profile=') !== -1) {
|
} else if (query.indexOf('profile=') !== -1) {
|
||||||
this.state.subject = `Inappropriate content reported in profile ${query.split('=')[1]}`;
|
scratchId = query.match(/profile=([a-zA-Z0-9-_]+)/)[1];
|
||||||
this.state.body = `https://scratch.mit.edu/users/${query.split('=')[1]}`;
|
this.state.subject = `Inappropriate content reported in profile ${scratchId}`;
|
||||||
|
this.state.body = `https://scratch.mit.edu/users/${scratchId}`;
|
||||||
} else if (query.indexOf('confirmation=') !== -1) {
|
} else if (query.indexOf('confirmation=') !== -1) {
|
||||||
this.state.subject = 'Problem with email confirmation';
|
this.state.subject = 'Problem with email confirmation';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
render () {
|
render () {
|
||||||
return (
|
return (
|
||||||
<InformationPage title={this.props.intl.formatMessage({id: 'contactUs.title'})}>
|
<InformationPage
|
||||||
<div className="inner info-inner">
|
title={CONTACT_US_POPUP ?
|
||||||
<section id="contact-us">
|
this.props.intl.formatMessage({id: 'contactUs.qTitle'}) :
|
||||||
<span className="nav-spacer" />
|
this.props.intl.formatMessage({id: 'contactUs.title'})}
|
||||||
<p><FormattedMessage
|
>
|
||||||
id="contactUs.intro"
|
{!CONTACT_US_POPUP && (
|
||||||
values={{faqLink: (
|
<div className="inner info-inner">
|
||||||
<a href="/info/faq"><FormattedMessage id="contactUs.faqLinkText" /></a>
|
<section id="contact-us">
|
||||||
)}}
|
<span className="nav-spacer" />
|
||||||
/></p>
|
<p><FormattedMessage
|
||||||
<p><FormattedMessage id="contactUs.forumsInfo" /></p>
|
id="contactUs.intro"
|
||||||
<ul>
|
values={{faqLink: (
|
||||||
<li><FormattedMessage
|
<a href="/info/faq"><FormattedMessage id="contactUs.faqLinkText" /></a>
|
||||||
id="contactUs.questionsForum"
|
|
||||||
values={{questionsLink: (
|
|
||||||
<a href="/discuss/4/"><FormattedMessage id="contactUs.questionsLinkText" /></a>
|
|
||||||
)}}
|
)}}
|
||||||
/></li>
|
/></p>
|
||||||
<li><FormattedMessage
|
<p><FormattedMessage id="contactUs.forumsInfo" /></p>
|
||||||
id="contactUs.scriptsForum"
|
<ul>
|
||||||
values={{scriptsLink: (
|
<li><FormattedMessage
|
||||||
<a href="/discuss/7/"><FormattedMessage id="contactUs.scriptsLinkText" /></a>
|
id="contactUs.questionsForum"
|
||||||
|
values={{questionsLink: (
|
||||||
|
<a href="/discuss/4/"><FormattedMessage id="contactUs.questionsLinkText" /></a>
|
||||||
|
)}}
|
||||||
|
/></li>
|
||||||
|
<li><FormattedMessage
|
||||||
|
id="contactUs.scriptsForum"
|
||||||
|
values={{scriptsLink: (
|
||||||
|
<a href="/discuss/7/"><FormattedMessage id="contactUs.scriptsLinkText" /></a>
|
||||||
|
)}}
|
||||||
|
/></li>
|
||||||
|
<li><FormattedMessage
|
||||||
|
id="contactUs.bugsForum"
|
||||||
|
values={{bugsLink: (
|
||||||
|
<a href="/discuss/3/"><FormattedMessage id="contactUs.bugsLinkText" /></a>
|
||||||
|
)}}
|
||||||
|
/></li>
|
||||||
|
</ul>
|
||||||
|
<p><FormattedMessage id="contactUs.formIntro" /></p>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
{CONTACT_US_POPUP && (
|
||||||
|
<div className="contact-us inner info-inner">
|
||||||
|
<section
|
||||||
|
className="helpwidget"
|
||||||
|
id="contact-us"
|
||||||
|
>
|
||||||
|
<span className="nav-spacer" />
|
||||||
|
<h3>
|
||||||
|
<FormattedMessage id="contactUs.seeFaq" />
|
||||||
|
</h3>
|
||||||
|
<p><FormattedMessage
|
||||||
|
id="contactUs.faqInfo"
|
||||||
|
values={{faqLink: (
|
||||||
|
<a href="/info/faq"><FormattedMessage id="contactUs.faqLinkText" /></a>
|
||||||
)}}
|
)}}
|
||||||
/></li>
|
/></p>
|
||||||
<li><FormattedMessage
|
<h3>
|
||||||
id="contactUs.bugsForum"
|
<FormattedMessage id="contactUs.askCommunity" />
|
||||||
values={{bugsLink: (
|
</h3>
|
||||||
<a href="/discuss/3/"><FormattedMessage id="contactUs.bugsLinkText" /></a>
|
<p><FormattedMessage id="contactUs.forumsIntro" /></p>
|
||||||
)}}
|
<p><FormattedMessage id="contactUs.forumsHelp" /></p>
|
||||||
/></li>
|
<ul>
|
||||||
</ul>
|
<li><a href="/discuss/4/"><FormattedMessage id="contactUs.questionsLinkText" /></a></li>
|
||||||
<p><FormattedMessage id="contactUs.formIntro" /></p>
|
<li><a href="/discuss/7/"><FormattedMessage id="contactUs.scriptsLinkText" /></a></li>
|
||||||
</section>
|
<li><a href="/discuss/3/"><FormattedMessage id="contactUs.bugsLinkText" /></a></li>
|
||||||
</div>
|
</ul>
|
||||||
|
<h3>
|
||||||
|
<FormattedMessage id="contactUs.needSupport" />
|
||||||
|
</h3>
|
||||||
|
<p>
|
||||||
|
<FormattedMessage
|
||||||
|
id="contactUs.supportInfo"
|
||||||
|
values={{helpLink: (
|
||||||
|
<HelpWidget
|
||||||
|
body={this.state.body}
|
||||||
|
subject={this.state.subject}
|
||||||
|
/>
|
||||||
|
)}}
|
||||||
|
/>
|
||||||
|
</p>
|
||||||
|
</section>
|
||||||
|
<HelpWidget
|
||||||
|
button
|
||||||
|
body={this.state.body}
|
||||||
|
subject={this.state.subject}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
<nav>
|
<nav>
|
||||||
<ol>
|
<ol>
|
||||||
<li className="nav-header"><FormattedMessage id="contactUs.findHelp" /></li>
|
<li className="nav-header"><FormattedMessage id="contactUs.findHelp" /></li>
|
||||||
<li><a href="/info/faq"><FormattedMessage id="contactUs.faqLinkText" /></a></li>
|
<li><a href="/info/faq"><FormattedMessage id="contactUs.faqLinkText" /></a></li>
|
||||||
</ol>
|
</ol>
|
||||||
</nav>
|
</nav>
|
||||||
<HelpForm
|
{!CONTACT_US_POPUP && (
|
||||||
body={this.state.body}
|
<HelpForm
|
||||||
subject={this.state.subject}
|
body={this.state.body}
|
||||||
title={this.props.intl.formatMessage({id: 'contactUs.contactScratch'})}
|
subject={this.state.subject}
|
||||||
/>
|
title={this.props.intl.formatMessage({id: 'contactUs.contactScratch'})}
|
||||||
|
/>
|
||||||
|
)}
|
||||||
</InformationPage>
|
</InformationPage>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
8
src/views/contact-us/contact-us.scss
Normal file
8
src/views/contact-us/contact-us.scss
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
#contact-us.helpwidget {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
.contact-us {
|
||||||
|
.gethelp-button {
|
||||||
|
margin-bottom: 2rem;
|
||||||
|
}
|
||||||
|
}
|
|
@ -12,5 +12,13 @@
|
||||||
"contactUs.bugsLinkText":"Bugs and Glitches",
|
"contactUs.bugsLinkText":"Bugs and Glitches",
|
||||||
"contactUs.formIntro":"If you still need to contact us, please fill out the form below with as much detail as you can. If you have any screenshots, attachments or links that help to explain your problem, please include them. We get a lot of mail, so we may not be able to respond to your message.",
|
"contactUs.formIntro":"If you still need to contact us, please fill out the form below with as much detail as you can. If you have any screenshots, attachments or links that help to explain your problem, please include them. We get a lot of mail, so we may not be able to respond to your message.",
|
||||||
"contactUs.findHelp":"Where to find help:",
|
"contactUs.findHelp":"Where to find help:",
|
||||||
"contactUs.contactScratch":"Contact the Scratch Team"
|
"contactUs.contactScratch":"Contact the Scratch Team",
|
||||||
|
"contactUs.qTitle":"Questions",
|
||||||
|
"contactUs.seeFaq":"See the FAQ",
|
||||||
|
"contactUs.faqInfo":"You can find a list of answers to many questions about Scratch on our {faqLink} page.",
|
||||||
|
"contactUs.askCommunity":"Ask the Community",
|
||||||
|
"contactUs.forumsIntro":"You can also look through and post questions in the Scratch Discussion forums.",
|
||||||
|
"contactUs.forumsHelp":"There are many friendly and experienced Scratch community members who can help with the following topics and more:",
|
||||||
|
"contactUs.needSupport":"Need Support?",
|
||||||
|
"contactUs.supportInfo":"Click {helpLink} to type in a question about anything related to Scratch or to contact us. The Scratch Team receives lots of messages each day and is not able to answer each one individually, so we encourage you to read our online support articles and participate in the Discussion forums."
|
||||||
}
|
}
|
||||||
|
|
|
@ -42,5 +42,8 @@
|
||||||
"welcome.welcomeToScratch": "Welcome to Scratch!",
|
"welcome.welcomeToScratch": "Welcome to Scratch!",
|
||||||
"welcome.learn": "Learn how to make a project in Scratch",
|
"welcome.learn": "Learn how to make a project in Scratch",
|
||||||
"welcome.tryOut": "Try out starter projects",
|
"welcome.tryOut": "Try out starter projects",
|
||||||
"welcome.connect": "Connect with other Scratchers"
|
"welcome.connect": "Connect with other Scratchers",
|
||||||
|
|
||||||
|
"activity.seeUpdates": "This is where you will see updates from Scratchers you follow",
|
||||||
|
"activity.checkOutScratchers": "Check out some Scratchers you might like to follow"
|
||||||
}
|
}
|
||||||
|
|
|
@ -178,16 +178,10 @@ class ActivityList extends React.Component {
|
||||||
key="activity-empty"
|
key="activity-empty"
|
||||||
>
|
>
|
||||||
<h4>
|
<h4>
|
||||||
<FormattedMessage
|
<FormattedMessage id="activity.seeUpdates" />
|
||||||
defaultMessage="This is where you will see updates from Scratchers you follow"
|
|
||||||
id="activity.seeUpdates"
|
|
||||||
/>
|
|
||||||
</h4>
|
</h4>
|
||||||
<a href="/studios/146521/">
|
<a href="/studios/146521/">
|
||||||
<FormattedMessage
|
<FormattedMessage id="activity.checkOutScratchers" />
|
||||||
defaultMessage="Check out some Scratchers you might like to follow"
|
|
||||||
id="activity.checkOutScratchers"
|
|
||||||
/>
|
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
]}
|
]}
|
||||||
|
|
|
@ -6,6 +6,7 @@ const React = require('react');
|
||||||
const api = require('../../lib/api');
|
const api = require('../../lib/api');
|
||||||
const injectIntl = require('../../lib/intl.jsx').injectIntl;
|
const injectIntl = require('../../lib/intl.jsx').injectIntl;
|
||||||
const intlShape = require('../../lib/intl.jsx').intlShape;
|
const intlShape = require('../../lib/intl.jsx').intlShape;
|
||||||
|
const route = require('../../lib/route');
|
||||||
|
|
||||||
const Deck = require('../../components/deck/deck.jsx');
|
const Deck = require('../../components/deck/deck.jsx');
|
||||||
const Progression = require('../../components/progression/progression.jsx');
|
const Progression = require('../../components/progression/progression.jsx');
|
||||||
|
@ -32,11 +33,9 @@ class StudentRegistration extends React.Component {
|
||||||
}
|
}
|
||||||
componentDidMount () {
|
componentDidMount () {
|
||||||
this.setState({waiting: true}); // eslint-disable-line react/no-did-mount-set-state
|
this.setState({waiting: true}); // eslint-disable-line react/no-did-mount-set-state
|
||||||
|
|
||||||
api({
|
api({
|
||||||
uri: `/classrooms/${this.props.classroomId}`,
|
uri: `/classtoken/${this.props.classroomToken}`
|
||||||
params: {
|
|
||||||
token: this.props.classroomToken
|
|
||||||
}
|
|
||||||
}, (err, body, res) => {
|
}, (err, body, res) => {
|
||||||
this.setState({waiting: false});
|
this.setState({waiting: false});
|
||||||
if (err) {
|
if (err) {
|
||||||
|
@ -46,7 +45,7 @@ class StudentRegistration extends React.Component {
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
if (res.statusCode === 404) {
|
if (res.statusCode >= 400) {
|
||||||
// TODO: Use react-router for this
|
// TODO: Use react-router for this
|
||||||
window.location = '/404';
|
window.location = '/404';
|
||||||
}
|
}
|
||||||
|
@ -76,7 +75,7 @@ class StudentRegistration extends React.Component {
|
||||||
),
|
),
|
||||||
country: formData.user.country,
|
country: formData.user.country,
|
||||||
is_robot: formData.user.isRobot,
|
is_robot: formData.user.isRobot,
|
||||||
classroom_id: this.props.classroomId,
|
classroom_id: this.state.classroom.id,
|
||||||
classroom_token: this.props.classroomToken
|
classroom_token: this.props.classroomToken
|
||||||
}
|
}
|
||||||
}, (err, body, res) => {
|
}, (err, body, res) => {
|
||||||
|
@ -101,7 +100,7 @@ class StudentRegistration extends React.Component {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
handleGoToClass () {
|
handleGoToClass () {
|
||||||
window.location = `/classes/${this.props.classroomId}/`;
|
window.location = `/classes/${this.state.classroom.id}/`;
|
||||||
}
|
}
|
||||||
render () {
|
render () {
|
||||||
const usernameDescription = this.props.intl.formatMessage({id: 'registration.studentUsernameStepDescription'});
|
const usernameDescription = this.props.intl.formatMessage({id: 'registration.studentUsernameStepDescription'});
|
||||||
|
@ -152,26 +151,19 @@ class StudentRegistration extends React.Component {
|
||||||
}
|
}
|
||||||
|
|
||||||
StudentRegistration.propTypes = {
|
StudentRegistration.propTypes = {
|
||||||
classroomId: PropTypes.string.isRequired,
|
|
||||||
classroomToken: PropTypes.string.isRequired,
|
classroomToken: PropTypes.string.isRequired,
|
||||||
intl: intlShape
|
intl: intlShape
|
||||||
};
|
};
|
||||||
|
|
||||||
StudentRegistration.defaultProps = {
|
StudentRegistration.defaultProps = {
|
||||||
classroomId: null,
|
|
||||||
classroomToken: null
|
classroomToken: null
|
||||||
};
|
};
|
||||||
|
|
||||||
const IntlStudentRegistration = injectIntl(StudentRegistration);
|
const IntlStudentRegistration = injectIntl(StudentRegistration);
|
||||||
|
|
||||||
const [classroomId, _, classroomToken] = document.location.pathname.split('/').filter(p => {
|
// parse either format of student registration url:
|
||||||
if (p) {
|
// "class register": http://scratch.mit.edu/classes/3/register/c0256654e1be
|
||||||
return p;
|
// "signup token": http://scratch.mit.edu/signup/c025r54ebe
|
||||||
}
|
const props = {classroomToken: route.getURIClassroomToken(document.location.pathname)};
|
||||||
return null;
|
|
||||||
})
|
|
||||||
.slice(-3);
|
|
||||||
|
|
||||||
const props = {classroomId, classroomToken};
|
|
||||||
|
|
||||||
render(<IntlStudentRegistration {...props} />, document.getElementById('app'));
|
render(<IntlStudentRegistration {...props} />, document.getElementById('app'));
|
||||||
|
|
26
test/unit/lib/route.test.js
Normal file
26
test/unit/lib/route.test.js
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
const route = require('../../../src/lib/route');
|
||||||
|
|
||||||
|
describe('unit test lib/route.js', () => {
|
||||||
|
|
||||||
|
test('getURIClassroomToken exists', () => {
|
||||||
|
expect(typeof route.getURIClassroomToken).toBe('function');
|
||||||
|
});
|
||||||
|
|
||||||
|
test('getURIClassroomToken parses URI paths like /classes/21/register/r9n5f5xk', () => {
|
||||||
|
let response;
|
||||||
|
response = route.getURIClassroomToken('/classes/21/register/r9n5f5xk');
|
||||||
|
expect(response).toEqual('r9n5f5xk');
|
||||||
|
});
|
||||||
|
|
||||||
|
test('getURIClassroomToken parses URI paths like /signup/e2dcfkx95', () => {
|
||||||
|
let response;
|
||||||
|
response = route.getURIClassroomToken('/signup/e2dcfkx95');
|
||||||
|
expect(response).toEqual('e2dcfkx95');
|
||||||
|
});
|
||||||
|
|
||||||
|
test('getURIClassroomToken works with trailing slash', () => {
|
||||||
|
let response;
|
||||||
|
response = route.getURIClassroomToken('/signup/r9n5f5xk/');
|
||||||
|
expect(response).toEqual('r9n5f5xk');
|
||||||
|
});
|
||||||
|
});
|
Loading…
Reference in a new issue