diff --git a/package-lock.json b/package-lock.json index 7a06d37..8ee2d0a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -65,6 +65,7 @@ "@testing-library/jest-dom": "^5.14.1", "@testing-library/react": "^12.1.0", "axios-mock-adapter": "^1.20.0", + "copy-webpack-plugin": "^11.0.0", "enzyme-adapter-react-16": "^1.15.6", "fetch-mock": "^9.11.0", "husky": "^7.0.0", @@ -8568,6 +8569,135 @@ "node": ">=0.10.0" } }, + "node_modules/copy-webpack-plugin": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", + "integrity": "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==", + "dev": true, + "dependencies": { + "fast-glob": "^3.2.11", + "glob-parent": "^6.0.1", + "globby": "^13.1.1", + "normalize-path": "^3.0.0", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/copy-webpack-plugin/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/copy-webpack-plugin/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/globby": { + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.3.tgz", + "integrity": "sha512-8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw==", + "dev": true, + "dependencies": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.11", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/copy-webpack-plugin/node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/copy-webpack-plugin/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/copy-webpack-plugin/node_modules/schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/copy-webpack-plugin/node_modules/slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/core-js": { "version": "3.16.2", "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.16.2.tgz", @@ -36325,6 +36455,95 @@ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==" }, + "copy-webpack-plugin": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", + "integrity": "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==", + "dev": true, + "requires": { + "fast-glob": "^3.2.11", + "glob-parent": "^6.0.1", + "globby": "^13.1.1", + "normalize-path": "^3.0.0", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "globby": { + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.3.tgz", + "integrity": "sha512-8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw==", + "dev": true, + "requires": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.11", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^4.0.0" + } + }, + "ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + } + }, + "slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "dev": true + } + } + }, "core-js": { "version": "3.16.2", "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.16.2.tgz", diff --git a/package.json b/package.json index c4b0f36..c31055a 100755 --- a/package.json +++ b/package.json @@ -81,6 +81,7 @@ "@testing-library/jest-dom": "^5.14.1", "@testing-library/react": "^12.1.0", "axios-mock-adapter": "^1.20.0", + "copy-webpack-plugin": "^11.0.0", "enzyme-adapter-react-16": "^1.15.6", "fetch-mock": "^9.11.0", "husky": "^7.0.0", diff --git a/public/robots.txt b/public/robots.txt new file mode 100644 index 0000000..1f53798 --- /dev/null +++ b/public/robots.txt @@ -0,0 +1,2 @@ +User-agent: * +Disallow: / diff --git a/src/i18n/index.jsx b/src/i18n/index.jsx index 28838c3..dc4b5d1 100644 --- a/src/i18n/index.jsx +++ b/src/i18n/index.jsx @@ -2,7 +2,7 @@ import arMessages from './messages/ar.json'; // no need to import en messages-- they are in the defaultMessage field import es419Messages from './messages/es_419.json'; import frMessages from './messages/fr.json'; -import frcaMessages from './messages/fr_ca.json'; +import frcaMessages from './messages/fr_CA.json'; import ptbrMessages from './messages/pt_BR.json'; import zhcnMessages from './messages/zh_CN.json'; diff --git a/src/i18n/messages/fr_ca.json b/src/i18n/messages/fr_ca.json deleted file mode 100644 index b68eef3..0000000 --- a/src/i18n/messages/fr_ca.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "dashboard.mycourses": "Mes cours", - "Dashboard.NoCoursesView.lookingForChallengePrompt": "A la recherche d'un nouveau défi ?", - "Dashboard.NoCoursesView.exploreCoursesPrompt": "Explorez nos cours pour les ajouter à votre tableau de bord.", - "Dashboard.NoCoursesView.exploreCoursesButton": "Explorer les cours", - "Dashboard.NoCoursesView.bannerAlt": "Aucune bannière de cours", - "leanerDashboard.enterpriseDialogHeader": "Vous avez accès au tableau de bord {label}", - "leanerDashboard.enterpriseDialogBody": "Pour accéder aux cours disponibles via {label}, visitez le tableau de bord {label} maintenant.", - "leanerDashboard.enterpriseDialogDismissButton": "Rejeter", - "leanerDashboard.enterpriseDialogConfirmButton": "Aller au tableau de bord", - "leanerDashboard.confirmEmailBanner": "Confirmer maintenant", - "leanerDashboard.confirmEmailTextReminderBanner": "N'oubliez pas de confirmer votre courriel afin de pouvoir continuer à apprendre sur edX ! {confirmNowButton}.", - "leanerDashboard.verifiedConfirmEmailButton": "J'ai confirmé mon courriel", - "leanerDashboard.confirmEmailModalHeader": "Confirmer votre courriel", - "leanerDashboard.confirmEmailModalBody": "Nous vous avons envoyé un courriel pour vérifier votre compte. Veuillez vérifier votre boîte de réception et cliquer sur le gros bouton rouge pour confirmer et continuer à apprendre.", - "leanerDashboard.confirmEmailImageAlt": "confirmer l'arrière-plan du courriel", - "leanerDashboard.menu.dashboard.label": "Tableau de bord", - "leanerDashboard.help.label": "Aide", - "leanerDashboard.menu.profile.label": "Profil", - "leanerDashboard.menu.viewPrograms.label": "Voir les programmes", - "leanerDashboard.menu.account.label": "Compte", - "leanerDashboard.menu.orderHistory.label": "Historique des commandes", - "leanerDashboard.menu.signOut.label": "Se déconnecter", - "greeting.morning": "Bonjour!", - "greeting.afternoon": "Bon après-midi!", - "greeting.evening": "Bonne soirée!", - "leanerDashboard.switchToProgram": "Passer aux programmes", - "leanerDashboard.exploreCourses": "Explorer les cours", - "leanerDashboard.courseSearchAlt": "Recherche de cours", - "learnerVariantDashboard.menu.dashboard.label": "Tableau de bord", - "learnerVariantDashboard.help.label": "Aide", - "learnerVariantDashboard.menu.profile.label": "Profil", - "learnerVariantDashboard.menu.viewPrograms.label": "Voir les programmes", - "learnerVariantDashboard.menu.account.label": "Compte", - "learnerVariantDashboard.menu.orderHistory.label": "Historique des commandes", - "learnerVariantDashboard.menu.signOut.label": "Se déconnecter", - "learnerVariantDashboard.course": "Cours", - "learnerVariantDashboard.program": "Programmes", - "learnerVariantDashboard.discoverNew": "Découvrir les nouveautés", - "learnerVariantDashboard.logoAltText": "Tableau de bord edX, Inc.", - "learnerVariantDashboard.collapseMenuOpenAltText": "Menu", - "learnerVariantDashboard.collapseMenuClosedAltText": "Fermer", - "MasqueradeBar.ViewAs": "Consulter comme :", - "MasqueradeBar.ViewingAs": "Affichage en tant que :", - "MasqueradeBar.SubmitButton": "Soumettre", - "MasqueradeBar.StudentNameInput": "Nom d'utilisateur ou courriel", - "MasqueradeBar.NoStudentFound": "Aucun étudiant avec ce nom d'utilisateur ou cette adresse courriel n'a pu être trouvé", - "MasqueradeBar.UnknownError": "Une erreur inconnue est survenue", - "WidgetSidebar.lookingForChallengePrompt": "A la recherche d'un nouveau défi ?", - "WidgetSidebar.findCoursesButton": "Trouver un cours {arrow}", - "RecommendationsPanel.recommendationsHeading": "Des recommandations pour vous", - "RecommendationsPanel.popularCoursesHeading": "Cours populaires", - "RecommendationsPanel.exploreCoursesButton": "Explorer les cours" -} \ No newline at end of file diff --git a/webpack.dev.config.js b/webpack.dev.config.js index 69c3b5f..22ec069 100644 --- a/webpack.dev.config.js +++ b/webpack.dev.config.js @@ -1,5 +1,6 @@ const path = require('path'); const { createConfig } = require('@edx/frontend-build'); +const CopyPlugin = require('copy-webpack-plugin'); const config = createConfig('webpack-dev'); @@ -10,4 +11,15 @@ config.resolve.modules = [ config.module.rules[0].exclude = /node_modules\/(?!(query-string|split-on-first|strict-uri-encode|@edx))/; +config.plugins.push( + new CopyPlugin({ + patterns: [ + { + from: path.resolve(__dirname, './public/robots.txt'), + to: path.resolve(__dirname, './dist/robots.txt'), + }, + ], + }), +); + module.exports = config; diff --git a/webpack.prod.config.js b/webpack.prod.config.js index a8a9ae9..61f2e5d 100644 --- a/webpack.prod.config.js +++ b/webpack.prod.config.js @@ -1,5 +1,6 @@ const path = require('path'); const { createConfig } = require('@edx/frontend-build'); +const CopyPlugin = require('copy-webpack-plugin'); const config = createConfig('webpack-prod'); @@ -10,4 +11,15 @@ config.resolve.modules = [ config.module.rules[0].exclude = /node_modules\/(?!(query-string|split-on-first|strict-uri-encode|@edx))/; +config.plugins.push( + new CopyPlugin({ + patterns: [ + { + from: path.resolve(__dirname, './public/robots.txt'), + to: path.resolve(__dirname, './dist/robots.txt'), + }, + ], + }), +); + module.exports = config;