diff --git a/.babelrc b/.babelrc
index 4f187e61f..015bfa9b8 100644
--- a/.babelrc
+++ b/.babelrc
@@ -1,9 +1,8 @@
{
"presets": ["@babel/preset-env", "@babel/preset-react"],
"plugins": [
- ["react-intl", {
- "messagesDir": "./tmp/messages/",
- "enforceDescriptions": false
+ ["formatjs", {
+ "ast": true
}],
"transform-object-assign",
"transform-flow-strip-types",
diff --git a/.gitignore b/.gitignore
index e090202c1..38865cae4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -17,5 +17,7 @@ prod/
package-lock.json
/run_server.bat
-/run_export_strings.bat
+/run_manage_translations.bat
/etc/env.json
+/bin/server.js.LICENSE.txt
+/yarn-error.log
diff --git a/bin/manageTranslations.js b/bin/manageTranslations.js
index c2c39b80f..20ea7fb8a 100644
--- a/bin/manageTranslations.js
+++ b/bin/manageTranslations.js
@@ -1,15 +1,208 @@
-import manageTranslations from 'react-intl-translations-manager';
+/* eslint no-console: "off" */
import fs from 'fs';
+import { extract } from '@formatjs/cli';
+import glob from 'glob';
+import 'colors';
+// global config parameters
+const searchPattern = './src/**/*.js';
+const refLanguage = 'en'; // the language stored in default messages
+const otherLanguages = ['cs']; // translations
const translationsDirectory = './src/locales/';
-manageTranslations({
- messagesDirectory: './tmp/messages',
- translationsDirectory,
- languages: ['en', 'cs'],
- detectDuplicateIds: false,
-});
+/**
+ * Use formatjs to extract messages from all source files.
+ * @returns {object} where keys are IDs and values are messages
+ */
+async function extractMessages() {
+ // extract messages from all src files
+ const files = glob.sync(searchPattern);
+ console.log(`Extracting messages from ${files.length} files...`);
+ const extractedAsString = await extract(files, {});
+ const extractedJson = JSON.parse(extractedAsString);
+ console.log(`Total ${Object.keys(extractedJson).length} messages extracted.`);
-const enData = JSON.parse(fs.readFileSync(translationsDirectory + 'en.json', 'utf8'));
-const whiteList = Object.keys(enData);
-fs.writeFileSync(translationsDirectory + 'whitelist_en.json', JSON.stringify(whiteList, null, 2));
+ const extracted = {};
+ Object.keys(extractedJson).forEach(key => {
+ extracted[key] = extractedJson[key].defaultMessage;
+ });
+ return extracted;
+}
+
+/**
+ * Load messages from existing json file
+ * @param {string} language (en, cs ...)
+ * @returns {object} where keys are IDs and values are messages
+ */
+function loadMessages(language) {
+ const fileName = `${translationsDirectory}/${language}.json`;
+ if (!fs.existsSync(fileName)) {
+ console.warn(`File ${fileName} does not exist!`);
+ return {};
+ }
+
+ const rawData = fs.readFileSync(fileName, 'utf8');
+ return JSON.parse(rawData);
+}
+
+/**
+ * Save messages into json language file.
+ * @param {string} language
+ * @param {object} messages where keys are IDs and values are messages
+ */
+function saveMessages(language, messages) {
+ const fileName = `${translationsDirectory}/${language}.json`;
+ const sortedMessages = {};
+ Object.keys(messages)
+ .sort()
+ .forEach(key => {
+ sortedMessages[key] = messages[key];
+ });
+
+ fs.writeFileSync(fileName, JSON.stringify(sortedMessages, null, 2));
+}
+
+/**
+ * Load whitelist (list of not-translated keys).
+ * @param {string} language
+ * @returns {Set} of whitelisted message IDs
+ */
+function loadWhitelist(language) {
+ const fileName = `${translationsDirectory}/whitelist_${language}.json`;
+ const whitelist = new Set();
+
+ if (fs.existsSync(fileName)) {
+ const rawData = fs.readFileSync(fileName, 'utf8');
+ JSON.parse(rawData).forEach(key => {
+ whitelist.add(key);
+ });
+ } else {
+ console.warn(`File ${fileName} does not exist!`);
+ }
+
+ return whitelist;
+}
+
+/**
+ * Save whitelist into json file.
+ * @param {string} language
+ * @param {Set} whitelist
+ */
+function saveWhitelist(language, whitelist) {
+ const fileName = `${translationsDirectory}/whitelist_${language}.json`;
+ const whitelistArray = Array.from(whitelist).sort();
+ fs.writeFileSync(fileName, JSON.stringify(whitelistArray, null, 2));
+}
+
+/**
+ * Compare extracted messages with existing messages and create lists of newly created keys, modified keys
+ * deleted keys, and possibly keys that were not translated yet.
+ * If whitelist is present, noTranslated list is constructed and modified list is not.
+ * I.e., ref language is diff-ed without whitelist, other languages with whitelist.
+ * @param {object} extracted messages from source code
+ * @param {object} existing messages loaded from json file
+ * @param {Set|null} whitelist keys that are ignored when not translated
+ * @param {string[]} modifiedRef initial modified list (othre languages are given modified list of ref. language).
+ * @returns
+ */
+function diff(extracted, existing, whitelist = null, modifiedRef = []) {
+ const created = [];
+ let modified = [...modifiedRef];
+ const notTranslated = [];
+ const deleted = [];
+
+ Object.keys(extracted).forEach(key => {
+ if (existing[key] === undefined) {
+ created.push(key);
+ } else if (existing[key] !== extracted[key] && !whitelist) {
+ modified.push(key);
+ } else if (existing[key] === extracted[key] && whitelist && !whitelist.has(key)) {
+ notTranslated.push(key);
+ }
+ });
+
+ Object.keys(existing).forEach(key => {
+ if (extracted[key] === undefined) {
+ deleted.push(key);
+ }
+ });
+
+ created.sort();
+ modified = modified.filter(key => existing[key] !== undefined).sort();
+ deleted.sort();
+ return { created, modified, notTranslated, deleted };
+}
+
+/**
+ * Use diff results to modify the messages and the whitelist.
+ * @param {object} messages to be updated inplace
+ * @param {object} extracted messages from the sources (read only)
+ * @param {Set} whitelist to be updated inplace
+ * @param {object} result of the previous diff operation
+ */
+function applyDiff(messages, extracted, whitelist, { created, deleted }) {
+ created.forEach(key => {
+ messages[key] = extracted[key];
+ });
+ deleted.forEach(key => {
+ delete messages[key];
+ whitelist.delete(key);
+ });
+}
+
+/**
+ * Helper function that prints out one colored list with caption
+ * @param {string[]} list
+ * @param {string} caption
+ * @param {string} color
+ */
+function _printInfo(list, caption, color) {
+ if (list.length > 0) {
+ console.log(`\t${caption}:`);
+ list.forEach(key => console.log(`\t\t${key}`[color]));
+ console.log();
+ }
+}
+
+/**
+ * Print results of a diff in human-readable format.
+ * @param {string} language
+ * @param {object} result of previous diff operation
+ */
+function printDiffInfo(language, { created = [], modified = [], notTranslated = [], deleted = [] }) {
+ console.log(`[${language}] translations:`.brightWhite.bold);
+
+ _printInfo(created, 'Newly created messages', 'brightGreen');
+ _printInfo(modified, 'Modified', 'brightYellow');
+ _printInfo(notTranslated, 'Not translated', 'yellow');
+ _printInfo(deleted, 'Deleted', 'red');
+
+ if (created.length + modified.length + notTranslated.length + deleted.length === 0) {
+ console.log();
+ console.log('\tNo modifications.'.brightGreen);
+ console.log();
+ }
+}
+
+/**
+ * Main function that do all the stuff.
+ */
+async function processTranslations() {
+ const extracted = await extractMessages();
+ const refMessages = loadMessages(refLanguage);
+ const refDiffRes = diff(extracted, refMessages);
+ printDiffInfo(refLanguage, refDiffRes);
+ saveMessages(refLanguage, extracted);
+
+ otherLanguages.forEach(lang => {
+ const messages = loadMessages(lang);
+ const whitelist = loadWhitelist(lang);
+ const diffRes = diff(extracted, messages, whitelist, refDiffRes.modified);
+ printDiffInfo(lang, diffRes);
+ applyDiff(messages, extracted, whitelist, diffRes);
+ saveMessages(lang, messages);
+ saveWhitelist(lang, whitelist);
+ });
+}
+
+processTranslations().catch(e => console.error(e));
diff --git a/package.json b/package.json
index 703fc6180..48b15cb21 100644
--- a/package.json
+++ b/package.json
@@ -22,88 +22,88 @@
"dev": "babel-node bin/dev.js --max-old-space-size=4096",
"start": "node bin/server.js",
"deploy": "mkdir -p ./prod && mkdir -p ./prod/etc && cp -rf ./views ./prod && cp -rf ./bin ./prod && cp -n ./etc/env.json.example ./prod/etc/env.json && rm -f ./prod/public/bundle* && rm -f ./prod/public/style* && cp -rf ./public ./prod",
- "exportStrings": "rm -rf node_modules/.cache/babel-loader/* && rm -rf tmp/messages/* && npm run build && babel-node bin/manageTranslations.js",
+ "manageTranslations": "babel-node bin/manageTranslations.js",
"format": "prettier --config .prettierrc --write \"src/**/*.js\""
},
"dependencies": {
- "@babel/plugin-transform-react-inline-elements": "^7.2.0",
+ "@babel/plugin-transform-react-inline-elements": "^7.14.5",
+ "@formatjs/intl-pluralrules": "^4.0.27",
+ "@formatjs/intl-relativetimeformat": "^9.1.6",
"@fortawesome/fontawesome-free": "^5.15.3",
"@fortawesome/fontawesome-svg-core": "^1.2.35",
"@fortawesome/free-brands-svg-icons": "^5.15.3",
"@fortawesome/free-regular-svg-icons": "^5.15.3",
"@fortawesome/free-solid-svg-icons": "^5.15.3",
"@fortawesome/react-fontawesome": "^0.1.14",
- "@iktakahiro/markdown-it-katex": "^3.0.3",
+ "@iktakahiro/markdown-it-katex": "^4.0.1",
"admin-lte": "3.1.0",
- "ajv": "5.5.1",
- "ajv-keywords": "2.1.1",
- "babel-plugin-react-intl": "^4.1.2",
+ "babel-plugin-formatjs": "^10.3.0",
"bluebird": "^3.3.5",
"browser-cookies": "^1.0.8",
- "buffer": "^5.0.7",
- "chai-immutable": "^1.6.0",
- "classnames": "^2.2.5",
- "codemirror": "^5.58.2",
+ "buffer": "^6.0.3",
+ "chai-immutable": "^2.1.0",
+ "classnames": "^2.3.1",
+ "codemirror": "^5.62.0",
"cookie-parser": "^1.4.1",
"cross-fetch": "^3.1.4",
"css-loader": "^5.2.6",
- "deep-equal": "^2.0.1",
- "ejs": "^2.6.1",
+ "deep-equal": "^2.0.5",
+ "ejs": "^3.1.6",
"exenv": "^1.2.1",
"express": "^4.13.4",
- "file-saver": "^1.3.3",
- "flat": "^4.0.0",
- "flow-bin": "^0.46.0",
- "font-awesome-animation": "^0.2.1",
- "glob": "^7.1.2",
+ "file-saver": "^2.0.5",
+ "flat": "^5.0.2",
+ "font-awesome-animation": "^1.1.1",
+ "glob": "^7.1.7",
"global": "^4.3.1",
- "highlight.js": "^10.4.1",
+ "highlight.js": "^11.0.1",
"immutable": "^3.8.2",
- "jwt-decode": "^2.2.0",
- "markdown-it": "^8.4.1",
- "moment": "^2.24.0",
- "pretty-ms": "^6.0.1",
+ "jwt-decode": "^3.1.2",
+ "markdown-it": "^12.0.6",
+ "moment": "^2.29.1",
+ "pretty-ms": "^7.0.1",
"prop-types": "^15.5.8",
"react": "^16.13.0",
- "react-ace": "5.9.0",
+ "react-ace": "^9.4.1",
"react-bootstrap": "1.6.1",
- "react-collapse": "^4.0.2",
- "react-copy-to-clipboard": "^5.0.1",
+ "react-collapse": "^5.1.0",
+ "react-copy-to-clipboard": "^5.0.3",
"react-datetime": "^3.0.4",
"react-dom": "^16.8.6",
- "react-dropzone": "^3.5.3",
+ "react-dropzone": "^11.3.2",
"react-height": "^3.0.0",
- "react-helmet": "^5.0.3",
+ "react-helmet": "^6.1.0",
"react-immutable-proptypes": "^2.1.0",
- "react-intl": "2.4.0",
+ "react-intl": "5.20.3",
"react-motion": "^0.5.2",
"react-redux": "^7.2.0",
- "react-responsive": "^8.0.1",
- "react-router": "^5.0.1",
- "react-router-dom": "^5.0.1",
- "react-toggle": "4.1.1",
- "redux": "^4.0.4",
+ "react-responsive": "^8.2.0",
+ "react-router": "^5.2.0",
+ "react-router-dom": "^5.2.0",
+ "react-toggle": "4.1.2",
+ "redux": "^4.1.0",
"redux-actions": "^2.6.5",
- "redux-form": "^8.2.4",
+ "redux-form": "^8.3.7",
"redux-promise-middleware": "^6.1.1",
"redux-storage": "^4.1.2",
"redux-storage-decorator-filter": "^1.1.8",
"redux-storage-engine-localstorage": "^1.1.4",
"redux-thunk": "^2.3.0",
"reselect": "^4.0.0",
- "serialize-javascript": "^3.1.0",
+ "serialize-javascript": "^6.0.0",
"statuscode": "0.0.0",
- "validator": "^7.0.0",
- "viz.js": "^1.8.0"
+ "validator": "^13.6.0",
+ "viz.js": "^2.1.2"
},
"devDependencies": {
"@babel/cli": "^7.14.5",
"@babel/core": "^7.14.6",
- "@babel/node": "^7.14.5",
+ "@babel/node": "^7.14.7",
"@babel/plugin-proposal-class-properties": "^7.14.5",
- "@babel/preset-env": "^7.14.5",
+ "@babel/preset-env": "^7.14.7",
"@babel/preset-react": "^7.14.5",
"@babel/register": "^7.14.5",
+ "@formatjs/cli": "^4.2.21",
"async": "^3.1.0",
"babel-eslint": "^10.0.2",
"babel-loader": "^8.2.2",
@@ -114,11 +114,11 @@
"babel-preset-stage-1": "^6.24.0",
"chai": "^4.3.4",
"chai-spies": "^1.0.0",
- "colors": "^1.1.2",
+ "colors": "^1.4.0",
"css-loader": "^5.2.6",
"css-modules-require-hook": "^4.2.3",
"dotenv": "^10.0.0",
- "eslint": "^7.28.0",
+ "eslint": "^7.29.0",
"eslint-config-prettier": "^8.3.0",
"eslint-config-standard": "16.0.3",
"eslint-config-standard-react": "11.0.1",
@@ -137,7 +137,7 @@
"json-loader": "^0.5.4",
"less": "^4.1.1",
"less-loader": "^10.0.0",
- "marked": "^2.1.1",
+ "marked": "^2.1.2",
"mini-css-extract-plugin": "^1.6.0",
"mocha": "^9.0.1",
"mocha-lcov-reporter": "^1.3.0",
@@ -150,7 +150,7 @@
"strip-loader": "^0.1.2",
"style-loader": "^2.0.0",
"terser-webpack-plugin": "^5.1.3",
- "webpack": "^5.39.1",
+ "webpack": "^5.40.0",
"webpack-cli": "^4.7.2",
"webpack-dev-middleware": "^5.0.0",
"webpack-dev-server": "^3.11.2",
diff --git a/src/client.js b/src/client.js
index f13891332..4c2d7f485 100644
--- a/src/client.js
+++ b/src/client.js
@@ -16,6 +16,44 @@ import 'admin-lte/plugins/jquery-ui/jquery-ui.min.js';
import 'admin-lte/plugins/bootstrap/js/bootstrap.bundle.min.js';
import 'admin-lte/dist/js/adminlte.js';
+// Patch for ACE editor (it has complex loading)
+require('ace-builds');
+require('ace-builds/webpack-resolver');
+require('ace-builds/src-noconflict/theme-monokai');
+require('ace-builds/src-noconflict/theme-github');
+require('ace-builds/src-noconflict/mode-c_cpp');
+require('ace-builds/src-noconflict/mode-csharp');
+require('ace-builds/src-noconflict/mode-css');
+require('ace-builds/src-noconflict/mode-groovy');
+require('ace-builds/src-noconflict/mode-html');
+require('ace-builds/src-noconflict/mode-kotlin');
+require('ace-builds/src-noconflict/mode-java');
+require('ace-builds/src-noconflict/mode-javascript');
+require('ace-builds/src-noconflict/mode-makefile');
+require('ace-builds/src-noconflict/mode-pascal');
+require('ace-builds/src-noconflict/mode-php');
+require('ace-builds/src-noconflict/mode-python');
+require('ace-builds/src-noconflict/mode-rust');
+require('ace-builds/src-noconflict/mode-scala');
+require('ace-builds/src-noconflict/mode-typescript');
+require('ace-builds/src-noconflict/keybinding-vim');
+
+// override of worker paths, so they load properly
+const ace = require('ace-builds/src-noconflict/ace');
+const ACE_CDN_PREFIX = 'https://cdn.jsdelivr.net/npm/ace-builds@1.4.12/src-noconflict/';
+ace.config.set('basePath', ACE_CDN_PREFIX);
+const KNOWN_ACE_WORKERS = {
+ base_worker: 'worker-base',
+ css_worker: 'worker-css',
+ html_worker: 'worker-html',
+ javascript_worker: 'worker-javascript',
+ php_worker: 'worker-php',
+ xml_worker: 'worker-xml',
+};
+Object.keys(KNOWN_ACE_WORKERS).forEach(key => {
+ ace.config.setModuleUrl(`ace/mode/${key}`, `${ACE_CDN_PREFIX}${KNOWN_ACE_WORKERS[key]}.js`);
+});
+
// load the initial state form the server - if any
let state;
const ini = window.__INITIAL_STATE__;
diff --git a/src/components/Assignments/Assignment/AssignmentDetails/AssignmentDetails.js b/src/components/Assignments/Assignment/AssignmentDetails/AssignmentDetails.js
index 97c76d707..2343e1823 100644
--- a/src/components/Assignments/Assignment/AssignmentDetails/AssignmentDetails.js
+++ b/src/components/Assignments/Assignment/AssignmentDetails/AssignmentDetails.js
@@ -225,7 +225,7 @@ const AssignmentDetails = ({
{canSubmit.canSubmit ? : }
- :
+ :
{canSubmit.submittedCount}
diff --git a/src/components/Assignments/Assignment/AssignmentTableRow/AssignmentTableRow.js b/src/components/Assignments/Assignment/AssignmentTableRow/AssignmentTableRow.js
index f11f9d916..95f4d53f2 100644
--- a/src/components/Assignments/Assignment/AssignmentTableRow/AssignmentTableRow.js
+++ b/src/components/Assignments/Assignment/AssignmentTableRow/AssignmentTableRow.js
@@ -2,7 +2,7 @@ import React from 'react';
import PropTypes from 'prop-types';
import { Link } from 'react-router-dom';
import AssignmentStatusIcon from '../AssignmentStatusIcon/AssignmentStatusIcon';
-import { FormattedMessage, intlShape, injectIntl } from 'react-intl';
+import { FormattedMessage, injectIntl } from 'react-intl';
import { OverlayTrigger, Tooltip } from 'react-bootstrap';
import withLinks from '../../../../helpers/withLinks';
@@ -185,7 +185,7 @@ AssignmentTableRow.propTypes = {
groupsAccessor: PropTypes.func,
discussionOpen: PropTypes.func,
links: PropTypes.object,
- intl: intlShape.isRequired,
+ intl: PropTypes.object.isRequired,
};
export default injectIntl(withLinks(AssignmentTableRow));
diff --git a/src/components/Assignments/Assignment/AssignmentsTable/AssignmentsTable.js b/src/components/Assignments/Assignment/AssignmentsTable/AssignmentsTable.js
index 990f81ac7..06a0cd1fc 100644
--- a/src/components/Assignments/Assignment/AssignmentsTable/AssignmentsTable.js
+++ b/src/components/Assignments/Assignment/AssignmentsTable/AssignmentsTable.js
@@ -2,7 +2,7 @@ import React, { Component } from 'react';
import PropTypes from 'prop-types';
import ImmutablePropTypes from 'react-immutable-proptypes';
import { Table, Modal } from 'react-bootstrap';
-import { FormattedMessage, injectIntl, intlShape } from 'react-intl';
+import { FormattedMessage, injectIntl } from 'react-intl';
import { isReady, isLoading, getJsData } from '../../../../redux/helpers/resourceManager';
import AssignmentTableRow, { NoAssignmentTableRow, LoadingAssignmentTableRow } from '../AssignmentTableRow';
@@ -151,7 +151,7 @@ AssignmentsTable.propTypes = {
showNames: PropTypes.bool,
showGroups: PropTypes.bool,
groupsAccessor: PropTypes.func,
- intl: intlShape.isRequired,
+ intl: PropTypes.object.isRequired,
};
export default injectIntl(AssignmentsTable);
diff --git a/src/components/Assignments/ShadowAssignmentPointsTable/ShadowAssignmentPointsTable.js b/src/components/Assignments/ShadowAssignmentPointsTable/ShadowAssignmentPointsTable.js
index 54b758d55..a0839bfe9 100644
--- a/src/components/Assignments/ShadowAssignmentPointsTable/ShadowAssignmentPointsTable.js
+++ b/src/components/Assignments/ShadowAssignmentPointsTable/ShadowAssignmentPointsTable.js
@@ -1,6 +1,6 @@
import React, { Component } from 'react';
import PropTypes from 'prop-types';
-import { FormattedMessage, injectIntl, intlShape } from 'react-intl';
+import { FormattedMessage, injectIntl } from 'react-intl';
import { Table, Modal } from 'react-bootstrap';
@@ -176,7 +176,7 @@ ShadowAssignmentPointsTable.propTypes = {
maxPoints: PropTypes.number.isRequired,
setPoints: PropTypes.func.isRequired,
removePoints: PropTypes.func.isRequired,
- intl: intlShape.isRequired,
+ intl: PropTypes.object.isRequired,
};
export default injectIntl(ShadowAssignmentPointsTable);
diff --git a/src/components/Assignments/SolutionsTable/SolutionsTableRow.js b/src/components/Assignments/SolutionsTable/SolutionsTableRow.js
index bfe946335..a3821c8d3 100644
--- a/src/components/Assignments/SolutionsTable/SolutionsTableRow.js
+++ b/src/components/Assignments/SolutionsTable/SolutionsTableRow.js
@@ -1,6 +1,6 @@
import React from 'react';
import PropTypes from 'prop-types';
-import { FormattedMessage, FormattedNumber, injectIntl, intlShape } from 'react-intl';
+import { FormattedMessage, FormattedNumber, injectIntl } from 'react-intl';
import { Link } from 'react-router-dom';
import { OverlayTrigger, Tooltip } from 'react-bootstrap';
import classnames from 'classnames';
@@ -196,7 +196,7 @@ SolutionsTableRow.propTypes = {
noteMaxlen: PropTypes.number,
compact: PropTypes.bool.isRequired,
links: PropTypes.object,
- intl: intlShape,
+ intl: PropTypes.object,
};
export default withLinks(injectIntl(SolutionsTableRow));
diff --git a/src/components/Exercises/FilesTable/FilesTable.js b/src/components/Exercises/FilesTable/FilesTable.js
index a026b477a..f077e08bb 100644
--- a/src/components/Exercises/FilesTable/FilesTable.js
+++ b/src/components/Exercises/FilesTable/FilesTable.js
@@ -79,11 +79,7 @@ const FilesTable = ({
);
FilesTable.propTypes = {
- description: PropTypes.oneOfType([
- PropTypes.string,
- PropTypes.shape({ type: PropTypes.oneOf([FormattedMessage]) }),
- PropTypes.element,
- ]),
+ description: PropTypes.oneOfType([PropTypes.string, PropTypes.element]),
uploadId: PropTypes.string.isRequired,
files: PropTypes.array,
usedFiles: PropTypes.instanceOf(Set),
diff --git a/src/components/Groups/ResultsTable/ResultsTable.js b/src/components/Groups/ResultsTable/ResultsTable.js
index 29cb14b24..75d8e6f22 100644
--- a/src/components/Groups/ResultsTable/ResultsTable.js
+++ b/src/components/Groups/ResultsTable/ResultsTable.js
@@ -1,7 +1,7 @@
import React, { Component } from 'react';
import PropTypes from 'prop-types';
import { Link } from 'react-router-dom';
-import { FormattedMessage, injectIntl, intlShape } from 'react-intl';
+import { FormattedMessage, injectIntl } from 'react-intl';
import { defaultMemoize } from 'reselect';
import { OverlayTrigger, Tooltip, Modal } from 'react-bootstrap';
@@ -413,7 +413,7 @@ class ResultsTable extends Component {
show={Boolean(this.state.dialogOpen && this.state.dialogUserId)}
backdrop="static"
onHide={this.closeDialog}
- size="large">
+ size="xl">
@@ -487,7 +487,7 @@ ResultsTable.propTypes = {
fetchUsersSolutions: PropTypes.func.isRequired,
setShadowPoints: PropTypes.func.isRequired,
removeShadowPoints: PropTypes.func.isRequired,
- intl: intlShape.isRequired,
+ intl: PropTypes.object.isRequired,
links: PropTypes.object,
};
diff --git a/src/components/Pipelines/BoxForm/BoxForm.js b/src/components/Pipelines/BoxForm/BoxForm.js
index a1db87631..e61889b00 100644
--- a/src/components/Pipelines/BoxForm/BoxForm.js
+++ b/src/components/Pipelines/BoxForm/BoxForm.js
@@ -1,6 +1,6 @@
import React, { Component } from 'react';
import PropTypes from 'prop-types';
-import { FormattedMessage, FormattedHTMLMessage } from 'react-intl';
+import { FormattedMessage } from 'react-intl';
import { connect } from 'react-redux';
import { reduxForm, Field, formValueSelector } from 'redux-form';
@@ -137,11 +137,7 @@ class BoxForm extends Component {
BoxForm.propTypes = {
show: PropTypes.bool,
- title: PropTypes.oneOfType([
- PropTypes.string,
- PropTypes.shape({ type: PropTypes.oneOf([FormattedMessage]) }),
- PropTypes.element,
- ]).isRequired,
+ title: PropTypes.oneOfType([PropTypes.string, PropTypes.element]).isRequired,
selectedType: PropTypes.string,
boxTypes: PropTypes.array.isRequired,
onSubmit: PropTypes.func.isRequired,
@@ -190,7 +186,7 @@ const validate = ({ name, type, portsIn = {}, portsOut = {} }, { boxTypes, exist
if (existingVariableType && existingVariableType.type !== portType) {
portsInErrors[portName] = {
value: (
- {text},
}}
/>
),
diff --git a/src/components/Pipelines/PipelineDetail/PipelineDetail.js b/src/components/Pipelines/PipelineDetail/PipelineDetail.js
index 8d8002be0..24ceac0c4 100644
--- a/src/components/Pipelines/PipelineDetail/PipelineDetail.js
+++ b/src/components/Pipelines/PipelineDetail/PipelineDetail.js
@@ -46,7 +46,7 @@ const PipelineDetail = ({
-
+
diff --git a/src/components/Pipelines/PipelineVisualisation/PipelineVisualisation.js b/src/components/Pipelines/PipelineVisualisation/PipelineVisualisation.js
index 9858491fc..c6dcbef0a 100644
--- a/src/components/Pipelines/PipelineVisualisation/PipelineVisualisation.js
+++ b/src/components/Pipelines/PipelineVisualisation/PipelineVisualisation.js
@@ -1,26 +1,36 @@
-import React from 'react';
+import React, { useState, useEffect } from 'react';
import PropTypes from 'prop-types';
+import { FormattedMessage } from 'react-intl';
import { convertGraphToSvg } from '../../../helpers/dot';
-import ClientOnly from '../../../components/helpers/ClientOnly';
import { canUseDOM } from 'exenv';
import style from './pipeline.less';
+import { LoadingIcon } from '../../icons';
const PipelineVisualisation = ({ graph }) => {
- let svg = '';
if (canUseDOM) {
- svg = convertGraphToSvg(graph);
- }
- return (
-
+ const [svg, setSvg] = useState(null);
+ useEffect(() => {
+ setSvg(null);
+ convertGraphToSvg(graph).then(result => setSvg(result));
+ }, [graph]);
+
+ return svg !== null ? (
-
- );
+ ) : (
+
+
+
+
+ );
+ } else {
+ return
;
+ }
};
PipelineVisualisation.propTypes = {
diff --git a/src/components/Pipelines/PipelinesList/PipelinesList.js b/src/components/Pipelines/PipelinesList/PipelinesList.js
index 494d52193..aee33ea96 100644
--- a/src/components/Pipelines/PipelinesList/PipelinesList.js
+++ b/src/components/Pipelines/PipelinesList/PipelinesList.js
@@ -1,7 +1,7 @@
import React from 'react';
import PropTypes from 'prop-types';
import { Table } from 'react-bootstrap';
-import { injectIntl, FormattedMessage, intlShape } from 'react-intl';
+import { injectIntl, FormattedMessage } from 'react-intl';
import PipelinesListItem from '../PipelinesListItem';
import { identity } from '../../../helpers/common';
@@ -41,7 +41,7 @@ PipelinesList.propTypes = {
pipelines: PropTypes.array,
heading: PropTypes.any,
createActions: PropTypes.func,
- intl: intlShape.isRequired,
+ intl: PropTypes.object.isRequired,
};
export default injectIntl(PipelinesList);
diff --git a/src/components/ReferenceSolutions/ReferenceSolutionDetail/ReferenceSolutionDetail.js b/src/components/ReferenceSolutions/ReferenceSolutionDetail/ReferenceSolutionDetail.js
index e9153e4d0..56c582e37 100644
--- a/src/components/ReferenceSolutions/ReferenceSolutionDetail/ReferenceSolutionDetail.js
+++ b/src/components/ReferenceSolutions/ReferenceSolutionDetail/ReferenceSolutionDetail.js
@@ -126,18 +126,20 @@ class ReferenceSolutionDetail extends Component {
)}
- {files.map(file => (
-
- {
- e.preventDefault();
- this.openFile(file.id);
- }}>
-
-
-
- ))}
+ {files
+ .sort((a, b) => a.name.localeCompare(b.name, 'en'))
+ .map(file => (
+
+ {
+ e.preventDefault();
+ this.openFile(file.id);
+ }}>
+
+
+
+ ))}
{files.length > 1 && (
@@ -289,7 +291,16 @@ class ReferenceSolutionDetail extends Component {
)}
- this.hideFile()} />
+
{activeSubmissionId && scoreConfigSelector && (
{
diff --git a/src/components/SisIntegration/CourseLabel/CourseLabel.js b/src/components/SisIntegration/CourseLabel/CourseLabel.js
index 78e97a5a8..b9f356a92 100644
--- a/src/components/SisIntegration/CourseLabel/CourseLabel.js
+++ b/src/components/SisIntegration/CourseLabel/CourseLabel.js
@@ -1,6 +1,6 @@
import React from 'react';
import PropTypes from 'prop-types';
-import { FormattedMessage, injectIntl, intlShape } from 'react-intl';
+import { FormattedMessage, injectIntl } from 'react-intl';
import { OverlayTrigger, Tooltip, Badge } from 'react-bootstrap';
import Icon, { GroupIcon } from '../../icons';
@@ -103,7 +103,7 @@ CourseLabel.propTypes = {
oddWeeks: PropTypes.bool,
room: PropTypes.string,
groupsCount: PropTypes.number,
- intl: intlShape.isRequired,
+ intl: PropTypes.object.isRequired,
};
export default injectIntl(CourseLabel);
diff --git a/src/components/SisIntegration/PlantTermGroups/PlantTermGroups.js b/src/components/SisIntegration/PlantTermGroups/PlantTermGroups.js
index 1409d015a..b19683262 100644
--- a/src/components/SisIntegration/PlantTermGroups/PlantTermGroups.js
+++ b/src/components/SisIntegration/PlantTermGroups/PlantTermGroups.js
@@ -1,7 +1,7 @@
import React from 'react';
import PropTypes from 'prop-types';
import { Modal, Table, Alert } from 'react-bootstrap';
-import { FormattedMessage, injectIntl, intlShape } from 'react-intl';
+import { FormattedMessage, injectIntl } from 'react-intl';
import { Field, FieldArray, reduxForm } from 'redux-form';
import { defaultMemoize } from 'reselect';
@@ -200,7 +200,7 @@ PlantTermGroups.propTypes = {
externalId: PropTypes.string,
groups: PropTypes.array.isRequired,
rootGroups: PropTypes.array.isRequired,
- intl: intlShape.isRequired,
+ intl: PropTypes.object.isRequired,
};
const validate = ({ groups, localizedTexts }) => {
diff --git a/src/components/Solutions/SolutionDetail/SolutionDetail.js b/src/components/Solutions/SolutionDetail/SolutionDetail.js
index 5f2281411..5111fe5f6 100644
--- a/src/components/Solutions/SolutionDetail/SolutionDetail.js
+++ b/src/components/Solutions/SolutionDetail/SolutionDetail.js
@@ -115,18 +115,20 @@ class SolutionDetail extends Component {
otherSolutions={otherSolutions}
/>
- {files.map(file => (
-
- {
- e.preventDefault();
- this.openFile(file.id);
- }}>
-
-
-
- ))}
+ {files
+ .sort((a, b) => a.name.localeCompare(b.name, 'en'))
+ .map(file => (
+
+ {
+ e.preventDefault();
+ this.openFile(file.id);
+ }}>
+
+
+
+ ))}
{files.length > 1 && (
@@ -292,7 +294,15 @@ class SolutionDetail extends Component {
)}
- this.hideFile()} />
+
{activeSubmissionId && scoreConfigSelector && (
{environmentsHelpUrl && (
- (
+
+ {caption}
+
+ ),
+ }}
/>
)}
@@ -357,7 +363,7 @@ SubmitSolution.propTypes = {
isReferenceSolution: PropTypes.bool,
attachedFiles: PropTypes.array,
messages: PropTypes.object.isRequired,
- intl: intlShape.isRequired,
+ intl: PropTypes.object.isRequired,
};
export default injectIntl(
diff --git a/src/components/Solutions/TestResults/TestResults.js b/src/components/Solutions/TestResults/TestResults.js
index 20c9a0e2a..99ec7f8d1 100644
--- a/src/components/Solutions/TestResults/TestResults.js
+++ b/src/components/Solutions/TestResults/TestResults.js
@@ -1,6 +1,6 @@
import React from 'react';
import PropTypes from 'prop-types';
-import { FormattedMessage, intlShape, injectIntl } from 'react-intl';
+import { FormattedMessage, injectIntl } from 'react-intl';
import Box from '../../widgets/Box';
import TestResultsTable from '../TestResultsTable';
import { defaultMemoize } from 'reselect';
@@ -45,7 +45,7 @@ TestResults.propTypes = {
isJudgeLogStdoutPublic: PropTypes.bool,
isJudgeLogStderrPublic: PropTypes.bool,
isJudgeLogMerged: PropTypes.bool,
- intl: intlShape.isRequired,
+ intl: PropTypes.object.isRequired,
};
export default injectIntl(TestResults);
diff --git a/src/components/Solutions/Upload/Upload.js b/src/components/Solutions/Upload/Upload.js
index 4fd464715..d2ea557b0 100644
--- a/src/components/Solutions/Upload/Upload.js
+++ b/src/components/Solutions/Upload/Upload.js
@@ -1,7 +1,7 @@
import React from 'react';
import PropTypes from 'prop-types';
import { FormattedMessage } from 'react-intl';
-import DropZone from 'react-dropzone';
+import Dropzone from 'react-dropzone';
import Button from '../../widgets/TheButton';
import UploadsTable from '../UploadsTable';
import { UploadIcon } from '../../icons';
@@ -29,17 +29,22 @@ const Upload = ({
retryUploadFile,
}) => (
-
-
-
-
-
-
-
-
-
-
-
+
+ {({ getRootProps, getInputProps }) => (
+
+ )}
+
{(uploadingFiles.length > 0 || attachedFiles.length > 0 || failedFiles.length > 0 || removedFiles.length > 0) && (
{stats && (
-
)}
diff --git a/src/components/buttons/DeleteButton/DeleteButton.js b/src/components/buttons/DeleteButton/DeleteButton.js
index 92c6d79c4..8a3592ab1 100644
--- a/src/components/buttons/DeleteButton/DeleteButton.js
+++ b/src/components/buttons/DeleteButton/DeleteButton.js
@@ -103,7 +103,7 @@ const DeleteButton = ({
DeleteButtonInternal.propTypes = {
id: PropTypes.string,
icon: PropTypes.element,
- label: PropTypes.oneOfType([PropTypes.oneOf([FormattedMessage]), PropTypes.element, PropTypes.string]),
+ label: PropTypes.oneOfType([PropTypes.element, PropTypes.string]),
disabled: PropTypes.bool,
small: PropTypes.bool,
captionAsTooltip: PropTypes.bool,
diff --git a/src/components/buttons/ResendEmailVerification/ResendEmailVerification.js b/src/components/buttons/ResendEmailVerification/ResendEmailVerification.js
index 1a438d3ca..0fa43322e 100644
--- a/src/components/buttons/ResendEmailVerification/ResendEmailVerification.js
+++ b/src/components/buttons/ResendEmailVerification/ResendEmailVerification.js
@@ -1,6 +1,6 @@
import React from 'react';
import PropTypes from 'prop-types';
-import { FormattedMessage, defineMessages, intlShape, injectIntl } from 'react-intl';
+import { FormattedMessage, defineMessages, injectIntl } from 'react-intl';
import { MailIcon, SuccessIcon, LoadingIcon, FailureIcon } from '../../icons';
import TheButton from '../../widgets/TheButton';
import { resourceStatus } from '../../../redux/helpers/resourceManager';
@@ -50,7 +50,7 @@ const ResendEmailVerification = ({ resend, state, intl: { formatMessage }, ...pr
ResendEmailVerification.propTypes = {
resend: PropTypes.func.isRequired,
state: PropTypes.string,
- intl: intlShape,
+ intl: PropTypes.object,
};
export default injectIntl(ResendEmailVerification);
diff --git a/src/components/forms/AddSisTermForm/AddSisTermForm.js b/src/components/forms/AddSisTermForm/AddSisTermForm.js
index 69cc7c76d..cb00bce6b 100644
--- a/src/components/forms/AddSisTermForm/AddSisTermForm.js
+++ b/src/components/forms/AddSisTermForm/AddSisTermForm.js
@@ -1,6 +1,6 @@
import React from 'react';
import PropTypes from 'prop-types';
-import { FormattedMessage, defineMessages, intlShape, injectIntl } from 'react-intl';
+import { FormattedMessage, defineMessages, injectIntl } from 'react-intl';
import { reduxForm, Field } from 'redux-form';
import { Alert } from 'react-bootstrap';
import FormBox from '../../widgets/FormBox';
@@ -86,7 +86,7 @@ AddSisTermForm.propTypes = {
submitSucceeded: PropTypes.bool,
submitting: PropTypes.bool,
invalid: PropTypes.bool,
- intl: intlShape.isRequired,
+ intl: PropTypes.object.isRequired,
};
export default injectIntl(
diff --git a/src/components/forms/Confirm/Confirm.js b/src/components/forms/Confirm/Confirm.js
index 007dc9a61..d2ddcdbbe 100644
--- a/src/components/forms/Confirm/Confirm.js
+++ b/src/components/forms/Confirm/Confirm.js
@@ -82,11 +82,7 @@ class Confirm extends Component {
}
}
-const stringOrFormattedMessage = PropTypes.oneOfType([
- PropTypes.string,
- PropTypes.element,
- PropTypes.oneOf([FormattedMessage]),
-]);
+const stringOrFormattedMessage = PropTypes.oneOfType([PropTypes.string, PropTypes.element]);
Confirm.propTypes = {
id: PropTypes.string.isRequired,
diff --git a/src/components/forms/CreateExerciseForm/CreateExerciseForm.js b/src/components/forms/CreateExerciseForm/CreateExerciseForm.js
index 60d5437c9..6db884165 100644
--- a/src/components/forms/CreateExerciseForm/CreateExerciseForm.js
+++ b/src/components/forms/CreateExerciseForm/CreateExerciseForm.js
@@ -1,6 +1,6 @@
import React, { Component } from 'react';
import PropTypes from 'prop-types';
-import { injectIntl, FormattedMessage, defineMessages, intlShape } from 'react-intl';
+import { injectIntl, FormattedMessage, defineMessages } from 'react-intl';
import { Alert } from 'react-bootstrap';
import { reduxForm, Field } from 'redux-form';
@@ -87,7 +87,7 @@ CreateExerciseForm.propTypes = {
invalid: PropTypes.bool,
handleSubmit: PropTypes.func.isRequired,
groups: PropTypes.array.isRequired,
- intl: intlShape,
+ intl: PropTypes.object,
links: PropTypes.object,
};
const validate = ({ groupId }) => {
diff --git a/src/components/forms/EditAssignmentForm/AssignmentFormGroupsList.js b/src/components/forms/EditAssignmentForm/AssignmentFormGroupsList.js
index 830f1c759..107a7464b 100644
--- a/src/components/forms/EditAssignmentForm/AssignmentFormGroupsList.js
+++ b/src/components/forms/EditAssignmentForm/AssignmentFormGroupsList.js
@@ -1,6 +1,6 @@
import React from 'react';
import PropTypes from 'prop-types';
-import { injectIntl, intlShape, FormattedMessage } from 'react-intl';
+import { injectIntl, FormattedMessage } from 'react-intl';
import { Field } from 'redux-form';
import { CheckboxField } from '../Fields';
@@ -46,7 +46,7 @@ AssignmentFormGroupsList.propTypes = {
groupsAccessor: PropTypes.func.isRequired,
isOpen: PropTypes.bool.isRequired,
toggleOpenState: PropTypes.func,
- intl: intlShape.isRequired,
+ intl: PropTypes.object.isRequired,
};
export default injectIntl(AssignmentFormGroupsList);
diff --git a/src/components/forms/EditAssignmentForm/AssignmentFormMultiassignSuccess.js b/src/components/forms/EditAssignmentForm/AssignmentFormMultiassignSuccess.js
index 6af5440a8..4005af998 100644
--- a/src/components/forms/EditAssignmentForm/AssignmentFormMultiassignSuccess.js
+++ b/src/components/forms/EditAssignmentForm/AssignmentFormMultiassignSuccess.js
@@ -1,6 +1,6 @@
import React from 'react';
import PropTypes from 'prop-types';
-import { injectIntl, intlShape, FormattedMessage } from 'react-intl';
+import { injectIntl, FormattedMessage } from 'react-intl';
import { Table } from 'react-bootstrap';
import { Link } from 'react-router-dom';
@@ -74,7 +74,7 @@ AssignmentFormMultiassignSuccess.propTypes = {
groups: PropTypes.array.isRequired,
groupsAccessor: PropTypes.func.isRequired,
acknowledgeSuccess: PropTypes.func,
- intl: intlShape.isRequired,
+ intl: PropTypes.object.isRequired,
links: PropTypes.object.isRequired,
};
diff --git a/src/components/forms/EditAssignmentForm/EditAssignmentForm.js b/src/components/forms/EditAssignmentForm/EditAssignmentForm.js
index 951c88bc0..eb5741c5f 100644
--- a/src/components/forms/EditAssignmentForm/EditAssignmentForm.js
+++ b/src/components/forms/EditAssignmentForm/EditAssignmentForm.js
@@ -1,7 +1,7 @@
import React, { Component } from 'react';
import PropTypes from 'prop-types';
import { reduxForm, Field, FieldArray } from 'redux-form';
-import { injectIntl, intlShape, FormattedMessage } from 'react-intl';
+import { injectIntl, FormattedMessage } from 'react-intl';
import { Alert, Container, Row, Col, Form } from 'react-bootstrap';
import moment from 'moment';
import { defaultMemoize } from 'reselect';
@@ -451,7 +451,7 @@ class EditAssignmentForm extends Component {
- {text},
+ }}
/>
@@ -174,7 +177,7 @@ EditEnvironmentConfigForm.propTypes = {
invalid: PropTypes.bool,
error: PropTypes.any,
warning: PropTypes.any,
- intl: intlShape.isRequired,
+ intl: PropTypes.object.isRequired,
};
const validate = ({ environmentId, variables }) => {
diff --git a/src/components/forms/EditEnvironmentConfigForm/EditEnvironmentConfigVariables.js b/src/components/forms/EditEnvironmentConfigForm/EditEnvironmentConfigVariables.js
index 5255a1780..17cf48ed7 100644
--- a/src/components/forms/EditEnvironmentConfigForm/EditEnvironmentConfigVariables.js
+++ b/src/components/forms/EditEnvironmentConfigForm/EditEnvironmentConfigVariables.js
@@ -136,11 +136,7 @@ EditEnvironmentConfigVariables.propTypes = {
error: PropTypes.any,
warning: PropTypes.any,
}).isRequired,
- noItems: PropTypes.oneOfType([
- PropTypes.string,
- PropTypes.element,
- PropTypes.shape({ type: PropTypes.oneOf([FormattedMessage]) }),
- ]),
+ noItems: PropTypes.oneOfType([PropTypes.string, PropTypes.element]),
};
export default EditEnvironmentConfigVariables;
diff --git a/src/components/forms/EditEnvironmentSimpleForm/EditEnvironmentList.js b/src/components/forms/EditEnvironmentSimpleForm/EditEnvironmentList.js
index 7da30b004..14e129ffa 100644
--- a/src/components/forms/EditEnvironmentSimpleForm/EditEnvironmentList.js
+++ b/src/components/forms/EditEnvironmentSimpleForm/EditEnvironmentList.js
@@ -1,7 +1,7 @@
import React from 'react';
import PropTypes from 'prop-types';
import { Field } from 'redux-form';
-import { FormattedMessage, intlShape, injectIntl } from 'react-intl';
+import { FormattedMessage, injectIntl } from 'react-intl';
import { Container, Row, Col, OverlayTrigger, Tooltip } from 'react-bootstrap';
import Button from '../../widgets/TheButton';
@@ -102,7 +102,7 @@ EditEnvironmentList.propTypes = {
invertRuntimeSelectionHandler: PropTypes.func,
showExclusive: PropTypes.bool,
fullWidth: PropTypes.bool,
- intl: intlShape.isRequired,
+ intl: PropTypes.object.isRequired,
};
export default injectIntl(EditEnvironmentList);
diff --git a/src/components/forms/EditEnvironmentSimpleForm/EditEnvironmentSimpleForm.js b/src/components/forms/EditEnvironmentSimpleForm/EditEnvironmentSimpleForm.js
index 0bea319f6..b62463496 100644
--- a/src/components/forms/EditEnvironmentSimpleForm/EditEnvironmentSimpleForm.js
+++ b/src/components/forms/EditEnvironmentSimpleForm/EditEnvironmentSimpleForm.js
@@ -1,7 +1,7 @@
import React, { Component } from 'react';
import PropTypes from 'prop-types';
import { reduxForm } from 'redux-form';
-import { FormattedMessage, FormattedHTMLMessage, intlShape, injectIntl } from 'react-intl';
+import { FormattedMessage, injectIntl } from 'react-intl';
import { Alert, OverlayTrigger, Tooltip, Table } from 'react-bootstrap';
import { defaultMemoize } from 'reselect';
@@ -89,10 +89,16 @@ class EditEnvironmentSimpleForm extends Component {
{environmentsHelpUrl && (
@@ -192,7 +198,7 @@ EditEnvironmentSimpleForm.propTypes = {
initialValues: PropTypes.object,
runtimeEnvironments: PropTypes.array,
readOnly: PropTypes.bool,
- intl: intlShape.isRequired,
+ intl: PropTypes.object.isRequired,
};
const validate = (formData, { runtimeEnvironments }) => {
diff --git a/src/components/forms/EditExerciseAdvancedConfigForm/EditExerciseAdvancedConfigForm.js b/src/components/forms/EditExerciseAdvancedConfigForm/EditExerciseAdvancedConfigForm.js
index d03115759..a22e26f93 100644
--- a/src/components/forms/EditExerciseAdvancedConfigForm/EditExerciseAdvancedConfigForm.js
+++ b/src/components/forms/EditExerciseAdvancedConfigForm/EditExerciseAdvancedConfigForm.js
@@ -2,7 +2,7 @@ import React, { Component } from 'react';
import PropTypes from 'prop-types';
import { reduxForm } from 'redux-form';
import { connect } from 'react-redux';
-import { FormattedMessage, injectIntl, intlShape } from 'react-intl';
+import { FormattedMessage, injectIntl } from 'react-intl';
import { Alert, Table } from 'react-bootstrap';
import classnames from 'classnames';
@@ -124,7 +124,7 @@ EditExerciseAdvancedConfigForm.propTypes = {
supplementaryFiles: PropTypes.array,
rawFill: PropTypes.func.isRequired,
readOnly: PropTypes.bool,
- intl: intlShape.isRequired,
+ intl: PropTypes.object.isRequired,
};
const FORM_NAME = 'editExerciseAdvancedConfig';
diff --git a/src/components/forms/EditExerciseAdvancedConfigForm/EditExerciseAdvancedConfigTest.js b/src/components/forms/EditExerciseAdvancedConfigForm/EditExerciseAdvancedConfigTest.js
index bbd9fed1e..fe883c554 100644
--- a/src/components/forms/EditExerciseAdvancedConfigForm/EditExerciseAdvancedConfigTest.js
+++ b/src/components/forms/EditExerciseAdvancedConfigForm/EditExerciseAdvancedConfigTest.js
@@ -1,7 +1,7 @@
import React, { Component } from 'react';
import PropTypes from 'prop-types';
import { Field, FieldArray } from 'redux-form';
-import { FormattedMessage, injectIntl, intlShape } from 'react-intl';
+import { FormattedMessage, injectIntl } from 'react-intl';
import { defaultMemoize } from 'reselect';
import Button from '../../widgets/TheButton';
@@ -173,7 +173,7 @@ EditExerciseAdvancedConfigTest.propTypes = {
testErrors: PropTypes.array,
rawFill: PropTypes.object,
readOnly: PropTypes.bool,
- intl: intlShape.isRequired,
+ intl: PropTypes.object.isRequired,
};
export default injectIntl(EditExerciseAdvancedConfigTest);
diff --git a/src/components/forms/EditExerciseForm/EditExerciseForm.js b/src/components/forms/EditExerciseForm/EditExerciseForm.js
index 96b094689..3ecd9bad8 100644
--- a/src/components/forms/EditExerciseForm/EditExerciseForm.js
+++ b/src/components/forms/EditExerciseForm/EditExerciseForm.js
@@ -1,7 +1,7 @@
import React from 'react';
import PropTypes from 'prop-types';
import { reduxForm, Field, FieldArray, touch } from 'redux-form';
-import { injectIntl, intlShape, FormattedMessage, defineMessages } from 'react-intl';
+import { injectIntl, FormattedMessage, defineMessages } from 'react-intl';
import { Alert } from 'react-bootstrap';
import { defaultMemoize } from 'reselect';
@@ -130,7 +130,10 @@ const EditExerciseForm = ({
nullable
label={
-
+
@@ -238,7 +238,7 @@ EditExerciseSimpleConfigForm.propTypes = {
environmentsWithEntryPoints: PropTypes.array.isRequired,
smartFill: PropTypes.func.isRequired,
readOnly: PropTypes.bool,
- intl: intlShape.isRequired,
+ intl: PropTypes.object.isRequired,
};
const validate = (formData, { exercise, supplementaryFiles }) => {
diff --git a/src/components/forms/EditExerciseSimpleConfigForm/EditExerciseSimpleConfigTestCompilation.js b/src/components/forms/EditExerciseSimpleConfigForm/EditExerciseSimpleConfigTestCompilation.js
index b0f0ef211..c717dbfb7 100644
--- a/src/components/forms/EditExerciseSimpleConfigForm/EditExerciseSimpleConfigTestCompilation.js
+++ b/src/components/forms/EditExerciseSimpleConfigForm/EditExerciseSimpleConfigTestCompilation.js
@@ -2,7 +2,7 @@ import React, { Component } from 'react';
import PropTypes from 'prop-types';
import { Field, FieldArray } from 'redux-form';
import { Container, Row, Col } from 'react-bootstrap';
-import { FormattedMessage, injectIntl, intlShape } from 'react-intl';
+import { FormattedMessage, injectIntl } from 'react-intl';
import EnvironmentsListItem from '../../helpers/EnvironmentsList/EnvironmentsListItem';
import { EMPTY_ARRAY } from '../../../helpers/common';
@@ -116,35 +116,36 @@ class EditExerciseSimpleConfigTestCompilation extends Component {
- {env.id === ENV_JAVA_ID && (
+ {
+ env.id === ENV_JAVA_ID && (
+ /*
+ * A special case for Java only !!!
+ */
+
+
+ }
+ noItems={
+
+ }
+ readOnly={readOnly}
+ />
+ {exercise.runtimeEnvironments.length !== 1 && }
+
+ )
/*
- * A special case for Java only !!!
+ * End of special case.
*/
-
-
- }
- noItems={
-
- }
- readOnly={readOnly}
- />
- {exercise.runtimeEnvironments.length !== 1 && }
-
- )
- /*
- * End of special case.
- */
}
@@ -250,7 +251,7 @@ EditExerciseSimpleConfigTestCompilation.propTypes = {
smartFillCompilation: PropTypes.func,
change: PropTypes.func.isRequired,
readOnly: PropTypes.bool,
- intl: intlShape.isRequired,
+ intl: PropTypes.object.isRequired,
};
export default injectIntl(EditExerciseSimpleConfigTestCompilation);
diff --git a/src/components/forms/EditExerciseSimpleConfigForm/EditExerciseSimpleConfigTestJudge.js b/src/components/forms/EditExerciseSimpleConfigForm/EditExerciseSimpleConfigTestJudge.js
index 87068678d..96c85d131 100644
--- a/src/components/forms/EditExerciseSimpleConfigForm/EditExerciseSimpleConfigTestJudge.js
+++ b/src/components/forms/EditExerciseSimpleConfigForm/EditExerciseSimpleConfigTestJudge.js
@@ -1,7 +1,7 @@
import React from 'react';
import PropTypes from 'prop-types';
import { Field, FieldArray } from 'redux-form';
-import { FormattedMessage, injectIntl, defineMessages, intlShape } from 'react-intl';
+import { FormattedMessage, injectIntl, defineMessages } from 'react-intl';
import { SelectField, ExpandingTextField, CheckboxField } from '../Fields';
import Confirm from '../../forms/Confirm';
@@ -200,7 +200,7 @@ EditExerciseSimpleConfigTestJudge.propTypes = {
showJudgeArgs: PropTypes.bool,
onlyCustomJudge: PropTypes.bool,
readOnly: PropTypes.bool,
- intl: intlShape.isRequired,
+ intl: PropTypes.object.isRequired,
};
export default injectIntl(EditExerciseSimpleConfigTestJudge);
diff --git a/src/components/forms/EditShadowAssignmentForm/EditShadowAssignmentForm.js b/src/components/forms/EditShadowAssignmentForm/EditShadowAssignmentForm.js
index 7780f8ef5..b210367b8 100644
--- a/src/components/forms/EditShadowAssignmentForm/EditShadowAssignmentForm.js
+++ b/src/components/forms/EditShadowAssignmentForm/EditShadowAssignmentForm.js
@@ -57,7 +57,7 @@ const EditShadowAssignmentForm = ({
asyncValidating={asyncValidating}
messages={{
submit: ,
- submitting: ,
+ submitting: ,
success: ,
}}
/>
diff --git a/src/components/forms/EditSystemMessageForm/EditSystemMessageForm.js b/src/components/forms/EditSystemMessageForm/EditSystemMessageForm.js
index 195378759..6638d1a9e 100644
--- a/src/components/forms/EditSystemMessageForm/EditSystemMessageForm.js
+++ b/src/components/forms/EditSystemMessageForm/EditSystemMessageForm.js
@@ -1,7 +1,7 @@
import React from 'react';
import PropTypes from 'prop-types';
import { reduxForm, Field, FieldArray } from 'redux-form';
-import { FormattedMessage, injectIntl, intlShape } from 'react-intl';
+import { FormattedMessage, injectIntl } from 'react-intl';
import { Alert, Modal } from 'react-bootstrap';
import { defaultMemoize } from 'reselect';
@@ -142,7 +142,7 @@ EditSystemMessageForm.propTypes = {
isOpen: PropTypes.bool.isRequired,
onClose: PropTypes.func.isRequired,
createNew: PropTypes.bool,
- intl: intlShape.isRequired,
+ intl: PropTypes.object.isRequired,
};
const validate = ({ localizedTexts, type, role, visibleFrom, visibleTo }) => {
diff --git a/src/components/forms/EditUserSettingsForm/EditUserSettingsForm.js b/src/components/forms/EditUserSettingsForm/EditUserSettingsForm.js
index 2e769d21e..0386aadfa 100644
--- a/src/components/forms/EditUserSettingsForm/EditUserSettingsForm.js
+++ b/src/components/forms/EditUserSettingsForm/EditUserSettingsForm.js
@@ -1,6 +1,6 @@
import React from 'react';
import PropTypes from 'prop-types';
-import { FormattedMessage, defineMessages, injectIntl, intlShape } from 'react-intl';
+import { FormattedMessage, defineMessages, injectIntl } from 'react-intl';
import { reduxForm, Field } from 'redux-form';
import { Alert } from 'react-bootstrap';
import { defaultMemoize } from 'reselect';
@@ -240,7 +240,7 @@ EditUserSettingsForm.propTypes = {
submitting: PropTypes.bool,
anyTouched: PropTypes.bool,
invalid: PropTypes.bool,
- intl: intlShape.isRequired,
+ intl: PropTypes.object.isRequired,
};
export default injectIntl(
diff --git a/src/components/forms/Fields/CheckboxField.js b/src/components/forms/Fields/CheckboxField.js
index f048c18b4..a4e711ec7 100644
--- a/src/components/forms/Fields/CheckboxField.js
+++ b/src/components/forms/Fields/CheckboxField.js
@@ -1,7 +1,5 @@
import React from 'react';
import PropTypes from 'prop-types';
-import { FormattedMessage } from 'react-intl';
-
import { FormGroup, FormCheck, OverlayTrigger, Tooltip } from 'react-bootstrap';
import OnOffCheckbox from '../OnOffCheckbox';
@@ -51,11 +49,7 @@ CheckboxField.propTypes = {
}).isRequired,
type: PropTypes.string,
onOff: PropTypes.bool,
- label: PropTypes.oneOfType([
- PropTypes.string,
- PropTypes.element,
- PropTypes.shape({ type: PropTypes.oneOf([FormattedMessage]) }),
- ]).isRequired,
+ label: PropTypes.oneOfType([PropTypes.string, PropTypes.element]).isRequired,
ignoreDirty: PropTypes.bool,
};
diff --git a/src/components/forms/Fields/DatetimeField.js b/src/components/forms/Fields/DatetimeField.js
index 3aa3d1b73..5f9fab942 100644
--- a/src/components/forms/Fields/DatetimeField.js
+++ b/src/components/forms/Fields/DatetimeField.js
@@ -1,6 +1,5 @@
import React, { Component } from 'react';
import PropTypes from 'prop-types';
-import { FormattedMessage } from 'react-intl';
import Datetime from 'react-datetime';
import 'react-datetime/css/react-datetime.css';
@@ -72,11 +71,7 @@ class DatetimeField extends Component {
DatetimeField.propTypes = {
lang: PropTypes.string,
type: PropTypes.string,
- label: PropTypes.oneOfType([
- PropTypes.string,
- PropTypes.element,
- PropTypes.shape({ type: PropTypes.oneOf([FormattedMessage]) }),
- ]),
+ label: PropTypes.oneOfType([PropTypes.string, PropTypes.element]),
input: PropTypes.shape({
name: PropTypes.string.isRequired,
value: PropTypes.oneOfType([PropTypes.string, PropTypes.number, PropTypes.object]),
diff --git a/src/components/forms/Fields/ExpandingInputFilesField.js b/src/components/forms/Fields/ExpandingInputFilesField.js
index 46b7fe60e..58443a1ee 100644
--- a/src/components/forms/Fields/ExpandingInputFilesField.js
+++ b/src/components/forms/Fields/ExpandingInputFilesField.js
@@ -122,21 +122,9 @@ ExpandingInputFilesField.propTypes = {
error: PropTypes.any,
warning: PropTypes.any,
}).isRequired,
- leftLabel: PropTypes.oneOfType([
- PropTypes.string,
- PropTypes.element,
- PropTypes.shape({ type: PropTypes.oneOf([FormattedMessage]) }),
- ]),
- rightLabel: PropTypes.oneOfType([
- PropTypes.string,
- PropTypes.element,
- PropTypes.shape({ type: PropTypes.oneOf([FormattedMessage]) }),
- ]),
- noItems: PropTypes.oneOfType([
- PropTypes.string,
- PropTypes.element,
- PropTypes.shape({ type: PropTypes.oneOf([FormattedMessage]) }),
- ]),
+ leftLabel: PropTypes.oneOfType([PropTypes.string, PropTypes.element]),
+ rightLabel: PropTypes.oneOfType([PropTypes.string, PropTypes.element]),
+ noItems: PropTypes.oneOfType([PropTypes.string, PropTypes.element]),
options: PropTypes.array,
change: PropTypes.func.isRequired,
readOnly: PropTypes.bool,
diff --git a/src/components/forms/Fields/ExpandingSelectField.js b/src/components/forms/Fields/ExpandingSelectField.js
index 0bba45e9a..7b077d011 100644
--- a/src/components/forms/Fields/ExpandingSelectField.js
+++ b/src/components/forms/Fields/ExpandingSelectField.js
@@ -112,16 +112,8 @@ ExpandingSelectField.propTypes = {
error: PropTypes.any,
warning: PropTypes.any,
}).isRequired,
- label: PropTypes.oneOfType([
- PropTypes.string,
- PropTypes.element,
- PropTypes.shape({ type: PropTypes.oneOf([FormattedMessage]) }),
- ]),
- noItems: PropTypes.oneOfType([
- PropTypes.string,
- PropTypes.element,
- PropTypes.shape({ type: PropTypes.oneOf([FormattedMessage]) }),
- ]),
+ label: PropTypes.oneOfType([PropTypes.string, PropTypes.element]),
+ noItems: PropTypes.oneOfType([PropTypes.string, PropTypes.element]),
options: PropTypes.array,
readOnly: PropTypes.bool,
};
diff --git a/src/components/forms/Fields/ExpandingTextField.js b/src/components/forms/Fields/ExpandingTextField.js
index a41b3f79f..57dff4378 100644
--- a/src/components/forms/Fields/ExpandingTextField.js
+++ b/src/components/forms/Fields/ExpandingTextField.js
@@ -109,16 +109,8 @@ ExpandingTextField.propTypes = {
error: PropTypes.any,
warning: PropTypes.any,
}).isRequired,
- label: PropTypes.oneOfType([
- PropTypes.string,
- PropTypes.element,
- PropTypes.shape({ type: PropTypes.oneOf([FormattedMessage]) }),
- ]),
- noItems: PropTypes.oneOfType([
- PropTypes.string,
- PropTypes.element,
- PropTypes.shape({ type: PropTypes.oneOf([FormattedMessage]) }),
- ]),
+ label: PropTypes.oneOfType([PropTypes.string, PropTypes.element]),
+ noItems: PropTypes.oneOfType([PropTypes.string, PropTypes.element]),
validateEach: PropTypes.func,
readOnly: PropTypes.bool,
};
diff --git a/src/components/forms/Fields/MarkdownTextAreaField.js b/src/components/forms/Fields/MarkdownTextAreaField.js
index 7e0313d58..ac3b1f45a 100644
--- a/src/components/forms/Fields/MarkdownTextAreaField.js
+++ b/src/components/forms/Fields/MarkdownTextAreaField.js
@@ -1,6 +1,6 @@
import React, { Component } from 'react';
import PropTypes from 'prop-types';
-import { FormattedMessage, FormattedHTMLMessage } from 'react-intl';
+import { FormattedMessage } from 'react-intl';
import { Form, Row, Col } from 'react-bootstrap';
import Markdown from '../../widgets/Markdown';
@@ -10,7 +10,7 @@ import styles from './MarkdownTextAreaField.less';
import { canUseDOM } from 'exenv';
if (canUseDOM) {
- require('brace/mode/markdown');
+ require('ace-builds/src-noconflict/mode-markdown');
}
class MarkdownTextAreaField extends Component {
@@ -43,11 +43,15 @@ class MarkdownTextAreaField extends Component {
- (
+
+ {caption}
+
+ ),
}}
/>
diff --git a/src/components/forms/Fields/PasswordStrength.js b/src/components/forms/Fields/PasswordStrength.js
index c3136f22a..adfb588f8 100644
--- a/src/components/forms/Fields/PasswordStrength.js
+++ b/src/components/forms/Fields/PasswordStrength.js
@@ -47,23 +47,13 @@ const getTitle = level => {
const PasswordStrength = ({ input: { name, value: level }, meta: { dirty }, label }) => (
{dirty && (
-
+
)}
);
PasswordStrength.propTypes = {
- label: PropTypes.oneOfType([
- PropTypes.string,
- PropTypes.element,
- PropTypes.shape({ type: PropTypes.oneOf([FormattedMessage]) }),
- ]).isRequired,
+ label: PropTypes.oneOfType([PropTypes.string, PropTypes.element]).isRequired,
input: PropTypes.shape({
name: PropTypes.string.isRequired,
value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,
diff --git a/src/components/forms/Fields/PipelineField.js b/src/components/forms/Fields/PipelineField.js
index ed48e5592..153f20c12 100644
--- a/src/components/forms/Fields/PipelineField.js
+++ b/src/components/forms/Fields/PipelineField.js
@@ -35,14 +35,10 @@ PipelineField.propTypes = {
value: PropTypes.oneOfType([PropTypes.string, PropTypes.array]).isRequired,
onChange: PropTypes.func.isRequired,
}).isRequired,
- label: PropTypes.oneOfType([
- PropTypes.string,
- PropTypes.element,
- PropTypes.shape({ type: PropTypes.oneOf([FormattedMessage]) }),
- ]).isRequired,
+ label: PropTypes.oneOfType([PropTypes.string, PropTypes.element]).isRequired,
meta: PropTypes.shape({
touched: PropTypes.bool,
- error: PropTypes.oneOfType([PropTypes.string, FormattedMessage]),
+ error: PropTypes.oneOfType([PropTypes.string, PropTypes.element]),
}),
};
diff --git a/src/components/forms/Fields/PipelineVariablesField.js b/src/components/forms/Fields/PipelineVariablesField.js
index 3a15858bd..63f5d216d 100644
--- a/src/components/forms/Fields/PipelineVariablesField.js
+++ b/src/components/forms/Fields/PipelineVariablesField.js
@@ -91,11 +91,7 @@ PipelineVariablesField.propTypes = {
name: PropTypes.string.isRequired,
value: PropTypes.object,
}).isRequired,
- label: PropTypes.oneOfType([
- PropTypes.string,
- PropTypes.element,
- PropTypes.shape({ type: PropTypes.oneOf([FormattedMessage]) }),
- ]).isRequired,
+ label: PropTypes.oneOfType([PropTypes.string, PropTypes.element]).isRequired,
variables: PropTypes.array,
supplementaryFiles: ImmutablePropTypes.map,
intl: PropTypes.shape({ locale: PropTypes.string.isRequired }).isRequired,
diff --git a/src/components/forms/Fields/PortField.js b/src/components/forms/Fields/PortField.js
index 924e42140..03ee7bfd6 100644
--- a/src/components/forms/Fields/PortField.js
+++ b/src/components/forms/Fields/PortField.js
@@ -1,6 +1,5 @@
import React from 'react';
import PropTypes from 'prop-types';
-import { FormattedMessage } from 'react-intl';
import { Form, FormGroup, FormControl, FormLabel, Badge } from 'react-bootstrap';
import classnames from 'classnames';
@@ -55,11 +54,7 @@ PortField.propTypes = {
error: PropTypes.any,
warning: PropTypes.any,
}).isRequired,
- label: PropTypes.oneOfType([
- PropTypes.string,
- PropTypes.element,
- PropTypes.shape({ type: PropTypes.oneOf([FormattedMessage]) }),
- ]).isRequired,
+ label: PropTypes.oneOfType([PropTypes.string, PropTypes.element]).isRequired,
portType: PropTypes.string.isRequired,
ignoreDirty: PropTypes.bool,
};
diff --git a/src/components/forms/Fields/PortsField.js b/src/components/forms/Fields/PortsField.js
index e92551dd5..7d23fc876 100644
--- a/src/components/forms/Fields/PortsField.js
+++ b/src/components/forms/Fields/PortsField.js
@@ -15,11 +15,7 @@ const PortsField = ({ label, prefix, ports }) => (
);
PortsField.propTypes = {
- label: PropTypes.oneOfType([
- PropTypes.string,
- PropTypes.element,
- PropTypes.shape({ type: PropTypes.oneOf([FormattedMessage]) }),
- ]).isRequired,
+ label: PropTypes.oneOfType([PropTypes.string, PropTypes.element]).isRequired,
prefix: PropTypes.string.isRequired,
ports: PropTypes.array,
};
diff --git a/src/components/forms/Fields/SelectField.js b/src/components/forms/Fields/SelectField.js
index 749a30240..0e2838e30 100644
--- a/src/components/forms/Fields/SelectField.js
+++ b/src/components/forms/Fields/SelectField.js
@@ -1,6 +1,5 @@
import React from 'react';
import PropTypes from 'prop-types';
-import { FormattedMessage } from 'react-intl';
import { Form, FormGroup, FormControl, FormLabel } from 'react-bootstrap';
import classnames from 'classnames';
@@ -72,11 +71,7 @@ SelectField.propTypes = {
warning: PropTypes.any,
}).isRequired,
type: PropTypes.string,
- label: PropTypes.oneOfType([
- PropTypes.string,
- PropTypes.element,
- PropTypes.shape({ type: PropTypes.oneOf([FormattedMessage]) }),
- ]),
+ label: PropTypes.oneOfType([PropTypes.string, PropTypes.element]),
options: PropTypes.array.isRequired,
addEmptyOption: PropTypes.bool,
emptyOptionCaption: PropTypes.string,
diff --git a/src/components/forms/Fields/SourceCodeField.js b/src/components/forms/Fields/SourceCodeField.js
index 82c61ba17..e13f97307 100644
--- a/src/components/forms/Fields/SourceCodeField.js
+++ b/src/components/forms/Fields/SourceCodeField.js
@@ -1,14 +1,13 @@
import React from 'react';
import PropTypes from 'prop-types';
-import { FormattedMessage } from 'react-intl';
import { Form, FormGroup, FormLabel } from 'react-bootstrap';
+import { canUseDOM } from 'exenv';
-import ClientOnly from '../../helpers/ClientOnly';
import { UserSettingsContext } from '../../../helpers/contexts';
// load the ACE editor only when rendering in the browser
-import { loadAceEditor, getAceModeFromExtension } from '../../helpers/AceEditorLoader';
-const AceEditor = loadAceEditor();
+import { getAceModeFromExtension } from '../../helpers/ace';
+const AceEditor = canUseDOM ? require('react-ace').default : null;
const SourceCodeField = ({
input,
@@ -25,7 +24,7 @@ const SourceCodeField = ({
{Boolean(label) && (
{label}
)}
-
+ {canUseDOM && (
{({ vimMode = false, darkTheme = false }) => (
@@ -53,7 +52,7 @@ const SourceCodeField = ({
)}
-
+ )}
{error && {error} }
{!error && warning && {warning} }
{children}
@@ -73,11 +72,7 @@ SourceCodeField.propTypes = {
dirty: PropTypes.bool,
}),
tabIndex: PropTypes.number,
- label: PropTypes.oneOfType([
- PropTypes.string,
- PropTypes.element,
- PropTypes.shape({ type: PropTypes.oneOf([FormattedMessage]) }),
- ]),
+ label: PropTypes.oneOfType([PropTypes.string, PropTypes.element]),
readOnly: PropTypes.bool,
onBlur: PropTypes.func,
};
diff --git a/src/components/forms/Fields/TabbedArrayField.js b/src/components/forms/Fields/TabbedArrayField.js
index 4ccd12a31..671236deb 100644
--- a/src/components/forms/Fields/TabbedArrayField.js
+++ b/src/components/forms/Fields/TabbedArrayField.js
@@ -1,6 +1,6 @@
import React, { Component } from 'react';
import PropTypes from 'prop-types';
-import { injectIntl, intlShape, FormattedMessage } from 'react-intl';
+import { injectIntl, FormattedMessage } from 'react-intl';
import { Card, Tab, Nav } from 'react-bootstrap';
import Confirm from '../Confirm';
@@ -117,7 +117,7 @@ TabbedArrayField.propTypes = {
ContentComponent: PropTypes.any,
emptyMessage: PropTypes.oneOfType([PropTypes.string, PropTypes.element]),
removeQuestion: PropTypes.oneOfType([PropTypes.string, PropTypes.element]),
- intl: intlShape.isRequired,
+ intl: PropTypes.object.isRequired,
};
export default injectIntl(TabbedArrayField);
diff --git a/src/components/forms/Fields/TagsSelectorField.js b/src/components/forms/Fields/TagsSelectorField.js
index c7f72241a..07f81a050 100644
--- a/src/components/forms/Fields/TagsSelectorField.js
+++ b/src/components/forms/Fields/TagsSelectorField.js
@@ -1,6 +1,5 @@
import React from 'react';
import PropTypes from 'prop-types';
-import { FormattedMessage } from 'react-intl';
import { FormLabel, Badge } from 'react-bootstrap';
import { defaultMemoize } from 'reselect';
import classnames from 'classnames';
@@ -50,16 +49,8 @@ TagsSelectorField.propTypes = {
error: PropTypes.any,
warning: PropTypes.any,
}).isRequired,
- label: PropTypes.oneOfType([
- PropTypes.string,
- PropTypes.element,
- PropTypes.shape({ type: PropTypes.oneOf([FormattedMessage]) }),
- ]),
- noItems: PropTypes.oneOfType([
- PropTypes.string,
- PropTypes.element,
- PropTypes.shape({ type: PropTypes.oneOf([FormattedMessage]) }),
- ]),
+ label: PropTypes.oneOfType([PropTypes.string, PropTypes.element]),
+ noItems: PropTypes.oneOfType([PropTypes.string, PropTypes.element]),
validateEach: PropTypes.func,
};
diff --git a/src/components/forms/Fields/TextAreaField.js b/src/components/forms/Fields/TextAreaField.js
index 6d41457cd..37be7cd05 100644
--- a/src/components/forms/Fields/TextAreaField.js
+++ b/src/components/forms/Fields/TextAreaField.js
@@ -1,6 +1,5 @@
import React from 'react';
import PropTypes from 'prop-types';
-import { FormattedMessage } from 'react-intl';
import { Form, FormGroup, FormControl, FormLabel } from 'react-bootstrap';
import classnames from 'classnames';
@@ -44,11 +43,7 @@ TextAreaField.propTypes = {
input: PropTypes.shape({
name: PropTypes.string.isRequired,
}).isRequired,
- label: PropTypes.oneOfType([
- PropTypes.string,
- PropTypes.element,
- PropTypes.shape({ type: PropTypes.oneOf([FormattedMessage]) }),
- ]),
+ label: PropTypes.oneOfType([PropTypes.string, PropTypes.element]),
children: PropTypes.any,
meta: PropTypes.shape({
active: PropTypes.bool,
diff --git a/src/components/forms/Fields/TextField.js b/src/components/forms/Fields/TextField.js
index e73778191..64bc3aab6 100644
--- a/src/components/forms/Fields/TextField.js
+++ b/src/components/forms/Fields/TextField.js
@@ -1,6 +1,5 @@
import React from 'react';
import PropTypes from 'prop-types';
-import { FormattedMessage } from 'react-intl';
import { Form, FormGroup, FormControl, FormLabel } from 'react-bootstrap';
import classnames from 'classnames';
@@ -48,11 +47,7 @@ TextField.propTypes = {
error: PropTypes.any,
warning: PropTypes.any,
}).isRequired,
- label: PropTypes.oneOfType([
- PropTypes.string,
- PropTypes.element,
- PropTypes.shape({ type: PropTypes.oneOf([FormattedMessage]) }),
- ]),
+ label: PropTypes.oneOfType([PropTypes.string, PropTypes.element]),
groupClassName: PropTypes.string,
ignoreDirty: PropTypes.bool,
};
diff --git a/src/components/forms/FilterExercisesListForm/FilterExercisesListForm.js b/src/components/forms/FilterExercisesListForm/FilterExercisesListForm.js
index fbf5bd048..ad9ba8242 100644
--- a/src/components/forms/FilterExercisesListForm/FilterExercisesListForm.js
+++ b/src/components/forms/FilterExercisesListForm/FilterExercisesListForm.js
@@ -2,7 +2,7 @@ import React, { Component } from 'react';
import { connect } from 'react-redux';
import PropTypes from 'prop-types';
import ImmutablePropTypes from 'react-immutable-proptypes';
-import { FormattedMessage, injectIntl, intlShape } from 'react-intl';
+import { FormattedMessage, injectIntl } from 'react-intl';
import { reduxForm, Field, FieldArray, formValueSelector } from 'redux-form';
import { Alert, Container, Row, Col, Form, FormLabel } from 'react-bootstrap';
import { defaultMemoize } from 'reselect';
@@ -300,7 +300,7 @@ FilterExercisesListForm.propTypes = {
envValueSelector: PropTypes.func.isRequired,
runtimeEnvironments: PropTypes.array.isRequired,
loggedUserId: PropTypes.string.isRequired,
- intl: intlShape.isRequired,
+ intl: PropTypes.object.isRequired,
};
export default connect((state, { rootGroup = null, form }) => ({
diff --git a/src/components/forms/FilterSystemMessagesForm/FilterSystemMessagesForm.js b/src/components/forms/FilterSystemMessagesForm/FilterSystemMessagesForm.js
index d943e3156..1945086eb 100644
--- a/src/components/forms/FilterSystemMessagesForm/FilterSystemMessagesForm.js
+++ b/src/components/forms/FilterSystemMessagesForm/FilterSystemMessagesForm.js
@@ -1,6 +1,6 @@
import React from 'react';
import PropTypes from 'prop-types';
-import { FormattedMessage, injectIntl, intlShape } from 'react-intl';
+import { FormattedMessage, injectIntl } from 'react-intl';
import { reduxForm, Field } from 'redux-form';
import { Container, Row, Col, Form } from 'react-bootstrap';
@@ -60,7 +60,7 @@ FilterSystemMessagesForm.propTypes = {
submitFailed: PropTypes.bool,
submitSucceeded: PropTypes.bool,
invalid: PropTypes.bool,
- intl: intlShape.isRequired,
+ intl: PropTypes.object.isRequired,
};
export default injectIntl(
diff --git a/src/components/forms/FilterUsersListForm/FilterUsersListForm.js b/src/components/forms/FilterUsersListForm/FilterUsersListForm.js
index 417cc57b2..3dc90f631 100644
--- a/src/components/forms/FilterUsersListForm/FilterUsersListForm.js
+++ b/src/components/forms/FilterUsersListForm/FilterUsersListForm.js
@@ -1,6 +1,6 @@
import React from 'react';
import PropTypes from 'prop-types';
-import { FormattedMessage, injectIntl, intlShape } from 'react-intl';
+import { FormattedMessage, injectIntl } from 'react-intl';
import { reduxForm, Field } from 'redux-form';
import { Alert, Container, Row, Col, Form } from 'react-bootstrap';
@@ -78,7 +78,7 @@ FilterUsersListForm.propTypes = {
submitFailed: PropTypes.bool,
submitSucceeded: PropTypes.bool,
invalid: PropTypes.bool,
- intl: intlShape.isRequired,
+ intl: PropTypes.object.isRequired,
};
export default injectIntl(
diff --git a/src/components/forms/ForkExerciseForm/ForkExerciseForm.js b/src/components/forms/ForkExerciseForm/ForkExerciseForm.js
index 78fd7997d..7f3e668ed 100644
--- a/src/components/forms/ForkExerciseForm/ForkExerciseForm.js
+++ b/src/components/forms/ForkExerciseForm/ForkExerciseForm.js
@@ -1,7 +1,7 @@
import React, { Component } from 'react';
import PropTypes from 'prop-types';
import ImmutablePropTypes from 'react-immutable-proptypes';
-import { injectIntl, FormattedMessage, defineMessages, intlShape } from 'react-intl';
+import { injectIntl, FormattedMessage, defineMessages } from 'react-intl';
import { Alert, Form } from 'react-bootstrap';
import { connect } from 'react-redux';
import { reduxForm, Field } from 'redux-form';
@@ -168,7 +168,7 @@ ForkExerciseForm.propTypes = {
links: PropTypes.object,
groups: ImmutablePropTypes.map,
groupsAccessor: PropTypes.func.isRequired,
- intl: intlShape,
+ intl: PropTypes.object,
};
const validate = ({ groupId }) => {
diff --git a/src/components/forms/GenerateTokenForm/GenerateTokenForm.js b/src/components/forms/GenerateTokenForm/GenerateTokenForm.js
index 8bc72b6ad..83d20e423 100644
--- a/src/components/forms/GenerateTokenForm/GenerateTokenForm.js
+++ b/src/components/forms/GenerateTokenForm/GenerateTokenForm.js
@@ -1,6 +1,6 @@
import React from 'react';
import PropTypes from 'prop-types';
-import { FormattedMessage, FormattedHTMLMessage, injectIntl, defineMessages, intlShape } from 'react-intl';
+import { FormattedMessage, injectIntl, defineMessages } from 'react-intl';
import { reduxForm, Field } from 'redux-form';
import { Alert, OverlayTrigger, Tooltip, Container, Row, Col } from 'react-bootstrap';
import { CopyToClipboard } from 'react-copy-to-clipboard';
@@ -188,7 +188,7 @@ GenerateTokenForm.propTypes = {
submitting: PropTypes.bool,
invalid: PropTypes.bool,
lastToken: PropTypes.string,
- intl: intlShape.isRequired,
+ intl: PropTypes.object.isRequired,
};
const validate = ({ scopes, expiration }) => {
@@ -199,16 +199,22 @@ const validate = ({ scopes, expiration }) => {
if (!scopes['read-all'] && !scopes.master) {
errors._error = (
- {text} ,
+ }}
/>
);
} else if (scopes.master && expiration > WEEK_SEC) {
errors._error = (
- {text} ,
+ }}
/>
);
}
@@ -219,9 +225,12 @@ const warn = ({ scopes }) => {
const warnings = {};
if (scopes && scopes['read-all'] && scopes.master) {
warnings._warning = (
- {text} ,
+ }}
/>
);
}
diff --git a/src/components/forms/LoginCASForm/LoginCASForm.js b/src/components/forms/LoginCASForm/LoginCASForm.js
deleted file mode 100644
index 68743aa43..000000000
--- a/src/components/forms/LoginCASForm/LoginCASForm.js
+++ /dev/null
@@ -1,89 +0,0 @@
-import React from 'react';
-import PropTypes from 'prop-types';
-import { reduxForm, Field } from 'redux-form';
-import { FormattedMessage } from 'react-intl';
-
-import { SuccessIcon, LoadingIcon } from '../../icons';
-import FormBox from '../../widgets/FormBox';
-import { TextField, PasswordField } from '../Fields';
-
-import { Alert } from 'react-bootstrap';
-import Button from '../../widgets/TheButton';
-
-const LoginCASForm = ({ invalid, handleSubmit, submitFailed: hasFailed, submitting, hasSucceeded }) => (
- }
- type={hasSucceeded ? 'success' : undefined}
- footer={
-
-
- {!submitting ? (
- hasSucceeded ? (
-
-
-
-
- ) : (
-
- )
- ) : (
-
-
-
-
- )}
-
-
- }>
- {hasFailed && (
-
-
-
- )}
-
- }
- />
- }
- />
-
-);
-
-LoginCASForm.propTypes = {
- onSubmit: PropTypes.func.isRequired,
- handleSubmit: PropTypes.func.isRequired,
- submitFailed: PropTypes.bool,
- submitting: PropTypes.bool,
- hasSucceeded: PropTypes.bool,
- invalid: PropTypes.bool,
-};
-
-const validate = ({ ukco, password }) => {
- const errors = {};
- if (!ukco) {
- errors.ukco = (
-
- );
- }
-
- if (!password) {
- errors.password = (
-
- );
- }
-
- return errors;
-};
-
-export default reduxForm({
- form: 'login-cas',
- validate,
-})(LoginCASForm);
diff --git a/src/components/forms/LoginCASForm/index.js b/src/components/forms/LoginCASForm/index.js
deleted file mode 100644
index ba5dfe736..000000000
--- a/src/components/forms/LoginCASForm/index.js
+++ /dev/null
@@ -1,2 +0,0 @@
-import LoginCASForm from './LoginCASForm';
-export default LoginCASForm;
diff --git a/src/components/forms/RelocateGroupForm/RelocateGroupForm.js b/src/components/forms/RelocateGroupForm/RelocateGroupForm.js
index 22de93603..b76acba55 100644
--- a/src/components/forms/RelocateGroupForm/RelocateGroupForm.js
+++ b/src/components/forms/RelocateGroupForm/RelocateGroupForm.js
@@ -1,6 +1,6 @@
import React from 'react';
import PropTypes from 'prop-types';
-import { injectIntl, FormattedMessage, intlShape } from 'react-intl';
+import { injectIntl, FormattedMessage } from 'react-intl';
import { Alert, Form } from 'react-bootstrap';
import { reduxForm, Field } from 'redux-form';
import { defaultMemoize } from 'reselect';
@@ -78,7 +78,7 @@ RelocateGroupForm.propTypes = {
links: PropTypes.object,
groups: PropTypes.array,
groupsAccessor: PropTypes.func.isRequired,
- intl: intlShape,
+ intl: PropTypes.object,
};
export default reduxForm({
diff --git a/src/components/forms/ResetPasswordForm/ResetPasswordForm.js b/src/components/forms/ResetPasswordForm/ResetPasswordForm.js
index 172d6706e..e7aeb8c77 100644
--- a/src/components/forms/ResetPasswordForm/ResetPasswordForm.js
+++ b/src/components/forms/ResetPasswordForm/ResetPasswordForm.js
@@ -12,7 +12,7 @@ import { EmailField } from '../Fields';
const ResetPasswordForm = ({ submitting, handleSubmit, hasFailed = false, hasSucceeded = false, invalid }) => (
}
+ title={ }
type={hasSucceeded ? 'success' : undefined}
footer={
diff --git a/src/components/forms/SisBindGroupForm/SisBindGroupForm.js b/src/components/forms/SisBindGroupForm/SisBindGroupForm.js
index 2b29d6f44..a2d2e7ddb 100644
--- a/src/components/forms/SisBindGroupForm/SisBindGroupForm.js
+++ b/src/components/forms/SisBindGroupForm/SisBindGroupForm.js
@@ -1,7 +1,7 @@
import React from 'react';
import PropTypes from 'prop-types';
import { reduxForm, Field } from 'redux-form';
-import { FormattedMessage, injectIntl, intlShape } from 'react-intl';
+import { FormattedMessage, injectIntl } from 'react-intl';
import { Alert, Modal } from 'react-bootstrap';
import { SelectField } from '../Fields';
@@ -118,7 +118,7 @@ SisBindGroupForm.propTypes = {
groupsAccessor: PropTypes.func.isRequired,
course: PropTypes.object,
courseGroupsCount: PropTypes.number,
- intl: intlShape.isRequired,
+ intl: PropTypes.object.isRequired,
};
const warn = ({ groupId }) => {
diff --git a/src/components/forms/SisCreateGroupForm/SisCreateGroupForm.js b/src/components/forms/SisCreateGroupForm/SisCreateGroupForm.js
index cc092f28b..7cada3f24 100644
--- a/src/components/forms/SisCreateGroupForm/SisCreateGroupForm.js
+++ b/src/components/forms/SisCreateGroupForm/SisCreateGroupForm.js
@@ -1,7 +1,7 @@
import React, { Component } from 'react';
import PropTypes from 'prop-types';
import { reduxForm, Field } from 'redux-form';
-import { FormattedMessage, injectIntl, intlShape } from 'react-intl';
+import { FormattedMessage, injectIntl } from 'react-intl';
import { Alert, Modal } from 'react-bootstrap';
import { SelectField } from '../Fields';
@@ -126,7 +126,7 @@ SisCreateGroupForm.propTypes = {
groupsAccessor: PropTypes.func.isRequired,
course: PropTypes.object,
courseGroupsCount: PropTypes.number,
- intl: intlShape.isRequired,
+ intl: PropTypes.object.isRequired,
};
const warn = ({ parentGroupId }) => {
diff --git a/src/components/forms/SubmitButton/SubmitButton.js b/src/components/forms/SubmitButton/SubmitButton.js
index e99d5a0cb..04e91d206 100644
--- a/src/components/forms/SubmitButton/SubmitButton.js
+++ b/src/components/forms/SubmitButton/SubmitButton.js
@@ -125,7 +125,7 @@ SubmitButton.propTypes = {
submitting: PropTypes.oneOfType([PropTypes.string, PropTypes.element]),
validating: PropTypes.oneOfType([PropTypes.string, PropTypes.element]),
}),
- confirmQuestion: PropTypes.oneOfType([PropTypes.string, PropTypes.element, FormattedMessage]),
+ confirmQuestion: PropTypes.oneOfType([PropTypes.string, PropTypes.element]),
};
export default SubmitButton;
diff --git a/src/components/helpers/AceEditorLoader.js b/src/components/helpers/AceEditorLoader.js
deleted file mode 100644
index f089d314b..000000000
--- a/src/components/helpers/AceEditorLoader.js
+++ /dev/null
@@ -1,47 +0,0 @@
-import { canUseDOM } from 'exenv';
-
-export const loadAceEditor = () => {
- let AceEditor = null;
- if (canUseDOM) {
- AceEditor = require('react-ace').default;
- require('brace/theme/monokai');
- require('brace/theme/github');
- require('brace/mode/c_cpp');
- require('brace/mode/csharp');
- require('brace/mode/java');
- require('brace/mode/javascript');
- require('brace/mode/makefile');
- require('brace/mode/pascal');
- require('brace/mode/php');
- require('brace/mode/python');
- require('brace/keybinding/vim');
- }
- return AceEditor;
-};
-
-export const getAceModeFromExtension = ext => {
- const extMapping = {
- java: 'java',
- cs: 'csharp',
- c: 'c_cpp',
- cpp: 'c_cpp',
- h: 'c_cpp',
- hpp: 'c_cpp',
- md: 'markdown',
- markdown: 'markdown',
- pas: 'pascal',
- lpr: 'pascal',
- py: 'python',
- php: 'php',
- js: 'javascript',
- };
-
- ext = ext.trim().toLowerCase();
- if (ext === '') {
- return 'makefile'; // makefile has no extension
- } else if (extMapping[ext]) {
- return extMapping[ext]; // mapping found
- } else {
- return 'c_cpp'; // C/C++ is default
- }
-};
diff --git a/src/components/helpers/ClientOnly/ClientOnly.js b/src/components/helpers/ClientOnly/ClientOnly.js
index 7e3112711..6d7a747d3 100644
--- a/src/components/helpers/ClientOnly/ClientOnly.js
+++ b/src/components/helpers/ClientOnly/ClientOnly.js
@@ -10,7 +10,7 @@ class ClientOnly extends Component {
render() {
if (this.state.isBrowser) {
- return
{this.props.children} ;
+ return <>{this.props.children}>;
} else {
return
;
}
diff --git a/src/components/helpers/SourceCodeViewer/SourceCodeViewer.js b/src/components/helpers/SourceCodeViewer/SourceCodeViewer.js
index d6c22d259..8c6cdcfa7 100644
--- a/src/components/helpers/SourceCodeViewer/SourceCodeViewer.js
+++ b/src/components/helpers/SourceCodeViewer/SourceCodeViewer.js
@@ -1,31 +1,34 @@
import React from 'react';
import PropTypes from 'prop-types';
-
+import { canUseDOM } from 'exenv';
import { UserSettingsContext } from '../../../helpers/contexts';
-import { loadAceEditor, getAceModeFromExtension } from '../../helpers/AceEditorLoader';
-const AceEditor = loadAceEditor();
+import { getAceModeFromExtension } from '../../helpers/ace';
+
+const AceEditor = canUseDOM ? require('react-ace').default : null;
-const SourceCodeViewer = ({ name, content = '', lineNumbers = true }) => (
-
- {({ vimMode = false, darkTheme = false }) => (
-
- )}
-
-);
+const SourceCodeViewer = ({ name, content = '' }) =>
+ canUseDOM ? (
+
+ {({ vimMode = false, darkTheme = false }) => (
+
+ )}
+
+ ) : (
+ <>>
+ );
SourceCodeViewer.propTypes = {
name: PropTypes.string.isRequired,
content: PropTypes.string,
- lineNumbers: PropTypes.bool,
};
export default SourceCodeViewer;
diff --git a/src/components/helpers/ace.js b/src/components/helpers/ace.js
new file mode 100644
index 000000000..c5158dc8c
--- /dev/null
+++ b/src/components/helpers/ace.js
@@ -0,0 +1,37 @@
+const extMapping = {
+ java: 'java',
+ css: 'css',
+ cs: 'csharp',
+ c: 'c_cpp',
+ cpp: 'c_cpp',
+ h: 'c_cpp',
+ hpp: 'c_cpp',
+ ino: 'c_cpp',
+ groovy: 'groovy',
+ html: 'html',
+ js: 'javascript',
+ kt: 'kotlin',
+ kts: 'kotlin',
+ ktm: 'kotlin',
+ md: 'markdown',
+ markdown: 'markdown',
+ pas: 'pascal',
+ lpr: 'pascal',
+ py: 'python',
+ php: 'php',
+ rs: 'rust',
+ sc: 'scala',
+ scala: 'scala',
+ ts: 'typescript',
+};
+
+export const getAceModeFromExtension = ext => {
+ ext = ext.trim().toLowerCase();
+ if (ext === '') {
+ return 'makefile'; // makefile has no extension
+ } else if (extMapping[ext]) {
+ return extMapping[ext]; // mapping found
+ } else {
+ return 'c_cpp'; // C/C++ is default
+ }
+};
diff --git a/src/components/layout/Page/Page.js b/src/components/layout/Page/Page.js
index 858f8c9dc..2d25aa1a0 100644
--- a/src/components/layout/Page/Page.js
+++ b/src/components/layout/Page/Page.js
@@ -24,7 +24,7 @@ const Page = ({
failedTitle = (
-
+
),
failedDescription = (
diff --git a/src/components/layout/PageContent/PageContent.js b/src/components/layout/PageContent/PageContent.js
index e42e287bf..1f34203ba 100644
--- a/src/components/layout/PageContent/PageContent.js
+++ b/src/components/layout/PageContent/PageContent.js
@@ -1,7 +1,7 @@
import React from 'react';
import PropTypes from 'prop-types';
import Helmet from 'react-helmet';
-import { injectIntl, intlShape, FormattedMessage } from 'react-intl';
+import { injectIntl, FormattedMessage } from 'react-intl';
import { Container, Row, Col } from 'react-bootstrap';
import Breadcrumbs from '../../widgets/Breadcrumbs';
@@ -47,7 +47,7 @@ PageContent.propTypes = {
description: PropTypes.oneOfType([PropTypes.string, PropTypes.element]),
breadcrumbs: PropTypes.array,
children: PropTypes.element,
- intl: intlShape.isRequired,
+ intl: PropTypes.object.isRequired,
};
export default injectIntl(PageContent);
diff --git a/src/components/layout/Sidebar/Sidebar.js b/src/components/layout/Sidebar/Sidebar.js
index ce7b70942..5044b509f 100644
--- a/src/components/layout/Sidebar/Sidebar.js
+++ b/src/components/layout/Sidebar/Sidebar.js
@@ -2,7 +2,7 @@ import React from 'react';
import PropTypes from 'prop-types';
import ImmutablePropTypes from 'react-immutable-proptypes';
import classnames from 'classnames';
-import { FormattedMessage, injectIntl, intlShape } from 'react-intl';
+import { FormattedMessage, injectIntl } from 'react-intl';
import { defaultMemoize } from 'reselect';
import { withRouter } from 'react-router';
import { Link } from 'react-router-dom';
@@ -229,7 +229,7 @@ Sidebar.propTypes = {
instances: ImmutablePropTypes.list,
small: PropTypes.bool,
links: PropTypes.object,
- intl: intlShape,
+ intl: PropTypes.object,
};
export default withLinks(withRouter(injectIntl(Sidebar)));
diff --git a/src/components/widgets/Box/Box.js b/src/components/widgets/Box/Box.js
index f10c18628..4c92a4449 100644
--- a/src/components/widgets/Box/Box.js
+++ b/src/components/widgets/Box/Box.js
@@ -51,41 +51,21 @@ class Box extends Component {
window.setTimeout(() => window.scrollTo(0, scrollPosition), 0);
};
- renderBody() {
- const {
- description = null,
- noPadding = false,
- extraPadding = false,
- children,
- footer,
- unlimitedHeight = false,
- } = this.props;
- return (
- <>
-
- {description && {description}
}
- {children}
-
- {footer &&
{footer} }
- >
- );
- }
-
render() {
const {
id = null,
title,
+ description = null,
type = 'light',
solid = false,
collapsable = false,
+ noPadding = false,
+ extraPadding = false,
+ unlimitedHeight = false,
customIcons = null,
className = '',
+ children,
+ footer,
} = this.props;
const { isOpen = true } = this.state;
@@ -126,11 +106,19 @@ class Box extends Component {
)}
- <>
- {collapsable &&
{this.renderBody()} }
-
- {!collapsable && this.renderBody()}
- >
+
+
+ {description && {description}
}
+ {children}
+
+ {footer && {footer} }
+
);
}
@@ -138,16 +126,8 @@ class Box extends Component {
Box.propTypes = {
id: PropTypes.string,
- title: PropTypes.oneOfType([
- PropTypes.string,
- PropTypes.shape({ type: PropTypes.oneOf([FormattedMessage]) }),
- PropTypes.element,
- ]).isRequired,
- description: PropTypes.oneOfType([
- PropTypes.string,
- PropTypes.shape({ type: PropTypes.oneOf([FormattedMessage]) }),
- PropTypes.element,
- ]),
+ title: PropTypes.oneOfType([PropTypes.string, PropTypes.element]).isRequired,
+ description: PropTypes.oneOfType([PropTypes.string, PropTypes.element]),
type: PropTypes.string,
isOpen: PropTypes.bool,
collapsable: PropTypes.bool,
diff --git a/src/components/widgets/Breadcrumbs/BreadcrumbItem.js b/src/components/widgets/Breadcrumbs/BreadcrumbItem.js
index 0707486f6..b6cc3ec0a 100644
--- a/src/components/widgets/Breadcrumbs/BreadcrumbItem.js
+++ b/src/components/widgets/Breadcrumbs/BreadcrumbItem.js
@@ -1,6 +1,5 @@
import React from 'react';
import PropTypes from 'prop-types';
-import { FormattedMessage } from 'react-intl';
import { Link } from 'react-router-dom';
import { Breadcrumb } from 'react-bootstrap';
@@ -22,7 +21,7 @@ const BreadcrumbItem = ({ text, link = null, iconName = null, isActive = false,
};
BreadcrumbItem.propTypes = {
- text: PropTypes.oneOfType([PropTypes.string, PropTypes.element, FormattedMessage]).isRequired,
+ text: PropTypes.oneOfType([PropTypes.string, PropTypes.element]).isRequired,
iconName: PropTypes.oneOfType([PropTypes.string, PropTypes.array]),
link: PropTypes.oneOfType([PropTypes.string, PropTypes.func]),
isActive: PropTypes.bool.isRequired,
diff --git a/src/components/widgets/Comments/AddComment/AddComment.js b/src/components/widgets/Comments/AddComment/AddComment.js
index 53141e307..2f5f9eb8f 100644
--- a/src/components/widgets/Comments/AddComment/AddComment.js
+++ b/src/components/widgets/Comments/AddComment/AddComment.js
@@ -1,6 +1,6 @@
import React, { Component } from 'react';
import PropTypes from 'prop-types';
-import { FormattedMessage, FormattedHTMLMessage, injectIntl, intlShape, defineMessages } from 'react-intl';
+import { FormattedMessage, injectIntl, defineMessages } from 'react-intl';
import { Form, FormGroup, FormControl, InputGroup } from 'react-bootstrap';
import Button from '../../TheButton';
@@ -108,15 +108,21 @@ class AddComment extends Component {
{isPrivate ?
:
}
{isPrivate && (
-
}>
-
-
-
- {helpUrl && (
+ <>
-
- )}
-
- {!pending && this.state.lastError && (
- {getErrorMessage(formatMessage)(this.state.lastError)}
- )}
-
- {!pending && this.state.lastError === null && loginStatus === statusTypes.LOGIN_FAILED && (
-
-
-
- )}
+ {helpUrl && (
+
+ {caption} ,
+ }}
+ />
+
+ )}
+
+ {!pending && this.state.lastError && (
+
+ {getErrorMessage(formatMessage)(this.state.lastError)}
+
+ )}
+
+ {!pending && this.state.lastError === null && loginStatus === statusTypes.LOGIN_FAILED && (
+
+
+
+ )}
+ >
);
}
@@ -158,7 +164,7 @@ ExternalLoginBox.propTypes = {
login: PropTypes.func.isRequired,
fail: PropTypes.func.isRequired,
afterLogin: PropTypes.func.isRequired,
- intl: intlShape,
+ intl: PropTypes.object,
};
export default connect(
diff --git a/src/containers/FilesTableContainer/FilesTableContainer.js b/src/containers/FilesTableContainer/FilesTableContainer.js
index e1fe26354..69d7366f0 100644
--- a/src/containers/FilesTableContainer/FilesTableContainer.js
+++ b/src/containers/FilesTableContainer/FilesTableContainer.js
@@ -2,7 +2,6 @@ import React, { Component } from 'react';
import PropTypes from 'prop-types';
import { connect } from 'react-redux';
import ImmutablePropTypes from 'react-immutable-proptypes';
-import { FormattedMessage } from 'react-intl';
import FilesTable from '../../components/Exercises/FilesTable';
import Box from '../../components/widgets/Box';
@@ -45,11 +44,7 @@ class FilesTableContainer extends Component {
FilesTableContainer.propTypes = {
uploadId: PropTypes.string.isRequired,
- title: PropTypes.oneOfType([
- PropTypes.string,
- PropTypes.shape({ type: PropTypes.oneOf([FormattedMessage]) }),
- PropTypes.element,
- ]).isRequired,
+ title: PropTypes.oneOfType([PropTypes.string, PropTypes.element]).isRequired,
isOpen: PropTypes.bool,
files: ImmutablePropTypes.map,
usedFiles: PropTypes.instanceOf(Set),
diff --git a/src/containers/LayoutContainer/LayoutContainer.js b/src/containers/LayoutContainer/LayoutContainer.js
index c9374b84d..de1b9d0cb 100644
--- a/src/containers/LayoutContainer/LayoutContainer.js
+++ b/src/containers/LayoutContainer/LayoutContainer.js
@@ -1,7 +1,7 @@
import React, { Component } from 'react';
import PropTypes from 'prop-types';
import { connect } from 'react-redux';
-import { IntlProvider, addLocaleData } from 'react-intl';
+import { IntlProvider } from 'react-intl';
import moment from 'moment';
import { canUseDOM } from 'exenv';
@@ -12,7 +12,7 @@ import { toggleSize, toggleVisibility, collapse, unroll } from '../../redux/modu
import { isVisible, isCollapsed } from '../../redux/selectors/sidebar';
import { isLoggedIn } from '../../redux/selectors/auth';
import { getLoggedInUserSettings } from '../../redux/selectors/users';
-import { messages, localeData } from '../../locales';
+import { messages } from '../../locales';
import { UserSettingsContext, LinksContext, UrlContext } from '../../helpers/contexts';
import { buildRoutes, getLinks } from '../../pages/routes';
@@ -85,8 +85,6 @@ class LayoutContainer extends Component {
getMessages = lang => messages[lang] || messages[this.getDefaultLang()];
- getLocaleData = lang => localeData[lang] || localeData[this.getDefaultLang()];
-
render() {
const {
lang,
@@ -101,7 +99,6 @@ class LayoutContainer extends Component {
setLang,
} = this.props;
- addLocaleData([...this.getLocaleData(lang)]);
moment.locale(lang);
return (
diff --git a/src/containers/MakeRemoveSupervisorButtonContainer/MakeRemoveSupervisorButtonContainer.js b/src/containers/MakeRemoveSupervisorButtonContainer/MakeRemoveSupervisorButtonContainer.js
index cebf13776..861773db7 100644
--- a/src/containers/MakeRemoveSupervisorButtonContainer/MakeRemoveSupervisorButtonContainer.js
+++ b/src/containers/MakeRemoveSupervisorButtonContainer/MakeRemoveSupervisorButtonContainer.js
@@ -1,7 +1,7 @@
import React from 'react';
import PropTypes from 'prop-types';
import { connect } from 'react-redux';
-import { injectIntl, intlShape } from 'react-intl';
+import { injectIntl } from 'react-intl';
import { makeSupervisor, removeSupervisor } from '../../redux/modules/groups';
import { fetchUserIfNeeded } from '../../redux/modules/users';
@@ -38,7 +38,7 @@ MakeRemoveSupervisorButtonContainer.propTypes = {
makeSupervisor: PropTypes.func.isRequired,
removeSupervisor: PropTypes.func.isRequired,
fetchUserIfNeeded: PropTypes.func.isRequired,
- intl: intlShape.isRequired,
+ intl: PropTypes.object.isRequired,
};
const mapStateToProps = (state, { groupId, userId }) => ({
diff --git a/src/containers/PaginationContainer/PaginationContainer.js b/src/containers/PaginationContainer/PaginationContainer.js
index 6a0cf9171..4112fb993 100644
--- a/src/containers/PaginationContainer/PaginationContainer.js
+++ b/src/containers/PaginationContainer/PaginationContainer.js
@@ -1,7 +1,7 @@
import React, { Component } from 'react';
import PropTypes from 'prop-types';
import { connect } from 'react-redux';
-import { FormattedMessage, injectIntl, intlShape } from 'react-intl';
+import { FormattedMessage, injectIntl } from 'react-intl';
import { Container, Row, Col, Pagination } from 'react-bootstrap';
import classnames from 'classnames';
@@ -320,7 +320,7 @@ PaginationContainer.propTypes = {
setPaginationOrderBy: PropTypes.func.isRequired,
setPaginationFilters: PropTypes.func.isRequired,
fetchPaginated: PropTypes.func.isRequired,
- intl: intlShape.isRequired,
+ intl: PropTypes.object.isRequired,
};
export default connect(
diff --git a/src/containers/ResendVerificationEmailContainer/ResendVerificationEmailContainer.js b/src/containers/ResendVerificationEmailContainer/ResendVerificationEmailContainer.js
index dcfe6fcdb..8d7f81ebb 100644
--- a/src/containers/ResendVerificationEmailContainer/ResendVerificationEmailContainer.js
+++ b/src/containers/ResendVerificationEmailContainer/ResendVerificationEmailContainer.js
@@ -1,6 +1,6 @@
import React from 'react';
import PropTypes from 'prop-types';
-import { intlShape, injectIntl } from 'react-intl';
+import { injectIntl } from 'react-intl';
import { connect } from 'react-redux';
import { resendVerificationEmail } from '../../redux/modules/emailVerification';
import { resendingStatusSelector } from '../../redux/selectors/emailVerification';
@@ -14,7 +14,7 @@ ResendVerificationEmailContainer.propTypes = {
userId: PropTypes.string.isRequired,
state: PropTypes.string,
resend: PropTypes.func.isRequired,
- intl: intlShape,
+ intl: PropTypes.object,
};
export default connect(
diff --git a/src/containers/SisIntegrationContainer/SisIntegrationContainer.js b/src/containers/SisIntegrationContainer/SisIntegrationContainer.js
index 6ddecc1fd..1b4133dbb 100644
--- a/src/containers/SisIntegrationContainer/SisIntegrationContainer.js
+++ b/src/containers/SisIntegrationContainer/SisIntegrationContainer.js
@@ -1,7 +1,7 @@
import React, { Component } from 'react';
import PropTypes from 'prop-types';
import { connect } from 'react-redux';
-import { FormattedMessage, injectIntl, intlShape } from 'react-intl';
+import { FormattedMessage, injectIntl } from 'react-intl';
import { Link } from 'react-router-dom';
import { Card, Table } from 'react-bootstrap';
import { defaultMemoize } from 'reselect';
@@ -215,7 +215,7 @@ SisIntegrationContainer.propTypes = {
sisCoursesGroups: PropTypes.func.isRequired,
groupsAccessor: PropTypes.func.isRequired,
links: PropTypes.object,
- intl: intlShape.isRequired,
+ intl: PropTypes.object.isRequired,
};
export default withLinks(
diff --git a/src/containers/SisSupervisorGroupsContainer/SisSupervisorGroupsContainer.js b/src/containers/SisSupervisorGroupsContainer/SisSupervisorGroupsContainer.js
index f1ccec7e5..8a42d483e 100644
--- a/src/containers/SisSupervisorGroupsContainer/SisSupervisorGroupsContainer.js
+++ b/src/containers/SisSupervisorGroupsContainer/SisSupervisorGroupsContainer.js
@@ -2,7 +2,7 @@ import React, { Component } from 'react';
import PropTypes from 'prop-types';
import ImmutablePropTypes from 'react-immutable-proptypes';
import { connect } from 'react-redux';
-import { FormattedMessage, injectIntl, intlShape } from 'react-intl';
+import { FormattedMessage, injectIntl } from 'react-intl';
import { Table, Accordion, Card, OverlayTrigger, Tooltip, Popover } from 'react-bootstrap';
import { Link } from 'react-router-dom';
@@ -520,7 +520,7 @@ SisSupervisorGroupsContainer.propTypes = {
sisPossibleParents: ImmutablePropTypes.map,
groupsAccessor: PropTypes.func.isRequired,
groupsResourcesAccessor: PropTypes.func.isRequired,
- intl: intlShape.isRequired,
+ intl: PropTypes.object.isRequired,
};
export default injectIntl(
diff --git a/src/containers/SourceCodeViewerContainer/SourceCodeViewerContainer.js b/src/containers/SourceCodeViewerContainer/SourceCodeViewerContainer.js
index 57bbdc416..ffee41b70 100644
--- a/src/containers/SourceCodeViewerContainer/SourceCodeViewerContainer.js
+++ b/src/containers/SourceCodeViewerContainer/SourceCodeViewerContainer.js
@@ -3,15 +3,17 @@ import PropTypes from 'prop-types';
import ImmutablePropTypes from 'react-immutable-proptypes';
import { connect } from 'react-redux';
import { FormattedMessage } from 'react-intl';
-import { Modal } from 'react-bootstrap';
+import { Dropdown, DropdownButton, Modal } from 'react-bootstrap';
+
import Button from '../../components/widgets/TheButton';
import { DownloadIcon, LoadingIcon } from '../../components/icons';
-
import { fetchFileIfNeeded, download } from '../../redux/modules/files';
import { fetchContentIfNeeded } from '../../redux/modules/filesContent';
import { getFile, getFilesContent } from '../../redux/selectors/files';
import ResourceRenderer from '../../components/helpers/ResourceRenderer';
import SourceCodeViewer from '../../components/helpers/SourceCodeViewer';
+import DownloadSolutionArchiveContainer from '../DownloadSolutionArchiveContainer';
+import UsersNameContainer from '../UsersNameContainer';
import styles from './sourceCode.less';
@@ -30,79 +32,105 @@ class SourceCodeViewerContainer extends Component {
}
render() {
- const { show, onHide, download, file, content } = this.props;
+ const {
+ show,
+ onHide,
+ download,
+ file,
+ files,
+ content,
+ solutionId,
+ openAnotherFile,
+ isReference = false,
+ submittedBy = null,
+ } = this.props;
return (
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
}
resource={[file, content]}>
{(file, content) => (
-
-
- {file.name}
-
-
-
-
- {(content.malformedCharacters || content.tooLarge) && (
-
- {content.malformedCharacters && (
-
-
-
- )}
- {content.tooLarge && (
-
-
-
- )}
-
- )}
-
-
+
+
+ {files
+ .sort((a, b) => a.name.localeCompare(b.name, 'en'))
+ .map(f => (
+ openAnotherFile(f.id)}>
+ {f.name}
+
+ ))}
+
+
+ download(file.id)}>
+
+
+
+
+ {files.length > 1 && (
+
+ )}
+
+ {submittedBy && (
+
+
+
+ )}
+
+
+
+ {(content.malformedCharacters || content.tooLarge) && (
+
+ {content.malformedCharacters && (
+
+
+
+ )}
+ {content.tooLarge && (
+
+
+
+ )}
-
-
-
-
- download(file.id)}>
-
-
-
-
-
+ )}
+
+
+
+
)}
@@ -111,22 +139,30 @@ class SourceCodeViewerContainer extends Component {
}
SourceCodeViewerContainer.propTypes = {
+ solutionId: PropTypes.string.isRequired,
fileId: PropTypes.string,
- file: ImmutablePropTypes.map,
+ files: PropTypes.array.isRequired,
show: PropTypes.bool,
+ isReference: PropTypes.bool,
onHide: PropTypes.func.isRequired,
+ openAnotherFile: PropTypes.func.isRequired,
+ submittedBy: PropTypes.string,
+ file: ImmutablePropTypes.map,
+ content: ImmutablePropTypes.map,
loadAsync: PropTypes.func.isRequired,
download: PropTypes.func.isRequired,
- content: ImmutablePropTypes.map,
};
export default connect(
(state, { fileId }) => ({
- file: getFile(fileId)(state),
+ file: fileId && getFile(fileId)(state),
content: getFilesContent(fileId)(state),
}),
(dispatch, { fileId }) => ({
- loadAsync: () => Promise.all([dispatch(fetchFileIfNeeded(fileId)), dispatch(fetchContentIfNeeded(fileId))]),
+ loadAsync: () =>
+ fileId
+ ? Promise.all([dispatch(fetchFileIfNeeded(fileId)), dispatch(fetchContentIfNeeded(fileId))])
+ : Promise.resolve(),
download: id => dispatch(download(id)),
})
)(SourceCodeViewerContainer);
diff --git a/src/containers/SourceCodeViewerContainer/sourceCode.less b/src/containers/SourceCodeViewerContainer/sourceCode.less
index 50949cd75..27234f99f 100644
--- a/src/containers/SourceCodeViewerContainer/sourceCode.less
+++ b/src/containers/SourceCodeViewerContainer/sourceCode.less
@@ -1,12 +1,13 @@
.modal {
- position: absolute;
- width: auto;
- height: auto;
+ position: absolute !important;
+ width: auto !important;
+ max-width: 100% !important;
+ height: auto !important;
top: 1vmax;
bottom: 1vmax;
left: 1vmax;
right: 1vmax;
- margin: 0;
+ margin: 0 !important;
& > :global(.modal-content) {
min-height: 100%;
diff --git a/src/helpers/dot.js b/src/helpers/dot.js
index d6b5c25d9..b7e1a047d 100644
--- a/src/helpers/dot.js
+++ b/src/helpers/dot.js
@@ -1,4 +1,5 @@
-import Viz from 'viz.js/viz-lite';
+import Viz from 'viz.js';
+const { Module, render } = require('viz.js/lite.render.js');
const subnode = (node, port) => `"${node}__${port}"`;
@@ -13,12 +14,14 @@ const createDotForPorts = (name, ports) =>
.filter(value => value.length > 0)
.map(port => `${subnode(name, port)} [label="${port}"]`);
-const createDotForNodeFactory = dependencies => (name, portsIn = {}, portsOut = {}, i) => {
- const hasFullSupport = true;
- const inputs = createDotForPorts(name, portsIn);
- const outputs = createDotForPorts(name, portsOut);
+const createDotForNodeFactory =
+ dependencies =>
+ (name, portsIn = {}, portsOut = {}, i) => {
+ const hasFullSupport = true;
+ const inputs = createDotForPorts(name, portsIn);
+ const outputs = createDotForPorts(name, portsOut);
- return `
+ return `
subgraph cluster_${i} {
label = "${name}";
id = "B-${name}";
@@ -44,7 +47,7 @@ const createDotForNodeFactory = dependencies => (name, portsIn = {}, portsOut =
}
${inputs.length === 0 && outputs.length === 0 ? `"E-${name}" [label="void"]` : ''}
}`;
-};
+ };
const createDotForDependencyFactory = nodes => (from, to, name) => {
const nodeTo = nodes.find(node => node.name === to);
@@ -72,5 +75,6 @@ export const convertGraphToDot = ({ nodes, dependencies }) => {
export const convertGraphToSvg = graph => {
const dot = graph ? convertGraphToDot(graph) : '';
- return Viz(dot);
+ const viz = new Viz({ Module, render });
+ return viz.renderString(dot);
};
diff --git a/src/helpers/withLinks.js b/src/helpers/withLinks.js
index 7f500f7e4..0954af404 100644
--- a/src/helpers/withLinks.js
+++ b/src/helpers/withLinks.js
@@ -2,8 +2,8 @@
import React from 'react';
import { LinksContext } from '../helpers/contexts';
-const withLinks = (Inner: *) => {
- const ComponentWithLinks = (props: any) => (
+const withLinks = Inner => {
+ const ComponentWithLinks = props => (
{links => }
);
ComponentWithLinks.displayName = `withLinks(${Inner.displayName || Inner.name || 'Component'})`;
diff --git a/src/locales/cs.json b/src/locales/cs.json
index da5e27fb0..04d7f7964 100644
--- a/src/locales/cs.json
+++ b/src/locales/cs.json
@@ -281,7 +281,7 @@
"app.editEnvironmentConfig.warnings.noPipelinesVariables": "Zatím nejsou vybrané žádné pipelines. Jména proměnných proto není možné verifikovat.",
"app.editEnvironmentConfig.warnings.unknownVariable": "Tato proměnná není definována v žádné pipeline.",
"app.editEnvironmentSimpleForm.exclusiveEnvironment": "Exkluzivní běhové prostředí",
- "app.editEnvironmentSimpleForm.linkToWiki": "Vyberte všechna běhová prostředí, která má tato úloha podporovat. Více informací o běhových prostředích naleznete na naší
wiki stránce .",
+ "app.editEnvironmentSimpleForm.linkToWiki": "Vyberte všechna běhová prostředí, která má tato úloha podporovat. Více informací o běhových prostředích naleznete na naší
wiki stránce .",
"app.editEnvironmentSimpleForm.submit": "Uložit prostředí",
"app.editEnvironmentSimpleForm.submitting": "Ukládám...",
"app.editEnvironmentSimpleForm.success": "Konfigurace byla změněna.",
@@ -792,7 +792,7 @@
"app.externalLogin.button.authenticating": "Ověřuji...",
"app.externalLogin.description": "Přihlášení do ReCodExu pomocí externí autentizační služby '{name}'. Pokud ještě nemáte účet v ReCodExu, bude vám automaticky vytvořen. Pokud již máte lokální účet, bude automaticky spárován s vaší externí identitou podle e-malové adresy.",
"app.externalLogin.failed": "Externí autentizace selhala.",
- "app.externalLogin.help": "V případě potíží
kontaktujte podporu .",
+ "app.externalLogin.help": "V případě potíží
kontaktujte podporu .",
"app.externalLogin.title": "Přihlásit se pomocí externí služby",
"app.externalRegistrationForm.gdprConfirm": "Souhlasím se zpracování osobních údajů systémem ReCodex v souladu s GDPR směrnicí.",
"app.externalRegistrationForm.instance": "Instance:",
@@ -830,14 +830,18 @@
"app.filterExercisesListForm.selectedTags": "Vybrané nálepky:",
"app.filterExercisesListForm.showAllFilters": "Zobrazit všechny filtry...",
"app.filterUsersListForm.searchName": "Vyhledat podle jména",
- "app.footer.copyright": "Copyright © 2016-{year}
ReCodEx . Všechna práva vyhrazena.",
- "app.footer.version": "
Verze {version} (
log změn )",
+ "app.footer.copyright": "Copyright © 2016-{year}
ReCodEx . Všechna práva vyhrazena.",
+ "app.footer.version": "
Verze {version} (
log změn )",
"app.forkExerciseForm.confirmSubmit": "Tento proces vytvoří další kopii zvolené úlohy. Duplikace dává smysl pouze v případech, kdy se pokoušíte vytvořit novou úlohu, ale nechcete začínat zcela od píky. Prosím, neduplikujte úlohy, pokud je vašim cílem pouze jejich připojení do jiné domovské skupiny. Opravdu chcete provést duplikaci?",
"app.forkExerciseForm.showForkedExerciseButton": "Ukázat zduplikovanou úlohu",
"app.forkExerciseForm.submit": "Zduplikovat úlohu",
"app.forkExerciseForm.submitting": "Duplikování...",
"app.forkExerciseForm.success": "Úloha zduplikována",
"app.forkExerciseForm.successMessage": "Kopie této úlohy byla vytvořena ve zvolené skupině.",
+ "app.forkPipelineButton.success": "Zobrazit duplikovanou pipeline",
+ "app.forkPipelineForm.submit": "Zduplikovat pipeline",
+ "app.forkPipelineForm.submitting": "Duplikování...",
+ "app.forkPipelineForm.success": "Pipeline zduplikována",
"app.generateTokenForm.copied": "Zkopírováno!",
"app.generateTokenForm.copyToClipboard": "Kopírovat do schránky",
"app.generateTokenForm.day": "1 Den",
@@ -918,15 +922,12 @@
"app.hardwareGroupMetadata.wallTimeOverlay": "Omezení na wall-time limit",
"app.header.languageSwitching.translationTitle": "Jazyková verze",
"app.headerNotification.copiedToClippboard": "Zkopírováno do schránky.",
- "app.homepage.aboutContentP1": "Projekt vznikl v rámci předmětu
Softwarový projekt v roce 2016 jako náhrada za již zastaralý systém CodEx používaný na MFF UK. Projekt je zveřejněn pod
MIT licencí a hostován na
GitHubu . Podrobnější informace jsou k dispozici na
Wiki projektu.",
- "app.homepage.aboutContentP2": "Při vývoji se objevila řada
témat pro studentské projekty různého typu, v případě zájmu o vylepšení tohoto systému neváhejte kontaktovat
autory nebo některého z vyučujících.",
"app.homepage.aboutTitle": "O projektu",
"app.homepage.acknowledgementContent": "Tento projekt byl podpořen studentským fakultním grantem (SFG) Matematicko-fyzikální fakulty Univerzity Karlovy.",
"app.homepage.acknowledgementTitle": "Poděkování",
"app.homepage.description": "ReCodEx — úvodní stránka",
"app.homepage.githubWebappRepository": "Repozitář ReCodEx Webapp",
"app.homepage.help": "Nápověda",
- "app.homepage.helpContent": "Pokud máte s používáním ReCodExu nějaké problémy, prosíme přečtěte si nejprve
uživatelskou dokumentaci .",
"app.homepage.howToGiveFeedback": "Pokud máte jakoukoliv zpětnou vazbu, ať už pozitivní nebo negativní, neváhejte založit issue na GitHubu. Pokud zakládáte zpětnou vazbu, dejte jí prosím tag 'feedback', ať můžeme rozlišit zpětnou vazbu od chyb. Budeme se snažit odpovědět a případně vyhovět potencionálním požadavkům. Dopředu děkujeme za jakoukoliv formu zpětné vazby!",
"app.homepage.title": "ReCodEx — ReCodEx Code Examiner",
"app.homepage.whatIsRecodex": "Co je ReCodEx?",
@@ -973,7 +974,7 @@
"app.loginForm.validation.emptyEmail": "E-mailová adresa nemůže být prázdná.",
"app.loginForm.validation.emptyPassword": "Heslo nemůže být prázdné.",
"app.logout": "Odhlásit",
- "app.markdownTextArea.canUseMarkdown": "V tomto poli je povoleno používat
syntaxi markdown .",
+ "app.markdownTextArea.canUseMarkdown": "V tomto poli je povoleno používat
syntaxi markdown .",
"app.markdownTextArea.empty": "Prázdné",
"app.markdownTextArea.preview": "Náhled:",
"app.markdownTextArea.showPreview": "Ukaž náhled",
@@ -1055,6 +1056,8 @@
"app.pipelinesList.judgeOnlyIconTooltip": "Pipeline pouze se sudím",
"app.pipelinesList.stdoutIconTooltip": "Testované řešení by mělo vypsat svoje výsledky na standardní výstup",
"app.pipelinesList.universalPipelineIconTooltip": "Univerzální pipeline, která se používá v konfiguracích běžných úloh.",
+ "app.pipelinesSimpleList.actions": "Akce",
+ "app.pipelinesSimpleList.empty": "Na seznamu nejsou žádné pipelines.",
"app.plantSisTerm.noGroupsSelected": "Musí být vybrána alespoň jedna rodičovská skupina.",
"app.plantSisTerm.plantGroups": "Osadit skupiny",
"app.plantSisTerm.planted": "Osazeno",
diff --git a/src/locales/en.json b/src/locales/en.json
index 67f631425..0ef50a857 100644
--- a/src/locales/en.json
+++ b/src/locales/en.json
@@ -276,12 +276,12 @@
"app.editEnvironmentConfig.variableName": "Source Files Variable",
"app.editEnvironmentConfig.variableType": "Type",
"app.editEnvironmentConfig.variableValue": "Wildcard Pattern",
- "app.editEnvironmentConfig.variablesInfo": "These variables cover the submitted files and how they are associated with pipeline inputs. Each value may hold a file name or a wildcard (e.g.,
solution.cpp,
*.py,
my-*.{c,h}). Only
file and
file[] variables are allowed here.",
+ "app.editEnvironmentConfig.variablesInfo": "These variables cover the submitted files and how they are associated with pipeline inputs. Each value may hold a file name or a wildcard (e.g.,
solution.cpp,
*.py,
my-*.[c,h]). Only
file and
file[] variables are allowed here.",
"app.editEnvironmentConfig.warnings.ambiguousVariable": "This variable is defined in multiple pipelines. The value will be used in all of them.",
"app.editEnvironmentConfig.warnings.noPipelinesVariables": "There are no pipelines set. Name of the variables may not be verified.",
"app.editEnvironmentConfig.warnings.unknownVariable": "This variable is not defined in any pipeline.",
"app.editEnvironmentSimpleForm.exclusiveEnvironment": "Exclusive runtime environment",
- "app.editEnvironmentSimpleForm.linkToWiki": "Select all runtime environments the exercise should support. You may find more information about the environments at our
wiki page .",
+ "app.editEnvironmentSimpleForm.linkToWiki": "Select all runtime environments the exercise should support. You may find more information about the environments at our
wiki page .",
"app.editEnvironmentSimpleForm.submit": "Save Environments",
"app.editEnvironmentSimpleForm.submitting": "Saving Environments...",
"app.editEnvironmentSimpleForm.success": "Environments Saved.",
@@ -792,7 +792,7 @@
"app.externalLogin.button.authenticating": "Authenticating...",
"app.externalLogin.description": "Sign-in into ReCodEx using external authentication service '{name}'. If you do not have an account in ReCodEx, it will attempt to create one. If you do have a local account, it will be associated with your external identity if both have the same e-mail address.",
"app.externalLogin.failed": "External authentication failed.",
- "app.externalLogin.help": "In case of any problems,
contact the support .",
+ "app.externalLogin.help": "In case of any problems,
contact the support .",
"app.externalLogin.title": "Sign-in by External Authenticator",
"app.externalRegistrationForm.gdprConfirm": "I agree that my personal data will be processed by ReCodEx in accordance with GDPR policy.",
"app.externalRegistrationForm.instance": "Instance:",
@@ -830,14 +830,18 @@
"app.filterExercisesListForm.selectedTags": "Selected Tags:",
"app.filterExercisesListForm.showAllFilters": "Show all filters...",
"app.filterUsersListForm.searchName": "Search by name",
- "app.footer.copyright": "Copyright © 2016-{year}
ReCodEx . All rights reserved.",
- "app.footer.version": "
Version {version} (
changelog )",
+ "app.footer.copyright": "Copyright © 2016-{year}
ReCodEx . All rights reserved.",
+ "app.footer.version": "
Version {version} (
changelog )",
"app.forkExerciseForm.confirmSubmit": "Fork process will create another copy of the exercise. This only make sense if you need to create a different exercise and you do not want to start from scratch. Please, do not fork exercises just to attach them to a different groups of residence. Are you sure you would like to proceed with forking?",
"app.forkExerciseForm.showForkedExerciseButton": "Show the Forked Exercise",
"app.forkExerciseForm.submit": "Fork Exercise",
"app.forkExerciseForm.submitting": "Forking...",
"app.forkExerciseForm.success": "Exercise forked",
"app.forkExerciseForm.successMessage": "A copy of the exercise was successfully created in the designated group.",
+ "app.forkPipelineButton.success": "Show the forked pipeline",
+ "app.forkPipelineForm.submit": "Fork pipeline",
+ "app.forkPipelineForm.submitting": "Forking...",
+ "app.forkPipelineForm.success": "Pipeline forked",
"app.generateTokenForm.copied": "Copied!",
"app.generateTokenForm.copyToClipboard": "Copy to Clipboard",
"app.generateTokenForm.day": "1 Day",
@@ -918,15 +922,12 @@
"app.hardwareGroupMetadata.wallTimeOverlay": "Wall time limit constraints",
"app.header.languageSwitching.translationTitle": "Translation",
"app.headerNotification.copiedToClippboard": "Copied to clippboard.",
- "app.homepage.aboutContentP1": "ReCodEx was born in 2016 as a project for the
Software Project class. It is a replacement for the previous system CodEx used at MFF UK since 2006. The project is open source under the
MIT licence hosted on
GitHub . More detailed info is on the
Wiki page of the project.",
- "app.homepage.aboutContentP2": "During development we found a number of
topics for subsequent student projects of various kinds. If you are interested in making this project more awesome, please contact one of the
authors or teachers.",
"app.homepage.aboutTitle": "About",
"app.homepage.acknowledgementContent": "This project was supported by the Student Grant Program (SFG) of the Faculty of Mathematics and Physics, Charles University.",
"app.homepage.acknowledgementTitle": "Acknowledgement",
"app.homepage.description": "ReCodEx - homepage",
"app.homepage.githubWebappRepository": "ReCodEx Webapp Repository",
"app.homepage.help": "Help",
- "app.homepage.helpContent": "If you have any issues with ReCodEx, please consult the
user documentation first.",
"app.homepage.howToGiveFeedback": "For any kind of feedback, either positive or negative, feel free to create an issue on GitHub. Just please give your feedback the tag 'feedback' so we can distinguish it from bugs. We will try to respond to your feedback and we will see if there is something that can be done about it. We thank you for all your feedback in advance!",
"app.homepage.title": "ReCodEx — ReCodEx Code Examiner",
"app.homepage.whatIsRecodex": "What is ReCodEx?",
@@ -935,7 +936,7 @@
"app.homepage.whereToReportBugsText": "Every software system contains bugs and we are well aware of this fact. From time to time you might find a bug that nobody else has reported and which has not been fixed yet. Please report all bugs to our issue tracker on GitHub - just file a new issue and give it the label 'bug'. We will try to investigate and release a bug fix as soon as possible.",
"app.instance.description": "Instance overview",
"app.instance.edit": "Edit instance",
- "app.instance.groups.noGroups": "There are no groups in this ReCodEx instance currently visible to you",
+ "app.instance.groups.noGroups": "There are no groups in this ReCodEx instance currently visible to you.",
"app.instance.groupsTitle": "Groups Hierarchy",
"app.instance.hasValidLicence": "{name} has a valid licence:",
"app.instance.licencesTitle": "Licences",
@@ -973,7 +974,7 @@
"app.loginForm.validation.emptyEmail": "E-mail address cannot be empty.",
"app.loginForm.validation.emptyPassword": "Password cannot be empty.",
"app.logout": "Logout",
- "app.markdownTextArea.canUseMarkdown": "You can use
markdown syntax in this field.",
+ "app.markdownTextArea.canUseMarkdown": "You can use
markdown syntax in this field.",
"app.markdownTextArea.empty": "Empty",
"app.markdownTextArea.preview": "Preview:",
"app.markdownTextArea.showPreview": "Preview",
@@ -1055,6 +1056,8 @@
"app.pipelinesList.judgeOnlyIconTooltip": "Judge-only pipeline",
"app.pipelinesList.stdoutIconTooltip": "Tested solution is expected to yield results to standard output",
"app.pipelinesList.universalPipelineIconTooltip": "Universal pipeline which is used in common (simple) exercise configurations.",
+ "app.pipelinesSimpleList.actions": "Actions",
+ "app.pipelinesSimpleList.empty": "There are no pipelines in this list.",
"app.plantSisTerm.noGroupsSelected": "At least one parent group needs to be selected.",
"app.plantSisTerm.plantGroups": "Plant Groups",
"app.plantSisTerm.planted": "Planted",
@@ -1444,7 +1447,7 @@
"app.submitSolution.limitsExceeded": "Solution file limits have been exceeded",
"app.submitSolution.limitsExceededCount": "You may submit no more than {limit} {limit, plural, one {file} other {files}}.",
"app.submitSolution.limitsExceededSize": "Total size of the solution must not exceed {limit} KiB.",
- "app.submitSolution.linkToWiki": "Select the right environment, under which you wish to submit your solution. You may find more information about the environments at our
wiki page .",
+ "app.submitSolution.linkToWiki": "Select the right environment, under which you wish to submit your solution. You may find more information about the environments at our
wiki page .",
"app.submitSolution.noEnvironments": "Uploaded files do not meet criteria of any allowed runtime environment.",
"app.submitSolution.noteLabel": "Note for you and your supervisor(s):",
"app.submitSolution.runtimeEnvironment": "Select runtime environment (programming language):",
diff --git a/src/locales/index.js b/src/locales/index.js
index 04a87b001..102f5b152 100644
--- a/src/locales/index.js
+++ b/src/locales/index.js
@@ -3,12 +3,15 @@ import { canUseDOM } from 'exenv';
import messagesCs from './cs'; // eslint-disable-line
import messagesEn from './en'; // eslint-disable-line
-import en from 'react-intl/locale-data/en';
-import cs from 'react-intl/locale-data/cs';
+import '@formatjs/intl-pluralrules/polyfill';
+import '@formatjs/intl-pluralrules/locale-data/en';
+import '@formatjs/intl-pluralrules/locale-data/cs';
+import '@formatjs/intl-relativetimeformat/polyfill';
+import '@formatjs/intl-relativetimeformat/locale-data/en';
+import '@formatjs/intl-relativetimeformat/locale-data/cs';
export const messages = { cs: messagesCs, en: messagesEn };
export const isAvailable = lang => Object.keys(messages).indexOf(lang) !== -1;
-export const localeData = { cs, en };
export const getDefaultLang = () => {
if (canUseDOM) {
diff --git a/src/locales/whitelist_cs.json b/src/locales/whitelist_cs.json
index 440a7ceb4..89bf97fda 100644
--- a/src/locales/whitelist_cs.json
+++ b/src/locales/whitelist_cs.json
@@ -1,22 +1,41 @@
[
- "app.evaluationProgressStatus.ok",
- "generic.detail",
"app.attachmentFilesTable.url",
+ "app.broker.title",
"app.changePasswordForm.email",
- "app.passwordStrength.ok",
- "app.passwordStrength.unknown",
- "app.externalRegistrationForm.instance",
+ "app.evaluationProgressStatus.ok",
+ "app.exitCodes.csharp.0",
+ "app.exitCodes.csharp.1",
+ "app.exitCodes.csharp.101",
+ "app.exitCodes.csharp.102",
+ "app.exitCodes.csharp.103",
+ "app.exitCodes.csharp.104",
+ "app.exitCodes.csharp.105",
+ "app.exitCodes.csharp.106",
+ "app.exitCodes.csharp.107",
+ "app.exitCodes.csharp.108",
+ "app.exitCodes.csharp.109",
+ "app.exitCodes.csharp.200",
+ "app.exitCodes.csharp.201",
+ "app.exitCodes.csharp.202",
+ "app.exitCodes.java.0",
+ "app.exitCodes.java.1",
+ "app.exitCodes.java.100",
+ "app.exitCodes.java.101",
+ "app.exitCodes.java.102",
+ "app.exitCodes.java.103",
+ "app.exitCodes.java.104",
+ "app.exitCodes.java.105",
+ "app.exitCodes.java.106",
+ "app.exitCodes.java.107",
+ "app.exitCodes.java.108",
+ "app.exitCodes.java.109",
+ "app.exitCodes.java.110",
+ "app.exitCodes.java.111",
+ "app.exitCodes.java.112",
+ "app.exitCodes.java.113",
+ "app.exitCodes.java.2",
"app.exitCodes.pascal.0",
"app.exitCodes.pascal.1",
- "app.exitCodes.pascal.2",
- "app.exitCodes.pascal.3",
- "app.exitCodes.pascal.4",
- "app.exitCodes.pascal.5",
- "app.exitCodes.pascal.6",
- "app.exitCodes.pascal.12",
- "app.exitCodes.pascal.15",
- "app.exitCodes.pascal.16",
- "app.exitCodes.pascal.17",
"app.exitCodes.pascal.100",
"app.exitCodes.pascal.101",
"app.exitCodes.pascal.102",
@@ -24,6 +43,8 @@
"app.exitCodes.pascal.104",
"app.exitCodes.pascal.105",
"app.exitCodes.pascal.106",
+ "app.exitCodes.pascal.12",
+ "app.exitCodes.pascal.15",
"app.exitCodes.pascal.150",
"app.exitCodes.pascal.151",
"app.exitCodes.pascal.152",
@@ -32,9 +53,12 @@
"app.exitCodes.pascal.157",
"app.exitCodes.pascal.158",
"app.exitCodes.pascal.159",
+ "app.exitCodes.pascal.16",
"app.exitCodes.pascal.160",
"app.exitCodes.pascal.161",
"app.exitCodes.pascal.162",
+ "app.exitCodes.pascal.17",
+ "app.exitCodes.pascal.2",
"app.exitCodes.pascal.200",
"app.exitCodes.pascal.201",
"app.exitCodes.pascal.202",
@@ -61,6 +85,10 @@
"app.exitCodes.pascal.229",
"app.exitCodes.pascal.231",
"app.exitCodes.pascal.232",
+ "app.exitCodes.pascal.3",
+ "app.exitCodes.pascal.4",
+ "app.exitCodes.pascal.5",
+ "app.exitCodes.pascal.6",
"app.exitCodes.python3.0",
"app.exitCodes.python3.1",
"app.exitCodes.python3.101",
@@ -78,55 +106,19 @@
"app.exitCodes.python3.113",
"app.exitCodes.python3.114",
"app.exitCodes.python3.115",
- "app.exitCodes.java.0",
- "app.exitCodes.java.1",
- "app.exitCodes.java.2",
- "app.exitCodes.java.100",
- "app.exitCodes.java.101",
- "app.exitCodes.java.102",
- "app.exitCodes.java.103",
- "app.exitCodes.java.104",
- "app.exitCodes.java.105",
- "app.exitCodes.java.106",
- "app.exitCodes.java.107",
- "app.exitCodes.java.108",
- "app.exitCodes.java.109",
- "app.exitCodes.java.110",
- "app.exitCodes.java.111",
- "app.exitCodes.java.112",
- "app.exitCodes.java.113",
- "app.exitCodes.csharp.0",
- "app.exitCodes.csharp.1",
- "app.exitCodes.csharp.101",
- "app.exitCodes.csharp.102",
- "app.exitCodes.csharp.103",
- "app.exitCodes.csharp.104",
- "app.exitCodes.csharp.105",
- "app.exitCodes.csharp.106",
- "app.exitCodes.csharp.107",
- "app.exitCodes.csharp.108",
- "app.exitCodes.csharp.109",
- "app.exitCodes.csharp.200",
- "app.exitCodes.csharp.201",
- "app.exitCodes.csharp.202",
- "app.roles.student",
- "app.instancesTable.admin",
- "app.sidebar.menu.title",
- "app.sidebar.menu.faq",
- "app.scoreConfigInfoWeighted.test",
- "app.submissions.testResultsTable.statusOK",
+ "app.externalRegistrationForm.instance",
"app.failureList.headLink",
- "app.systemMessagesList.text",
- "generic.role",
+ "app.faq.description",
+ "app.faq.title",
+ "app.homepage.title",
+ "app.instance.title",
+ "app.instancesTable.admin",
+ "app.passwordStrength.ok",
+ "app.passwordStrength.unknown",
+ "app.pipeline.title",
+ "app.randomMessages.error",
+ "app.randomMessages.last",
"app.randomMessages.m1",
- "app.randomMessages.m2",
- "app.randomMessages.m3",
- "app.randomMessages.m4",
- "app.randomMessages.m5",
- "app.randomMessages.m6",
- "app.randomMessages.m7",
- "app.randomMessages.m8",
- "app.randomMessages.m9",
"app.randomMessages.m10",
"app.randomMessages.m11",
"app.randomMessages.m12",
@@ -137,6 +129,7 @@
"app.randomMessages.m17",
"app.randomMessages.m18",
"app.randomMessages.m19",
+ "app.randomMessages.m2",
"app.randomMessages.m20",
"app.randomMessages.m21",
"app.randomMessages.m22",
@@ -147,6 +140,7 @@
"app.randomMessages.m27",
"app.randomMessages.m28",
"app.randomMessages.m29",
+ "app.randomMessages.m3",
"app.randomMessages.m30",
"app.randomMessages.m31",
"app.randomMessages.m32",
@@ -155,12 +149,19 @@
"app.randomMessages.m35",
"app.randomMessages.m36",
"app.randomMessages.m37",
- "app.randomMessages.last",
- "app.randomMessages.error",
- "app.instance.title",
- "app.pipeline.title",
- "app.faq.title",
- "app.faq.description",
- "app.broker.title",
- "generic.email"
+ "app.randomMessages.m4",
+ "app.randomMessages.m5",
+ "app.randomMessages.m6",
+ "app.randomMessages.m7",
+ "app.randomMessages.m8",
+ "app.randomMessages.m9",
+ "app.roles.student",
+ "app.scoreConfigInfoWeighted.test",
+ "app.sidebar.menu.faq",
+ "app.sidebar.menu.title",
+ "app.submissions.testResultsTable.statusOK",
+ "app.systemMessagesList.text",
+ "generic.detail",
+ "generic.email",
+ "generic.role"
]
\ No newline at end of file
diff --git a/src/locales/whitelist_en.json b/src/locales/whitelist_en.json
deleted file mode 100644
index c4f3598cf..000000000
--- a/src/locales/whitelist_en.json
+++ /dev/null
@@ -1,1581 +0,0 @@
-[
- "app.EditLimitsForm.cloneAll.yesNoQuestion",
- "app.EditLimitsForm.cloneHorizontal.yesNoQuestion",
- "app.EditLimitsForm.validation.NaN",
- "app.EditLimitsForm.validation.outOfRange",
- "app.ExercisePrefixIcons.isLocked",
- "app.ExercisePrefixIcons.isPrivate",
- "app.acceptSolution.accepted",
- "app.acceptSolution.acceptedShort",
- "app.acceptSolution.notAccepted",
- "app.acceptSolution.notAcceptedShort",
- "app.addExerciseTagForm.submit",
- "app.addExerciseTagForm.submitting",
- "app.addExerciseTagForm.success",
- "app.addExerciseTagForm.validation.alreadyAssigned",
- "app.addExerciseTagForm.validation.invalidCharacters",
- "app.addExerciseTagForm.validation.tooLong",
- "app.addExerciseTagForm.validation.tooShort",
- "app.addExerciseTagForm.warnings.newTag",
- "app.addExerciseTagForm.warnings.tooLong",
- "app.addExerciseTagForm.warnings.tooShort",
- "app.addLicence.addLicenceTitle",
- "app.addLicence.failed",
- "app.addLicence.note",
- "app.addLicence.processing",
- "app.addLicence.set",
- "app.addLicence.success",
- "app.addLicence.validUntil",
- "app.addLicence.validation.note",
- "app.addLicence.validation.validUntilEmpty",
- "app.addLicence.validation.validUntilInThePast",
- "app.addSisTermForm.failed",
- "app.addSisTermForm.processing",
- "app.addSisTermForm.submit",
- "app.addSisTermForm.success",
- "app.addSisTermForm.summer",
- "app.addSisTermForm.term",
- "app.addSisTermForm.title",
- "app.addSisTermForm.winter",
- "app.addSisTermForm.year",
- "app.addUserContainer.emptyQuery",
- "app.allowUserButton.confirmAllow",
- "app.allowUserButton.confirmDisallow",
- "app.apiErrorCodes.400-001",
- "app.apiErrorCodes.400-101",
- "app.apiErrorCodes.400-104",
- "app.apiErrorCodes.400-105",
- "app.apiErrorCodes.400-106",
- "app.apiErrorCodes.403-001",
- "app.apiErrorCodes.403-002",
- "app.apiErrorCodes.409_100",
- "app.apiErrorCodes.409_101",
- "app.apiErrorCodes.409_102",
- "app.apiErrorCodes.500-000",
- "app.apiErrorCodes.unknown",
- "app.archive.archivedGroups",
- "app.archive.description",
- "app.archive.title",
- "app.archiveGroupButton.set",
- "app.archiveGroupButton.setShort",
- "app.archiveGroupButton.unset",
- "app.archiveGroupButton.unsetShort",
- "app.archiveSisTerm.archiveGroups",
- "app.archiveSisTerm.archived",
- "app.archiveSisTerm.archiving",
- "app.archiveSisTerm.failed",
- "app.archiveSisTerm.noGroups",
- "app.archiveSisTerm.noGroupsSelected",
- "app.archiveSisTerm.title",
- "app.assignExerciseButton.isBroken",
- "app.assignExerciseButton.isLocked",
- "app.assignExerciseButton.noRefSolutions",
- "app.assignemntStatusIcon.evaluationFailed",
- "app.assignemntStatusIcon.failed",
- "app.assignemntStatusIcon.inProgress",
- "app.assignemntStatusIcon.isBestSolution",
- "app.assignemntStatusIcon.none",
- "app.assignemntStatusIcon.ok",
- "app.assignemntStatusIcon.solutionMissingSubmission",
- "app.assignment.alreadySubmitted",
- "app.assignment.assignedAtExplanation",
- "app.assignment.deadline",
- "app.assignment.downloadBestSolutionsArchive",
- "app.assignment.error",
- "app.assignment.errorExplanation",
- "app.assignment.exerciseDeleted",
- "app.assignment.exerciseDeletedInfo",
- "app.assignment.isBonus",
- "app.assignment.loading",
- "app.assignment.maxPointsCurrent",
- "app.assignment.maxPointsFirst",
- "app.assignment.maxPointsSecond",
- "app.assignment.pointsPercentualThreshold",
- "app.assignment.runtimeEnvironmentsIds",
- "app.assignment.secondDeadline",
- "app.assignment.solutionFilesLimit",
- "app.assignment.solutionSizeLimit",
- "app.assignment.submissionsCountLimit",
- "app.assignment.syncAttachmentFiles",
- "app.assignment.syncButton",
- "app.assignment.syncButton.exerciseBroken",
- "app.assignment.syncConfigurationType",
- "app.assignment.syncDescription",
- "app.assignment.syncExerciseConfig",
- "app.assignment.syncExerciseEnvironmentConfigs",
- "app.assignment.syncExerciseTests",
- "app.assignment.syncHardwareGroups",
- "app.assignment.syncLimits",
- "app.assignment.syncLocalizedTexts",
- "app.assignment.syncMergeJudgeLogs",
- "app.assignment.syncRequired",
- "app.assignment.syncRuntimeEnvironments",
- "app.assignment.syncScoreConfig",
- "app.assignment.syncSupplementaryFiles",
- "app.assignment.title",
- "app.assignment.viewResults",
- "app.assignment.visible",
- "app.assignment.visibleFrom",
- "app.assignmentStats.assignmentSolutions",
- "app.assignmentStats.groupByUsersCheckbox",
- "app.assignmentStats.noSolutions",
- "app.assignmentStats.onlyBestSolutionsCheckbox",
- "app.assignmentStats.title",
- "app.assignments.deadline",
- "app.assignments.discussionModalTitle",
- "app.assignments.group",
- "app.assignments.maxPoints",
- "app.assignments.maxPointsShort",
- "app.assignments.name",
- "app.assignments.points",
- "app.assignments.secondDeadline",
- "app.assignmentsTable.noAssignments",
- "app.assignmentsTableRow.loading",
- "app.asyncJobs.abort",
- "app.asyncJobs.list.abortConfirm",
- "app.asyncJobs.list.args",
- "app.asyncJobs.list.associatedAssignment",
- "app.asyncJobs.list.command",
- "app.asyncJobs.list.noJobs",
- "app.asyncJobs.list.processInfo",
- "app.asyncJobs.list.retries",
- "app.asyncJobs.list.title",
- "app.asyncJobs.list.worker",
- "app.asyncJobs.ping",
- "app.asyncJobs.title",
- "app.attachmentFiles.deleteConfirm",
- "app.attachmentFilesTable.description",
- "app.attachmentFilesTable.title",
- "app.attachmentFilesTable.url",
- "app.badge.effectiveRoleDialog.title",
- "app.badge.failedLoading",
- "app.badge.failedLoadingInfo",
- "app.badge.sessionExpiration",
- "app.box.highlighterExplanation",
- "app.broker.confirmFreeze",
- "app.broker.confirmUnfreeze",
- "app.broker.freeze",
- "app.broker.stats",
- "app.broker.title",
- "app.broker.unfreeze",
- "app.changePassword.description",
- "app.changePassword.requestAnotherLink",
- "app.changePassword.title",
- "app.changePassword.tokenExpired",
- "app.changePassword.tokenExpiresIn",
- "app.changePasswordForm.changePassword",
- "app.changePasswordForm.email",
- "app.changePasswordForm.failed",
- "app.changePasswordForm.oldPassword",
- "app.changePasswordForm.password",
- "app.changePasswordForm.passwordCheck",
- "app.changePasswordForm.passwordStrength",
- "app.changePasswordForm.processing",
- "app.changePasswordForm.succeeded",
- "app.changePasswordForm.success",
- "app.changePasswordForm.title",
- "app.changePasswordForm.validation.emptyPassword",
- "app.changePasswordForm.validation.passwordTooWeak",
- "app.changePasswordForm.validation.passwordsDontMatch",
- "app.comments.addComment",
- "app.comments.commentPlaceholder",
- "app.comments.everyoneCanSeeThisComment",
- "app.comments.loadingCommentThread",
- "app.comments.noCommentsYet",
- "app.comments.onlyYouCanSeeThisComment",
- "app.comments.publishing",
- "app.comments.publishingFailed",
- "app.comments.title",
- "app.comments.warnings.isPrivate",
- "app.comments.warnings.isPublic",
- "app.confirm.no",
- "app.confirm.yes",
- "app.createExerciseForm.selectGroupFirst",
- "app.createExerciseForm.title",
- "app.createExerciseForm.validation.noGroupSelected",
- "app.createGroup.detaining",
- "app.createGroup.externalId",
- "app.createGroup.hasThreshold",
- "app.createGroup.isOrganizational",
- "app.createGroup.isPublic",
- "app.createGroup.makeMeAdmin",
- "app.createGroup.publicStats",
- "app.createGroup.threshold",
- "app.createUserForm.validation.emailTaken",
- "app.createUserForm.validation.emptyPassword",
- "app.dashboard.memberOf",
- "app.dashboard.sisGroupsStudent",
- "app.dashboard.sisGroupsStudentExplain",
- "app.dashboard.studentNoGroups",
- "app.dashboard.studentNoGroupsTitle",
- "app.dashboard.supervisorNoGroups",
- "app.dashboard.supervisorNoGroupsTitle",
- "app.dashboard.supervisorOf",
- "app.dashboard.title",
- "app.deadlineValidation.deadlineInFarFuture",
- "app.deadlineValidation.emptyDeadline",
- "app.deadlineValidation.invalidDateTime",
- "app.deadlineValidation.secondDeadlineBeforeFirstDeadline",
- "app.deleteButton.confirm",
- "app.editAssignment.deleteAssignment",
- "app.editAssignment.deleteAssignmentWarning",
- "app.editAssignment.description",
- "app.editAssignment.title",
- "app.editAssignment.validation.versionDiffers",
- "app.editAssignmentForm.allowSecondDeadline",
- "app.editAssignmentForm.canViewJudgeLogs",
- "app.editAssignmentForm.canViewJudgeLogsExplanation",
- "app.editAssignmentForm.canViewJudgeStderr",
- "app.editAssignmentForm.canViewJudgeStderrExplanation",
- "app.editAssignmentForm.canViewJudgeStdout",
- "app.editAssignmentForm.canViewJudgeStdoutExplanation",
- "app.editAssignmentForm.canViewLimitRatios",
- "app.editAssignmentForm.canViewLimitRatiosExplanation",
- "app.editAssignmentForm.chooseFirstDeadlineBeforeSecondDeadline",
- "app.editAssignmentForm.enabledEnvironments",
- "app.editAssignmentForm.firstDeadline",
- "app.editAssignmentForm.isBonus",
- "app.editAssignmentForm.localized.assignmentSyncInfo",
- "app.editAssignmentForm.localized.completeDescription",
- "app.editAssignmentForm.localized.description",
- "app.editAssignmentForm.localized.link",
- "app.editAssignmentForm.localized.studentHint",
- "app.editAssignmentForm.localized.urlValidation",
- "app.editAssignmentForm.maxPointsBeforeFirstDeadline",
- "app.editAssignmentForm.maxPointsBeforeSecondDeadline",
- "app.editAssignmentForm.pointsPercentualThreshold",
- "app.editAssignmentForm.pointsPercentualThresholdExplanation",
- "app.editAssignmentForm.secondDeadline",
- "app.editAssignmentForm.sendNotification",
- "app.editAssignmentForm.submissionsCountLimit",
- "app.editAssignmentForm.title",
- "app.editAssignmentForm.validation.allRuntimesDisabled",
- "app.editAssignmentForm.validation.emptyGroups",
- "app.editAssignmentForm.validation.emptyName",
- "app.editAssignmentForm.validation.localizedText.text",
- "app.editAssignmentForm.visibility",
- "app.editAssignmentForm.visibility.hidden",
- "app.editAssignmentForm.visibility.visible",
- "app.editAssignmentForm.visibility.visibleFrom",
- "app.editAssignmentForm.visibleFrom",
- "app.editAssignmentForm.warninigs.alreadyAssigned",
- "app.editAssignmentForm.warninigs.alreadyAssignedGlobal",
- "app.editAssignmentForm.warninigs.canViewJudgeLogs",
- "app.editEnvironmentConfig.duplicateVariable",
- "app.editEnvironmentConfig.noRuntimeSelected",
- "app.editEnvironmentConfig.noVariables",
- "app.editEnvironmentConfig.selectedRuntime",
- "app.editEnvironmentConfig.selectedRuntimeInfo",
- "app.editEnvironmentConfig.setDefaultVariables",
- "app.editEnvironmentConfig.title",
- "app.editEnvironmentConfig.tooltip.add",
- "app.editEnvironmentConfig.tooltip.remove",
- "app.editEnvironmentConfig.validateEnvironment",
- "app.editEnvironmentConfig.validateName",
- "app.editEnvironmentConfig.validateWildcard",
- "app.editEnvironmentConfig.variableName",
- "app.editEnvironmentConfig.variableType",
- "app.editEnvironmentConfig.variableValue",
- "app.editEnvironmentConfig.variablesInfo",
- "app.editEnvironmentConfig.warnings.ambiguousVariable",
- "app.editEnvironmentConfig.warnings.noPipelinesVariables",
- "app.editEnvironmentConfig.warnings.unknownVariable",
- "app.editEnvironmentSimpleForm.exclusiveEnvironment",
- "app.editEnvironmentSimpleForm.linkToWiki",
- "app.editEnvironmentSimpleForm.submit",
- "app.editEnvironmentSimpleForm.submitting",
- "app.editEnvironmentSimpleForm.success",
- "app.editEnvironmentSimpleForm.validation.environments",
- "app.editEnvironmentSimpleForm.validation.standaloneEnvironmentsCollisions",
- "app.editExercise.deleteExercise",
- "app.editExercise.deleteExerciseWarning",
- "app.editExercise.description",
- "app.editExercise.editConfig",
- "app.editExercise.editTags",
- "app.editExercise.title",
- "app.editExerciseAdvancedConfigForm.validation.emptyFileName",
- "app.editExerciseConfig.cannotDisplayConfigForm",
- "app.editExerciseConfig.cannotDisplayPipelinesForm",
- "app.editExerciseConfig.changeConfigAdvancedExplain",
- "app.editExerciseConfig.changeConfigSimpleExplain",
- "app.editExerciseConfig.description",
- "app.editExerciseConfig.noPipelines",
- "app.editExerciseConfig.noRuntimes",
- "app.editExerciseConfig.noTests",
- "app.editExerciseConfig.runtimeEnvironments",
- "app.editExerciseConfig.submit",
- "app.editExerciseConfig.submitting",
- "app.editExerciseConfig.success",
- "app.editExerciseConfig.testsAndScoring",
- "app.editExerciseConfig.title",
- "app.editExerciseConfigForm.rawFill",
- "app.editExerciseConfigForm.rawFillPipeline",
- "app.editExerciseConfigForm.rawFillPipeline.yesNoQuestion",
- "app.editExerciseConfigForm.rawFillTest",
- "app.editExerciseConfigForm.rawFillTest.yesNoQuestion",
- "app.editExerciseConfigForm.rawFillVariable.yesNoQuestion",
- "app.editExerciseConfigForm.smartFillAll",
- "app.editExerciseConfigForm.smartFillAll.yesNoQuestion",
- "app.editExerciseConfigForm.smartFillArgs",
- "app.editExerciseConfigForm.smartFillArgs.yesNoQuestion",
- "app.editExerciseConfigForm.smartFillCompilation",
- "app.editExerciseConfigForm.smartFillCompilation.yesNoQuestion",
- "app.editExerciseConfigForm.smartFillEntryPoint",
- "app.editExerciseConfigForm.smartFillEntryPoint.yesNoQuestion",
- "app.editExerciseConfigForm.smartFillExtraFiles",
- "app.editExerciseConfigForm.smartFillInput",
- "app.editExerciseConfigForm.smartFillInput.yesNoQuestion",
- "app.editExerciseConfigForm.smartFillJudge",
- "app.editExerciseConfigForm.smartFillJudge.yesNoQuestion",
- "app.editExerciseConfigForm.smartFillOutput",
- "app.editExerciseConfigForm.smartFillOutput.yesNoQuestion",
- "app.editExerciseConfigForm.validation.ambiguousEntryPoint",
- "app.editExerciseConfigForm.validation.duplicateFile",
- "app.editExerciseConfigForm.validation.duplicateFileName",
- "app.editExerciseConfigForm.validation.fileDoesNotExist",
- "app.editExerciseConfigForm.validation.noFileSelected",
- "app.editExerciseConfigForm.validation.stdinFileEmpty",
- "app.editExerciseConfigForm.validation.whitespaceInArg",
- "app.editExerciseForm.difficulty",
- "app.editExerciseForm.easy",
- "app.editExerciseForm.hard",
- "app.editExerciseForm.isLocked",
- "app.editExerciseForm.isPublic",
- "app.editExerciseForm.medium",
- "app.editExerciseForm.mergeJudgeLogs",
- "app.editExerciseForm.solutionFilesLimit",
- "app.editExerciseForm.solutionSizeLimit",
- "app.editExerciseForm.title",
- "app.editExerciseForm.validation.difficulty",
- "app.editExerciseForm.validation.emptyName",
- "app.editExerciseForm.validation.versionDiffers",
- "app.editExerciseLimits.description",
- "app.editExerciseLimits.missingSomething",
- "app.editExerciseLimits.missingSomethingTitle",
- "app.editExerciseLimits.multiHwGroups",
- "app.editExerciseLimits.multiHwGroupsTitle",
- "app.editExerciseLimits.title",
- "app.editExercisePipelines.addPipeline",
- "app.editExercisePipelines.availablePipelines",
- "app.editExercisePipelines.title",
- "app.editExercisePipelinesForm.validation.duplicatePipelineWarning",
- "app.editExercisePipelinesForm.validation.noPipelines",
- "app.editExerciseSimpleConfigForm.isDataOnly",
- "app.editExerciseSimpleConfigForm.isHaskellOnly",
- "app.editExerciseSimpleConfigForm.isPrologOnly",
- "app.editExerciseSimpleConfigForm.validation.customJudge",
- "app.editExerciseSimpleConfigForm.validation.expectedOutput",
- "app.editExerciseSimpleConfigForm.validation.outputFile",
- "app.editExerciseSimpleConfigTests.argumentsExplanation",
- "app.editExerciseSimpleConfigTests.cmdlineTitle",
- "app.editExerciseSimpleConfigTests.compilationInfo",
- "app.editExerciseSimpleConfigTests.compilationTitle",
- "app.editExerciseSimpleConfigTests.customJudgeBinary",
- "app.editExerciseSimpleConfigTests.entryPoint",
- "app.editExerciseSimpleConfigTests.entryPointLabel",
- "app.editExerciseSimpleConfigTests.executionArguments",
- "app.editExerciseSimpleConfigTests.expectedOutput",
- "app.editExerciseSimpleConfigTests.extraFilesActual",
- "app.editExerciseSimpleConfigTests.extraFilesRename",
- "app.editExerciseSimpleConfigTests.extraFilesTitle",
- "app.editExerciseSimpleConfigTests.inputFilesActual",
- "app.editExerciseSimpleConfigTests.inputFilesRename",
- "app.editExerciseSimpleConfigTests.inputStdin",
- "app.editExerciseSimpleConfigTests.inputTitle",
- "app.editExerciseSimpleConfigTests.jarFiles",
- "app.editExerciseSimpleConfigTests.judgeArgs",
- "app.editExerciseSimpleConfigTests.judgeTitle",
- "app.editExerciseSimpleConfigTests.judgeType",
- "app.editExerciseSimpleConfigTests.noExtraFiles",
- "app.editExerciseSimpleConfigTests.noJarFiles",
- "app.editExerciseSimpleConfigTests.outputFile",
- "app.editExerciseSimpleConfigTests.outputTitle",
- "app.editExerciseSimpleConfigTests.useCustomJudge",
- "app.editExerciseSimpleConfigTests.useOutfile",
- "app.editExerciseSimpleConfigTests.validation.sentryPointString",
- "app.editExerciseTags.noTags",
- "app.editGroup.archivedExplain",
- "app.editGroup.cannotDeleteGroupWithSubgroups",
- "app.editGroup.cannotDeleteRootGroup",
- "app.editGroup.deleteGroup",
- "app.editGroup.deleteGroupWarning",
- "app.editGroup.description",
- "app.editGroup.organizationalExplain",
- "app.editGroup.relocateGroup",
- "app.editGroup.title",
- "app.editGroupForm.createGroup",
- "app.editGroupForm.description",
- "app.editGroupForm.saveGroup",
- "app.editGroupForm.titleEdit",
- "app.editGroupForm.titleNew",
- "app.editGroupForm.validation.emptyName",
- "app.editHardwareGroupForm.about",
- "app.editHardwareGroupForm.failed",
- "app.editHardwareGroupForm.hwGroupSelect",
- "app.editHardwareGroupForm.title",
- "app.editHardwareGroupForm.validationFailed",
- "app.editHardwareGroupForm.warnLimitsDrop",
- "app.editInstance.description",
- "app.editInstance.title",
- "app.editInstanceForm.failed",
- "app.editInstanceForm.isOpen",
- "app.editInstanceForm.processing",
- "app.editInstanceForm.set",
- "app.editInstanceForm.success",
- "app.editInstanceForm.title",
- "app.editLimitsBox.title",
- "app.editLimitsField.tooltip.cloneAll",
- "app.editLimitsField.tooltip.cloneHorizontal",
- "app.editLimitsField.tooltip.cloneVertical",
- "app.editLimitsForm.failed",
- "app.editLimitsForm.preciseTime",
- "app.editLimitsForm.preciseTimeTooltip",
- "app.editLimitsForm.submit",
- "app.editLimitsForm.submitting",
- "app.editLimitsForm.success",
- "app.editLimitsForm.validation.totalTime",
- "app.editLocalizedTextForm.localeEnabledCheckbox",
- "app.editLocalizedTextForm.localizationTabDisabled",
- "app.editLocalizedTextForm.localized.description",
- "app.editLocalizedTextForm.localized.noLanguage",
- "app.editLocalizedTextForm.localized.reallyRemoveQuestion",
- "app.editPipeline.delete",
- "app.editPipeline.deleteWarning",
- "app.editPipeline.description",
- "app.editPipeline.disclaimer",
- "app.editPipeline.disclaimerWarning",
- "app.editPipeline.title",
- "app.editPipelineFields.pipeline",
- "app.editPipelineFields.pipelineVariables",
- "app.editPipelineForm.description",
- "app.editPipelineForm.name",
- "app.editPipelineForm.submit",
- "app.editPipelineForm.submitting",
- "app.editPipelineForm.success",
- "app.editPipelineForm.title",
- "app.editPipelineForm.validation.description",
- "app.editPipelineForm.validation.emptyName",
- "app.editPipelineForm.validation.versionDiffers",
- "app.editShadowAssignment.deleteAssignment",
- "app.editShadowAssignment.deleteAssignmentWarning",
- "app.editShadowAssignment.description",
- "app.editShadowAssignment.title",
- "app.editShadowAssignment.titleName",
- "app.editShadowAssignment.validation.versionDiffers",
- "app.editShadowAssignmentForm.isBonus",
- "app.editShadowAssignmentForm.isPublic",
- "app.editShadowAssignmentForm.maxPoints",
- "app.editShadowAssignmentForm.sendNotification",
- "app.editShadowAssignmentPointsForm.awardedAt",
- "app.editShadowAssignmentPointsForm.failed",
- "app.editShadowAssignmentPointsForm.note",
- "app.editShadowAssignmentPointsForm.points",
- "app.editShadowAssignmentPointsForm.removePoints",
- "app.editShadowAssignmentPointsForm.setNow",
- "app.editShadowAssignmentPointsForm.validation.pointsOutOfRange",
- "app.editSisTerm.advertiseUntil",
- "app.editSisTerm.beginning",
- "app.editSisTerm.end",
- "app.editSisTerm.title",
- "app.editSisTerm.validation.advertiseInLimits",
- "app.editSisTerm.validation.noAdvertiseUntil",
- "app.editSisTerm.validation.noBeginning",
- "app.editSisTerm.validation.noEnd",
- "app.editSolutionNoteForm.failed",
- "app.editSolutionNoteForm.note",
- "app.editSystemMessageForm.role",
- "app.editSystemMessageForm.title",
- "app.editSystemMessageForm.type",
- "app.editSystemMessageForm.validation.localizedText.text",
- "app.editSystemMessageForm.validation.roleEmpty",
- "app.editSystemMessageForm.validation.typeEmpty",
- "app.editSystemMessageForm.validation.visibleFromBeforeTo",
- "app.editSystemMessageForm.validation.visibleFromEmpty",
- "app.editSystemMessageForm.validation.visibleToEmpty",
- "app.editSystemMessageForm.visibleFrom",
- "app.editSystemMessageForm.visibleTo",
- "app.editTestsForm.changeCalculator",
- "app.editTestsForm.changeCalculator.submit",
- "app.editTestsForm.changeCalculator.submitting",
- "app.editTestsForm.changeCalculator.success",
- "app.editTestsForm.changeCalculatorDisabledTooltip",
- "app.editTestsForm.changeCalculatorModal.info",
- "app.editTestsForm.changeCalculatorModal.title",
- "app.editTestsForm.changeCalculatorModal.warningUniform",
- "app.editTestsForm.changeCalculatorModal.warningUniversalToWeighted",
- "app.editTestsForm.expandToggleTooltip",
- "app.editTestsForm.submit",
- "app.editTestsForm.submitting",
- "app.editTestsForm.success",
- "app.editTestsForm.validation.testName",
- "app.editTestsForm.validation.testNameInvalidCharacters",
- "app.editTestsForm.validation.testNameTaken",
- "app.editTestsTest.add",
- "app.editTestsTest.name",
- "app.editTestsTest.noTests",
- "app.editTestsTest.pointsPercentage",
- "app.editTestsTest.testUsedInExpression",
- "app.editTestsTest.weight",
- "app.editUser.description",
- "app.editUser.emailStillNotVerified",
- "app.editUser.emailStillNotVerifiedTitle",
- "app.editUser.isEmailAlreadyVefiried",
- "app.editUser.makeLocal",
- "app.editUser.title",
- "app.editUserProfile.degreesAfterName",
- "app.editUserProfile.degreesBeforeName",
- "app.editUserProfile.emptyLocalPassword",
- "app.editUserProfile.emptyLocalPasswordExplain",
- "app.editUserProfile.firstName",
- "app.editUserProfile.gravatarEnabled",
- "app.editUserProfile.lastName",
- "app.editUserProfile.passwordInstructions",
- "app.editUserProfile.passwordTitle",
- "app.editUserProfile.validation.emailNotValid",
- "app.editUserProfile.validation.emailTaken",
- "app.editUserProfile.validation.emptyEmail",
- "app.editUserProfile.validation.emptyFirstName",
- "app.editUserProfile.validation.emptyLastName",
- "app.editUserProfile.validation.emptyNewPassword",
- "app.editUserProfile.validation.emptyOldPassword",
- "app.editUserProfile.validation.passwordsDontMatch",
- "app.editUserProfile.validation.samePasswords",
- "app.editUserProfile.validation.shortFirstName",
- "app.editUserProfile.validation.shortLastName",
- "app.editUserProfileForm.title",
- "app.editUserRoleForm.title",
- "app.editUserSettings.assignmentCommentsEmails",
- "app.editUserSettings.assignmentDeadlineEmails",
- "app.editUserSettings.assignmentSubmitAfterAcceptedEmails",
- "app.editUserSettings.assignmentSubmitAfterReviewedEmails",
- "app.editUserSettings.darkTheme",
- "app.editUserSettings.defaultLanguage",
- "app.editUserSettings.defaultPage",
- "app.editUserSettings.defaultPage.dashboard",
- "app.editUserSettings.defaultPage.home",
- "app.editUserSettings.defaultPage.instance",
- "app.editUserSettings.emailsTitle",
- "app.editUserSettings.failed",
- "app.editUserSettings.newAssignmentEmails",
- "app.editUserSettings.openedSidebar",
- "app.editUserSettings.pointsChangedEmails",
- "app.editUserSettings.solutionCommentsEmails",
- "app.editUserSettings.submissionEvaluatedEmails",
- "app.editUserSettings.title",
- "app.editUserSettings.useGravatar",
- "app.editUserSettings.vimMode",
- "app.emailVerification.description",
- "app.emailVerification.failed",
- "app.emailVerification.progress",
- "app.emailVerification.requestAnotherLink",
- "app.emailVerification.title",
- "app.emailVerification.tokenExpired",
- "app.emailVerification.verified",
- "app.emailVerification.waiting",
- "app.environmentsList.noEnvironments",
- "app.evaluationDetail.buildSucceeded",
- "app.evaluationDetail.evaluatedAt",
- "app.evaluationDetail.explainCorrectness",
- "app.evaluationDetail.isCorrect",
- "app.evaluationDetail.isDebug",
- "app.evaluationDetail.notActualEvaluation",
- "app.evaluationDetail.scoredPoints",
- "app.evaluationDetail.title.compilationLogs",
- "app.evaluationDetail.title.details",
- "app.evaluationProgress.continue",
- "app.evaluationProgress.noWebSockets",
- "app.evaluationProgress.title",
- "app.evaluationProgressStatus.completed",
- "app.evaluationProgressStatus.failed",
- "app.evaluationProgressStatus.ok",
- "app.evaluationProgressStatus.skipped",
- "app.evaluationTable.empty",
- "app.evaluationTable.evaluatedAt",
- "app.evaluationTable.evaluationIsDebug",
- "app.evaluationTable.notAvailable",
- "app.evaluationTable.score",
- "app.exercise.addReferenceSolutionDetailed",
- "app.exercise.assignButton",
- "app.exercise.assignToGroup",
- "app.exercise.assignments",
- "app.exercise.attach",
- "app.exercise.breadcrumbTitle",
- "app.exercise.defaultValueForAssignment",
- "app.exercise.description",
- "app.exercise.description.visibleOnlyToSupervisors",
- "app.exercise.detach",
- "app.exercise.detailTitle",
- "app.exercise.difficulty",
- "app.exercise.editConfig",
- "app.exercise.editLimits",
- "app.exercise.editSettings",
- "app.exercise.forked",
- "app.exercise.groups",
- "app.exercise.isBroken",
- "app.exercise.isBrokenShort",
- "app.exercise.isLocked",
- "app.exercise.isLockedExplanation",
- "app.exercise.isPublic",
- "app.exercise.isPublicExplanation",
- "app.exercise.manageGroupAttachments",
- "app.exercise.mergeJudgeLogsExplanation",
- "app.exercise.noRefSolutions",
- "app.exercise.noReferenceSolutions",
- "app.exercise.noReferenceSolutionsDetailed",
- "app.exercise.overview",
- "app.exercise.referenceSolution.deleteConfirm",
- "app.exercise.referenceSolutionDetail",
- "app.exercise.referenceSolutionTitle",
- "app.exercise.referenceSolutionsBox",
- "app.exercise.runtimes",
- "app.exercise.solutionFilesLimitExplanation",
- "app.exercise.solutionSizeLimitExplanation",
- "app.exercise.submitReferenceSoution",
- "app.exercise.title",
- "app.exercise.validationErrors.config",
- "app.exercise.validationErrors.limits",
- "app.exercise.validationErrors.noConfigs",
- "app.exercise.validationErrors.noHwGroups",
- "app.exercise.validationErrors.noRuntimes",
- "app.exercise.validationErrors.noTests",
- "app.exercise.validationErrors.noTexts",
- "app.exercise.validationErrors.rawTitle",
- "app.exercise.validationErrors.runtimes",
- "app.exercise.validationErrors.score",
- "app.exercise.validationLinks.limits",
- "app.exercise.validationLinks.noConfigs",
- "app.exercise.validationLinks.noHwGroups",
- "app.exercise.validationLinks.noTexts",
- "app.exercise.validationLinks.runtimes",
- "app.exercise.validationLinks.tests",
- "app.exerciseAssignments.description",
- "app.exerciseAssignments.multiAssignBox",
- "app.exerciseConfigTypeButton.advancedConfiguration",
- "app.exerciseConfigTypeButton.confirm",
- "app.exerciseConfigTypeButton.simpleConfiguration",
- "app.exercises.difficultyIcon.easy",
- "app.exercises.difficultyIcon.hard",
- "app.exercises.difficultyIcon.medium",
- "app.exercises.difficultyIcon.unknown",
- "app.exercises.failedDetail",
- "app.exercises.listEdit",
- "app.exercises.listEditConfig",
- "app.exercises.listEditLimits",
- "app.exercises.listTitle",
- "app.exercises.loadingDetail",
- "app.exercises.title",
- "app.exercisesList.created",
- "app.exercisesList.difficulty",
- "app.exercisesList.empty",
- "app.exercisesList.groups",
- "app.exercisesListItem.noGroups",
- "app.exitCodes.csharp.0",
- "app.exitCodes.csharp.1",
- "app.exitCodes.csharp.101",
- "app.exitCodes.csharp.102",
- "app.exitCodes.csharp.103",
- "app.exitCodes.csharp.104",
- "app.exitCodes.csharp.105",
- "app.exitCodes.csharp.106",
- "app.exitCodes.csharp.107",
- "app.exitCodes.csharp.108",
- "app.exitCodes.csharp.109",
- "app.exitCodes.csharp.200",
- "app.exitCodes.csharp.201",
- "app.exitCodes.csharp.202",
- "app.exitCodes.java.0",
- "app.exitCodes.java.1",
- "app.exitCodes.java.100",
- "app.exitCodes.java.101",
- "app.exitCodes.java.102",
- "app.exitCodes.java.103",
- "app.exitCodes.java.104",
- "app.exitCodes.java.105",
- "app.exitCodes.java.106",
- "app.exitCodes.java.107",
- "app.exitCodes.java.108",
- "app.exitCodes.java.109",
- "app.exitCodes.java.110",
- "app.exitCodes.java.111",
- "app.exitCodes.java.112",
- "app.exitCodes.java.113",
- "app.exitCodes.java.2",
- "app.exitCodes.pascal.0",
- "app.exitCodes.pascal.1",
- "app.exitCodes.pascal.100",
- "app.exitCodes.pascal.101",
- "app.exitCodes.pascal.102",
- "app.exitCodes.pascal.103",
- "app.exitCodes.pascal.104",
- "app.exitCodes.pascal.105",
- "app.exitCodes.pascal.106",
- "app.exitCodes.pascal.12",
- "app.exitCodes.pascal.15",
- "app.exitCodes.pascal.150",
- "app.exitCodes.pascal.151",
- "app.exitCodes.pascal.152",
- "app.exitCodes.pascal.154",
- "app.exitCodes.pascal.156",
- "app.exitCodes.pascal.157",
- "app.exitCodes.pascal.158",
- "app.exitCodes.pascal.159",
- "app.exitCodes.pascal.16",
- "app.exitCodes.pascal.160",
- "app.exitCodes.pascal.161",
- "app.exitCodes.pascal.162",
- "app.exitCodes.pascal.17",
- "app.exitCodes.pascal.2",
- "app.exitCodes.pascal.200",
- "app.exitCodes.pascal.201",
- "app.exitCodes.pascal.202",
- "app.exitCodes.pascal.203",
- "app.exitCodes.pascal.204",
- "app.exitCodes.pascal.205",
- "app.exitCodes.pascal.206",
- "app.exitCodes.pascal.207",
- "app.exitCodes.pascal.210",
- "app.exitCodes.pascal.211",
- "app.exitCodes.pascal.212",
- "app.exitCodes.pascal.213",
- "app.exitCodes.pascal.214",
- "app.exitCodes.pascal.215",
- "app.exitCodes.pascal.216",
- "app.exitCodes.pascal.217",
- "app.exitCodes.pascal.218",
- "app.exitCodes.pascal.219",
- "app.exitCodes.pascal.222",
- "app.exitCodes.pascal.223",
- "app.exitCodes.pascal.224",
- "app.exitCodes.pascal.225",
- "app.exitCodes.pascal.227",
- "app.exitCodes.pascal.229",
- "app.exitCodes.pascal.231",
- "app.exitCodes.pascal.232",
- "app.exitCodes.pascal.3",
- "app.exitCodes.pascal.4",
- "app.exitCodes.pascal.5",
- "app.exitCodes.pascal.6",
- "app.exitCodes.python3.0",
- "app.exitCodes.python3.1",
- "app.exitCodes.python3.101",
- "app.exitCodes.python3.102",
- "app.exitCodes.python3.103",
- "app.exitCodes.python3.104",
- "app.exitCodes.python3.105",
- "app.exitCodes.python3.106",
- "app.exitCodes.python3.107",
- "app.exitCodes.python3.108",
- "app.exitCodes.python3.109",
- "app.exitCodes.python3.110",
- "app.exitCodes.python3.111",
- "app.exitCodes.python3.112",
- "app.exitCodes.python3.113",
- "app.exitCodes.python3.114",
- "app.exitCodes.python3.115",
- "app.exitCodes.unknown",
- "app.expandingInputFilesField.noFiles",
- "app.expandingInputFilesField.tooltip.add",
- "app.expandingInputFilesField.tooltip.remove",
- "app.expandingInputFilesField.validateEmpty",
- "app.expandingTextField.noItems",
- "app.expandingTextField.tooltip.add",
- "app.expandingTextField.tooltip.addAbove",
- "app.expandingTextField.tooltip.remove",
- "app.externalLinkPreview.fetchFailed",
- "app.externalLinkPreview.httpFailed",
- "app.externalLinkPreview.noTextContent",
- "app.externalLinkPreview.readingTextFailed",
- "app.externalLinkPreview.showAsMarkdown",
- "app.externalLinkPreview.title",
- "app.externalLogin.button.authenticate",
- "app.externalLogin.button.authenticated",
- "app.externalLogin.button.authenticating",
- "app.externalLogin.description",
- "app.externalLogin.failed",
- "app.externalLogin.help",
- "app.externalLogin.title",
- "app.externalRegistrationForm.gdprConfirm",
- "app.externalRegistrationForm.instance",
- "app.externalRegistrationForm.validation.gdpr",
- "app.externalRegistrationForm.validation.instanceId",
- "app.failedGroupDetail.msg",
- "app.failedSubmissionDetail.description",
- "app.failedSubmissionDetail.title",
- "app.failureList.headLink",
- "app.failureList.headResolutionNote",
- "app.failureList.headResolvedAt",
- "app.failureList.headType",
- "app.failureList.noFailures",
- "app.failureListItem.referenceAssignment",
- "app.failureListItem.studentAssignment",
- "app.faq.description",
- "app.faq.title",
- "app.field.isRequired",
- "app.fields.limits.memory",
- "app.fields.limits.time",
- "app.filesTable.addFiles",
- "app.filesTable.downloadArchive",
- "app.filesTable.empty",
- "app.filesTable.fileName",
- "app.filesTable.fileSize",
- "app.filesTable.originalFileName",
- "app.filterArchiveGroupsForm.searchName",
- "app.filterArchiveGroupsForm.showAll",
- "app.filterExercisesListForm.allButton",
- "app.filterExercisesListForm.author",
- "app.filterExercisesListForm.hideAdvancedFilters",
- "app.filterExercisesListForm.mineButton",
- "app.filterExercisesListForm.searchName",
- "app.filterExercisesListForm.selectedEnvironments",
- "app.filterExercisesListForm.selectedTags",
- "app.filterExercisesListForm.showAllFilters",
- "app.filterUsersListForm.searchName",
- "app.footer.copyright",
- "app.footer.version",
- "app.forkExerciseForm.confirmSubmit",
- "app.forkExerciseForm.showForkedExerciseButton",
- "app.forkExerciseForm.submit",
- "app.forkExerciseForm.submitting",
- "app.forkExerciseForm.success",
- "app.forkExerciseForm.successMessage",
- "app.generateTokenForm.copied",
- "app.generateTokenForm.copyToClipboard",
- "app.generateTokenForm.day",
- "app.generateTokenForm.expiration",
- "app.generateTokenForm.failed",
- "app.generateTokenForm.generate",
- "app.generateTokenForm.generated",
- "app.generateTokenForm.generating",
- "app.generateTokenForm.hour",
- "app.generateTokenForm.info",
- "app.generateTokenForm.lastToken",
- "app.generateTokenForm.month",
- "app.generateTokenForm.scope.master",
- "app.generateTokenForm.scope.readAll",
- "app.generateTokenForm.scope.refresh",
- "app.generateTokenForm.scopes",
- "app.generateTokenForm.title",
- "app.generateTokenForm.validate.expirationTooLong",
- "app.generateTokenForm.validate.noScopes",
- "app.generateTokenForm.warnBothMasterAndReadAll",
- "app.generateTokenForm.week",
- "app.generateTokenForm.year",
- "app.group.adminsView.addSupervisor",
- "app.group.archivedExplain",
- "app.group.assignments",
- "app.group.assignmentsLong",
- "app.group.createExercise",
- "app.group.info",
- "app.group.isPublicWarning",
- "app.group.mailtoAll",
- "app.group.notDirectlyArchived",
- "app.group.organizationalExplain",
- "app.group.setRoot",
- "app.group.spervisorsView.addStudent",
- "app.group.spervisorsView.groupExercises",
- "app.group.unbind",
- "app.group.unbind.confirmQuestion",
- "app.group.unsetRoot",
- "app.groupDetail.assignments",
- "app.groupDetail.bindings.genericProvider",
- "app.groupDetail.bindings.sis",
- "app.groupDetail.description",
- "app.groupDetail.externalId",
- "app.groupDetail.hasPublicStats",
- "app.groupDetail.isPublic",
- "app.groupDetail.loading",
- "app.groupDetail.newShadowAssignment",
- "app.groupDetail.noDescription",
- "app.groupDetail.pageDescription",
- "app.groupDetail.shadowAssignments",
- "app.groupDetail.studentsResultsTable",
- "app.groupDetail.subgroups",
- "app.groupDetail.supervisors",
- "app.groupDetail.threshold",
- "app.groupInfo.pageDescription",
- "app.groupResultsTable.downloadCSV",
- "app.groupResultsTable.maxPointsRow",
- "app.groupResultsTableRow.noStudents",
- "app.groupTree.treeViewLeaf.archivedTooltip",
- "app.groupTree.treeViewLeaf.organizationalTooltip",
- "app.groupTree.treeViewLeaf.publicTooltip",
- "app.groups.joinGroupButton",
- "app.groups.leaveGroupButton",
- "app.groups.makeGroupAdminButton",
- "app.groups.makeSupervisorButton",
- "app.groups.removeFromGroup",
- "app.groups.removeGroupAdminButton",
- "app.groups.removeSupervisorButton",
- "app.hardwareGroupMetadata.cpuTimeOverlay",
- "app.hardwareGroupMetadata.description",
- "app.hardwareGroupMetadata.id",
- "app.hardwareGroupMetadata.memoryConstraints",
- "app.hardwareGroupMetadata.memoryOverlay",
- "app.hardwareGroupMetadata.timeOverlay",
- "app.hardwareGroupMetadata.timePerExerciseConstraints",
- "app.hardwareGroupMetadata.timePerTestConstraints",
- "app.hardwareGroupMetadata.title",
- "app.hardwareGroupMetadata.wallTimeOverlay",
- "app.header.languageSwitching.translationTitle",
- "app.headerNotification.copiedToClippboard",
- "app.homepage.aboutContentP1",
- "app.homepage.aboutContentP2",
- "app.homepage.aboutTitle",
- "app.homepage.acknowledgementContent",
- "app.homepage.acknowledgementTitle",
- "app.homepage.description",
- "app.homepage.githubWebappRepository",
- "app.homepage.help",
- "app.homepage.helpContent",
- "app.homepage.howToGiveFeedback",
- "app.homepage.title",
- "app.homepage.whatIsRecodex",
- "app.homepage.whatIsRecodexContent",
- "app.homepage.whereToReportBugs",
- "app.homepage.whereToReportBugsText",
- "app.instance.description",
- "app.instance.edit",
- "app.instance.groups.noGroups",
- "app.instance.groupsTitle",
- "app.instance.hasValidLicence",
- "app.instance.licencesTitle",
- "app.instance.title",
- "app.instanceDetail.admin",
- "app.instanceDetail.description",
- "app.instanceDetail.noDescription",
- "app.instances.description",
- "app.instances.listTitle",
- "app.instances.title",
- "app.instancesTable.admin",
- "app.instancesTable.validLicence",
- "app.leaveGroup.confirm",
- "app.licencesTable.isValid",
- "app.licencesTable.noLicences",
- "app.licencesTable.note",
- "app.licencesTable.validUntil",
- "app.localizedTexts.externalLink",
- "app.localizedTexts.noText",
- "app.localizedTexts.studentHintHeading",
- "app.localizedTexts.validation.noLocalizedText",
- "app.login.alreadyLoggedIn",
- "app.login.cannotRememberPassword",
- "app.login.description",
- "app.login.loginIsRequired",
- "app.login.resetPassword",
- "app.login.title",
- "app.loginForm.email",
- "app.loginForm.login",
- "app.loginForm.password",
- "app.loginForm.processing",
- "app.loginForm.success",
- "app.loginForm.title",
- "app.loginForm.validation.emailIsNotAnEmail",
- "app.loginForm.validation.emptyEmail",
- "app.loginForm.validation.emptyPassword",
- "app.logout",
- "app.markdownTextArea.canUseMarkdown",
- "app.markdownTextArea.empty",
- "app.markdownTextArea.preview",
- "app.markdownTextArea.showPreview",
- "app.maybeBonusAssignmentIcon.isBonus",
- "app.maybePublicIcon.visibleFrom",
- "app.maybeVisibleIcon.isHidden",
- "app.maybeVisibleIcon.isVisible",
- "app.multiAssignForm.showAllGroups",
- "app.multiAssignForm.showMyGroups",
- "app.multiAssignForm.submit",
- "app.multiAssignForm.submitting",
- "app.multiAssignForm.success",
- "app.multiAssignForm.successDescription",
- "app.multiAssignForm.successHeading",
- "app.notFound.description",
- "app.notFound.text",
- "app.notFound.title",
- "app.notifications.hideAll",
- "app.notifications.showAll",
- "app.notifications.title",
- "app.numericTextField.validationFailed",
- "app.numericTextField.validationFailedMax",
- "app.numericTextField.validationFailedMin",
- "app.numericTextField.validationFailedMinMax",
- "app.organizationalGroupButton.set",
- "app.organizationalGroupButton.unset",
- "app.page.failed",
- "app.page.failedDescription.explain",
- "app.page.failedDescription.sorry",
- "app.page.loadingDescription",
- "app.paginationContainer.showingRange",
- "app.passwordStrength.bad",
- "app.passwordStrength.good",
- "app.passwordStrength.ok",
- "app.passwordStrength.somewhatOk",
- "app.passwordStrength.unknown",
- "app.passwordStrength.worst",
- "app.pipeline.description",
- "app.pipeline.detailTitle",
- "app.pipeline.editSettings",
- "app.pipeline.exercises",
- "app.pipeline.failedDetail",
- "app.pipeline.loadingDetail",
- "app.pipeline.parameters",
- "app.pipeline.publicExercise",
- "app.pipeline.runtimes",
- "app.pipeline.title",
- "app.pipeline.version",
- "app.pipeline.visualization",
- "app.pipelineEditor.AddBoxForm.title",
- "app.pipelineEditor.BoxForm.conflictingPortType",
- "app.pipelineEditor.BoxForm.emptyName",
- "app.pipelineEditor.BoxForm.failed",
- "app.pipelineEditor.BoxForm.loop",
- "app.pipelineEditor.BoxForm.missingType",
- "app.pipelineEditor.BoxForm.portsIn",
- "app.pipelineEditor.BoxForm.portsOut",
- "app.pipelineEditor.BoxForm.type",
- "app.pipelineEditor.EditBoxForm.title",
- "app.pipelineFilesTable.description",
- "app.pipelineFilesTable.title",
- "app.pipelineParams.hasEntryPoint",
- "app.pipelineParams.hasExtraFiles",
- "app.pipelineParams.isCompilationPipeline",
- "app.pipelineParams.isExecutionPipeline",
- "app.pipelineParams.judgeOnlyPipeline",
- "app.pipelineParams.producesFiles",
- "app.pipelineParams.producesStdout",
- "app.pipelineVisualEditor.addBoxButton",
- "app.pipelines.createNew",
- "app.pipelines.description",
- "app.pipelines.listTitle",
- "app.pipelines.title",
- "app.pipelinesList.authoredPipelineIconTooltip",
- "app.pipelinesList.compilationIconTooltip",
- "app.pipelinesList.empty",
- "app.pipelinesList.executionIconTooltip",
- "app.pipelinesList.fileIconTooltip",
- "app.pipelinesList.judgeOnlyIconTooltip",
- "app.pipelinesList.stdoutIconTooltip",
- "app.pipelinesList.universalPipelineIconTooltip",
- "app.plantSisTerm.noGroupsSelected",
- "app.plantSisTerm.plantGroups",
- "app.plantSisTerm.planted",
- "app.plantSisTerm.planting",
- "app.plantSisTerm.title",
- "app.pointsForm.bonusPoints",
- "app.pointsForm.failed",
- "app.pointsForm.pointsOverride",
- "app.pointsForm.scoredPoints",
- "app.pointsForm.title",
- "app.pointsForm.validation.overrideOutOfRange",
- "app.portsField.empty",
- "app.randomMessages.error",
- "app.randomMessages.last",
- "app.randomMessages.m1",
- "app.randomMessages.m10",
- "app.randomMessages.m11",
- "app.randomMessages.m12",
- "app.randomMessages.m13",
- "app.randomMessages.m14",
- "app.randomMessages.m15",
- "app.randomMessages.m16",
- "app.randomMessages.m17",
- "app.randomMessages.m18",
- "app.randomMessages.m19",
- "app.randomMessages.m2",
- "app.randomMessages.m20",
- "app.randomMessages.m21",
- "app.randomMessages.m22",
- "app.randomMessages.m23",
- "app.randomMessages.m24",
- "app.randomMessages.m25",
- "app.randomMessages.m26",
- "app.randomMessages.m27",
- "app.randomMessages.m28",
- "app.randomMessages.m29",
- "app.randomMessages.m3",
- "app.randomMessages.m30",
- "app.randomMessages.m31",
- "app.randomMessages.m32",
- "app.randomMessages.m33",
- "app.randomMessages.m34",
- "app.randomMessages.m35",
- "app.randomMessages.m36",
- "app.randomMessages.m37",
- "app.randomMessages.m4",
- "app.randomMessages.m5",
- "app.randomMessages.m6",
- "app.randomMessages.m7",
- "app.randomMessages.m8",
- "app.randomMessages.m9",
- "app.referenceSolution.exerciseBroken",
- "app.referenceSolution.exerciseNoLongerHasEnvironment",
- "app.referenceSolutionDetail.exercise",
- "app.referenceSolutionDetail.solutionFilesLimitExceeded",
- "app.referenceSolutionDetail.solutionSizeLimitExceeded",
- "app.referenceSolutionDetail.title.details",
- "app.referenceSolutionTable.noDescription",
- "app.registration.description",
- "app.registration.external.gotoSignin",
- "app.registration.external.link",
- "app.registration.external.mail",
- "app.registration.externalInfo",
- "app.registration.externalTitle",
- "app.registration.title",
- "app.registrationForm.createAccount",
- "app.registrationForm.email",
- "app.registrationForm.failed",
- "app.registrationForm.firstName",
- "app.registrationForm.lastName",
- "app.registrationForm.password",
- "app.registrationForm.passwordConfirm",
- "app.registrationForm.passwordStrength",
- "app.registrationForm.processing",
- "app.registrationForm.success",
- "app.registrationForm.title",
- "app.registrationForm.validation.emailAlreadyTaken",
- "app.registrationForm.validation.emailIsNotAnEmail",
- "app.registrationForm.validation.emptyEmail",
- "app.registrationForm.validation.emptyFirstName",
- "app.registrationForm.validation.emptyLastName",
- "app.registrationForm.validation.emptyPassword",
- "app.registrationForm.validation.passwordDontMatch",
- "app.registrationForm.validation.shortFirstName",
- "app.registrationForm.validation.shortLastName",
- "app.relocateGroupForm.parentGroup",
- "app.relocateGroupForm.submit",
- "app.relocateGroupForm.submitting",
- "app.relocateGroupForm.success",
- "app.removeFromGroup.confirm",
- "app.resendEmailVerification.failed",
- "app.resendEmailVerification.resend",
- "app.resendEmailVerification.resending",
- "app.resendEmailVerification.resent",
- "app.resetPassword.description",
- "app.resetPassword.email",
- "app.resetPassword.failed",
- "app.resetPassword.processing",
- "app.resetPassword.resetPassword",
- "app.resetPassword.succeeded",
- "app.resetPassword.success",
- "app.resetPassword.title",
- "app.resetPassword.validation.emailIsNotAnEmail",
- "app.resetPassword.validation.emptyEmail",
- "app.resourceRenderer.loadingFailed",
- "app.resubmitSolution.confirm",
- "app.resubmitSolution.resubmitAll",
- "app.resubmitSolution.resubmitAll.failedJobTitle",
- "app.resubmitSolution.resubmitAll.jobCreatedBy",
- "app.resubmitSolution.resubmitAll.pendingJobTitle",
- "app.resubmitSolution.resubmitAllConfirm",
- "app.resubmitSolution.resubmitDebug",
- "app.resubmitSolution.resubmitNondebug",
- "app.resultsArchiveInfoBox.description",
- "app.resultsArchiveInfoBox.title",
- "app.resultsTable.total",
- "app.reviewedSolution.revoke",
- "app.reviewedSolution.set",
- "app.roles.description.empoweredSupervisor",
- "app.roles.description.student",
- "app.roles.description.superadmin",
- "app.roles.description.supervisor",
- "app.roles.description.supervisorStudent",
- "app.roles.empoweredSupervisor",
- "app.roles.student",
- "app.roles.students",
- "app.roles.superadmin",
- "app.roles.superadmins",
- "app.roles.supervisor",
- "app.roles.supervisorStudent",
- "app.roles.supervisorStudents",
- "app.roles.supervisors",
- "app.roles.supervisorsEmpowered",
- "app.scoreCalculators.uniform.caption",
- "app.scoreCalculators.uniform.description",
- "app.scoreCalculators.universal.caption",
- "app.scoreCalculators.universal.description",
- "app.scoreCalculators.weighted.caption",
- "app.scoreCalculators.weighted.description",
- "app.scoreConfigExpression.addFunction",
- "app.scoreConfigExpression.addLiteral",
- "app.scoreConfigExpression.addNewParent",
- "app.scoreConfigExpression.addTestResult",
- "app.scoreConfigExpression.avg.description",
- "app.scoreConfigExpression.clamp.description",
- "app.scoreConfigExpression.copy",
- "app.scoreConfigExpression.debug.explain",
- "app.scoreConfigExpression.debug.title",
- "app.scoreConfigExpression.div.description",
- "app.scoreConfigExpression.editFunctionDialog.addDescription",
- "app.scoreConfigExpression.editFunctionDialog.editDescription",
- "app.scoreConfigExpression.editFunctionNodeDialog.title",
- "app.scoreConfigExpression.editLiteralDialog.invalidInput",
- "app.scoreConfigExpression.editLiteralNodeDialog.title",
- "app.scoreConfigExpression.editTestDialog.description",
- "app.scoreConfigExpression.editTestNodeDialog.title",
- "app.scoreConfigExpression.help.li1",
- "app.scoreConfigExpression.help.li2",
- "app.scoreConfigExpression.help.li3",
- "app.scoreConfigExpression.help.li4",
- "app.scoreConfigExpression.help.p1",
- "app.scoreConfigExpression.help.p2",
- "app.scoreConfigExpression.help.p3",
- "app.scoreConfigExpression.help.p4",
- "app.scoreConfigExpression.help.title",
- "app.scoreConfigExpression.max.description",
- "app.scoreConfigExpression.min.description",
- "app.scoreConfigExpression.move",
- "app.scoreConfigExpression.mul.description",
- "app.scoreConfigExpression.neg.description",
- "app.scoreConfigExpression.openDebugDialog",
- "app.scoreConfigExpression.openInfoDialog",
- "app.scoreConfigExpression.openOptimizeDialog",
- "app.scoreConfigExpression.optimize.allButton",
- "app.scoreConfigExpression.optimize.allInfo",
- "app.scoreConfigExpression.optimize.info",
- "app.scoreConfigExpression.optimize.optimizeButton",
- "app.scoreConfigExpression.optimize.optimizeInfo",
- "app.scoreConfigExpression.optimize.removeConstantsButton",
- "app.scoreConfigExpression.optimize.removeConstantsInfo",
- "app.scoreConfigExpression.optimize.title",
- "app.scoreConfigExpression.redo",
- "app.scoreConfigExpression.removeNode",
- "app.scoreConfigExpression.removeOnlyNode",
- "app.scoreConfigExpression.sub.description",
- "app.scoreConfigExpression.sum.description",
- "app.scoreConfigExpression.swapNodes",
- "app.scoreConfigExpression.test-result.description",
- "app.scoreConfigExpression.undo",
- "app.scoreConfigExpression.value.description",
- "app.scoreConfigInfo.calculator",
- "app.scoreConfigInfo.createdAt",
- "app.scoreConfigInfo.dialogTitle",
- "app.scoreConfigInfo.missing",
- "app.scoreConfigInfo.missingButCanResubmit",
- "app.scoreConfigInfo.missingTitle",
- "app.scoreConfigInfo.rawConfig",
- "app.scoreConfigInfoWeighted.noTests",
- "app.scoreConfigInfoWeighted.score",
- "app.scoreConfigInfoWeighted.test",
- "app.scoreConfigInfoWeighted.totals",
- "app.scoreConfigInfoWeighted.weight",
- "app.serverManagement.description",
- "app.serverManagement.title",
- "app.shadowAssignment.editSettings",
- "app.shadowAssignment.isBonus",
- "app.shadowAssignment.isPublic",
- "app.shadowAssignment.maxPoints",
- "app.shadowAssignment.noName",
- "app.shadowAssignment.title",
- "app.shadowAssignmentPointsDetail.awardedAt",
- "app.shadowAssignmentPointsDetail.awardedBy",
- "app.shadowAssignmentPointsDetail.noPoints",
- "app.shadowAssignmentPointsDetail.note",
- "app.shadowAssignmentPointsDetail.points",
- "app.shadowAssignmentPointsDetail.title",
- "app.shadowAssignmentPointsTable.awardedAt",
- "app.shadowAssignmentPointsTable.createPointsButton",
- "app.shadowAssignmentPointsTable.formModalTitle",
- "app.shadowAssignmentPointsTable.note",
- "app.shadowAssignmentPointsTable.receivedPoints",
- "app.shadowAssignmentPointsTable.removePointsButtonConfirmation",
- "app.shadowAssignmentPointsTable.title",
- "app.shadowAssignmentPointsTable.updatePointsButton",
- "app.shadowAssignmentPointsTable.user",
- "app.shadowAssignmentsTable.loading",
- "app.shadowAssignmentsTable.noAssignments",
- "app.sidebar.menu.admin.failures",
- "app.sidebar.menu.admin.instances",
- "app.sidebar.menu.admin.messages",
- "app.sidebar.menu.admin.server",
- "app.sidebar.menu.admin.sis",
- "app.sidebar.menu.admin.users",
- "app.sidebar.menu.archive",
- "app.sidebar.menu.createAccount",
- "app.sidebar.menu.dashboard",
- "app.sidebar.menu.exercises",
- "app.sidebar.menu.faq",
- "app.sidebar.menu.memberOfGroups",
- "app.sidebar.menu.pipelines",
- "app.sidebar.menu.signIn",
- "app.sidebar.menu.supervisorOfGroups",
- "app.sidebar.menu.title",
- "app.sisBindGroupForm.emptyGroup",
- "app.sisBindGroupForm.failed",
- "app.sisBindGroupForm.group",
- "app.sisBindGroupForm.info",
- "app.sisBindGroupForm.submit",
- "app.sisBindGroupForm.submitting",
- "app.sisBindGroupForm.success",
- "app.sisBindGroupForm.title",
- "app.sisCreateGroupForm.emptyParentGroup",
- "app.sisCreateGroupForm.failed",
- "app.sisCreateGroupForm.info",
- "app.sisCreateGroupForm.parentGroup",
- "app.sisCreateGroupForm.submit",
- "app.sisCreateGroupForm.submitting",
- "app.sisCreateGroupForm.success",
- "app.sisCreateGroupForm.title",
- "app.sisIntegration.deleteConfirm",
- "app.sisIntegration.description",
- "app.sisIntegration.identityInfo",
- "app.sisIntegration.list",
- "app.sisIntegration.noAccessible",
- "app.sisIntegration.noCasIdentifier",
- "app.sisIntegration.noCoursesGroupsAvailable",
- "app.sisIntegration.noSisGroups",
- "app.sisIntegration.plantButton",
- "app.sisIntegration.title",
- "app.sisIntegration.yearTerm",
- "app.sisSupervisor.bindGroupButton",
- "app.sisSupervisor.createGroupButton",
- "app.sisSupervisor.groupAdmins",
- "app.sisSupervisor.groupsAlreadyExist",
- "app.sisSupervisor.lab",
- "app.sisSupervisor.lecture",
- "app.sisSupervisor.multiGroupPopover.title",
- "app.sisSupervisor.noAccessible",
- "app.sisSupervisor.noSisGroups",
- "app.sisSupervisor.noUsersInNewGroupsWarning",
- "app.sisSupervisor.notScheduled",
- "app.sisSupervisor.organizationalGroupWarning",
- "app.sisSupervisor.sisGroupsCreate",
- "app.sisSupervisor.sisGroupsCreateExplain",
- "app.sisSupervisor.yearTerm",
- "app.solution.accepted",
- "app.solution.anotherAcceptedWarning",
- "app.solution.anotherBestWarning",
- "app.solution.beforeFirstDeadline",
- "app.solution.beforeSecondDeadline",
- "app.solution.best",
- "app.solution.dotnetResubmitTemporaryDisabled",
- "app.solution.editNoteModalTitle",
- "app.solution.emptyNote",
- "app.solution.environment",
- "app.solution.environmentNotAllowedCannotResubmit",
- "app.solution.lastReviewed",
- "app.solution.lastSolution",
- "app.solution.note",
- "app.solution.reviewed",
- "app.solution.scoredPoints",
- "app.solution.solutionAttempt",
- "app.solution.solutionAttemptValue",
- "app.solution.submittedAt",
- "app.solution.title",
- "app.solutionArchiveInfoBox.description",
- "app.solutionArchiveInfoBox.title",
- "app.solutionsTable.commentsIcon.count",
- "app.solutionsTable.commentsIcon.last",
- "app.solutionsTable.environment",
- "app.solutionsTable.failedLoading",
- "app.solutionsTable.loading",
- "app.solutionsTable.noSolutionsFound",
- "app.solutionsTable.note",
- "app.solutionsTable.receivedPoints",
- "app.solutionsTable.reviewedTooltip",
- "app.solutionsTable.rowsCount",
- "app.solutionsTable.solutionValidity",
- "app.solutionsTable.submissionDate",
- "app.solutionsTable.submitNewSolution",
- "app.solutionsTable.title",
- "app.sourceCodeViewer.downloadButton",
- "app.sourceCodeViewer.incompleteWarning",
- "app.sourceCodeViewer.utf8Warning",
- "app.studentsList.gainedPointsOfWithoutBreakingSpaces",
- "app.studentsList.noStudents",
- "app.submission.evaluation.bonusPoints",
- "app.submission.evaluation.status.failed",
- "app.submission.evaluation.status.isCorrect",
- "app.submission.evaluation.status.solutionMissingSubmission",
- "app.submission.evaluation.status.systemFailiure",
- "app.submission.evaluation.status.workInProgress",
- "app.submission.evaluation.title",
- "app.submission.evaluation.title.testResults",
- "app.submission.evaluationStatus",
- "app.submissionEvaluation.confirmDeleteLastSubmission",
- "app.submissionEvaluation.evaluationFailedHeading",
- "app.submissionEvaluation.evaluationFailedInternalError",
- "app.submissionEvaluation.evaluationFailedMessage",
- "app.submissionEvaluation.evaluationFailureResolved",
- "app.submissionEvaluation.evaluationFailureResolvedNote",
- "app.submissionEvaluation.noEvaluationYet",
- "app.submissionEvaluation.noEvaluationsWhatSoEver",
- "app.submissionEvaluation.show",
- "app.submissionEvaluation.tableInfo",
- "app.submissionEvaluation.title",
- "app.submissionEvaluation.visible",
- "app.submissionFailures.description",
- "app.submissionFailures.failed",
- "app.submissionFailures.failedDescription",
- "app.submissionFailures.listTitle",
- "app.submissionFailures.loading",
- "app.submissionFailures.loadingDescription",
- "app.submissionFailures.resolve",
- "app.submissionFailures.resolveMaxLengthExceeded",
- "app.submissionFailures.resolveNote",
- "app.submissionFailures.resolveTitle",
- "app.submissionFailures.sendEmail",
- "app.submissionFailures.title",
- "app.submissionStatus.accepted",
- "app.submissions.testResultsTable.correctness",
- "app.submissions.testResultsTable.cpuTimeExplain",
- "app.submissions.testResultsTable.exitCode",
- "app.submissions.testResultsTable.hideLog",
- "app.submissions.testResultsTable.logIsPrivate",
- "app.submissions.testResultsTable.memoryExceeded",
- "app.submissions.testResultsTable.overallTestResult",
- "app.submissions.testResultsTable.primaryLog",
- "app.submissions.testResultsTable.secondaryLog",
- "app.submissions.testResultsTable.showLog",
- "app.submissions.testResultsTable.signalTooltip",
- "app.submissions.testResultsTable.statusFailed",
- "app.submissions.testResultsTable.statusOK",
- "app.submissions.testResultsTable.statusSkipped",
- "app.submissions.testResultsTable.timeExceeded",
- "app.submissions.testResultsTable.wallTimeExplain",
- "app.submistSolution.instructions",
- "app.submistSolution.submitFailed",
- "app.submitButton.invalid",
- "app.submitRefSolution.noteLabel",
- "app.submitRefSolution.title",
- "app.submitSolution.addFile",
- "app.submitSolution.dragAndDrop",
- "app.submitSolution.emptyNoteSubmitConfirm",
- "app.submitSolution.emptyNoteWarning",
- "app.submitSolution.entryPoint",
- "app.submitSolution.limitsExceeded",
- "app.submitSolution.limitsExceededCount",
- "app.submitSolution.limitsExceededSize",
- "app.submitSolution.linkToWiki",
- "app.submitSolution.noEnvironments",
- "app.submitSolution.noteLabel",
- "app.submitSolution.runtimeEnvironment",
- "app.submitSolution.title",
- "app.submitSolution.uploadFilesFirst",
- "app.submitSolution.validating",
- "app.sudebar.menu.admin.title",
- "app.supplementaryFiles.cannotDeleteExplain",
- "app.supplementaryFiles.deleteConfirm",
- "app.supplementaryFilesTable.description",
- "app.supplementaryFilesTable.title",
- "app.systemMessages.acceptActiveMessages",
- "app.systemMessages.description",
- "app.systemMessages.failed",
- "app.systemMessages.failedDescription",
- "app.systemMessages.listTitle",
- "app.systemMessages.loading",
- "app.systemMessages.loadingDescription",
- "app.systemMessages.newSystemMessage",
- "app.systemMessages.title",
- "app.systemMessages.titleLong",
- "app.systemMessages.unacceptActiveMessages",
- "app.systemMessagesList.noMessages",
- "app.systemMessagesList.showAll",
- "app.systemMessagesList.text",
- "app.systemMessagesList.type",
- "app.systemMessagesList.visibleFrom",
- "app.systemMessagesList.visibleTo",
- "app.tabbedArrayField.empty",
- "app.tabbedArrayField.reallyRemoveQuestion",
- "app.termsList.advertiseUntil",
- "app.termsList.end",
- "app.termsList.noTerms",
- "app.termsList.start",
- "app.termsList.summer",
- "app.termsList.term",
- "app.termsList.winter",
- "app.termsList.year",
- "app.user.description",
- "app.user.examineGroupsInstance",
- "app.user.newAccount",
- "app.user.noCommonGroups",
- "app.user.nothingInCommon.title",
- "app.user.title",
- "app.user.welcomeTitle",
- "app.userList.noSupervisors",
- "app.userList.noUsers",
- "app.userName.externalIds",
- "app.userName.userDeactivated",
- "app.userSwitching.loginAs",
- "app.users.createUser",
- "app.users.description",
- "app.users.listTitle",
- "app.users.takeOver",
- "app.users.title",
- "app.users.userCreatedAt",
- "app.users.users",
- "app.usersName.notVerified.title",
- "app.usersStats.description",
- "app.usersname.notVerified.description",
- "diff",
- "generic.accessDenied",
- "generic.acknowledge",
- "generic.assignedAt",
- "generic.author",
- "generic.clearAll",
- "generic.close",
- "generic.create",
- "generic.created",
- "generic.createdAt",
- "generic.creating",
- "generic.creationFailed",
- "generic.delete",
- "generic.deleteFailed",
- "generic.deleted",
- "generic.deleting",
- "generic.description",
- "generic.detail",
- "generic.details",
- "generic.disable",
- "generic.discussion",
- "generic.edit",
- "generic.effectiveRole",
- "generic.email",
- "generic.enable",
- "generic.errorMessage",
- "generic.filtersSet",
- "generic.finishedAt",
- "generic.hideAll",
- "generic.inUse",
- "generic.invertSelection",
- "generic.lastUpdatedAt",
- "generic.loading",
- "generic.name",
- "generic.nameOfPerson",
- "generic.noRecordsInTable",
- "generic.operationFailed",
- "generic.reason",
- "generic.reevaluatedBy",
- "generic.refresh",
- "generic.remove",
- "generic.reset",
- "generic.results",
- "generic.role",
- "generic.runtimeShortest",
- "generic.runtimesShort",
- "generic.save",
- "generic.saved",
- "generic.saving",
- "generic.savingFailed",
- "generic.scheduledAt",
- "generic.search",
- "generic.selectAll",
- "generic.setFilters",
- "generic.settings",
- "generic.showAll",
- "generic.startedAt",
- "generic.submit",
- "generic.submitted",
- "generic.submitting",
- "generic.tags",
- "generic.updated",
- "generic.uploadedAt",
- "generic.validating",
- "generic.version",
- "recodex-judge-float",
- "recodex-judge-float-newline",
- "recodex-judge-normal",
- "recodex-judge-normal-newline",
- "recodex-judge-shuffle",
- "recodex-judge-shuffle-all",
- "recodex-judge-shuffle-newline",
- "recodex-judge-shuffle-rows"
-]
\ No newline at end of file
diff --git a/src/pages/Archive/Archive.js b/src/pages/Archive/Archive.js
index 7bf8114ef..e4f12dbb0 100644
--- a/src/pages/Archive/Archive.js
+++ b/src/pages/Archive/Archive.js
@@ -2,7 +2,7 @@ import React, { Component } from 'react';
import PropTypes from 'prop-types';
import ImmutablePropTypes from 'react-immutable-proptypes';
import { connect } from 'react-redux';
-import { FormattedMessage, injectIntl, intlShape } from 'react-intl';
+import { FormattedMessage, injectIntl } from 'react-intl';
import { Link } from 'react-router-dom';
import Page from '../../components/layout/Page';
@@ -186,7 +186,7 @@ Archive.propTypes = {
instanceId: PropTypes.string.isRequired,
instance: ImmutablePropTypes.map,
groups: ImmutablePropTypes.map,
- intl: intlShape,
+ intl: PropTypes.object,
};
export default withLinks(
diff --git a/src/pages/Assignment/Assignment.js b/src/pages/Assignment/Assignment.js
index 26af67b03..3fa43c391 100644
--- a/src/pages/Assignment/Assignment.js
+++ b/src/pages/Assignment/Assignment.js
@@ -2,7 +2,7 @@ import React, { Component } from 'react';
import PropTypes from 'prop-types';
import ImmutablePropTypes from 'react-immutable-proptypes';
import { connect } from 'react-redux';
-import { FormattedMessage, injectIntl, intlShape } from 'react-intl';
+import { FormattedMessage, injectIntl } from 'react-intl';
import { Col, Row, Alert } from 'react-bootstrap';
import { Link } from 'react-router-dom';
@@ -292,7 +292,7 @@ Assignment.propTypes = {
exerciseSync: PropTypes.func.isRequired,
solutions: ImmutablePropTypes.list.isRequired,
fetchManyStatus: PropTypes.string,
- intl: intlShape.isRequired,
+ intl: PropTypes.object.isRequired,
};
export default withLinks(
diff --git a/src/pages/AssignmentStats/AssignmentStats.js b/src/pages/AssignmentStats/AssignmentStats.js
index 1fe08d9af..f3b7379e4 100644
--- a/src/pages/AssignmentStats/AssignmentStats.js
+++ b/src/pages/AssignmentStats/AssignmentStats.js
@@ -3,7 +3,7 @@ import PropTypes from 'prop-types';
import ImmutablePropTypes from 'react-immutable-proptypes';
import { Row, Col, Modal } from 'react-bootstrap';
import { connect } from 'react-redux';
-import { injectIntl, FormattedMessage, FormattedNumber, intlShape } from 'react-intl';
+import { injectIntl, FormattedMessage, FormattedNumber } from 'react-intl';
import { Link } from 'react-router-dom';
import { defaultMemoize } from 'reselect';
@@ -309,7 +309,7 @@ class AssignmentStats extends Component {
resource: assignment,
iconName: 'hourglass-start',
breadcrumb: assignment => ({
- text:
,
+ text:
,
link: ({ ASSIGNMENT_DETAIL_URI_FACTORY }) => ASSIGNMENT_DETAIL_URI_FACTORY(assignment.id),
}),
},
@@ -475,7 +475,7 @@ AssignmentStats.propTypes = {
loadAsync: PropTypes.func.isRequired,
downloadBestSolutionsArchive: PropTypes.func.isRequired,
fetchManyStatus: PropTypes.string,
- intl: intlShape,
+ intl: PropTypes.object,
links: PropTypes.object.isRequired,
};
diff --git a/src/pages/ChangePassword/ChangePassword.js b/src/pages/ChangePassword/ChangePassword.js
index f72c98312..f791793f3 100644
--- a/src/pages/ChangePassword/ChangePassword.js
+++ b/src/pages/ChangePassword/ChangePassword.js
@@ -1,7 +1,7 @@
import React, { Component } from 'react';
import PropTypes from 'prop-types';
import { canUseDOM } from 'exenv';
-import { FormattedMessage, FormattedRelative } from 'react-intl';
+import { FormattedMessage, FormattedRelativeTime } from 'react-intl';
import { connect } from 'react-redux';
import { reset } from 'redux-form';
@@ -108,12 +108,12 @@ class ChangePassword extends Component {
}
breadcrumbs={[
{
- text:
,
+ text:
,
link: HOME_URI,
iconName: 'home',
},
{
- text:
,
+ text:
,
iconName: 'shield-alt',
},
]}>
@@ -143,7 +143,7 @@ class ChangePassword extends Component {
/>
{' '}
-
+
)}
diff --git a/src/pages/EditAssignment/EditAssignment.js b/src/pages/EditAssignment/EditAssignment.js
index 3e528a24c..a07d8d6c5 100644
--- a/src/pages/EditAssignment/EditAssignment.js
+++ b/src/pages/EditAssignment/EditAssignment.js
@@ -115,12 +115,12 @@ class EditAssignment extends Component {
iconName: 'ghost',
},
{
- text: ,
+ text: ,
iconName: 'hourglass-start',
link: ASSIGNMENT_DETAIL_URI_FACTORY(assignmentId),
},
{
- text: ,
+ text: ,
iconName: ['far', 'edit'],
},
]}>
diff --git a/src/pages/EditExerciseConfig/EditExerciseConfig.js b/src/pages/EditExerciseConfig/EditExerciseConfig.js
index 107807c5d..f2ce270be 100644
--- a/src/pages/EditExerciseConfig/EditExerciseConfig.js
+++ b/src/pages/EditExerciseConfig/EditExerciseConfig.js
@@ -1,7 +1,7 @@
import React, { Component } from 'react';
import PropTypes from 'prop-types';
import ImmutablePropTypes from 'react-immutable-proptypes';
-import { FormattedMessage, intlShape, injectIntl } from 'react-intl';
+import { FormattedMessage, injectIntl } from 'react-intl';
import { Row, Col } from 'react-bootstrap';
import { withRouter } from 'react-router';
import { connect } from 'react-redux';
@@ -710,7 +710,7 @@ EditExerciseConfig.propTypes = {
supplementaryFiles: ImmutablePropTypes.map,
supplementaryFilesStatus: PropTypes.string,
links: PropTypes.object.isRequired,
- intl: intlShape.isRequired,
+ intl: PropTypes.object.isRequired,
loadAsync: PropTypes.func.isRequired,
fetchPipelinesVariables: PropTypes.func.isRequired,
setExerciseConfigType: PropTypes.func.isRequired,
diff --git a/src/pages/EditGroup/EditGroup.js b/src/pages/EditGroup/EditGroup.js
index edb81e8e8..b50e613dd 100644
--- a/src/pages/EditGroup/EditGroup.js
+++ b/src/pages/EditGroup/EditGroup.js
@@ -1,7 +1,7 @@
import React, { Component } from 'react';
import PropTypes from 'prop-types';
import ImmutablePropTypes from 'react-immutable-proptypes';
-import { FormattedMessage, injectIntl, intlShape } from 'react-intl';
+import { FormattedMessage, injectIntl } from 'react-intl';
import { Row, Col, Form } from 'react-bootstrap';
import { connect } from 'react-redux';
import { reset, formValueSelector } from 'redux-form';
@@ -267,7 +267,7 @@ EditGroup.propTypes = {
relocateGroup: PropTypes.func.isRequired,
hasThreshold: PropTypes.bool,
isSuperAdmin: PropTypes.bool,
- intl: intlShape,
+ intl: PropTypes.object,
};
const editGroupFormSelector = formValueSelector('editGroup');
diff --git a/src/pages/EditShadowAssignment/EditShadowAssignment.js b/src/pages/EditShadowAssignment/EditShadowAssignment.js
index 894d4c599..3e25c50ef 100644
--- a/src/pages/EditShadowAssignment/EditShadowAssignment.js
+++ b/src/pages/EditShadowAssignment/EditShadowAssignment.js
@@ -107,7 +107,7 @@ class EditShadowAssignment extends Component {
}
breadcrumbs={[
{
- text: ,
+ text: ,
iconName: 'user-secret',
link: SHADOW_ASSIGNMENT_DETAIL_URI_FACTORY(assignmentId),
},
diff --git a/src/pages/EditUser/EditUser.js b/src/pages/EditUser/EditUser.js
index 45d830edc..aa20a96db 100644
--- a/src/pages/EditUser/EditUser.js
+++ b/src/pages/EditUser/EditUser.js
@@ -2,7 +2,7 @@ import React, { Component } from 'react';
import PropTypes from 'prop-types';
import ImmutablePropTypes from 'react-immutable-proptypes';
import { connect } from 'react-redux';
-import { FormattedMessage, injectIntl, intlShape } from 'react-intl';
+import { FormattedMessage, injectIntl } from 'react-intl';
import { Row, Col } from 'react-bootstrap';
import { defaultMemoize } from 'reselect';
@@ -93,7 +93,7 @@ class EditUser extends Component {
resource: user,
iconName: 'user',
breadcrumb: user => ({
- text: ,
+ text: ,
link: ({ USER_URI_FACTORY }) => USER_URI_FACTORY(user.id),
}),
},
@@ -238,7 +238,7 @@ EditUser.propTypes = {
generateToken: PropTypes.func.isRequired,
setRole: PropTypes.func.isRequired,
takeOver: PropTypes.func.isRequired,
- intl: intlShape,
+ intl: PropTypes.object,
};
export default connect(
diff --git a/src/pages/EmailVerification/EmailVerification.js b/src/pages/EmailVerification/EmailVerification.js
index 5ca8eb51b..b0695f42c 100644
--- a/src/pages/EmailVerification/EmailVerification.js
+++ b/src/pages/EmailVerification/EmailVerification.js
@@ -65,12 +65,12 @@ class EmailVerification extends Component {
}
breadcrumbs={[
{
- text: ,
+ text: ,
link: HOME_URI,
iconName: 'home',
},
{
- text: ,
+ text: ,
iconName: 'tick',
},
]}>
diff --git a/src/pages/Exercise/Exercise.js b/src/pages/Exercise/Exercise.js
index f578cf505..b228bbe09 100644
--- a/src/pages/Exercise/Exercise.js
+++ b/src/pages/Exercise/Exercise.js
@@ -2,7 +2,7 @@ import React, { Component } from 'react';
import PropTypes from 'prop-types';
import ImmutablePropTypes from 'react-immutable-proptypes';
import { connect } from 'react-redux';
-import { FormattedMessage, defineMessages, intlShape, injectIntl } from 'react-intl';
+import { FormattedMessage, defineMessages, injectIntl } from 'react-intl';
import { Row, Col } from 'react-bootstrap';
import { Link } from 'react-router-dom';
@@ -291,7 +291,7 @@ Exercise.propTypes = {
forkedFrom: ImmutablePropTypes.map,
runtimeEnvironments: ImmutablePropTypes.map,
referenceSolutions: ImmutablePropTypes.map,
- intl: intlShape.isRequired,
+ intl: PropTypes.object.isRequired,
submitting: PropTypes.bool,
initCreateReferenceSolution: PropTypes.func.isRequired,
links: PropTypes.object,
diff --git a/src/pages/ExerciseAssignments/ExerciseAssignments.js b/src/pages/ExerciseAssignments/ExerciseAssignments.js
index 1a9c41fb7..5b6127e19 100644
--- a/src/pages/ExerciseAssignments/ExerciseAssignments.js
+++ b/src/pages/ExerciseAssignments/ExerciseAssignments.js
@@ -2,7 +2,7 @@ import React, { Component } from 'react';
import PropTypes from 'prop-types';
import ImmutablePropTypes from 'react-immutable-proptypes';
import { connect } from 'react-redux';
-import { FormattedMessage, defineMessages, intlShape, injectIntl } from 'react-intl';
+import { FormattedMessage, defineMessages, injectIntl } from 'react-intl';
import { Row, Col, Alert } from 'react-bootstrap';
import { formValueSelector } from 'redux-form';
import { defaultMemoize } from 'reselect';
@@ -288,7 +288,7 @@ ExerciseAssignments.propTypes = {
allowSecondDeadline: PropTypes.bool,
visibility: PropTypes.string,
links: PropTypes.object,
- intl: intlShape.isRequired,
+ intl: PropTypes.object.isRequired,
loadAsync: PropTypes.func.isRequired,
assignExercise: PropTypes.func.isRequired,
editAssignment: PropTypes.func.isRequired,
diff --git a/src/pages/Exercises/Exercises.js b/src/pages/Exercises/Exercises.js
index f7c0137e5..df15631e4 100644
--- a/src/pages/Exercises/Exercises.js
+++ b/src/pages/Exercises/Exercises.js
@@ -2,7 +2,7 @@ import React, { Component } from 'react';
import PropTypes from 'prop-types';
import ImmutablePropTypes from 'react-immutable-proptypes';
import { connect } from 'react-redux';
-import { injectIntl, FormattedMessage, intlShape } from 'react-intl';
+import { injectIntl, FormattedMessage } from 'react-intl';
import { withRouter } from 'react-router';
import { defaultMemoize } from 'reselect';
@@ -55,13 +55,11 @@ class Exercises extends Component {
return (
}
- description={
-
- }
+ title={ }
+ description={ }
breadcrumbs={[
{
- text: ,
+ text: ,
iconName: 'puzzle-piece',
},
]}>
@@ -93,7 +91,7 @@ Exercises.propTypes = {
groups: ImmutablePropTypes.map,
groupsAccessor: PropTypes.func.isRequired,
query: PropTypes.string,
- intl: intlShape,
+ intl: PropTypes.object,
links: PropTypes.object.isRequired,
createGroupExercise: PropTypes.func.isRequired,
};
diff --git a/src/pages/GroupDetail/GroupDetail.js b/src/pages/GroupDetail/GroupDetail.js
index eb34aa305..89863f8f7 100644
--- a/src/pages/GroupDetail/GroupDetail.js
+++ b/src/pages/GroupDetail/GroupDetail.js
@@ -3,7 +3,7 @@ import PropTypes from 'prop-types';
import ImmutablePropTypes from 'react-immutable-proptypes';
import { connect } from 'react-redux';
import Button from '../../components/widgets/TheButton';
-import { FormattedMessage, injectIntl, intlShape } from 'react-intl';
+import { FormattedMessage, injectIntl } from 'react-intl';
import { Row, Col } from 'react-bootstrap';
import App from '../../containers/App';
@@ -356,24 +356,29 @@ class GroupDetail extends Component {
)}
- {// unfortunatelly, this cannot be covered by permission hints at the moment, since addStudent involes both student and group
- (isGroupSupervisor || isGroupAdmin) &&
- !data.organizational &&
- !data.archived &&
- isSupervisorRole(effectiveRole) &&
- !isStudentRole(effectiveRole) && (
-
-
-
- }
- isOpen>
-
-
-
-
- )}
+ {
+ // unfortunatelly, this cannot be covered by permission hints at the moment, since addStudent involes both student and group
+ (isGroupSupervisor || isGroupAdmin) &&
+ !data.organizational &&
+ !data.archived &&
+ isSupervisorRole(effectiveRole) &&
+ !isStudentRole(effectiveRole) && (
+
+
+
+ }
+ isOpen>
+
+
+
+
+ )
+ }
>
)}
@@ -445,7 +450,7 @@ GroupDetail.propTypes = {
setShadowPoints: PropTypes.func.isRequired,
removeShadowPoints: PropTypes.func.isRequired,
links: PropTypes.object,
- intl: intlShape,
+ intl: PropTypes.object,
};
const mapStateToProps = (
diff --git a/src/pages/Home/Home.js b/src/pages/Home/Home.js
index f25ca200a..2c2e70939 100644
--- a/src/pages/Home/Home.js
+++ b/src/pages/Home/Home.js
@@ -1,6 +1,6 @@
import React from 'react';
import PropTypes from 'prop-types';
-import { FormattedMessage, FormattedHTMLMessage } from 'react-intl';
+import { FormattedMessage } from 'react-intl';
import { Row, Col, Image } from 'react-bootstrap';
import PageContent from '../../components/layout/PageContent';
@@ -11,20 +11,8 @@ import { URL_PATH_PREFIX } from '../../helpers/config';
const Home = ({ links: { GITHUB_BUGS_URL } }) => (
- }
- description={
-
- }>
+ title={ }
+ description={ }>
@@ -48,16 +36,18 @@ const Home = ({ links: { GITHUB_BUGS_URL } }) => (
-
-
+ */}
(
-
@@ -95,10 +85,12 @@ const Home = ({ links: { GITHUB_BUGS_URL } }) => (
-
+ */}
diff --git a/src/pages/Instance/Instance.js b/src/pages/Instance/Instance.js
index d21a4b6e0..7a0209712 100644
--- a/src/pages/Instance/Instance.js
+++ b/src/pages/Instance/Instance.js
@@ -76,7 +76,7 @@ class Instance extends Component {
description={ }
breadcrumbs={[
{
- text: ,
+ text: ,
iconName: 'info-circle',
},
]}>
@@ -210,17 +210,19 @@ export default withLinks(
},
}
) => ({
- createGroup: userId => ({ localizedTexts, hasThreshold, threshold, makeMeAdmin, ...data }) =>
- dispatch(
- createGroup({
- ...data,
- hasThreshold,
- threshold: hasThreshold ? threshold : undefined,
- localizedTexts: transformLocalizedTextsFormData(localizedTexts),
- noAdmin: !makeMeAdmin, // inverted logic in API, user is added as admin by default
- instanceId,
- })
- ).then(() => Promise.all([dispatch(fetchAllGroups()), dispatch(fetchUser(userId))])),
+ createGroup:
+ userId =>
+ ({ localizedTexts, hasThreshold, threshold, makeMeAdmin, ...data }) =>
+ dispatch(
+ createGroup({
+ ...data,
+ hasThreshold,
+ threshold: hasThreshold ? threshold : undefined,
+ localizedTexts: transformLocalizedTextsFormData(localizedTexts),
+ noAdmin: !makeMeAdmin, // inverted logic in API, user is added as admin by default
+ instanceId,
+ })
+ ).then(() => Promise.all([dispatch(fetchAllGroups()), dispatch(fetchUser(userId))])),
loadAsync: fetchGroupsStatus => Instance.loadAsync({ instanceId, fetchGroupsStatus }, dispatch),
})
)(injectIntl(Instance))
diff --git a/src/pages/Login/Login.js b/src/pages/Login/Login.js
index 7ca348a7c..285a929f7 100644
--- a/src/pages/Login/Login.js
+++ b/src/pages/Login/Login.js
@@ -1,7 +1,7 @@
import React, { Component } from 'react';
import PropTypes from 'prop-types';
import ImmutablePropTypes from 'react-immutable-proptypes';
-import { FormattedMessage, intlShape, injectIntl } from 'react-intl';
+import { FormattedMessage, injectIntl } from 'react-intl';
import { connect } from 'react-redux';
import { Link } from 'react-router-dom';
import { reset, SubmissionError } from 'redux-form';
@@ -104,12 +104,12 @@ class Login extends Component {
description={ }
breadcrumbs={[
{
- text: ,
+ text: ,
link: HOME_URI,
iconName: 'home',
},
{
- text: ,
+ text: ,
iconName: 'sign-in-alt',
},
]}>
@@ -195,7 +195,7 @@ Login.propTypes = {
loggedInUser: ImmutablePropTypes.map,
reset: PropTypes.func.isRequired,
links: PropTypes.object.isRequired,
- intl: intlShape,
+ intl: PropTypes.object,
};
export default withLinks(
diff --git a/src/pages/Pipeline/Pipeline.js b/src/pages/Pipeline/Pipeline.js
index 241c361d6..23b6a2063 100644
--- a/src/pages/Pipeline/Pipeline.js
+++ b/src/pages/Pipeline/Pipeline.js
@@ -75,7 +75,7 @@ class Pipeline extends Component {
description={ }
breadcrumbs={[
{
- text: ,
+ text: ,
iconName: 'random',
link: PIPELINES_URI,
},
diff --git a/src/pages/ReferenceSolution/ReferenceSolution.js b/src/pages/ReferenceSolution/ReferenceSolution.js
index 38b4f4c9d..02bfc16c6 100644
--- a/src/pages/ReferenceSolution/ReferenceSolution.js
+++ b/src/pages/ReferenceSolution/ReferenceSolution.js
@@ -1,7 +1,7 @@
import React, { Component } from 'react';
import PropTypes from 'prop-types';
import { connect } from 'react-redux';
-import { FormattedMessage, defineMessages, intlShape, injectIntl } from 'react-intl';
+import { FormattedMessage, defineMessages, injectIntl } from 'react-intl';
import ImmutablePropTypes from 'react-immutable-proptypes';
import { defaultMemoize } from 'reselect';
@@ -183,7 +183,7 @@ ReferenceSolution.propTypes = {
fetchStatus: PropTypes.string,
scoreConfigSelector: PropTypes.func,
evaluations: ImmutablePropTypes.map,
- intl: intlShape.isRequired,
+ intl: PropTypes.object.isRequired,
links: PropTypes.object.isRequired,
};
diff --git a/src/pages/Registration/Registration.js b/src/pages/Registration/Registration.js
index a9035e956..4b5b49206 100644
--- a/src/pages/Registration/Registration.js
+++ b/src/pages/Registration/Registration.js
@@ -1,7 +1,7 @@
import React, { Component } from 'react';
import PropTypes from 'prop-types';
import ImmutablePropTypes from 'react-immutable-proptypes';
-import { FormattedMessage, intlShape, injectIntl } from 'react-intl';
+import { FormattedMessage, injectIntl } from 'react-intl';
import { connect } from 'react-redux';
import { reset, startAsyncValidation } from 'redux-form';
import { defaultMemoize } from 'reselect';
@@ -76,12 +76,12 @@ class Registration extends Component {
description={ }
breadcrumbs={[
{
- text: ,
+ text: ,
link: HOME_URI,
iconName: 'home',
},
{
- text: ,
+ text: ,
iconName: 'user-plus',
},
]}>
@@ -156,7 +156,7 @@ Registration.propTypes = {
reset: PropTypes.func.isRequired,
triggerAsyncValidation: PropTypes.func.isRequired,
links: PropTypes.object.isRequired,
- intl: intlShape,
+ intl: PropTypes.object,
};
export default withLinks(
@@ -169,8 +169,10 @@ export default withLinks(
loadAsync: () => Promise.all([dispatch(fetchInstances())]),
createAccount: ({ firstName, lastName, email, password, passwordConfirm, instanceId }) =>
dispatch(createAccount(firstName, lastName, email, password, passwordConfirm, instanceId)),
- createExternalAccount: (authType = 'secondary') => ({ instanceId, serviceId, ...credentials }) =>
- dispatch(createExternalAccount(instanceId, serviceId, credentials, authType)),
+ createExternalAccount:
+ (authType = 'secondary') =>
+ ({ instanceId, serviceId, ...credentials }) =>
+ dispatch(createExternalAccount(instanceId, serviceId, credentials, authType)),
triggerAsyncValidation: () => dispatch(startAsyncValidation('registration')),
reset: () => {
dispatch(reset('registration'));
diff --git a/src/pages/ResetPassword/ResetPassword.js b/src/pages/ResetPassword/ResetPassword.js
index b972936e4..90be9fa26 100644
--- a/src/pages/ResetPassword/ResetPassword.js
+++ b/src/pages/ResetPassword/ResetPassword.js
@@ -30,12 +30,12 @@ const ResetPassword = ({ resetPassword, isReseting, hasFailed, hasSucceeded, lin
}
breadcrumbs={[
{
- text: ,
+ text: ,
link: HOME_URI,
iconName: 'home',
},
{
- text: ,
+ text: ,
iconName: 'key',
},
]}>
diff --git a/src/pages/ShadowAssignment/ShadowAssignment.js b/src/pages/ShadowAssignment/ShadowAssignment.js
index ae4d1eb3e..bbe3793b1 100644
--- a/src/pages/ShadowAssignment/ShadowAssignment.js
+++ b/src/pages/ShadowAssignment/ShadowAssignment.js
@@ -1,7 +1,7 @@
import React, { Component } from 'react';
import PropTypes from 'prop-types';
import { connect } from 'react-redux';
-import { FormattedMessage, injectIntl, intlShape } from 'react-intl';
+import { FormattedMessage, injectIntl } from 'react-intl';
import { Col, Row } from 'react-bootstrap';
import { defaultMemoize } from 'reselect';
import { Link } from 'react-router-dom';
@@ -127,7 +127,7 @@ ShadowAssignment.propTypes = {
group: PropTypes.func,
loadAsync: PropTypes.func.isRequired,
links: PropTypes.object.isRequired,
- intl: intlShape.isRequired,
+ intl: PropTypes.object.isRequired,
};
export default withLinks(
diff --git a/src/pages/SisIntegration/SisIntegration.js b/src/pages/SisIntegration/SisIntegration.js
index 33d5486ad..582be40ae 100644
--- a/src/pages/SisIntegration/SisIntegration.js
+++ b/src/pages/SisIntegration/SisIntegration.js
@@ -2,7 +2,7 @@ import React, { Component } from 'react';
import PropTypes from 'prop-types';
import ImmutablePropTypes from 'react-immutable-proptypes';
import { connect } from 'react-redux';
-import { FormattedMessage, injectIntl, intlShape } from 'react-intl';
+import { FormattedMessage, injectIntl } from 'react-intl';
import { Row, Col } from 'react-bootstrap';
import moment from 'moment';
@@ -372,7 +372,7 @@ SisIntegration.propTypes = {
addSubgroup: PropTypes.func,
setArchived: PropTypes.func,
refreshGroups: PropTypes.func,
- intl: intlShape.isRequired,
+ intl: PropTypes.object.isRequired,
};
const mapStateToProps = state => {
diff --git a/src/pages/Solution/Solution.js b/src/pages/Solution/Solution.js
index 530c26887..f2d8ea185 100644
--- a/src/pages/Solution/Solution.js
+++ b/src/pages/Solution/Solution.js
@@ -1,7 +1,7 @@
import React, { Component } from 'react';
import PropTypes from 'prop-types';
import { connect } from 'react-redux';
-import { FormattedMessage, injectIntl, intlShape } from 'react-intl';
+import { FormattedMessage, injectIntl } from 'react-intl';
import { defaultMemoize } from 'reselect';
import Page from '../../components/layout/Page';
@@ -218,7 +218,7 @@ Solution.propTypes = {
editNote: PropTypes.func.isRequired,
deleteEvaluation: PropTypes.func.isRequired,
refreshSolutionEvaluations: PropTypes.func.isRequired,
- intl: intlShape,
+ intl: PropTypes.object,
};
export default connect(
diff --git a/src/pages/SystemMessages/SystemMessages.js b/src/pages/SystemMessages/SystemMessages.js
index ec6ef01fe..3bc6d67bf 100644
--- a/src/pages/SystemMessages/SystemMessages.js
+++ b/src/pages/SystemMessages/SystemMessages.js
@@ -1,7 +1,7 @@
import React, { Component } from 'react';
import PropTypes from 'prop-types';
import { connect } from 'react-redux';
-import { FormattedMessage, injectIntl, intlShape } from 'react-intl';
+import { FormattedMessage, injectIntl } from 'react-intl';
import Button from '../../components/widgets/TheButton';
import PageContent from '../../components/layout/PageContent';
@@ -178,7 +178,7 @@ SystemMessages.propTypes = {
createMessage: PropTypes.func,
editMessage: PropTypes.func,
systemMessages: PropTypes.array.isRequired,
- intl: intlShape.isRequired,
+ intl: PropTypes.object.isRequired,
};
export default connect(
diff --git a/src/pages/Users/Users.js b/src/pages/Users/Users.js
index d5425bb53..09982b73d 100644
--- a/src/pages/Users/Users.js
+++ b/src/pages/Users/Users.js
@@ -2,7 +2,7 @@ import React, { Component } from 'react';
import PropTypes from 'prop-types';
import ImmutablePropTypes from 'react-immutable-proptypes';
import { connect } from 'react-redux';
-import { FormattedMessage, injectIntl, intlShape } from 'react-intl';
+import { FormattedMessage, injectIntl } from 'react-intl';
import { Row, Col, Modal } from 'react-bootstrap';
import { Link } from 'react-router-dom';
import { defaultMemoize } from 'reselect';
@@ -248,7 +248,7 @@ Users.propTypes = {
createUser: PropTypes.func.isRequired,
reloadPagination: PropTypes.func.isRequired,
links: PropTypes.object.isRequired,
- intl: intlShape.isRequired,
+ intl: PropTypes.object.isRequired,
};
export default withLinks(
diff --git a/src/redux/helpers/api/download.js b/src/redux/helpers/api/download.js
index 2658c1289..f680d1472 100644
--- a/src/redux/helpers/api/download.js
+++ b/src/redux/helpers/api/download.js
@@ -1,59 +1,59 @@
import { createApiAction } from '../../middleware/apiMiddleware';
-import { saveAs } from 'file-saver';
import { addNotification } from '../../modules/notifications';
const trivialFileNameSelector = (id, state) => id;
-export const downloadHelper = ({
- fetch,
- endpoint,
- actionType,
- fileNameSelector = trivialFileNameSelector,
- contentType,
-}) => (id, fileName = null) => (dispatch, getState) => {
- let initial;
- if (fetch !== null) {
- initial = dispatch(fetch(id));
- } else {
- initial = Promise.resolve();
- }
- return initial
- .then(() =>
- dispatch(
- createApiAction({
- type: actionType,
- method: 'GET',
- endpoint: endpoint(id),
- doNotProcess: true, // the response is not (does not have to be) a JSON
- })
+export const downloadHelper =
+ ({ fetch, endpoint, actionType, fileNameSelector = trivialFileNameSelector, contentType }) =>
+ (id, fileName = null) =>
+ (dispatch, getState) => {
+ let initial;
+ if (fetch !== null) {
+ initial = dispatch(fetch(id));
+ } else {
+ initial = Promise.resolve();
+ }
+ return initial
+ .then(() =>
+ dispatch(
+ createApiAction({
+ type: actionType,
+ method: 'GET',
+ endpoint: endpoint(id),
+ doNotProcess: true, // the response is not (does not have to be) a JSON
+ })
+ )
)
- )
- .then(result => {
- const {
- value: { ok, status },
- } = result;
- if (ok === false) {
- const msg =
- status === 404 ? 'The file could not be found on the server.' : `This file cannot be downloaded (${status}).`;
- throw new Error(msg);
- }
+ .then(result => {
+ const {
+ value: { ok, status },
+ } = result;
+ if (ok === false) {
+ const msg =
+ status === 404
+ ? 'The file could not be found on the server.'
+ : `This file cannot be downloaded (${status}).`;
+ throw new Error(msg);
+ }
- return result;
- })
- .then(({ value }) => value.blob())
- .then(blob => {
- const typedBlob = new Blob([blob], { type: contentType });
- fileName = fileName || fileNameSelector(id, getState());
- saveAs(typedBlob, fileName);
- return Promise.resolve();
- })
- .catch(e => dispatch(addNotification(e.message, false)));
-};
+ return result;
+ })
+ .then(({ value }) => value.blob())
+ .then(blob => {
+ const { saveAs } = require('file-saver'); // dynamic loading, to avoid errors in headles nodejs execution
+ const typedBlob = new Blob([blob], { type: contentType });
+ fileName = fileName || fileNameSelector(id, getState());
+ saveAs(typedBlob, fileName, { autoBom: false });
+ return Promise.resolve();
+ })
+ .catch(e => dispatch(addNotification(e.message, false)));
+ };
export const downloadString = (fileName, data, contentType, addBOM = false) => {
+ const { saveAs } = require('file-saver'); // dynamic loading, to avoid errors in headles nodejs execution
const blobData = addBOM ? [new Uint8Array([0xef, 0xbb, 0xbf])] : [];
blobData.push(data);
const typedBlob = new Blob(blobData, { type: contentType });
- saveAs(typedBlob, fileName, true);
+ saveAs(typedBlob, fileName, { autoBom: false });
return Promise.resolve();
};
diff --git a/src/redux/selectors/exercises.js b/src/redux/selectors/exercises.js
index 9bf1de561..e321cc333 100644
--- a/src/redux/selectors/exercises.js
+++ b/src/redux/selectors/exercises.js
@@ -10,31 +10,19 @@ const getResources = exercises => exercises && exercises.get('resources');
const getGroupExercises = state => state.groupExercises;
const getRuntimeEnvironments = exercise => exercise && exercise.getIn(['data', 'runtimeEnvironments'], EMPTY_LIST);
-export const exercisesSelector = createSelector(
- getExercises,
- getResources
-);
+export const exercisesSelector = createSelector(getExercises, getResources);
export const exerciseSelector = exerciseId =>
- createSelector(
- exercisesSelector,
- exercises => exercises && exercises.get(exerciseId)
- );
+ createSelector(exercisesSelector, exercises => exercises && exercises.get(exerciseId));
export const exerciseForkedFromSelector = defaultMemoize(exerciseId =>
- createSelector(
- exercisesSelector,
- exercises => {
- const fokredId = exercises && exercises.getIn([exerciseId, 'data', 'forkedFrom']);
- return fokredId && exercises.get(fokredId);
- }
- )
+ createSelector(exercisesSelector, exercises => {
+ const fokredId = exercises && exercises.getIn([exerciseId, 'data', 'forkedFrom']);
+ return fokredId && exercises.get(fokredId);
+ })
);
export const getExercise = id =>
- createSelector(
- getExercises,
- exercises => exercises && exercises.getIn(['resources', id])
- );
+ createSelector(getExercises, exercises => exercises && exercises.getIn(['resources', id]));
export const getExerciseOfAssignmentJS = createSelector(
[getExercises, getAssignment],
@@ -46,16 +34,10 @@ export const getExerciseOfAssignmentJS = createSelector(
}
);
-export const getExerciseSelector = createSelector(
- getExercises,
- exercises => id => exercises.getIn(['resources', id])
-);
+export const getExerciseSelector = createSelector(getExercises, exercises => id => exercises.getIn(['resources', id]));
export const getExerciseRuntimeEnvironments = defaultMemoize(id =>
- createSelector(
- getExercise(id),
- getRuntimeEnvironments
- )
+ createSelector(getExercise(id), getRuntimeEnvironments)
);
export const getExerciseRuntimeEnvironmentsSelector = createSelector(
@@ -64,10 +46,7 @@ export const getExerciseRuntimeEnvironmentsSelector = createSelector(
);
export const getFork = (id, forkId) =>
- createSelector(
- getExercise(id),
- exercise => exercise.getIn(['data', 'forks', forkId])
- );
+ createSelector(getExercise(id), exercise => exercise.getIn(['data', 'forks', forkId]));
export const getExercisesByIdsSelector = ids =>
createSelector(
@@ -87,20 +66,17 @@ export const getExercisesForGroup = createSelector(
);
export const getExerciseAttachingGroupId = defaultMemoize(id =>
- createSelector(
- getExercise(id),
- exercise => exercise && exercise.getIn(['data', 'attachingGroupId'], null)
- )
+ createSelector(getExercise(id), exercise => exercise && exercise.getIn(['data', 'attachingGroupId'], null))
);
export const getExerciseDetachingGroupId = defaultMemoize(id =>
- createSelector(
- getExercise(id),
- exercise => exercise && exercise.getIn(['data', 'detachingGroupId'], null)
- )
+ createSelector(getExercise(id), exercise => exercise && exercise.getIn(['data', 'detachingGroupId'], null))
);
-export const getExerciseTags = state => getExercises(state).get('tags', []);
+export const getExerciseTags = state => {
+ const res = getExercises(state).get('tags');
+ return res && Array.isArray(res) ? res : [];
+};
export const getExerciseTagsLoading = state => getExercises(state).get('tags') === null;
export const getExerciseTagsUpdatePending = state => getExercises(state).get('tagsPending', null);
diff --git a/src/server.js b/src/server.js
index c252db50a..44a8a55e7 100644
--- a/src/server.js
+++ b/src/server.js
@@ -14,9 +14,6 @@ import fs from 'fs';
import { StaticRouter } from 'react-router';
-import { addLocaleData } from 'react-intl';
-import cs from 'react-intl/locale-data/cs';
-
import { configureStore } from './redux/store';
import { loggedInUserIdSelector } from './redux/selectors/auth';
import { isLoggedAsSuperAdmin } from './redux/selectors/users';
@@ -25,7 +22,12 @@ import { TOKEN_COOKIES_KEY, INSTANCEID_COOKIES_KEY } from './redux/middleware/au
import { LANG_COOKIES_KEY } from './redux/middleware/langMiddleware';
import App from './containers/App';
-addLocaleData([...cs]);
+import '@formatjs/intl-pluralrules/polyfill';
+import '@formatjs/intl-pluralrules/locale-data/en';
+import '@formatjs/intl-pluralrules/locale-data/cs';
+import '@formatjs/intl-relativetimeformat/polyfill';
+import '@formatjs/intl-relativetimeformat/locale-data/en';
+import '@formatjs/intl-relativetimeformat/locale-data/cs';
// Register global atob a btoa functions
global.Buffer = global.Buffer || require('buffer').Buffer;
@@ -63,7 +65,7 @@ const style = getFileName('public/style-*.css', `${urlPrefix}/`) || `${urlPrefix
const app = new Express();
const ejs = require('ejs').__express;
app.set('view engine', 'ejs');
-app.engine('.ejs', ejs);
+app.engine('ejs', ejs);
app.use(
urlPrefix,
Express.static('public', {
diff --git a/yarn.lock b/yarn.lock
index 22912c50d..295c723b7 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -44,7 +44,12 @@
resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.14.5.tgz#8ef4c18e58e801c5c95d3c1c0f2874a2680fadea"
integrity sha512-kixrYn4JwfAVPa0f2yfzc2AWti6WRRyO3XjWW5PJAvtE11qhSayrrcrEnee05KAtNaPC+EwehE8Qt1UedEVB8w==
-"@babel/core@^7.0.0", "@babel/core@^7.14.6":
+"@babel/compat-data@^7.14.7":
+ version "7.14.7"
+ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.14.7.tgz#7b047d7a3a89a67d2258dc61f604f098f1bc7e08"
+ integrity sha512-nS6dZaISCXJ3+518CWiBfEr//gHyMO02uDxBkXTKZDN5POruCnOZ1N4YBRZDCabwF8nZMWBpRxIicmXtBs+fvw==
+
+"@babel/core@^7.0.0", "@babel/core@^7.14.6", "@babel/core@^7.9.0":
version "7.14.6"
resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.14.6.tgz#e0814ec1a950032ff16c13a2721de39a8416fcab"
integrity sha512-gJnOEWSqTk96qG5BoIrl5bVtc23DCycmIePPYnamY9RboYdI4nFy5vAQMSl81O5K/W0sLDWfGysnOECC+KUUCA==
@@ -65,28 +70,6 @@
semver "^6.3.0"
source-map "^0.5.0"
-"@babel/core@^7.6.2":
- version "7.9.0"
- resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.9.0.tgz#ac977b538b77e132ff706f3b8a4dbad09c03c56e"
- integrity sha512-kWc7L0fw1xwvI0zi8OKVBuxRVefwGOrKSQMvrQ3dW+bIIavBY3/NpXmpjMy7bQnLgwgzWQZ8TlM57YHpHNHz4w==
- dependencies:
- "@babel/code-frame" "^7.8.3"
- "@babel/generator" "^7.9.0"
- "@babel/helper-module-transforms" "^7.9.0"
- "@babel/helpers" "^7.9.0"
- "@babel/parser" "^7.9.0"
- "@babel/template" "^7.8.6"
- "@babel/traverse" "^7.9.0"
- "@babel/types" "^7.9.0"
- convert-source-map "^1.7.0"
- debug "^4.1.0"
- gensync "^1.0.0-beta.1"
- json5 "^2.1.2"
- lodash "^4.17.13"
- resolve "^1.3.2"
- semver "^5.4.1"
- source-map "^0.5.0"
-
"@babel/generator@^7.14.5":
version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.14.5.tgz#848d7b9f031caca9d0cd0af01b063f226f52d785"
@@ -128,13 +111,13 @@
"@babel/helper-explode-assignable-expression" "^7.14.5"
"@babel/types" "^7.14.5"
-"@babel/helper-builder-react-jsx@^7.9.0":
- version "7.9.0"
- resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.9.0.tgz#16bf391990b57732700a3278d4d9a81231ea8d32"
- integrity sha512-weiIo4gaoGgnhff54GQ3P5wsUQmnSwpkvU0r6ZHq6TzoSzKy4JxHEgnxNytaKbov2a9z/CVNyzliuCOUPEX3Jw==
+"@babel/helper-builder-react-jsx@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.14.5.tgz#87620c97a8729e91caf9e6f0d324fff23e90bb5d"
+ integrity sha512-LT/856RUBXAHjmvJuLuI6XYZZAZNMSS+N2Yf5EUoHgSWtiWrAaGh7t5saP7sPCq07uvWVxxK3gwwm3weA9gKLg==
dependencies:
- "@babel/helper-annotate-as-pure" "^7.8.3"
- "@babel/types" "^7.9.0"
+ "@babel/helper-annotate-as-pure" "^7.14.5"
+ "@babel/types" "^7.14.5"
"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.14.5":
version "7.14.5"
@@ -242,13 +225,6 @@
dependencies:
"@babel/types" "^7.14.5"
-"@babel/helper-member-expression-to-functions@^7.8.3":
- version "7.8.3"
- resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz#659b710498ea6c1d9907e0c73f206eee7dadc24c"
- integrity sha512-fO4Egq88utkQFjbPrSHGmGLFqmrshs11d46WI+WZDESt7Wu7wN2G2Iu+NMMZJFDOVRHAMIkB5SNh30NtwCA7RA==
- dependencies:
- "@babel/types" "^7.8.3"
-
"@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.14.5":
version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz#6d1a44df6a38c957aa7c312da076429f11b422f3"
@@ -256,13 +232,6 @@
dependencies:
"@babel/types" "^7.14.5"
-"@babel/helper-module-imports@^7.8.3":
- version "7.8.3"
- resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz#7fe39589b39c016331b6b8c3f441e8f0b1419498"
- integrity sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg==
- dependencies:
- "@babel/types" "^7.8.3"
-
"@babel/helper-module-transforms@^7.14.5":
version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.14.5.tgz#7de42f10d789b423eb902ebd24031ca77cb1e10e"
@@ -277,19 +246,6 @@
"@babel/traverse" "^7.14.5"
"@babel/types" "^7.14.5"
-"@babel/helper-module-transforms@^7.9.0":
- version "7.9.0"
- resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.9.0.tgz#43b34dfe15961918707d247327431388e9fe96e5"
- integrity sha512-0FvKyu0gpPfIQ8EkxlrAydOWROdHpBmiCiRwLkUiBGhCUPRRbVD2/tm3sFr/c/GWFrQ/ffutGUAnx7V0FzT2wA==
- dependencies:
- "@babel/helper-module-imports" "^7.8.3"
- "@babel/helper-replace-supers" "^7.8.6"
- "@babel/helper-simple-access" "^7.8.3"
- "@babel/helper-split-export-declaration" "^7.8.3"
- "@babel/template" "^7.8.6"
- "@babel/types" "^7.9.0"
- lodash "^4.17.13"
-
"@babel/helper-optimise-call-expression@^7.14.5":
version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz#f27395a8619e0665b3f0364cddb41c25d71b499c"
@@ -297,13 +253,6 @@
dependencies:
"@babel/types" "^7.14.5"
-"@babel/helper-optimise-call-expression@^7.8.3":
- version "7.8.3"
- resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.3.tgz#7ed071813d09c75298ef4f208956006b6111ecb9"
- integrity sha512-Kag20n86cbO2AvHca6EJsvqAd82gc6VMGule4HwebwMlwkpXuVqrNRj6CkCV2sKxgi9MyAUnZVnZ6lJ1/vKhHQ==
- dependencies:
- "@babel/types" "^7.8.3"
-
"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3":
version "7.8.3"
resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz#9ea293be19babc0f52ff8ca88b34c3611b208670"
@@ -340,16 +289,6 @@
"@babel/traverse" "^7.14.5"
"@babel/types" "^7.14.5"
-"@babel/helper-replace-supers@^7.8.6":
- version "7.8.6"
- resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.8.6.tgz#5ada744fd5ad73203bf1d67459a27dcba67effc8"
- integrity sha512-PeMArdA4Sv/Wf4zXwBKPqVj7n9UF/xg6slNRtZW84FM7JpE1CbG8B612FyM4cxrf4fMAMGO0kR7voy1ForHHFA==
- dependencies:
- "@babel/helper-member-expression-to-functions" "^7.8.3"
- "@babel/helper-optimise-call-expression" "^7.8.3"
- "@babel/traverse" "^7.8.6"
- "@babel/types" "^7.8.6"
-
"@babel/helper-simple-access@^7.14.5":
version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.14.5.tgz#66ea85cf53ba0b4e588ba77fc813f53abcaa41c4"
@@ -357,14 +296,6 @@
dependencies:
"@babel/types" "^7.14.5"
-"@babel/helper-simple-access@^7.8.3":
- version "7.8.3"
- resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.8.3.tgz#7f8109928b4dab4654076986af575231deb639ae"
- integrity sha512-VNGUDjx5cCWg4vvCTR8qQ7YJYZ+HBjxOgXEl7ounz+4Sn7+LMD3CFrCTEU6/qXKbA2nKg21CwhhBzO0RpRbdCw==
- dependencies:
- "@babel/template" "^7.8.3"
- "@babel/types" "^7.8.3"
-
"@babel/helper-skip-transparent-expression-wrappers@^7.14.5":
version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.14.5.tgz#96f486ac050ca9f44b009fbe5b7d394cab3a0ee4"
@@ -420,15 +351,6 @@
"@babel/traverse" "^7.14.5"
"@babel/types" "^7.14.5"
-"@babel/helpers@^7.9.0":
- version "7.9.2"
- resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.9.2.tgz#b42a81a811f1e7313b88cba8adc66b3d9ae6c09f"
- integrity sha512-JwLvzlXVPjO8eU9c/wF9/zOIN7X6h8DYf7mG4CiFRZRvZNKEF5dQ3H3V+ASkHoIB3mWhatgl5ONhyqHRI6MppA==
- dependencies:
- "@babel/template" "^7.8.3"
- "@babel/traverse" "^7.9.0"
- "@babel/types" "^7.9.0"
-
"@babel/highlight@^7.10.4", "@babel/highlight@^7.14.5":
version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.14.5.tgz#6861a52f03966405001f6aa534a01a24d99e8cd9"
@@ -447,28 +369,28 @@
chalk "^2.0.0"
js-tokens "^4.0.0"
-"@babel/node@^7.14.5":
- version "7.14.5"
- resolved "https://registry.yarnpkg.com/@babel/node/-/node-7.14.5.tgz#cfbfab24c74f2855243d0548bb74a0b8b37b8fce"
- integrity sha512-fwAf0Ba3gjcwP04T0BD0Y3oHOTDQH2tVcyaPOMjb+8xkCJ38FoaVOlLfQ/asBgm6aCkBkn12/l8spCXUEEeAyA==
+"@babel/node@^7.14.7":
+ version "7.14.7"
+ resolved "https://registry.yarnpkg.com/@babel/node/-/node-7.14.7.tgz#0090e83e726027ea682240718ca39e4b625b15ad"
+ integrity sha512-QghINtVgOUCrSpE7z4IXPTGJfRYyjoY7ny5Qz0cuUlsThQv6WSn1xJk217WlEDucPLP2o5HwGXPSkxD4LWOZxQ==
dependencies:
"@babel/register" "^7.14.5"
commander "^4.0.1"
- core-js "^3.14.0"
+ core-js "^3.15.0"
node-environment-flags "^1.0.5"
regenerator-runtime "^0.13.4"
v8flags "^3.1.1"
-"@babel/parser@^7.1.0", "@babel/parser@^7.7.0", "@babel/parser@^7.8.6", "@babel/parser@^7.9.0":
- version "7.9.4"
- resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.9.4.tgz#68a35e6b0319bbc014465be43828300113f2f2e8"
- integrity sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA==
-
-"@babel/parser@^7.14.5", "@babel/parser@^7.14.6":
+"@babel/parser@^7.1.0", "@babel/parser@^7.12.0", "@babel/parser@^7.13.9", "@babel/parser@^7.14.5", "@babel/parser@^7.14.6":
version "7.14.6"
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.14.6.tgz#d85cc68ca3cac84eae384c06f032921f5227f4b2"
integrity sha512-oG0ej7efjEXxb4UgE+klVx+3j4MVo+A2vCzm7OUN4CLo6WhQ+vSOD2yJ8m7B+DghObxtLxt3EfgMWpq+AsWehQ==
+"@babel/parser@^7.7.0", "@babel/parser@^7.8.6", "@babel/parser@^7.9.0":
+ version "7.9.4"
+ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.9.4.tgz#68a35e6b0319bbc014465be43828300113f2f2e8"
+ integrity sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA==
+
"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.14.5":
version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.14.5.tgz#4b467302e1548ed3b1be43beae2cc9cf45e0bb7e"
@@ -478,10 +400,10 @@
"@babel/helper-skip-transparent-expression-wrappers" "^7.14.5"
"@babel/plugin-proposal-optional-chaining" "^7.14.5"
-"@babel/plugin-proposal-async-generator-functions@^7.14.5":
- version "7.14.5"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.5.tgz#4024990e3dd74181f4f426ea657769ff49a2df39"
- integrity sha512-tbD/CG3l43FIXxmu4a7RBe4zH7MLJ+S/lFowPFO7HetS2hyOZ/0nnnznegDuzFzfkyQYTxqdTH/hKmuBngaDAA==
+"@babel/plugin-proposal-async-generator-functions@^7.14.7":
+ version "7.14.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.7.tgz#784a48c3d8ed073f65adcf30b57bcbf6c8119ace"
+ integrity sha512-RK8Wj7lXLY3bqei69/cc25gwS5puEc3dknoFPFbqfy3XxYQBQFvu4ioWpafMBAB+L9NyptQK4nMOa5Xz16og8Q==
dependencies:
"@babel/helper-plugin-utils" "^7.14.5"
"@babel/helper-remap-async-to-generator" "^7.14.5"
@@ -552,12 +474,12 @@
"@babel/helper-plugin-utils" "^7.14.5"
"@babel/plugin-syntax-numeric-separator" "^7.10.4"
-"@babel/plugin-proposal-object-rest-spread@^7.14.5":
- version "7.14.5"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.5.tgz#e581d5ccdfa187ea6ed73f56c6a21c1580b90fbf"
- integrity sha512-VzMyY6PWNPPT3pxc5hi9LloKNr4SSrVCg7Yr6aZpW4Ym07r7KqSU/QXYwjXLVxqwSv0t/XSXkFoKBPUkZ8vb2A==
+"@babel/plugin-proposal-object-rest-spread@^7.14.7":
+ version "7.14.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.7.tgz#5920a2b3df7f7901df0205974c0641b13fd9d363"
+ integrity sha512-082hsZz+sVabfmDWo1Oct1u1AgbKbUAyVgmX4otIc7bdsRgHBXwTwb3DpDmD4Eyyx6DNiuz5UAATT655k+kL5g==
dependencies:
- "@babel/compat-data" "^7.14.5"
+ "@babel/compat-data" "^7.14.7"
"@babel/helper-compilation-targets" "^7.14.5"
"@babel/helper-plugin-utils" "^7.14.5"
"@babel/plugin-syntax-object-rest-spread" "^7.8.3"
@@ -656,7 +578,7 @@
dependencies:
"@babel/helper-plugin-utils" "^7.8.0"
-"@babel/plugin-syntax-jsx@^7.14.5":
+"@babel/plugin-syntax-jsx@7", "@babel/plugin-syntax-jsx@^7.14.5":
version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.14.5.tgz#000e2e25d8673cce49300517a3eda44c263e4201"
integrity sha512-ohuFIsOMXJnbOMRfX7/w7LocdR6R7whhuRD4ax8IipLcLPlZGJKkBxgHp++U4N/vKyU16/YDQr2f5seajD3jIw==
@@ -769,10 +691,10 @@
dependencies:
"@babel/helper-plugin-utils" "^7.14.5"
-"@babel/plugin-transform-destructuring@^7.14.5":
- version "7.14.5"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.5.tgz#d32ad19ff1a6da1e861dc62720d80d9776e3bf35"
- integrity sha512-wU9tYisEbRMxqDezKUqC9GleLycCRoUsai9ddlsq54r8QRLaeEhc+d+9DqCG+kV9W2GgQjTZESPTpn5bAFMDww==
+"@babel/plugin-transform-destructuring@^7.14.7":
+ version "7.14.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.7.tgz#0ad58ed37e23e22084d109f185260835e5557576"
+ integrity sha512-0mDE99nK+kVh3xlc5vKwB6wnP9ecuSj+zQCa/n0voENtP/zymdT4HH6QEb65wjjcbqr1Jb/7z9Qp7TF5FtwYGw==
dependencies:
"@babel/helper-plugin-utils" "^7.14.5"
@@ -874,10 +796,10 @@
"@babel/helper-module-transforms" "^7.14.5"
"@babel/helper-plugin-utils" "^7.14.5"
-"@babel/plugin-transform-named-capturing-groups-regex@^7.14.5":
- version "7.14.5"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.5.tgz#d537e8ee083ee6f6aa4f4eef9d2081d555746e4c"
- integrity sha512-+Xe5+6MWFo311U8SchgeX5c1+lJM+eZDBZgD+tvXu9VVQPXwwVzeManMMjYX6xw2HczngfOSZjoFYKwdeB/Jvw==
+"@babel/plugin-transform-named-capturing-groups-regex@^7.14.7":
+ version "7.14.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.7.tgz#60c06892acf9df231e256c24464bfecb0908fd4e"
+ integrity sha512-DTNOTaS7TkW97xsDMrp7nycUVh6sn/eq22VaxWfEdzuEbRsiaOU0pqU7DlyUGHVsbQbSghvjKRpEl+nUCKGQSg==
dependencies:
"@babel/helper-create-regexp-features-plugin" "^7.14.5"
@@ -917,13 +839,13 @@
dependencies:
"@babel/helper-plugin-utils" "^7.14.5"
-"@babel/plugin-transform-react-inline-elements@^7.2.0":
- version "7.9.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-inline-elements/-/plugin-transform-react-inline-elements-7.9.0.tgz#19a39843431803765c9976132198bd8dee3d8058"
- integrity sha512-iqqKXtOfVZpbgJ+9D4TG+JO/vgxa29FlpPUSIATzIcopKMUd3/bdwIjrrEneNp+SeiJs74nqKfUFYAUPDEu/qw==
+"@babel/plugin-transform-react-inline-elements@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-inline-elements/-/plugin-transform-react-inline-elements-7.14.5.tgz#5e2c8ad96612f1a86484b291df5216cc6a6cffb6"
+ integrity sha512-RsdXYEbicGlg9WBvanlndPqCxrG9hV86lPjObbsTzA5hkrfScoECP5NWEJFUrtE/NVFu81OcPu6pQVVQtOX20Q==
dependencies:
- "@babel/helper-builder-react-jsx" "^7.9.0"
- "@babel/helper-plugin-utils" "^7.8.3"
+ "@babel/helper-builder-react-jsx" "^7.14.5"
+ "@babel/helper-plugin-utils" "^7.14.5"
"@babel/plugin-transform-react-jsx-development@^7.14.5":
version "7.14.5"
@@ -972,7 +894,7 @@
dependencies:
"@babel/helper-plugin-utils" "^7.14.5"
-"@babel/plugin-transform-spread@^7.14.5":
+"@babel/plugin-transform-spread@^7.14.6":
version "7.14.6"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.14.6.tgz#6bd40e57fe7de94aa904851963b5616652f73144"
integrity sha512-Zr0x0YroFJku7n7+/HH3A2eIrGMjbmAIbJSVv0IZ+t3U2WUQUA64S/oeied2e+MaGSjmt4alzBCsK9E8gh+fag==
@@ -1016,17 +938,17 @@
"@babel/helper-create-regexp-features-plugin" "^7.14.5"
"@babel/helper-plugin-utils" "^7.14.5"
-"@babel/preset-env@^7.14.5":
- version "7.14.5"
- resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.14.5.tgz#c0c84e763661fd0e74292c3d511cb33b0c668997"
- integrity sha512-ci6TsS0bjrdPpWGnQ+m4f+JSSzDKlckqKIJJt9UZ/+g7Zz9k0N8lYU8IeLg/01o2h8LyNZDMLGgRLDTxpudLsA==
+"@babel/preset-env@^7.14.7":
+ version "7.14.7"
+ resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.14.7.tgz#5c70b22d4c2d893b03d8c886a5c17422502b932a"
+ integrity sha512-itOGqCKLsSUl0Y+1nSfhbuuOlTs0MJk2Iv7iSH+XT/mR8U1zRLO7NjWlYXB47yhK4J/7j+HYty/EhFZDYKa/VA==
dependencies:
- "@babel/compat-data" "^7.14.5"
+ "@babel/compat-data" "^7.14.7"
"@babel/helper-compilation-targets" "^7.14.5"
"@babel/helper-plugin-utils" "^7.14.5"
"@babel/helper-validator-option" "^7.14.5"
"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.14.5"
- "@babel/plugin-proposal-async-generator-functions" "^7.14.5"
+ "@babel/plugin-proposal-async-generator-functions" "^7.14.7"
"@babel/plugin-proposal-class-properties" "^7.14.5"
"@babel/plugin-proposal-class-static-block" "^7.14.5"
"@babel/plugin-proposal-dynamic-import" "^7.14.5"
@@ -1035,7 +957,7 @@
"@babel/plugin-proposal-logical-assignment-operators" "^7.14.5"
"@babel/plugin-proposal-nullish-coalescing-operator" "^7.14.5"
"@babel/plugin-proposal-numeric-separator" "^7.14.5"
- "@babel/plugin-proposal-object-rest-spread" "^7.14.5"
+ "@babel/plugin-proposal-object-rest-spread" "^7.14.7"
"@babel/plugin-proposal-optional-catch-binding" "^7.14.5"
"@babel/plugin-proposal-optional-chaining" "^7.14.5"
"@babel/plugin-proposal-private-methods" "^7.14.5"
@@ -1061,7 +983,7 @@
"@babel/plugin-transform-block-scoping" "^7.14.5"
"@babel/plugin-transform-classes" "^7.14.5"
"@babel/plugin-transform-computed-properties" "^7.14.5"
- "@babel/plugin-transform-destructuring" "^7.14.5"
+ "@babel/plugin-transform-destructuring" "^7.14.7"
"@babel/plugin-transform-dotall-regex" "^7.14.5"
"@babel/plugin-transform-duplicate-keys" "^7.14.5"
"@babel/plugin-transform-exponentiation-operator" "^7.14.5"
@@ -1073,7 +995,7 @@
"@babel/plugin-transform-modules-commonjs" "^7.14.5"
"@babel/plugin-transform-modules-systemjs" "^7.14.5"
"@babel/plugin-transform-modules-umd" "^7.14.5"
- "@babel/plugin-transform-named-capturing-groups-regex" "^7.14.5"
+ "@babel/plugin-transform-named-capturing-groups-regex" "^7.14.7"
"@babel/plugin-transform-new-target" "^7.14.5"
"@babel/plugin-transform-object-super" "^7.14.5"
"@babel/plugin-transform-parameters" "^7.14.5"
@@ -1081,7 +1003,7 @@
"@babel/plugin-transform-regenerator" "^7.14.5"
"@babel/plugin-transform-reserved-words" "^7.14.5"
"@babel/plugin-transform-shorthand-properties" "^7.14.5"
- "@babel/plugin-transform-spread" "^7.14.5"
+ "@babel/plugin-transform-spread" "^7.14.6"
"@babel/plugin-transform-sticky-regex" "^7.14.5"
"@babel/plugin-transform-template-literals" "^7.14.5"
"@babel/plugin-transform-typeof-symbol" "^7.14.5"
@@ -1092,7 +1014,7 @@
babel-plugin-polyfill-corejs2 "^0.2.2"
babel-plugin-polyfill-corejs3 "^0.2.2"
babel-plugin-polyfill-regenerator "^0.2.2"
- core-js-compat "^3.14.0"
+ core-js-compat "^3.15.0"
semver "^6.3.0"
"@babel/preset-modules@^0.1.4":
@@ -1150,7 +1072,7 @@
dependencies:
regenerator-runtime "^0.13.4"
-"@babel/runtime@^7.4.0", "@babel/runtime@^7.8.4":
+"@babel/runtime@^7.8.4":
version "7.9.2"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.9.2.tgz#d90df0583a3a252f09aaa619665367bae518db06"
integrity sha512-NE2DtOdufG7R5vnfQUTehdTfNycfUANEtCa9PssN9O/xmTzP4E08UI797ixaei6hBEVL9BI/PsdJS5x7mWoB9Q==
@@ -1166,7 +1088,7 @@
"@babel/parser" "^7.14.5"
"@babel/types" "^7.14.5"
-"@babel/template@^7.8.3", "@babel/template@^7.8.6":
+"@babel/template@^7.8.3":
version "7.8.6"
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.8.6.tgz#86b22af15f828dfb086474f964dcc3e39c43ce2b"
integrity sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==
@@ -1175,7 +1097,7 @@
"@babel/parser" "^7.8.6"
"@babel/types" "^7.8.6"
-"@babel/traverse@^7.13.0", "@babel/traverse@^7.14.5":
+"@babel/traverse@7", "@babel/traverse@^7.13.0", "@babel/traverse@^7.14.5":
version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.14.5.tgz#c111b0f58afab4fea3d3385a406f692748c59870"
integrity sha512-G3BiS15vevepdmFqmUc9X+64y0viZYygubAMO8SvBmKARuF6CPSZtH4Ng9vi/lrWlZFGe3FWdXNy835akH8Glg==
@@ -1190,7 +1112,7 @@
debug "^4.1.0"
globals "^11.1.0"
-"@babel/traverse@^7.7.0", "@babel/traverse@^7.8.6", "@babel/traverse@^7.9.0":
+"@babel/traverse@^7.7.0":
version "7.9.0"
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.9.0.tgz#d3882c2830e513f4fe4cec9fe76ea1cc78747892"
integrity sha512-jAZQj0+kn4WTHO5dUZkZKhbFrqZE7K5LAQ5JysMnmvGij+wOdr+8lWqPeW0BcF4wFwrEXXtdGO7wcV6YPJcf3w==
@@ -1205,7 +1127,15 @@
globals "^11.1.0"
lodash "^4.17.13"
-"@babel/types@^7.0.0", "@babel/types@^7.3.0", "@babel/types@^7.4.4", "@babel/types@^7.7.0", "@babel/types@^7.8.3", "@babel/types@^7.8.6", "@babel/types@^7.9.0":
+"@babel/types@^7.0.0", "@babel/types@^7.12.0", "@babel/types@^7.13.0", "@babel/types@^7.14.5", "@babel/types@^7.3.0", "@babel/types@^7.9.5":
+ version "7.14.5"
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.14.5.tgz#3bb997ba829a2104cedb20689c4a5b8121d383ff"
+ integrity sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==
+ dependencies:
+ "@babel/helper-validator-identifier" "^7.14.5"
+ to-fast-properties "^2.0.0"
+
+"@babel/types@^7.4.4", "@babel/types@^7.7.0", "@babel/types@^7.8.3", "@babel/types@^7.8.6", "@babel/types@^7.9.0":
version "7.9.0"
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.9.0.tgz#00b064c3df83ad32b2dbf5ff07312b15c7f1efb5"
integrity sha512-BS9JKfXkzzJl8RluW4JGknzpiUV7ZrvTayM6yfqLTVBEnFtyowVIOu6rqxRd5cVO6yGoWf4T8u8dgK9oB+GCng==
@@ -1214,14 +1144,6 @@
lodash "^4.17.13"
to-fast-properties "^2.0.0"
-"@babel/types@^7.14.5":
- version "7.14.5"
- resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.14.5.tgz#3bb997ba829a2104cedb20689c4a5b8121d383ff"
- integrity sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==
- dependencies:
- "@babel/helper-validator-identifier" "^7.14.5"
- to-fast-properties "^2.0.0"
-
"@discoveryjs/json-ext@^0.5.0":
version "0.5.3"
resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.3.tgz#90420f9f9c6d3987f176a19a7d8e764271a2f55d"
@@ -1242,17 +1164,109 @@
minimatch "^3.0.4"
strip-json-comments "^3.1.1"
-"@formatjs/intl-unified-numberformat@^3.2.0":
- version "3.3.0"
- resolved "https://registry.yarnpkg.com/@formatjs/intl-unified-numberformat/-/intl-unified-numberformat-3.3.0.tgz#0692346a9cd432abb2cd9b6879ddd6592585641a"
- integrity sha512-wLT3myYq6fUhJYUh53tt5fMok+sUqO3Jy1XeSqYTphP7MmQl38tHqAIL65Dxh7M6/QlDEQTOkMZNpQcnT0AzaQ==
+"@formatjs/cli@^4.2.21":
+ version "4.2.21"
+ resolved "https://registry.yarnpkg.com/@formatjs/cli/-/cli-4.2.21.tgz#94df0830ebb4afdf7fd243a027dd8f4b4509980e"
+ integrity sha512-6F5ih85ROyhPkXKTNmgHdQ/LemfRYXgyZtv5AOXQ47OIOOKSn0ZaTMC7cUvVS0cga0Rmg2OByaiyzIj5FV21Rw==
+ dependencies:
+ "@formatjs/icu-messageformat-parser" "2.0.6"
+ "@formatjs/ts-transformer" "3.4.3"
+ "@types/json-stable-stringify" "^1.0.32"
+ "@types/lodash" "^4.14.150"
+ "@types/node" "14"
+ "@vue/compiler-core" "^3.0.0"
+ "@vue/compiler-sfc" "^3.0.5"
+ chalk "^4.0.0"
+ commander "7"
+ fast-glob "^3.2.4"
+ fs-extra "^9.0.0"
+ json-stable-stringify "^1.0.1"
+ lodash "^4.17.15"
+ loud-rejection "^2.2.0"
+ tslib "^2.1.0"
+ typescript "^4.0"
+
+"@formatjs/ecma402-abstract@1.9.3":
+ version "1.9.3"
+ resolved "https://registry.yarnpkg.com/@formatjs/ecma402-abstract/-/ecma402-abstract-1.9.3.tgz#00892014c805935b5b1345d238246e9bf3a2de50"
+ integrity sha512-DBrRUL65m4SVtfq+T4Qltd8+upAzfb9K1MX0UZ0hqQ0wpBY0PSIti9XJe0ZQ/j2v/KxpwQ0Jw5NLumKVezJFQg==
dependencies:
- "@formatjs/intl-utils" "^2.2.0"
+ tslib "^2.1.0"
-"@formatjs/intl-utils@^2.2.0":
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/@formatjs/intl-utils/-/intl-utils-2.2.0.tgz#ba6e12fe64ff7fd160be392007c47d24b7ae5c75"
- integrity sha512-+Az7tR1av1DHZu9668D8uh9atT6vp+FFmEF8BrEssv0OqzpVjpVBGVmcgPzQP8k2PQjVlm/h2w8cTt0knn132w==
+"@formatjs/fast-memoize@1.1.1":
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/@formatjs/fast-memoize/-/fast-memoize-1.1.1.tgz#3006b58aca1e39a98aca213356b42da5d173f26b"
+ integrity sha512-mIqBr5uigIlx13eZTOPSEh2buDiy3BCdMYUtewICREQjbb4xarDiVWoXSnrERM7NanZ+0TAHNXSqDe6HpEFQUg==
+
+"@formatjs/icu-messageformat-parser@2.0.6":
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.0.6.tgz#7471c2116982f07b3d9b80e4572a870f20adbaf6"
+ integrity sha512-dgOZ2kq3sbjjC4P0IIghXFUiGY+x9yyypBJF9YFACjw8gPq/OSPmOzdMGvjY9hl4EeeIhhsDd4LIAN/3zHG99A==
+ dependencies:
+ "@formatjs/ecma402-abstract" "1.9.3"
+ "@formatjs/icu-skeleton-parser" "1.2.7"
+ tslib "^2.1.0"
+
+"@formatjs/icu-skeleton-parser@1.2.7":
+ version "1.2.7"
+ resolved "https://registry.yarnpkg.com/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.2.7.tgz#a74954695c37470efdeff828799654088e567c34"
+ integrity sha512-xm1rJMOz4fwVfWH98VKtbTpZvyQ45plHilkCF16Nm6bAgosYC/IcMmgJisGr6uHqb5TvJRXE07+EvnkIIQjsdA==
+ dependencies:
+ "@formatjs/ecma402-abstract" "1.9.3"
+ tslib "^2.1.0"
+
+"@formatjs/intl-displaynames@5.1.5":
+ version "5.1.5"
+ resolved "https://registry.yarnpkg.com/@formatjs/intl-displaynames/-/intl-displaynames-5.1.5.tgz#fb65c09493c3488e11e72b7d9512f0c1cc18b247"
+ integrity sha512-338DoPv8C4BqLqE7Sn5GkJbbkpL0RG8VoMP6qMJywx7bXVgOdWXiXUl3owdCPvq0bpVGGxTl+UNnF+UH8wGdLg==
+ dependencies:
+ "@formatjs/ecma402-abstract" "1.9.3"
+ tslib "^2.1.0"
+
+"@formatjs/intl-listformat@6.2.5":
+ version "6.2.5"
+ resolved "https://registry.yarnpkg.com/@formatjs/intl-listformat/-/intl-listformat-6.2.5.tgz#b2534700807e3ca2c2d8180592c15751037c908a"
+ integrity sha512-LRGroM+uLc8dL5J8zwHhNNxWw45nnHQMphW3zEnD9AySKPbFRsrSxzV8LYA93U5mkvMSBf49RdEODpdeyDak/Q==
+ dependencies:
+ "@formatjs/ecma402-abstract" "1.9.3"
+ tslib "^2.1.0"
+
+"@formatjs/intl-pluralrules@^4.0.27":
+ version "4.0.27"
+ resolved "https://registry.yarnpkg.com/@formatjs/intl-pluralrules/-/intl-pluralrules-4.0.27.tgz#32932b0c838a268a9b87173b13895f53d955a69b"
+ integrity sha512-Q4RAXZXuhWwMWK3Vsbf9AIRBa9B+BTiWjNkzlCq77pCRQYo555owWrGxnZUVk2203wygOIkoRYSvP7Tu2RXNFA==
+ dependencies:
+ "@formatjs/ecma402-abstract" "1.9.3"
+ tslib "^2.1.0"
+
+"@formatjs/intl-relativetimeformat@^9.1.6":
+ version "9.1.6"
+ resolved "https://registry.yarnpkg.com/@formatjs/intl-relativetimeformat/-/intl-relativetimeformat-9.1.6.tgz#7a0755d61aeb5fc07f7002da9199f8ade06ee339"
+ integrity sha512-u8hvqtpkiIJEVKzafbpaLQ0tvEFjFvb1WUzXk6rYKXOaKhYEhVaTVjVdCzSKr9bsDHuHMoSiR1SvqsP2ltCUHA==
+ dependencies:
+ "@formatjs/ecma402-abstract" "1.9.3"
+ tslib "^2.1.0"
+
+"@formatjs/intl@1.13.1":
+ version "1.13.1"
+ resolved "https://registry.yarnpkg.com/@formatjs/intl/-/intl-1.13.1.tgz#1d3a05f2db7d7590da855409d8c924822b03e09c"
+ integrity sha512-7UF0tTjdSsMc+0wA7/ROw0ibOo+l3Can6Z01JTC6alshxYvg6UufeklbvDtenXhoeXkUWmQ/HGFJaJhQuHfGGw==
+ dependencies:
+ "@formatjs/ecma402-abstract" "1.9.3"
+ "@formatjs/fast-memoize" "1.1.1"
+ "@formatjs/icu-messageformat-parser" "2.0.6"
+ "@formatjs/intl-displaynames" "5.1.5"
+ "@formatjs/intl-listformat" "6.2.5"
+ intl-messageformat "9.7.0"
+ tslib "^2.1.0"
+
+"@formatjs/ts-transformer@3.4.3":
+ version "3.4.3"
+ resolved "https://registry.yarnpkg.com/@formatjs/ts-transformer/-/ts-transformer-3.4.3.tgz#bc2397bd380fb3abc6be94a709d452e37ed3a9c0"
+ integrity sha512-CmsE+0rpGucWfK/cdVJ4oUfO7LbFJflGwJ6/U122wZhxRs59xcThUIRBBX7HU7Hx1BhtPa3LSW9QJc41D73tpQ==
+ dependencies:
+ "@formatjs/icu-messageformat-parser" "2.0.6"
+ tslib "^2.1.0"
"@fortawesome/fontawesome-common-types@^0.2.35":
version "0.2.35"
@@ -1299,12 +1313,12 @@
dependencies:
prop-types "^15.7.2"
-"@iktakahiro/markdown-it-katex@^3.0.3":
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/@iktakahiro/markdown-it-katex/-/markdown-it-katex-3.1.0.tgz#cd40c1037f038ab00cbfee2464604435848deae9"
- integrity sha512-Im2hih9ZkUqnUP7FhK0DTkGEVHgKNQ3BNQlbiBreWjSFPxysdylP1Ns5hLvoO+IdI1drhiiip/54VP8Gs3fLvw==
+"@iktakahiro/markdown-it-katex@^4.0.1":
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/@iktakahiro/markdown-it-katex/-/markdown-it-katex-4.0.1.tgz#65ff9d12afd4c0b7684dd247abe7ce42fc1edac3"
+ integrity sha512-kGFooO7fIOgY34PSG8ZNVsUlKhhNoqhzW2kq94TNGa8COzh73PO4KsEoPOsQVG1mEAe8tg7GqG0FoVao0aMHaw==
dependencies:
- katex "^0.10.0"
+ katex "^0.12.0"
"@lgaitan/pace-progress@^1.0.7":
version "1.0.7"
@@ -1387,10 +1401,10 @@
resolved "https://registry.yarnpkg.com/@ttskch/select2-bootstrap4-theme/-/select2-bootstrap4-theme-1.5.2.tgz#3b4519b349f3e7831c28752a1e9617312a192656"
integrity sha512-gAj8qNy/VYwQDBkACm0USM66kxFai8flX83ayRXPNhzZckEgSqIBB9sM74SCM3ssgeX+ZVy4BifTnLis+KpIyg==
-"@types/babel__core@^7.1.2":
- version "7.1.6"
- resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.6.tgz#16ff42a5ae203c9af1c6e190ed1f30f83207b610"
- integrity sha512-tTnhWszAqvXnhW7m5jQU9PomXSiKXk2sFxpahXvI20SZKu9ylPi8WtIxueZ6ehDWikPT0jeFujMj3X4ZHuf3Tg==
+"@types/babel__core@*", "@types/babel__core@^7.1.7":
+ version "7.1.14"
+ resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.14.tgz#faaeefc4185ec71c389f4501ee5ec84b170cc402"
+ integrity sha512-zGZJzzBUVDo/eV6KgbE0f0ZI7dInEYvo12Rb70uNQDshC3SkRMb67ja0GgRHZgAX3Za6rhaWlvbDO8rrGyAb1g==
dependencies:
"@babel/parser" "^7.1.0"
"@babel/types" "^7.0.0"
@@ -1399,24 +1413,31 @@
"@types/babel__traverse" "*"
"@types/babel__generator@*":
- version "7.6.1"
- resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.1.tgz#4901767b397e8711aeb99df8d396d7ba7b7f0e04"
- integrity sha512-bBKm+2VPJcMRVwNhxKu8W+5/zT7pwNEqeokFOmbvVSqGzFneNxYcEBro9Ac7/N9tlsaPYnZLK8J1LWKkMsLAew==
+ version "7.6.2"
+ resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.2.tgz#f3d71178e187858f7c45e30380f8f1b7415a12d8"
+ integrity sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ==
dependencies:
"@babel/types" "^7.0.0"
+"@types/babel__helper-plugin-utils@7":
+ version "7.10.0"
+ resolved "https://registry.yarnpkg.com/@types/babel__helper-plugin-utils/-/babel__helper-plugin-utils-7.10.0.tgz#dcd2416f9c189d5837ab2a276368cf67134efe78"
+ integrity sha512-60YtHzhQ9HAkToHVV+TB4VLzBn9lrfgrsOjiJMtbv/c1jPdekBxaByd6DMsGBzROXWoIL6U3lEFvvbu69RkUoA==
+ dependencies:
+ "@types/babel__core" "*"
+
"@types/babel__template@*":
- version "7.0.2"
- resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.0.2.tgz#4ff63d6b52eddac1de7b975a5223ed32ecea9307"
- integrity sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg==
+ version "7.4.0"
+ resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.0.tgz#0c888dd70b3ee9eebb6e4f200e809da0076262be"
+ integrity sha512-NTPErx4/FiPCGScH7foPyr+/1Dkzkni+rHiYHHoTjvwou7AQzJkNeD60A9CXRy+ZEN2B1bggmkTMCDb+Mv5k+A==
dependencies:
"@babel/parser" "^7.1.0"
"@babel/types" "^7.0.0"
"@types/babel__traverse@*":
- version "7.0.9"
- resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.0.9.tgz#be82fab304b141c3eee81a4ce3b034d0eba1590a"
- integrity sha512-jEFQ8L1tuvPjOI8lnpaf73oCJe+aoxL6ygqSy6c8LcW98zaC+4mzWuQIRCEvKeCOu+lbqdXcg4Uqmm1S8AP1tw==
+ version "7.11.1"
+ resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.11.1.tgz#654f6c4f67568e24c23b367e947098c6206fa639"
+ integrity sha512-Vs0hm0vPahPMYi9tDjtP66llufgO3ST16WXaSTtDGEl9cewAl3AibmxWw6TINOqHPT9z0uABKAYjT9jNSg4npw==
dependencies:
"@babel/types" "^7.3.0"
@@ -1465,7 +1486,7 @@
"@types/minimatch" "*"
"@types/node" "*"
-"@types/hoist-non-react-statics@^3.3.0":
+"@types/hoist-non-react-statics@^3.3.0", "@types/hoist-non-react-statics@^3.3.1":
version "3.3.1"
resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz#1124aafe5118cb591977aeb1ceaaed1070eb039f"
integrity sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==
@@ -1483,11 +1504,21 @@
resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.7.tgz#98a993516c859eb0d5c4c8f098317a9ea68db9ad"
integrity sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==
+"@types/json-stable-stringify@^1.0.32":
+ version "1.0.32"
+ resolved "https://registry.yarnpkg.com/@types/json-stable-stringify/-/json-stable-stringify-1.0.32.tgz#121f6917c4389db3923640b2e68de5fa64dda88e"
+ integrity sha512-q9Q6+eUEGwQkv4Sbst3J4PNgDOvpuVuKj79Hl/qnmBMEIPzB5QoFRUtjcgcg2xNUZyYUGXBk5wYIBKHt0A+Mxw==
+
"@types/json5@^0.0.29":
version "0.0.29"
resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee"
integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4=
+"@types/lodash@^4.14.150":
+ version "4.14.170"
+ resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.170.tgz#0d67711d4bf7f4ca5147e9091b847479b87925d6"
+ integrity sha512-bpcvu/MKHHeYX+qeEN8GE7DIravODWdACVA1ctevD8CN24RhPZIKMn9ntfAsrvLfSX3cR5RrBKAbYm9bGs0A+Q==
+
"@types/minimatch@*":
version "3.0.3"
resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d"
@@ -1498,6 +1529,11 @@
resolved "https://registry.yarnpkg.com/@types/node/-/node-13.9.5.tgz#59738bf30b31aea1faa2df7f4a5f55613750cf00"
integrity sha512-hkzMMD3xu6BrJpGVLeQ3htQQNAcOrJjX7WFmtK8zWQpz2UJf13LCFF2ALA7c9OVdvc2vQJeDdjfR35M0sBCxvw==
+"@types/node@14":
+ version "14.17.3"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-14.17.3.tgz#6d327abaa4be34a74e421ed6409a0ae2f47f4c3d"
+ integrity sha512-e6ZowgGJmTuXa3GyaPbTGxX17tnThl2aSSizrFthQ7m9uLGZBXiGhgE55cjRZTF5kjZvYn9EOPOMljdjwbflxw==
+
"@types/parse-json@^4.0.0":
version "4.0.0"
resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0"
@@ -1553,11 +1589,6 @@
resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.1.tgz#18845205e86ff0038517aab7a18a62a6b9f71275"
integrity sha512-EaCxbanVeyxDRTQBkdLb3Bvl/HK7PBK6UJjsSixB0iHKoWxE5uu2Q/DgtpOhPIojN0Zl1whvOd7PoHs2P0s5eA==
-"@types/schema-utils@^1.0.0":
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/@types/schema-utils/-/schema-utils-1.0.0.tgz#295d36f01e2cb8bc3207ca1d9a68e210db6b40cb"
- integrity sha512-YesPanU1+WCigC/Aj1Mga8UCOjHIfMNHZ3zzDsUY7lI8GlKnh/Kv2QwJOQ+jNQ36Ru7IfzSedlG14hppYaN13A==
-
"@types/warning@^3.0.0":
version "3.0.0"
resolved "https://registry.yarnpkg.com/@types/warning/-/warning-3.0.0.tgz#0d2501268ad8f9962b740d387c4654f5f8e23e52"
@@ -1568,6 +1599,60 @@
resolved "https://registry.yarnpkg.com/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44"
integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==
+"@vue/compiler-core@3.1.1", "@vue/compiler-core@^3.0.0":
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.1.1.tgz#4f2c5d70eabd454675714cc8bd2b97f6a8efb196"
+ integrity sha512-Z1RO3T6AEtAUFf2EqqovFm3ohAeTvFzRtB0qUENW2nEerJfdlk13/LS1a0EgsqlzxmYfR/S/S/gW9PLbFZZxkA==
+ dependencies:
+ "@babel/parser" "^7.12.0"
+ "@babel/types" "^7.12.0"
+ "@vue/shared" "3.1.1"
+ estree-walker "^2.0.1"
+ source-map "^0.6.1"
+
+"@vue/compiler-dom@3.1.1":
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.1.1.tgz#ef60d856ac2ede5b2ad5c72a7a68122895e3d652"
+ integrity sha512-nobRIo0t5ibzg+q8nC31m+aJhbq8FbWUoKvk6h3Vs1EqTDJaj6lBTcVTq5or8AYht7FbSpdAJ81isbJ1rWNX7A==
+ dependencies:
+ "@vue/compiler-core" "3.1.1"
+ "@vue/shared" "3.1.1"
+
+"@vue/compiler-sfc@^3.0.5":
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.1.1.tgz#d4e4507c013d0b219f0b106b317ec5bb1cde3398"
+ integrity sha512-lSgMsZaYHF+bAgryq5aUqpvyfhu52GJI2/4LoiJCE5uaxc6FCZfxfgqgw/d9ltiZghv+HiISFtmQVAVvlsk+/w==
+ dependencies:
+ "@babel/parser" "^7.13.9"
+ "@babel/types" "^7.13.0"
+ "@vue/compiler-core" "3.1.1"
+ "@vue/compiler-dom" "3.1.1"
+ "@vue/compiler-ssr" "3.1.1"
+ "@vue/shared" "3.1.1"
+ consolidate "^0.16.0"
+ estree-walker "^2.0.1"
+ hash-sum "^2.0.0"
+ lru-cache "^5.1.1"
+ magic-string "^0.25.7"
+ merge-source-map "^1.1.0"
+ postcss "^8.1.10"
+ postcss-modules "^4.0.0"
+ postcss-selector-parser "^6.0.4"
+ source-map "^0.6.1"
+
+"@vue/compiler-ssr@3.1.1":
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.1.1.tgz#1d08b98601397258ed059b75966e0e94a385d770"
+ integrity sha512-7H6krZtVt3h/YzfNp7eYK41hMDz8ZskiBy+Wby+EDRINX6BD9JQ5C8zyy2xAa7T6Iz2VrQzsaJ/Bb52lTPSS5A==
+ dependencies:
+ "@vue/compiler-dom" "3.1.1"
+ "@vue/shared" "3.1.1"
+
+"@vue/shared@3.1.1":
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.1.1.tgz#2287cfc3dc20e5b20aeb65c2c3a56533bdca801c"
+ integrity sha512-g+4pzAw7PYSjARtLBoDq6DmcblX8i9KJHSCnyM5VDDFFifUaUT9iHbFpOF/KOizQ9f7QAqU2JH3Y6aXjzUMhVA==
+
"@webassemblyjs/ast@1.11.0":
version "1.11.0"
resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.0.tgz#a5aa679efdc9e51707a4207139da57920555961f"
@@ -1729,6 +1814,11 @@ accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7:
mime-types "~2.1.24"
negotiator "0.6.2"
+ace-builds@^1.4.12:
+ version "1.4.12"
+ resolved "https://registry.yarnpkg.com/ace-builds/-/ace-builds-1.4.12.tgz#888efa386e36f4345f40b5233fcc4fe4c588fae7"
+ integrity sha512-G+chJctFPiiLGvs3+/Mly3apXTcfgE45dT5yp12BcWZ1kUs+gm0qd3/fv4gsz6fVag4mM0moHVpjHDIgph6Psg==
+
acorn-globals@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45"
@@ -1850,11 +1940,6 @@ ajv-errors@^1.0.0:
resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d"
integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==
-ajv-keywords@2.1.1:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762"
- integrity sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=
-
ajv-keywords@^3.1.0, ajv-keywords@^3.4.1:
version "3.4.1"
resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.4.1.tgz#ef916e271c64ac12171fd8384eaae6b2345854da"
@@ -1865,16 +1950,6 @@ ajv-keywords@^3.5.2:
resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d"
integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==
-ajv@5.5.1:
- version "5.5.1"
- resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.1.tgz#b38bb8876d9e86bee994956a04e721e88b248eb2"
- integrity sha1-s4u4h22ehr7plJVqBOch6IskjrI=
- dependencies:
- co "^4.6.0"
- fast-deep-equal "^1.0.0"
- fast-json-stable-stringify "^2.0.0"
- json-schema-traverse "^0.3.0"
-
ajv@^6.1.0, ajv@^6.10.0, ajv@^6.12.0, ajv@^6.5.5:
version "6.12.0"
resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.0.tgz#06d60b96d87b8454a5adaba86e7854da629db4b7"
@@ -2164,6 +2239,11 @@ async-limiter@~1.0.0:
resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd"
integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==
+async@0.9.x:
+ version "0.9.2"
+ resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d"
+ integrity sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=
+
async@^2.6.2:
version "2.6.3"
resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff"
@@ -2191,12 +2271,15 @@ atob@^2.1.2:
resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"
integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==
-attr-accept@^1.0.3:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/attr-accept/-/attr-accept-1.1.3.tgz#48230c79f93790ef2775fcec4f0db0f5db41ca52"
- integrity sha512-iT40nudw8zmCweivz6j58g+RT33I4KbaIvRUhjNmDwO2WmsQUxFEZZYZ5w3vXe5x5MX9D7mfvA/XaLOZYFR9EQ==
- dependencies:
- core-js "^2.5.0"
+attr-accept@^2.2.1:
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/attr-accept/-/attr-accept-2.2.2.tgz#646613809660110749e92f2c10833b70968d929b"
+ integrity sha512-7prDjvt9HmqiZ0cl5CRjtS84sEyhsHP2coDkaZKRKVfCDo9s7iw7ChVmar78Gu9pC4SoR/28wFu/G5JJhTnqEg==
+
+available-typed-arrays@^1.0.2:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.4.tgz#9e0ae84ecff20caae6a94a1c3bc39b955649b7a9"
+ integrity sha512-SA5mXJWrId1TaQjfxUYghbqQ/hYioKmLJvPJyDuYRtXXenFNMjj4hSSt1Cf1xsuXSXrtxrVC5Ot4eU6cOtBDdA==
aws-sign2@~0.7.0:
version "0.7.0"
@@ -2393,6 +2476,22 @@ babel-plugin-dynamic-import-node@^2.3.3:
dependencies:
object.assign "^4.1.0"
+babel-plugin-formatjs@^10.3.0:
+ version "10.3.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-formatjs/-/babel-plugin-formatjs-10.3.0.tgz#e8e706d17b713cc55ee1f6edfbbc15022a88d452"
+ integrity sha512-vDvXgAMrNO+3Hi4ZLLeQQdfayshWaXOysGW0Z/DLnFmJx8tpjv/HBJxqYQuoieitNOeYVJKqdk45JPf6rlkxtA==
+ dependencies:
+ "@babel/core" "^7.9.0"
+ "@babel/helper-plugin-utils" "^7.8.3"
+ "@babel/plugin-syntax-jsx" "7"
+ "@babel/traverse" "7"
+ "@babel/types" "^7.9.5"
+ "@formatjs/icu-messageformat-parser" "2.0.6"
+ "@formatjs/ts-transformer" "3.4.3"
+ "@types/babel__core" "^7.1.7"
+ "@types/babel__helper-plugin-utils" "7"
+ tslib "^2.1.0"
+
babel-plugin-polyfill-corejs2@^0.2.2:
version "0.2.2"
resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.2.tgz#e9124785e6fd94f94b618a7954e5693053bf5327"
@@ -2417,19 +2516,6 @@ babel-plugin-polyfill-regenerator@^0.2.2:
dependencies:
"@babel/helper-define-polyfill-provider" "^0.2.2"
-babel-plugin-react-intl@^4.1.2:
- version "4.3.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-react-intl/-/babel-plugin-react-intl-4.3.0.tgz#bcff1936dbad4a1bb2e7d955032f92aba6fdc063"
- integrity sha512-X4R9ZrQ6LR6EaNqk7DCA39GamD8Deo1XOeQGEbsswV741AgQ8HfuXtQ7FKCiDnfWp2nhVVio+BAIrhwS5JxHdQ==
- dependencies:
- "@babel/core" "^7.6.2"
- "@babel/helper-plugin-utils" "^7.0.0"
- "@types/babel__core" "^7.1.2"
- "@types/schema-utils" "^1.0.0"
- fs-extra "^8.0.1"
- intl-messageformat-parser "^3.2.2"
- schema-utils "^2.2.0"
-
babel-plugin-syntax-async-functions@^6.8.0:
version "6.13.0"
resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95"
@@ -2958,7 +3044,7 @@ base64-js@^1.0.2:
resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1"
integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==
-base64-js@^1.1.2, base64-js@^1.3.0:
+base64-js@^1.1.2, base64-js@^1.3.0, base64-js@^1.3.1:
version "1.5.1"
resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
@@ -3071,7 +3157,7 @@ bl@^1.0.0:
readable-stream "^2.3.5"
safe-buffer "^5.1.1"
-bluebird@^3.3.5:
+bluebird@^3.3.5, bluebird@^3.7.2:
version "3.7.2"
resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f"
integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==
@@ -3151,11 +3237,6 @@ brace-expansion@^1.1.7:
balanced-match "^1.0.0"
concat-map "0.0.1"
-brace@^0.11.0:
- version "0.11.1"
- resolved "https://registry.yarnpkg.com/brace/-/brace-0.11.1.tgz#4896fcc9d544eef45f4bb7660db320d3b379fe58"
- integrity sha1-SJb8ydVE7vRfS7dmDbMg07N5/lg=
-
braces@^2.3.1, braces@^2.3.2:
version "2.3.2"
resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729"
@@ -3286,14 +3367,6 @@ buffer-indexof@^1.0.0:
resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c"
integrity sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==
-buffer@^5.0.7:
- version "5.5.0"
- resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.5.0.tgz#9c3caa3d623c33dd1c7ef584b89b88bf9c9bc1ce"
- integrity sha512-9FTEDjLjwoAkEwyMGDjYJQN2gfRgOKBKRfiglhvibGbpeeU/pQn1bJxQqm32OD/AIeEuHxU9roxXxg34Byp/Ww==
- dependencies:
- base64-js "^1.0.2"
- ieee754 "^1.1.4"
-
buffer@^5.2.1:
version "5.6.0"
resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.6.0.tgz#a31749dc7d81d84db08abf937b6b8c4033f62786"
@@ -3302,6 +3375,14 @@ buffer@^5.2.1:
base64-js "^1.0.2"
ieee754 "^1.1.4"
+buffer@^6.0.3:
+ version "6.0.3"
+ resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6"
+ integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==
+ dependencies:
+ base64-js "^1.3.1"
+ ieee754 "^1.2.1"
+
bytes@3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048"
@@ -3414,10 +3495,10 @@ center-align@^0.1.1:
align-text "^0.1.3"
lazy-cache "^1.0.3"
-chai-immutable@^1.6.0:
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/chai-immutable/-/chai-immutable-1.6.0.tgz#9ec00bdd67948b13b20fcbb89cbf4af2ce6f9247"
- integrity sha1-nsAL3WeUixOyD8u4nL9K8s5vkkc=
+chai-immutable@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/chai-immutable/-/chai-immutable-2.1.0.tgz#c407008c22e1292ef6bb2e4b80fc4968264e430d"
+ integrity sha512-IQrtwbwQYn2tkw/BOL+xYhJMcwuil1w0dzv9nZqi/w+jdQhdAn9rDyJb3qK+LvZkctJqdvy6opALGFZcdriW7A==
chai-spies@^1.0.0:
version "1.0.0"
@@ -3447,7 +3528,7 @@ chalk@^1.0.0, chalk@^1.1.3:
strip-ansi "^3.0.0"
supports-color "^2.0.0"
-chalk@^2.0.0, chalk@^2.3.2, chalk@^2.4.1:
+chalk@^2.0.0, chalk@^2.3.2, chalk@^2.4.1, chalk@^2.4.2:
version "2.4.2"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
@@ -3616,11 +3697,6 @@ clone@^1.0.4:
resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e"
integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4=
-co@^4.6.0:
- version "4.6.0"
- resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
- integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=
-
coa@^2.0.2:
version "2.0.2"
resolved "https://registry.yarnpkg.com/coa/-/coa-2.0.2.tgz#43f6c21151b4ef2bf57187db0d73de229e3e7ec3"
@@ -3630,16 +3706,16 @@ coa@^2.0.2:
chalk "^2.4.1"
q "^1.1.2"
-codemirror@^5.58.2:
- version "5.58.2"
- resolved "https://registry.yarnpkg.com/codemirror/-/codemirror-5.58.2.tgz#ed54a1796de1498688bea1cdd4e9eeb187565d1b"
- integrity sha512-K/hOh24cCwRutd1Mk3uLtjWzNISOkm4fvXiMO7LucCrqbh6aJDdtqUziim3MZUI6wOY0rvY1SlL1Ork01uMy6w==
-
codemirror@^5.60.0:
version "5.61.1"
resolved "https://registry.yarnpkg.com/codemirror/-/codemirror-5.61.1.tgz#ccfc8a43b8fcfb8b12e8e75b5ffde48d541406e0"
integrity sha512-+D1NZjAucuzE93vJGbAaXzvoBHwp9nJZWWWF9utjv25+5AZUiah6CIlfb4ikG4MoDsFsCG8niiJH5++OO2LgIQ==
+codemirror@^5.62.0:
+ version "5.62.0"
+ resolved "https://registry.yarnpkg.com/codemirror/-/codemirror-5.62.0.tgz#e9ecd012e6f9eaf2e05ff4a449ff750f51619e22"
+ integrity sha512-Xnl3304iCc8nyVZuRkzDVVwc794uc9QNX0UcPGeNic1fbzkSrO4l4GVXho9tRNKBgPYZXgocUqXyfIv3BILhCQ==
+
collection-visit@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0"
@@ -3677,7 +3753,7 @@ colorette@^1.2.1, colorette@^1.2.2:
resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94"
integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==
-colors@^1.1.2:
+colors@^1.1.2, colors@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78"
integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==
@@ -3689,6 +3765,11 @@ combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6:
dependencies:
delayed-stream "~1.0.0"
+commander@7, commander@^7.0.0:
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7"
+ integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==
+
commander@^2.19.0, commander@^2.20.0, commander@^2.8.1:
version "2.20.3"
resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
@@ -3699,11 +3780,6 @@ commander@^4.0.1:
resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068"
integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==
-commander@^7.0.0:
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7"
- integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==
-
commondir@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
@@ -3767,6 +3843,13 @@ console-stream@^0.1.1:
resolved "https://registry.yarnpkg.com/console-stream/-/console-stream-0.1.1.tgz#a095fe07b20465955f2fafd28b5d72bccd949d44"
integrity sha1-oJX+B7IEZZVfL6/Si11yvM2UnUQ=
+consolidate@^0.16.0:
+ version "0.16.0"
+ resolved "https://registry.yarnpkg.com/consolidate/-/consolidate-0.16.0.tgz#a11864768930f2f19431660a65906668f5fbdc16"
+ integrity sha512-Nhl1wzCslqXYTJVDyJCu3ODohy9OfBMB5uD2BiBTzd7w+QY0lBzafkR8y8755yMYHAaMD4NuzbAw03/xzfw+eQ==
+ dependencies:
+ bluebird "^3.7.2"
+
content-disposition@0.5.3, content-disposition@^0.5.2:
version "0.5.3"
resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd"
@@ -3831,21 +3914,34 @@ core-js-compat@^3.14.0:
browserslist "^4.16.6"
semver "7.0.0"
+core-js-compat@^3.15.0:
+ version "3.15.1"
+ resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.15.1.tgz#1afe233716d37ee021956ef097594071b2b585a7"
+ integrity sha512-xGhzYMX6y7oEGQGAJmP2TmtBLvR4nZmRGEcFa3ubHOq5YEp51gGN9AovVa0AoujGZIq+Wm6dISiYyGNfdflYww==
+ dependencies:
+ browserslist "^4.16.6"
+ semver "7.0.0"
+
core-js@^0.8.3:
version "0.8.4"
resolved "https://registry.yarnpkg.com/core-js/-/core-js-0.8.4.tgz#c22665f1e0d1b9c3c5e1b08dabd1f108695e4fcf"
integrity sha1-wiZl8eDRucPF4bCNq9HxCGleT88=
-core-js@^2.4.0, core-js@^2.5.0:
+core-js@^2.4.0:
version "2.6.11"
resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c"
integrity sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==
-core-js@^3.0.0, core-js@^3.14.0:
+core-js@^3.0.0:
version "3.14.0"
resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.14.0.tgz#62322b98c71cc2018b027971a69419e2425c2a6c"
integrity sha512-3s+ed8er9ahK+zJpp9ZtuVcDoFzHNiZsPbNAAE4KXgrRHbjSqqNN6xGSXq6bq7TZIbKj4NLrLb6bJ5i+vSVjHA==
+core-js@^3.15.0:
+ version "3.15.1"
+ resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.15.1.tgz#6c08ab88abdf56545045ccf5fd81f47f407e7f1a"
+ integrity sha512-h8VbZYnc9pDzueiS2610IULDkpFFPunHwIpl8yRwFahAEEdSpHlTy3h3z3rKq5h11CaUdBEeRViu9AYvbxiMeg==
+
core-util-is@1.0.2, core-util-is@~1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
@@ -4444,23 +4540,26 @@ deep-equal@^1.0.0, deep-equal@^1.0.1:
object-keys "^1.1.1"
regexp.prototype.flags "^1.2.0"
-deep-equal@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-2.0.1.tgz#fc12bbd6850e93212f21344748682ccc5a8813cf"
- integrity sha512-7Et6r6XfNW61CPPCIYfm1YPGSmh6+CliYeL4km7GWJcpX5LTAflGF8drLLR+MZX+2P3NZfAfSduutBbSWqER4g==
+deep-equal@^2.0.5:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-2.0.5.tgz#55cd2fe326d83f9cbf7261ef0e060b3f724c5cb9"
+ integrity sha512-nPiRgmbAtm1a3JsnLCf6/SLfXcjyN5v8L1TXzdCmHrXJ4hx+gW/w1YCcn7z8gJtSiDArZCgYtbao3QqLm/N1Sw==
dependencies:
- es-abstract "^1.16.3"
- es-get-iterator "^1.0.1"
+ call-bind "^1.0.0"
+ es-get-iterator "^1.1.1"
+ get-intrinsic "^1.0.1"
is-arguments "^1.0.4"
- is-date-object "^1.0.1"
- is-regex "^1.0.4"
+ is-date-object "^1.0.2"
+ is-regex "^1.1.1"
isarray "^2.0.5"
- object-is "^1.0.1"
+ object-is "^1.1.4"
object-keys "^1.1.1"
- regexp.prototype.flags "^1.2.0"
- side-channel "^1.0.1"
+ object.assign "^4.1.2"
+ regexp.prototype.flags "^1.3.0"
+ side-channel "^1.0.3"
which-boxed-primitive "^1.0.1"
- which-collection "^1.0.0"
+ which-collection "^1.0.1"
+ which-typed-array "^1.1.2"
deep-is@^0.1.3, deep-is@~0.1.3:
version "0.1.3"
@@ -4542,6 +4641,11 @@ dfa@^1.2.0:
resolved "https://registry.yarnpkg.com/dfa/-/dfa-1.2.0.tgz#96ac3204e2d29c49ea5b57af8d92c2ae12790657"
integrity sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q==
+diff-match-patch@^1.0.4:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/diff-match-patch/-/diff-match-patch-1.0.5.tgz#abb584d5f10cd1196dfc55aa03701592ae3f7b37"
+ integrity sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw==
+
diff@5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b"
@@ -4704,10 +4808,12 @@ ee-first@1.1.1:
resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=
-ejs@^2.6.1:
- version "2.7.4"
- resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.7.4.tgz#48661287573dcc53e366c7a1ae52c3a120eec9ba"
- integrity sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==
+ejs@^3.1.6:
+ version "3.1.6"
+ resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.6.tgz#5bfd0a0689743bb5268b3550cceeebbc1702822a"
+ integrity sha512-9lt9Zse4hPucPkoP7FHDF0LQAlGyF9JVpnClFLFH3aSSbxmyoqINRpp/9wePWJTUl4KOQwRL72Iw3InHPDkoGw==
+ dependencies:
+ jake "^10.6.1"
ekko-lightbox@^5.3.0:
version "5.3.0"
@@ -4771,10 +4877,10 @@ entities@^2.0.0:
resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.0.tgz#68d6084cab1b079767540d80e56a39b423e4abf4"
integrity sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw==
-entities@~1.1.1:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56"
- integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==
+entities@~2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/entities/-/entities-2.1.0.tgz#992d3129cf7df6870b96c57858c249a120f8b8b5"
+ integrity sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==
envinfo@^7.7.3:
version "7.8.1"
@@ -4795,7 +4901,7 @@ error-ex@^1.2.0, error-ex@^1.3.1:
dependencies:
is-arrayish "^0.2.1"
-es-abstract@^1.16.3, es-abstract@^1.17.0-next.1, es-abstract@^1.17.2, es-abstract@^1.17.4:
+es-abstract@^1.17.0-next.1, es-abstract@^1.17.2:
version "1.17.5"
resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.5.tgz#d8c9d1d66c8981fb9200e2251d799eee92774ae9"
integrity sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==
@@ -4834,23 +4940,24 @@ es-abstract@^1.18.0-next.1, es-abstract@^1.18.0-next.2, es-abstract@^1.18.2:
string.prototype.trimstart "^1.0.4"
unbox-primitive "^1.0.1"
-es-get-iterator@^1.0.1:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.0.tgz#bb98ad9d6d63b31aacdc8f89d5d0ee57bcb5b4c8"
- integrity sha512-UfrmHuWQlNMTs35e1ypnvikg6jCz3SK8v8ImvmDsh36fCVUR1MqoFDiyn0/k52C8NqO3YsO8Oe0azeesNuqSsQ==
+es-get-iterator@^1.1.1:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.2.tgz#9234c54aba713486d7ebde0220864af5e2b283f7"
+ integrity sha512-+DTO8GYwbMCwbywjimwZMHp8AuYXOS2JZFWoi2AlPOS3ebnII9w/NLpNZtA7A0YLaVDw+O7KFCeoIV7OPvM7hQ==
dependencies:
- es-abstract "^1.17.4"
+ call-bind "^1.0.2"
+ get-intrinsic "^1.1.0"
has-symbols "^1.0.1"
- is-arguments "^1.0.4"
- is-map "^2.0.1"
- is-set "^2.0.1"
+ is-arguments "^1.1.0"
+ is-map "^2.0.2"
+ is-set "^2.0.2"
is-string "^1.0.5"
isarray "^2.0.5"
-es-module-lexer@^0.4.0:
- version "0.4.1"
- resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.4.1.tgz#dda8c6a14d8f340a24e34331e0fab0cb50438e0e"
- integrity sha512-ooYciCUtfw6/d2w56UVeqHPcoCFAiJdz5XOkYpv/Txl1HMUozpXjz/2RIQgqwKdXNDPSF1W7mJCFse3G+HDyAA==
+es-module-lexer@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.6.0.tgz#e72ab05b7412e62b9be37c37a09bdb6000d706f0"
+ integrity sha512-f8kcHX1ArhllUtb/wVSyvygoKCznIjnxhLxy7TCvIiMdT7fL4ZDTIKaadMe6eLvOXg6Wk02UeoFgUoZ2EKZZUA==
es-to-primitive@^1.2.1:
version "1.2.1"
@@ -5120,10 +5227,10 @@ eslint-visitor-keys@^2.0.0:
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303"
integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==
-eslint@^7.28.0:
- version "7.28.0"
- resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.28.0.tgz#435aa17a0b82c13bb2be9d51408b617e49c1e820"
- integrity sha512-UMfH0VSjP0G4p3EWirscJEQ/cHqnT/iuH6oNZOB94nBjWbMnhGEPxsZm1eyIW0C/9jLI0Fow4W5DXLjEI7mn1g==
+eslint@^7.29.0:
+ version "7.29.0"
+ resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.29.0.tgz#ee2a7648f2e729485e4d0bd6383ec1deabc8b3c0"
+ integrity sha512-82G/JToB9qIy/ArBzIWG9xvvwL3R86AlCjtGw+A29OMZDqhTybz/MByORSukGxeI+YPCR4coYyITKk8BFH9nDA==
dependencies:
"@babel/code-frame" "7.12.11"
"@eslint/eslintrc" "^0.4.2"
@@ -5218,6 +5325,11 @@ estree-is-function@^1.0.0:
resolved "https://registry.yarnpkg.com/estree-is-function/-/estree-is-function-1.0.0.tgz#c0adc29806d7f18a74db7df0f3b2666702e37ad2"
integrity sha512-nSCWn1jkSq2QAtkaVLJZY2ezwcFO161HVc174zL1KPW3RJ+O6C3eJb8Nx7OXzvhoEv+nLgSR1g71oWUHUDTrJA==
+estree-walker@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac"
+ integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==
+
esutils@^2.0.2:
version "2.0.3"
resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
@@ -5462,11 +5574,6 @@ extsprintf@^1.2.0:
resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f"
integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8=
-fast-deep-equal@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614"
- integrity sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=
-
fast-deep-equal@^3.1.1:
version "3.1.1"
resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz#545145077c501491e33b15ec408c294376e94ae4"
@@ -5489,6 +5596,18 @@ fast-glob@^3.0.3:
micromatch "^4.0.2"
picomatch "^2.2.1"
+fast-glob@^3.2.4:
+ version "3.2.5"
+ resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.5.tgz#7939af2a656de79a4f1901903ee8adcaa7cb9661"
+ integrity sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==
+ dependencies:
+ "@nodelib/fs.stat" "^2.0.2"
+ "@nodelib/fs.walk" "^1.2.3"
+ glob-parent "^5.1.0"
+ merge2 "^1.3.0"
+ micromatch "^4.0.2"
+ picomatch "^2.2.1"
+
fast-json-stable-stringify@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
@@ -5584,10 +5703,17 @@ file-loader@^6.2.0:
loader-utils "^2.0.0"
schema-utils "^3.0.0"
-file-saver@^1.3.3:
- version "1.3.8"
- resolved "https://registry.yarnpkg.com/file-saver/-/file-saver-1.3.8.tgz#e68a30c7cb044e2fb362b428469feb291c2e09d8"
- integrity sha512-spKHSBQIxxS81N/O21WmuXA2F6wppUCsutpzenOeZzOCCJ5gEfcbqJP983IrpLXzYmXnMUa6J03SubcNPdKrlg==
+file-saver@^2.0.5:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/file-saver/-/file-saver-2.0.5.tgz#d61cfe2ce059f414d899e9dd6d4107ee25670c38"
+ integrity sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==
+
+file-selector@^0.2.2:
+ version "0.2.4"
+ resolved "https://registry.yarnpkg.com/file-selector/-/file-selector-0.2.4.tgz#7b98286f9dbb9925f420130ea5ed0a69238d4d80"
+ integrity sha512-ZDsQNbrv6qRi1YTDOEWzf5J2KjZ9KMI1Q2SGeTkCJmNNW25Jg4TW4UMcmoqcg4WrAyKRcpBXdbWRxkfrOzVRbA==
+ dependencies:
+ tslib "^2.0.3"
file-type@5.2.0, file-type@^5.2.0:
version "5.2.0"
@@ -5629,6 +5755,13 @@ file-uri-to-path@1.0.0:
resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd"
integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==
+filelist@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.2.tgz#80202f21462d4d1c2e214119b1807c1bc0380e5b"
+ integrity sha512-z7O0IS8Plc39rTCq6i6iHxk43duYOn8uFJiWSewIq0Bww1RNybVHSCjahmcC87ZqAm4OTvFzlzeGu3XAzG1ctQ==
+ dependencies:
+ minimatch "^3.0.4"
+
filename-reserved-regex@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz#abf73dfab735d045440abfea2d91f389ebbfa229"
@@ -5757,13 +5890,6 @@ flat-cache@^3.0.4:
flatted "^3.1.0"
rimraf "^3.0.2"
-flat@^4.0.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/flat/-/flat-4.1.0.tgz#090bec8b05e39cba309747f1d588f04dbaf98db2"
- integrity sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw==
- dependencies:
- is-buffer "~2.0.3"
-
flat@^5.0.2:
version "5.0.2"
resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241"
@@ -5779,20 +5905,15 @@ flot@^4.2.2:
resolved "https://registry.yarnpkg.com/flot/-/flot-4.2.2.tgz#0661d9e3805c86ccd36560f9602a0d1484d60fe8"
integrity sha512-Strct/A27o0TA25X7Z0pxKhwK4djiP1Kjeqj0tkiqrkRu1qYPqfbp5BYuxEL8CWDNtj85Uc0PnG2E2plo1+VMg==
-flow-bin@^0.46.0:
- version "0.46.0"
- resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.46.0.tgz#06ad7fe19dddb1042264438064a2a32fee12b872"
- integrity sha1-Bq1/4Z3dsQQiZEOAZKKjL+4SuHI=
-
follow-redirects@^1.0.0:
version "1.13.0"
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.0.tgz#b42e8d93a2a7eea5ed88633676d6597bc8e384db"
integrity sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA==
-font-awesome-animation@^0.2.1:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/font-awesome-animation/-/font-awesome-animation-0.2.1.tgz#38f1c323ce9baf0932a5dc5596ece762e42f58b0"
- integrity sha512-kOLT6yuQG06xRrjLoI1cCVrmMyREnKIk7TCkdRd4nQtHnSue4pRxvyTKN3SVV4Zs/pasfMxd296a11u7uSBI3A==
+font-awesome-animation@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/font-awesome-animation/-/font-awesome-animation-1.1.1.tgz#fa7e685c163034d59a22b565af1d848d3f7866b6"
+ integrity sha512-WHl4zhyb0LeqT+v2JClv5yNZ+63e2Mbbu+9ycL3FGVHtZA8zn4iaMBxA6AgcJySLlfdjuTEA0lBZBW2CE1cwpQ==
fontkit@^1.8.1:
version "1.8.1"
@@ -5816,6 +5937,11 @@ for-in@^1.0.2:
resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=
+foreach@^2.0.5:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99"
+ integrity sha1-C+4AUBiusmDQo6865ljdATbsG5k=
+
forever-agent@~0.6.1:
version "0.6.1"
resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
@@ -5880,16 +6006,7 @@ fs-extra@^0.30.0:
path-is-absolute "^1.0.0"
rimraf "^2.2.8"
-fs-extra@^8.0.1:
- version "8.1.0"
- resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0"
- integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==
- dependencies:
- graceful-fs "^4.2.0"
- jsonfile "^4.0.0"
- universalify "^0.1.0"
-
-fs-extra@^9.1.0:
+fs-extra@^9.0.0, fs-extra@^9.1.0:
version "9.1.0"
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d"
integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==
@@ -5949,10 +6066,12 @@ generic-names@^1.0.1:
dependencies:
loader-utils "^0.2.16"
-gensync@^1.0.0-beta.1:
- version "1.0.0-beta.1"
- resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269"
- integrity sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==
+generic-names@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/generic-names/-/generic-names-2.0.1.tgz#f8a378ead2ccaa7a34f0317b05554832ae41b872"
+ integrity sha512-kPCHWa1m9wGG/OwQpeweTwM/PYiQLrUIxXbt/P4Nic3LbGjCP0YwrALHW1uNLKZ0LIMg+RF+XRlj2ekT9ZlZAQ==
+ dependencies:
+ loader-utils "^1.1.0"
gensync@^1.0.0-beta.2:
version "1.0.0-beta.2"
@@ -5974,7 +6093,7 @@ get-func-name@^2.0.0:
resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41"
integrity sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=
-get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1:
+get-intrinsic@^1.0.1, get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6"
integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==
@@ -6086,7 +6205,7 @@ glob-to-regexp@^0.4.0, glob-to-regexp@^0.4.1:
resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e"
integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==
-glob@7.1.7:
+glob@7.1.7, glob@^7.1.7:
version "7.1.7"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90"
integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==
@@ -6218,11 +6337,6 @@ growl@1.10.5:
resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e"
integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==
-gud@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/gud/-/gud-1.0.0.tgz#a489581b17e6a70beca9abe3ae57de7a499852c0"
- integrity sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw==
-
handle-thing@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e"
@@ -6323,15 +6437,20 @@ has@^1.0.1, has@^1.0.3:
dependencies:
function-bind "^1.1.1"
+hash-sum@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/hash-sum/-/hash-sum-2.0.0.tgz#81d01bb5de8ea4a214ad5d6ead1b523460b0b45a"
+ integrity sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==
+
he@1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
-highlight.js@^10.4.1:
- version "10.4.1"
- resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.4.1.tgz#d48fbcf4a9971c4361b3f95f302747afe19dbad0"
- integrity sha512-yR5lWvNz7c85OhVAEAeFhVCc/GV4C30Fjzc/rCP0aCWzc1UUOPUk55dK/qdwTZHBvMZo+eZ2jpk62ndX/xMFlg==
+highlight.js@^11.0.1:
+ version "11.0.1"
+ resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-11.0.1.tgz#a78bafccd9aa297978799fe5eed9beb7ee1ef887"
+ integrity sha512-EqYpWyTF2s8nMfttfBA2yLKPNoZCO33pLS4MnbXQ4hECf1TKujCt1Kq7QAdrio7roL4+CqsfjqwYj4tYgq0pJQ==
history@^4.9.0:
version "4.10.1"
@@ -6553,6 +6672,11 @@ ieee754@^1.1.4:
resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84"
integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==
+ieee754@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
+ integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
+
ignore@^4.0.6:
version "4.0.6"
resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc"
@@ -6774,36 +6898,14 @@ interpret@^2.2.0:
resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9"
integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==
-intl-format-cache@^2.0.5:
- version "2.2.9"
- resolved "https://registry.yarnpkg.com/intl-format-cache/-/intl-format-cache-2.2.9.tgz#fb560de20c549cda20b569cf1ffb6dc62b5b93b4"
- integrity sha512-Zv/u8wRpekckv0cLkwpVdABYST4hZNTDaX7reFetrYTJwxExR2VyTqQm+l0WmL0Qo8Mjb9Tf33qnfj0T7pjxdQ==
-
-intl-messageformat-parser@1.4.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/intl-messageformat-parser/-/intl-messageformat-parser-1.4.0.tgz#b43d45a97468cadbe44331d74bb1e8dea44fc075"
- integrity sha1-tD1FqXRoytvkQzHXS7Ho3qRPwHU=
-
-intl-messageformat-parser@^3.2.2:
- version "3.6.4"
- resolved "https://registry.yarnpkg.com/intl-messageformat-parser/-/intl-messageformat-parser-3.6.4.tgz#5199d106d816c3dda26ee0694362a9cf823978fb"
- integrity sha512-RgPGwue0mJtoX2Ax8EmMzJzttxjnva7gx0Q7mKJ4oALrTZvtmCeAw5Msz2PcjW4dtCh/h7vN/8GJCxZO1uv+OA==
- dependencies:
- "@formatjs/intl-unified-numberformat" "^3.2.0"
-
-intl-messageformat@^2.0.0, intl-messageformat@^2.1.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/intl-messageformat/-/intl-messageformat-2.2.0.tgz#345bcd46de630b7683330c2e52177ff5eab484fc"
- integrity sha1-NFvNRt5jC3aDMwwuUhd/9eq0hPw=
- dependencies:
- intl-messageformat-parser "1.4.0"
-
-intl-relativeformat@^2.0.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/intl-relativeformat/-/intl-relativeformat-2.2.0.tgz#6aca95d019ec8d30b6c5653b6629f9983ea5b6c5"
- integrity sha512-4bV/7kSKaPEmu6ArxXf9xjv1ny74Zkwuey8Pm01NH4zggPP7JHwg2STk8Y3JdspCKRDriwIyLRfEXnj2ZLr4Bw==
+intl-messageformat@9.7.0:
+ version "9.7.0"
+ resolved "https://registry.yarnpkg.com/intl-messageformat/-/intl-messageformat-9.7.0.tgz#a1903f71a9c828e4e3204b5a5b7f098897714726"
+ integrity sha512-8oiPpjantFesqixf3Fi/j3i35wPH+iWNciSm1IGb2q74MFwotsz0lYkzyQg/62ni6j+XWlmmImKNYo5tKn6TKw==
dependencies:
- intl-messageformat "^2.0.0"
+ "@formatjs/fast-memoize" "1.1.1"
+ "@formatjs/icu-messageformat-parser" "2.0.6"
+ tslib "^2.1.0"
into-stream@^3.1.0:
version "3.1.0"
@@ -6813,7 +6915,7 @@ into-stream@^3.1.0:
from2 "^2.1.1"
p-is-promise "^1.1.0"
-invariant@^2.1.1, invariant@^2.2.2, invariant@^2.2.4:
+invariant@^2.2.2, invariant@^2.2.4:
version "2.2.4"
resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6"
integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==
@@ -6864,6 +6966,13 @@ is-arguments@^1.0.4:
resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.0.4.tgz#3faf966c7cba0ff437fb31f6250082fcf0448cf3"
integrity sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==
+is-arguments@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.0.tgz#62353031dfbee07ceb34656a6bde59efecae8dd9"
+ integrity sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==
+ dependencies:
+ call-bind "^1.0.0"
+
is-arrayish@^0.2.1:
version "0.2.1"
resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
@@ -6910,11 +7019,6 @@ is-buffer@^1.1.5:
resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
-is-buffer@~2.0.3:
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.4.tgz#3e572f23c8411a5cfd9557c849e3665e0b290623"
- integrity sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==
-
is-callable@^1.1.4, is-callable@^1.1.5:
version "1.1.5"
resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.5.tgz#f7e46b596890456db74e7f6e976cb3273d06faab"
@@ -6958,6 +7062,11 @@ is-date-object@^1.0.1:
resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e"
integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==
+is-date-object@^1.0.2:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.4.tgz#550cfcc03afada05eea3dd30981c7b09551f73e5"
+ integrity sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A==
+
is-descriptor@^0.1.0:
version "0.1.6"
resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca"
@@ -7039,6 +7148,11 @@ is-map@^2.0.1:
resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.1.tgz#520dafc4307bb8ebc33b813de5ce7c9400d644a1"
integrity sha512-T/S49scO8plUiAOA2DBTBG3JHpn1yiw0kRp6dgiZ0v2/6twi5eiB0rHtHFH9ZIrvlWc6+4O+m4zg5+Z833aXgw==
+is-map@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127"
+ integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==
+
is-natural-number@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/is-natural-number/-/is-natural-number-4.0.1.tgz#ab9d76e1db4ced51e35de0c72ebecf09f734cde8"
@@ -7134,7 +7248,7 @@ is-regex@^1.0.4, is-regex@^1.0.5:
dependencies:
has "^1.0.3"
-is-regex@^1.1.3:
+is-regex@^1.1.1, is-regex@^1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.3.tgz#d029f9aff6448b93ebbe3f33dac71511fdcbef9f"
integrity sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==
@@ -7152,6 +7266,11 @@ is-set@^2.0.1:
resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.1.tgz#d1604afdab1724986d30091575f54945da7e5f43"
integrity sha512-eJEzOtVyenDs1TMzSQ3kU3K+E0GUS9sno+F0OBT97xsgcJsF9nXMBtkT9/kut5JEpM7oL7X/0qxR17K3mcwIAA==
+is-set@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.2.tgz#90755fa4c2562dc1c5d4024760d6119b94ca18ec"
+ integrity sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==
+
is-stream@^1.0.0, is-stream@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
@@ -7198,6 +7317,17 @@ is-symbol@^1.0.3:
dependencies:
has-symbols "^1.0.2"
+is-typed-array@^1.1.3:
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.5.tgz#f32e6e096455e329eb7b423862456aa213f0eb4e"
+ integrity sha512-S+GRDgJlR3PyEbsX/Fobd9cqpZBuvUS+8asRqYDMLCb2qMzt1oz5m5oxQCxOgUDxiWsOVNi4yaF+/uvdlHlYug==
+ dependencies:
+ available-typed-arrays "^1.0.2"
+ call-bind "^1.0.2"
+ es-abstract "^1.18.0-next.2"
+ foreach "^2.0.5"
+ has-symbols "^1.0.1"
+
is-typedarray@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
@@ -7292,6 +7422,16 @@ isurl@^1.0.0-alpha5:
has-to-string-tag-x "^1.2.0"
is-object "^1.0.1"
+jake@^10.6.1:
+ version "10.8.2"
+ resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.2.tgz#ebc9de8558160a66d82d0eadc6a2e58fbc500a7b"
+ integrity sha512-eLpKyrfG3mzvGE2Du8VoPbeSkRry093+tyNjdYaBbJS9v17knImYGNXQCUV0gLxQtF82m3E8iRb/wdSQZLoq7A==
+ dependencies:
+ async "0.9.x"
+ chalk "^2.4.2"
+ filelist "^1.0.1"
+ minimatch "^3.0.4"
+
jest-worker@^27.0.2:
version "27.0.2"
resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.0.2.tgz#4ebeb56cef48b3e7514552f80d0d80c0129f0b05"
@@ -7441,11 +7581,6 @@ json-parse-even-better-errors@^2.3.0:
resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d"
integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==
-json-schema-traverse@^0.3.0:
- version "0.3.1"
- resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340"
- integrity sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=
-
json-schema-traverse@^0.4.1:
version "0.4.1"
resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
@@ -7509,13 +7644,6 @@ jsonfile@^2.1.0:
optionalDependencies:
graceful-fs "^4.1.6"
-jsonfile@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb"
- integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=
- optionalDependencies:
- graceful-fs "^4.1.6"
-
jsonfile@^6.0.1:
version "6.1.0"
resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae"
@@ -7568,15 +7696,15 @@ just-curry-it@^3.1.0:
resolved "https://registry.yarnpkg.com/just-curry-it/-/just-curry-it-3.1.0.tgz#ab59daed308a58b847ada166edd0a2d40766fbc5"
integrity sha512-mjzgSOFzlrurlURaHVjnQodyPNvrHrf1TbQP2XU9NSqBtHQPuHZ+Eb6TAJP7ASeJN9h9K0KXoRTs8u6ouHBKvg==
-jwt-decode@^2.2.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/jwt-decode/-/jwt-decode-2.2.0.tgz#7d86bd56679f58ce6a84704a657dd392bba81a79"
- integrity sha1-fYa9VmefWM5qhHBKZX3TkruoGnk=
+jwt-decode@^3.1.2:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/jwt-decode/-/jwt-decode-3.1.2.tgz#3fb319f3675a2df0c2895c8f5e9fa4b67b04ed59"
+ integrity sha512-UfpWE/VZn0iP50d8cz9NrZLM9lSWhcJ+0Gt/nm4by88UL+J1SiKN8/5dkjMmbEzwL2CAe+67GsegCbIKtbp75A==
-katex@^0.10.0:
- version "0.10.2"
- resolved "https://registry.yarnpkg.com/katex/-/katex-0.10.2.tgz#39973edbb65eda5b6f9e7f41648781e557dd4932"
- integrity sha512-cQOmyIRoMloCoSIOZ1+gEwsksdJZ1EW4SWm3QzxSza/QsnZr6D4U1V9S4q+B/OLm2OQ8TCBecQ8MaIfnScI7cw==
+katex@^0.12.0:
+ version "0.12.0"
+ resolved "https://registry.yarnpkg.com/katex/-/katex-0.12.0.tgz#2fb1c665dbd2b043edcf8a1f5c555f46beaa0cb9"
+ integrity sha512-y+8btoc/CK70XqcHqjxiGWBOeIL8upbS0peTPXTvgrh21n1RiWWcIpSWM+4uXq+IAgNh9YYQWdc7LVDPDAEEAg==
dependencies:
commander "^2.19.0"
@@ -7694,10 +7822,10 @@ lines-and-columns@^1.1.6:
resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00"
integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=
-linkify-it@^2.0.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-2.2.0.tgz#e3b54697e78bf915c70a38acd78fd09e0058b1cf"
- integrity sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw==
+linkify-it@^3.0.1:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-3.0.2.tgz#f55eeb8bc1d3ae754049e124ab3bb56d97797fb8"
+ integrity sha512-gDBO4aHNZS6coiZCKVhSNh43F9ioIL4JwRjLZPkoLIY4yZFwg264Y5lu2x6rb1Js42Gh6Yqm2f6L2AJcnkzinQ==
dependencies:
uc.micro "^1.0.1"
@@ -7737,7 +7865,7 @@ loader-utils@^0.2.16, loader-utils@^0.2.6:
json5 "^0.5.0"
object-assign "^4.0.1"
-loader-utils@^1.2.3, loader-utils@^1.4.0:
+loader-utils@^1.1.0, loader-utils@^1.2.3, loader-utils@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613"
integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==
@@ -7785,16 +7913,16 @@ locate-path@^6.0.0:
dependencies:
p-locate "^5.0.0"
-lodash-es@^4.17.15:
- version "4.17.15"
- resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.15.tgz#21bd96839354412f23d7a10340e5eac6ee455d78"
- integrity sha512-rlrc3yU3+JNOpZ9zj5pQtxnx2THmvRykwL4Xlxoa8I9lHBlVbbyPhgyPMioxVZ4NqyxaVVtaJnzsyOidQIhyyQ==
-
lodash-es@^4.17.20:
version "4.17.21"
resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee"
integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==
+lodash.camelcase@^4.3.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6"
+ integrity sha1-soqmKIorn8ZRA1x3EfZathkDMaY=
+
lodash.clonedeep@^4.5.0:
version "4.5.0"
resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef"
@@ -7810,7 +7938,7 @@ lodash.get@^4.1.2, lodash.get@^4.4.2:
resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99"
integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=
-lodash.isequal@^4.1.1, lodash.isequal@^4.5.0:
+lodash.isequal@^4.5.0:
version "4.5.0"
resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0"
integrity sha1-QVxEePK8wwEgwizhDtMib30+GOA=
@@ -7906,6 +8034,14 @@ loud-rejection@^1.0.0:
currently-unhandled "^0.4.1"
signal-exit "^3.0.0"
+loud-rejection@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-2.2.0.tgz#4255eb6e9c74045b0edc021fa7397ab655a8517c"
+ integrity sha512-S0FayMXku80toa5sZ6Ro4C+s+EtFDCsyJNG/AzFMfX3AxD5Si4dZsgzm/kKnbOxHl5Cv8jBlno8+3XYIh2pNjQ==
+ dependencies:
+ currently-unhandled "^0.4.1"
+ signal-exit "^3.0.2"
+
lowercase-keys@1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306"
@@ -7934,6 +8070,13 @@ lru-cache@^4.0.1:
pseudomap "^1.0.2"
yallist "^2.1.2"
+lru-cache@^5.1.1:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920"
+ integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==
+ dependencies:
+ yallist "^3.0.2"
+
lru-cache@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
@@ -7948,6 +8091,13 @@ magic-string@0.25.1:
dependencies:
sourcemap-codec "^1.4.1"
+magic-string@^0.25.7:
+ version "0.25.7"
+ resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051"
+ integrity sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==
+ dependencies:
+ sourcemap-codec "^1.4.4"
+
make-dir@^1.0.0, make-dir@^1.2.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c"
@@ -8001,21 +8151,21 @@ map-visit@^1.0.0:
dependencies:
object-visit "^1.0.0"
-markdown-it@^8.4.1:
- version "8.4.2"
- resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-8.4.2.tgz#386f98998dc15a37722aa7722084f4020bdd9b54"
- integrity sha512-GcRz3AWTqSUphY3vsUqQSFMbgR38a4Lh3GWlHRh/7MRwz8mcu9n2IO7HOh+bXHrR9kOPDl5RNCaEsrneb+xhHQ==
+markdown-it@^12.0.6:
+ version "12.0.6"
+ resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-12.0.6.tgz#adcc8e5fe020af292ccbdf161fe84f1961516138"
+ integrity sha512-qv3sVLl4lMT96LLtR7xeRJX11OUFjsaD5oVat2/SNBIb21bJXwal2+SklcRbTwGwqWpWH/HRtYavOoJE+seL8w==
dependencies:
- argparse "^1.0.7"
- entities "~1.1.1"
- linkify-it "^2.0.0"
+ argparse "^2.0.1"
+ entities "~2.1.0"
+ linkify-it "^3.0.1"
mdurl "^1.0.1"
uc.micro "^1.0.5"
-marked@^2.1.1:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/marked/-/marked-2.1.1.tgz#b7c27f520fc4de0ddd049d9b4be3b04e06314923"
- integrity sha512-5XFS69o9CzDpQDSpUYC+AN2xvq8yl1EGa5SG/GI1hP78/uTeo3PDfiDNmsUyiahpyhToDDJhQk7fNtJsga+KVw==
+marked@^2.1.2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/marked/-/marked-2.1.2.tgz#59579e17b02443312caa1509994d5a0b18ae38e1"
+ integrity sha512-ueJhIvklJJw04qxQbGIAu63EXwwOCYc7yKMBjgagTM4rjC5QtWyqSNgW7jCosV1/Km/1TUfs5qEpAqcGG0Mo5g==
matchmediaquery@^0.3.0:
version "0.3.1"
@@ -8095,6 +8245,13 @@ merge-source-map@1.0.4:
dependencies:
source-map "^0.5.6"
+merge-source-map@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/merge-source-map/-/merge-source-map-1.1.0.tgz#2fdde7e6020939f70906a68f2d7ae685e4c8c646"
+ integrity sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==
+ dependencies:
+ source-map "^0.6.1"
+
merge-stream@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
@@ -8193,14 +8350,13 @@ min-document@^2.19.0:
dependencies:
dom-walk "^0.1.0"
-mini-create-react-context@^0.3.0:
- version "0.3.2"
- resolved "https://registry.yarnpkg.com/mini-create-react-context/-/mini-create-react-context-0.3.2.tgz#79fc598f283dd623da8e088b05db8cddab250189"
- integrity sha512-2v+OeetEyliMt5VHMXsBhABoJ0/M4RCe7fatd/fBy6SMiKazUSEt3gxxypfnk2SHMkdBYvorHRoQxuGoiwbzAw==
+mini-create-react-context@^0.4.0:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/mini-create-react-context/-/mini-create-react-context-0.4.1.tgz#072171561bfdc922da08a60c2197a497cc2d1d5e"
+ integrity sha512-YWCYEmd5CQeHGSAKrYvXgmzzkrvssZcuuQDDeqkT+PziKGMgE+0MCCtcKbROzocGBG1meBLl2FotlRwf4gAzbQ==
dependencies:
- "@babel/runtime" "^7.4.0"
- gud "^1.0.0"
- tiny-warning "^1.0.2"
+ "@babel/runtime" "^7.12.1"
+ tiny-warning "^1.0.3"
mini-css-extract-plugin@^1.6.0:
version "1.6.0"
@@ -8306,11 +8462,6 @@ moment-timezone@^0.5.31:
resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.1.tgz#b2be769fa31940be9eeea6469c075e35006fa3d3"
integrity sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==
-moment@^2.24.0:
- version "2.24.0"
- resolved "https://registry.yarnpkg.com/moment/-/moment-2.24.0.tgz#0d055d53f5052aa653c9f6eb68bb5d12bf5c2b5b"
- integrity sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==
-
mozjpeg@^7.0.0:
version "7.1.0"
resolved "https://registry.yarnpkg.com/mozjpeg/-/mozjpeg-7.1.0.tgz#23f202f3e48e98f02ed84f415358d4cbfab66c19"
@@ -8541,6 +8692,14 @@ object-is@^1.0.1:
resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.0.2.tgz#6b80eb84fe451498f65007982f035a5b445edec4"
integrity sha512-Epah+btZd5wrrfjkJZq1AOB9O6OxUQto45hzFd7lXGrpHPGE0W1k+426yrZV+k6NJOzLNNW/nVsmZdIWsAqoOQ==
+object-is@^1.1.4:
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac"
+ integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.1.3"
+
object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
@@ -9264,6 +9423,20 @@ postcss-modules-values@^4.0.0:
dependencies:
icss-utils "^5.0.0"
+postcss-modules@^4.0.0:
+ version "4.1.3"
+ resolved "https://registry.yarnpkg.com/postcss-modules/-/postcss-modules-4.1.3.tgz#c4c4c41d98d97d24c70e88dacfc97af5a4b3e21d"
+ integrity sha512-dBT39hrXe4OAVYJe/2ZuIZ9BzYhOe7t+IhedYeQ2OxKwDpAGlkEN/fR0fGnrbx4BvgbMReRX4hCubYK9cE/pJQ==
+ dependencies:
+ generic-names "^2.0.1"
+ icss-replace-symbols "^1.1.0"
+ lodash.camelcase "^4.3.0"
+ postcss-modules-extract-imports "^3.0.0"
+ postcss-modules-local-by-default "^4.0.0"
+ postcss-modules-scope "^3.0.0"
+ postcss-modules-values "^4.0.0"
+ string-hash "^1.1.1"
+
postcss-selector-parser@^6.0.2:
version "6.0.2"
resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz#934cf799d016c83411859e09dcecade01286ec5c"
@@ -9295,7 +9468,7 @@ postcss@^6.0.1, postcss@^6.0.2:
source-map "^0.6.1"
supports-color "^5.4.0"
-postcss@^8.2.15:
+postcss@^8.1.10, postcss@^8.2.15:
version "8.3.5"
resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.3.5.tgz#982216b113412bc20a86289e91eb994952a5b709"
integrity sha512-NxTuJocUhYGsMiMFHDUkmjSKT3EdH4/WbGF6GCi1NDGk+vbcUTun4fpbOqaPtD8IIsztA2ilZm2DhYCuyN58gA==
@@ -9329,10 +9502,10 @@ prettier@^2.3.1:
resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.3.1.tgz#76903c3f8c4449bc9ac597acefa24dc5ad4cbea6"
integrity sha512-p+vNbgpLjif/+D+DwAZAbndtRrR0md0MwfmOVN9N+2RgyACMT+7tfaRnT+WDPkqnuVwleyuBIG2XBxKDme3hPA==
-pretty-ms@^6.0.1:
- version "6.0.1"
- resolved "https://registry.yarnpkg.com/pretty-ms/-/pretty-ms-6.0.1.tgz#03ec6cfee20329f142645e63efad96bb775d3da4"
- integrity sha512-ke4njoVmlotekHlHyCZ3wI/c5AMT8peuHs8rKJqekj/oR5G8lND2dVpicFlUz5cbZgE290vvkMuDwfj/OcW1kw==
+pretty-ms@^7.0.1:
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/pretty-ms/-/pretty-ms-7.0.1.tgz#7d903eaab281f7d8e03c66f867e239dc32fb73e8"
+ integrity sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==
dependencies:
parse-ms "^2.1.0"
@@ -9371,7 +9544,7 @@ prop-types-extra@^1.1.0:
react-is "^16.3.2"
warning "^4.0.0"
-prop-types@^15.5.4, prop-types@^15.5.7, prop-types@^15.5.8, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2:
+prop-types@^15.5.7, prop-types@^15.5.8, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2:
version "15.7.2"
resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5"
integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==
@@ -9515,15 +9688,16 @@ raw-body@2.4.0:
iconv-lite "0.4.24"
unpipe "1.0.0"
-react-ace@5.9.0:
- version "5.9.0"
- resolved "https://registry.yarnpkg.com/react-ace/-/react-ace-5.9.0.tgz#427a1cc4869b960a6f9748aa7eb169a9269fc336"
- integrity sha512-r6Tuce6seG05g9kT2Tio6DWohy06knG7e5u9OfhvMquZL+Cyu4eqPf60K1Vi2RXlS3+FWrdG8Rinwu4+oQjjgw==
+react-ace@^9.4.1:
+ version "9.4.1"
+ resolved "https://registry.yarnpkg.com/react-ace/-/react-ace-9.4.1.tgz#5f446c2764a0b615e8d00cd251b9b35d95365e37"
+ integrity sha512-vhOFrB5Xy++mcPNc6wc1mwMFP/FZOnYxQPqgRl/dLfkZBbrJf4SAgXaa6PU4AXWu1u5bfxOmRwwHaZPrLb6d9Q==
dependencies:
- brace "^0.11.0"
+ ace-builds "^1.4.12"
+ diff-match-patch "^1.0.4"
lodash.get "^4.4.2"
- lodash.isequal "^4.1.1"
- prop-types "^15.5.8"
+ lodash.isequal "^4.5.0"
+ prop-types "^15.7.2"
react-bootstrap@1.6.1:
version "1.6.1"
@@ -9548,17 +9722,15 @@ react-bootstrap@1.6.1:
uncontrollable "^7.2.1"
warning "^4.0.3"
-react-collapse@^4.0.2:
- version "4.0.3"
- resolved "https://registry.yarnpkg.com/react-collapse/-/react-collapse-4.0.3.tgz#b96de959ed0092a43534630b599a4753dd76d543"
- integrity sha512-OO4NhtEqFtz+1ma31J1B7+ezdRnzHCZiTGSSd/Pxoks9hxrZYhzFEddeYt05A/1477xTtdrwo7xEa2FLJyWGCQ==
- dependencies:
- prop-types "^15.5.8"
+react-collapse@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/react-collapse/-/react-collapse-5.1.0.tgz#36f69ecb0fe797f976aaf5e4f2b2c248d2760140"
+ integrity sha512-5v0ywsn9HjiR/odNzbRDs0RZfrnbdSippJebWOBCFFDA12Vx8DddrbI4qWVf1P2wTiVagrpcSy07AU0b6+gM9Q==
-react-copy-to-clipboard@^5.0.1:
- version "5.0.2"
- resolved "https://registry.yarnpkg.com/react-copy-to-clipboard/-/react-copy-to-clipboard-5.0.2.tgz#d82a437e081e68dfca3761fbd57dbf2abdda1316"
- integrity sha512-/2t5mLMMPuN5GmdXo6TebFa8IoFxZ+KTDDqYhcDm0PhkgEzSxVvIX26G20s1EB02A4h2UZgwtfymZ3lGJm0OLg==
+react-copy-to-clipboard@^5.0.3:
+ version "5.0.3"
+ resolved "https://registry.yarnpkg.com/react-copy-to-clipboard/-/react-copy-to-clipboard-5.0.3.tgz#2a0623b1115a1d8c84144e9434d3342b5af41ab4"
+ integrity sha512-9S3j+m+UxDZOM0Qb8mhnT/rMR0NGSrj9A/073yz2DSxPMYhmYFBMYIdI2X4o8AjOjyFsSNxDRnCX6s/gRxpriw==
dependencies:
copy-to-clipboard "^3"
prop-types "^15.5.8"
@@ -9580,18 +9752,19 @@ react-dom@^16.8.6:
prop-types "^15.6.2"
scheduler "^0.19.1"
-react-dropzone@^3.5.3:
- version "3.13.4"
- resolved "https://registry.yarnpkg.com/react-dropzone/-/react-dropzone-3.13.4.tgz#84da26815c40339691c49b4544c2ef7a16912ccc"
- integrity sha1-hNomgVxAM5aRxJtFRMLvehaRLMw=
+react-dropzone@^11.3.2:
+ version "11.3.2"
+ resolved "https://registry.yarnpkg.com/react-dropzone/-/react-dropzone-11.3.2.tgz#2efb6af800a4779a9daa1e7ba1f8d51d0ab862d7"
+ integrity sha512-Z0l/YHcrNK1r85o6RT77Z5XgTARmlZZGfEKBl3tqTXL9fZNQDuIdRx/J0QjvR60X+yYu26dnHeaG2pWU+1HHvw==
dependencies:
- attr-accept "^1.0.3"
- prop-types "^15.5.7"
+ attr-accept "^2.2.1"
+ file-selector "^0.2.2"
+ prop-types "^15.7.2"
-react-fast-compare@^2.0.2:
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-2.0.4.tgz#e84b4d455b0fec113e0402c329352715196f81f9"
- integrity sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw==
+react-fast-compare@^3.1.1:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-3.2.0.tgz#641a9da81b6a6320f270e89724fb45a0b39e43bb"
+ integrity sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA==
react-height@^3.0.0:
version "3.0.1"
@@ -9600,15 +9773,15 @@ react-height@^3.0.0:
dependencies:
prop-types "^15.5.8"
-react-helmet@^5.0.3:
- version "5.2.1"
- resolved "https://registry.yarnpkg.com/react-helmet/-/react-helmet-5.2.1.tgz#16a7192fdd09951f8e0fe22ffccbf9bb3e591ffa"
- integrity sha512-CnwD822LU8NDBnjCpZ4ySh8L6HYyngViTZLfBBb3NjtrpN8m49clH8hidHouq20I51Y6TpCTISCBbqiY5GamwA==
+react-helmet@^6.1.0:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/react-helmet/-/react-helmet-6.1.0.tgz#a750d5165cb13cf213e44747502652e794468726"
+ integrity sha512-4uMzEY9nlDlgxr61NL3XbKRy1hEkXmKNXhjbAIOVw5vcFrsdYbH2FEwcNyWvWinl103nXgzYNlns9ca+8kFiWw==
dependencies:
object-assign "^4.1.1"
- prop-types "^15.5.4"
- react-fast-compare "^2.0.2"
- react-side-effect "^1.1.0"
+ prop-types "^15.7.2"
+ react-fast-compare "^3.1.1"
+ react-side-effect "^2.1.0"
react-immutable-proptypes@^2.1.0:
version "2.2.0"
@@ -9627,17 +9800,22 @@ react-intl-translations-manager@^5.0.0:
json-stable-stringify "^1.0.1"
mkdirp "^0.5.1"
-react-intl@2.4.0:
- version "2.4.0"
- resolved "https://registry.yarnpkg.com/react-intl/-/react-intl-2.4.0.tgz#66c14dc9df9a73b2fbbfbd6021726e80a613eb15"
- integrity sha1-ZsFNyd+ac7L7v71gIXJugKYT6xU=
- dependencies:
- intl-format-cache "^2.0.5"
- intl-messageformat "^2.1.0"
- intl-relativeformat "^2.0.0"
- invariant "^2.1.1"
+react-intl@5.20.3:
+ version "5.20.3"
+ resolved "https://registry.yarnpkg.com/react-intl/-/react-intl-5.20.3.tgz#03a5220cec7f5108ab99b5eae5b19f9c55b5f4d0"
+ integrity sha512-IFMAWZ5S3abQG7g9+ZVwyxbwDShk6R+JH5RoObfxBHYnvf6XwhrXIgGQ7zGgtJcqEEsVNPWe3CVvGhiVldsqpQ==
+ dependencies:
+ "@formatjs/ecma402-abstract" "1.9.3"
+ "@formatjs/icu-messageformat-parser" "2.0.6"
+ "@formatjs/intl" "1.13.1"
+ "@formatjs/intl-displaynames" "5.1.5"
+ "@formatjs/intl-listformat" "6.2.5"
+ "@types/hoist-non-react-statics" "^3.3.1"
+ hoist-non-react-statics "^3.3.2"
+ intl-messageformat "9.7.0"
+ tslib "^2.1.0"
-react-is@^16.12.0, react-is@^16.13.1, react-is@^16.3.2, react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.1:
+react-is@^16.13.1, react-is@^16.3.2, react-is@^16.4.2, react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.1:
version "16.13.1"
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
@@ -9682,56 +9860,54 @@ react-redux@^7.2.0:
prop-types "^15.7.2"
react-is "^16.13.1"
-react-responsive@^8.0.1:
- version "8.0.3"
- resolved "https://registry.yarnpkg.com/react-responsive/-/react-responsive-8.0.3.tgz#ceb84205359b6032d306650e51490dc1f63d907b"
- integrity sha512-F9VXyLao7O8XHXbLjQbIr4+mC6Zr0RDTwNjd7ixTmYEAyKyNanBkLkFchNaMZgszoSK6PgSs/3m/QDWw33/gpg==
+react-responsive@^8.2.0:
+ version "8.2.0"
+ resolved "https://registry.yarnpkg.com/react-responsive/-/react-responsive-8.2.0.tgz#e0ffb306cfd8f38c9c12e26725b9e1245fa9debc"
+ integrity sha512-iagCqVrw4QSjhxKp3I/YK6+ODkWY6G+YPElvdYKiUUbywwh9Ds0M7r26Fj2/7dWFFbOpcGnJE6uE7aMck8j5Qg==
dependencies:
hyphenate-style-name "^1.0.0"
matchmediaquery "^0.3.0"
prop-types "^15.6.1"
shallow-equal "^1.1.0"
-react-router-dom@^5.0.1:
- version "5.1.2"
- resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-5.1.2.tgz#06701b834352f44d37fbb6311f870f84c76b9c18"
- integrity sha512-7BPHAaIwWpZS074UKaw1FjVdZBSVWEk8IuDXdB+OkLb8vd/WRQIpA4ag9WQk61aEfQs47wHyjWUoUGGZxpQXew==
+react-router-dom@^5.2.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-5.2.0.tgz#9e65a4d0c45e13289e66c7b17c7e175d0ea15662"
+ integrity sha512-gxAmfylo2QUjcwxI63RhQ5G85Qqt4voZpUXSEqCwykV0baaOTQDR1f0PmY8AELqIyVc0NEZUj0Gov5lNGcXgsA==
dependencies:
"@babel/runtime" "^7.1.2"
history "^4.9.0"
loose-envify "^1.3.1"
prop-types "^15.6.2"
- react-router "5.1.2"
+ react-router "5.2.0"
tiny-invariant "^1.0.2"
tiny-warning "^1.0.0"
-react-router@5.1.2, react-router@^5.0.1:
- version "5.1.2"
- resolved "https://registry.yarnpkg.com/react-router/-/react-router-5.1.2.tgz#6ea51d789cb36a6be1ba5f7c0d48dd9e817d3418"
- integrity sha512-yjEuMFy1ONK246B+rsa0cUam5OeAQ8pyclRDgpxuSCrAlJ1qN9uZ5IgyKC7gQg0w8OM50NXHEegPh/ks9YuR2A==
+react-router@5.2.0, react-router@^5.2.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/react-router/-/react-router-5.2.0.tgz#424e75641ca8747fbf76e5ecca69781aa37ea293"
+ integrity sha512-smz1DUuFHRKdcJC0jobGo8cVbhO3x50tCL4icacOlcwDOEQPq4TMqwx3sY1TP+DvtTgz4nm3thuo7A+BK2U0Dw==
dependencies:
"@babel/runtime" "^7.1.2"
history "^4.9.0"
hoist-non-react-statics "^3.1.0"
loose-envify "^1.3.1"
- mini-create-react-context "^0.3.0"
+ mini-create-react-context "^0.4.0"
path-to-regexp "^1.7.0"
prop-types "^15.6.2"
react-is "^16.6.0"
tiny-invariant "^1.0.2"
tiny-warning "^1.0.0"
-react-side-effect@^1.1.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/react-side-effect/-/react-side-effect-1.2.0.tgz#0e940c78faba0c73b9b0eba9cd3dda8dfb7e7dae"
- integrity sha512-v1ht1aHg5k/thv56DRcjw+WtojuuDHFUgGfc+bFHOWsF4ZK6C2V57DO0Or0GPsg6+LSTE0M6Ry/gfzhzSwbc5w==
- dependencies:
- shallowequal "^1.0.1"
+react-side-effect@^2.1.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/react-side-effect/-/react-side-effect-2.1.1.tgz#66c5701c3e7560ab4822a4ee2742dee215d72eb3"
+ integrity sha512-2FoTQzRNTncBVtnzxFOk2mCpcfxQpenBMbk5kSVBg5UcPqV9fRbgY2zhb7GTWWOlpFmAxhClBDlIq8Rsubz1yQ==
-react-toggle@4.1.1:
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/react-toggle/-/react-toggle-4.1.1.tgz#2317f67bf918ea3508a96b09dd383efd9da572af"
- integrity sha512-+wXlMcSpg8SmnIXauMaZiKpR+r2wp2gMUteroejp2UTSqGTVvZLN+m9EhMzFARBKEw7KpQOwzCyfzeHeAndQGw==
+react-toggle@4.1.2:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/react-toggle/-/react-toggle-4.1.2.tgz#b00500832f925ad524356d909821821ae39f6c52"
+ integrity sha512-4Ohw31TuYQdhWfA6qlKafeXx3IOH7t4ZHhmRdwsm1fQREwOBGxJT+I22sgHqR/w8JRdk+AeMCJXPImEFSrNXow==
dependencies:
classnames "^2.2.5"
@@ -9876,21 +10052,19 @@ redux-actions@^2.6.5:
reduce-reducers "^0.4.3"
to-camel-case "^1.0.0"
-redux-form@^8.2.4:
- version "8.3.1"
- resolved "https://registry.yarnpkg.com/redux-form/-/redux-form-8.3.1.tgz#a2958375d85fa064690285848dda3c9b22828fab"
- integrity sha512-YEr0w+KftgN0l6cLVlpsLDqnATw/MIG7wpxCJwPdLC2PWbTv/0H9T7Ny6n8r1KZAfvTXUlX61jm4obFP7bggbw==
+redux-form@^8.3.7:
+ version "8.3.7"
+ resolved "https://registry.yarnpkg.com/redux-form/-/redux-form-8.3.7.tgz#24eb6d8b8b37098b4702fc4c52b6596b01a71c82"
+ integrity sha512-CUv6z5Gpog3shB3Ptsd+x6dmeQ1AzIlx1Tniri3j7Gf+oBBtLrD7dHMLOcTbJKsaEwG49SB/z1Pik3Hy04mNcQ==
dependencies:
- "@babel/runtime" "^7.8.4"
+ "@babel/runtime" "^7.9.2"
es6-error "^4.1.1"
hoist-non-react-statics "^3.3.2"
invariant "^2.2.4"
is-promise "^2.1.0"
lodash "^4.17.15"
- lodash-es "^4.17.15"
prop-types "^15.6.1"
- react-is "^16.12.0"
- react-lifecycles-compat "^3.0.4"
+ react-is "^16.4.2"
redux-promise-middleware@^6.1.1:
version "6.1.2"
@@ -9938,21 +10112,13 @@ redux-thunk@^2.3.0:
resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.3.0.tgz#51c2c19a185ed5187aaa9a2d08b666d0d6467622"
integrity sha512-km6dclyFnmcvxhAcrQV2AkZmPQjzPDjgVlQtR0EQjxZPyJ0BnMf3in1ryuR8A2qU0HldVRfxYXbFSKlI3N7Slw==
-redux@^4.0.0:
+redux@^4.0.0, redux@^4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/redux/-/redux-4.1.0.tgz#eb049679f2f523c379f1aff345c8612f294c88d4"
integrity sha512-uI2dQN43zqLWCt6B/BMGRMY6db7TTY4qeHHfGeKb3EOhmOKjU3KdWvNLJyqaHRksv/ErdNH7cFZWg9jXtewy4g==
dependencies:
"@babel/runtime" "^7.9.2"
-redux@^4.0.4:
- version "4.0.5"
- resolved "https://registry.yarnpkg.com/redux/-/redux-4.0.5.tgz#4db5de5816e17891de8a80c424232d06f051d93f"
- integrity sha512-VSz1uMAH24DM6MF72vcojpYPtrTUu3ByVWfPL1nPfVRb5mZVTve5GnNCUV53QM/BZ66xfWrm0CTWoM+Xlz8V1w==
- dependencies:
- loose-envify "^1.4.0"
- symbol-observable "^1.2.0"
-
regenerate-unicode-properties@^8.2.0:
version "8.2.0"
resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec"
@@ -10008,7 +10174,7 @@ regexp.prototype.flags@^1.2.0:
define-properties "^1.1.3"
es-abstract "^1.17.0-next.1"
-regexp.prototype.flags@^1.3.1:
+regexp.prototype.flags@^1.3.0, regexp.prototype.flags@^1.3.1:
version "1.3.1"
resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz#7ef352ae8d159e758c0eadca6f8fcb4eef07be26"
integrity sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==
@@ -10221,7 +10387,7 @@ resolve@^1.1.5, resolve@^1.14.2, resolve@^1.20.0, resolve@^1.9.0:
is-core-module "^2.2.0"
path-parse "^1.0.6"
-resolve@^1.10.0, resolve@^1.10.1, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.3.2:
+resolve@^1.10.0, resolve@^1.10.1, resolve@^1.12.0, resolve@^1.13.1:
version "1.15.1"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.15.1.tgz#27bdcdeffeaf2d6244b95bb0f9f4b4653451f3e8"
integrity sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w==
@@ -10342,7 +10508,7 @@ schema-utils@^1.0.0:
ajv-errors "^1.0.0"
ajv-keywords "^3.1.0"
-schema-utils@^2.2.0, schema-utils@^2.6.5:
+schema-utils@^2.6.5:
version "2.6.5"
resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.6.5.tgz#c758f0a7e624263073d396e29cd40aa101152d8a"
integrity sha512-5KXuwKziQrTVHh8j/Uxz+QUbxkaLW9X/86NBlx/gnKgtsZA2GIVMUn17qWhRFwF8jdYb3Dig5hRO/W5mZqy6SQ==
@@ -10431,7 +10597,7 @@ semver-truncate@^1.1.2:
dependencies:
semver "^5.3.0"
-"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.6.0, semver@^5.7.0:
+"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.5.0, semver@^5.6.0, semver@^5.7.0:
version "5.7.1"
resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
@@ -10479,10 +10645,10 @@ serialize-javascript@5.0.1, serialize-javascript@^5.0.1:
dependencies:
randombytes "^2.1.0"
-serialize-javascript@^3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-3.1.0.tgz#8bf3a9170712664ef2561b44b691eafe399214ea"
- integrity sha512-JIJT1DGiWmIKhzRsG91aS6Ze4sFUrYbltlkg2onR5OrnNM02Kl/hnY/T4FN2omvyeBbQmMJv+K4cPOpGzOTFBg==
+serialize-javascript@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8"
+ integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==
dependencies:
randombytes "^2.1.0"
@@ -10556,11 +10722,6 @@ shallow-equal@^1.1.0:
resolved "https://registry.yarnpkg.com/shallow-equal/-/shallow-equal-1.2.1.tgz#4c16abfa56043aa20d050324efa68940b0da79da"
integrity sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA==
-shallowequal@^1.0.1:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8"
- integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==
-
shebang-command@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
@@ -10585,15 +10746,7 @@ shebang-regex@^3.0.0:
resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
-side-channel@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.2.tgz#df5d1abadb4e4bf4af1cd8852bf132d2f7876947"
- integrity sha512-7rL9YlPHg7Ancea1S96Pa8/QWb4BtXL/TZvS6B8XFetGBeuhAsfmUspK6DokBeZ64+Kj9TCNRD/30pVz1BvQNA==
- dependencies:
- es-abstract "^1.17.0-next.1"
- object-inspect "^1.7.0"
-
-side-channel@^1.0.4:
+side-channel@^1.0.3, side-channel@^1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf"
integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==
@@ -10762,7 +10915,7 @@ source-map@~0.7.2:
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383"
integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==
-sourcemap-codec@^1.4.1:
+sourcemap-codec@^1.4.1, sourcemap-codec@^1.4.4:
version "1.4.8"
resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4"
integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==
@@ -10912,6 +11065,11 @@ strict-uri-encode@^1.0.0:
resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713"
integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=
+string-hash@^1.1.1:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/string-hash/-/string-hash-1.1.3.tgz#e8aafc0ac1855b4666929ed7dd1275df5d6c811b"
+ integrity sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs=
+
"string-width@^1.0.2 || 2":
version "2.1.1"
resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
@@ -11167,11 +11325,6 @@ sweetalert2@^10.15.6:
resolved "https://registry.yarnpkg.com/sweetalert2/-/sweetalert2-10.16.9.tgz#8ed86f2fa811a136667a48357e204348705be8c9"
integrity sha512-oNe+md5tmmS3fGfVHa7gVPlun7Td2oANSacnZCeghnrr3OHBi6UPVPU+GFrymwaDqwQspACilLRmRnM7aTjNPA==
-symbol-observable@^1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804"
- integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==
-
symbol-tree@^3.2.4:
version "3.2.4"
resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2"
@@ -11240,7 +11393,7 @@ tempusdominus-bootstrap-4@^5.39.0:
moment-timezone "^0.5.31"
popper.js "^1.16.1"
-terser-webpack-plugin@^5.1.1, terser-webpack-plugin@^5.1.3:
+terser-webpack-plugin@^5.1.3:
version "5.1.3"
resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.1.3.tgz#30033e955ca28b55664f1e4b30a1347e61aa23af"
integrity sha512-cxGbMqr6+A2hrIB5ehFIF+F/iST5ZOxvOmy9zih9ySbP1C2oEWQSOUS+2SNBTjzx5xLKO4xnod9eywdfq1Nb9A==
@@ -11311,7 +11464,7 @@ tiny-invariant@^1.0.2:
resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.1.0.tgz#634c5f8efdc27714b7f386c35e6760991d230875"
integrity sha512-ytxQvrb1cPc9WBEI/HSeYYoGD0kWnGEOR8RY6KomWLBVhqz0RgTwVO9dLrGz7dC+nN9llyI7OKAgRq8Vq4ZBSw==
-tiny-warning@^1.0.0, tiny-warning@^1.0.2:
+tiny-warning@^1.0.0, tiny-warning@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754"
integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==
@@ -11457,6 +11610,11 @@ tslib@^1.10.0, tslib@^1.9.0:
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.11.1.tgz#eb15d128827fbee2841549e171f45ed338ac7e35"
integrity sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==
+tslib@^2.0.3, tslib@^2.1.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.0.tgz#803b8cdab3e12ba581a4ca41c8839bbb0dacb09e"
+ integrity sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==
+
tunnel-agent@^0.6.0:
version "0.6.0"
resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
@@ -11521,6 +11679,11 @@ typedarray@^0.0.6:
resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
+typescript@^4.0:
+ version "4.3.4"
+ resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.3.4.tgz#3f85b986945bcf31071decdd96cf8bfa65f9dcbc"
+ integrity sha512-uauPG7XZn9F/mo+7MrsRjyvbxFpzemRjKEZXS4AK83oP2KKOJPvb+9cO/gmnv8arWZvhnjVOXz7B49m1l0e9Ew==
+
uc.micro@^1.0.1, uc.micro@^1.0.5:
version "1.0.6"
resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac"
@@ -11639,7 +11802,7 @@ uniq@^1.0.1:
resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff"
integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=
-universalify@^0.1.0, universalify@^0.1.2:
+universalify@^0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==
@@ -11779,10 +11942,10 @@ validate-npm-package-license@^3.0.1:
spdx-correct "^3.0.0"
spdx-expression-parse "^3.0.0"
-validator@^7.0.0:
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/validator/-/validator-7.2.0.tgz#a63dcbaba51d4350bf8df20988e0d5a54d711791"
- integrity sha512-c8NGTUYeBEcUIGeMppmNVKHE7wwfm3mYbNZxV+c5mlv9fDHI7Ad3p07qfNrn/CvpdkK2k61fOLRO2sTEhgQXmg==
+validator@^13.6.0:
+ version "13.6.0"
+ resolved "https://registry.yarnpkg.com/validator/-/validator-13.6.0.tgz#1e71899c14cdc7b2068463cb24c1cc16f6ec7059"
+ integrity sha512-gVgKbdbHgtxpRyR8K0O6oFZPhhB5tT1jeEHZR0Znr9Svg03U0+r9DXWMrnRAB+HtCStDQKlaIZm42tVsVjqtjg==
value-equal@^1.0.1:
version "1.0.1"
@@ -11803,10 +11966,10 @@ verror@1.10.0:
core-util-is "1.0.2"
extsprintf "^1.2.0"
-viz.js@^1.8.0:
- version "1.8.2"
- resolved "https://registry.yarnpkg.com/viz.js/-/viz.js-1.8.2.tgz#d9cc04cd99f98ec986bf9054db76a6cbcdc5d97a"
- integrity sha512-W+1+N/hdzLpQZEcvz79n2IgUE9pfx6JLdHh3Kh8RGvLL8P1LdJVQmi2OsDcLdY4QVID4OUy+FPelyerX0nJxIQ==
+viz.js@^2.1.2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/viz.js/-/viz.js-2.1.2.tgz#6f09cd4e10af28754a6d50b055bd2e4a7693983a"
+ integrity sha512-UO6CPAuEMJ8oNR0gLLNl+wUiIzQUsyUOp8SyyDKTqVRBtq7kk1VnFmIZW8QufjxGrGEuI+LVR7p/C7uEKy0LQw==
w3c-hr-time@^1.0.2:
version "1.0.2"
@@ -11985,10 +12148,10 @@ webpack-sources@^2.3.0:
source-list-map "^2.0.1"
source-map "^0.6.1"
-webpack@^5.39.1:
- version "5.39.1"
- resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.39.1.tgz#d1e014b6d71e1aef385316ad528f21cd5b1f9784"
- integrity sha512-ulOvoNCh2PvTUa+zbpRuEb1VPeQnhxpnHleMPVVCq3QqnaFogjsLyps+o42OviQFoaGtTQYrUqDXu1QNkvUPzw==
+webpack@^5.40.0:
+ version "5.40.0"
+ resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.40.0.tgz#3182cfd324759d715252cf541901a226e57b5061"
+ integrity sha512-c7f5e/WWrxXWUzQqTBg54vBs5RgcAgpvKE4F4VegVgfo4x660ZxYUF2/hpMkZUnLjgytVTitjeXaN4IPlXCGIw==
dependencies:
"@types/eslint-scope" "^3.7.0"
"@types/estree" "^0.0.47"
@@ -11999,7 +12162,7 @@ webpack@^5.39.1:
browserslist "^4.14.5"
chrome-trace-event "^1.0.2"
enhanced-resolve "^5.8.0"
- es-module-lexer "^0.4.0"
+ es-module-lexer "^0.6.0"
eslint-scope "5.1.1"
events "^3.2.0"
glob-to-regexp "^0.4.1"
@@ -12010,7 +12173,7 @@ webpack@^5.39.1:
neo-async "^2.6.2"
schema-utils "^3.0.0"
tapable "^2.1.1"
- terser-webpack-plugin "^5.1.1"
+ terser-webpack-plugin "^5.1.3"
watchpack "^2.2.0"
webpack-sources "^2.3.0"
@@ -12089,7 +12252,7 @@ which-boxed-primitive@^1.0.2:
is-string "^1.0.5"
is-symbol "^1.0.3"
-which-collection@^1.0.0:
+which-collection@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.1.tgz#70eab71ebbbd2aefaf32f917082fc62cdcb70906"
integrity sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==
@@ -12104,6 +12267,19 @@ which-module@^2.0.0:
resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"
integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=
+which-typed-array@^1.1.2:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.4.tgz#8fcb7d3ee5adf2d771066fba7cf37e32fe8711ff"
+ integrity sha512-49E0SpUe90cjpoc7BOJwyPHRqSAd12c10Qm2amdEZrJPCY2NDxaW01zHITrem+rnETY3dwrbH3UUrUwagfCYDA==
+ dependencies:
+ available-typed-arrays "^1.0.2"
+ call-bind "^1.0.0"
+ es-abstract "^1.18.0-next.1"
+ foreach "^2.0.5"
+ function-bind "^1.1.1"
+ has-symbols "^1.0.1"
+ is-typed-array "^1.1.3"
+
which@2.0.2, which@^2.0.1:
version "2.0.2"
resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
@@ -12222,6 +12398,11 @@ yallist@^2.1.2:
resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"
integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=
+yallist@^3.0.2:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"
+ integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==
+
yallist@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"